38 use,
intrinsic :: iso_c_binding, only : c_ptr
40 use json_module,
only : json_file
52 procedure, pass(this) :: apply_scalar_dev => &
54 procedure, pass(this) :: apply_vector_dev => &
59 procedure, pass(this) :: init_from_components => &
74 type(
coef_t),
target,
intent(in) :: coef
75 type(json_file),
intent(inout) :: json
77 call this%init_from_components(coef)
84 type(
coef_t),
target,
intent(in) :: coef
86 call this%init_base(coef)
93 integer,
intent(in) :: n
94 real(kind=
rp),
intent(inout),
dimension(n) :: x
96 logical,
intent(in),
optional :: strong
100 if (
present(strong))
then
120 integer,
intent(in) :: n
121 real(kind=
rp),
intent(inout),
dimension(n) :: x
122 real(kind=
rp),
intent(inout),
dimension(n) :: y
123 real(kind=
rp),
intent(inout),
dimension(n) :: z
125 logical,
intent(in),
optional :: strong
129 if (
present(strong))
then
150 type(c_ptr),
intent(inout) :: x_d
152 logical,
intent(in),
optional :: strong
153 type(c_ptr),
intent(inout) :: strm
156 if (
present(strong))
then
162 if (strong_ .and. (this%msk(0) .gt. 0))
then
164 size(this%msk), strm)
173 type(c_ptr),
intent(inout) :: x_d
174 type(c_ptr),
intent(inout) :: y_d
175 type(c_ptr),
intent(inout) :: z_d
177 logical,
intent(in),
optional :: strong
178 type(c_ptr),
intent(inout) :: strm
181 if (
present(strong))
then
187 if (strong_ .and. (this%msk(0) .gt. 0))
then
189 size(this%msk), strm)
198 call this%free_base()
205 logical,
optional,
intent(in) :: only_facets
206 logical :: only_facets_
208 if (
present(only_facets))
then
209 only_facets_ = only_facets
211 only_facets_ = .false.
214 call this%finalize_base(only_facets_)
Defines a boundary condition.
subroutine, public device_zero_dirichlet_apply_vector(msk, x, y, z, m, strm)
subroutine, public device_zero_dirichlet_apply_scalar(msk, x, m, strm)
integer, parameter, public rp
Global precision used in computations.
Module with things related to the simulation time.
Defines a zero-valued Dirichlet boundary condition.
subroutine zero_dirichlet_apply_scalar(this, x, n, time, strong)
Apply boundary condition to a scalar field. to a vector x.
subroutine zero_dirichlet_apply_vector_dev(this, x_d, y_d, z_d, time, strong, strm)
Apply boundary condition to a vector field, device version.
subroutine zero_dirichlet_init(this, coef, json)
Constructor.
subroutine zero_dirichlet_apply_scalar_dev(this, x_d, time, strong, strm)
Apply boundary condition to a scalar field, device version.
subroutine zero_dirichlet_free(this)
Destructor.
subroutine zero_dirichlet_init_from_components(this, coef)
Constructor.
subroutine zero_dirichlet_finalize(this, only_facets)
Finalize.
subroutine zero_dirichlet_apply_vector(this, x, y, z, n, time, strong)
Apply boundary condition to a vector field.
Base type for a boundary condition.
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...
A struct that contains all info about the time, expand as needed.
Zero-valued Dirichlet boundary condition. Used for no-slip walls, but also for various auxillary cond...