39 #ifndef _STRUCTURALISOTROPICCONSTITUTIVELAW_H_ 40 #define _STRUCTURALISOTROPICCONSTITUTIVELAW_H_ 1
47 #pragma GCC diagnostic ignored "-Wunused-variable" 48 #pragma GCC diagnostic ignored "-Wunused-parameter" 50 #include <Epetra_Vector.h> 51 #include <EpetraExt_MatrixMatrix.h> 52 #include <Epetra_SerialDenseMatrix.h> 54 #pragma GCC diagnostic ignored "-Wunused-variable" 55 #pragma GCC diagnostic ignored "-Wunused-parameter" 57 #include <lifev/core/array/MatrixElemental.hpp> 58 #include <lifev/core/array/VectorElemental.hpp> 59 #include <lifev/core/array/MatrixEpetra.hpp> 60 #include <lifev/core/array/VectorEpetra.hpp> 62 #include <lifev/core/fem/Assembly.hpp> 63 #include <lifev/core/fem/AssemblyElemental.hpp> 64 #include <lifev/structure/fem/AssemblyElementalStructure.hpp> 65 #include <lifev/structure/fem/ExpressionDefinitions.hpp> 66 #include <lifev/core/fem/FESpace.hpp> 68 #include <lifev/core/LifeV.hpp> 69 #include <lifev/core/util/Displayer.hpp> 70 #include <lifev/core/util/Factory.hpp> 71 #include <lifev/core/util/FactorySingleton.hpp> 73 #include <lifev/structure/solver/StructuralConstitutiveLawData.hpp> 76 #include <lifev/eta/fem/ETFESpace.hpp> 77 #include <lifev/eta/expression/Integrate.hpp> 88 template <
typename MeshType>
89 class StructuralIsotropicConstitutiveLaw
97 typedef MatrixEpetra<
Real> matrix_Type;
98 typedef std::shared_ptr<matrix_Type> matrixPtr_Type;
99 typedef VectorEpetra vector_Type;
100 typedef std::shared_ptr<vector_Type> vectorPtr_Type;
102 typedef typename std::shared_ptr<data_Type> dataPtr_Type;
103 typedef typename std::shared_ptr<
const Displayer> displayerPtr_Type;
105 typedef FactorySingleton<Factory<StructuralIsotropicConstitutiveLaw<MeshType>, std::string> > StructureIsotropicMaterialFactory;
107 typedef std::vector<
typename MeshType::element_Type* > vectorVolumes_Type;
109 typedef std::map< UInt, vectorVolumes_Type> mapMarkerVolumes_Type;
110 typedef std::shared_ptr<mapMarkerVolumes_Type> mapMarkerVolumesPtr_Type;
112 typedef std::vector<UInt> vectorIndexes_Type;
113 typedef std::map< UInt, vectorIndexes_Type> mapMarkerIndexes_Type;
114 typedef std::shared_ptr<mapMarkerIndexes_Type> mapMarkerIndexesPtr_Type;
117 typedef ETFESpace<MeshType, MapEpetra, 3, 3 > ETFESpace_Type;
118 typedef std::shared_ptr<ETFESpace_Type> ETFESpacePtr_Type;
120 typedef FESpace< MeshType, MapEpetra > FESpace_Type;
121 typedef std::shared_ptr<FESpace_Type> FESpacePtr_Type;
124 typedef std::vector<std::vector<Real> > vectorsParameters_Type;
125 typedef std::shared_ptr<vectorsParameters_Type> vectorsParametersPtr_Type;
141 StructuralIsotropicConstitutiveLaw();
143 virtual ~StructuralIsotropicConstitutiveLaw() {}
158 virtual void setup (
const FESpacePtr_Type& dFESpace,
159 const ETFESpacePtr_Type& ETFESpace,
160 const std::shared_ptr<
const MapEpetra>& monolithicMap,
161 const UInt offset,
const dataPtr_Type& dataMaterial ) = 0;
168 virtual void computeLinearStiff ( dataPtr_Type& dataMaterial,
169 const mapMarkerVolumesPtr_Type ,
170 const mapMarkerIndexesPtr_Type ) = 0;
179 virtual void updateJacobianMatrix (
const vector_Type& disp,
const dataPtr_Type& dataMaterial,
180 const mapMarkerVolumesPtr_Type mapsMarkerVolumes,
181 const mapMarkerIndexesPtr_Type mapsMarkerIndexes,
182 const displayerPtr_Type& displayer ) = 0;
195 virtual void computeStiffness (
const vector_Type& sol,
Real factor,
const dataPtr_Type& dataMaterial,
196 const mapMarkerVolumesPtr_Type mapsMarkerVolumes,
197 const mapMarkerIndexesPtr_Type mapsMarkerIndexes,
198 const displayerPtr_Type& displayer ) = 0;
206 virtual void computeKinematicsVariables (
const VectorElemental& dk_loc ) = 0;
214 virtual void showMe ( std::string
const& fileNameStiff, std::string
const& fileNameJacobian ) = 0;
225 virtual void computeLocalFirstPiolaKirchhoffTensor ( Epetra_SerialDenseMatrix& firstPiola,
226 const Epetra_SerialDenseMatrix& tensorF,
227 const Epetra_SerialDenseMatrix& cofactorF,
228 const std::vector<Real>& invariants,
229 const UInt material) = 0;
238 virtual void computeCauchyStressTensor (
const vectorPtr_Type disp,
240 vectorPtr_Type sigma_1,
241 vectorPtr_Type sigma_2,
242 vectorPtr_Type sigma_3) = 0;
258 MapEpetra
const& map()
const 264 FESpace_Type& dFESpace()
266 return M_dispFESpace;
270 matrixPtr_Type
const jacobian()
const 276 virtual matrixPtr_Type
const stiffMatrix()
const = 0;
279 virtual vectorPtr_Type
const stiffVector()
const = 0;
281 virtual void apply (
const vector_Type& sol, vector_Type& res,
282 const mapMarkerVolumesPtr_Type mapsMarkerVolumes,
283 const mapMarkerIndexesPtr_Type mapsMarkerIndexes,
284 const displayerPtr_Type displayer) = 0;
296 virtual void setupVectorsParameters (
void ) = 0;
299 dataPtr_Type M_dataMaterial;
301 FESpacePtr_Type M_dispFESpace;
303 ETFESpacePtr_Type M_dispETFESpace;
305 std::shared_ptr<
const MapEpetra> M_localMap;
308 matrixPtr_Type M_jacobian;
314 vectorsParametersPtr_Type M_vectorsParameters;
321 template <
typename MeshType>
322 StructuralIsotropicConstitutiveLaw<MeshType>::StructuralIsotropicConstitutiveLaw( ) :
329 M_vectorsParameters ( )
ExpressionMinusTransposed< ExpressionAddition< ExpressionInterpolateGradient< MeshType, MapEpetra, 3, 3 >, ExpressionMatrix< 3, 3 > > > minusTransposedTensor_Type
FESpace - Short description here please!
ExpressionProduct< ExpressionTranspose< ExpressionAddition< ExpressionInterpolateGradient< MeshType, MapEpetra, 3, 3 >, ExpressionMatrix< 3, 3 > > >, ExpressionAddition< ExpressionInterpolateGradient< MeshType, MapEpetra, 3, 3 >, ExpressionMatrix< 3, 3 > > > rightCauchyGreenTensor_Type
double Real
Generic real data.
ExpressionAddition< ExpressionInterpolateGradient< MeshType, MapEpetra, 3, 3 >, ExpressionMatrix< 3, 3 > > deformationGradient_Type
ExpressionTrace< ExpressionProduct< ExpressionTranspose< ExpressionAddition< ExpressionInterpolateGradient< MeshType, MapEpetra, 3, 3 >, ExpressionMatrix< 3, 3 > > >, ExpressionAddition< ExpressionInterpolateGradient< MeshType, MapEpetra, 3, 3 >, ExpressionMatrix< 3, 3 > > > > traceTensor_Type
ExpressionDeterminant< ExpressionAddition< ExpressionInterpolateGradient< MeshType, MapEpetra, 3, 3 >, ExpressionMatrix< 3, 3 > > > determinantTensorF_Type
QuadratureRule - The basis class for storing and accessing quadrature rules.
class ETFESpace A light, templated version of the FESpace
DataElasticStructure - Data container for solid problems with elastic structure.
uint32_type UInt
generic unsigned integer (used mainly for addressing)