Vector2D Derived Type

type, public, extends(Vector2D_t) :: Vector2D


Inherits

type~~vector2d~~InheritsGraph type~vector2d Vector2D c_ptr c_ptr type~vector2d->c_ptr interior_gpu, boundary_gpu, extBoundary_gpu, avgBoundary_gpu, boundaryNormal_gpu type~vector2d_t Vector2D_t type~vector2d->type~vector2d_t type~self_dataobj SELF_DataObj type~vector2d_t->type~self_dataobj type~lagrange Lagrange type~self_dataobj->type~lagrange interp type~metadata Metadata type~self_dataobj->type~metadata meta EquationParser EquationParser type~self_dataobj->EquationParser eqn type~lagrange_t Lagrange_t type~lagrange->type~lagrange_t

Contents

Source Code


Components

TypeVisibilityAttributesNameInitial
integer, public :: M
integer, public :: N
integer(kind=c_size_t), public :: alloc_avgBoundary =0
integer(kind=c_size_t), public :: alloc_boundary =0
integer(kind=c_size_t), public :: alloc_boundaryNormal =0
integer(kind=c_size_t), public :: alloc_extBoundary =0
integer(kind=c_size_t), public :: alloc_interior =0
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:):: avgBoundary
type(c_ptr), public :: avgBoundary_gpu
character(len=3), public :: backend ="gpu"
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:):: boundary
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:):: boundaryNormal

High-water-mark backing store for the arrays above (AMR Stage 6b; see SELF_DataPool). The public members are pointers remapped onto the leading part of these pools at the exact logical shape, so every extent, stride and shape() is unchanged while Resize can reuse the storage across an adaptation epoch. Nothing should index the pools directly.

type(c_ptr), public :: boundaryNormal_gpu

Bytes currently allocated for each device buffer, so Resize can reuse them (Stage 6b).

type(c_ptr), public :: boundary_gpu
type(EquationParser), public, allocatable:: eqn(:)
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:):: extBoundary
type(c_ptr), public :: extBoundary_gpu
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:):: interior
type(c_ptr), public :: interior_gpu
type(Lagrange), public, pointer:: interp
type(Metadata), public, allocatable:: meta(:)
integer, public :: nElem
integer, public :: nVar
real(kind=prec), public, pointer, contiguous:: pool_avgBoundary(:)=> null()
real(kind=prec), public, pointer, contiguous:: pool_boundary(:)=> null()
real(kind=prec), public, pointer, contiguous:: pool_boundaryNormal(:)=> null()
real(kind=prec), public, pointer, contiguous:: pool_extBoundary(:)=> null()
real(kind=prec), public, pointer, contiguous:: pool_interior(:)=> null()

Type-Bound Procedures

procedure, public :: AverageSides => AverageSides_Vector2D

procedure, public :: BoundaryInterp => BoundaryInterp_Vector2D

generic, public :: Divergence => Divergence_Vector2D_t, Divergence_Vector2D

  • public subroutine Divergence_Vector2D_t(this, df)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D_t), intent(in) :: this
    real(kind=prec) :: df(1:this%N+1,1:this%N+1,1:this%nelem,1:this%nvar)
  • public subroutine Divergence_Vector2D(this, df)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D), intent(in) :: this
    type(c_ptr), intent(inout) :: df

procedure, private :: Divergence_Vector2D

  • public subroutine Divergence_Vector2D(this, df)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D), intent(in) :: this
    type(c_ptr), intent(inout) :: df

procedure, public :: Free => Free_Vector2D

  • public subroutine Free_Vector2D(this)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D), intent(inout) :: this

generic, public :: Gradient => Gradient_Vector2D_t, Gradient_Vector2D

  • public subroutine Gradient_Vector2D_t(this, df)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D_t), intent(in) :: this
    real(kind=prec), intent(out) :: df(1:this%N+1,1:this%N+1,1:this%nelem,1:this%nvar,1:2,1:2)
  • public subroutine Gradient_Vector2D(this, df)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D), intent(in) :: this
    type(c_ptr), intent(inout) :: df

procedure, private :: Gradient_Vector2D

  • public subroutine Gradient_Vector2D(this, df)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D), intent(in) :: this
    type(c_ptr), intent(inout) :: df

generic, public :: GridInterp => GridInterp_Vector2D_t, GridInterp_Vector2D

  • public subroutine GridInterp_Vector2D_t(this, f)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D_t), intent(in) :: this
    real(kind=prec), intent(out) :: f(1:this%M+1,1:this%M+1,1:this%nelem,1:this%nvar,1:2)
  • public subroutine GridInterp_Vector2D(this, f)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D), intent(inout) :: this
    type(c_ptr), intent(inout) :: f

procedure, private :: GridInterp_Vector2D

  • public subroutine GridInterp_Vector2D(this, f)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D), intent(inout) :: this
    type(c_ptr), intent(inout) :: f

procedure, public :: Init => Init_Vector2D

  • public subroutine Init_Vector2D(this, interp, nVar, nElem)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D), intent(out) :: this
    type(Lagrange), intent(in), target:: interp
    integer, intent(in) :: nVar
    integer, intent(in) :: nElem

