Programming in *.f90 free format with PETSc

Ben Tay zonexo at gmail.com
Tue Aug 7 11:20:50 CDT 2007


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
>>     > > >
>>     > > >
>>     > > >
>>     > >
>>     > >
>>     > >
>>     >
>>     >
>>
>>
>
>




More information about the petsc-users mailing list