Programming in *.f90 free format with PETSc
Satish Balay
balay at mcs.anl.gov
Tue Aug 7 11:42:01 CDT 2007
On Tue, 7 Aug 2007, 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
Using PETSC_AVOID_DECLARATIONS inside a subroutine is WRONG. You
need declarations in subroutines [for ex: PETSC_NULL etc..]
>
> ....
>
> 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
Remove include/finclude/petscmat.h90 from the above. the *.h90 files are
not required here. I'll fix them to do no harm.
> 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
The file should be temp.F90
If you still have errors, send the complete code so that I can reproduce
the erorrs.
Satish
>
> 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> 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