Neko 1.99.9
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
non_normal_aligned::non_normal_aligned_t Type Referenceabstract

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

Inheritance diagram for non_normal_aligned::non_normal_aligned_t:
Collaboration diagram for non_normal_aligned::non_normal_aligned_t:

Public Member Functions

procedure, pass(thisapply_scalar (this, x, n, time, strong)
 No-op scalar application.
 
procedure, pass(thisapply_vector (this, x, y, z, n, time, strong)
 Apply the tangential components of the prescribed vector on the CPU.
 
procedure, pass(thisapply_scalar_dev (this, x_d, time, strong, strm)
 No-op scalar application on the device.
 
procedure, pass(thisapply_vector_dev (this, x_d, y_d, z_d, time, strong, strm)
 Apply the tangential components of the prescribed vector on the device.
 
procedure, pass(thisinit (this, coef, json)
 Construct the boundary condition from JSON.
 
procedure, pass(thisinit_from_components (this, coef, value)
 Construct the boundary condition from a uniform global vector.
 
procedure, pass(thisset_values (this, value_x, value_y, value_z)
 Set inhomogeneous prescribed global vector components.
 
procedure, pass(thisfree (this)
 Free the boundary condition and its nested storage.
 
procedure, pass(thisfinalize (this)
 Finalize the boundary condition.
 
procedure, pass(thisget_normal_axis (this, sx, sy, sz, facet, el)
 Estimate which global axis is normal to a marked facet.
 
procedure, pass(thisinit_base (this, coef)
 Constructor.
 
procedure, pass(thisfree_base (this)
 Destructor.
 
procedure, pass(thismark_facet (this, facet, el)
 Mark a facet on an element as part of the boundary condition.
 
procedure, pass(thismark_facets (this, facet_list)
 Mark all facets from a (facet, element) tuple list.
 
procedure, pass(thismark_zone (this, bc_zone)
 Mark all facets from a zone.
 
procedure, pass(thismark_labeled_zone (this, zone_index)
 Mark all facets from a labeled zone.
 
procedure, pass(thismark_labeled_zones (this, zone_indices)
 Mark all facets from a list of labeled zones.
 
procedure, pass(thisfinalize_base (this)
 Finalize the construction of the bc by populating the msk and facet arrays.
 
procedure, pass(thisapply_scalar_generic (this, x, time, strong, strm)
 Apply the boundary condition to a scalar field. Dispatches to the CPU or the device version.
 
procedure, pass(thisapply_vector_generic (this, x, y, z, time, strong, strm)
 Apply the boundary condition to a vector field. Dispatches to the CPU or the device version.
 
procedure, pass(thisdebug_mask_ (this, file_name)
 Write a field showing the mask of the bcs.
 
procedure(bc_apply_scalar), deferred, pass apply_scalar (this, x, n, time, strong)
 Apply the boundary condition to a scalar field on the CPU.
 
procedure(bc_apply_vector), deferred, pass apply_vector (this, x, y, z, n, time, strong)
 Apply the boundary condition to a vector field on the CPU.
 
procedure(bc_apply_scalar_dev), deferred, pass apply_scalar_dev (this, x_d, time, strong, strm)
 Device version of apply_scalar on the device.
 
procedure(bc_apply_vector_dev), deferred, pass apply_vector_dev (this, x_d, y_d, z_d, time, strong, strm)
 Device version of apply_vector on the device.
 
procedure(bc_destructor), deferred, pass free (this)
 Deferred destructor.
 
procedure(bc_constructor), deferred, pass init (this, coef, json)
 Deferred constructor.
 
procedure(bc_finalize), deferred, pass finalize (this)
 Deferred finalizer.
 

Public Attributes

type(dirichlet_tbc_x
 Nested dirichlet bcs for each component. Used only for their masks.
 
type(dirichlet_tbc_y
 
type(dirichlet_tbc_z
 
type(vector_tvalue_x
 The applied values for each component. Allocated at finalization.
 
type(vector_tvalue_y
 
type(vector_tvalue_z
 
integer, dimension(:), allocatable msk
 The linear index of each constrained local degree of freedom.
 
integer, dimension(:), allocatable facet_node_msk
 The linear index of each node on the marked boundary facets.
 
integer, dimension(:), allocatable facet
 A list of facet ids (1 to 6), one for each entry in facet_node_msk.
 
type(dofmap_t), pointer dof => null()
 Map of degrees of freedom.
 
type(coef_t), pointer coef => null()
 SEM coefficients.
 
type(mesh_t), pointer msh => null()
 The mesh.
 
type(space_t), pointer xh => null()
 The function space.
 
type(stack_i4t2_t) marked_facet
 Index tuples (facet, element) marked as part of the boundary condition.
 
type(c_ptr) msk_d = C_NULL_PTR
 Device pointer for msk.
 
type(c_ptr) facet_node_msk_d = C_NULL_PTR
 Device pointer for facet_node_msk.
 
type(c_ptr) facet_d = C_NULL_PTR
 Device pointer for facet.
 
integer bc_type = -1
 Type of the boundary condition, from the BC_* constants.
 
logical updated = .false.
 Indicates wether the bc has been updated, for those BCs that need additional computations.
 
character(len=:), allocatable name
 
integer, dimension(:), allocatable zone_indices
 

Private Attributes

real(kind=rp), dimension(3), private constant_value = 0.0_rp
 Helper to parse uniform input from the case file.
 
logical, private use_constant_value = .true.
 Bookkeeping for initialization. Necessary because we can only init in finalize()
 
logical, private read_values_from_field = .false.
 
logical, private field_interpolate = .false.
 
character(len=:), allocatable, private field_file_name
 
character(len=:), allocatable, private field_mesh_file_name
 
real(kind=dp), private field_interp_tolerance = GLOB_INTERP_TOL
 
real(kind=dp), private field_interp_padding = GLOB_INTERP_PAD
 

Detailed Description

Warning
Only works for axis-aligned plane boundaries.

Since dirichlet_t currently only supports constant values, we store the values separately in vectors, and use the nested dirichlet_t only for its mask.

Definition at line 61 of file non_normal_aligned.f90.

Member Function/Subroutine Documentation

◆ apply_scalar() [1/2]

procedure(bc_apply_scalar), deferred, pass bc::bc_t::apply_scalar ( class(bc_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 
)
pure virtualinherited

Definition at line 132 of file bc.f90.

◆ apply_scalar() [2/2]

procedure, pass(this) non_normal_aligned::non_normal_aligned_t::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 
)
Parameters
xScalar field values.
nNumber of entries in x.
timeCurrent time state.
strongWhether to apply the strong form.

Definition at line 84 of file non_normal_aligned.f90.

◆ apply_scalar_dev() [1/2]

procedure(bc_apply_scalar_dev), deferred, pass bc::bc_t::apply_scalar_dev ( class(bc_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 
)
pure virtualinherited

Definition at line 136 of file bc.f90.

◆ apply_scalar_dev() [2/2]

procedure, pass(this) non_normal_aligned::non_normal_aligned_t::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 
)
Parameters
x_dDevice pointer to the scalar field.
timeCurrent time state.
strongWhether to apply the strong form.
strmDevice stream.

Definition at line 88 of file non_normal_aligned.f90.

◆ apply_scalar_generic()

procedure, pass(this) bc::bc_t::apply_scalar_generic ( class(bc_t), intent(inout this,
type(field_t), intent(inout x,
type(time_state_t), intent(in), optional  time,
logical, intent(in), optional  strong,
type(c_ptr), intent(inout), optional  strm 
)
inherited
Parameters
xThe x comp of the field for which to apply the bc.
timeCurrent time state.
strongWhether we are setting a strong or a weak bc.
strmDevice stream

Definition at line 125 of file bc.f90.

◆ apply_vector() [1/2]

procedure(bc_apply_vector), deferred, pass bc::bc_t::apply_vector ( class(bc_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 
)
pure virtualinherited

Definition at line 134 of file bc.f90.

◆ apply_vector() [2/2]

procedure, pass(this) non_normal_aligned::non_normal_aligned_t::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 
)

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 86 of file non_normal_aligned.f90.

◆ apply_vector_dev() [1/2]

procedure(bc_apply_vector_dev), deferred, pass bc::bc_t::apply_vector_dev ( class(bc_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 
)
pure virtualinherited

Definition at line 138 of file bc.f90.

◆ apply_vector_dev() [2/2]

procedure, pass(this) non_normal_aligned::non_normal_aligned_t::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 
)

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 91 of file non_normal_aligned.f90.

◆ apply_vector_generic()

procedure, pass(this) bc::bc_t::apply_vector_generic ( class(bc_t), intent(inout this,
type(field_t), intent(inout x,
type(field_t), intent(inout y,
type(field_t), intent(inout z,
type(time_state_t), intent(in), optional  time,
logical, intent(in), optional  strong,
type(c_ptr), intent(inout), optional  strm 
)
inherited
Parameters
xThe x comp of the field for which to apply the bc.
yThe y comp of the field for which to apply the bc.
zThe z comp of the field for which to apply the bc.
timeCurrent time state.
strongWhether we are setting a strong or a weak bc.
Devicestream

Definition at line 128 of file bc.f90.

◆ debug_mask_()

procedure, pass(this) bc::bc_t::debug_mask_ ( class(bc_t), intent(inout this,
character(len=*), intent(in file_name 
)
inherited

The mask will be marked with 1.

Parameters
file_nameThe name of the fld file.

Definition at line 130 of file bc.f90.

◆ finalize() [1/2]

procedure(bc_finalize), deferred, pass bc::bc_t::finalize ( class(bc_t), intent(inout), target  this)
pure virtualinherited

Definition at line 144 of file bc.f90.

◆ finalize() [2/2]

procedure, pass(this) non_normal_aligned::non_normal_aligned_t::finalize ( class(non_normal_aligned_t), intent(inout), target  this)

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 103 of file non_normal_aligned.f90.

◆ finalize_base()

procedure, pass(this) bc::bc_t::finalize_base ( class(bc_t), intent(inout), target  this)
inherited

This will linearize the marked facet's indicies in the msk array.

Definition at line 121 of file bc.f90.

◆ free() [1/2]

procedure(bc_destructor), deferred, pass bc::bc_t::free ( class(bc_t), intent(inout), target  this)
pure virtualinherited

Definition at line 140 of file bc.f90.

◆ free() [2/2]

procedure, pass(this) non_normal_aligned::non_normal_aligned_t::free ( class(non_normal_aligned_t), intent(inout), target  this)

Definition at line 101 of file non_normal_aligned.f90.

◆ free_base()

procedure, pass(this) bc::bc_t::free_base ( class(bc_t), intent(inout this)
inherited

Definition at line 108 of file bc.f90.

◆ get_normal_axis()

procedure, pass(this) non_normal_aligned::non_normal_aligned_t::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 
)
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 105 of file non_normal_aligned.f90.

◆ init() [1/2]

procedure(bc_constructor), deferred, pass bc::bc_t::init ( class(bc_t), intent(inout), target  this,
type(coef_t), intent(in), target  coef,
type(json_file), intent(inout json 
)
pure virtualinherited

Definition at line 142 of file bc.f90.

◆ init() [2/2]

procedure, pass(this) non_normal_aligned::non_normal_aligned_t::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 94 of file non_normal_aligned.f90.

◆ init_base()

procedure, pass(this) bc::bc_t::init_base ( class(bc_t), intent(inout this,
type(coef_t), intent(in), target  coef 
)
inherited
Parameters
dofMap of degrees of freedom.

Definition at line 106 of file bc.f90.

◆ init_from_components()

procedure, pass(this) non_normal_aligned::non_normal_aligned_t::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 
)
Parameters
[in]coefThe SEM coefficients.
[in]valueGlobal vector whose tangential components are enforced.

Definition at line 96 of file non_normal_aligned.f90.

◆ mark_facet()

procedure, pass(this) bc::bc_t::mark_facet ( class(bc_t), intent(inout this,
integer, intent(in facet,
integer, intent(in el 
)
inherited
Parameters
facetThe index of the facet.
elThe index of the element.

Definition at line 110 of file bc.f90.

◆ mark_facets()

procedure, pass(this) bc::bc_t::mark_facets ( class(bc_t), intent(inout this,
type(stack_i4t2_t), intent(inout facet_list 
)
inherited
Parameters
facet_listThe list of tuples.

Definition at line 112 of file bc.f90.

◆ mark_labeled_zone()

procedure, pass(this) bc::bc_t::mark_labeled_zone ( class(bc_t), intent(inout this,
integer, intent(in zone_index 
)
inherited
Parameters
zone_indexThe index of the labeled zone to be marked.

Definition at line 116 of file bc.f90.

◆ mark_labeled_zones()

procedure, pass(this) bc::bc_t::mark_labeled_zones ( class(bc_t), intent(inout this,
integer, dimension(:), intent(in zone_indices 
)
inherited
Parameters
zone_indicesThe indices of the labeled zones to be marked.

Definition at line 118 of file bc.f90.

◆ mark_zone()

procedure, pass(this) bc::bc_t::mark_zone ( class(bc_t), intent(inout this,
class(facet_zone_t), intent(in bc_zone 
)
inherited
Parameters
bc_zoneBoundary zone to be marked.

Definition at line 114 of file bc.f90.

◆ set_values()

procedure, pass(this) non_normal_aligned::non_normal_aligned_t::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 
)

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 99 of file non_normal_aligned.f90.

Member Data Documentation

◆ bc_type

integer bc::bc_t::bc_type = -1
inherited

Definition at line 96 of file bc.f90.

◆ bc_x

type(dirichlet_t) non_normal_aligned::non_normal_aligned_t::bc_x

Definition at line 63 of file non_normal_aligned.f90.

◆ bc_y

type(dirichlet_t) non_normal_aligned::non_normal_aligned_t::bc_y

Definition at line 64 of file non_normal_aligned.f90.

◆ bc_z

type(dirichlet_t) non_normal_aligned::non_normal_aligned_t::bc_z

Definition at line 65 of file non_normal_aligned.f90.

◆ coef

type(coef_t), pointer bc::bc_t::coef => null()
inherited

Definition at line 82 of file bc.f90.

◆ constant_value

real(kind=rp), dimension(3), private non_normal_aligned::non_normal_aligned_t::constant_value = 0.0_rp
private

Definition at line 71 of file non_normal_aligned.f90.

◆ dof

type(dofmap_t), pointer bc::bc_t::dof => null()
inherited

Definition at line 80 of file bc.f90.

◆ facet

integer, dimension(:), allocatable bc::bc_t::facet
inherited

Definition at line 78 of file bc.f90.

◆ facet_d

type(c_ptr) bc::bc_t::facet_d = C_NULL_PTR
inherited

Definition at line 94 of file bc.f90.

◆ facet_node_msk

integer, dimension(:), allocatable bc::bc_t::facet_node_msk
inherited

Definition at line 76 of file bc.f90.

◆ facet_node_msk_d

type(c_ptr) bc::bc_t::facet_node_msk_d = C_NULL_PTR
inherited

Definition at line 92 of file bc.f90.

◆ field_file_name

character(len=:), allocatable, private non_normal_aligned::non_normal_aligned_t::field_file_name
private

Definition at line 78 of file non_normal_aligned.f90.

◆ field_interp_padding

real(kind=dp), private non_normal_aligned::non_normal_aligned_t::field_interp_padding = GLOB_INTERP_PAD
private

Definition at line 81 of file non_normal_aligned.f90.

◆ field_interp_tolerance

real(kind=dp), private non_normal_aligned::non_normal_aligned_t::field_interp_tolerance = GLOB_INTERP_TOL
private

Definition at line 80 of file non_normal_aligned.f90.

◆ field_interpolate

logical, private non_normal_aligned::non_normal_aligned_t::field_interpolate = .false.
private

Definition at line 77 of file non_normal_aligned.f90.

◆ field_mesh_file_name

character(len=:), allocatable, private non_normal_aligned::non_normal_aligned_t::field_mesh_file_name
private

Definition at line 79 of file non_normal_aligned.f90.

◆ marked_facet

type(stack_i4t2_t) bc::bc_t::marked_facet
inherited

Definition at line 88 of file bc.f90.

◆ msh

type(mesh_t), pointer bc::bc_t::msh => null()
inherited

Definition at line 84 of file bc.f90.

◆ msk

integer, dimension(:), allocatable bc::bc_t::msk
inherited

Definition at line 74 of file bc.f90.

◆ msk_d

type(c_ptr) bc::bc_t::msk_d = C_NULL_PTR
inherited

Definition at line 90 of file bc.f90.

◆ name

character(len=:), allocatable bc::bc_t::name
inherited

Definition at line 101 of file bc.f90.

◆ read_values_from_field

logical, private non_normal_aligned::non_normal_aligned_t::read_values_from_field = .false.
private

Definition at line 76 of file non_normal_aligned.f90.

◆ updated

logical bc::bc_t::updated = .false.
inherited

Definition at line 99 of file bc.f90.

◆ use_constant_value

logical, private non_normal_aligned::non_normal_aligned_t::use_constant_value = .true.
private

Definition at line 75 of file non_normal_aligned.f90.

◆ value_x

type(vector_t) non_normal_aligned::non_normal_aligned_t::value_x

Definition at line 67 of file non_normal_aligned.f90.

◆ value_y

type(vector_t) non_normal_aligned::non_normal_aligned_t::value_y

Definition at line 68 of file non_normal_aligned.f90.

◆ value_z

type(vector_t) non_normal_aligned::non_normal_aligned_t::value_z

Definition at line 69 of file non_normal_aligned.f90.

◆ xh

type(space_t), pointer bc::bc_t::xh => null()
inherited

Definition at line 86 of file bc.f90.

◆ zone_indices

integer, dimension(:), allocatable bc::bc_t::zone_indices
inherited

Definition at line 103 of file bc.f90.


The documentation for this type was generated from the following file: