Neko 1.99.2
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
neumann::neumann_t Type Referenceabstract

A Neumann boundary condition. Sets the flux of the field to the chosen values. More...

Inheritance diagram for neumann::neumann_t:
Collaboration diagram for neumann::neumann_t:

Public Member Functions

procedure, pass(thisapply_scalar (this, x, n, time, strong)
 Boundary condition apply for a generic Neumann condition to a vector x.
 
procedure, pass(thisapply_vector (this, x, y, z, n, time, strong)
 Boundary condition apply for a generic Neumann condition to vectors x, y and z.
 
procedure, pass(thisapply_scalar_dev (this, x_d, time, strong, strm)
 Boundary condition apply for a generic Neumann condition to a vector x (device version)
 
procedure, pass(thisapply_vector_dev (this, x_d, y_d, z_d, time, strong, strm)
 Boundary condition apply for a generic Neumann condition to vectors x, y and z (device version)
 
procedure, pass(thisinit (this, coef, json)
 Constructor.
 
procedure, pass(thisneumann_init_from_components_array (this, coef, flux)
 Constructor from components, one flux value per component.
 
procedure, pass(thisneumann_init_from_components_single (this, coef, flux)
 Constructor from components, single flux for the single-component case.
 
generic init_from_components (this, coef, flux)
 Constructor from components, one flux value per component.
 
generic init_from_components (this, coef, flux)
 Constructor from components, single flux for the single-component case.
 
procedure, pass(thisset_flux_scalar (this, flux, comp)
 Set the flux using a scalar.
 
procedure, pass(thisset_flux_array (this, flux, comp)
 Set the flux using an array.
 
generic set_flux (this, flux, comp)
 Generic interface for setting the flux.
 
generic set_flux (this, flux, comp)
 Generic interface for setting the flux.
 
procedure, pass(thisfree (this)
 Destructor.
 
procedure, pass(thisfinalize (this, only_facets)
 Finalize.
 
procedure, pass(thisinit_base (this, coef)
 Constructor.
 
procedure, pass(thisfree_base (this)
 Destructor.
 
procedure, pass(thismark_facet (this, facet, el)
 Mark a facet on an element as part of the boundary condition.
 
procedure, pass(thismark_facets (this, facet_list)
 Mark all facets from a (facet, element) tuple list.
 
procedure, pass(thismark_zone (this, bc_zone)
 Mark all facets from a zone.
 
procedure, pass(thisfinalize_base (this, only_facets)
 Finalize the construction of the bc by populating the msk and facet arrays.
 
procedure, pass(thisapply_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(thisapply_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(thisdebug_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(vector_t), dimension(:), allocatable flux
 The flux values at the boundary. Each vector in the array corresponds to a component of the flux.
 
logical uniform_0 = .false.
 Flag for whether we have a homogeneous Neumann condition, i.e. "do nothing".
 
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.
 

Private Attributes

real(kind=rp), dimension(:), allocatable, private init_flux_
 An initial flux value set at construction. A constant for each component. Copied to flux at finalization. This is needed because we do not know the size of the boundary at construction time, only at finalization.
 

Detailed Description

The condition is imposed weakly by adding an appropriate source term to the right-hand-side. At construction time, we check if the prescribed flux is zero and if so, the condition just does nothing. Setting the flux using the set_flux routine, automatically removes this assumption.

Definition at line 60 of file neumann.f90.

Member Function/Subroutine Documentation

◆ apply_scalar() [1/2]

procedure(bc_apply_scalar), deferred, pass bc::bc_t::apply_scalar ( class(bc_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 
)
pure virtualinherited

Definition at line 112 of file bc.f90.

◆ apply_scalar() [2/2]

procedure, pass(this) neumann::neumann_t::apply_scalar ( class(neumann_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 
)

Definition at line 73 of file neumann.f90.

◆ apply_scalar_dev() [1/2]

procedure(bc_apply_scalar_dev), deferred, pass bc::bc_t::apply_scalar_dev ( class(bc_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 
)
pure virtualinherited

Definition at line 116 of file bc.f90.

◆ apply_scalar_dev() [2/2]

procedure, pass(this) neumann::neumann_t::apply_scalar_dev ( class(neumann_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 
)

Definition at line 75 of file neumann.f90.

◆ apply_scalar_generic()

procedure, pass(this) bc::bc_t::apply_scalar_generic ( class(bc_t), intent(inout this,
type(field_t), intent(inout x,
type(time_state_t), intent(in), optional  time,
logical, intent(in), optional  strong,
type(c_ptr), intent(inout), optional  strm 
)
inherited
Parameters
xThe x comp of the field for which to apply the bc.
timeCurrent time state.
strongWhether we are setting a strong or a weak bc.
strmDevice stream

Definition at line 105 of file bc.f90.

◆ apply_vector() [1/2]

procedure(bc_apply_vector), deferred, pass bc::bc_t::apply_vector ( class(bc_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 
)
pure virtualinherited

Definition at line 114 of file bc.f90.

◆ apply_vector() [2/2]

procedure, pass(this) neumann::neumann_t::apply_vector ( class(neumann_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 
)

Definition at line 74 of file neumann.f90.

◆ apply_vector_dev() [1/2]

procedure(bc_apply_vector_dev), deferred, pass bc::bc_t::apply_vector_dev ( class(bc_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 
)
pure virtualinherited

Definition at line 118 of file bc.f90.

◆ apply_vector_dev() [2/2]

procedure, pass(this) neumann::neumann_t::apply_vector_dev ( class(neumann_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 
)

Definition at line 76 of file neumann.f90.

◆ apply_vector_generic()

procedure, pass(this) bc::bc_t::apply_vector_generic ( class(bc_t), intent(inout this,
type(field_t), intent(inout x,
type(field_t), intent(inout y,
type(field_t), intent(inout z,
type(time_state_t), intent(in), optional  time,
logical, intent(in), optional  strong,
type(c_ptr), intent(inout), optional  strm 
)
inherited
Parameters
xThe x comp of the field for which to apply the bc.
yThe y comp of the field for which to apply the bc.
zThe z comp of the field for which to apply the bc.
timeCurrent time state.
strongWhether we are setting a strong or a weak bc.
Devicestream

Definition at line 108 of file bc.f90.

◆ debug_mask_()

procedure, pass(this) bc::bc_t::debug_mask_ ( class(bc_t), intent(inout this,
character(len=*), intent(in file_name 
)
inherited

The mask will be marked with 1.

Parameters
file_nameThe name of the fld file.

Definition at line 110 of file bc.f90.

◆ finalize() [1/2]

procedure(bc_finalize), deferred, pass bc::bc_t::finalize ( class(bc_t), intent(inout), target  this,
logical, intent(in), optional  only_facets 
)
pure virtualinherited

Definition at line 124 of file bc.f90.

◆ finalize() [2/2]

procedure, pass(this) neumann::neumann_t::finalize ( class(neumann_t), intent(inout), target  this,
logical, intent(in), optional  only_facets 
)

Definition at line 95 of file neumann.f90.

◆ finalize_base()

procedure, pass(this) bc::bc_t::finalize_base ( class(bc_t), intent(inout), target  this,
logical, intent(in), optional  only_facets 
)
inherited
Parameters
only_facets,ifthe bc is only to be applied on facets. Relevant for bcs where the normal direction is important and where and shared dofs should not be included.

This will linearize the marked facet's indicies in the msk array.

Definition at line 101 of file bc.f90.

◆ free() [1/2]

procedure(bc_destructor), deferred, pass bc::bc_t::free ( class(bc_t), intent(inout), target  this)
pure virtualinherited

Definition at line 120 of file bc.f90.

◆ free() [2/2]

procedure, pass(this) neumann::neumann_t::free ( class(neumann_t), intent(inout), target  this)

Definition at line 93 of file neumann.f90.

◆ free_base()

procedure, pass(this) bc::bc_t::free_base ( class(bc_t), intent(inout this)
inherited

Definition at line 92 of file bc.f90.

◆ init() [1/2]

procedure(bc_constructor), deferred, pass bc::bc_t::init ( class(bc_t), intent(inout), target  this,
type(coef_t), intent(in), target  coef,
type(json_file), intent(inout json 
)
pure virtualinherited

Definition at line 122 of file bc.f90.

◆ init() [2/2]

procedure, pass(this) neumann::neumann_t::init ( class(neumann_t), intent(inout), target  this,
type(coef_t), intent(in), target  coef,
type(json_file), intent(inout json 
)
Parameters
[in]coefThe SEM coefficients.
[in,out]jsonThe JSON object configuring the boundary condition.

Definition at line 78 of file neumann.f90.

◆ init_base()

procedure, pass(this) bc::bc_t::init_base ( class(bc_t), intent(inout this,
type(coef_t), intent(in), target  coef 
)
inherited
Parameters
dofMap of degrees of freedom.

Definition at line 90 of file bc.f90.

◆ init_from_components() [1/2]

generic neumann::neumann_t::init_from_components ( class(neumann_t), intent(inout), target  this,
type(coef_t), intent(in coef,
real(kind=rp), intent(in flux 
)
Parameters
[in]coefThe SEM coefficients.
[in]fluxThe value of the flux at the boundary.

Definition at line 83 of file neumann.f90.

◆ init_from_components() [2/2]

generic neumann::neumann_t::init_from_components ( class(neumann_t), intent(inout), target  this,
type(coef_t), intent(in coef,
real(kind=rp), dimension(3), intent(in flux 
)
Parameters
[in]coefThe SEM coefficients.
[in]fluxThe value of the flux at the boundary.

Definition at line 83 of file neumann.f90.

Here is the call graph for this function:

◆ mark_facet()

procedure, pass(this) bc::bc_t::mark_facet ( class(bc_t), intent(inout this,
integer, intent(in facet,
integer, intent(in el 
)
inherited
Parameters
facetThe index of the facet.
elThe index of the element.

Definition at line 94 of file bc.f90.

◆ mark_facets()

procedure, pass(this) bc::bc_t::mark_facets ( class(bc_t), intent(inout this,
type(stack_i4t2_t), intent(inout facet_list 
)
inherited
Parameters
facet_listThe list of tuples.

Definition at line 96 of file bc.f90.

◆ mark_zone()

procedure, pass(this) bc::bc_t::mark_zone ( class(bc_t), intent(inout this,
class(facet_zone_t), intent(in bc_zone 
)
inherited
Parameters
bc_zoneBoundary zone to be marked.

Definition at line 98 of file bc.f90.

◆ neumann_init_from_components_array()

procedure, pass(this) neumann::neumann_t::neumann_init_from_components_array ( class(neumann_t), intent(inout), target  this,
type(coef_t), intent(in coef,
real(kind=rp), dimension(3), intent(in flux 
)
Parameters
[in]coefThe SEM coefficients.
[in]fluxThe value of the flux at the boundary.

Definition at line 80 of file neumann.f90.

◆ neumann_init_from_components_single()

procedure, pass(this) neumann::neumann_t::neumann_init_from_components_single ( class(neumann_t), intent(inout), target  this,
type(coef_t), intent(in coef,
real(kind=rp), intent(in flux 
)
Parameters
[in]coefThe SEM coefficients.
[in]fluxThe value of the flux at the boundary.

Definition at line 82 of file neumann.f90.

◆ set_flux() [1/2]

generic neumann::neumann_t::set_flux ( class(neumann_t), intent(inout this,
real(kind=rp), intent(in flux,
integer, intent(in comp 
)
Parameters
fluxThe desired flux.
compThe component to set.

Definition at line 91 of file neumann.f90.

◆ set_flux() [2/2]

generic neumann::neumann_t::set_flux ( class(neumann_t), intent(inout this,
type(vector_t), intent(in flux,
integer, intent(in comp 
)
Parameters
fluxThe desired flux.
compThe component to set.

Definition at line 91 of file neumann.f90.

◆ set_flux_array()

procedure, pass(this) neumann::neumann_t::set_flux_array ( class(neumann_t), intent(inout this,
type(vector_t), intent(in flux,
integer, intent(in comp 
)
Parameters
fluxThe desired flux.
compThe component to set.

Definition at line 89 of file neumann.f90.

◆ set_flux_scalar()

procedure, pass(this) neumann::neumann_t::set_flux_scalar ( class(neumann_t), intent(inout this,
real(kind=rp), intent(in flux,
integer, intent(in comp 
)
Parameters
fluxThe desired flux.
compThe component to set.

Definition at line 87 of file neumann.f90.

Member Data Documentation

◆ coef

type(coef_t), pointer bc::bc_t::coef => null()
inherited

Definition at line 69 of file bc.f90.

◆ dof

type(dofmap_t), pointer bc::bc_t::dof => null()
inherited

Definition at line 67 of file bc.f90.

◆ facet

integer, dimension(:), allocatable bc::bc_t::facet
inherited

Definition at line 65 of file bc.f90.

◆ facet_d

type(c_ptr) bc::bc_t::facet_d = C_NULL_PTR
inherited

Definition at line 79 of file bc.f90.

◆ flux

type(vector_t), dimension(:), allocatable neumann::neumann_t::flux

Definition at line 63 of file neumann.f90.

◆ init_flux_

real(kind=rp), dimension(:), allocatable, private neumann::neumann_t::init_flux_
private

Definition at line 68 of file neumann.f90.

◆ marked_facet

type(stack_i4t2_t) bc::bc_t::marked_facet
inherited

Definition at line 75 of file bc.f90.

◆ msh

type(mesh_t), pointer bc::bc_t::msh => null()
inherited

Definition at line 71 of file bc.f90.

◆ msk

integer, dimension(:), allocatable bc::bc_t::msk
inherited

Definition at line 63 of file bc.f90.

◆ msk_d

type(c_ptr) bc::bc_t::msk_d = C_NULL_PTR
inherited

Definition at line 77 of file bc.f90.

◆ strong

logical bc::bc_t::strong = .true.
inherited

Definition at line 84 of file bc.f90.

◆ uniform_0

logical neumann::neumann_t::uniform_0 = .false.

Definition at line 71 of file neumann.f90.

◆ updated

logical bc::bc_t::updated = .false.
inherited

Definition at line 87 of file bc.f90.

◆ xh

type(space_t), pointer bc::bc_t::xh => null()
inherited

Definition at line 73 of file bc.f90.


The documentation for this type was generated from the following file: