m_base_backend Module


Uses

  • module~~m_base_backend~~UsesGraph module~m_base_backend m_base_backend module~m_allocator m_allocator module~m_base_backend->module~m_allocator module~m_common m_common module~m_base_backend->module~m_common module~m_field m_field module~m_base_backend->module~m_field module~m_mesh m_mesh module~m_base_backend->module~m_mesh module~m_poisson_fft m_poisson_fft module~m_base_backend->module~m_poisson_fft module~m_tdsops m_tdsops module~m_base_backend->module~m_tdsops mpi mpi module~m_base_backend->mpi module~m_allocator->module~m_common module~m_allocator->module~m_field module~m_allocator->module~m_mesh iso_fortran_env iso_fortran_env module~m_allocator->iso_fortran_env module~m_field->module~m_common module~m_mesh->module~m_common module~m_mesh->module~m_field module~m_mesh->mpi module~m_mesh->iso_fortran_env module~m_mesh_content m_mesh_content module~m_mesh->module~m_mesh_content module~m_poisson_fft->module~m_common module~m_poisson_fft->module~m_field module~m_poisson_fft->module~m_mesh module~m_poisson_fft->module~m_tdsops module~m_tdsops->module~m_common module~m_tdsops->iso_fortran_env module~m_mesh_content->module~m_common

Used by

  • module~~m_base_backend~~UsedByGraph module~m_base_backend m_base_backend module~m_base_case m_base_case module~m_base_case->module~m_base_backend module~m_solver m_solver module~m_base_case->module~m_solver module~m_case_channel m_case_channel module~m_case_channel->module~m_base_backend module~m_case_channel->module~m_base_case module~m_case_channel->module~m_solver module~m_case_generic m_case_generic module~m_case_generic->module~m_base_backend module~m_case_generic->module~m_base_case module~m_case_generic->module~m_solver module~m_case_tgv m_case_tgv module~m_case_tgv->module~m_base_backend module~m_case_tgv->module~m_base_case module~m_case_tgv->module~m_solver module~m_cuda_backend m_cuda_backend module~m_cuda_backend->module~m_base_backend module~m_omp_backend m_omp_backend module~m_omp_backend->module~m_base_backend module~m_solver->module~m_base_backend module~m_time_integrator m_time_integrator module~m_solver->module~m_time_integrator module~m_vector_calculus m_vector_calculus module~m_solver->module~m_vector_calculus module~m_time_integrator->module~m_base_backend module~m_vector_calculus->module~m_base_backend program~xcompact xcompact program~xcompact->module~m_base_backend program~xcompact->module~m_base_case program~xcompact->module~m_case_channel program~xcompact->module~m_case_generic program~xcompact->module~m_case_tgv program~xcompact->module~m_cuda_backend program~xcompact->module~m_omp_backend

Abstract Interfaces

abstract interface

  • public subroutine transeq_ders(self, du, dv, dw, u, v, w, dirps)

    transeq equation obtains the derivatives direction by direction, and the exact algorithm used to obtain these derivatives are decided at runtime. Backend implementations are responsible from directing calls to transeq_ders into the correct algorithm.

    Arguments

    Type IntentOptional Attributes Name
    class(base_backend_t) :: self
    class(field_t), intent(inout) :: du
    class(field_t), intent(inout) :: dv
    class(field_t), intent(inout) :: dw
    class(field_t), intent(in) :: u
    class(field_t), intent(in) :: v
    class(field_t), intent(in) :: w
    type(dirps_t), intent(in) :: dirps

abstract interface

  • public subroutine tds_solve(self, du, u, tdsops)

    transeq equation obtains the derivatives direction by direction, and the exact algorithm used to obtain these derivatives are decided at runtime. Backend implementations are responsible from directing calls to tds_solve to the correct algorithm.

    Arguments

    Type IntentOptional Attributes Name
    class(base_backend_t) :: self
    class(field_t), intent(inout) :: du
    class(field_t), intent(in) :: u
    class(tdsops_t), intent(in) :: tdsops

