MoReFEM
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes
MoReFEM::DirichletBoundaryConditionManager Class Referencefinal

Singleton class which is aware of all essential boundary conditions that might be considered within a model. More...

#include <DirichletBoundaryConditionManager.hpp>

Inheritance diagram for MoReFEM::DirichletBoundaryConditionManager:
Collaboration diagram for MoReFEM::DirichletBoundaryConditionManager:

Public Types

using indexed_section_tag = ::MoReFEM::Internal::InputDataNS::BoundaryConditionNS::Tag
 Convenient alias to the (internal) tag used to identify IndexedSection of a specific type (e.g. all the sections related to a Mesh).
 
using self
 Convenient alias.
 

Public Member Functions

template<class IndexedSectionDescriptionT , ::MoReFEM::Concept::ModelSettingsType ModelSettingsT, ::MoReFEM::Concept::InputDataType InputDataT>
void Create (const IndexedSectionDescriptionT &indexed_section_description, const ModelSettingsT &model_settings, const InputDataT &input_data)
 Create a DirichletBoundaryCondition object from InputData and ModelSettings information.
 
std::size_t NboundaryCondition () const noexcept
 Returns the number of boundary conditions.
 
const DirichletBoundaryConditionGetDirichletBoundaryCondition (BoundaryConditionNS::unique_id unique_id, const std::source_location location=std::source_location::current()) const
 
DirichletBoundaryConditionGetNonCstDirichletBoundaryCondition (BoundaryConditionNS::unique_id unique_id, const std::source_location location=std::source_location::current())
 
DirichletBoundaryCondition::shared_ptr GetDirichletBoundaryConditionPtr (BoundaryConditionNS::unique_id unique_id, const std::source_location location=std::source_location::current()) const
 
const DirichletBoundaryCondition::vector_shared_ptrGetList () const noexcept
 Access to the list of boundary conditions.
 

Static Public Member Functions

static const std::string & ClassName ()
 Return the name of the class.
 
static DirichletBoundaryConditionManagerCreateOrGetInstance (const std::source_location location=std::source_location::current(), Args &&... args)
 Call instance of the singleton.
 
static DirichletBoundaryConditionManagerGetInstance (const std::source_location location=std::source_location::current())
 Call an instance of the singleton that must already have been created.
 
static void Destroy ()
 Destroy the singleton.
 

Private Member Functions

void Create (BoundaryConditionNS::unique_id unique_id, const Domain &domain, const Unknown &unknown, const std::vector< double > &value_per_component, const std::string &component, const bool is_mutable)
 
void RegisterDirichletBoundaryCondition (const DirichletBoundaryCondition::shared_ptr &ptr)
 
Special members
virtual ~DirichletBoundaryConditionManager () override
 Destructor.
 
 DirichletBoundaryConditionManager (const DirichletBoundaryConditionManager &rhs)=delete
 The copy constructor.
 
 DirichletBoundaryConditionManager (DirichletBoundaryConditionManager &&rhs)=delete
 The move constructor.
 
DirichletBoundaryConditionManageroperator= (const DirichletBoundaryConditionManager &rhs)=delete
 The (copy) operator=.
 
DirichletBoundaryConditionManageroperator= (DirichletBoundaryConditionManager &&rhs)=delete
 The (move) operator=.
 

Static Private Member Functions

static void OnDeadReference (const std::source_location location=std::source_location::current())
 Gets called if dead reference detected.
 
static std::mutex & GetNonCstSingletonMutex ()
 Get reference to the singleton mutex.
 

Private Attributes

DirichletBoundaryCondition::vector_shared_ptr boundary_condition_list_
 List of boundary conditions.
 

Static Private Attributes

static DirichletBoundaryConditionManagerinstance_
 Internal pointer to the actual instance.
 
static bool destroyed_
 Used for protection against dead reference problem (invocation while the instance has been destroyed).
 
static std::mutex singleton_mutex_
 Mutex object.
 

Singleton requirements.

class Utilities::Singleton< DirichletBoundaryConditionManager >
 Friendship declaration to Singleton template class (to enable call to constructor).
 
 DirichletBoundaryConditionManager ()=default
 Constructor.
 

Detailed Description

