[petsc-users] Makefile for mixed C++ and Fortran code

Satish Balay balay at mcs.anl.gov
Sun Jun 3 09:55:47 CDT 2018


Glad it works. Thanks for the update.

Satish

On Sun, 3 Jun 2018, Danyang Su wrote:

> 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.su at 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
> >>>>>
> >>
> 
> 
> 


More information about the petsc-users mailing list