19 #ifndef GEOS_PHYSICSSOLVERS_SURFACEGENERATION_SURFACEGENERATOR_HPP_
20 #define GEOS_PHYSICSSOLVERS_SURFACEGENERATION_SURFACEGENERATOR_HPP_
22 #include "mesh/mpiCommunications/NeighborCommunicator.hpp"
25 #include "mesh/CellElementSubRegion.hpp"
31 class SpatialPartition;
35 class ElementRegionManager;
36 class ElementRegionBase;
44 bool operator()( std::pair< CellElementSubRegion const *, localIndex >
const & a,
45 std::pair< CellElementSubRegion const *, localIndex >
const & b )
const
47 if( a.first != b.first )
49 localIndex const regionA = a.first->getParent().getParent().getIndexInParent();
50 localIndex const regionB = b.first->getParent().getParent().getIndexInParent();
51 if( regionA != regionB )
52 return regionA < regionB;
53 return a.first->getIndexInParent() < b.first->getIndexInParent();
55 return a.second < b.second;
72 Group *
const parent );
76 static string catalogName() {
return "SurfaceGenerator"; }
95 real64 const eventProgress,
105 inline string const getFractureRegionName()
const {
return m_fractureRegionName; }
118 stdVector< NeighborCommunicator > & neighbors,
120 int const numTileColors,
156 bool const prefrac );
177 real64 ( &vecTipNorm )[3],
215 real64 ( &vecTipNorm )[3],
218 bool threeNodesPinched,
234 void markRuptureFaceFromEdge(
localIndex const edgeID,
240 real64 ( &vecTipNorm )[3],
243 int const edgeMode );
254 void markRuptureFaceFromNode(
localIndex const nodeIndex,
270 void postUpdateRuptureStates(
NodeManager const & nodeManager,
308 void buildFilteredRuptureMaps(
335 int checkEdgeSplitability(
localIndex const edgeID,
339 const
bool prefrac );
368 const
bool prefrac );
385 bool findFracturePlanes(
localIndex const nodeID,
413 void performFracture(
localIndex const nodeID,
427 void mapConsistencyCheck(
localIndex const nodeID,
465 bool assignLocationsBFS( std::
set<
localIndex > const & separationPathFaces,
495 void calculateKinkAngles(
FaceManager const & faceManager,
499 bool const prefrac );
505 void synchronizeTipSets(
FaceManager & faceManager,
557 bool isGhostBoundaryFace(
localIndex const faceIndex )
const
559 return m_originalFacesToElemIndex( faceIndex, 1 ) == -1;
563 real64 const (&faceCenter)[3],
564 real64 const initialRockToughness,
565 real64 const toughnessScalingFactor );
572 constexpr
static char const * failCriterionString() {
return "failCriterion"; }
573 constexpr
static char const * solidMaterialNameString() {
return "solidMaterialNames"; }
574 constexpr
static char const * fExternalString() {
return "fExternal"; }
575 constexpr
static char const * tipNodesString() {
return "tipNodes"; }
576 constexpr
static char const * tipEdgesString() {
return "tipEdges"; }
577 constexpr
static char const * tipFacesString() {
return "tipFaces"; }
578 constexpr
static char const * trailingFacesString() {
return "trailingFaces"; }
579 constexpr
static char const * fractureRegionNameString() {
return "fractureRegion"; }
580 constexpr
static char const * mpiCommOrderString() {
return "mpiCommOrder"; }
581 constexpr
static char const * isPoroelasticString() {
return "isPoroelastic";}
585 constexpr
static char const * initialRockToughnessString() {
return "initialRockToughness"; }
586 constexpr
static char const * toughnessScalingFactorString() {
return "toughnessScalingFactor"; }
588 constexpr
static char const * fractureOriginString() {
return "fractureOrigin"; }
591 constexpr
static char const * nodeBasedSIFString() {
return "nodeBasedSIF"; }
597 constexpr
static real64 m_nonRuptureTime = 1e9;
602 array1d< localIndex > m_solidMaterialFullIndex;
608 real64 m_initialRockToughness;
610 real64 m_toughnessScalingFactor;
618 SortedArray< localIndex > m_separableFaceSet;
621 ArrayOfSets< localIndex > m_originalNodetoFaces;
624 ArrayOfSets< localIndex > m_originalNodetoEdges;
627 ArrayOfArrays< localIndex > m_originalFaceToEdges;
630 array1d< SortedArray< localIndex > > m_usedFacesForNode;
633 array2d< localIndex > m_originalFacesToElemRegion;
636 array2d< localIndex > m_originalFacesToElemSubRegion;
639 array2d< localIndex > m_originalFacesToElemIndex;
642 string m_fractureRegionName;
644 SortedArray< localIndex > m_tipNodes;
646 SortedArray< localIndex > m_tipEdges;
648 SortedArray< localIndex > m_tipFaces;
650 SortedArray< localIndex > m_trailingFaces;
652 SortedArray< localIndex > m_faceElemsRupturedThisSolve;
Partition of the decomposed physical domain. It also manages the connexion information to its neighbo...
This class provides an interface to ObjectManagerBase in order to manage edge data.
The ElementRegionManager class provides an interface to ObjectManagerBase in order to manage ElementR...
The FaceManager class provides an interface to ObjectManagerBase in order to manage face data.
The class is used to manage mesh body.
Class facilitating the representation of a multi-level discretization of a MeshBody.
The NodeManager class provides an interface to ObjectManagerBase in order to manage node data.
The ObjectManagerBase is the base object of all object managers in the mesh data hierachy.
Base class for all physics solvers.
void postInputInitialization() override final
virtual void initializePostInitialConditionsPreSubGroups() override final
Called by InitializePostInitialConditions() prior to initializing sub-Groups.
virtual void postRestartInitialization() override final
Performs initialization required after reading from a restart file.
string getCatalogName() const override
virtual void registerDataOnMesh(Group &MeshBody) override final
Register wrappers that contain data on the mesh objects.
Base template for ordered and unordered maps.
virtual real64 solverStep(real64 const &time_n, real64 const &dt, integer const cycleNumber, DomainPartition &domain) override
entry function to perform a solver step
virtual bool execute(real64 const time_n, real64 const dt, integer const cycleNumber, integer const eventCounter, real64 const eventProgress, DomainPartition &domain) override
Main extension point of executable targets.
array1d< localIndex > localIndex_array
A 1-dimensional array of geos::localIndex types.
std::set< T > set
A set of local indices.
double real64
64-bit floating point type.
GEOS_LOCALINDEX_TYPE localIndex
Local index type (for indexing objects within an MPI partition).
internal::StdMapWrapper< std::map< Key, T, Compare, Allocator >, USE_STD_CONTAINER_BOUNDS_CHECKING > stdMap
Tensor< real64, 3 > R1Tensor
Alias for a local (stack-based) rank-1 tensor type.
stdMap< std::pair< CellElementSubRegion const *, localIndex >, int, ElemLocComparator > ElemLocMapType
Type alias for the element location map with deterministic ordering.
int integer
Signed integer type.
internal::StdVectorWrapper< T, Allocator, USE_STD_CONTAINER_BOUNDS_CHECKING > stdVector
Comparator for (CellElementSubRegion const *, localIndex) pairs that provides deterministic ordering ...
Structure to hold scoped key names.