Hi Satish,

Your makefile works.

Please ignore the CGAL dependency. I just modified from CGAL example and it needs to be further optimized with the dependency that is required for the algorithm I use.

Thanks,

Danyang


On 18-06-02 02:51 PM, Satish Balay wrote:
Try the attached makefile. [with correct PETSC_DIR and PETSC_ARCH values]

If you have issues - send the complete makefiles - and complete error log..


On Sat, 2 Jun 2018, Danyang Su wrote:

Hi Barry,

For the code without PETSc, the rules used to compile the code with CGAL is
note: DLIB  can probably be simlified - and a fewof the options eliminated.


DLIB = -lstdc++ -lmetis -lm -L/usr/local/lib -rdynamic
-lstdc++ is setup by petsc

-lmetis can be a dependency of petsc - so care should be taken to have only one 
copy of metis

/usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so
Why are these here? Normally these are dependencies of gcc/gfortran [and PETSc 
configure picks up the correct ones]

/usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1
I have no idea what these are..

Satish

/usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread
-lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libCGAL_ImageIO.so.11.0.1
/usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so
/usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz
/usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so
/usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread
-Wl,-rpath,/usr/local/lib

FFLAGS = -O3 -I$(LIS_INC)
CXXFLAGS = -std=c++11 -O3 -I$(LIS_INC)

However, after adding these to the makefile using PETSc, I got error telling
me that all the petsc include files cannot be found.

../../solver/solver_snes_common.F90:27:0: fatal error: petscversion.h: No such
\
file or directory
  #include <petscversion.h>

../../solver/solver_snes_common.F90:27:0: fatal error: petscversion.h: No such
\
file or directory
  #include <petscversion.h>

Similar for other head files. However, If I change the file path to the the
full path, the code cannot compiled. Does the rule I use destroy the PETSc
relative path/

The make commands I use is

executable: $(SOURCES) chkopts
     -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS)  -o executable.out
$(SOURCES) ${PETSC_LIB} ${LIS_LIB} ${DLIB}
%.o:%.F90
     $(FLINKER) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@
%.o:%.cpp
     $(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@

Thanks,

Danyang

On 18-06-01 10:41 AM, Smith, Barry F. wrote:
     You need to determine exactly what flags are passed to the C++ compiler
     for your compile that works and make sure those same flags are used in
     "PETSc version" of the makefile. You could add the flags directly to the
     rule

%.o:%.cpp
     $(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@
    Barry


On Jun 1, 2018, at 12:37 PM, Danyang Su <danyang...@gmail.com> wrote:

Follow up:

With following command

executable: $(SOURCES) chkopts
     -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS)  -o executable.out
     $(SOURCES) ${PETSC_LIB}

%.o:%.F90
     $(FLINKER) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@
%.o:%.cpp
     $(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@

The compiler return error: no match function.

../../usg/cgal_triangulation_2d.cpp: In function ‘void
outputTriangulation2d(in\
t, const char*, int, const char*)’:
../../usg/cgal_triangulation_2d.cpp:485:20: error: no matching function for
cal\
l to ‘std::basic_ofstream<char>::open(std::string&)’
     out.open(strfile);

Thanks,


Danyang

On 18-06-01 10:07 AM, Danyang Su wrote:
Hi All,

My code needs to link to an external C++ library (CGAL). The code is
written in Fortran and I have already written interface to let Fortran
call C++ function. For the sequential version without PETSc, it can be
compiled without problem using the following makefile. The parallel
version without CGAL can also be compiled successfully. However, when I
tried to use PETSc together with CGAL library, I cannot compile the code.
My questions is: How can I modify the makefile? Do I need to reconfigure
PETSc with special flags? All the makefile samples are shown below.

#makefile for sequential version

FC = gfortran
#FC = ifort
CXX = g++ -std=c++11

DLIB = -lstdc++ -lm -L/usr/local/lib -rdynamic /usr/local/lib/libmpfr.so
/usr/local/lib/libgmp.so /usr/local/lib/libCGAL_ImageIO.so.11.0.1
/usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so
/usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz
/usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1
/usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so
-lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libmpfr.so
/usr/local/lib/libgmp.so /usr/local/lib/libboost_thread.so
/usr/local/lib/libboost_system.so -lpthread -Wl,-rpath,/usr/local/lib

FFLAGS = -O3
CXXFLAGS = -O3

FPPFLAGS =  -DUSECGAL

SRC =./../../

SOURCES = $(SRC)usg/math_common.o\
     $(SRC)usg/geometry_definition.o\
     $(SRC)usg/cgal_common.o\

...

executable: $(SOURCES)
     $(FC) $(FFLAGS) $(FPPFLAGS) -o executable.out $(SOURCES) ${LIS_LIB}
$(DLIB)
%.o:%.F90
     $(FC) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@
%.o:%.cpp
     $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@


#makefile for parallel version with PETSc, without CGAL

#FC = ifort
#FC = gfortran

DLIB = -lm

FFLAGS = -O3

FPPFLAGS =  -DUSEPETSC

SRC =./../../

SOURCES = $(SRC)usg/math_common.o\
     $(SRC)usg/geometry_definition.o\
     $(SRC)usg/cgal_common.o\

...

executable: $(SOURCES) chkopts
     -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS)  -o executable.out
     $(SOURCES) ${PETSC_LIB}


#makefile for parallel version with PETSc, with CGAL, CANNOT work

#FC = ifort
#FC = gfortran

DLIB = -lm

FFLAGS = -O3

FPPFLAGS =  -DUSEPETSC -DUSECGAL

SRC =./../../

SOURCES = $(SRC)usg/math_common.o\
     $(SRC)usg/geometry_definition.o\
     $(SRC)usg/cgal_common.o\

...

executable: $(SOURCES) chkopts
     -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS)  -o executable.out
     $(SOURCES) ${PETSC_LIB}

%.o:%.F90
     $(FC) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@
%.o:%.cpp
     $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@


Thanks,

Danyang



Reply via email to