19 #ifndef GEOS_PHYSICSSOLVERS_SOLIDMECHANICS_SOLIDMECHANICSLAGRANGIANFEM_HPP_
20 #define GEOS_PHYSICSSOLVERS_SOLIDMECHANICS_SOLIDMECHANICSLAGRANGIANFEM_HPP_
22 #include "codingUtilities/EnumStrings.hpp"
26 #include "mesh/mpiCommunications/CommunicationTools.hpp"
27 #include "mesh/mpiCommunications/MPI_iCommData.hpp"
28 #include "physicsSolvers/SolverBase.hpp"
29 #include "physicsSolvers/fluidFlow/FlowSolverBase.hpp"
66 Group *
const parent );
83 static string catalogName() {
return "SolidMechanics_LagrangianFEM"; }
89 virtual void initializePreSubGroups()
override;
91 virtual void registerDataOnMesh(
Group & meshBodies )
override;
112 implicitStepSetup(
real64 const & time_n,
126 bool const setSparsity =
false )
override;
129 assembleSystem(
real64 const time,
137 applySystemSolution(
DofManager const & dofManager,
139 real64 const scalingFactor,
149 virtual void applyBoundaryConditions(
real64 const time,
151 DomainPartition & domain,
152 DofManager
const & dofManager,
153 CRSMatrixView< real64, globalIndex const >
const & localMatrix,
154 arrayView1d< real64 >
const & localRhs )
override;
157 calculateResidualNorm(
real64 const & time_n,
159 DomainPartition
const & domain,
160 DofManager
const & dofManager,
161 arrayView1d< real64 const >
const & localRhs )
override;
163 virtual void resetStateToBeginningOfStep( DomainPartition & domain )
override;
165 virtual void implicitStepComplete(
real64 const & time,
167 DomainPartition & domain )
override;
172 template<
typename CONSTITUTIVE_BASE,
173 typename KERNEL_WRAPPER,
174 typename ... PARAMS >
175 real64 assemblyLaunch( MeshLevel & mesh,
176 DofManager
const & dofManager,
177 arrayView1d< string const >
const & regionNames,
178 string const & materialNamesString,
179 CRSMatrixView< real64, globalIndex const >
const & localMatrix,
180 arrayView1d< real64 >
const & localRhs,
182 PARAMS && ... params );
185 template<
typename ... PARAMS >
186 real64 explicitKernelDispatch( MeshLevel & mesh,
187 arrayView1d< string const >
const & targetRegions,
188 string const & finiteElementName,
207 void applyTractionBC(
real64 const time,
212 void applyChomboPressure(
DofManager const & dofManager,
217 void applyContactConstraint(
DofManager const & dofManager,
227 void enableFixedStressPoromechanicsUpdate();
229 virtual void saveSequentialIterationState(
DomainPartition & domain )
override;
233 static constexpr
char const * newmarkGammaString() {
return "newmarkGamma"; }
234 static constexpr
char const * newmarkBetaString() {
return "newmarkBeta"; }
235 static constexpr
char const * massDampingString() {
return "massDamping"; }
236 static constexpr
char const * stiffnessDampingString() {
return "stiffnessDamping"; }
237 static constexpr
char const * timeIntegrationOptionString() {
return "timeIntegrationOption"; }
238 static constexpr
char const * maxNumResolvesString() {
return "maxNumResolves"; }
239 static constexpr
char const * strainTheoryString() {
return "strainTheory"; }
240 static constexpr
char const * solidMaterialNamesString() {
return "solidMaterialNames"; }
241 static constexpr
char const * contactRelationNameString() {
return "contactRelationName"; }
242 static constexpr
char const * noContactRelationNameString() {
return "NOCONTACT"; }
243 static constexpr
char const * maxForceString() {
return "maxForce"; }
244 static constexpr
char const * elemsAttachedToSendOrReceiveNodesString() {
return "elemsAttachedToSendOrReceiveNodes"; }
245 static constexpr
char const * elemsNotAttachedToSendOrReceiveNodesString() {
return "elemsNotAttachedToSendOrReceiveNodes"; }
246 static constexpr
char const * surfaceGeneratorNameString() {
return "surfaceGeneratorName"; }
248 static constexpr
char const * sendOrReceiveNodesString() {
return "sendOrReceiveNodes";}
249 static constexpr
char const * nonSendOrReceiveNodesString() {
return "nonSendOrReceiveNodes";}
250 static constexpr
char const * targetNodesString() {
return "targetNodes";}
251 static constexpr
char const * forceString() {
return "Force";}
264 real64 & getMaxForce() {
return m_maxForce; }
265 real64 const & getMaxForce()
const {
return m_maxForce; }
267 arrayView1d< ParallelVector >
const & getRigidBodyModes()
const
272 array1d< ParallelVector > & getRigidBodyModes()
278 virtual void postProcessInput()
override;
280 virtual void initializePostInitialConditionsPreSubGroups()
override;
282 virtual void setConstitutiveNamesCallSuper( ElementSubRegionBase & subRegion )
const override;
287 real64 m_stiffnessDamping;
292 MPI_iCommData m_iComm;
293 bool m_isFixedStressPoromechanicsUpdate;
300 string m_contactRelationName;
302 SolverBase * m_surfaceGenerator;
303 string m_surfaceGeneratorName;
316 template<
typename CONSTITUTIVE_BASE,
317 typename KERNEL_WRAPPER,
318 typename ... PARAMS >
322 string const & materialNamesString,
326 PARAMS && ... params )
332 string const dofKey = dofManager.
getKey( fields::solidMechanics::totalDisplacement::key() );
335 real64 const gravityVectorData[3] = LVARRAY_TENSOROPS_INIT_LOCAL_3( gravityVector() );
337 KERNEL_WRAPPER kernelWrapper( dofNumber,
343 std::forward< PARAMS >( params )... );
345 return finiteElement::
346 regionBasedKernelApplication< parallelDevicePolicy< >,
350 this->getDiscretizationName(),
#define GEOS_UNUSED_VAR(...)
Mark an unused variable and silence compiler warnings.
#define GEOS_MARK_FUNCTION
Mark function with both Caliper and NVTX if enabled.
The DoFManager is responsible for allocating global dofs, constructing sparsity patterns,...
globalIndex rankOffset(string const &fieldName) const
string const & getKey(string const &fieldName) const
Return the key used to record the field in the DofManager.
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.
NodeManager const & getNodeManager() const
Get the node manager.
The NodeManager class provides an interface to ObjectManagerBase in order to manage node data.
static string catalogName()
@ ImplicitDynamic
ImplicitDynamic.
@ ExplicitDynamic
ExplicitDynamic.
@ QuasiStatic
QuasiStatic.
virtual ~SolidMechanicsLagrangianFEM() override
string getCatalogName() const override
SolidMechanicsLagrangianFEM(const string &name, Group *const parent)
void applyDisplacementBCImplicit(real64 const time, DofManager const &dofManager, DomainPartition &domain, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs)
array1d< ParallelVector > m_rigidBodyModes
Rigid body modes.
static string coupledSolverAttributePrefix()
String used to form the solverName used to register single-physics solvers in CoupledSolver.
GEOS_DECLTYPE_AUTO_RETURN getReference(LOOKUP_TYPE const &lookup) const
Look up a wrapper and get reference to wrapped object.
ArrayView< T, 1 > arrayView1d
Alias for 1D array view.
LvArray::CRSMatrixView< T, COL_INDEX, localIndex const, LvArray::ChaiBuffer > CRSMatrixView
Alias for CRS Matrix View.
array1d< globalIndex > globalIndex_array
A 1-dimensional array of geos::globalIndex types.
ENUM_STRINGS(LinearSolverParameters::SolverType, "direct", "cg", "gmres", "fgmres", "bicgstab", "preconditioner")
Declare strings associated with enumeration values.
std::string string
String type.
double real64
64-bit floating point type.
std::int32_t integer
Signed integer type.
LvArray::CRSMatrix< T, COL_INDEX, localIndex, LvArray::ChaiBuffer > CRSMatrix
Alias for CRS Matrix class.
LvArray::SortedArray< T, localIndex, LvArray::ChaiBuffer > SortedArray
A sorted array of local indices.
Array< T, 1 > array1d
Alias for 1D array.
LAInterface::ParallelVector ParallelVector
Alias for ParallelVector.