Tridiagonal Solver Operators class.
Operator arrays are preprocessed in this class based on the arguments provided. dist_fw and dist_bw are used in the first phase of the distributed tridiagonal solver algorithm. dist_sa and dist_sc are used in the final substitution phase. See the kernels_dist.f90 files in the relevant backend folders. coeff arrays define the specific rules of building the RHS corresponding to the tridiagonal system to be solved, and used only in the first phase of the distributed algorithm when building the RHS. If a boundary condition is defined then coeffs_s and coeffs_e differ from coeffs array and define the RHS rule for the first and last 4 entries in the tridiagonal system (n_halo = 4).
This class does not know about the current rank or its relative location among other ranks. All the operator arrays here are used when executing a distributed tridiagonal solver phase one or two.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
real(kind=dp), | public, | allocatable, dimension(:) | :: | dist_fw |
fw/bw phase back subs. the auxiliary factors |
||
real(kind=dp), | public, | allocatable, dimension(:) | :: | dist_bw |
fw/bw phase back subs. the auxiliary factors |
||
real(kind=dp), | public, | allocatable, dimension(:) | :: | dist_sa |
fw/bw phase back subs. the auxiliary factors |
||
real(kind=dp), | public, | allocatable, dimension(:) | :: | dist_sc |
fw/bw phase back subs. the auxiliary factors |
||
real(kind=dp), | public, | allocatable, dimension(:) | :: | dist_af |
fw/bw phase back subs. the auxiliary factors |
||
real(kind=dp), | public, | allocatable, dimension(:) | :: | thom_f | |||
real(kind=dp), | public, | allocatable, dimension(:) | :: | thom_s | |||
real(kind=dp), | public, | allocatable, dimension(:) | :: | thom_w | |||
real(kind=dp), | public, | allocatable, dimension(:) | :: | thom_p | |||
real(kind=dp), | public, | allocatable | :: | stretch(:) | |||
real(kind=dp), | public, | allocatable | :: | stretch_correct(:) | |||
real(kind=dp), | public, | allocatable | :: | coeffs(:) | |||
real(kind=dp), | public, | allocatable | :: | coeffs_s(:,:) | |||
real(kind=dp), | public, | allocatable | :: | coeffs_e(:,:) | |||
real(kind=dp), | public | :: | alpha |
Compact scheme coeffs |
|||
real(kind=dp), | public | :: | a |
Compact scheme coeffs |
|||
real(kind=dp), | public | :: | b |
Compact scheme coeffs |
|||
real(kind=dp), | public | :: | c | = | 0._dp |
Compact scheme coeffs |
|
real(kind=dp), | public | :: | d | = | 0._dp |
Compact scheme coeffs |
|
logical, | public | :: | periodic | ||||
integer, | public | :: | n_tds |
Tridiagonal system size |
|||
integer, | public | :: | n_rhs |
Right-hand-side builder size |
|||
integer, | public | :: | move | = | 0 |
move between vertices and cell centres |
|
integer, | public | :: | n_halo |
number of halo points |
Constructor function for the tdsops_t class.
'n_tds', 'delta', 'operation', 'scheme', 'bc_start', and 'bc_end' are necessary arguments. The remaining arguments are optional.
'stretch' is for obtaining the correct derivations in a stretched mesh 'stretch_correct' is for correcting the second derivative with the first
'from_to' is necessary for interpolation and staggared derivative, and it can be 'v2p' or 'p2v'. If the specific region the instance is operating is not a boundary region, then 'bc_start' and 'bc_end' are BC_HALO.
'sym' is relevant when the BC is free-slip. If sym is .true. then it means the field we operate on is assumed to be an even function (symmetric, cos type) accross the boundary. If it is .false. it means the field is assumed to be an odd function (anti-symmetric, sin type).
'c_nu', 'nu0_nu' are relevant when operation is second order derivative and scheme is compact6-hyperviscous.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | n_tds |
Tridiagonal system size |
||
real(kind=dp), | intent(in) | :: | delta |
Grid spacing |
||
character(len=*), | intent(in) | :: | operation | |||
character(len=*), | intent(in) | :: | scheme | |||
integer, | intent(in) | :: | bc_start |
Boundary Cond. |
||
integer, | intent(in) | :: | bc_end |
Boundary Cond. |
||
real(kind=dp), | intent(in), | optional | :: | stretch(:) |
Stretching coefficients |
|
real(kind=dp), | intent(in), | optional | :: | stretch_correct(:) |
Stretch correction |
|
integer, | intent(in), | optional | :: | n_halo |
Number of halo cells |
|
character(len=*), | intent(in), | optional | :: | from_to |
'v2p' or 'p2v' |
|
logical, | intent(in), | optional | :: | sym |
(==npaire), only for Neumann BCs |
|
real(kind=dp), | intent(in), | optional | :: | c_nu |
params for hypervisc. |
|
real(kind=dp), | intent(in), | optional | :: | nu0_nu |
params for hypervisc. |
return value of the function
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(tdsops_t), | intent(inout) | :: | self | |||
real(kind=dp), | intent(in) | :: | delta | |||
character(len=*), | intent(in) | :: | scheme | |||
character(len=*), | intent(in) | :: | from_to | |||
integer, | intent(in) | :: | bc_start | |||
integer, | intent(in) | :: | bc_end | |||
logical, | intent(in), | optional | :: | sym |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(tdsops_t), | intent(inout) | :: | self | |||
character(len=*), | intent(in) | :: | scheme | |||
character(len=*), | intent(in) | :: | from_to | |||
integer, | intent(in) | :: | bc_start | |||
integer, | intent(in) | :: | bc_end | |||
logical, | intent(in), | optional | :: | sym |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(tdsops_t), | intent(inout) | :: | self | |||
real(kind=dp), | intent(in) | :: | delta | |||
character(len=*), | intent(in) | :: | scheme | |||
integer, | intent(in) | :: | bc_start | |||
integer, | intent(in) | :: | bc_end | |||
logical, | intent(in), | optional | :: | sym | ||
real(kind=dp), | intent(in), | optional | :: | c_nu | ||
real(kind=dp), | intent(in), | optional | :: | nu0_nu |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(tdsops_t), | intent(inout) | :: | self | |||
real(kind=dp), | intent(in) | :: | delta | |||
character(len=*), | intent(in) | :: | scheme | |||
integer, | intent(in) | :: | bc_start | |||
integer, | intent(in) | :: | bc_end | |||
logical, | intent(in), | optional | :: | sym |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(tdsops_t), | intent(inout) | :: | self | |||
real(kind=dp), | intent(in), | dimension(:) | :: | b |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(tdsops_t), | intent(inout) | :: | self | |||
real(kind=dp), | intent(in), | dimension(:) | :: | dist_b |