Hi, Thanks Paul. I finally realised where my problem lies. It's becos I forgot to add -fpp to the ifort option. It's working now.
However, why can't I include #include "include/finclude/petscmat.h90" in the declaration? It seems to cause some conflicts... Thanks Paul T. Bauman wrote: > Hi Ben, > > Here is the format I use in my .f90 modules. Note I do not know what > the standard is, but this "style" has worked with ifort, gfortran, g95 > and Visual Studio (so I'm told). > module IAmAModule > > implicit none > > private !(you don't need this if you don't want it) > > #PREPROCESSING STATEMENTS HERE (these will be seen by all subroutines > contained in the module) > > public :: whatever needs to be public > > integer :: declare variables you want in the module > > contains > > subroutine IAmASubroutine (note this format works for a subroutine not > in a module > > implicit none > > #PREPROCESSING STATEMENTS NOT INCLUDED IN THE MODULE > > variable declarations > > code here... > > end subroutine IAmASubroutine > > end module IAmAModule > > It looks like in your case below, the preprocessing statements are > before the program - they must be inside the program. Put them after > implicit none and before any variable declarations (in case you use a > PETSc type variable). > > Good Luck, > > Paul > > Ben Tay wrote: >> Hi, >> >> I can compile and run with visual fortran by putting all the >> declarations inside a subroutine e.g. >> >> module ada >> >> ... >> >> subroutine ddd >> >> >> #define PETSC_AVOID_DECLARATIONS >> #include "include/finclude/ petsc.h" >> <other includes> >> #undef PETSC_AVOID_DECLARATIONS >> >> .... >> >> end subroutine ddd >> >> >> end module ada >> >> However, on my school's server which uses ifort, I get errors both >> using your way and my way e.g. >> >> >> #define PETSC_AVOID_DECLARATIONS >> #include "include/finclude/petsc.h" >> #include "include/finclude/petscvec.h" >> #include "include/finclude/petscmat.h" >> #include "include/finclude/petscksp.h" >> #include "include/finclude/petscpc.h" >> #include "include/finclude/petscmat.h90" >> #undef PETSC_AVOID_DECLARATIONS >> >> program test >> >> implicit none >> >> integer :: x,y >> >> Vec test_vec >> >> x=1 >> >> print *, x >> >> end program test >> >> >> I compile using >> >> ifort -r8 -132 -fPIC -g -c -static-libcxa -O3 >> -I/lsftmp/g0306332/petsc-2.3.3-p0 >> -I/lsftmp/g0306332/petsc-2.3.3-p0/bmake/atlas3 >> -I/lsftmp/g0306332/petsc-2.3.3-p0/include >> -I/lsftmp/g0306332/petsc-2.3.3-p0/externalpackages/hypre- >> 2.0.0/atlas3/include -I/lsftmp/g0306332/mpich2/include temp.f90 >> >> and get the error msg: >> >> fortcom: Warning: Bad # preprocessor line >> fortcom: Warning: Bad # preprocessor line >> fortcom: Warning: Bad # preprocessor line >> fortcom: Warning: Bad # preprocessor line >> fortcom: Warning: Bad # preprocessor line >> fortcom: Warning: Bad # preprocessor line >> fortcom: Warning: Bad # preprocessor line >> fortcom: Warning: Bad # preprocessor line >> >> fortcom: Error: temp.f90, line 18: Syntax error, found IDENTIFIER >> 'TEST_VEC' when expecting one of: => = . ( : % >> Vec test_vec >> ----^ >> fortcom: Error: temp.f90, line 18: This name does not have a type, >> and must have an explicit type. [VEC] >> Vec test_vec >> ^ >> fortcom: Error: temp.f90, line 18: This name does not have a type, >> and must have an explicit type. [TEST_VEC] >> Vec test_vec >> ----^ >> compilation aborted for temp.f90 (code 1) >> >> I also tried shifting the declarations after the "program test" line >> but it also failed. There is no problem if I changed the code to >> fixed format. >> >> Thanks >> >> >> >> >> On 8/6/07, *Satish Balay* <balay at mcs.anl.gov >> <mailto:balay at mcs.anl.gov>> wrote: >> >> This is incorrect usage. >> >> If you are getting errors with the correct usage, send us the error >> messages, with your code, and we can sugest fixes. >> >> - one issue could be >> >> > > #define PETSC_AVOID_DECLARATIONS >> > > #include "include/finclude/petsc.h" >> > > #include "include/finclude/petscvec.h90" <--- This should be >> removed from here.. >> > > <other includes> >> > > #undef PETSC_AVOID_DECLARATIONS >> > > >> > > moudle foobar >> > > <other module stuff> >> > > end module >> >> >> Satish >> >> On Mon, 6 Aug 2007, Ben Tay wrote: >> >> > Hi, >> > >> > I tried to use >> > >> > #define PETSC_AVOID_DECLARATIONS >> > #include "include/finclude/petsc.h" >> > <other includes> >> > #undef PETSC_AVOID_DECLARATIONS >> > >> > >> > module ada >> > ... >> > >> > subroutine .... >> > >> > end module ada >> > >> > but the compiler says that the module is placed in the wrong >> order. Anyway, I >> > just move the top 4 lines into the subroutine instead and it >> worked. Thanks >> > >> > module ada >> > >> > ... >> > >> > subroutine ddd >> > >> > #define PETSC_AVOID_DECLARATIONS >> > #include "include/finclude/petsc.h" >> > <other includes> >> > #undef PETSC_AVOID_DECLARATIONS >> > >> > .... >> > >> > end subroutine ddd >> > >> > >> > >> > >> > Satish Balay wrote: >> > > you can use .F90 suffix for free-from preprocesed code. [or use >> > > compiler options to force it always use free-form] >> > > >> > > And when using fortran modules use the following organization: >> > > >> > > >> > > #define PETSC_AVOID_DECLARATIONS >> > > #include "include/finclude/petsc.h" >> > > <other includes> >> > > #undef PETSC_AVOID_DECLARATIONS >> > > >> > > moudle foobar >> > > <other module stuff> >> > > end module >> > > >> > > subroutine xyz() >> > > use foobar >> > > implicit none >> > > #include "include/finclude/petsc.h" >> > > <other includes> >> > > <code> >> > > end subroutine >> > > <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >> > > >> > > Satish >> > > >> > > On Mon, 6 Aug 2007, Ben Tay wrote: >> > > >> > > >> > > > Hi, >> > > > >> > > > I've no problem writing out codes in fortran fixed format >> with PETSc. >> > > > However, >> > > > is it possible to do it in fortran free format as well? >> > > > >> > > > I'm using visual fortran and there's error. >> > > > >> > > > original : >> > > > >> > > > test.F >> > > > >> > > > module global_data >> > > > >> > > > implicit none >> > > > >> > > > save >> > > > >> > > > #include "include/finclude/petsc.h" >> > > > #include "include/finclude/petscvec.h" >> > > > #include "include/finclude/petscmat.h" >> > > > #include "include/finclude/petscksp.h" >> > > > #include "include/finclude/petscpc.h" >> > > > #include "include/finclude/petscmat.h90" >> > > > >> > > > Vec xx,b_rhs >> > > > >> > > > .... >> > > > >> > > > How can I change this code to fortran free format *.f90? >> > > > >> > > > Thanks >> > > > >> > > > >> > > > >> > > >> > > >> > > >> > >> > >> >> > >
