19 #ifndef GEOSX_PHYSICSSOLVERS_SOLIDMECHANICS_MPM_HPP_
20 #define GEOSX_PHYSICSSOLVERS_SOLIDMECHANICS_MPM_HPP_
22 #include "codingUtilities/EnumStrings.hpp"
27 #include "mesh/mpiCommunications/CommunicationTools.hpp"
28 #include "mesh/mpiCommunications/MPI_iCommData.hpp"
29 #include "physicsSolvers/SolverBase.hpp"
31 #include "MPMSolverFields.hpp"
36 class SpatialPartition;
77 Group *
const parent );
100 virtual void initializePreSubGroups()
override;
102 virtual void registerDataOnMesh(
Group & meshBodies )
override final;
137 real64 const eventProgress,
141 template<
typename CONSTITUTIVE_BASE,
142 typename KERNEL_WRAPPER,
143 typename ... PARAMS >
148 PARAMS && ... params );
151 template<
typename ... PARAMS >
154 string const & finiteElementName,
170 static constexpr
char const * cflFactorString() {
return "cflFactor"; }
171 static constexpr
char const * timeIntegrationOptionString() {
return "timeIntegrationOption"; }
172 static constexpr
char const * solidMaterialNamesString() {
return "solidMaterialNames"; }
173 static constexpr
char const * forceExternalString() {
return "externalForce"; }
174 static constexpr
char const * forceInternalString() {
return "internalForce"; }
175 static constexpr
char const * massString() {
return "mass"; }
176 static constexpr
char const * velocityString() {
return "velocity"; }
177 static constexpr
char const * momentumString() {
return "momentum"; }
178 static constexpr
char const * accelerationString() {
return "acceleration"; }
179 static constexpr
char const * forceContactString() {
return "contactForce"; }
180 static constexpr
char const * damageString() {
return "damage"; }
181 static constexpr
char const * damageGradientString() {
return "damageGradient"; }
182 static constexpr
char const * maxDamageString() {
return "maxDamage"; }
183 static constexpr
char const * surfaceNormalString() {
return "surfaceNormal"; }
184 static constexpr
char const * materialPositionString() {
return "materialPosition"; }
186 static constexpr
char const * boundaryNodesString() {
return "boundaryNodes"; }
187 static constexpr
char const * bufferNodesString() {
return "bufferNodes"; }
190 } solidMechanicsViewKeys;
194 SpatialPartition & partition );
196 void resizeGrid( SpatialPartition & partition,
200 void syncGridFields( std::vector< std::string >
const & fieldNames,
206 void singleFaceVectorFieldSymmetryBC(
const int face,
215 void applyEssentialBCs(
const real64 dt,
225 void computeContactForces(
real64 const dt,
235 void computePairwiseNodalContactForce(
int const & separable,
250 void computeOrthonormalBasis(
const real64 * e1,
254 void setGridFieldLabels(
NodeManager & nodeManager );
258 void solverProfilingIf(
std::string label,
bool condition );
267 std::vector< real64 > & xp,
277 std::vector< std::vector< real64 > > & xp,
278 std::vector< real64 > & Vp,
279 std::vector< real64 > & fp,
283 std::vector< std::vector< real64 > > & xp,
284 std::vector< real64 > & Vp,
285 std::vector< std::vector< real64 > > & fp,
292 void projectDamageFieldGradientToGrid(
ParticleManager & particleManager,
295 void updateDeformationGradient(
real64 dt,
298 void updateConstitutiveModelDependencies(
ParticleManager & particleManager );
300 void updateStress(
real64 dt,
305 void computeAndWriteBoxAverage(
const real64 dt,
309 void initializeGridFields(
NodeManager & nodeManager );
311 void boundaryConditionUpdate(
real64 dt,
real64 time_n );
316 void gridTrialUpdate(
real64 dt,
319 void enforceContact(
real64 dt,
327 void gridToParticle(
real64 dt,
337 void printProfilingResults();
345 int evaluateSeparabilityCriterion(
localIndex const & A,
349 real64 const & maxDamageA,
350 real64 const & maxDamageB );
364 virtual void postProcessInput() override final;
372 std::vector<
array3d<
real64 > > m_shapeFunctionGradientValues;
376 int m_solverProfiling;
377 std::vector<
real64 > m_profilingTimes;
378 std::vector< std::
string > m_profilingLabels;
381 MPI_iCommData m_iComm;
383 int m_prescribedBcTable;
384 array1d<
int > m_boundaryConditionTypes;
387 int m_prescribedBoundaryFTable;
389 int m_fTableInterpType;
394 int m_boxAverageHistory;
395 int m_reactionHistory;
397 int m_needsNeighborList;
399 int m_binSizeMultiplier;
401 int m_useDamageAsSurfaceFlag;
403 int m_cpdiDomainScaling;
407 int m_numContactGroups, m_numContactFlags, m_numVelocityFields;
408 real64 m_separabilityMinDamage;
409 int m_treatFullyDamagedAsSingleField;
410 int m_surfaceDetection;
411 int m_damageFieldPartitioning;
412 int m_contactGapCorrection;
414 real64 m_frictionCoefficient;
440 return (regionIndex == other.regionIndex && subRegionIndex == other.subRegionIndex && binIndex == other.binIndex);
454 return ((std::hash< localIndex >()( k.regionIndex )
455 ^ (std::hash< localIndex >()( k.subRegionIndex ) << 1)) >> 1)
456 ^ (std::hash< localIndex >()( k.binIndex ) << 1);
460 virtual void setConstitutiveNames( ParticleSubRegionBase & subRegion )
const override;
#define GEOS_UNUSED_VAR(...)
Mark an unused variable and silence compiler warnings.
#define GEOS_UNUSED_PARAM(X)
Mark an unused argument and silence compiler warnings.
The DoFManager is responsible for allocating global dofs, constructing sparsity patterns,...
Partition of the decomposed physical domain. It also manages the connexion information to its neighbo...
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 ParticleManager class provides an interface to ObjectManagerBase in order to manage ParticleRegio...
Class describing a file Path.
SolidMechanicsMPM(const string &name, Group *const parent)
string getCatalogName() const override
static string catalogName()
@ ImplicitDynamic
ImplicitDynamic.
@ ExplicitDynamic
ExplicitDynamic.
@ QuasiStatic
QuasiStatic.
virtual ~SolidMechanicsMPM() override
virtual bool execute(real64 const time_n, real64 const dt, integer const cycleNumber, integer const eventCounter, real64 const eventProgress, DomainPartition &domain) override
Group::wrapperMap::KeyIndex ViewKey
Type alias for KeyIndexT type used for wrapper lookups.
bool operator==(InputFlags const left, InputFlags const right)
Comparison operator for InputFlags enumeration.
ArrayView< T, 1 > arrayView1d
Alias for 1D array view.
Array< T, 2, PERMUTATION > array2d
Alias for 2D array.
LvArray::CRSMatrixView< T, COL_INDEX, localIndex const, LvArray::ChaiBuffer > CRSMatrixView
Alias for CRS Matrix View.
Array< T, 3, PERMUTATION > array3d
Alias for 3D array.
ENUM_STRINGS(LinearSolverParameters::SolverType, "direct", "cg", "gmres", "fgmres", "bicgstab", "preconditioner")
Declare strings associated with enumeration values.
std::string string
String type.
ArraySlice< T, 2, USD > arraySlice2d
Alias for 2D array slice.
double real64
64-bit floating point type.
ArraySlice< T, 1, USD > arraySlice1d
Alias for 1D array slice.
std::int32_t integer
Signed integer type.
std::size_t size_t
Unsigned size type.
ArrayView< T, 2, USD > arrayView2d
Alias for 2D array view.
GEOSX_LOCALINDEX_TYPE localIndex
Local index type (for indexing objects within an MPI partition).
Array< T, 1 > array1d
Alias for 1D array.
ArrayView< T, 3, USD > arrayView3d
Alias for 3D array view.