v0.16.0
Loading...
Searching...
No Matches
Public Types | Public Member Functions | List of all members
MatOps::TopoDerivativeMatElasticImpl< DIM > Struct Template Reference
Inheritance diagram for MatOps::TopoDerivativeMatElasticImpl< DIM >:
[legend]
Collaboration diagram for MatOps::TopoDerivativeMatElasticImpl< DIM >:
[legend]

Public Types

using A = MatNeohookeanGeneric< TopoMatElasticImpl< DIM > >
 
- Public Types inherited from MatOps::MatNeohookeanGeneric< TopoMatElasticImpl< DIM > >
using A = TopoMatElasticImpl< DIM >
 
- Public Types inherited from MatOps::PhysicalEquations
using HookFunction = std::function< MoFEMErrorCode(boost::shared_ptr< MatOpsData >, int, EntityHandle, int)>
 

Public Member Functions

MoFEMErrorCode setParams (FEMethod *fe_ptr, int gg) override
 
MoFEMErrorCode recordTape () override
 
- Public Member Functions inherited from MatOps::MatNeohookeanGeneric< TopoMatElasticImpl< DIM > >
MoFEMErrorCode getOptions (MoFEM::Interface *m_field_ptr=nullptr) override
 
- Public Member Functions inherited from MatOps::TopoMatElasticImpl< DIM >
ForcesAndSourcesCore::UserDataOperator * createOp (boost::shared_ptr< PhysicalEquations > physical_ptr, bool eval_stress, bool eval_tangent, bool update) override
 
ForcesAndSourcesCore::UserDataOperator * createOp (boost::shared_ptr< PhysicalEquations > physical_ptr, bool eval_stress, bool eval_tangent, bool update)
 
ForcesAndSourcesCore::UserDataOperator * createOp (boost::shared_ptr< PhysicalEquations > physical_ptr, bool eval_stress, bool eval_tangent, bool update)
 
- Public Member Functions inherited from MatOps::MatElastic
 PhysicalEquations ()=delete
 
 PhysicalEquations (boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag, boost::shared_ptr< std::map< int, Range > > tag_vs_range_ptr=nullptr)
 
- Public Member Functions inherited from MatOps::PhysicalEquations
 PhysicalEquations ()=delete
 
 PhysicalEquations (boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag, boost::shared_ptr< std::map< int, Range > > tag_vs_range_ptr=nullptr)
 
virtual ~PhysicalEquations ()=default
 
virtual MoFEMErrorCode evaluateVariable (int tag, EntityHandle entity, int gg)
 
virtual MoFEMErrorCode evaluateDerivatives (int tag, EntityHandle entity, int gg)
 
virtual MoFEMErrorCode updateState (int tag, EntityHandle entity, int gg)
 

Additional Inherited Members

- Public Attributes inherited from MatOps::PhysicalEquations
HookFunction hookEvaluateVariable = AdolCEvaluation::evaluateVariable
 
HookFunction hookEvaluateDerivatives = AdolCEvaluation::evaluateDerivatives
 
HookFunction hookUpdateState = AdolCEvaluation::evaluateVariable
 
int tAg
 
boost::shared_ptr< std::map< int, Range > > tagVsRangePtr
 
std::vector< std::pair< Range, std::vector< double > > > paramVecByRange
 
boost::shared_ptr< MatOpsDatamatOpsDataPtr
 
- Static Public Attributes inherited from MatOps::MatElastic
static bool useDeformationGradient
 
- Protected Attributes inherited from MatOps::MatNeohookeanGeneric< TopoMatElasticImpl< DIM > >
double C10
 
double K
 
std::vector< doubledefaultMaterialParameters
 

Detailed Description

template<int DIM>
struct MatOps::TopoDerivativeMatElasticImpl< DIM >

Definition at line 165 of file MatNeohookean.cpp.

Member Typedef Documentation

◆ A

Definition at line 167 of file MatNeohookean.cpp.

Member Function Documentation

◆ recordTape()

template<int DIM>
MoFEMErrorCode MatOps::TopoDerivativeMatElasticImpl< DIM >::recordTape ( )
inlineoverridevirtual

Implements MatOps::PhysicalEquations.

Definition at line 201 of file MatNeohookean.cpp.

