MoReFEM
|
Class in charge of the face interface. More...
#include <Volume.hpp>
Public Types | |
using | shared_ptr = std::shared_ptr<Volume> |
Alias over shared_ptr. | |
using | vector_shared_ptr = std::vector<shared_ptr> |
Alias over vector of shared_ptr. | |
using | InterfaceMap = Utilities::PointerComparison::Map<Volume::shared_ptr, std::vector<const GeometricElt*>> |
Typedef useful when the vertices are built. | |
Public Member Functions | |
const Coords::vector_shared_ptr & | GetCoordsList () const noexcept override |
Get the list of coords that belongs to the interface. | |
void | Print (std::ostream &stream) const |
Print the underlying coords list. | |
virtual::MoReFEM::InterfaceNS::Nature | GetNature () const noexcept override final |
Nature of the Interface. | |
template<allow_reset_index AllowResetIndexT = allow_reset_index::no> | |
void | SetProgramWiseIndex (InterfaceNS::program_wise_index_type id) noexcept |
Set the identifier associated to this interface. | |
InterfaceNS::program_wise_index_type | GetProgramWiseIndex () const noexcept |
Get the identifier associated to this interface. | |
template<CoordsNS::index_enum TypeT> | |
std::vector< CoordsNS::index_type< TypeT > > | ComputeCoordsIndexList () const |
Compute the list of Coords indexes that belongs to the interface. | |
const LocalVector & | GetPseudoNormal () const noexcept |
Constant accessor on the pseudo-normal. | |
const std::unique_ptr< LocalVector > & | GetPseudoNormalPtr () const noexcept |
Constant accessor on the pointer of the pseudo-normal. | |
Special members. | |
Volume (const std::shared_ptr< GeometricElt > &geometric_elt) | |
Constructor. | |
~Volume () override | |
Destructor. | |
Volume (const Volume &rhs)=delete | |
The copy constructor. | |
Volume (Volume &&rhs)=delete | |
The move constructor. | |
Volume & | operator= (const Volume &rhs)=delete |
The (copy) operator=. | |
Volume & | operator= (Volume &&rhs)=delete |
The (move) operator=. | |
Static Public Member Functions | |
static const std::string & | ClassName () |
Name of the class. | |
static constexpr enum::MoReFEM::InterfaceNS::Nature | StaticNature () |
Nature of the Interface as a static method. | |
Protected Member Functions | |
LocalVector & | GetNonCstPseudoNormal () noexcept |
Non constant accessor on the pseudo-normal. | |
Protected Attributes | |
std::unique_ptr< LocalVector > | pseudo_normal_ = nullptr |
Pseudo-normal of the interface. | |
Private Member Functions | |
void | SetCoordsList (const Coords::vector_shared_ptr &coords_list) |
Set coords_list_ and sort it so that the same interface used by another geometric element could match it. | |
Coords::vector_shared_ptr & | GetNonCstCoordsList () noexcept |
Non constant accessor to the underlying list of Coords. | |
Static Private Member Functions | |
static std::map< MeshNS::unique_id, std::size_t > & | NvolumePerMesh () |
Number of volumes built so far for each mesh. | |
Private Attributes | |
std::weak_ptr< GeometricElt > | geometric_elt_ |
Pointer to the geometric element in which the Volume is built. | |
Coords::vector_shared_ptr | coords_list_ |
Coords that belongs to the edge_or_face. | |
InterfaceNS::program_wise_index_type | program_wise_index_ |
Facility which handles the indexes related to the Interface. | |
Class in charge of the face interface.
using MoReFEM::Volume::InterfaceMap = Utilities::PointerComparison::Map<Volume::shared_ptr, std::vector<const GeometricElt*>> |
Typedef useful when the vertices are built.
Contrary to the other interfaces, comparison below use up the natural ordering of volumes: the index of a Volume may be assigned during construction (it is the same as the GeometricElt's). We could have done the same as in other interfaces, bt it would have been uselessly memory consuming: we would have to create many pointers for each Volume, whereas the same information can simply be stored within a single index.
|
explicit |
Constructor.
Volume are apart: when they are built the index is already known as we know for sure each Volume is unique for each GeometricElt. Due to this close relationship, no Coords are stored within a Volume, as it would be a waste of space given the Coords can be retrieved through the GeometricElt object that shares the same index.
[in] | geometric_elt | The GeometricElt upom which the Volume interface is built. |
|
delete |
The copy constructor.
[in] | rhs | The object from which the construction occurs. |
|
delete |
The move constructor.
[in] | rhs | The object from which the construction occurs. |
The (copy) operator=.
[in] | rhs | The object from which the affectation occurs. |
The (move) operator=.
[in] | rhs | The object from which the affectation occurs. |
|
overridevirtualnoexcept |
Get the list of coords that belongs to the interface.
Reimplemented from MoReFEM::Interface.
|
staticprivate |
Number of volumes built so far for each mesh.
[internal]
This is a purely internal attribute used in volume creation; should not be used outside of Volume.cpp!
Key is the identifier of the mesh. Value if the number of volumes built so far for each mesh.
|
inherited |
Print the underlying coords list.
[in,out] | stream | Stream upon which object information are written. |
|
finaloverridevirtualnoexceptinherited |
Nature of the Interface.
Implements MoReFEM::Interface.
|
noexceptinherited |
Set the identifier associated to this interface.
[in] | id | Identifier to be associated to the interface. Identifier is unique for all interfaces of the same nature: there should be for instance only one edge with id = 124. |
|
inherited |
|
privateinherited |
Set coords_list_ and sort it so that the same interface used by another geometric element could match it.
The convention is to put first the Coords with the lower index, and then choose the rotation that put the lowest possible index in second. The index used to do so is the one used to define operator< for Coords class (i.e. the processor-wise one).
For instance let's consider quadrangle 3 5 1 10.
The lower is 1, and there are still two possibilities by rotating it:
This method is used only for faces and edges: it is obviously unrequired for vertices, and no Coords is stored for Volumes.
[in] | coords_list | List of Coords, not yet sort. |
[internal]
It is intended to be called only in Edge and Face constructor.
|
privatenoexceptinherited |
|
private |
Pointer to the geometric element in which the Volume is built.
[internal]
For volumes, it would be needlessly costly to store all the Coords as it is done for the other types of interfaces, hence the pointer below that allows to avoid entirely the duplication of the information. Volume class shouldn't try to delete this pointer; it is handled elsewhere.
|
privateinherited |
Coords that belongs to the edge_or_face.
The convention is that the first Coords is the one with the lowest index. The relative ordering is local_coords.
For instance, if (89, 42, 15) is read in Init(), (15, 89, 42) will be stored.
[internal]
This information is really important when the interfaces are built: it is the way we can figure out if a given interface already exist or not.
|
privateinherited |
Facility which handles the indexes related to the Interface.