[petsc-users] TAO setup with modules in Fortran 90

Barry Smith bsmith at mcs.anl.gov
Tue Oct 10 14:08:19 CDT 2017


  I don't understand. Are you trying to have the same code that works with 3.7 and 3.8? If so, DO NOT! You will need to write code for 3.8 and just use it (by all means compare the numerical runs with code that works with 3.7 to make sure nothing is broken but only that).

  If you are having trouble getting something working properly with 3.8 then send a same code that you think should work and doesn't and we'll help you.

   Barry

> On Oct 10, 2017, at 6:59 PM, Randy Michael Churchill <rchurchi at pppl.gov> wrote:
> 
> Thanks, I have the rosenbrock1f.F90 example compiling and running now with both 3.7 and 3.8. Transferring this setup knowledge to my codebase, I ran into a problem, since I setup my module a little differently than the rosenbrock1f example. In the specification part of the module, I put a Tao object, e.g using the rosebrock1f as an example I do:
> 
> #include <petsc/finclude/petscdef.h>
> module commondat
> PetscReal :: alpha
> PetscInt :: n
> Tao :: taotest
> end module commondat
> 
> The compiler throws errors on this however. :
> commondat.F90(22): error #5082: Syntax error, found '::' when expecting one of: => = . [ % ( :
>       Tao :: taotest
> ----------^
> commondat.F90(22): error #6274: This statement must not appear in the specification part of a module.
>       Tao :: taotest
> ------^
> commondat.F90(22): error #6793: The POINTER attribute is required.   [TAO]
>       Tao :: taotest
> ------^
> 
> What is the right way to use this? Do I have to define a type within the module for the Tao object to be in? Or is this an issue in 3.7 when using only the petscdef.h instead of petsc.h?
> 
> And thanks for the advice on moving to Petsc 3.8, we work with some Petsc people, who know our code base, so will discuss with them on working towards that.
> 
> On Fri, Oct 6, 2017 at 5:59 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
> 
> > On Oct 6, 2017, at 11:18 PM, Randy Michael Churchill <rchurchi at pppl.gov> wrote:
> >
> > So if I'm limited to petsc 3.7.6 for reasons of eventually using within an existing, larger codebase that depends on 3.7.6, is it possible to use TAO with a user-defined module in Fortran90 using 3.7.6?
> 
>   You should really pus this "existing, larger codebase" to transition to PETSc 3.8 sooner, rather than later. Especially for developments in Fortran it will make life better for everyone. We are always willing to help users, once they have read the changes information, with information to make transitioning to the latest PETSc version easy. For any parts of the code in C, transitioning from 3.7 to 3.8 should be really simple.
> 
>    Barry
> 
> >
> > I had tried the various forms of includes listed in the documentation, e.g. see below. I think I now realize this is an issue with the petsc installation on Edison, it does not seem to have the petsctao module in the library file (confirmed using nm -D on the library file). If I do the same include and use statement but with, for example, petscmat, it compiles fine.
> >
> > I built v3.8 from source, and the petsctao module is in the library file, and now the make works.
> >
> > commondat.F90
> > module commondat
> > #include <petsc/finclude/petscdef.h>
> >       use petsc
> >       PetscReal    ::    alpha
> >       PetscInt     ::    n
> > end module commondat
> >
> > program rosenbrock1f
> > #include <petsc/finclude/petsctaodef.h>
> >       use petsctao
> >       use commondat
> >
> >
> >
> >
> > On Fri, Oct 6, 2017 at 7:54 AM, Matthew Knepley <knepley at gmail.com> wrote:
> > On Fri, Oct 6, 2017 at 7:36 AM, Barry Smith <bsmith at mcs.anl.gov> wrote:
> >
> >    Randy,
> >
> >     First you absolutely must use version 3.8 or the master development copy. We improved and simplified dramatically how Fortran (90) is utilized from PETSc.
> >
> >     Note that there is only one simple set of include files and modules for Fortran; see the newest documentation.
> >
> >
> > http://www.mcs.anl.gov/petsc/petsc-master/docs/manualpages/Sys/UsingFortran.html
> >
> >    Matt
> >
> >
> >    Barry
> >
> >
> > > On Oct 5, 2017, at 11:48 PM, Randy Michael Churchill <rchurchi at pppl.gov> wrote:
> > >
> > > A simple setup question with TAO: if I were to convert the rosenbrock1f.F90 example to use a module instead of common structures, how would I setup the include statements? I've tried various combinations (using petscXXXdef.h, petscXXX.h, petscXXX.h90, along with use petscXXX), but seem to get errors with all.
> > >
> > > file:rosenbrock1f.h:
> > > module commondat
> > >       PetscReal    ::    alpha
> > >       PetscInt     ::    n
> > > end module commondat
> > >
> > > file:rosenbrock1f.90:
> > > program rosenbrock1f
> > > !!include statements??? which and where???!!!
> > > use commondat
> > > ...
> > >
> > > subroutine FormFunctionGradient(tao, X, f, G, dummy, ierr)
> > >      use commondat
> > >      implicit none
> > >      ...
> > >
> > > (https://www.mcs.anl.gov/petsc/petsc-dev/src/tao/unconstrained/examples/tutorials/rosenbrock1f.F90.html)
> >
> >
> >
> >
> > --
> > What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
> > -- Norbert Wiener
> >
> > https://www.cse.buffalo.edu/~knepley/
> >
> >
> >
> > --
> > R. Michael Churchill
> 
> 
> 
> 
> -- 
> R. Michael Churchill



More information about the petsc-users mailing list