GEOSX
Classes | Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Attributes | List of all members
geos::solidMechanicsLagrangianFEMKernels::ExplicitSmallStrain< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE > Class Template Reference

Implements kernels for solving the equations of motion using the explicit Newmark method under the small strain assumption. More...

#include <ExplicitSmallStrain.hpp>

Inheritance diagram for geos::solidMechanicsLagrangianFEMKernels::ExplicitSmallStrain< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE >:
Inheritance graph
[legend]

Classes

struct  StackVariables
 Kernel variables allocated on the stack. More...
 

Public Types

using Base = finiteElement::KernelBase< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE, 3, 3 >
 Alias for the base class;.
 

Public Member Functions

 ExplicitSmallStrain (NodeManager &nodeManager, EdgeManager const &edgeManager, FaceManager const &faceManager, localIndex const targetRegionIndex, SUBREGION_TYPE const &elementSubRegion, FE_TYPE const &finiteElementSpace, CONSTITUTIVE_TYPE &inputConstitutiveType, real64 const dt, string const elementListName)
 Constructor. More...
 
GEOS_HOST_DEVICE void setup (localIndex const k, StackVariables &stack) const
 Performs the setup phase for the kernel. More...
 
GEOS_HOST_DEVICE void quadraturePointKernel (localIndex const k, localIndex const q, StackVariables &stack) const
 Performs a state update at a quadrature point. More...
 
GEOS_HOST_DEVICE real64 complete (localIndex const k, StackVariables const &stack) const
 Performs the complete phase for the kernel. More...
 
- Public Member Functions inherited from geos::finiteElement::KernelBase< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE, 3, 3 >
 KernelBase (SUBREGION_TYPE const &elementSubRegion, FE_TYPE const &finiteElementSpace, CONSTITUTIVE_TYPE &inputConstitutiveType)
 Constructor. More...
 
GEOS_HOST_DEVICE void setup (localIndex const k, StackVariables &stack) const
 Performs the setup phase for the kernel. More...
 
GEOS_HOST_DEVICE GEOS_FORCE_INLINE void quadraturePointKernel (localIndex const k, localIndex const q, StackVariables &stack) const
 Performs a state update at a quadrature point. More...
 
GEOS_HOST_DEVICE real64 complete (localIndex const k, StackVariables &stack) const
 Performs the complete phase for the kernel. More...
 

Static Public Member Functions

template<typename POLICY , typename KERNEL_TYPE >
static real64 kernelLaunch (localIndex const numElems, KERNEL_TYPE const &kernelComponent)
 Kernel Launcher. More...
 
- Static Public Member Functions inherited from geos::finiteElement::KernelBase< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE, 3, 3 >
static real64 kernelLaunch (localIndex const numElems, KERNEL_TYPE const &kernelComponent)
 Kernel Launcher. More...
 

Static Public Attributes

static constexpr int numNodesPerElem = Base::maxNumTestSupportPointsPerElem
 
- Static Public Attributes inherited from geos::finiteElement::KernelBase< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE, 3, 3 >
static constexpr int maxNumTestSupportPointsPerElem
 
static constexpr int maxNumTrialSupportPointsPerElem
 
static constexpr int numDofPerTestSupportPoint
 
static constexpr int numDofPerTrialSupportPoint
 
static constexpr int numQuadraturePointsPerElem
 Compile time value for the number of quadrature points per element.
 

Protected Attributes

const arrayView2d< real64 const, nodes::REFERENCE_POSITION_USD > m_X
 The array containing the nodal position array.
 
const arrayView2d< real64 const, nodes::TOTAL_DISPLACEMENT_USD > m_u
 The array containing the nodal displacement array.
 
const arrayView2d< real64 const, nodes::VELOCITY_USD > m_vel
 The array containing the nodal velocity array.
 
const arrayView2d< real64, nodes::ACCELERATION_USD > m_acc
 
const real64 m_dt
 The time increment for this time integration step.
 
const SortedArrayView< localIndex const > m_elementList
 TODO: Consider moving to finite element kernel base? More...
 
- Protected Attributes inherited from geos::finiteElement::KernelBase< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE, 3, 3 >
const traits::ViewTypeConst< typename SUBREGION_TYPE::NodeMapType::base_type > m_elemsToNodes
 The element to nodes map.
 
const arrayView1d< integer const > m_elemGhostRank
 The element ghost rank array.
 
const CONSTITUTIVE_TYPE::KernelWrapper m_constitutiveUpdate
 
const FE_TYPE & m_finiteElementSpace
 

Detailed Description

template<typename SUBREGION_TYPE, typename CONSTITUTIVE_TYPE, typename FE_TYPE>
class geos::solidMechanicsLagrangianFEMKernels::ExplicitSmallStrain< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE >

