v0.15.0
Loading...
Searching...
No Matches
ADOLCPlasticityLargeStrain.hpp
Go to the documentation of this file.
1/** \file ADOLCPlasticityLargeStrain.hpp
2 * \ingroup adoc_plasticity
3 * \example ADOLCPlasticityLargeStrain.hpp
4 *
5 * \brief Operators and data structures for large strain plasticity
6 *
7 * \defgroup adoc_plasticity ADOL-C plasticity
8 * \ingroup user_modules
9 * \defgroup user_modules User modules
10 *
11**/
12
13#include "MoFEM.hpp"
14using namespace MoFEM;
15
16namespace ADOLCPlasticity {
17
18struct OpTransferCommonData : public ForcesAndSourcesCore::UserDataOperator {
19 boost::shared_ptr<MatrixDouble> mA;
20 boost::shared_ptr<MatrixDouble> mB;
21
22 OpTransferCommonData(boost::shared_ptr<MatrixDouble> m_a,
23 boost::shared_ptr<MatrixDouble> m_b)
25 UserDataOperator::OPSPACE),
26 mA(m_a), mB(m_b) {}
27
28 MoFEMErrorCode doWork(int side, EntityType type,
29 DataForcesAndSourcesCore::EntData &data) {
31 // Swap mA to mB
32 *mA = std::move(*mB);
34 }
35};
36
37template <int DIM, IntegrationType I, typename DomainEleOp>
39 MoFEM::Interface &m_field, std::string field_name, Pip &pip,
40 std::string block_name,
41 boost::shared_ptr<ADOLCPlasticity::CommonData> common_data_ptr,
42 boost::shared_ptr<ClosestPointProjection> cp_ptr);
43
44template <int DIM, IntegrationType I, typename DomainEleOp>
46 MoFEM::Interface &m_field, std::string field_name, Pip &pip,
47 std::string block_name,
48 boost::shared_ptr<ADOLCPlasticity::CommonData> common_data_ptr,
49 boost::shared_ptr<ClosestPointProjection> cp_ptr) {
51 using namespace HenckyOps;
52
54
55 auto common_hencky_ptr = boost::make_shared<HenckyOps::CommonData>();
56
57 common_hencky_ptr->matDPtr = boost::make_shared<MatrixDouble>();
58 common_hencky_ptr->matGradPtr = boost::make_shared<MatrixDouble>();
59
61
63 field_name, common_hencky_ptr->matGradPtr));
64 pip.push_back(new typename H::template OpCalculateEigenVals<DIM, I>(
65 field_name, common_hencky_ptr));
66 pip.push_back(new typename H::template OpCalculateLogC<DIM, I>(
67 field_name, common_hencky_ptr));
68 pip.push_back(new typename H::template OpCalculateLogC_dC<DIM, I>(
69 field_name, common_hencky_ptr));
70 pip.push_back(
71 new OpTransferCommonData(common_data_ptr->getGradAtGaussPtsPtr(),
72 common_hencky_ptr->getMatLogC()));
73
74 CHKERR cp_ptr->addMatBlockOps(m_field, pip, block_name, Sev::inform);
75 pip.push_back(getRawPtrOpCalculateStress<DIM, LARGE_STRAIN>(m_field, common_data_ptr,
76 cp_ptr, false));
77 pip.push_back(
78 new OpTransferCommonData(common_hencky_ptr->getMatHenckyStress(),
79 common_data_ptr->getStressMatrixPtr()));
80 pip.push_back(new OpTransferCommonData(common_hencky_ptr->matDPtr,
81 common_data_ptr->getMatTangentPtr()));
82
83 // post process stress to first piola kirchhoff stress
84 pip.push_back(new typename H::template OpCalculatePiolaStress<DIM, I, 1>(
85 field_name, common_hencky_ptr));
86 pip.push_back(
87 new OpTransferCommonData(common_data_ptr->getStressMatrixPtr(),
88 common_hencky_ptr->getMatFirstPiolaStress()));
90};
91
92template <int DIM, IntegrationType I, typename DomainEleOp>
94 MoFEM::Interface &m_field, std::string field_name, Pip &pip,
95 std::string block_name,
96 boost::shared_ptr<ADOLCPlasticity::CommonData> common_data_ptr,
97 boost::shared_ptr<ClosestPointProjection> cp_ptr) {
99 m_field, field_name, pip, block_name, common_data_ptr, cp_ptr);
100};
101
102template <int DIM, IntegrationType I, typename DomainEleOp>
104 MoFEM::Interface &m_field, std::string field_name, Pip &pip,
105 std::string block_name,
106 boost::shared_ptr<ADOLCPlasticity::CommonData> common_data_ptr,
107 boost::shared_ptr<ClosestPointProjection> cp_ptr);
108
109template <int DIM, IntegrationType I, typename DomainEleOp>
111 MoFEM::Interface &m_field, std::string field_name, Pip &pip,
112 std::string block_name,
113 boost::shared_ptr<ADOLCPlasticity::CommonData> common_data_ptr,
114 boost::shared_ptr<ClosestPointProjection> cp_ptr) {
116 using namespace HenckyOps;
117
118 auto common_hencky_ptr = boost::make_shared<HenckyOps::CommonData>();
119 common_hencky_ptr->matDPtr = boost::make_shared<MatrixDouble>();
120 common_hencky_ptr->matGradPtr = boost::make_shared<MatrixDouble>();
121
123
125 field_name, common_hencky_ptr->matGradPtr));
126 pip.push_back(new typename H::template OpCalculateEigenVals<DIM, I>(
127 field_name, common_hencky_ptr));
128 pip.push_back(new typename H::template OpCalculateLogC<DIM, I>(
129 field_name, common_hencky_ptr));
130 pip.push_back(new typename H::template OpCalculateLogC_dC<DIM, I>(
131 field_name, common_hencky_ptr));
132 pip.push_back(
133 new OpTransferCommonData(common_data_ptr->getGradAtGaussPtsPtr(),
134 common_hencky_ptr->getMatLogC()));
135
136 CHKERR cp_ptr->addMatBlockOps(m_field, pip, block_name, Sev::inform);
137 pip.push_back(
138 getRawPtrOpCalculateStress<DIM ,LARGE_STRAIN>(m_field, common_data_ptr, cp_ptr, false));
139 pip.push_back(
140 new OpTransferCommonData(common_hencky_ptr->getMatHenckyStress(),
141 common_data_ptr->getStressMatrixPtr()));
142 pip.push_back(new OpTransferCommonData(common_hencky_ptr->matDPtr,
143 common_data_ptr->getMatTangentPtr()));
144 pip.push_back(new typename H::template OpCalculatePiolaStress<DIM, I, 1>(
145 field_name, common_hencky_ptr));
146
147 pip.push_back(new typename H::template OpHenckyTangent<DIM, I, 1>(
148 field_name, common_hencky_ptr));
149 pip.push_back(new OpTransferCommonData(common_data_ptr->getMatTangentPtr(),
150 common_hencky_ptr->getMatTangent()));
152};
153
154template <int DIM, IntegrationType I, typename DomainEleOp>
156 MoFEM::Interface &m_field, std::string field_name, Pip &pip,
157 std::string block_name,
158 boost::shared_ptr<ADOLCPlasticity::CommonData> common_data_ptr,
159 boost::shared_ptr<ClosestPointProjection> cp_ptr) {
161 m_field, field_name, pip, block_name, common_data_ptr, cp_ptr);
162};
163
164
165} // namespace ADOLCPlasticity
ForcesAndSourcesCore::UserDataOperator UserDataOperator
@ NOSPACE
Definition definitions.h:83
#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.
MoFEMErrorCode opFactoryDomainHenckyStrainLhs(MoFEM::Interface &m_field, std::string field_name, Pip &pip, std::string block_name, boost::shared_ptr< ADOLCPlasticity::CommonData > common_data_ptr, boost::shared_ptr< ClosestPointProjection > cp_ptr)
MoFEMErrorCode opFactoryDomainHenckyStrainRhs(MoFEM::Interface &m_field, std::string field_name, Pip &pip, std::string block_name, boost::shared_ptr< ADOLCPlasticity::CommonData > common_data_ptr, boost::shared_ptr< ClosestPointProjection > cp_ptr)
ForcesAndSourcesCore::UserDataOperator * getRawPtrOpCalculateStress(MoFEM::Interface &m_field, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< ClosestPointProjection > cp_ptr, bool calc_lhs)
Get opreator to calulate stress.
MoFEMErrorCode opFactoryDomainHenckyStrainRhsImpl(MoFEM::Interface &m_field, std::string field_name, Pip &pip, std::string block_name, boost::shared_ptr< ADOLCPlasticity::CommonData > common_data_ptr, boost::shared_ptr< ClosestPointProjection > cp_ptr)
MoFEMErrorCode opFactoryDomainHenckyStrainLhsImpl(MoFEM::Interface &m_field, std::string field_name, Pip &pip, std::string block_name, boost::shared_ptr< ADOLCPlasticity::CommonData > common_data_ptr, boost::shared_ptr< ClosestPointProjection > cp_ptr)
boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > Pip
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
implementation of Data Operators for Forces and Sources
Definition Common.hpp:10
double H
Hardening.
Definition plastic.cpp:128
constexpr auto field_name
OpTransferCommonData(boost::shared_ptr< MatrixDouble > m_a, boost::shared_ptr< MatrixDouble > m_b)
MoFEMErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
Deprecated interface functions.
structure to get information form mofem into EntitiesFieldData
Get field gradients at integration pts for scalar field rank 0, i.e. vector field.