procedure, public :: MapArrays => MapArrays_Vector2D_t

  • public subroutine MapArrays_Vector2D_t(this, Np, nVar, nElem)

    Size the backing pools for (Np,nVar,nElem) and remap the public arrays onto them at the exact logical shape. See SELF_DataPool for why this is done with pointer remapping rather than by over-allocating the element dimension.

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D_t), intent(inout) :: this
    integer, intent(in) :: Np
    integer, intent(in) :: nVar
    integer, intent(in) :: nElem

procedure, public :: Resize => Resize_Vector2D

  • public subroutine Resize_Vector2D(this, interp, nVar, nElem)

    Rebind to a new element count, reusing host pools and device buffers where they fit. Deliberately does NOT call UpdateDevice: Init uploads freshly zeroed arrays, which is pure waste in the adaptive loop because the fields are rewritten immediately after.

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D), intent(inout) :: this
    type(Lagrange), intent(in), target:: interp
    integer, intent(in) :: nVar
    integer, intent(in) :: nElem

procedure, public :: SetDescription => SetDescription_DataObj

  • public subroutine SetDescription_DataObj(this, ivar, description)

    Set the description of the ivar-th variable

    Arguments

    TypeIntentOptionalAttributesName
    class(SELF_DataObj), intent(inout) :: this
    integer, intent(in) :: ivar
    character, intent(in) :: description

generic, public :: SetEquation => SetEquation_DataObj, SetEquation_Vector2D_t

  • public subroutine SetEquation_DataObj(this, ivar, eqnChar)

    Sets the equation parser for the ivar-th variable

    Arguments

    TypeIntentOptionalAttributesName
    class(SELF_DataObj), intent(inout) :: this
    integer, intent(in) :: ivar
    character, intent(in) :: eqnChar
  • public subroutine SetEquation_Vector2D_t(this, idir, ivar, eqnChar)

    Sets the equation parser for the idir direction and ivar-th variable

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D_t), intent(inout) :: this
    integer, intent(in) :: idir
    integer, intent(in) :: ivar
    character, intent(in) :: eqnChar

procedure, public :: SetName => SetName_DataObj

  • public subroutine SetName_DataObj(this, ivar, name)

    Set the name of the ivar-th variable

    Arguments

    TypeIntentOptionalAttributesName
    class(SELF_DataObj), intent(inout) :: this
    integer, intent(in) :: ivar
    character, intent(in) :: name

procedure, public :: SetUnits => SetUnits_DataObj

  • public subroutine SetUnits_DataObj(this, ivar, units)

    Set the units of the ivar-th variable

    Arguments

    TypeIntentOptionalAttributesName
    class(SELF_DataObj), intent(inout) :: this
    integer, intent(in) :: ivar
    character, intent(in) :: units

procedure, public :: UpdateDevice => UpdateDevice_Vector2D

procedure, public :: UpdateHost => UpdateHost_Vector2D

generic, public :: WriteHDF5 => WriteHDF5_MPI_Vector2D_t, WriteHDF5_Vector2D_t

  • public subroutine WriteHDF5_MPI_Vector2D_t(this, fileId, group, elemoffset, nglobalelem)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D_t), intent(in) :: this
    integer(kind=HID_T), intent(in) :: fileId
    character, intent(in) :: group
    integer, intent(in) :: elemoffset
    integer, intent(in) :: nglobalelem
  • public subroutine WriteHDF5_Vector2D_t(this, fileId, group)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D_t), intent(in) :: this
    integer(kind=HID_T), intent(in) :: fileId
    character, intent(in) :: group

Source Code

  type,extends(Vector2D_t),public :: Vector2D
    character(3) :: backend = "gpu"
    type(c_ptr) :: interior_gpu
    type(c_ptr) :: boundary_gpu
    type(c_ptr) :: extBoundary_gpu
    type(c_ptr) :: avgBoundary_gpu
    type(c_ptr) :: boundaryNormal_gpu
    !! Bytes currently allocated for each device buffer, so Resize can reuse them (Stage 6b).
    integer(c_size_t) :: alloc_interior = 0
    integer(c_size_t) :: alloc_boundary = 0
    integer(c_size_t) :: alloc_extBoundary = 0
    integer(c_size_t) :: alloc_avgBoundary = 0
    integer(c_size_t) :: alloc_boundaryNormal = 0

  contains

    procedure,public :: Init => Init_Vector2D
    procedure,public :: Resize => Resize_Vector2D
    procedure,public :: Free => Free_Vector2D

    procedure,public :: UpdateHost => UpdateHost_Vector2D
    procedure,public :: UpdateDevice => UpdateDevice_Vector2D

    procedure,public :: BoundaryInterp => BoundaryInterp_Vector2D
    procedure,public :: AverageSides => AverageSides_Vector2D

    generic,public :: GridInterp => GridInterp_Vector2D
    procedure,private :: GridInterp_Vector2D

    generic,public :: Gradient => Gradient_Vector2D
    procedure,private :: Gradient_Vector2D

    generic,public :: Divergence => Divergence_Vector2D
    procedure,private :: Divergence_Vector2D

  endtype Vector2D