abstract interface

  • public subroutine reorder(self, u_, u, direction)

    reorder subroutines are straightforward, they rearrange data into our specialist data structure so that regardless of the direction tridiagonal systems are solved efficiently and fast.

    Arguments

    Type IntentOptional Attributes Name
    class(base_backend_t) :: self
    class(field_t), intent(inout) :: u_
    class(field_t), intent(in) :: u
    integer, intent(in) :: direction

abstract interface

  • public subroutine sum_intox(self, u, u_)

    sum9into3 subroutine combines all the directional velocity derivatives into the corresponding x directional fields.

    Arguments

    Type IntentOptional Attributes Name
    class(base_backend_t) :: self
    class(field_t), intent(inout) :: u
    class(field_t), intent(in) :: u_

abstract interface

  • public subroutine vecadd(self, a, x, b, y)

    adds two vectors together: y = ax + by

    Arguments

    Type IntentOptional Attributes Name
    class(base_backend_t) :: self
    real(kind=dp), intent(in) :: a
    class(field_t), intent(in) :: x
    real(kind=dp), intent(in) :: b
    class(field_t), intent(inout) :: y

abstract interface

  • public function scalar_product(self, x, y) result(s)

    Calculates the scalar product of two input fields

    Arguments

    Type IntentOptional Attributes Name
    class(base_backend_t) :: self
    class(field_t), intent(in) :: x
    class(field_t), intent(in) :: y

    Return Value real(kind=dp)

abstract interface

  • public subroutine field_ops(self, f, a)

    Scales or shifts a field by a

    Arguments

    Type IntentOptional Attributes Name
    class(base_backend_t) :: self
    class(field_t), intent(in) :: f
    real(kind=dp), intent(in) :: a

abstract interface

  • public function field_reduce(self, f) result(s)

    Reduces field to a scalar, example: volume integral

    Arguments

    Type IntentOptional Attributes Name
    class(base_backend_t) :: self
    class(field_t), intent(in) :: f

    Return Value real(kind=dp)

abstract interface

  • public subroutine field_max_mean(self, max_val, mean_val, f, enforced_data_loc)

    Obtains maximum and mean values in a field

    Arguments

    Type IntentOptional Attributes Name
    class(base_backend_t) :: self
    real(kind=dp), intent(out) :: max_val
    real(kind=dp), intent(out) :: mean_val
    class(field_t), intent(in) :: f
    integer, intent(in), optional :: enforced_data_loc

abstract interface

  • public subroutine field_set_face(self, f, c_start, c_end, face)

    A field is a subdomain with a rectangular cuboid shape. It has 6 faces, and these faces are either a subdomain boundary or a global domain boundary based on the location of the subdomain. This subroutine allows us to set any of these faces to a value, 'c_start' and 'c_end' for faces at opposite sides. 'face' is one of X_FACE, Y_FACE, Z_FACE from common.f90

    Arguments

    Type IntentOptional Attributes Name
    class(base_backend_t) :: self
    class(field_t), intent(inout) :: f
    real(kind=dp), intent(in) :: c_start
    real(kind=dp), intent(in) :: c_end
    integer, intent(in) :: face

abstract interface

  • public subroutine copy_data_to_f(self, f, data)

    Copy the specialist data structure from device or host back to a regular 3D data array in host memory.

    Arguments

    Type IntentOptional Attributes Name
    class(base_backend_t), intent(inout) :: self
    class(field_t), intent(inout) :: f
    real(kind=dp), intent(in), dimension(:, :, :) :: data

abstract interface

  • public subroutine copy_f_to_data(self, data, f)

    Copy a regular 3D array in host memory into the specialist data structure field that lives on device or host

    Arguments

    Type IntentOptional Attributes Name
    class(base_backend_t), intent(inout) :: self
    real(kind=dp), intent(out), dimension(:, :, :) :: data
    class(field_t), intent(in) :: f

