|
Neko 1.99.9
A portable framework for high-order spectral element flow simulations
|
Axis-aligned mixed Dirichlet condition in the non-normal direction. More...


Public Member Functions | |
| procedure, pass(this) | apply_scalar (this, x, n, time, strong) |
| No-op scalar application. | |
| procedure, pass(this) | apply_vector (this, x, y, z, n, time, strong) |
| Apply the tangential components of the prescribed vector on the CPU. | |
| procedure, pass(this) | apply_scalar_dev (this, x_d, time, strong, strm) |
| No-op scalar application on the device. | |
| procedure, pass(this) | apply_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(this) | init (this, coef, json) |
| Construct the boundary condition from JSON. | |
| procedure, pass(this) | init_from_components (this, coef, value) |
| Construct the boundary condition from a uniform global vector. | |
| procedure, pass(this) | set_values (this, value_x, value_y, value_z) |
| Set inhomogeneous prescribed global vector components. | |
| procedure, pass(this) | free (this) |
| Free the boundary condition and its nested storage. | |
| procedure, pass(this) | finalize (this) |
| Finalize the boundary condition. | |
| procedure, pass(this) | get_normal_axis (this, sx, sy, sz, facet, el) |
| Estimate which global axis is normal to a marked facet. | |
| procedure, pass(this) | init_base (this, coef) |
| Constructor. | |
| procedure, pass(this) | free_base (this) |
| Destructor. | |
| procedure, pass(this) | mark_facet (this, facet, el) |
| Mark a facet on an element as part of the boundary condition. | |
| procedure, pass(this) | mark_facets (this, facet_list) |
| Mark all facets from a (facet, element) tuple list. | |
| procedure, pass(this) | mark_zone (this, bc_zone) |
| Mark all facets from a zone. | |
| procedure, pass(this) | mark_labeled_zone (this, zone_index) |
| Mark all facets from a labeled zone. | |
| procedure, pass(this) | mark_labeled_zones (this, zone_indices) |
| Mark all facets from a list of labeled zones. | |
| procedure, pass(this) | finalize_base (this) |
| Finalize the construction of the bc by populating the msk and facet arrays. | |
| procedure, pass(this) | apply_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(this) | apply_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(this) | debug_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_t) | bc_x |
| Nested dirichlet bcs for each component. Used only for their masks. | |
| type(dirichlet_t) | bc_y |
| type(dirichlet_t) | bc_z |
| type(vector_t) | value_x |
| The applied values for each component. Allocated at finalization. | |
| type(vector_t) | value_y |
| type(vector_t) | value_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 |
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.
| 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 | ||
| ) |
| x | Scalar field values. |
| n | Number of entries in x. |
| time | Current time state. |
| strong | Whether to apply the strong form. |
Definition at line 84 of file non_normal_aligned.f90.
| 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 | ||
| ) |
| x_d | Device pointer to the scalar field. |
| time | Current time state. |
| strong | Whether to apply the strong form. |
| strm | Device stream. |
Definition at line 88 of file non_normal_aligned.f90.
|
pure virtualinherited |
| 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.
| x | x-component of the field. |
| y | y-component of the field. |
| z | z-component of the field. |
| n | Number of entries in each component array. |
| time | Current time state. |
| strong | Whether to apply the strong form. |
Definition at line 86 of file non_normal_aligned.f90.
|
pure virtualinherited |
| 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.
| x_d | Device pointer to the x-component. |
| y_d | Device pointer to the y-component. |
| z_d | Device pointer to the z-component. |
| time | Current time state. |
| strong | Whether to apply the strong form. |
| strm | Device stream. |
Definition at line 91 of file non_normal_aligned.f90.
|
inherited |
| 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.
| 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.
| 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 | ||
| ) |
| [out] | sx | Deviation from an x-aligned normal. |
| [out] | sy | Deviation from a y-aligned normal. |
| [out] | sz | Deviation from a z-aligned normal. |
| [in] | facet | Facet id on the reference hex. |
| [in] | el | Element id. |
Definition at line 105 of file non_normal_aligned.f90.
| 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 | ||
| ) |
| [in] | coef | The SEM coefficients. |
| [in,out] | json | The JSON object configuring the boundary condition. |
Definition at line 94 of file non_normal_aligned.f90.
| 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 | ||
| ) |
| [in] | coef | The SEM coefficients. |
| [in] | value | Global vector whose tangential components are enforced. |
Definition at line 96 of file non_normal_aligned.f90.
| 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.
| [in] | value_x | Prescribed x values ordered like bc_xmsk(1:). |
| [in] | value_y | Prescribed y values ordered like bc_ymsk(1:). |
| [in] | value_z | Prescribed z values ordered like bc_zmsk(1:). |
Definition at line 99 of file non_normal_aligned.f90.
| type(dirichlet_t) non_normal_aligned::non_normal_aligned_t::bc_x |
Definition at line 63 of file non_normal_aligned.f90.
| type(dirichlet_t) non_normal_aligned::non_normal_aligned_t::bc_y |
Definition at line 64 of file non_normal_aligned.f90.
| type(dirichlet_t) non_normal_aligned::non_normal_aligned_t::bc_z |
Definition at line 65 of file non_normal_aligned.f90.
|
private |
Definition at line 71 of file non_normal_aligned.f90.
|
inherited |
|
inherited |
|
inherited |
|
inherited |
|
private |
Definition at line 78 of file non_normal_aligned.f90.
|
private |
Definition at line 81 of file non_normal_aligned.f90.
|
private |
Definition at line 80 of file non_normal_aligned.f90.
Definition at line 77 of file non_normal_aligned.f90.
|
private |
Definition at line 79 of file non_normal_aligned.f90.
|
inherited |
|
inherited |
|
inherited |
Definition at line 76 of file non_normal_aligned.f90.
Definition at line 75 of file non_normal_aligned.f90.
| type(vector_t) non_normal_aligned::non_normal_aligned_t::value_x |
Definition at line 67 of file non_normal_aligned.f90.
| type(vector_t) non_normal_aligned::non_normal_aligned_t::value_y |
Definition at line 68 of file non_normal_aligned.f90.
| type(vector_t) non_normal_aligned::non_normal_aligned_t::value_z |
Definition at line 69 of file non_normal_aligned.f90.
|
inherited |