Implements kernels for solving the equations of motion using the explicit Newmark method under the small strain assumption.

Define the base interface for finite element kernels.

Template Parameters
SUBREGION_TYPEThe type of subregion that the kernel will act on.
CONSTITUTIVE_TYPEThe type of constitutive model present in the subregion.
NUM_TEST_SUPPORT_POINTS_PER_ELEMThe number of test space support points per element.
NUM_TRIAL_SUPPORT_POINTS_PER_ELEMThe number of trial space support points per element.
NUM_DOF_PER_TEST_SPThe number of DOF per test support point.
NUM_DOF_PER_TRIAL_SPThe number of DOF per trial support point.

General KernelBase Description

KernelBase defines an interface for implementing finite element kernels that will be callable by the family of kernel launch functions. Specific physics kernels may or may not derive from KernelBase, but must follow the same interface in order to be callable from the generic launching functions.

The template parameters of KernelBase should be duplicated as part of the interface, EXCEPT for NUM_DOF_PER_TEST_SP and NUM_DOF_PER_TRIAL_SP. These values should be set internally by the physics solver since each physics discretization will have a constant intrinsic value for these quantities. For example, when solving or the heat equation with scalar temperature as the primary variable at the support point, these will have a value of 1. In contrast, when solving a solid mechanics problem, with vector displacement as the primary variable at the support point, these will have a value of 3. Note that the interface provided by geos::finiteElement::RegionBasedKernelApplication will construct a kernel assuming only the first 4 template arguments.

Template Parameters
SUBREGION_TYPEThe type of subregion that the kernel will act on.

Explicit Small Strain Description

Implements the KernelBase interface functions required for explicit time integration of the equations of motion using the "finite element kernel application" functions such as geos::finiteElement::RegionBasedKernelApplication.

In this implementation, the interface for KernelBase is used, but ExplicitSmallStrain only conforms to the interface set by KernelBase, and does not inherit from KernelBase. The number of degrees of freedom per support point for both the test and trial spaces are specified as 3.

Definition at line 61 of file ExplicitSmallStrain.hpp.

Constructor & Destructor Documentation

◆ ExplicitSmallStrain()

template<typename SUBREGION_TYPE , typename CONSTITUTIVE_TYPE , typename FE_TYPE >
geos::solidMechanicsLagrangianFEMKernels::ExplicitSmallStrain< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE >::ExplicitSmallStrain ( NodeManager nodeManager,
EdgeManager const &  edgeManager,
FaceManager const &  faceManager,
localIndex const  targetRegionIndex,
SUBREGION_TYPE const &  elementSubRegion,
FE_TYPE const &  finiteElementSpace,
CONSTITUTIVE_TYPE &  inputConstitutiveType,
real64 const  dt,
string const  elementListName 
)

Constructor.

Constructor.

Parameters
elementSubRegionReference to the SUBREGION_TYPE(class template parameter) object.
inputConstitutiveTypeThe constitutive object.
finiteElementSpacePlaceholder for the finite element space object, which currently doesn't do much.
nodeManagerReference to the NodeManager object.
edgeManagerReference to the EdgeManager object.
faceManagerReference to the FaceManager object.
targetRegionIndexIndex of the region the subregion belongs to.
dtThe time interval for the step.
elementListNameThe name of the entry that holds the list of elements to be processed during this kernel launch.

Definition at line 37 of file ExplicitSmallStrain_impl.hpp.

Member Function Documentation

◆ complete()

template<typename SUBREGION_TYPE , typename CONSTITUTIVE_TYPE , typename FE_TYPE >
GEOS_HOST_DEVICE real64 geos::solidMechanicsLagrangianFEMKernels::ExplicitSmallStrain< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE >::complete ( localIndex const  k,
StackVariables const &  stack 
) const
inline

Performs the complete phase for the kernel.

Template Parameters
STACK_VARIABLE_TYPEThe type of StackVariable that holds the stack variables. This is most likely a defined in a type that derives from KernelBase.
Parameters
kThe element index.
stackThe StackVariable object that hold the stack variables.
Returns
The maximum contribution to the residual.

KernelBase::complete() Description

The operations typically found in complete are the mapping of the local Jacobian and Residual into the global Jacobian and Residual.

ExplicitSmallStrain Description

Performs the distribution of the nodal force out to the rank local arrays.

Definition at line 164 of file ExplicitSmallStrain_impl.hpp.

◆ kernelLaunch()

template<typename SUBREGION_TYPE , typename CONSTITUTIVE_TYPE , typename FE_TYPE >
template<typename POLICY , typename KERNEL_TYPE >
real64 geos::solidMechanicsLagrangianFEMKernels::ExplicitSmallStrain< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE >::kernelLaunch ( localIndex const  numElems,
KERNEL_TYPE const &  kernelComponent 
)
static

Kernel Launcher.

Template Parameters
POLICYThe RAJA policy to use for the launch.
NUM_QUADRATURE_POINTSThe number of quadrature points per element.
KERNEL_TYPEThe type of Kernel to execute.
Parameters
numElemsThe number of elements to process in this launch.
kernelComponentThe instantiation of KERNEL_TYPE to execute.
Returns
The maximum residual contribution.

This is a generic launching function for all of the finite element kernels that follow the interface set by KernelBase.

ExplicitSmallStrain Description

Copy of the KernelBase::kernelLaunch function without the exclusion of ghost elements.

Definition at line 184 of file ExplicitSmallStrain_impl.hpp.

◆ quadraturePointKernel()

template<typename SUBREGION_TYPE , typename CONSTITUTIVE_TYPE , typename FE_TYPE >
GEOS_HOST_DEVICE void geos::solidMechanicsLagrangianFEMKernels::ExplicitSmallStrain< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE >::quadraturePointKernel ( localIndex const  k,
localIndex const  q,
StackVariables stack 
) const
inline

Performs a state update at a quadrature point.

Template Parameters
STACK_VARIABLE_TYPEThe type of StackVariable that holds the stack variables. This is most likely a defined in a type that derives from KernelBase.
Parameters
kThe element index.
qThe quadrature point index.
stackThe StackVariable object that hold the stack variables.

KernelBase::quadraturePointKernel() Description

The operations found here are the mapping from the support points to the quadrature point, calculation of gradients, etc. From this data the state of the constitutive model is updated if required by the physics package.

ExplicitSmallStrain Description

Calculates the shape function derivatives, and the strain tensor. Then calls the constitutive update, and also performs the integration of the stress divergence, rather than using the dedicated component function to allow for some variable reuse.

Macro to substitute in the shape function derivatives.

Definition at line 93 of file ExplicitSmallStrain_impl.hpp.

◆ setup()

template<typename SUBREGION_TYPE , typename CONSTITUTIVE_TYPE , typename FE_TYPE >
GEOS_HOST_DEVICE void geos::solidMechanicsLagrangianFEMKernels::ExplicitSmallStrain< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE >::setup ( localIndex const  k,
StackVariables stack 
) const
inline

Performs the setup phase for the kernel.

Template Parameters
STACK_VARIABLE_TYPEThe type of StackVariable that holds the stack variables. This is most likely a defined in a type that derives from KernelBase.
Parameters
kThe element index.
stackThe StackVariable object that hold the stack variables.

KernelBase::setup() Description

The operations typically found in setup are thing such as the collection of global data into local stack storage.

Copies the primary variable, and position into the local stack array.

Definition at line 67 of file ExplicitSmallStrain_impl.hpp.

Member Data Documentation

◆ m_acc

template<typename SUBREGION_TYPE , typename CONSTITUTIVE_TYPE , typename FE_TYPE >
const arrayView2d< real64, nodes::ACCELERATION_USD > geos::solidMechanicsLagrangianFEMKernels::ExplicitSmallStrain< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE >::m_acc
protected

The array containing the nodal acceleration array, which is used to store the force.

Definition at line 203 of file ExplicitSmallStrain.hpp.

◆ m_elementList

template<typename SUBREGION_TYPE , typename CONSTITUTIVE_TYPE , typename FE_TYPE >
const SortedArrayView< localIndex const > geos::solidMechanicsLagrangianFEMKernels::ExplicitSmallStrain< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE >::m_elementList
protected

TODO: Consider moving to finite element kernel base?

The list of elements to process for the kernel launch.

Definition at line 209 of file ExplicitSmallStrain.hpp.

◆ numNodesPerElem

template<typename SUBREGION_TYPE , typename CONSTITUTIVE_TYPE , typename FE_TYPE >
constexpr int geos::solidMechanicsLagrangianFEMKernels::ExplicitSmallStrain< SUBREGION_TYPE, CONSTITUTIVE_TYPE, FE_TYPE >::numNodesPerElem = Base::maxNumTestSupportPointsPerElem
staticconstexpr

Maximum number of nodes per element, which is equal to the maxNumTestSupportPointPerElem and maxNumTrialSupportPointPerElem by definition. When the FE_TYPE is not a Virtual Element, this will be the actual number of nodes per element.

Definition at line 79 of file ExplicitSmallStrain.hpp.


The documentation for this class was generated from the following files: