| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| 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(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 |
Broadcast of a surface field to every node of its column,
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ColumnOperators3D_t), | intent(in) | :: | this | |||
| class(Scalar2D), | intent(in) | :: | qbar | |||
| class(Scalar3D), | intent(inout) | :: | q |
Column integral of a volume field,
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ColumnOperators3D_t), | intent(in) | :: | this | |||
| class(Scalar3D), | intent(in) | :: | q | |||
| class(Scalar2D), | intent(inout) | :: | qbar |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ColumnOperators3D_t), | intent(inout) | :: | this |
Binds the column operators to an extruded mesh and its geometry and, on Gauss-Lobatto nodes, precomputes the inverses of the two sweep matrices
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ColumnOperators3D_t), | intent(out) | :: | this | |||
| type(Lagrange), | intent(in), | target | :: | interp | ||
| type(Mesh3D), | intent(in) | :: | mesh | |||
| type(SEMHex), | intent(in), | target | :: | geometry |
Downward sweep: solves, layer by layer from the top of every column,
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ColumnOperators3D_t), | intent(in) | :: | this | |||
| class(Scalar3D), | intent(in) | :: | r | |||
| class(Scalar2D), | intent(in) | :: | qTop | |||
| class(Scalar3D), | intent(inout) | :: | q |
Upward sweep: solves, layer by layer from the bottom of every column,
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ColumnOperators3D_t), | intent(in) | :: | this | |||
| class(Scalar3D), | intent(in) | :: | r | |||
| class(Scalar2D), | intent(in) | :: | qBottom | |||
| class(Scalar3D), | intent(inout) | :: | q |
type,public :: ColumnOperators3D_t
integer :: N = 0
!! Polynomial degree of the solution
integer :: nLayers = 0
!! Layers per column, nz
integer :: nColumns = 0
!! Rank-local columns, which is the rank-local element count of the surface mesh
integer :: nElem = 0
!! Rank-local 3-D elements, nLayers*nColumns
logical :: lobatto = .false.
!! True when the control nodes are Gauss-Lobatto, which the sweeps require
type(Lagrange),pointer :: interp => null()
type(SEMHex),pointer :: geometry => null()
real(prec),pointer,contiguous,dimension(:,:) :: upInverse => null()
!! A^{-1} in SELF's matrix convention: (A^{-1} r)_l = sum_m upInverse(m,l) r_m
real(prec),pointer,contiguous,dimension(:,:) :: downInverse => null()
!! At^{-1} in the same convention
contains
procedure,public :: Init => Init_ColumnOperators3D_t
procedure,public :: Free => Free_ColumnOperators3D_t
procedure,public :: ColumnIntegral => ColumnIntegral_ColumnOperators3D_t
procedure,public :: Broadcast => Broadcast_ColumnOperators3D_t
procedure,public :: VerticalSweepUp => VerticalSweepUp_ColumnOperators3D_t
procedure,public :: VerticalSweepDown => VerticalSweepDown_ColumnOperators3D_t
endtype ColumnOperators3D_t