[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