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

Reply via email to