v0.15.0
Loading...
Searching...
No Matches
PlasticOps::OpCalculatePlasticFlowLhs_LogStrain_dUImpl< DIM, GAUSS, AssemblyDomainEleOp > Struct Template Reference

#include "tutorials/adv-0/src/PlasticOpsLargeStrains.hpp"

Inheritance diagram for PlasticOps::OpCalculatePlasticFlowLhs_LogStrain_dUImpl< DIM, GAUSS, AssemblyDomainEleOp >:
[legend]
Collaboration diagram for PlasticOps::OpCalculatePlasticFlowLhs_LogStrain_dUImpl< DIM, GAUSS, AssemblyDomainEleOp >:
[legend]

Public Member Functions

 OpCalculatePlasticFlowLhs_LogStrain_dUImpl (const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< HenckyOps::CommonData > common_hencky_data_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr)
 
MoFEMErrorCode iNtegrate (EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
 

Private Attributes

boost::shared_ptr< CommonDatacommonDataPtr
 
boost::shared_ptr< HenckyOps::CommonDatacommonHenckyDataPtr
 
boost::shared_ptr< MatrixDouble > mDPtr
 
MatrixDouble resDiff
 

Detailed Description

template<int DIM, typename AssemblyDomainEleOp>
struct PlasticOps::OpCalculatePlasticFlowLhs_LogStrain_dUImpl< DIM, GAUSS, AssemblyDomainEleOp >

Definition at line 129 of file PlasticOpsLargeStrains.hpp.

Constructor & Destructor Documentation

◆ OpCalculatePlasticFlowLhs_LogStrain_dUImpl()

template<int DIM, typename AssemblyDomainEleOp >
PlasticOps::OpCalculatePlasticFlowLhs_LogStrain_dUImpl< DIM, GAUSS, AssemblyDomainEleOp >::OpCalculatePlasticFlowLhs_LogStrain_dUImpl ( const std::string row_field_name,
const std::string col_field_name,
boost::shared_ptr< CommonData > common_data_ptr,
boost::shared_ptr< HenckyOps::CommonData > common_hencky_data_ptr,
boost::shared_ptr< MatrixDouble > m_D_ptr )

Definition at line 148 of file PlasticOpsLargeStrains.hpp.

154 : AssemblyDomainEleOp(row_field_name, col_field_name,
155 AssemblyDomainEleOp::OPROWCOL),
156 commonDataPtr(common_data_ptr),
157 commonHenckyDataPtr(common_hencky_data_ptr), mDPtr(m_D_ptr) {
158 AssemblyDomainEleOp::sYmm = false;
159}
FormsIntegrators< DomainEleOp >::Assembly< A >::OpBase AssemblyDomainEleOp

Member Function Documentation

◆ iNtegrate()

template<int DIM, typename AssemblyDomainEleOp >
MoFEMErrorCode PlasticOps::OpCalculatePlasticFlowLhs_LogStrain_dUImpl< DIM, GAUSS, AssemblyDomainEleOp >::iNtegrate ( EntitiesFieldData::EntData & row_data,
EntitiesFieldData::EntData & col_data )

Definition at line 163 of file PlasticOpsLargeStrains.hpp.

165 {
167
168 FTensor::Index<'i', DIM> i;
169 FTensor::Index<'j', DIM> j;
170 FTensor::Index<'k', DIM> k;
171 FTensor::Index<'l', DIM> l;
172 FTensor::Index<'m', DIM> m;
173 FTensor::Index<'n', DIM> n;
174 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
176
177 auto &locMat = AssemblyDomainEleOp::locMat;
178
179 const auto nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
180 const auto nb_row_base_functions = row_data.getN().size2();
181
182 if (AssemblyDomainEleOp::colType == MBVERTEX &&
183 AssemblyDomainEleOp::colSide == 0) {
184
185 resDiff.resize(size_symm * DIM * DIM, nb_integration_pts, false);
186 auto t_res_diff = getFTensor3FromMat<size_symm, DIM, DIM>(resDiff);
187
188 auto t_res_flow_dstrain =
189 getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->resFlowDstrain);
190 auto t_grad = getFTensor2FromMat<DIM, DIM>(*(commonDataPtr->mGradPtr));
191 auto t_logC_dC =
192 getFTensor4DdgFromMat<DIM, DIM>(commonHenckyDataPtr->matLogCdC);
193
194 auto next = [&]() {
195 ++t_res_flow_dstrain;
196 ++t_grad;
197 ++t_logC_dC;
198 ++t_res_diff;
199 };
200
202 constexpr auto t_kd = FTensor::Kronecker_Delta<int>();
204 t_diff_grad(i, j, k, l) = t_kd(i, k) * t_kd(j, l);
205
206 for (size_t gg = 0; gg != nb_integration_pts; ++gg) {
207 FTensor::Ddg<double, DIM, DIM> t_diff_ls_dlogC_dC;
210
211 t_diff_ls_dlogC_dC(i, j, k, l) =
212 (t_res_flow_dstrain(i, j, m, n)) * (t_logC_dC(m, n, k, l) / 2);
213
214 t_F(i, j) = t_grad(i, j) + t_kd(i, j);
215 t_dC_dF(i, j, k, l) = (t_kd(i, l) * t_F(k, j)) + (t_kd(j, l) * t_F(k, i));
216
218 t_res_diff(L, i, j) =
219 (t_L(m, n, L) * t_diff_ls_dlogC_dC(m, n, k, l)) * t_dC_dF(k, l, i, j);
220 next();
221 }
222 }
223
224 auto t_res_diff = getFTensor3FromMat<size_symm, DIM, DIM>(resDiff);
225
226 auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
227 auto t_row_base = row_data.getFTensor0N();
228 for (size_t gg = 0; gg != nb_integration_pts; ++gg) {
229 double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
230 ++t_w;
231
232 size_t rr = 0;
233 for (; rr != AssemblyDomainEleOp::nbRows / size_symm; ++rr) {
234 const auto row_base = alpha * t_row_base;
235 auto t_mat =
237 auto t_col_diff_base = col_data.getFTensor1DiffN<DIM>(gg, 0);
238 for (auto cc = 0; cc != AssemblyDomainEleOp::nbCols / DIM; ++cc) {
239 t_mat(L, l) += row_base * (t_res_diff(L, l, k) * t_col_diff_base(k));
240 ++t_mat;
241 ++t_col_diff_base;
242 }
243 ++t_row_base;
244 }
245
246 for (; rr < nb_row_base_functions; ++rr)
247 ++t_row_base;
248
249 ++t_res_diff;
250 }
251
253}
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()
constexpr auto t_kd
FTensor::Index< 'i', SPACE_DIM > i
const double n
refractive index of diffusive medium
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
auto symm_L_tensor(FTensor::Number< DIM >)
static auto get_mat_tensor_sym_dvector(size_t rr, MatrixDouble &mat, FTensor::Number< 2 >)
[Lambda functions]
constexpr auto size_symm
Definition plastic.cpp:42
FTensor::Index< 'm', 3 > m

