Programming in *.f90 free format with PETSc

Satish Balay balay at mcs.anl.gov
Thu Aug 9 10:50:04 CDT 2007


> However, doing this gave me more errors. Hence, I've followed
> another

If you get errors with the recommended model - you sould report the
erros [not silently try something else - and then report erros with
this something else]

I can't help you anymore unless you can report problems with a
reproduceable test code that I can comiile locally.

Satish

On Thu, 9 Aug 2007, Ben Tay wrote:

> Hi Satish,
> 
> I am sorry if I have made you angry. I may have missed out some important
> points which you tried to highlight. I was converting several of my .F fixed
> format files to .f90 (or .F90) free format and some files which don't need
> declaration of PETSc type variable worked while some don't.
> 
> However, I must clarify that the .f90 or .F90 did not bother me after a while
> since in visual fortran or ifort, using the option -fpp enables the .f90 files
> to be preprocessed too. Of course, if .F90 was used, -fpp is not required.
> 
> In my sample file shown just now, I did not have any include statments in my
> subroutine. They're only present in the module 's section. Checking your prev.
> email, you indeed mention that the PETSc includes files must be in each and
> every subroutine. However, doing this  gave me more errors. Hence, I've
> followed another user (Paul T Bauman) 's recommendation which states that only
> preprocessed statements not inside the module needs to be placed inside the
> subroutine. With this, I only has 3 errors, which concerns PETSC_COMM_SELF,
> PETSC_NULL_INTEGER and PETSC_NULL_CHARACTER not having an explicit type. I
> figured out that using:
> 
> MPI_Comm PETSC_COMM_SELF
> 
> 
> will eliminate 1 error, although it was not required before. However, what
> about the other 2? Should I defined them as integer or character and give them
> a value using parameter? What value should I give them? You mention this in
> your prev email:
> 
> integer NORM_MAX
> parameter NORM_MAX=3
> 
> 
> You also give a template to follow. I also tried to cut and paste and use it
> but it gave lots of error. I had used it in visual fortran :
> 
> #define PETSC_AVOID_DECLARATIONS
> #include "include/finclude/petsc.h"
> #include "include/finclude/petscvec.h"
> #undef PETSC_AVOID_DECLARATIONS
> 
> module foobar
> 
> Vec abc
> 
> contains
> subroutine xyz()
> use foobar
> implicit none
> #include "include/finclude/petsc.h"
> #include "include/finclude/petscvec.h"
> #include "include/finclude/petscvec.h90"
> 
> Vec fbar
> 
> 
> end subroutine
> end module
> 
> As said above, upon removing the include files in the subroutine and the "use
> foobar" statement, everything's ok. You can give it a try too.
> 
> Lastly, I understand that you have been helping a lot of users and there's
> really a lot of stupid users around (I know I'm one of them ;-) ). Thank you
> for your patience.
> 
> Satish Balay wrote:
> > On Thu, 9 Aug 2007, Ben Tay wrote:
> > 
> >   
> > > Hi,
> > > 
> > > Guess I'm too used to typing .f90 ;-) .... I've changed it to .F90 before
> > > but
> > > perhaps at that time the error I got didn't disappear so I didn't bother
> > > after
> > > that.     
> > 
> > I'm sorry - but you can't keep silently discarding the sugestions we
> > make and keep reporting the same issues multiple times..
> > 
> > This is frustrating.
> > 
> >   
> > > I'm working in windows so I thought the capital letter doesn't really
> > > matter.
> > >     
> > 
> > I've indicated this before. Most compilers use .F90 for prerpocessed
> > free form.  And you keep indicating this is what you require. [Most
> > compilers don't preprocess .f90 files]
> > 
> >   
> > > Moreover, .f90 also works with my ifort in linux. Is it really
> > > important? If so, I'll change all my .f90 to F90. Thanks for highlighting.
> > > 
> > > Here's a sample code test.F90:
> > >     
> > 
> > I'll need a test code that can reproduce the problems you report.
> > 
> >   
> > > module global_data
> > > 
> > > implicit none
> > > 
> > > save
> > > 
> > > #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"
> > > #undef PETSC_AVOID_DECLARATIONS
> > > 
> > > integer :: size_x,size_y
> > > 
> > > Mat    A_mat      !  /* sparse matrix */
> > > 
> > > !MPI_Comm PETSC_COMM_SELF   -   commented out will result in error
> > > 
> > > contains
> > > 
> > > subroutine allo_var
> > >     
> > 
> > Again you are ignoring the sample template I sent you. You need to
> > include PETSc include files in every subroutine.
> > 
> > I'm sorry I can't repeat this anymore.
> > 
> > Satish
> > 
> >   
> > > !allocate memory for variables
> > > 
> > > integer :: status(2),ierr,k
> > > 
> > > size_x=10;size_y=10
> > > 
> > > call PetscInitialize(PETSC_NULL_CHARACTER,ierr)
> > > 
> > > call
> > > MatCreateSeqAIJ(PETSC_COMM_SELF,size_x*size_y,size_x*size_y,13,PETSC_NULL_INTEGER,A_mat,ierr)
> > > 
> > > end subroutine allo_var
> > > 
> > > end module global_data
> > > 
> > > I got "Error: This name does not have a type, and must have an explicit
> > > type.
> > > [PETSC_NULL_CHARACTER]". Same for PETSC_NULL_INTEGER and PETSC_COMM_SELF.
> > > 
> > > It was ok when I'm programming in fixed format.
> > > 
> > > Thanks
> > > 
> > > Satish Balay wrote:
> > >     
> > > > On Thu, 9 Aug 2007, Ben Tay wrote:
> > > > 
> > > >         
> > > > > Hi,
> > > > > 
> > > > > when I changed my global.F to global.f90,
> > > > >             
> > > > Any perticular reason why you keep using .f90 suffix even though I've
> > > > recommended using .F90 suffix [for preprocessed free form] a few
> > > > times?
> > > > 
> > > >         
> > > > > I was told that PETSC_COMM_SELF, PETSC_NULL_INTEGER and
> > > > > PETSC_NULL_CHARACTER does not have a type.
> > > > >             
> > > > Please send a test code that demonstrates this problem.
> > > > 
> > > > Satish
> > > > 
> > > > 
> > > >         
> > >     
> > 
> > 
> >   
> 
> 




More information about the petsc-users mailing list