SELF_ColumnOperators_3D Module

Device backend of the column operators (see SELF_ColumnOperators_3D_t). Every operator reads and writes the device copies (interior_gpu) of its fields and the device copy of the covariant basis, and moves no data between host and device. The caller uploads the inputs (UpdateDevice) and downloads the outputs (UpdateHost) when it needs them on the host.


Uses

  • module~~self_columnoperators_3d~~UsesGraph module~self_columnoperators_3d SELF_ColumnOperators_3D module~self_geometry_3d SELF_Geometry_3D module~self_columnoperators_3d->module~self_geometry_3d module~self_scalar_2d SELF_Scalar_2D module~self_columnoperators_3d->module~self_scalar_2d module~self_columnoperators_3d_t SELF_ColumnOperators_3D_t module~self_columnoperators_3d->module~self_columnoperators_3d_t module~self_scalar_3d SELF_Scalar_3D module~self_columnoperators_3d->module~self_scalar_3d module~self_constants SELF_Constants module~self_columnoperators_3d->module~self_constants module~self_gpu~2 SELF_GPU module~self_columnoperators_3d->module~self_gpu~2 iso_c_binding iso_c_binding module~self_columnoperators_3d->iso_c_binding module~self_mesh_3d SELF_Mesh_3D module~self_columnoperators_3d->module~self_mesh_3d module~self_lagrange~3 SELF_Lagrange module~self_columnoperators_3d->module~self_lagrange~3 module~self_geometry_3d->module~self_scalar_3d module~self_geometry_3d->module~self_constants module~self_geometry_3d->module~self_mesh_3d module~self_geometry_3d->module~self_lagrange~3 module~self_vector_3d SELF_Vector_3D module~self_geometry_3d->module~self_vector_3d module~self_data SELF_Data module~self_geometry_3d->module~self_data module~self_supportroutines SELF_SupportRoutines module~self_geometry_3d->module~self_supportroutines module~self_tensor_3d SELF_Tensor_3D module~self_geometry_3d->module~self_tensor_3d module~self_scalar_2d->module~self_constants module~self_scalar_2d->module~self_gpu~2 module~self_scalar_2d->iso_c_binding module~self_gpuinterfaces SELF_GPUInterfaces module~self_scalar_2d->module~self_gpuinterfaces module~self_scalar_2d_t SELF_Scalar_2D_t module~self_scalar_2d->module~self_scalar_2d_t module~self_columnoperators_3d_t->module~self_geometry_3d module~self_columnoperators_3d_t->module~self_scalar_2d module~self_columnoperators_3d_t->module~self_scalar_3d module~self_columnoperators_3d_t->module~self_constants module~self_columnoperators_3d_t->module~self_mesh_3d module~self_columnoperators_3d_t->module~self_lagrange~3 iso_fortran_env iso_fortran_env module~self_columnoperators_3d_t->iso_fortran_env module~self_scalar_3d->module~self_constants module~self_scalar_3d->module~self_gpu~2 module~self_scalar_3d->iso_c_binding module~self_scalar_3d->module~self_gpuinterfaces module~self_scalar_3d_t SELF_Scalar_3D_t module~self_scalar_3d->module~self_scalar_3d_t module~self_constants->iso_c_binding module~self_constants->iso_fortran_env module~self_gpu~2->iso_c_binding module~self_gpu_enums~2 SELF_GPU_enums module~self_gpu~2->module~self_gpu_enums~2 module~self_mesh_3d->module~self_gpu~2 module~self_mesh_3d->iso_c_binding module~self_mesh_3d_t SELF_Mesh_3D_t module~self_mesh_3d->module~self_mesh_3d_t module~self_lagrange~3->module~self_constants module~self_lagrange~3->module~self_gpu~2 module~self_lagrange~3->iso_c_binding module~self_lagrange_t SELF_Lagrange_t module~self_lagrange~3->module~self_lagrange_t module~self_lagrange~3->iso_fortran_env module~self_lagrange_t->module~self_constants module~self_lagrange_t->iso_c_binding module~self_lagrange_t->module~self_supportroutines module~self_lagrange_t->iso_fortran_env HDF5 HDF5 module~self_lagrange_t->HDF5 module~self_hdf5 SELF_HDF5 module~self_lagrange_t->module~self_hdf5 module~self_quadrature SELF_Quadrature module~self_lagrange_t->module~self_quadrature module~self_vector_3d->module~self_constants module~self_vector_3d->module~self_gpu~2 module~self_vector_3d->iso_c_binding module~self_vector_3d->module~self_gpuinterfaces module~self_vector_3d_t SELF_Vector_3D_t module~self_vector_3d->module~self_vector_3d_t module~self_data->module~self_constants module~self_data->iso_c_binding module~self_data->module~self_lagrange~3 module~self_data->HDF5 module~self_metadata SELF_Metadata module~self_data->module~self_metadata module~self_data->module~self_hdf5 FEQParse FEQParse module~self_data->FEQParse module~self_supportroutines->module~self_constants module~self_supportroutines->iso_fortran_env module~self_gpuinterfaces->module~self_gpu~2 module~self_gpuinterfaces->iso_c_binding module~self_tensor_3d->module~self_constants module~self_tensor_3d->module~self_gpu~2 module~self_tensor_3d->iso_c_binding module~self_tensor_3d->iso_fortran_env module~self_tensor_3d_t SELF_Tensor_3D_t module~self_tensor_3d->module~self_tensor_3d_t module~self_scalar_2d_t->module~self_constants module~self_scalar_2d_t->iso_c_binding module~self_scalar_2d_t->module~self_lagrange~3 module~self_scalar_2d_t->module~self_data module~self_scalar_2d_t->HDF5 module~self_scalar_2d_t->module~self_metadata module~self_scalar_2d_t->module~self_hdf5 module~self_scalar_2d_t->FEQParse module~self_datapool SELF_DataPool module~self_scalar_2d_t->module~self_datapool module~self_scalar_3d_t->module~self_constants module~self_scalar_3d_t->iso_c_binding module~self_scalar_3d_t->module~self_lagrange~3 module~self_scalar_3d_t->module~self_data module~self_scalar_3d_t->HDF5 module~self_scalar_3d_t->module~self_metadata module~self_scalar_3d_t->module~self_hdf5 module~self_scalar_3d_t->FEQParse module~self_scalar_3d_t->module~self_datapool module~self_gpu_enums~2->iso_c_binding module~self_mesh_3d_t->module~self_constants module~self_mesh_3d_t->iso_c_binding module~self_mesh_3d_t->module~self_lagrange~3 module~self_mesh_3d_t->module~self_supportroutines module~self_mesh_3d_t->HDF5 module~self_mesh_3d_t->module~self_hdf5 module~self_mesh_3d_t->module~self_quadrature module~self_mesh_2d_t SELF_Mesh_2D_t module~self_mesh_3d_t->module~self_mesh_2d_t module~self_domaindecomposition~2 SELF_DomainDecomposition module~self_mesh_3d_t->module~self_domaindecomposition~2 module~self_mesh SELF_Mesh module~self_mesh_3d_t->module~self_mesh module~self_metadata->HDF5 module~self_metadata->module~self_hdf5 module~self_hdf5->module~self_constants module~self_hdf5->iso_fortran_env module~self_hdf5->HDF5 mpi mpi module~self_hdf5->mpi module~self_vector_3d_t->module~self_constants module~self_vector_3d_t->iso_c_binding module~self_vector_3d_t->module~self_lagrange~3 module~self_vector_3d_t->module~self_data module~self_vector_3d_t->HDF5 module~self_vector_3d_t->module~self_metadata module~self_vector_3d_t->module~self_hdf5 module~self_vector_3d_t->FEQParse module~self_vector_3d_t->module~self_datapool module~self_quadrature->module~self_constants module~self_quadrature->iso_fortran_env module~self_tensor_3d_t->module~self_constants module~self_tensor_3d_t->iso_c_binding module~self_tensor_3d_t->module~self_lagrange~3 module~self_tensor_3d_t->module~self_data module~self_tensor_3d_t->HDF5 module~self_tensor_3d_t->module~self_metadata module~self_tensor_3d_t->module~self_hdf5 module~self_tensor_3d_t->FEQParse module~self_tensor_3d_t->module~self_datapool module~self_datapool->module~self_constants module~self_mesh_2d_t->module~self_constants module~self_mesh_2d_t->iso_c_binding module~self_mesh_2d_t->module~self_lagrange~3 module~self_mesh_2d_t->module~self_supportroutines module~self_mesh_2d_t->HDF5 module~self_mesh_2d_t->module~self_hdf5 module~self_mesh_2d_t->module~self_quadrature module~self_mesh_2d_t->module~self_domaindecomposition~2 module~self_mesh_2d_t->module~self_mesh module~self_domaindecomposition~2->iso_c_binding module~self_domaindecomposition~2->iso_fortran_env module~self_domaindecomposition~2->mpi module~self_domaindecomposition_t SELF_DomainDecomposition_t module~self_domaindecomposition~2->module~self_domaindecomposition_t module~self_mesh->module~self_constants module~self_mesh->iso_c_binding module~self_mesh->module~self_domaindecomposition~2 module~self_domaindecomposition_t->module~self_constants module~self_domaindecomposition_t->iso_c_binding module~self_domaindecomposition_t->module~self_lagrange~3 module~self_domaindecomposition_t->module~self_supportroutines module~self_domaindecomposition_t->mpi

