nonaligned_operators_m Module

Implementation of parallel operators with non-aligned methods, These methods are mostly for testing purpose or exploring numerical techniques, i.e. there is no focus on performance optimisation and no unit tests were created for these routines - Guenter's scheme second order: (see S. Guenter et al., Journal of Computational Physics 209 (2005) 354–370 - Guenter's scheme fourth order: (see S. Guenter et al., Journal of Computational Physics 226 (2007) 2306-2316



Contents


Subroutines

public subroutine gradient_3D_staggered(comm_handler, equi, mesh, map, u, gradu, order)

Computes gradient (dudx, dudy, dudphi = dudz) at 3D staggered positions Gradient is computed according to symmetric formulation of Guenter's scheme Staggered point is at northeast-forward position w.r.t. its considered grid point on full grid Second and fourth order are implemented

Arguments

Type IntentOptional Attributes Name
type(comm_handler_t), intent(in) :: comm_handler

Communicator

class(equilibrium_t), intent(inout) :: equi

Equilibrium

type(mesh_cart_t), intent(inout) :: mesh

Mesh within poloidal plane

type(parallel_map_t), intent(in) :: map

Parallel map

type(variable_t) :: u

Variable, must be defined on canonical grid

real(kind=GP), intent(out), dimension(mesh%get_n_points(), 3) :: gradu

Values of gradient

integer, intent(in), optional :: order

Order of scheme default: 2

public subroutine parallel_gradient_nonaligned(comm_handler, equi, mesh, map, u, pargradu, order)

Computes parallel gradient at 3D staggered positions Based on gradient_3D_staggered

Arguments

Type IntentOptional Attributes Name
type(comm_handler_t), intent(in) :: comm_handler

Communicator

class(equilibrium_t), intent(inout) :: equi

Equilibrium

type(mesh_cart_t), intent(inout) :: mesh

Mesh within poloidal plane

type(parallel_map_t), intent(in) :: map

Parallel map

type(variable_t), intent(in) :: u

Variable, must be defined on canonical grid

real(kind=GP), intent(out), dimension(mesh%get_n_points()) :: pargradu

Values of parallel gradient

integer, intent(in), optional :: order

Order of scheme default: 2

public subroutine parallel_divergence_nonaligned(comm, equi, mesh, map, uflx, pardivu, order)

Computes parallel divergence from parallel flux defined at 3D staggered positions Result (pardivu) is defined on full grid Based on symmetric formulation of Guenter's scheme (2nd and 4th order available)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: comm

MPI communicator

class(equilibrium_t), intent(inout) :: equi

Equilibrium

type(mesh_cart_t), intent(inout) :: mesh

Mesh within poloidal plane

type(parallel_map_t), intent(in) :: map

Parallel map

real(kind=GP), intent(in), dimension(mesh%get_n_points()) :: uflx

Parallel flux

real(kind=GP), intent(out), dimension(mesh%get_n_points_inner()) :: pardivu

Parallel divergence of uflx

integer, intent(in), optional :: order

Order of scheme default: 2