abstract interface

  • public subroutine alloc_tdsops(self, tdsops, n_tds, delta, operation, scheme, bc_start, bc_end, stretch, stretch_correct, n_halo, from_to, sym, c_nu, nu0_nu)

    Arguments

    Type IntentOptional Attributes Name
    class(base_backend_t) :: self
    class(tdsops_t), intent(inout), allocatable :: tdsops
    integer, intent(in) :: n_tds
    real(kind=dp), intent(in) :: delta
    character(len=*), intent(in) :: operation
    character(len=*), intent(in) :: scheme
    integer, intent(in) :: bc_start
    integer, intent(in) :: bc_end
    real(kind=dp), intent(in), optional :: stretch(:)
    real(kind=dp), intent(in), optional :: stretch_correct(:)
    integer, intent(in), optional :: n_halo
    character(len=*), intent(in), optional :: from_to
    logical, intent(in), optional :: sym
    real(kind=dp), intent(in), optional :: c_nu
    real(kind=dp), intent(in), optional :: nu0_nu

abstract interface

  • public subroutine init_poisson_fft(self, mesh, xdirps, ydirps, zdirps)

    Arguments

    Type IntentOptional Attributes Name
    class(base_backend_t) :: self
    type(mesh_t), intent(in) :: mesh
    type(dirps_t), intent(in) :: xdirps
    type(dirps_t), intent(in) :: ydirps
    type(dirps_t), intent(in) :: zdirps

Derived Types

type, public, abstract ::  base_backend_t

base_backend class defines all the abstract operations that the solver class requires.

Read more…

Components

Type Visibility Attributes Name Initial
real(kind=dp), public :: nu
type(mesh_t), public, pointer :: mesh
class(allocator_t), public, pointer :: allocator
class(poisson_fft_t), public, pointer :: poisson_fft

Type-Bound Procedures

procedure(transeq_ders), public, deferred :: transeq_x
procedure(transeq_ders), public, deferred :: transeq_y
procedure(transeq_ders), public, deferred :: transeq_z
procedure(tds_solve), public, deferred :: tds_solve
procedure(reorder), public, deferred :: reorder
procedure(sum_intox), public, deferred :: sum_yintox
procedure(sum_intox), public, deferred :: sum_zintox
procedure(vecadd), public, deferred :: vecadd
procedure(scalar_product), public, deferred :: scalar_product
procedure(field_max_mean), public, deferred :: field_max_mean
procedure(field_ops), public, deferred :: field_scale
procedure(field_ops), public, deferred :: field_shift
procedure(field_reduce), public, deferred :: field_volume_integral
procedure(field_set_face), public, deferred :: field_set_face
procedure(copy_data_to_f), public, deferred :: copy_data_to_f
procedure(copy_f_to_data), public, deferred :: copy_f_to_data
procedure(alloc_tdsops), public, deferred :: alloc_tdsops
procedure(init_poisson_fft), public, deferred :: init_poisson_fft
procedure, public :: base_init
procedure, public :: get_field_data
procedure, public :: set_field_data

Subroutines

public subroutine base_init(self)

Arguments

Type IntentOptional Attributes Name
class(base_backend_t) :: self

public subroutine get_field_data(self, data, f, dir)

Extract data from field f optionally reordering into dir orientation. To output in same orientation as f, use call ...%get_field_data(data, f, f%dir)

Arguments

Type IntentOptional Attributes Name
class(base_backend_t) :: self
real(kind=dp), intent(out), dimension(:, :, :) :: data

Output array

class(field_t), intent(in) :: f

Field

integer, intent(in), optional :: dir

Desired orientation of output array (defaults to Cartesian)

public subroutine set_field_data(self, f, data, dir)

Arguments

Type IntentOptional Attributes Name
class(base_backend_t) :: self
class(field_t), intent(inout) :: f

Field

real(kind=dp), intent(in), dimension(:, :, :) :: data

Input array

integer, intent(in), optional :: dir

Orientation of input array (defaults to Cartesian)