Member Data Documentation

◆ commonDataPtr

template<int DIM, typename AssemblyDomainEleOp >
boost::shared_ptr<CommonData> PlasticOps::OpCalculatePlasticFlowLhs_LogStrain_dUImpl< DIM, GAUSS, AssemblyDomainEleOp >::commonDataPtr
private

Definition at line 141 of file PlasticOpsLargeStrains.hpp.

◆ commonHenckyDataPtr

template<int DIM, typename AssemblyDomainEleOp >
boost::shared_ptr<HenckyOps::CommonData> PlasticOps::OpCalculatePlasticFlowLhs_LogStrain_dUImpl< DIM, GAUSS, AssemblyDomainEleOp >::commonHenckyDataPtr
private

Definition at line 142 of file PlasticOpsLargeStrains.hpp.

◆ mDPtr

template<int DIM, typename AssemblyDomainEleOp >
boost::shared_ptr<MatrixDouble> PlasticOps::OpCalculatePlasticFlowLhs_LogStrain_dUImpl< DIM, GAUSS, AssemblyDomainEleOp >::mDPtr
private

Definition at line 143 of file PlasticOpsLargeStrains.hpp.

◆ resDiff

template<int DIM, typename AssemblyDomainEleOp >
MatrixDouble PlasticOps::OpCalculatePlasticFlowLhs_LogStrain_dUImpl< DIM, GAUSS, AssemblyDomainEleOp >::resDiff
private

Definition at line 144 of file PlasticOpsLargeStrains.hpp.


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