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

Lailai Zhu lailaizhu00 at gmail.com
Thu Apr 13 20:29:05 CDT 2017


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