Contents


Interfaces

interface

  • public subroutine ColumnBroadcast_3D_gpu(qbar, q, N, nLayers, nColumns, nvar) bind(c,name="0")

    Arguments

    TypeIntentOptionalAttributesName
    type(c_ptr), value:: qbar
    type(c_ptr), value:: q
    integer(kind=c_int), value:: N
    integer(kind=c_int), value:: nLayers
    integer(kind=c_int), value:: nColumns
    integer(kind=c_int), value:: nvar

interface

  • public subroutine ColumnIntegral_3D_gpu(q, dxds, qWeights, qbar, N, nLayers, nColumns, nvar) bind(c,name="0")

    Arguments

    TypeIntentOptionalAttributesName
    type(c_ptr), value:: q
    type(c_ptr), value:: dxds
    type(c_ptr), value:: qWeights
    type(c_ptr), value:: qbar
    integer(kind=c_int), value:: N
    integer(kind=c_int), value:: nLayers
    integer(kind=c_int), value:: nColumns
    integer(kind=c_int), value:: nvar

interface

  • public subroutine VerticalSweep_3D_gpu(aInv, r, inflow, q, N, nLayers, nColumns, nvar, upward) bind(c,name="0")

    Arguments

    TypeIntentOptionalAttributesName
    type(c_ptr), value:: aInv
    type(c_ptr), value:: r
    type(c_ptr), value:: inflow
    type(c_ptr), value:: q
    integer(kind=c_int), value:: N
    integer(kind=c_int), value:: nLayers
    integer(kind=c_int), value:: nColumns
    integer(kind=c_int), value:: nvar
    integer(kind=c_int), value:: upward

