55 struct CommonData :
public boost::enable_shared_from_this<CommonData> {
56 boost::shared_ptr<MatrixDouble>
mDPtr;
72 return boost::shared_ptr<VectorDouble>(shared_from_this(), &
plasticTau);
75 return boost::shared_ptr<VectorDouble>(shared_from_this(), &
plasticTauDot);
78 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
plasticStrain);
81 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
85 return boost::shared_ptr<VectorDouble>(shared_from_this(), &
tempVal);
108 boost::shared_ptr<CommonData> common_data_ptr);
117 boost::shared_ptr<CommonData> common_data_ptr,
118 boost::shared_ptr<MatrixDouble>
mDPtr,
119 const double scale = 1);
123 boost::shared_ptr<MatrixDouble>
mDPtr;
130 boost::shared_ptr<CommonData> common_data_ptr);
139 boost::shared_ptr<CommonData> common_data_ptr);
148 const std::string row_field_name,
const std::string col_field_name,
149 boost::shared_ptr<CommonData> common_data_ptr,
150 boost::shared_ptr<MatrixDouble> m_D_ptr);
156 boost::shared_ptr<MatrixDouble>
mDPtr;
162 const std::string row_field_name,
const std::string col_field_name,
163 boost::shared_ptr<CommonData> common_data_ptr,
164 boost::shared_ptr<HenckyOps::CommonData> common_henky_data_ptr,
165 boost::shared_ptr<MatrixDouble> m_D_ptr);
172 boost::shared_ptr<MatrixDouble>
mDPtr;
178 const std::string col_field_name,
179 boost::shared_ptr<CommonData> common_data_ptr,
180 boost::shared_ptr<MatrixDouble> m_D_ptr);
186 boost::shared_ptr<MatrixDouble>
mDPtr;
191 const std::string row_field_name,
const std::string col_field_name,
192 boost::shared_ptr<CommonData> common_data_ptr,
193 boost::shared_ptr<HenckyOps::CommonData> comman_henky_data_ptr,
194 boost::shared_ptr<MatrixDouble> m_D_ptr);
201 boost::shared_ptr<MatrixDouble>
mDPtr;
206 const std::string col_field_name,
207 boost::shared_ptr<CommonData> common_data_ptr,
208 boost::shared_ptr<MatrixDouble> m_D_ptr);
214 boost::shared_ptr<MatrixDouble>
mDPtr;
219 const std::string col_field_name,
220 boost::shared_ptr<CommonData> common_data_ptr);
230 const std::string col_field_name,
231 boost::shared_ptr<CommonData> common_data_ptr,
232 boost::shared_ptr<MatrixDouble> m_D_ptr);
238 boost::shared_ptr<MatrixDouble>
mDPtr;
243 const std::string row_field_name,
const std::string col_field_name,
244 boost::shared_ptr<CommonData> common_data_ptr,
245 boost::shared_ptr<HenckyOps::CommonData> comman_henky_data_ptr,
246 boost::shared_ptr<MatrixDouble> m_D_ptr);
253 boost::shared_ptr<MatrixDouble>
mDPtr;
258 const std::string col_field_name,
259 boost::shared_ptr<CommonData> common_data_ptr,
260 boost::shared_ptr<MatrixDouble> mat_D_ptr);
266 boost::shared_ptr<MatrixDouble>
mDPtr;
271 const std::string col_field_name,
272 boost::shared_ptr<CommonData> common_data_ptr);
282 std::vector<EntityHandle> &map_gauss_pts,
283 boost::shared_ptr<CommonData> common_data_ptr);
323 t_diff(
i,
j,
k,
l) = 0;
324 t_diff(0, 0, 0, 0) = 1;
325 t_diff(1, 1, 1, 1) = 1;
327 t_diff(1, 0, 1, 0) = 0.5;
328 t_diff(1, 0, 0, 1) = 0.5;
330 t_diff(0, 1, 0, 1) = 0.5;
331 t_diff(0, 1, 1, 0) = 0.5;
334 t_diff(2, 2, 2, 2) = 1;
336 t_diff(2, 0, 2, 0) = 0.5;
337 t_diff(2, 0, 0, 2) = 0.5;
338 t_diff(0, 2, 0, 2) = 0.5;
339 t_diff(0, 2, 2, 0) = 0.5;
341 t_diff(2, 1, 2, 1) = 0.5;
342 t_diff(2, 1, 1, 2) = 0.5;
343 t_diff(1, 2, 1, 2) = 0.5;
344 t_diff(1, 2, 2, 1) = 0.5;
350 template <
typename T>
352 constexpr
double third = boost::math::constants::third<double>();
354 return (t_stress(0, 0) + t_stress(1, 1)) *
third;
356 return (t_stress(0, 0) + t_stress(1, 1) + t_stress(2, 2)) *
third;
359 template <
typename T>
366 t_dev(ii, jj) = t_stress(ii, jj);
367 t_dev(0, 0) -=
trace;
368 t_dev(1, 1) -=
trace;
369 t_dev(2, 2) -=
trace;
376 t_diff_deviator(
I,
J,
k,
l) = 0;
381 t_diff_deviator(ii, jj, kk, ll) = t_diff_stress(ii, jj, kk, ll);
383 constexpr
double third = boost::math::constants::third<double>();
385 t_diff_deviator(0, 0, 0, 0) -=
third;
386 t_diff_deviator(0, 0, 1, 1) -=
third;
388 t_diff_deviator(1, 1, 0, 0) -=
third;
389 t_diff_deviator(1, 1, 1, 1) -=
third;
391 t_diff_deviator(2, 2, 0, 0) -=
third;
392 t_diff_deviator(2, 2, 1, 1) -=
third;
395 t_diff_deviator(0, 0, 2, 2) -=
third;
396 t_diff_deviator(1, 1, 2, 2) -=
third;
397 t_diff_deviator(2, 2, 2, 2) -=
third;
400 return t_diff_deviator;
428 return std::sqrt(1.5 * t_stress_deviator(
I,
J) * t_stress_deviator(
I,
J)) +
429 std::numeric_limits<double>::epsilon();
437 (1.5 * (t_dev_stress(
I,
J) * t_diff_deviator(
I,
J,
k,
l))) /
f;
441 template <
typename T>
446 t_diff_flow(
i,
j,
k,
l) =
447 (1.5 * (t_diff_deviator(
M,
N,
i,
j) * t_diff_deviator(
M,
N,
k,
l) -
448 (2. / 3.) * t_flow(
i,
j) * t_flow(
k,
l))) /
453 template <
typename T>
458 t_diff_flow(
i,
j,
k,
l) =
459 t_diff_plastic_flow_dstress(
i,
j,
m,
n) * t_D(
m,
n,
k,
l);
476 inline double w(
long double dot_tau,
long double f,
long double sigma_y) {
477 return (
f - sigma_y) /
sigmaY +
cn * dot_tau;
492 long double sigma_y) {
493 return visH * dot_tau +
499 long double sigma_y) {
505 long double sigma_y) {
510 long double sigma_y) {
514 template <
typename T>
520 return t_diff_constrain_dstress;
523 template <
typename T1,
typename T2>
526 t_diff_constrain_dstrain(
k,
l) =
527 t_diff_constrain_dstress(
i,
j) * t_D(
i,
j,
k,
l);
528 return t_diff_constrain_dstrain;
536 &mat(3 * rr + 0, 0), &mat(3 * rr + 0, 1), &mat(3 * rr + 1, 0),
537 &mat(3 * rr + 1, 1), &mat(3 * rr + 1, 0), &mat(3 * rr + 1, 1),
538 &mat(3 * rr + 2, 0), &mat(3 * rr + 2, 1)};
544 &mat(6 * rr + 0, 0), &mat(6 * rr + 0, 1), &mat(6 * rr + 0, 2),
545 &mat(6 * rr + 1, 0), &mat(6 * rr + 1, 1), &mat(6 * rr + 1, 2),
546 &mat(6 * rr + 2, 0), &mat(6 * rr + 2, 1), &mat(6 * rr + 2, 2),
547 &mat(6 * rr + 1, 0), &mat(6 * rr + 1, 1), &mat(6 * rr + 1, 2),
548 &mat(6 * rr + 3, 0), &mat(6 * rr + 3, 1), &mat(6 * rr + 3, 2),
549 &mat(6 * rr + 4, 0), &mat(6 * rr + 4, 1), &mat(6 * rr + 4, 2),
550 &mat(6 * rr + 2, 0), &mat(6 * rr + 2, 1), &mat(6 * rr + 2, 2),
551 &mat(6 * rr + 4, 0), &mat(6 * rr + 4, 1), &mat(6 * rr + 4, 2),
552 &mat(6 * rr + 5, 0), &mat(6 * rr + 5, 1), &mat(6 * rr + 5, 2)};
564 &mat(0, 0), &mat(0, 1), &mat(0, 2)};
EntitiesFieldData::EntData EntData
Kronecker Delta class symmetric.
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
UBlasMatrix< double > MatrixDouble
UBlasVector< double > VectorDouble
DeprecatedCoreInterface Interface
auto deviator(FTensor::Tensor2_symmetric< T, SPACE_DIM > &t_stress, double trace)
auto diff_constrain_dstress(double &&diff_constrain_df, FTensor::Tensor2_symmetric< T, SPACE_DIM > &t_plastic_flow)
double platsic_surface(FTensor::Tensor2_symmetric< double, 3 > &&t_stress_deviator)
FTensor::Index< 'j', SPACE_DIM > j
[Common data]
FTensor::Index< 'M', 3 > M
auto diff_constrain_dstrain(T1 &t_D, T2 &&t_diff_constrain_dstress)
auto plastic_flow(long double f, FTensor::Tensor2_symmetric< double, 3 > &&t_dev_stress, FTensor::Ddg< double, 3, SPACE_DIM > &&t_diff_deviator)
static auto get_mat_scalar_dvector(MatrixDouble &mat, FTensor::Number< 2 >)
FTensor::Index< 'l', SPACE_DIM > l
FTensor::Index< 'k', SPACE_DIM > k
auto diff_tensor()
[Operators definitions]
FTensor::Index< 'N', 3 > N
FTensor::Index< 'I', 3 > I
double constrain(long double dot_tau, long double f, long double sigma_y)
auto diff_deviator(FTensor::Ddg< double, SPACE_DIM, SPACE_DIM > &&t_diff_stress)
FTensor::Index< 'i', SPACE_DIM > i
double w(long double dot_tau, long double f, long double sigma_y)
FTensor::Index< 'm', SPACE_DIM > m
auto diff_constrain_dsigma_y(long double dot_tau, long double f, long double sigma_y)
FTensor::Index< 'J', 3 > J
double trace(FTensor::Tensor2_symmetric< T, SPACE_DIM > &t_stress)
double constrian_sign(long double x)
auto diff_plastic_flow_dstress(long double f, FTensor::Tensor2_symmetric< T, SPACE_DIM > &t_flow, FTensor::Ddg< double, 3, SPACE_DIM > &&t_diff_deviator)
auto diff_plastic_flow_dstrain(FTensor::Ddg< T, SPACE_DIM, SPACE_DIM > &t_D, FTensor::Ddg< double, SPACE_DIM, SPACE_DIM > &&t_diff_plastic_flow_dstress)
double diff_constrain_ddot_tau(long double dot_tau, long double f, long double sigma_y)
double constrain_abs(long double x)
auto diff_constrain_df(long double dot_tau, long double f, long double sigma_y)
static FTensor::Tensor3< FTensor::PackPtr< double *, 2 >, 2, 2, 2 > get_mat_tensor_sym_dvector(size_t rr, MatrixDouble &mat, FTensor::Number< 2 >)
[Lambda functions]
FTensor::Index< 'L',(SPACE_DIM *(SPACE_DIM+1))/2 > L
FTensor::Index< 'n', SPACE_DIM > n
Data on single entity (This is passed as argument to DataOperator::doWork)
boost::shared_ptr< MatrixDouble > mStrainPtr
auto getPlasticStrainPtr()
auto getPlasticStrainDotPtr()
boost::shared_ptr< MatrixDouble > mGradPtr
VectorDouble plasticTauDot
boost::shared_ptr< MatrixDouble > mDPtr
VectorDouble plasticSurface
boost::shared_ptr< MatrixDouble > mDPtr_Axiator
auto getPlasticTauDotPtr()
MatrixDouble plasticStrain
boost::shared_ptr< MatrixDouble > mStressPtr
MatrixDouble plasticStrainDot
boost::shared_ptr< MatrixDouble > mDPtr_Deviator
OpCalculateContrainsLhs_LogStrain_dU(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< HenckyOps::CommonData > comman_henky_data_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
boost::shared_ptr< CommonData > commonDataPtr
boost::shared_ptr< HenckyOps::CommonData > commonHenckyDataPtr
boost::shared_ptr< MatrixDouble > mDPtr
boost::shared_ptr< MatrixDouble > mDPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
OpCalculateContrainsLhs_dEP(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > mat_D_ptr)
boost::shared_ptr< CommonData > commonDataPtr
OpCalculateContrainsLhs_dTAU(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
boost::shared_ptr< CommonData > commonDataPtr
OpCalculateContrainsLhs_dU(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr)
boost::shared_ptr< MatrixDouble > mDPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
boost::shared_ptr< CommonData > commonDataPtr
OpCalculateContrainsRhs(const std::string field_name, boost::shared_ptr< CommonData > common_data_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &data)
boost::shared_ptr< CommonData > commonDataPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
OpCalculatePlasticFlowLhs_LogStrain_dU(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< HenckyOps::CommonData > comman_henky_data_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr)
boost::shared_ptr< MatrixDouble > mDPtr
boost::shared_ptr< HenckyOps::CommonData > commonHenckyDataPtr
boost::shared_ptr< CommonData > commonDataPtr
OpCalculatePlasticFlowLhs_dEP(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr)
boost::shared_ptr< MatrixDouble > mDPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
boost::shared_ptr< CommonData > commonDataPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
boost::shared_ptr< CommonData > commonDataPtr
OpCalculatePlasticFlowLhs_dTAU(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
OpCalculatePlasticFlowLhs_dU(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr)
boost::shared_ptr< MatrixDouble > mDPtr
boost::shared_ptr< CommonData > commonDataPtr
boost::shared_ptr< CommonData > commonDataPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &data)
OpCalculatePlasticFlowRhs(const std::string field_name, boost::shared_ptr< CommonData > common_data_ptr)
[Calculate stress]
boost::shared_ptr< HenckyOps::CommonData > commonHenckyDataPtr
OpCalculatePlasticInternalForceLhs_LogStrain_dEP(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_henky_data_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr)
boost::shared_ptr< CommonData > commonDataPtr
boost::shared_ptr< MatrixDouble > mDPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
OpCalculatePlasticInternalForceLhs_dEP(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
boost::shared_ptr< CommonData > commonDataPtr
boost::shared_ptr< MatrixDouble > mDPtr
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
Operator for linear form, usually to calculate values on right hand side.
OpCalculatePlasticSurface(const std::string field_name, boost::shared_ptr< CommonData > common_data_ptr)
boost::shared_ptr< CommonData > commonDataPtr
boost::shared_ptr< CommonData > commonDataPtr
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
[Calculate stress]
OpPlasticStress(const std::string field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > mDPtr, const double scale=1)
boost::shared_ptr< MatrixDouble > mDPtr
boost::shared_ptr< CommonData > commonDataPtr
std::vector< EntityHandle > & mapGaussPts
OpPostProcPlastic(const std::string field_name, moab::Interface &post_proc_mesh, std::vector< EntityHandle > &map_gauss_pts, boost::shared_ptr< CommonData > common_data_ptr)
moab::Interface & postProcMesh
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
[Postprocessing]