47#ifdef __MPI_PARALLEL_MODE
52#include <unordered_map>
59#define _IFT_Domain_type "domain"
60#define _IFT_Domain_ndofman "ndofman"
61#define _IFT_Domain_nelem "nelem"
62#define _IFT_Domain_nmat "nmat"
63#define _IFT_Domain_ncrosssect "ncrosssect"
64#define _IFT_Domain_nbc "nbc"
65#define _IFT_Domain_nic "nic"
66#define _IFT_Domain_nfunct "nltf"
67#define _IFT_Domain_nset "nset"
68#define _IFT_Domain_nbarrier "nbarrier"
69#define _IFT_Domain_topology "topology"
70#define _IFT_Domain_nxfemman "nxfemman"
71#define _IFT_Domain_ncontactsurf "ncontactsurf"
72#define _IFT_Domain_numberOfSpatialDimensions "nsd"
73#define _IFT_Domain_nfracman "nfracman"
74#define _IFT_Domain_axisymmetric "axisymm"
81class GeneralBoundaryCondition;
82class InitialCondition;
90class ConnectivityTable;
92class SpatialLocalizer;
93class NodalRecoveryModel;
95class DomainTransactionManager;
97class TopologyDescription;
101class FractureManager;
102class oofegGraphicContext;
103class ProcessCommunicator;
140 std :: vector< std :: unique_ptr< GeneralBoundaryCondition > >
bcList;
142 std :: vector< std :: unique_ptr< InitialCondition > >
icList;
146 std :: vector< std :: unique_ptr< Set > >
setList;
241#ifdef __MPI_PARALLEL_MODE
294 std :: vector< std :: unique_ptr< Element > > &
giveElements() {
return this->elementList; }
300 Element *giveGlobalElement(
int n);
306 int giveElementPlaceInArray(
int iGlobalElNum)
const;
312 int giveDofManPlaceInArray(
int iGlobalDofManNum)
const;
317 const IntArray &giveElementsWithMaterialNum(
int iMaterialNum)
const;
325 std::vector< std::unique_ptr< ContactSurface > > &
giveContactSurface() {
return this->contactSurfaceList; }
342 Load *giveLoad(
int n);
349 std :: vector< std :: unique_ptr< GeneralBoundaryCondition > > &
giveBcs() {
return this->bcList; }
356 std :: vector< std :: unique_ptr< InitialCondition > > &
giveIcs() {
return this->icList; }
364 std :: vector< std :: unique_ptr< Function > > &
giveFunctions() {
return this->functionList; }
371 std :: vector< std :: unique_ptr< Material > > &
giveMaterials() {
return this->materialList; }
378 std :: vector< std :: unique_ptr< CrossSection > > &
giveCrossSections() {
return this->crossSectionList; }
391 std :: vector< std :: unique_ptr< Set > > &
giveSets() {
return this->setList; }
427 std :: vector< std :: unique_ptr< DofManager > > &
giveDofManagers() {
return this->dofManagerList; }
448 void initializeFinish();
453 void postInitialize();
484 int giveNumberOfSpatialDimensions();
486 bool isAxisymmetric();
492 void resizeDofManagers(
int _newSize);
494 void resizeElements(
int _newSize);
496 void resizeCrossSectionModels(
int _newSize);
498 void resizeMaterials(
int _newSize);
500 void resizeNonlocalBarriers(
int _newSize);
502 void resizeBoundaryConditions(
int _newSize);
504 void resizeInitialConditions(
int _newSize);
506 void resizeFunctions(
int _newSize);
508 void resizeSets(
int _newSize);
510 void resizeContactSurfaces(
int _newSize);
514 void py_setDofManager(
int i,
DofManager *obj);
515 void py_setElement(
int i,
Element *obj);
517 void py_setMaterial(
int i,
Material *obj);
521 void py_setFunction(
int i,
Function *obj);
522 void py_setSet(
int i,
Set *obj);
526 void setDofManager(
int i, std::unique_ptr<DofManager> obj);
528 void setElement(
int i, std::unique_ptr<Element> obj);
530 void setCrossSection(
int i, std::unique_ptr<CrossSection> obj);
532 void setMaterial(
int i, std::unique_ptr<Material> obj);
534 void setNonlocalBarrier(
int i, std::unique_ptr<NonlocalBarrier> obj);
536 void setBoundaryCondition(
int i, std::unique_ptr<GeneralBoundaryCondition> obj);
538 void setInitialCondition(
int i, std::unique_ptr<InitialCondition> obj);
540 void setFunction(
int i, std::unique_ptr<Function> obj);
542 void setSet(
int i, std::unique_ptr<Set> obj);
545 void setXfemManager(std::unique_ptr<XfemManager> ipXfemManager);
548 bool hasXfemManager();
551 bool hasFractureManager();
562 void clearBoundaryConditions();
564 void clearElements();
599 const IntArray &giveDefaultNodeDofIDArry();
610 int checkConsistency();
633 int giveNextFreeDofID(
int increment = 1);
637 void resetFreeDofID();
657 void setSpatialLocalizer(std::unique_ptr<SpatialLocalizer> sl);
683#ifdef __MPI_PARALLEL_MODE
709 void initGlobalDofManMap(
bool forceinit =
false);
710 void initGlobalElementMap(
bool forceinit =
false);
715 void renumberDofManagers();
717 void renumberElements();
728 int dofmanGlobal2Local(
int _globnum);
729 int elementGlobal2Local(
int _globnum);
741 void resolveDomainDofsDefaults(
const char *);
745 std :: string
errorInfo(
const char *func)
const;
752 void BuildElementPlaceInArrayMap();
758 void BuildDofManPlaceInArrayMap();
764 void BuildMaterialToElementMap();
std::unordered_map< int, IntArray > materialNum2ElMap
std ::vector< std ::unique_ptr< DofManager > > dofManagerList
Dof manager list.
std ::unique_ptr< ConnectivityTable > connectivityTable
IntArray defaultNodeDofIDArry
Default dofs for a node (depends on the domain type).
Domain(int n, int serNum, EngngModel *e)
int giveNumberOfBoundaryConditions() const
Returns number of boundary conditions in domain.
int giveNumberOfMaterialModels() const
Returns number of material models in domain.
std::unordered_map< int, int > elementGlobal2LocalMap
std ::vector< std ::unique_ptr< Set > > setList
Set list.
std ::vector< std ::unique_ptr< InitialCondition > > icList
Initial condition list.
void SetEngngModel(EngngModel *ipEngngModel)
int giveNumberOfContactSurfaces() const
Returns number of contact surfaces.
int freeDofID
Keeps track of next free dof ID (for special Lagrange multipliers, XFEM and such).
std ::unique_ptr< OutputManager > outputManager
Output manager, allowing to filter the produced output.
std ::vector< std ::unique_ptr< Material > > & giveMaterials()
int giveNumberOfInitialConditions() const
Returns number of initial conditions in domain.
StateCounterType giveNonlocalUpdateStateCounter()
Returns the value of nonlocalUpdateStateCounter.
bool dmanMapInitialized
dmanMap init flag.
std ::unique_ptr< SpatialLocalizer > spatialLocalizer
int giveNumber()
Returns domain number.
std ::vector< std ::unique_ptr< NonlocalBarrier > > nonlocalBarrierList
Nonlocal barrier list.
std::unordered_map< int, int > dofmanGlobal2LocalMap
std::vector< std::unique_ptr< ContactSurface > > & giveContactSurface()
int giveNumberOfSets() const
Returns number of sets.
int giveNumberOfElements() const
Returns number of elements in domain.
int serialNumber
Domain serial (version) number. Used for domain version identification during Adaptive computations.
std ::vector< std ::unique_ptr< DofManager > > & giveDofManagers()
StateCounterType nonlocalUpdateStateCounter
std ::vector< std ::unique_ptr< Function > > & giveFunctions()
std ::vector< std ::unique_ptr< Set > > & giveSets()
std ::vector< std ::unique_ptr< GeneralBoundaryCondition > > bcList
Boundary condition list.
domainType giveDomainType()
Returns domain type.
bool elementMapInitialized
dmanMap init flag.
int giveNumberOfDofManagers() const
Returns number of dof managers in domain.
std ::unique_ptr< NodalRecoveryModel > smoother
nodal recovery object associated to receiver.
std ::vector< std ::unique_ptr< GeneralBoundaryCondition > > & giveBcs()
void setNonlocalUpdateStateCounter(StateCounterType val)
sets the value of nonlocalUpdateStateCounter
std ::unique_ptr< TopologyDescription > topology
Topology description.
Domain(const Domain &src)=delete
int nsd
Number of spatial dimensions.
std ::vector< std ::unique_ptr< Element > > & giveElements()
std ::unique_ptr< FractureManager > fracManager
Fracture Manager.
std ::unique_ptr< DomainTransactionManager > transactionManager
void setDomainType(domainType _dType)
Sets domain type.
std ::vector< std ::unique_ptr< InitialCondition > > & giveIcs()
std::vector< std::unique_ptr< ContactSurface > > contactSurfaceList
Contact surface list.
void setNextFreeDofID(int dofid)
std ::vector< std ::unique_ptr< Element > > elementList
Element list.
std ::vector< std ::unique_ptr< CrossSection > > & giveCrossSections()
std ::list< Element * > recvElemList
List of received elements.
ParameterManager elementPPM
int giveSerialNumber()
Returns domain serial (version) number.
EngngModel * engineeringModel
int giveNumberOfRegions() const
Returns number of regions. Currently regions corresponds to cross section models.
std ::unique_ptr< XfemManager > xfemManager
XFEM Manager.
std ::vector< std ::unique_ptr< CrossSection > > crossSectionList
Cross section list.
std ::map< int, Element * > elementMap
Global element map (index is global of man number).
std ::map< int, DofManager * > dmanMap
Global dof manager map (index is global of man number).
const char * giveClassName() const
Returns class name of the receiver.
int giveNumberOfCrossSectionModels() const
Returns number of cross section models in domain.
int giveNumberOfFunctions() const
Returns number of load time functions in domain.
ParameterManager dofmanPPM
std ::vector< std ::unique_ptr< Material > > materialList
Material list.
std ::vector< std ::unique_ptr< Function > > functionList
Load time function list.
void setNumber(int nn)
Returns domain number.
int giveNumberOfNonlocalBarriers() const
Returns number of nonlocal integration barriers.
BCTracker bcTracker
BC tracker (keeps track of BCs applied wia sets to components).
std::string errorInfo(const char *func)
long StateCounterType
StateCounterType type used to indicate solution state.