Singleton class which is aware of all essential boundary conditions that might be considered within a model.

These conditions are defined in the input data file.

Member Typedef Documentation

◆ indexed_section_tag

Convenient alias to the (internal) tag used to identify IndexedSection of a specific type (e.g. all the sections related to a Mesh).

Tag used to identify IndexedSection of a given type (e.g. all Mesh sections in the input data or model settings)

Constructor & Destructor Documentation

◆ DirichletBoundaryConditionManager() [1/2]

MoReFEM::DirichletBoundaryConditionManager::DirichletBoundaryConditionManager ( const DirichletBoundaryConditionManager & rhs)
privatedelete

The copy constructor.

Parameters
[in]rhsThe object from which the construction occurs.

◆ DirichletBoundaryConditionManager() [2/2]

MoReFEM::DirichletBoundaryConditionManager::DirichletBoundaryConditionManager ( DirichletBoundaryConditionManager && rhs)
privatedelete

The move constructor.

Parameters
[in]rhsThe object from which the construction occurs.

Member Function Documentation

◆ operator=() [1/2]

DirichletBoundaryConditionManager & MoReFEM::DirichletBoundaryConditionManager::operator= ( const DirichletBoundaryConditionManager & rhs)
privatedelete

The (copy) operator=.

Parameters
[in]rhsThe object from which the affectation occurs.
Returns
Reference to the object (to enable chained affectation).

◆ operator=() [2/2]

DirichletBoundaryConditionManager & MoReFEM::DirichletBoundaryConditionManager::operator= ( DirichletBoundaryConditionManager && rhs)
privatedelete

The (move) operator=.

Parameters
[in]rhsThe object from which the affectation occurs.
Returns
Reference to the object (to enable chained affectation).

◆ Create() [1/2]

template<class IndexedSectionDescriptionT , ::MoReFEM::Concept::ModelSettingsType ModelSettingsT, ::MoReFEM::Concept::InputDataType InputDataT>
void MoReFEM::DirichletBoundaryConditionManager::Create ( const IndexedSectionDescriptionT & indexed_section_description,
const ModelSettingsT & model_settings,
const InputDataT & input_data )

Create a DirichletBoundaryCondition object from InputData and ModelSettings information.

Parameters
[in]indexed_section_descriptionInstantiation of a IndexedSectionDescription object that is a placeholder to tell a given IndexedSection exists for the Model. Most of the time the instantiation itself is not used and the relevant information is in fact its type (from which type of the IndexedSection may be inferred).
Parameters
[in]model_settingsObject which hold the values of all the input data that should not be modifiable by the end user. Example (in most of the models): NumberingSubset in which an Unknown should be allotted in a FEltSpace.
Parameters
[in]input_dataObject which hold the values of all the input data that were defined in the Lua file (and that is thus modifiable by the end user). Example (in most of the models): the shape function to use for an Unknown in a FEltSpace.

◆ GetDirichletBoundaryCondition()

const DirichletBoundaryCondition & MoReFEM::DirichletBoundaryConditionManager::GetDirichletBoundaryCondition ( BoundaryConditionNS::unique_id unique_id,
const std::source_location location = std::source_location::current() ) const

Get the boundary condition associated with unique_id.

