[petsc-users] including petsc Mat and Vec in a user-defined structure in FORTRAN

Barry Smith bsmith at mcs.anl.gov
Thu Apr 13 21:34:37 CDT 2017


  VecCreate() does not take a size argument (perhaps you mean VecCreateSeq()?) hence when you try to get the size it is confused.

   Barry



> On Apr 13, 2017, at 8:29 PM, Lailai Zhu <lailaizhu00 at gmail.com> wrote:
> 
> Dear petsc developers and users,
> 
> I am currently using fortran version of petsc 3.7.*.
> I tried to define Mat or Vec variables in a user-defined structure like below,
> 
> module myMOD
>    type, public :: myStr
>       Mat A
>       Vec x,b
>    end type myStr
> 
> interface myStr !! user-defined constructor
>   module procedure new_Str
> end interface myStr
> 
> contains
>    function new_Str()
>         type(myStr) :: new_Str
>         call  VecCreate(petsc_comm_self,10,new_str%x,ierr)
>         call  vecgetsize(new_str%x, size, ierr)
>    end function new_Str
> 
> end module myMOD
> 
> 
> then i define an instance of myStr in another file like below
> 
> type(myStr),save :: mystr1
> mystr1 = myStr()
> 
> It compiles and the veccreate executes without problem, however error occurs on the vecgetsize part,
> telling me
> 
> [0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------
> [0]PETSC ERROR: Null argument, when expecting valid pointer
> [0]PETSC ERROR: Null Object: Parameter # 1
> [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting.
> [0]PETSC ERROR: Petsc Release Version 3.7.5, Jan, 01, 2017
> [0]PETSC ERROR: ./nek5000 on a pet3.7.5-mpich-intel named quququ by user Thu Apr 13 21:11:05 2017
> [0]PETSC ERROR: Configure options --with-c++-support --with-shared-libraries=1 --known-mpi-shared-libraries=1 --with-batch=0 --with-mpi=1 --with-debugging=1 -download-fblaslapack=1 --download-blacs=1 --download-scalapack=1 --download-plapack=1 --with-cc=mpicc --with-cxx=mpicxx --with-fc=mpifort --download-dscpack=1
> [0]PETSC ERROR: #1 VecGetSize() line 667 in /home/user/petsc/3.7.5/mpich_intel/src/vec/vec/interface/vector.c
> 
> It seems to me that the petsc vector x belong to the derived type variable is recognized in the veccreate subroutine, but
> not known by the vecgetsize one. Is there way to work this around? or perhaps one cannot use petsc objects in such ways?
> Thanks in advance,
> 
> best,
> lailai



More information about the petsc-users mailing list