|
Neko 1.99.7
A portable framework for high-order spectral element flow simulations
|
Vector valued Dirichlet condition, with one mathematical expression per component, 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_x, str_y, str_z) |
| Constructor from components. | |
| procedure, pass(this) | free (this) |
| Destructor. | |
| procedure, pass(this) | finalize (this, only_facets) |
| Finalize. | |
| procedure, pass(this) | apply_scalar (this, x, n, time, strong) |
| (No-op) Apply scalar. | |
| procedure, pass(this) | apply_vector (this, x, y, z, n, time, strong) |
| Apply the condition to a vector field. | |
| procedure, pass(this) | apply_scalar_dev (this, x_d, time, strong, strm) |
| (No-op) Apply scalar (device). | |
| procedure, pass(this) | apply_vector_dev (this, x_d, y_d, z_d, time, strong, strm) |
| Apply the condition to a vector field (device). | |
| procedure, pass(this) | update (this, time, strm) |
| Bring the values 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) | finalize_base (this, only_facets) |
| 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, only_facets) |
| Deferred finalizer. | |
Public Attributes | |
| type(expression_t), dimension(3) | expr |
| The compiled expressions, one per component. | |
| real(kind=rp), dimension(:), allocatable | gx |
| The values in each point of the mask, one array per component. | |
| real(kind=rp), dimension(:), allocatable | gy |
| real(kind=rp), dimension(:), allocatable | gz |
| 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) | gx_d = C_NULL_PTR |
Device pointers for gx, gy and gz. | |
| type(c_ptr) | gy_d = C_NULL_PTR |
| type(c_ptr) | gz_d = C_NULL_PTR |
| integer, dimension(:), allocatable | msk |
| The linear index of each node in each boundary facet. | |
| integer, dimension(:), allocatable | facet |
| A list of facet ids (1 to 6), one for each element in 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_d = C_NULL_PTR |
| Device pointer for facet. | |
| logical | strong = .true. |
| Wether the bc is strongly enforced. Essentially valid for all Dirichlet types of bcs. These need to be masked out for solvers etc, so that values are not affected. Mixed bcs are, by convention, weak. | |
| 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 vector valued counterpart of expression_dirichlet_t, see that type for how the expressions are evaluated and cached.
Definition at line 56 of file expression_dirichlet_vector.f90.
| procedure, pass(this) expression_dirichlet_vector::expression_dirichlet_vector_t::apply_scalar | ( | class(expression_dirichlet_vector_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 82 of file expression_dirichlet_vector.f90.
| procedure, pass(this) expression_dirichlet_vector::expression_dirichlet_vector_t::apply_scalar_dev | ( | class(expression_dirichlet_vector_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 88 of file expression_dirichlet_vector.f90.
|
pure virtualinherited |
| procedure, pass(this) expression_dirichlet_vector::expression_dirichlet_vector_t::apply_vector | ( | class(expression_dirichlet_vector_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_vector.f90.
|
pure virtualinherited |
| procedure, pass(this) expression_dirichlet_vector::expression_dirichlet_vector_t::apply_vector_dev | ( | class(expression_dirichlet_vector_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 91 of file expression_dirichlet_vector.f90.
|
inherited |
| procedure, pass(this) expression_dirichlet_vector::expression_dirichlet_vector_t::finalize | ( | class(expression_dirichlet_vector_t), intent(inout), target | this, |
| logical, intent(in), optional | only_facets | ||
| ) |
Tabulates the coordinates of the points of the mask and evaluates whichever of the three expressions do not depend on time.
| [in] | only_facets | Whether to only mark the facets of the mask. |
Definition at line 80 of file expression_dirichlet_vector.f90.
| procedure, pass(this) expression_dirichlet_vector::expression_dirichlet_vector_t::free | ( | class(expression_dirichlet_vector_t), intent(inout), target | this | ) |
Definition at line 78 of file expression_dirichlet_vector.f90.
| procedure, pass(this) expression_dirichlet_vector::expression_dirichlet_vector_t::init | ( | class(expression_dirichlet_vector_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 73 of file expression_dirichlet_vector.f90.
| procedure, pass(this) expression_dirichlet_vector::expression_dirichlet_vector_t::init_from_components | ( | class(expression_dirichlet_vector_t), intent(inout), target | this, |
| type(coef_t), intent(in), target | coef, | ||
| character(len=*), intent(in) | str_x, | ||
| character(len=*), intent(in) | str_y, | ||
| character(len=*), intent(in) | str_z | ||
| ) |
| [in] | coef | The SEM coefficients. |
| [in] | str_x | The expression for the x-component. |
| [in] | str_y | The expression for the y-component. |
| [in] | str_z | The expression for the z-component. |
Definition at line 75 of file expression_dirichlet_vector.f90.
| procedure, pass(this) expression_dirichlet_vector::expression_dirichlet_vector_t::update | ( | class(expression_dirichlet_vector_t), intent(inout) | this, |
| type(time_state_t), intent(in), optional | time, | ||
| type(c_ptr), intent(inout), optional | strm | ||
| ) |
A no-op unless at least one of the expressions depends on time and the values have not already been updated in this timestep. Only the time dependent components are re-evaluated, but all three are copied to the device, since they share one transfer anyway.
| [in] | time | The current time state. |
| [in,out] | strm | The device stream to issue the copies on. |
Definition at line 94 of file expression_dirichlet_vector.f90.
| type(expression_t), dimension(3) expression_dirichlet_vector::expression_dirichlet_vector_t::expr |
Definition at line 58 of file expression_dirichlet_vector.f90.
|
inherited |
|
inherited |
| real(kind=rp), dimension(:), allocatable expression_dirichlet_vector::expression_dirichlet_vector_t::gx |
Definition at line 60 of file expression_dirichlet_vector.f90.
| type(c_ptr) expression_dirichlet_vector::expression_dirichlet_vector_t::gx_d = C_NULL_PTR |
Definition at line 68 of file expression_dirichlet_vector.f90.
| real(kind=rp), dimension(:), allocatable expression_dirichlet_vector::expression_dirichlet_vector_t::gy |
Definition at line 61 of file expression_dirichlet_vector.f90.
| type(c_ptr) expression_dirichlet_vector::expression_dirichlet_vector_t::gy_d = C_NULL_PTR |
Definition at line 69 of file expression_dirichlet_vector.f90.
| real(kind=rp), dimension(:), allocatable expression_dirichlet_vector::expression_dirichlet_vector_t::gz |
Definition at line 62 of file expression_dirichlet_vector.f90.
| type(c_ptr) expression_dirichlet_vector::expression_dirichlet_vector_t::gz_d = C_NULL_PTR |
Definition at line 70 of file expression_dirichlet_vector.f90.
|
inherited |
|
inherited |
|
inherited |
| real(kind=rp), dimension(:), allocatable expression_dirichlet_vector::expression_dirichlet_vector_t::xm |
Definition at line 64 of file expression_dirichlet_vector.f90.
| real(kind=rp), dimension(:), allocatable expression_dirichlet_vector::expression_dirichlet_vector_t::ym |
Definition at line 65 of file expression_dirichlet_vector.f90.
| real(kind=rp), dimension(:), allocatable expression_dirichlet_vector::expression_dirichlet_vector_t::zm |
Definition at line 66 of file expression_dirichlet_vector.f90.
|
inherited |