need help with makefile

Satish Balay balay at mcs.anl.gov
Fri Mar 2 10:38:33 CST 2007



On Fri, 2 Mar 2007, P. Aaron Lott wrote:

> 
> Thanks for this information. I think I setup things almost right, but
> something is causing preprocessor to complain. The errors it is giving are
> referring to lines of my main program file that doesn't exist.

The line numbers refer to the temoprary file created - __unsteady_ex.F

You can run the following command to preserve the temporary file - and
check it for the correct line number

make unsteady_ex SKIP_RM=yes

Preprocessing fortran code with C compiler can have some false
positives.  For eg: if you have quotes in comments - then cpp can
misbehave.

> 
> I would appreciate any recommendations about how to fix this problem. I've
> list some of the details of my setup below.
> 
> Thanks,
> 
> -Aaron
> 
> 
> 
> e.g.
> 
> macbeth% make unsteady_ex
> /usr/local/mpich-1.2.5.2/bin/mpicc
> -I/Users/palott/research/codes/petsc/petsc-2.3.2-p8
> -I/Users/palott/research/codes/pets
> c/petsc-2.3.2-p8/bmake/darwin-mpich-g
> -I/Users/palott/research/codes/petsc/petsc-2.3.2-p8/include
> -I/usr/local/mpich-1.2.
> 5.2/include        -E -traditional-cpp __unsteady_ex.c | /usr/bin/grep -v '^
> *#' > __unsteady_ex.F
> /usr/local/mpich-1.2.5.2/bin/mpif90 -c  -I. -g  __unsteady_ex.F -o
> unsteady_ex.o
> "__unsteady_ex.F", line 965.2: 1515-019 (S) Syntax is incorrect.
> 
> 
> But there are only 207 lines in this file.....
> 
> 
> 
> In my current makefile I have
> 
> F90=mpif90
> F77=mpif77

These don't need to be specified as PETSc .F.o targets don't use them.. [and 
you don't want to redefine whats already configured inside PETSc]

> F77FLAGS= -C -g -qdpc -qautodbl=dbl4 -qinitauto -Wl,-framework -Wl,vecLib

This variable is not used by PETSc target

> FLAGS=  -C -g  -qdpc -qautodbl=dbl4 -qinitauto -Wl,-framework -Wl,vecLib

PETSc should already use a blas implementation - so no need to specify
vecLib again.

> 
> 
> EXENAME = unsteady_ex
> CMD:=EXENAME
> 
> SOBJS = mpi.o  quicksort.o routines.o binsort.o  coordinates.o comm_maps.o
> elements.o globaldata.o sem.o comp_inv.o d1ops.o maps.o  pardss.o dss.o
> stiffness.o convection.o Mass.o  pressure.o buildU.o  wind.o forcing.o
> boundary_cond.o  navier_stokes.o runge_kutta.o  out.o gmres.o pcg.o stream.o
> uzawa.o print_matrices.o projection.o bdf.o  stokes_solvers.o
> initialize_mpi.o unsteady_ex.o
> 
> 
> $(CMD)  : $(SOBJS)
> 	-${FLINKER} $(FLAGS) -o $(EXENAME) $(SOBJS)   $(PETSC_SYS_LIB)

No need to specify FLAGS here - as the default targets pick it up [in this case
the flags get added to FLINKER

Satish

> 
> 
> mpi.o		: ../Comm/mpi.f90 		;$(F90) $(FLAGS) -c
> ../Comm/mpi.f90
> gmres.o		: ../Solvers/gmres.f90		;$(F90) $(FLAGS) -c
> ../Solvers/gmres.f90
> etc.... for all the object files except unsteady_ex.o
> 
> unsteady_ex.F is my main program.
> 
> In the example you gave, ex1f.F would be the main program, and at the top of
> the file it would have the statement:
> 
> #include "include/finclude/petsc.h"
> 
> So in my case, I've put that in the top of my unsteady_ex.F
> 
> 
> 
> 
> 
> 
> On Mar 1, 2007, at 5:56 PM, Satish Balay wrote:
> 
> > The idea is to use a PETSc example makefile - and modify it
> > appropriately.
> > 
> > And with fortran codes - we require preprocessing [i.e source files
> > that call PETSc routines should be .F]
> > 
> > A minimal PETSc makefile is as follows:
> > ------------------------------------------------
> > CFLAGS           =
> > FFLAGS           =
> > CPPFLAGS         =
> > FPPFLAGS         =
> > CLEANFILES       =
> > 
> > include ${PETSC_DIR}/bmake/common/base
> > 
> > ex1f: ex1f.o  chkopts
> > 	-${FLINKER} -o ex1f ex1f.o  ${PETSC_KSP_LIB}
> > 	${RM} ex1f.o
> > -----------------------------------------------------
> > 
> > So you'll just make the change [with the variables CMD and SOBJS properly
> > defined]
> > 
> > ex1f -> $(CMD)
> > ex1f.o -> $(SOBJS)
> > 
> > Note: Necessary FFLAGS should already be PETSc config files. Some
> > additional flags can be specified with FFLAGS variable
> > 
> > Satish
> > 
> > 
> > On Thu, 1 Mar 2007, P. Aaron Lott wrote:
> > 
> > > 
> > > 
> > > Hi,
> > > 
> > > I have a fortran90 code and I would like to use petsc's  preconditioners
> > > inside of it. I'm having trouble setting up a makefile that will allow me
> > > include a petsc. It seems the problem is from the use of the
> > > c-preprocessor.
> > > 
> > > My old makefile looked something like this:
> > > 
> > > $(CMD)  : $(SOBJS)
> > > 	$(F90) $(FLAGS) -o $(EXENAME) $(SOBJS)
> > > 
> > > where SOBJ is a list of all of my object files.
> > > 
> > > I was hoping to be able to make a petsc object file and include it in this
> > > list. Is this possible? Is there a tutorial on how to get petsc setup
> > > inside
> > > of your existing code?
> > > 
> > > Thanks,
> > > 
> > > -Aaron
> > > 
> > > 
> > > 
> > > P. Aaron Lott
> > > Ph.D. Candidate
> > > 4239 Computer and Space Sciences Building
> > > University of Maryland
> > > College Park, MD 20742-4015
> > > 
> > > palott at ipst.umd.edu
> > > http://www.lcv.umd.edu/~palott
> > > Office: 301.405.4894
> > > Fax:      301.314.0827
> > > 
> > > 
> > 
> 
> P. Aaron Lott
> Ph.D. Candidate
> 4239 Computer and Space Sciences Building
> University of Maryland
> College Park, MD 20742-4015
> 
> palott at ipst.umd.edu
> http://www.lcv.umd.edu/~palott
> Office: 301.405.4894
> Fax:      301.314.0827
> 
> 




More information about the petsc-users mailing list