Derived Types

type, public, extends(ColumnOperators3D_t) :: ColumnOperators3D

Components

TypeVisibilityAttributesNameInitial
integer, public :: N =0

Polynomial degree of the solution

real(kind=prec), public, pointer, contiguous, dimension(:,:):: downInverse=> null()

At^{-1} in the same convention

type(c_ptr), public :: downInverse_gpu =c_null_ptr
type(SEMHex), public, pointer:: geometry=> null()
type(Lagrange), public, pointer:: interp=> null()
logical, public :: lobatto =.false.

True when the control nodes are Gauss-Lobatto, which the sweeps require

integer, public :: nColumns =0

Rank-local columns, which is the rank-local element count of the surface mesh

integer, public :: nElem =0

Rank-local 3-D elements, nLayers*nColumns

integer, public :: nLayers =0

Layers per column, nz

real(kind=prec), public, pointer, contiguous, dimension(:,:):: upInverse=> null()

A^{-1} in SELF's matrix convention: (A^{-1} r)_l = sum_m upInverse(m,l) r_m

type(c_ptr), public :: upInverse_gpu =c_null_ptr

Type-Bound Procedures

procedure, public :: Broadcast => Broadcast_ColumnOperators3D
procedure, public :: ColumnIntegral => ColumnIntegral_ColumnOperators3D
procedure, public :: Free => Free_ColumnOperators3D
procedure, public :: Init => Init_ColumnOperators3D
procedure, public :: VerticalSweepDown => VerticalSweepDown_ColumnOperators3D
procedure, public :: VerticalSweepUp => VerticalSweepUp_ColumnOperators3D

Subroutines

public subroutine Broadcast_ColumnOperators3D(this, qbar, q)

Device version of Broadcast_ColumnOperators3D_t

Arguments

TypeIntentOptionalAttributesName
class(ColumnOperators3D), intent(in) :: this
class(Scalar2D), intent(in) :: qbar
class(Scalar3D), intent(inout) :: q

public subroutine ColumnIntegral_ColumnOperators3D(this, q, qbar)

Device version of ColumnIntegral_ColumnOperators3D_t

Arguments

TypeIntentOptionalAttributesName
class(ColumnOperators3D), intent(in) :: this
class(Scalar3D), intent(in) :: q
class(Scalar2D), intent(inout) :: qbar

public subroutine Free_ColumnOperators3D(this)

Arguments

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

public subroutine Init_ColumnOperators3D(this, interp, mesh, geometry)

Init_ColumnOperators3D_t, followed by a copy of the two sweep inverses to the device

Arguments

TypeIntentOptionalAttributesName
class(ColumnOperators3D), intent(out) :: this
type(Lagrange), intent(in), target:: interp
type(Mesh3D), intent(in) :: mesh
type(SEMHex), intent(in), target:: geometry

public subroutine VerticalSweepDown_ColumnOperators3D(this, r, qTop, q)

Device version of VerticalSweepDown_ColumnOperators3D_t

Arguments

TypeIntentOptionalAttributesName
class(ColumnOperators3D), intent(in) :: this
class(Scalar3D), intent(in) :: r
class(Scalar2D), intent(in) :: qTop
class(Scalar3D), intent(inout) :: q

public subroutine VerticalSweepUp_ColumnOperators3D(this, r, qBottom, q)

Device version of VerticalSweepUp_ColumnOperators3D_t

Arguments

TypeIntentOptionalAttributesName
class(ColumnOperators3D), intent(in) :: this
class(Scalar3D), intent(in) :: r
class(Scalar2D), intent(in) :: qBottom
class(Scalar3D), intent(inout) :: q