SELF_Vector_2D Module


Uses

  • module~~self_vector_2d~2~~UsesGraph module~self_vector_2d~2 SELF_Vector_2D module~self_constants SELF_Constants module~self_vector_2d~2->module~self_constants module~self_vector_2d_t SELF_Vector_2D_t module~self_vector_2d~2->module~self_vector_2d_t iso_c_binding iso_c_binding module~self_vector_2d~2->iso_c_binding module~self_gpuinterfaces SELF_GPUInterfaces module~self_vector_2d~2->module~self_gpuinterfaces module~self_gpu SELF_GPU module~self_vector_2d~2->module~self_gpu module~self_constants->iso_c_binding iso_fortran_env iso_fortran_env module~self_constants->iso_fortran_env module~self_vector_2d_t->module~self_constants module~self_vector_2d_t->iso_c_binding HDF5 HDF5 module~self_vector_2d_t->HDF5 module~self_datapool SELF_DataPool module~self_vector_2d_t->module~self_datapool FEQParse FEQParse module~self_vector_2d_t->FEQParse module~self_metadata SELF_Metadata module~self_vector_2d_t->module~self_metadata module~self_data SELF_Data module~self_vector_2d_t->module~self_data module~self_lagrange~3 SELF_Lagrange module~self_vector_2d_t->module~self_lagrange~3 module~self_hdf5 SELF_HDF5 module~self_vector_2d_t->module~self_hdf5 module~self_gpuinterfaces->iso_c_binding module~self_gpuinterfaces->module~self_gpu module~self_gpu->iso_c_binding module~self_gpu_enums~2 SELF_GPU_enums module~self_gpu->module~self_gpu_enums~2 module~self_datapool->module~self_constants module~self_metadata->HDF5 module~self_metadata->module~self_hdf5 module~self_data->module~self_constants module~self_data->iso_c_binding module~self_data->HDF5 module~self_data->FEQParse module~self_data->module~self_metadata module~self_data->module~self_lagrange~3 module~self_data->module~self_hdf5 module~self_lagrange~3->module~self_constants module~self_lagrange~3->iso_c_binding module~self_lagrange~3->iso_fortran_env module~self_lagrange_t SELF_Lagrange_t module~self_lagrange~3->module~self_lagrange_t module~self_hdf5->module~self_constants module~self_hdf5->iso_fortran_env module~self_hdf5->HDF5 mpi mpi module~self_hdf5->mpi module~self_gpu_enums~2->iso_c_binding module~self_lagrange_t->module~self_constants module~self_lagrange_t->iso_c_binding module~self_lagrange_t->iso_fortran_env module~self_lagrange_t->HDF5 module~self_lagrange_t->module~self_hdf5 module~self_supportroutines SELF_SupportRoutines module~self_lagrange_t->module~self_supportroutines module~self_quadrature SELF_Quadrature module~self_lagrange_t->module~self_quadrature module~self_supportroutines->module~self_constants module~self_supportroutines->iso_fortran_env module~self_quadrature->module~self_constants module~self_quadrature->iso_fortran_env

Contents


Derived Types

type, public, extends(Vector2D_t) :: Vector2D

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
procedure, private :: Divergence_Vector2D
procedure, public :: Free => Free_Vector2D
generic, public :: Gradient => Gradient_Vector2D_t, Gradient_Vector2D
procedure, private :: Gradient_Vector2D
generic, public :: GridInterp => GridInterp_Vector2D_t, GridInterp_Vector2D
procedure, private :: GridInterp_Vector2D
procedure, public :: Init => Init_Vector2D
procedure, public :: MapArrays => MapArrays_Vector2D_t
procedure, public :: Resize => Resize_Vector2D
procedure, public :: SetDescription => SetDescription_DataObj
generic, public :: SetEquation => SetEquation_DataObj, SetEquation_Vector2D_t
procedure, public :: SetName => SetName_DataObj
procedure, public :: SetUnits => SetUnits_DataObj
procedure, public :: UpdateDevice => UpdateDevice_Vector2D
procedure, public :: UpdateHost => UpdateHost_Vector2D
generic, public :: WriteHDF5 => WriteHDF5_MPI_Vector2D_t, WriteHDF5_Vector2D_t

Subroutines

public subroutine AverageSides_Vector2D(this)

Arguments

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

public subroutine BoundaryInterp_Vector2D(this)

Arguments

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

public subroutine Divergence_Vector2D(this, df)

Arguments

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

public subroutine EnsureDeviceBuffers_Vector2D(this)

Grow each device buffer to hold the current logical array, reusing the existing allocation when the bytes already fit (AMR Stage 6b). A device pointer carries no shape, so only byte capacity has to be tracked.

Arguments

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

public subroutine Free_Vector2D(this)

Arguments

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

public subroutine Gradient_Vector2D(this, df)

Arguments

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

public subroutine GridInterp_Vector2D(this, f)

Arguments

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

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

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

public subroutine UpdateDevice_Vector2D(this)

Arguments

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

public subroutine UpdateHost_Vector2D(this)

Arguments

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