|
Neko 1.99.9
A portable framework for high-order spectral element flow simulations
|
Dirichlet condition \( x = g(x, y, z, t) \) on \(\partial \Omega\), where \( g \) is a mathematical expression given in the case file. More...


Public Member Functions | |
| procedure, pass(this) | init (this, coef, json) |
| Constructor from JSON. | |
| procedure, pass(this) | init_from_components (this, coef, str) |
| Constructor from components. | |
| procedure, pass(this) | free (this) |
| Destructor. | |
| procedure, pass(this) | finalize (this) |
| Finalize. | |
| procedure, pass(this) | apply_scalar (this, x, n, time, strong) |
| Apply the condition to a scalar field. | |
| procedure, pass(this) | apply_vector (this, x, y, z, n, time, strong) |
| (No-op) Apply vector. | |
| procedure, pass(this) | apply_scalar_dev (this, x_d, time, strong, strm) |
| Apply the condition to a scalar field (device). | |
| procedure, pass(this) | apply_vector_dev (this, x_d, y_d, z_d, time, strong, strm) |
| (No-op) Apply vector (device). | |
| procedure, pass(this) | update (this, time, strm) |
Bring g up to date with the current time. | |
| 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(expression_t) | expr |
| The compiled expression prescribing the boundary value. | |
| real(kind=rp), dimension(:), allocatable | g |
| The value in each point of the mask. | |
| real(kind=rp), dimension(:), allocatable | xm |
| Coordinates of the points of the mask. | |
| real(kind=rp), dimension(:), allocatable | ym |
| real(kind=rp), dimension(:), allocatable | zm |
| type(c_ptr) | g_d = C_NULL_PTR |
Device pointer for g. | |
| 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 |
The expression is compiled once, at setup, and evaluated on the host in the points of the mask only. The resulting values are scattered into the solution with the same kernel that the Blasius condition uses, so no expression evaluation happens on the device.
An expression that does not depend on time is evaluated once, in finalize, and from then on the condition costs exactly what a constant Dirichlet condition costs. A time dependent one is re-evaluated once per timestep, gated on the updated flag of the base type.
Definition at line 61 of file expression_dirichlet.f90.
| procedure, pass(this) expression_dirichlet::expression_dirichlet_t::apply_scalar | ( | class(expression_dirichlet_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 | ||
| ) |
| [in,out] | x | The field onto which to apply the values. |
| [in] | n | The size of x. |
| [in] | time | The current time state. |
| [in] | strong | Whether the condition is applied strongly. |
Definition at line 83 of file expression_dirichlet.f90.
| procedure, pass(this) expression_dirichlet::expression_dirichlet_t::apply_scalar_dev | ( | class(expression_dirichlet_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 | ||
| ) |
| [in,out] | x_d | Device pointer to the field. |
| [in] | time | The current time state. |
| [in] | strong | Whether the condition is applied strongly. |
| [in,out] | strm | The device stream to issue the work on. |
Definition at line 87 of file expression_dirichlet.f90.
|
pure virtualinherited |
| procedure, pass(this) expression_dirichlet::expression_dirichlet_t::apply_vector | ( | class(expression_dirichlet_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 | ||
| ) |
| [in,out] | x | The x-component of the field. |
| [in,out] | y | The y-component of the field. |
| [in,out] | z | The z-component of the field. |
| [in] | n | The size of x, y and z. |
| [in] | time | The current time state. |
| [in] | strong | Whether the condition is applied strongly. |
Definition at line 85 of file expression_dirichlet.f90.
|
pure virtualinherited |
| procedure, pass(this) expression_dirichlet::expression_dirichlet_t::apply_vector_dev | ( | class(expression_dirichlet_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 | ||
| ) |
| [in,out] | x_d | Device pointer to the x-component of the field. |
| [in,out] | y_d | Device pointer to the y-component of the field. |
| [in,out] | z_d | Device pointer to the z-component of the field. |
| [in] | time | The current time state. |
| [in] | strong | Whether the condition is applied strongly. |
| [in,out] | strm | The device stream to issue the work on. |
Definition at line 90 of file expression_dirichlet.f90.
|
inherited |
| procedure, pass(this) expression_dirichlet::expression_dirichlet_t::finalize | ( | class(expression_dirichlet_t), intent(inout), target | this | ) |
Tabulates the coordinates of the points of the mask, which is only known once the mask has been built, and evaluates the expression right away if it does not depend on time.
Definition at line 81 of file expression_dirichlet.f90.
| procedure, pass(this) expression_dirichlet::expression_dirichlet_t::free | ( | class(expression_dirichlet_t), intent(inout), target | this | ) |
Definition at line 79 of file expression_dirichlet.f90.
| procedure, pass(this) expression_dirichlet::expression_dirichlet_t::init | ( | class(expression_dirichlet_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 74 of file expression_dirichlet.f90.
| procedure, pass(this) expression_dirichlet::expression_dirichlet_t::init_from_components | ( | class(expression_dirichlet_t), intent(inout), target | this, |
| type(coef_t), intent(in), target | coef, | ||
| character(len=*), intent(in) | str | ||
| ) |
| [in] | coef | The SEM coefficients. |
| [in] | str | The expression prescribing the boundary value. |
Definition at line 76 of file expression_dirichlet.f90.
| procedure, pass(this) expression_dirichlet::expression_dirichlet_t::update | ( | class(expression_dirichlet_t), intent(inout) | this, |
| type(time_state_t), intent(in), optional | time, | ||
| type(c_ptr), intent(inout), optional | strm | ||
| ) |
A no-op unless the expression depends on time and the values have not already been updated in this timestep.
| [in] | time | The current time state. |
| [in,out] | strm | The device stream to issue the copy on. |
Definition at line 93 of file expression_dirichlet.f90.

| type(expression_t) expression_dirichlet::expression_dirichlet_t::expr |
Definition at line 63 of file expression_dirichlet.f90.
|
inherited |
|
inherited |
|
inherited |
|
inherited |
| real(kind=rp), dimension(:), allocatable expression_dirichlet::expression_dirichlet_t::g |
Definition at line 65 of file expression_dirichlet.f90.
| type(c_ptr) expression_dirichlet::expression_dirichlet_t::g_d = C_NULL_PTR |
Definition at line 71 of file expression_dirichlet.f90.
|
inherited |
|
inherited |
|
inherited |
| real(kind=rp), dimension(:), allocatable expression_dirichlet::expression_dirichlet_t::xm |
Definition at line 67 of file expression_dirichlet.f90.
| real(kind=rp), dimension(:), allocatable expression_dirichlet::expression_dirichlet_t::ym |
Definition at line 68 of file expression_dirichlet.f90.
| real(kind=rp), dimension(:), allocatable expression_dirichlet::expression_dirichlet_t::zm |
Definition at line 69 of file expression_dirichlet.f90.
|
inherited |