Impose the analytic solution on the boundary. Works only if an analytic solution exists. More...
#include <AnalyticSolution.hpp>
Public Types | |
using | options = tmpl::list< elliptic::OptionTags::BoundaryConditionType< FieldTags >... > |
using | argument_tags = tmpl::list<::Tags::AnalyticSolutionsBase, domain::Tags::Mesh< Dim >, domain::Tags::Direction< Dim >, ::Tags::Normalized< domain::Tags::UnnormalizedFaceNormal< Dim, Frame::Inertial > >> |
using | volume_tags = tmpl::list<::Tags::AnalyticSolutionsBase, domain::Tags::Mesh< Dim > > |
using | argument_tags_linearized = tmpl::list<> |
using | volume_tags_linearized = tmpl::list<> |
![]() | |
using | registrars = Registrars |
using | creatable_classes = Registration::registrants< registrars > |
Public Member Functions | |
AnalyticSolution (const AnalyticSolution &) noexcept=default | |
AnalyticSolution & | operator= (const AnalyticSolution &) noexcept=default |
AnalyticSolution (AnalyticSolution &&) noexcept=default | |
AnalyticSolution & | operator= (AnalyticSolution &&) noexcept=default |
AnalyticSolution (const typename elliptic::OptionTags::BoundaryConditionType< FieldTags >::type... boundary_condition_types) noexcept | |
Select which elliptic::BoundaryConditionType to apply for each field. | |
std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > | get_clone () const noexcept override |
const auto & | boundary_condition_types () const noexcept |
template<typename OptionalAnalyticSolutions > | |
void | apply (const gsl::not_null< typename FieldTags::type * >... fields, const gsl::not_null< typename FieldTags::type * >... n_dot_fluxes, const OptionalAnalyticSolutions &optional_analytic_solutions, const Mesh< Dim > &volume_mesh, const Direction< Dim > &direction, const tnsr::i< DataVector, Dim > &face_normal) const noexcept |
void | apply_linearized (const gsl::not_null< typename FieldTags::type * >... fields, const gsl::not_null< typename FieldTags::type * >... n_dot_fluxes) const noexcept |
void | pup (PUP::er &p) noexcept override |
![]() | |
BoundaryCondition (const BoundaryCondition &)=default | |
BoundaryCondition (BoundaryCondition &&)=default | |
BoundaryCondition & | operator= (const BoundaryCondition &)=default |
BoundaryCondition & | operator= (BoundaryCondition &&)=default |
![]() | |
BoundaryCondition (BoundaryCondition &&) noexcept=default | |
BoundaryCondition & | operator= (BoundaryCondition &&) noexcept=default |
BoundaryCondition (const BoundaryCondition &)=default | |
BoundaryCondition & | operator= (const BoundaryCondition &)=default |
BoundaryCondition (CkMigrateMessage *const msg) noexcept | |
WRAPPED_PUPable_abstract (BoundaryCondition) | |
Static Public Attributes | |
static constexpr Options::String | help |
![]() | |
static constexpr size_t | volume_dim = Dim |
Friends | |
bool | operator== (const AnalyticSolution &lhs, const AnalyticSolution &rhs) noexcept |
bool | operator!= (const AnalyticSolution &lhs, const AnalyticSolution &rhs) noexcept |
Impose the analytic solution on the boundary. Works only if an analytic solution exists.
The analytic solution is retrieved from Tags::AnalyticSolutionsBase
. It must hold solutions for both the System::primal_fields
and the System::primal_fluxes
. The user can select to impose the analytic solution as Dirichlet or Neumann boundary conditions for each field separately. Dirichlet boundary conditions are imposed on the fields and Neumann boundary conditions are imposed on the fluxes.
See elliptic::Actions::InitializeAnalyticSolutions
for an action that can add the analytic solutions to the DataBox.
|
staticconstexpr |