[petsc-users] Declaring struct to represent field for dof > 1 for DM in Fortran

Matthew Knepley knepley at gmail.com
Tue Jul 10 07:07:57 CDT 2012


On Tue, Jul 10, 2012 at 5:39 AM, TAY wee-beng <zonexo at gmail.com> wrote:

>  Hi,
>
> I read in the manual in page 50 that it's recommended to declare struct to
> represent field for dof > 1 for DM.
>

We mean C struct. C makes it easy (just use a pointer type cast). Fortran
makes it hard unfortunately.

   Matt


> I'm using Fortran and for testing, I use dof = 1 and write as:
>
> *type field
>
>     **PetscScalar** u        (or real(8) :: u)
>
> end type field
>
> type(field), pointer :: field_u(:,:)*
>
> When I tried to use :
>
> *call DMDAVecGetArrayF90(da,x_local,field_u,ierr)*
>
> I got the error : There is no matching specific subroutine for this
> generic subroutine call.   [DMDAVECGETARRAYF90]
>
> The da, x_local has been defined with the specific DM routines. It worked
> if I use :
>
> *PetscScalar,pointer :: array(:,:) and
>
> call DMDAVecGetArrayF90(da,x_local,array,ierr)*
>
> May I know what did I do wrong?
>
>
> --
> Yours sincerely,
>
> TAY wee-beng
>
>


-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120710/fe2ab241/attachment.html>


More information about the petsc-users mailing list