[petsc-users] Regarding FormFunction in the SNES class

Barry Smith bsmith at petsc.dev
Wed Oct 7 20:33:47 CDT 2020



> On Oct 7, 2020, at 5:02 PM, baikadi pranay <pranayreddy865 at gmail.com> wrote:
> 
> Thank you Barry for the response. Just to make sure I understood correctly, I do not need to define any attributes to the vectors and it is automatically taken care of (both the intent as well as the allocatable attributes). Am I correct?
> For the second question, my subroutine should look like this:
> FormFunction(snes,x,f,3,INTEGER_VARIABLE,ierr)
> Is this correct?
> 

   For example src/snes/tutorials/ex1f.F90

      subroutine FormFunction(snes,x,f,dummy,ierr)
      use petscsnes
      implicit none

      SNES     snes
      Vec      x,f
      PetscErrorCode ierr
      integer dummy(*)


> Thank you in advance.
> Best Regards,
> Pranay.
> 
>> 
> On Wed, Oct 7, 2020 at 1:26 PM Barry Smith <bsmith at petsc.dev <mailto:bsmith at petsc.dev>> wrote:
> 
> 
> > On Oct 7, 2020, at 1:41 PM, baikadi pranay <pranayreddy865 at gmail.com <mailto:pranayreddy865 at gmail.com>> wrote:
> > 
> > Hello,
> > I have a few questions regarding FormFunction when using the SNES solvers. I am using Fortran90. 
> > 
> > 1) I went through the example (ex1f.F90) provided in the documentation that uses Newton method to solve a two-variable system. In the subroutine FormFunction, the first argument is an input vector (x). However in the code, no attributes are specified saying that it is an input argument for the subroutine (i.e. intent attribute is not specified). Is this automatically taken care of or should I be defining the intent attribute in my code ?
> 
>   We don't currently provide attributes for our Fortran stubs, so it is best if you do not mark them in your subroutines. 
> 
>   Yes the x is input only and the f is output only.
> 
> > Also, should I use the "allocatable" attribute when defining the vector x?
> 
>    I am pretty sure no.
> 
> > Please comment similarly on the output vector f as well.
> > 2) Should the ctx argument of the subroutine FormFunction be defined as "PETSC_NULL_INTEGER"?
> 
>    The context is how you convey additional information into FormFunction(). Should you choose to not use it then in your function you can declare it as a integer and simply not use it. If you are calling your FormFunction() from Fortran then just pass a meaningless integer as that argument.  PETSC_NULL_INTEGER is for call PETSc functions that take integer array arguments that you are not supplying.
> 
>   Barry
> 
> 
> 
> > 
> > Please let me know if you need any further information. 
> > 
> > Thank you.
> > Best Regards,
> > Pranay.
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20201007/d5c165d4/attachment.html>


More information about the petsc-users mailing list