omp_backend_t Derived Type

type, public, extends(base_backend_t) :: omp_backend_t


Inherits

type~~omp_backend_t~~InheritsGraph type~omp_backend_t omp_backend_t type~base_backend_t base_backend_t type~omp_backend_t->type~base_backend_t type~allocator_t allocator_t type~base_backend_t->type~allocator_t allocator type~mesh_t mesh_t type~base_backend_t->type~mesh_t mesh type~poisson_fft_t poisson_fft_t type~base_backend_t->type~poisson_fft_t poisson_fft type~field_t field_t type~allocator_t->type~field_t first type~geo_t geo_t type~mesh_t->type~geo_t geo type~grid_t grid_t type~mesh_t->type~grid_t grid type~par_t par_t type~mesh_t->type~par_t par type~field_t->type~field_t next

Components

Type Visibility Attributes Name Initial
integer, public :: n_halo = 4

DistD2 implementation is hardcoded for 4 halo layers for all backends

type(mesh_t), public, pointer :: mesh
class(allocator_t), public, pointer :: allocator
class(poisson_fft_t), public, pointer :: poisson_fft
real(kind=dp), public, allocatable, dimension(:, :, :) :: u_recv_s
real(kind=dp), public, allocatable, dimension(:, :, :) :: u_recv_e
real(kind=dp), public, allocatable, dimension(:, :, :) :: u_send_s
real(kind=dp), public, allocatable, dimension(:, :, :) :: u_send_e
real(kind=dp), public, allocatable, dimension(:, :, :) :: v_recv_s
real(kind=dp), public, allocatable, dimension(:, :, :) :: v_recv_e
real(kind=dp), public, allocatable, dimension(:, :, :) :: v_send_s
real(kind=dp), public, allocatable, dimension(:, :, :) :: v_send_e
real(kind=dp), public, allocatable, dimension(:, :, :) :: w_recv_s
real(kind=dp), public, allocatable, dimension(:, :, :) :: w_recv_e
real(kind=dp), public, allocatable, dimension(:, :, :) :: w_send_s
real(kind=dp), public, allocatable, dimension(:, :, :) :: w_send_e
real(kind=dp), public, allocatable, dimension(:, :, :) :: du_send_s
real(kind=dp), public, allocatable, dimension(:, :, :) :: du_send_e
real(kind=dp), public, allocatable, dimension(:, :, :) :: du_recv_s
real(kind=dp), public, allocatable, dimension(:, :, :) :: du_recv_e
real(kind=dp), public, allocatable, dimension(:, :, :) :: dud_send_s
real(kind=dp), public, allocatable, dimension(:, :, :) :: dud_send_e
real(kind=dp), public, allocatable, dimension(:, :, :) :: dud_recv_s
real(kind=dp), public, allocatable, dimension(:, :, :) :: dud_recv_e
real(kind=dp), public, allocatable, dimension(:, :, :) :: d2u_send_s
real(kind=dp), public, allocatable, dimension(:, :, :) :: d2u_send_e
real(kind=dp), public, allocatable, dimension(:, :, :) :: d2u_recv_s
real(kind=dp), public, allocatable, dimension(:, :, :) :: d2u_recv_e

Constructor

public interface omp_backend_t

  • public function init(mesh, allocator) result(backend)

    Arguments

    Type IntentOptional Attributes Name
    type(mesh_t), intent(inout), target :: mesh
    class(allocator_t), intent(inout), target :: allocator

    Return Value type(omp_backend_t)


Type-Bound Procedures

procedure, public :: base_init

procedure, public :: get_field_data

  • 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)

procedure, public :: set_field_data

  • 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)

procedure, public :: alloc_tdsops => alloc_omp_tdsops

  • public subroutine alloc_omp_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(omp_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

procedure, public :: transeq_x => transeq_x_omp

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

    Arguments

    Type IntentOptional Attributes Name
    class(omp_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
    real(kind=dp), intent(in) :: nu
    type(dirps_t), intent(in) :: dirps

procedure, public :: transeq_y => transeq_y_omp

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

    Arguments

    Type IntentOptional Attributes Name
    class(omp_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
    real(kind=dp), intent(in) :: nu
    type(dirps_t), intent(in) :: dirps

procedure, public :: transeq_z => transeq_z_omp

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

    Arguments

    Type IntentOptional Attributes Name
    class(omp_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
    real(kind=dp), intent(in) :: nu
    type(dirps_t), intent(in) :: dirps

procedure, public :: transeq_species => transeq_species_omp

  • public subroutine transeq_species_omp(self, dspec, uvw, spec, nu, dirps, sync)

    Compute the convection and diffusion for the given field in the given direction. Halo exchange for the given field is necessary When sync is true, halo exchange of momentum is necessary

    Arguments

    Type IntentOptional Attributes Name
    class(omp_backend_t) :: self
    class(field_t), intent(inout) :: dspec
    class(field_t), intent(in) :: uvw
    class(field_t), intent(in) :: spec
    real(kind=dp), intent(in) :: nu
    type(dirps_t), intent(in) :: dirps
    logical, intent(in) :: sync

procedure, public :: tds_solve => tds_solve_omp

procedure, public :: reorder => reorder_omp

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

    Arguments

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

procedure, public :: sum_yintox => sum_yintox_omp

procedure, public :: sum_zintox => sum_zintox_omp

procedure, public :: veccopy => veccopy_omp

  • public subroutine veccopy_omp(self, dst, src)

    Arguments

    Type IntentOptional Attributes Name
    class(omp_backend_t) :: self
    class(field_t), intent(inout) :: dst
    class(field_t), intent(in) :: src

procedure, public :: vecadd => vecadd_omp

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

    Arguments

    Type IntentOptional Attributes Name
    class(omp_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

procedure, public :: vecmult => vecmult_omp

procedure, public :: scalar_product => scalar_product_omp

procedure, public :: field_max_mean => field_max_mean_omp

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

    m_base_backend

    Arguments

    Type IntentOptional Attributes Name
    class(omp_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

procedure, public :: field_scale => field_scale_omp

  • public subroutine field_scale_omp(self, f, a)

    Arguments

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

procedure, public :: field_shift => field_shift_omp

  • public subroutine field_shift_omp(self, f, a)

    Arguments

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

procedure, public :: field_set_face => field_set_face_omp

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

    m_base_backend

    Arguments

    Type IntentOptional Attributes Name
    class(omp_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

procedure, public :: field_volume_integral => field_volume_integral_omp

procedure, public :: copy_data_to_f => copy_data_to_f_omp

  • public subroutine copy_data_to_f_omp(self, f, data)

    Arguments

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

procedure, public :: copy_f_to_data => copy_f_to_data_omp

  • public subroutine copy_f_to_data_omp(self, data, f)

    Arguments

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

procedure, public :: init_poisson_fft => init_omp_poisson_fft

  • public subroutine init_omp_poisson_fft(self, mesh, xdirps, ydirps, zdirps, lowmem)

    Arguments

    Type IntentOptional Attributes Name
    class(omp_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
    logical, intent(in), optional :: lowmem

procedure, public :: transeq_omp_dist

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

    Arguments

    Type IntentOptional Attributes Name
    class(omp_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
    real(kind=dp), intent(in) :: nu
    type(dirps_t), intent(in) :: dirps