module petscdmdef use petscvecdef use petscmatdef #include <../ftn/dm/petscall.h> #include <../ftn/dm/petscspace.h> #include <../ftn/dm/petscdualspace.h> type ttPetscTabulation sequence PetscInt K PetscInt Nr PetscInt Np PetscInt Nb PetscInt Nc PetscInt cdim PetscReal2d, pointer :: T(:) end type ttPetscTabulation type tPetscTabulation type(ttPetscTabulation), pointer :: ptr end type tPetscTabulation end module petscdmdef ! ---------------------------------------------- module petscdm use petscmat use petscdmdef #include <../src/dm/ftn-mod/petscdm.h90> #include <../src/dm/ftn-mod/petscdt.h90> #include <../ftn/dm/petscall.h90> #include <../ftn/dm/petscspace.h90> #include <../ftn/dm/petscdualspace.h90> interface PetscDSGetTabulationSetSizes subroutine PetscDSGetTabulationSetSizes(ds,i, tab,ierr) import tPetscDS, ttPetscTabulation PetscErrorCode ierr type(ttPetscTabulation) tab PetscDS ds PetscInt i end subroutine end interface interface PetscDSGetTabulationSetPointers subroutine PetscDSGetTabulationSetPointers(ds,i, T,ierr) import tPetscDS, ttPetscTabulation,tPetscReal2d PetscErrorCode ierr type(tPetscReal2d), pointer :: T(:) PetscDS ds PetscInt i end subroutine end interface interface PetscDSGetTabulation module procedure PetscDSGetTabulation end interface interface PetscDSRestoreTabulation module procedure PetscDSRestoreTabulation end interface contains #include <../ftn/dm/petscall.hf90> #include <../ftn/dm/petscspace.hf90> #include <../ftn/dm/petscdualspace.hf90> Subroutine PetscDSGetTabulation(ds,tab,ierr) PetscErrorCode ierr PetscTabulation, pointer :: tab(:) PetscDS ds PetscInt Nf, i call PetscDSGetNumFields(ds, Nf, ierr) allocate(tab(Nf)) do i=1,Nf allocate(tab(i)%ptr) CHKMEMQ call PetscDSGetTabulationSetSizes(ds, i, tab(i)%ptr, ierr) CHKMEMQ allocate(tab(i)%ptr%T(tab(i)%ptr%K+1)) call PetscDSGetTabulationSetPointers(ds, i, tab(i)%ptr%T, ierr) CHKMEMQ enddo End Subroutine PetscDSGetTabulation Subroutine PetscDSRestoreTabulation(ds,tab,ierr) PetscErrorCode ierr PetscTabulation, pointer :: tab(:) PetscDS ds PetscInt Nf, i call PetscDSGetNumFields(ds, Nf, ierr) do i=1,Nf deallocate(tab(i)%ptr%T) deallocate(tab(i)%ptr) enddo deallocate(tab) End Subroutine PetscDSRestoreTabulation end module petscdm ! ---------------------------------------------- module petscdmdadef use petscdmdef use petscaodef use petscpfdef #include #include #include <../ftn/dm/petscdmda.h> end module petscdmdadef module petscdmda use petscdm use petscdmdadef #include <../src/dm/ftn-mod/petscdmda.h90> #include <../ftn/dm/petscdmda.h90> contains #include <../ftn/dm/petscdmda.hf90> end module petscdmda ! ---------------------------------------------- module petscdmplex use petscdm use petscdmdef #include #include #include #include <../src/dm/ftn-mod/petscdmplex.h90> #include <../ftn/dm/petscfv.h> #include <../ftn/dm/petscdmplex.h> #include <../ftn/dm/petscdmplextransform.h> #include <../ftn/dm/petscfv.h90> #include <../ftn/dm/petscdmplex.h90> #include <../ftn/dm/petscdmplextransform.h90> contains #include <../ftn/dm/petscfv.hf90> #include <../ftn/dm/petscdmplex.hf90> #include <../ftn/dm/petscdmplextransform.hf90> end module petscdmplex ! ---------------------------------------------- module petscdmstag use petscdmdef #include #include <../ftn/dm/petscdmstag.h> #include <../ftn/dm/petscdmstag.h90> contains #include <../ftn/dm/petscdmstag.hf90> end module petscdmstag ! ---------------------------------------------- module petscdmswarm use petscdm use petscdmdef #include #include <../ftn/dm/petscdmswarm.h> #include <../src/dm/ftn-mod/petscdmswarm.h90> #include <../ftn/dm/petscdmswarm.h90> contains #include <../ftn/dm/petscdmswarm.hf90> end module petscdmswarm ! ---------------------------------------------- module petscdmcomposite use petscdm #include #include <../src/dm/ftn-mod/petscdmcomposite.h90> #include <../ftn/dm/petscdmcomposite.h90> end module petscdmcomposite ! ---------------------------------------------- module petscdmforest use petscdm #include #include <../ftn/dm/petscdmforest.h> #include <../ftn/dm/petscdmforest.h90> end module petscdmforest ! ---------------------------------------------- module petscdmnetwork use petscdm #include #include <../ftn/dm/petscdmnetwork.h> #include <../ftn/dm/petscdmnetwork.h90> contains #include <../ftn/dm/petscdmnetwork.hf90> end module petscdmnetwork ! ---------------------------------------------- module petscdmadaptor use petscdm use petscdmdef ! use petscsnes #include #include <../ftn/dm/petscdmadaptor.h> !#include <../ftn/dm/petscdmadaptor.h90> contains !#include <../ftn/dm/petscdmadaptor.hf90> end module petscdmadaptor