Neko 1.99.9
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
non_normal_aligned Module Reference

Implements non_normal_aligned_t.

Data Types

type  non_normal_aligned_t
 Axis-aligned mixed Dirichlet condition in the non-normal direction. More...
 

Functions/Subroutines

subroutine non_normal_aligned_init (this, coef, json)
 Construct the boundary condition from JSON.
 
subroutine non_normal_aligned_init_from_components (this, coef, value)
 Construct the boundary condition from a uniform global vector.
 
subroutine non_normal_aligned_set_values (this, value_x, value_y, value_z)
 Set inhomogeneous prescribed global vector components.
 
subroutine non_normal_aligned_apply_scalar (this, x, n, time, strong)
 No-op scalar application.
 
subroutine non_normal_aligned_apply_vector (this, x, y, z, n, time, strong)
 Apply the tangential components of the prescribed vector on the CPU.
 
subroutine non_normal_aligned_apply_scalar_dev (this, x_d, time, strong, strm)
 No-op scalar application on the device.
 
subroutine non_normal_aligned_apply_vector_dev (this, x_d, y_d, z_d, time, strong, strm)
 Apply the tangential components of the prescribed vector on the device.
 
subroutine non_normal_aligned_get_normal_axis (this, sx, sy, sz, facet, el)
 Estimate which global axis is normal to a marked facet.
 
subroutine non_normal_aligned_finalize (this)
 Finalize the boundary condition.
 
subroutine non_normal_aligned_free (this)
 Free the boundary condition and its nested storage.
 

Function/Subroutine Documentation

◆ non_normal_aligned_apply_scalar()

subroutine non_normal_aligned::non_normal_aligned_apply_scalar ( class(non_normal_aligned_t), intent(inout this,
real(kind=rp), dimension(n), intent(inout x,
integer, intent(in n,
type(time_state_t), intent(in), optional  time,
logical, intent(in), optional  strong 
)
private
Parameters
xScalar field values.
nNumber of entries in x.
timeCurrent time state.
strongWhether to apply the strong form.

Definition at line 220 of file non_normal_aligned.f90.

◆ non_normal_aligned_apply_scalar_dev()

subroutine non_normal_aligned::non_normal_aligned_apply_scalar_dev ( class(non_normal_aligned_t), intent(inout), target  this,
type(c_ptr), intent(inout x_d,
type(time_state_t), intent(in), optional  time,
logical, intent(in), optional  strong,
type(c_ptr), intent(inout strm 
)
private
Parameters
x_dDevice pointer to the scalar field.
timeCurrent time state.
strongWhether to apply the strong form.
strmDevice stream.

Definition at line 276 of file non_normal_aligned.f90.

◆ non_normal_aligned_apply_vector()

subroutine non_normal_aligned::non_normal_aligned_apply_vector ( class(non_normal_aligned_t), intent(inout this,
real(kind=rp), dimension(n), intent(inout x,
real(kind=rp), dimension(n), intent(inout y,
real(kind=rp), dimension(n), intent(inout z,
integer, intent(in n,
type(time_state_t), intent(in), optional  time,
logical, intent(in), optional  strong 
)
private

Each nested Dirichlet boundary condition contributes only its compact mask. The corresponding component values are stored in the same compact ordering as that mask.

Parameters
xx-component of the field.
yy-component of the field.
zz-component of the field.
nNumber of entries in each component array.
timeCurrent time state.
strongWhether to apply the strong form.

Definition at line 238 of file non_normal_aligned.f90.

◆ non_normal_aligned_apply_vector_dev()

subroutine non_normal_aligned::non_normal_aligned_apply_vector_dev ( class(non_normal_aligned_t), intent(inout), target  this,
type(c_ptr), intent(inout x_d,
type(c_ptr), intent(inout y_d,
type(c_ptr), intent(inout z_d,
type(time_state_t), intent(in), optional  time,
logical, intent(in), optional  strong,
type(c_ptr), intent(inout strm 
)
private

Uses the compact per-component storage together with the masks of the nested Dirichlet boundary conditions.

Parameters
x_dDevice pointer to the x-component.
y_dDevice pointer to the y-component.
z_dDevice pointer to the z-component.
timeCurrent time state.
strongWhether to apply the strong form.
strmDevice stream.

Definition at line 293 of file non_normal_aligned.f90.

Here is the call graph for this function:

◆ non_normal_aligned_finalize()

subroutine non_normal_aligned::non_normal_aligned_finalize ( class(non_normal_aligned_t), intent(inout), target  this)
private

Marks the two tangential component conditions for each facet, finalizes the nested Dirichlet masks, allocates compact component-value storage, and populates it for the uniform-value case.

Definition at line 380 of file non_normal_aligned.f90.

◆ non_normal_aligned_free()

subroutine non_normal_aligned::non_normal_aligned_free ( class(non_normal_aligned_t), intent(inout), target  this)
private

Definition at line 465 of file non_normal_aligned.f90.

◆ non_normal_aligned_get_normal_axis()

subroutine non_normal_aligned::non_normal_aligned_get_normal_axis ( class(non_normal_aligned_t), intent(inout), target  this,
real(kind=rp), intent(out sx,
real(kind=rp), intent(out sy,
real(kind=rp), intent(out sz,
integer, intent(in facet,
integer, intent(in el 
)
private
Parameters
[out]sxDeviation from an x-aligned normal.
[out]syDeviation from a y-aligned normal.
[out]szDeviation from a z-aligned normal.
[in]facetFacet id on the reference hex.
[in]elElement id.

Definition at line 332 of file non_normal_aligned.f90.

◆ non_normal_aligned_init()

subroutine non_normal_aligned::non_normal_aligned_init ( class(non_normal_aligned_t), intent(inout), target  this,
type(coef_t), intent(in), target  coef,
type(json_file), intent(inout json 
)
Parameters
[in]coefThe SEM coefficients.
[in,out]jsonThe JSON object configuring the boundary condition.

Definition at line 114 of file non_normal_aligned.f90.

◆ non_normal_aligned_init_from_components()

subroutine non_normal_aligned::non_normal_aligned_init_from_components ( class(non_normal_aligned_t), intent(inout), target  this,
type(coef_t), intent(in), target  coef,
real(kind=rp), dimension(3), intent(in value 
)
private
Parameters
[in]coefThe SEM coefficients.
[in]valueGlobal vector whose tangential components are enforced.

Definition at line 164 of file non_normal_aligned.f90.

◆ non_normal_aligned_set_values()

subroutine non_normal_aligned::non_normal_aligned_set_values ( class(non_normal_aligned_t), intent(inout this,
type(vector_t), intent(in value_x,
type(vector_t), intent(in value_y,
type(vector_t), intent(in value_z 
)
private

The vectors are stored in compact form and must match the component-wise mask sizes of bc_x, bc_y and bc_z. Therefore this routine must be called only after the nested masks have been finalized.

Parameters
[in]value_xPrescribed x values ordered like bc_xmsk(1:).
[in]value_yPrescribed y values ordered like bc_ymsk(1:).
[in]value_zPrescribed z values ordered like bc_zmsk(1:).

Definition at line 186 of file non_normal_aligned.f90.