Parameters
[in]unique_idUnique identifier of the sought DirichletBoundaryCondition (as returned by DirichletBoundaryCondition::GetUniqueId()).
Parameters
[in]locationSTL object with relevant information about the calling site (usually to help when an exception is thrown.

◆ GetNonCstDirichletBoundaryCondition()

DirichletBoundaryCondition & MoReFEM::DirichletBoundaryConditionManager::GetNonCstDirichletBoundaryCondition ( BoundaryConditionNS::unique_id unique_id,
const std::source_location location = std::source_location::current() )

Get the boundary condition associated with unique_id.

Parameters
[in]unique_idUnique identifier of the sought DirichletBoundaryCondition (as returned by DirichletBoundaryCondition::GetUniqueId()).
Parameters
[in]locationSTL object with relevant information about the calling site (usually to help when an exception is thrown.

◆ GetDirichletBoundaryConditionPtr()

DirichletBoundaryCondition::shared_ptr MoReFEM::DirichletBoundaryConditionManager::GetDirichletBoundaryConditionPtr ( BoundaryConditionNS::unique_id unique_id,
const std::source_location location = std::source_location::current() ) const

Get the boundary condition associated with unique_id as a smart pointer.

Parameters
[in]unique_idUnique identifier of the sought DirichletBoundaryCondition (as returned by DirichletBoundaryCondition::GetUniqueId()).
Parameters
[in]locationSTL object with relevant information about the calling site (usually to help when an exception is thrown.

◆ Create() [2/2]

void MoReFEM::DirichletBoundaryConditionManager::Create ( BoundaryConditionNS::unique_id unique_id,
const Domain & domain,
const Unknown & unknown,
const std::vector< double > & value_per_component,
const std::string & component,
const bool is_mutable )
private
Parameters
[in]unique_idUnique identifier, used in the input data file to tag the condition.
[in]domainDomain upon which the condition is applied.
[in]unknownUnknown considered for the boundary condition. If you actually want a condition on a given domain that acts upon two unknowns, you must define another DirichletBoundaryCondition; both should be given in the dedicated VariationaFormulation.
[in]value_per_componentInitial value for each of the component.
[in]componentString that details on which component the condition should be applied. This string must be one recognized by the ComponentFactory; current choices are 'Comp1', 'Comp2', 'Comp3', 'Comp12', 'Comp23', 'Comp13' and 'Comp123'.
[in]is_mutableFalse if the boundary condition is homogeneous, true otherwise.

◆ RegisterDirichletBoundaryCondition()

void MoReFEM::DirichletBoundaryConditionManager::RegisterDirichletBoundaryCondition ( const DirichletBoundaryCondition::shared_ptr & ptr)
private

Register properly boundary condition in use.

Parameters
[in]ptrShared pointernton the new boundary condition to register.

◆ CreateOrGetInstance()

static DirichletBoundaryConditionManager & MoReFEM::Utilities::Singleton< DirichletBoundaryConditionManager >::CreateOrGetInstance ( const std::source_location location = std::source_location::current(),
Args &&... args )
staticinherited

Call instance of the singleton.

If not already existing it will be created on the fly, otherwise the existing one will be used. This method should be called in two cases:

  • If we do not know whether the instance already exists or not. The most typical example is when a value is registered within the singleton in an anonymous namespace.
  • If we know for sure it is the first call to the singleton. For instance the initialization of TimeKeep sinfgleton class that sets the initial time.

In all other cases, call instead GetInstance().

Template Parameters
ArgsVariadic template arguments.
Parameters
[in]argsArguments passed to the constructor if the object is to be built.
Parameters
[in]locationSTL object with relevant information about the calling site (usually to help when an exception is thrown.
Returns
Instance of the singleton.

◆ GetInstance()

static DirichletBoundaryConditionManager & MoReFEM::Utilities::Singleton< DirichletBoundaryConditionManager >::GetInstance ( const std::source_location location = std::source_location::current())
staticinherited

Call an instance of the singleton that must already have been created.

This must be called instead of CreateOrGetInstance(location) if T doesn't get a default constructor.

Parameters
[in]locationSTL object with relevant information about the calling site (usually to help when an exception is thrown.
Returns
Instance of the singleton.

◆ OnDeadReference()

static void MoReFEM::Utilities::Singleton< DirichletBoundaryConditionManager >::OnDeadReference ( const std::source_location location = std::source_location::current())
staticprivateinherited

Gets called if dead reference detected.

Parameters
[in]locationSTL object with relevant information about the calling site (usually to help when an exception is thrown.

Field Documentation

◆ destroyed_

bool MoReFEM::Utilities::Singleton< DirichletBoundaryConditionManager >::destroyed_
staticprivateinherited

Used for protection against dead reference problem (invocation while the instance has been destroyed).

Should not occur in our case, but it is much safer to put the protection there anyway.

◆ singleton_mutex_

std::mutex MoReFEM::Utilities::Singleton< DirichletBoundaryConditionManager >::singleton_mutex_
staticprivateinherited

Mutex object.

This follows item 16 of Scott Meyers's "Effective Modern C++", which advises to make const member functions thread safe.


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