Neko 0.9.99
A portable framework for high-order spectral element flow simulations
|
User defined dirichlet condition, for which the user can work with an entire field. The type stores a separate dummy field field_bc
, which is passed to the user routine and can be populated with arbitrary values. The boundary condition then copy-pastes these values to the actual solution field using the mask of the boundary condition. So, in the end, only the relevant boundary values are updated.
More...
Public Member Functions | |
procedure, pass(this) | init (this, coef, json) |
Constructor. | |
procedure, pass(this) | init_from_components (this, coef, field_name) |
Constructor from components. | |
procedure, pass(this) | free (this) |
Destructor. | |
procedure, pass(this) | finalize (this) |
Finalize. | |
procedure, pass(this) | apply_scalar (this, x, n, t, tstep, strong) |
Apply scalar by performing a masked copy. | |
procedure, pass(this) | apply_vector (this, x, y, z, n, t, tstep, strong) |
(No-op) Apply vector. | |
procedure, pass(this) | apply_vector_dev (this, x_d, y_d, z_d, t, tstep, strong) |
(No-op) Apply vector (device). | |
procedure, pass(this) | apply_scalar_dev (this, x_d, t, tstep, strong) |
Apply scalar (device). | |
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, n, t, tstep) |
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, n, t, tstep) |
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, t, tstep, 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, t, tstep, 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, t, tstep, strong) |
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, t, tstep, strong) |
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(field_t) | field_bc |
A dummy field which can be manipulated by the user to set the boundary values. | |
type(field_list_t) | field_list |
A field list, which just stores field_bc , for convenience. | |
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. | |
Static Public Attributes | |
procedure(field_dirichlet_update), pointer, nopass | update => null() |
Function pointer to the user routine performing the update of the values of the boundary fields. | |
Definition at line 64 of file field_dirichlet.f90.
|
pure virtualinherited |
procedure, pass(this) field_dirichlet::field_dirichlet_t::apply_scalar | ( | class(field_dirichlet_t), intent(inout) | this, |
real(kind=rp), dimension(n), intent(inout) | x, | ||
integer, intent(in) | n, | ||
real(kind=rp), intent(in), optional | t, | ||
integer, intent(in), optional | tstep, | ||
logical, intent(in), optional | strong | ||
) |
x | Field onto which to copy the values (e.g. u,v,w,p or s). |
n | Size of the array x . |
t | Time. |
tstep | Time step. |
Definition at line 84 of file field_dirichlet.f90.
procedure, pass(this) field_dirichlet::field_dirichlet_t::apply_scalar_dev | ( | class(field_dirichlet_t), intent(inout), target | this, |
type(c_ptr) | x_d, | ||
real(kind=rp), intent(in), optional | t, | ||
integer, intent(in), optional | tstep, | ||
logical, intent(in), optional | strong | ||
) |
x_d | Device pointer to the field onto which to copy the values. |
t | Time. |
tstep | Time step. |
Definition at line 91 of file field_dirichlet.f90.
|
pure virtualinherited |
procedure, pass(this) field_dirichlet::field_dirichlet_t::apply_vector | ( | class(field_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, | ||
real(kind=rp), intent(in), optional | t, | ||
integer, intent(in), optional | tstep, | ||
logical, intent(in), optional | strong | ||
) |
x | x-component of the field onto which to apply the values. |
y | y-component of the field onto which to apply the values. |
z | z-component of the field onto which to apply the values. |
n | Size of the x , y and z arrays. |
t | Time. |
tstep | Time step. |
Definition at line 86 of file field_dirichlet.f90.
|
pure virtualinherited |
procedure, pass(this) field_dirichlet::field_dirichlet_t::apply_vector_dev | ( | class(field_dirichlet_t), intent(inout), target | this, |
type(c_ptr) | x_d, | ||
type(c_ptr) | y_d, | ||
type(c_ptr) | z_d, | ||
real(kind=rp), intent(in), optional | t, | ||
integer, intent(in), optional | tstep, | ||
logical, intent(in), optional | strong | ||
) |
x | x-component of the field onto which to apply the values. |
y | y-component of the field onto which to apply the values. |
z | z-component of the field onto which to apply the values. |
t | Time. |
tstep | Time step. |
Definition at line 88 of file field_dirichlet.f90.
|
inherited |
procedure, pass(this) field_dirichlet::field_dirichlet_t::finalize | ( | class(field_dirichlet_t), intent(inout), target | this | ) |
Definition at line 82 of file field_dirichlet.f90.
procedure, pass(this) field_dirichlet::field_dirichlet_t::free | ( | class(field_dirichlet_t), intent(inout), target | this | ) |
Definition at line 80 of file field_dirichlet.f90.
procedure, pass(this) field_dirichlet::field_dirichlet_t::init | ( | class(field_dirichlet_t), intent(inout), target | this, |
type(coef_t), intent(in) | 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 75 of file field_dirichlet.f90.
procedure, pass(this) field_dirichlet::field_dirichlet_t::init_from_components | ( | class(field_dirichlet_t), intent(inout), target | this, |
type(coef_t), intent(in) | coef, | ||
character(len=*), intent(in) | field_name | ||
) |
[in] | coef | The SEM coefficients. |
Definition at line 77 of file field_dirichlet.f90.
|
inherited |
|
inherited |
type(field_t) field_dirichlet::field_dirichlet_t::field_bc |
Definition at line 67 of file field_dirichlet.f90.
type(field_list_t) field_dirichlet::field_dirichlet_t::field_list |
Definition at line 69 of file field_dirichlet.f90.
|
inherited |
|
inherited |
|
static |
Definition at line 72 of file field_dirichlet.f90.