201 {
203
204 A::matOpsDataPtr->insertCommonData("Jac", MatrixDouble());
205 A::matOpsDataPtr->insertCommonData("grad", MatrixDouble());
206 A::matOpsDataPtr->insertCommonData("var_grad", MatrixDouble());
207 A::matOpsDataPtr->insertActiveData("Jac", MatrixDouble(DIM, DIM));
208 A::matOpsDataPtr->insertDependentData("Obj", MatrixDouble(1, 1));
209 A::matOpsDataPtr->insertDependentDerivativesData("dObj",
210 MatrixDouble(DIM, DIM));
211
212 auto t_jac = getFTensor2FromPtr<DIM, DIM>(
213 A::matOpsDataPtr->getActiveDataPtr("Jac")->data().data());
214 auto &obj = (*A::matOpsDataPtr->getDependentDataPtr("Obj"))(0, 0);
215
217
218 FTENSOR_INDEXES(DIM, i, J);
219 t_jac(i, J) = t_kd(i, J);
220
226 adouble det_aF;
228
229 adouble ta_obj;
230 adouble det;
231
232 trace_on(A::tAg);
233
234 for (int ii = 0; ii < DIM; ++ii) {
235 for (int JJ = 0; JJ < DIM; ++JJ) {
236 tp_F(ii, JJ) = mkparam(0.);
237 }
238 }
239 for (int ii = 0; ii < DIM; ++ii) {
240 for (int JJ = 0; JJ < DIM; ++JJ) {
241 tp_var_F(ii, JJ) = mkparam(0.);
242 }
243 }
244 auto p_c10 = mkparam(this->C10);
245 auto p_K = mkparam(this->K);
246
247 FTENSOR_INDEX(DIM, I);
248 FTENSOR_INDEX(DIM, K);
249
250 ta_jac(i, J) <<= t_jac(i, J);
251 det = determinantTensor(ta_jac);
252
254 ta_F(i, J) = ta_jac(J, K) * tp_F(i, K);
255 } else {
256 ta_F(i, J) = ta_jac(J, K) * (tp_F(i, K) + t_kd(i, K));
257 }
258
259 det_aF = determinantTensor(ta_F);
260 CHKERR invertTensor(ta_F, det_aF, ta_invF);
261 ta_P(i, I) = 2. * p_c10 * (ta_F(i, I) - ta_invF(i, I)) +
262 p_K * log(det_aF) * ta_invF(i, I);
263 ta_obj = det * ta_P(i, I) * ta_jac(I, K) * tp_var_F(i, K);
264 ta_obj >>= obj;
265
266 trace_off();
267
269 }
#define FTENSOR_INDEXES(DIM,...)
#define FTENSOR_INDEX(DIM, I)
Kronecker Delta class.
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
constexpr auto t_kd
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'J', DIM1 > J
Definition level_set.cpp:30
UBlasMatrix< double > MatrixDouble
Definition Types.hpp:77
constexpr IntegrationType I
static bool useDeformationGradient
boost::shared_ptr< MatOpsData > matOpsDataPtr
Definition MatOps.hpp:154

◆ setParams()

template<int DIM>
MoFEMErrorCode MatOps::TopoDerivativeMatElasticImpl< DIM >::setParams ( FEMethod fe_ptr,
int  gg 
)
inlineoverridevirtual

Implements MatOps::PhysicalEquations.

Definition at line 170 of file MatNeohookean.cpp.

170 {
171 (void)gg;
172 std::vector<double> adolc_c_param_vec;
173 auto grad = A::matOpsDataPtr->getCommonDataPtr("grad");
174 auto var_grad = A::matOpsDataPtr->getCommonDataPtr("var_grad");
175 adolc_c_param_vec.reserve(grad->size2() + var_grad->size2() +
176 this->defaultMaterialParameters.size());
177
178 for (auto cc = 0; cc < grad->size2(); ++cc) {
179 adolc_c_param_vec.push_back((*grad)(gg, cc));
180 }
181 for (auto cc = 0; cc < var_grad->size2(); ++cc) {
182 adolc_c_param_vec.push_back((*var_grad)(gg, cc));
183 }
184 const auto ent = fe_ptr->getFEEntityHandle();
185 for (auto &[range, param_vec] : A::paramVecByRange) {
186 if (std::find(range.begin(), range.end(), ent) != range.end()) {
187 adolc_c_param_vec.insert(adolc_c_param_vec.end(), param_vec.begin(),
188 param_vec.end());
189 set_param_vec(A::tAg, adolc_c_param_vec.size(),
190 adolc_c_param_vec.data());
191 return 0;
192 }
193 }
194 adolc_c_param_vec.insert(adolc_c_param_vec.end(),
195 this->defaultMaterialParameters.begin(),
196 this->defaultMaterialParameters.end());
197 set_param_vec(A::tAg, adolc_c_param_vec.size(), adolc_c_param_vec.data());
198 return 0;
199 }
std::vector< std::pair< Range, std::vector< double > > > paramVecByRange
Definition MatOps.hpp:152
MatNeohookeanGeneric< TopoMatElasticImpl< DIM > > A

The documentation for this struct was generated from the following file: