tdsops_t Derived Type

type, public :: tdsops_t

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.


Inherited by

type~~tdsops_t~~InheritedByGraph type~tdsops_t tdsops_t type~cuda_tdsops_t cuda_tdsops_t type~cuda_tdsops_t->type~tdsops_t type~dirps_t dirps_t type~dirps_t->type~tdsops_t der1st, der1st_sym, der2nd, der2nd_sym, stagder_v2p, stagder_p2v, interpl_v2p, interpl_p2v type~solver_t solver_t type~solver_t->type~dirps_t xdirps, ydirps, zdirps type~base_case_t base_case_t type~base_case_t->type~solver_t solver type~case_channel_t case_channel_t type~case_channel_t->type~base_case_t type~case_generic_t case_generic_t type~case_generic_t->type~base_case_t type~case_tgv_t case_tgv_t type~case_tgv_t->type~base_case_t

Components

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

public interface tdsops_t

  • public function tdsops_init(n_tds, delta, operation, scheme, bc_start, bc_end, stretch, stretch_correct, n_halo, from_to, sym, c_nu, nu0_nu) result(tdsops)

    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.

    Arguments

    Type IntentOptional 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 type(tdsops_t)

    return value of the function


Type-Bound Procedures

procedure, public :: stagder_1st

  • public subroutine stagder_1st(self, delta, scheme, from_to, bc_start, bc_end, sym)

    Arguments

    Type IntentOptional 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

procedure, public :: interpl_mid

  • public subroutine interpl_mid(self, scheme, from_to, bc_start, bc_end, sym)

    Arguments

    Type IntentOptional 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

procedure, public :: deriv_2nd

  • public subroutine deriv_2nd(self, delta, scheme, bc_start, bc_end, sym, c_nu, nu0_nu)

    Arguments

    Type IntentOptional 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

procedure, public :: deriv_1st

  • public subroutine deriv_1st(self, delta, scheme, bc_start, bc_end, sym)

    Arguments

    Type IntentOptional 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

procedure, public :: preprocess_thom

  • public subroutine preprocess_thom(self, b)

    Arguments

    Type IntentOptional Attributes Name
    class(tdsops_t), intent(inout) :: self
    real(kind=dp), intent(in), dimension(:) :: b

procedure, public :: preprocess_dist

  • public subroutine preprocess_dist(self, dist_b)

    Arguments

    Type IntentOptional Attributes Name
    class(tdsops_t), intent(inout) :: self
    real(kind=dp), intent(in), dimension(:) :: dist_b