8#ifndef __HENCKY_OPS_HPP__
9#define __HENCKY_OPS_HPP__
13const double eps = std::sqrt(std::numeric_limits<double>::epsilon());
15auto f = [](
double v) {
return 0.5 * std::log(
v); };
16auto d_f = [](
double v) {
return 0.5 /
v; };
17auto dd_f = [](
double v) {
return -0.5 / (
v *
v); };
19struct CommonData :
public boost::enable_shared_from_this<CommonData> {
34 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
39 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
44 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matLogC);
48 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matTangent);
52template <
int DIM, IntegrationType I,
typename DomainEleOp>
55template <
int DIM, IntegrationType I,
typename DomainEleOp>
58template <
int DIM, IntegrationType I,
typename DomainEleOp>
61template <
int DIM, IntegrationType I,
typename DomainEleOp,
int S>
64template <
int DIM, IntegrationType I,
typename DomainEleOp,
int S>
67template <
int DIM, IntegrationType I,
typename DomainEleOp,
int S>
70template <
int DIM, IntegrationType I,
typename DomainEleOp,
int S>
73template <
int DIM, IntegrationType I,
typename DomainEleOp,
int S>
76template <
int DIM, IntegrationType I,
typename DomainEleOp,
int S>
79template <
int DIM, IntegrationType I,
typename DomainEleOp,
int S>
82template <
int DIM,
typename DomainEleOp>
86 boost::shared_ptr<CommonData> common_data)
88 commonDataPtr(common_data) {
89 std::fill(&DomainEleOp::doEntities[MBEDGE],
90 &DomainEleOp::doEntities[MBMAXTYPE],
false);
102 const size_t nb_gauss_pts = DomainEleOp::getGaussPts().size2();
104 auto t_grad = getFTensor2FromMat<DIM, DIM>(*(commonDataPtr->matGradPtr));
106 commonDataPtr->matEigVal.resize(nb_gauss_pts, DIM,
false);
107 commonDataPtr->matEigVec.resize(nb_gauss_pts, DIM * DIM,
false);
108 auto t_eig_val = getFTensor1FromMat<DIM>(commonDataPtr->matEigVal);
109 auto t_eig_vec = getFTensor2FromMat<DIM, DIM>(commonDataPtr->matEigVec);
111 for (
size_t gg = 0; gg != nb_gauss_pts; ++gg) {
121 for (
int ii = 0; ii != DIM; ii++)
122 for (
int jj = 0; jj != DIM; jj++)
123 eigen_vec(ii, jj) = C(ii, jj);
125 CHKERR computeEigenValuesSymmetric(eigen_vec, eig);
126 for (
auto ii = 0; ii != DIM; ++ii)
127 eig(ii) = std::max(
eps, eig(ii));
132 if constexpr (DIM == 3) {
134 CHKERR sortEigenVals<DIM>(
135 getVectorAdaptor(&eig(0), DIM),
136 getMatrixAdaptor(&eigen_vec(0, 0), DIM, DIM),
141 t_eig_val(
i) = eig(
i);
142 t_eig_vec(
i,
j) = eigen_vec(
i,
j);
145 auto nb_uniq_test = getUniqNb<DIM>(getVectorAdaptor(&t_eig_val(0), DIM),
147 if (nb_uniq_test != nb_uniq) {
149 "Inconsistent number of unique eigen values %ld != %ld",
150 nb_uniq, nb_uniq_test);
166template <
int DIM,
typename DomainEleOp>
170 boost::shared_ptr<CommonData> common_data)
172 commonDataPtr(common_data) {
173 std::fill(&DomainEleOp::doEntities[MBEDGE],
174 &DomainEleOp::doEntities[MBMAXTYPE],
false);
184 const size_t nb_gauss_pts = DomainEleOp::getGaussPts().size2();
185 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
186 commonDataPtr->matLogC.resize(nb_gauss_pts,
size_symm,
false);
188 auto t_eig_val = getFTensor1FromMat<DIM>(commonDataPtr->matEigVal);
189 auto t_eig_vec = getFTensor2FromMat<DIM, DIM>(commonDataPtr->matEigVec);
191 auto t_logC = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->matLogC);
193 for (
size_t gg = 0; gg != nb_gauss_pts; ++gg) {
207template <
int DIM,
typename DomainEleOp>
211 boost::shared_ptr<CommonData> common_data)
213 commonDataPtr(common_data) {
214 std::fill(&DomainEleOp::doEntities[MBEDGE],
215 &DomainEleOp::doEntities[MBMAXTYPE],
false);
226 const size_t nb_gauss_pts = DomainEleOp::getGaussPts().size2();
227 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
229 auto t_logC_dC = getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->matLogCdC);
230 auto t_eig_val = getFTensor1FromMat<DIM>(commonDataPtr->matEigVal);
231 auto t_eig_vec = getFTensor2FromMat<DIM, DIM>(commonDataPtr->matEigVec);
233 for (
size_t gg = 0; gg != nb_gauss_pts; ++gg) {
235 auto nb_uniq = getUniqNb<DIM>(getVectorAdaptor(&t_eig_val(0), DIM),
237 t_logC_dC(
i,
j,
k,
l) =
239 nb_uniq)(
i,
j,
k,
l);
253template <
int DIM,
typename DomainEleOp,
int S>
258 boost::shared_ptr<CommonData> common_data)
260 commonDataPtr(common_data) {
261 std::fill(&DomainEleOp::doEntities[MBEDGE],
262 &DomainEleOp::doEntities[MBMAXTYPE],
false);
274 const size_t nb_gauss_pts = DomainEleOp::getGaussPts().size2();
275 auto t_D = getFTensor4DdgFromMat<DIM, DIM, S>(*commonDataPtr->matDPtr);
276 auto t_logC = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->matLogC);
277 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
278 commonDataPtr->matHenckyStress.resize(nb_gauss_pts,
size_symm,
false);
279 auto t_T = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->matHenckyStress);
281 for (
size_t gg = 0; gg != nb_gauss_pts; ++gg) {
282 t_T(
i,
j) = t_D(
i,
j,
k,
l) * t_logC(
k,
l);
295template <
int DIM,
typename DomainEleOp,
int S>
300 const std::string
field_name, boost::shared_ptr<VectorDouble> temperature,
301 boost::shared_ptr<CommonData> common_data,
302 boost::shared_ptr<VectorDouble> coeff_expansion_ptr,
303 boost::shared_ptr<double> ref_temp_ptr)
305 commonDataPtr(common_data), coeffExpansionPtr(coeff_expansion_ptr),
306 refTempPtr(ref_temp_ptr) {
307 std::fill(&DomainEleOp::doEntities[MBEDGE],
308 &DomainEleOp::doEntities[MBMAXTYPE],
false);
322 const size_t nb_gauss_pts = DomainEleOp::getGaussPts().size2();
323 auto t_D = getFTensor4DdgFromMat<DIM, DIM, S>(*commonDataPtr->matDPtr);
324 auto t_logC = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->matLogC);
325 auto t_logC_dC = getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->matLogCdC);
326 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
327 commonDataPtr->matHenckyStress.resize(nb_gauss_pts,
size_symm,
false);
328 commonDataPtr->matFirstPiolaStress.resize(nb_gauss_pts, DIM * DIM,
false);
329 commonDataPtr->matSecondPiolaStress.resize(nb_gauss_pts,
size_symm,
false);
330 auto t_T = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->matHenckyStress);
331 auto t_P = getFTensor2FromMat<DIM, DIM>(commonDataPtr->matFirstPiolaStress);
333 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->matSecondPiolaStress);
334 auto t_grad = getFTensor2FromMat<DIM, DIM>(*(commonDataPtr->matGradPtr));
335 auto t_temp = getFTensor0FromVec(*tempPtr);
338 t_coeff_exp(
i,
j) = 0;
340 t_coeff_exp(d, d) = (*coeffExpansionPtr)[d];
343 for (
size_t gg = 0; gg != nb_gauss_pts; ++gg) {
344#ifdef HENCKY_SMALL_STRAIN
345 t_P(
i,
j) = t_D(
i,
j,
k,
l) *
346 (t_grad(
k,
l) - t_coeff_exp(
k,
l) * (t_temp - (*refTempPtr)));
348 t_T(
i,
j) = t_D(
i,
j,
k,
l) *
349 (t_logC(
k,
l) - t_coeff_exp(
k,
l) * (t_temp - (*refTempPtr)));
352 t_S(
k,
l) = t_T(
i,
j) * t_logC_dC(
i,
j,
k,
l);
353 t_P(
i,
l) = t_F(
i,
k) * t_S(
k,
l);
375template <
int DIM,
typename DomainEleOp,
int S>
380 boost::shared_ptr<CommonData> common_data,
381 boost::shared_ptr<MatrixDouble> mat_D_ptr,
382 const double scale = 1)
384 scaleStress(
scale), matDPtr(mat_D_ptr) {
385 std::fill(&DomainEleOp::doEntities[MBEDGE],
386 &DomainEleOp::doEntities[MBMAXTYPE],
false);
388 matLogCPlastic = commonDataPtr->matLogCPlastic;
400 const size_t nb_gauss_pts = DomainEleOp::getGaussPts().size2();
401 auto t_D = getFTensor4DdgFromMat<DIM, DIM, S>(*matDPtr);
402 auto t_logC = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->matLogC);
403 auto t_logCPlastic = getFTensor2SymmetricFromMat<DIM>(*matLogCPlastic);
404 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
405 commonDataPtr->matHenckyStress.resize(nb_gauss_pts,
size_symm,
false);
406 auto t_T = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->matHenckyStress);
408 for (
size_t gg = 0; gg != nb_gauss_pts; ++gg) {
409 t_T(
i,
j) = t_D(
i,
j,
k,
l) * (t_logC(
k,
l) - t_logCPlastic(
k,
l));
410 t_T(
i,
j) /= scaleStress;
427template <
int DIM,
typename DomainEleOp,
int S>
432 boost::shared_ptr<CommonData> common_data)
434 commonDataPtr(common_data) {
435 std::fill(&DomainEleOp::doEntities[MBEDGE],
436 &DomainEleOp::doEntities[MBMAXTYPE],
false);
450 const size_t nb_gauss_pts = DomainEleOp::getGaussPts().size2();
451#ifdef HENCKY_SMALL_STRAIN
452 auto t_D = getFTensor4DdgFromMat<DIM, DIM, S>(*commonDataPtr->matDPtr);
454 auto t_logC = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->matLogC);
455 auto t_logC_dC = getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->matLogCdC);
456 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
457 commonDataPtr->matFirstPiolaStress.resize(nb_gauss_pts, DIM * DIM,
false);
458 commonDataPtr->matSecondPiolaStress.resize(nb_gauss_pts,
size_symm,
false);
459 auto t_P = getFTensor2FromMat<DIM, DIM>(commonDataPtr->matFirstPiolaStress);
460 auto t_T = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->matHenckyStress);
462 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->matSecondPiolaStress);
463 auto t_grad = getFTensor2FromMat<DIM, DIM>(*(commonDataPtr->matGradPtr));
465 for (
size_t gg = 0; gg != nb_gauss_pts; ++gg) {
467#ifdef HENCKY_SMALL_STRAIN
468 t_P(
i,
j) = t_D(
i,
j,
k,
l) * t_grad(
k,
l);
472 t_S(
k,
l) = t_T(
i,
j) * t_logC_dC(
i,
j,
k,
l);
473 t_P(
i,
l) = t_F(
i,
k) * t_S(
k,
l);
482#ifdef HENCKY_SMALL_STRAIN
494template <
int DIM,
typename DomainEleOp,
int S>
497 boost::shared_ptr<CommonData> common_data,
498 boost::shared_ptr<MatrixDouble> mat_D_ptr =
nullptr)
500 commonDataPtr(common_data) {
501 std::fill(&DomainEleOp::doEntities[MBEDGE],
502 &DomainEleOp::doEntities[MBMAXTYPE],
false);
506 matDPtr = commonDataPtr->matDPtr;
523 const size_t nb_gauss_pts = DomainEleOp::getGaussPts().size2();
524 commonDataPtr->matTangent.resize(nb_gauss_pts, DIM * DIM * DIM * DIM);
526 getFTensor4FromMat<DIM, DIM, DIM, DIM>(commonDataPtr->matTangent);
528 auto t_D = getFTensor4DdgFromMat<DIM, DIM, S>(*matDPtr);
529 auto t_eig_val = getFTensor1FromMat<DIM>(commonDataPtr->matEigVal);
530 auto t_eig_vec = getFTensor2FromMat<DIM, DIM>(commonDataPtr->matEigVec);
531 auto t_T = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->matHenckyStress);
533 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->matSecondPiolaStress);
534 auto t_grad = getFTensor2FromMat<DIM, DIM>(*(commonDataPtr->matGradPtr));
535 auto t_logC_dC = getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->matLogCdC);
537 for (
size_t gg = 0; gg != nb_gauss_pts; ++gg) {
539#ifdef HENCKY_SMALL_STRAIN
540 dP_dF(
i,
j,
k,
l) = t_D(
i,
j,
k,
l);
547 auto nb_uniq = getUniqNb<DIM>(getVectorAdaptor(&t_eig_val(0), DIM),
556 P_D_P_plus_TL(
i,
j,
k,
l) =
558 (t_logC_dC(
i,
j, o, p) * t_D(o, p,
m,
n)) * t_logC_dC(
m,
n,
k,
l);
559 P_D_P_plus_TL(
i,
j,
k,
l) *= 0.5;
562 t_F(
i,
k) * (P_D_P_plus_TL(
k,
j, o, p) * dC_dF(o, p,
m,
n));
585template <
int DIM,
typename AssemblyDomainEleOp,
int S>
589 const std::string row_field_name,
const std::string col_field_name,
590 boost::shared_ptr<CommonData> elastic_common_data_ptr,
591 boost::shared_ptr<VectorDouble> coeff_expansion_ptr);
593 MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data,
594 EntitiesFieldData::EntData &col_data);
601template <
int DIM,
typename AssemblyDomainEleOp,
int S>
604 const std::string row_field_name,
const std::string col_field_name,
605 boost::shared_ptr<CommonData> elastic_common_data_ptr,
606 boost::shared_ptr<VectorDouble> coeff_expansion_ptr)
609 elasticCommonDataPtr(elastic_common_data_ptr),
610 coeffExpansionPtr(coeff_expansion_ptr) {
614template <
int DIM,
typename AssemblyDomainEleOp,
int S>
617 iNtegrate(EntitiesFieldData::EntData &row_data,
618 EntitiesFieldData::EntData &col_data) {
621 auto &locMat = AssemblyDomainEleOp::locMat;
623 const auto nb_integration_pts = row_data.getN().size1();
624 const auto nb_row_base_functions = row_data.getN().size2();
625 auto t_w = this->getFTensor0IntegrationWeight();
628 auto t_row_diff_base = row_data.getFTensor1DiffN<DIM>();
629 auto t_D = getFTensor4DdgFromMat<DIM, DIM, 0>(*elasticCommonDataPtr->matDPtr);
631 getFTensor2FromMat<DIM, DIM>(*(elasticCommonDataPtr->matGradPtr));
633 getFTensor4DdgFromMat<DIM, DIM>(elasticCommonDataPtr->matLogCdC);
646 t_coeff_exp(
i,
j) = 0;
648 t_coeff_exp(d, d) = (*coeffExpansionPtr)[d];
651 t_eigen_strain(
i,
j) = (t_D(
i,
j,
k,
l) * t_coeff_exp(
k,
l));
653 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
657 double alpha = this->getMeasure() * t_w;
659 for (; rr != AssemblyDomainEleOp::nbRows / DIM; ++rr) {
661 getFTensor1FromMat<DIM, 1,
662 DataLayoutTraits<DataLayout::CoeffsByGauss>>(
664 auto t_col_base = col_data.getFTensor0N(gg, 0);
665 for (
auto cc = 0; cc != AssemblyDomainEleOp::nbCols; cc++) {
666#ifdef HENCKY_SMALL_STRAIN
668 (t_row_diff_base(
j) * t_eigen_strain(
i,
j)) * (t_col_base * alpha);
670 t_mat(
i) -= (t_row_diff_base(
j) *
671 (t_F(
i, o) * ((t_D(
m,
n,
k,
l) * t_coeff_exp(
k,
l)) *
672 t_logC_dC(
m,
n, o,
j)))) *
673 (t_col_base * alpha);
682 for (; rr != nb_row_base_functions; ++rr)
695 template <
int DIM, IntegrationType I>
698 template <
int DIM, IntegrationType I>
701 template <
int DIM, IntegrationType I>
704 template <
int DIM, IntegrationType I,
int S>
708 template <
int DIM, IntegrationType I,
int S>
712 template <
int DIM, IntegrationType I,
int S>
716 template <
int DIM, IntegrationType I,
int S>
720 template <
int DIM, IntegrationType I,
int S>
723 template <
int DIM, IntegrationType I,
typename AssemblyDomainEleOp,
int S>
731 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pip,
732 std::string block_name,
733 boost::shared_ptr<MatrixDouble> mat_D_Ptr, Sev sev,
737 PetscBool plane_strain_flag = PETSC_FALSE;
738 CHKERR PetscOptionsGetBool(PETSC_NULLPTR,
"",
"-plane_strain",
739 &plane_strain_flag, PETSC_NULLPTR);
744 std::vector<const CubitMeshSets *> meshset_vec_ptr,
745 double scale, PetscBool plane_strain_flag)
749 planeStrainFlag(plane_strain_flag) {
751 "Can not get data from block");
754 MoFEMErrorCode doWork(
int side, EntityType
type,
755 EntitiesFieldData::EntData &data) {
758 for (
auto &b : blockData) {
760 if (b.blockEnts.find(getFEEntityHandle()) != b.blockEnts.end()) {
761 CHKERR getMatDPtr(matDPtr, b.bulkModulusK * scaleYoungModulus,
762 b.shearModulusG * scaleYoungModulus,
768 CHKERR getMatDPtr(matDPtr, bulkModulusKDefault * scaleYoungModulus,
769 shearModulusGDefault * scaleYoungModulus,
775 boost::shared_ptr<MatrixDouble> matDPtr;
776 const double scaleYoungModulus;
777 const PetscBool planeStrainFlag;
781 double shearModulusG;
785 double bulkModulusKDefault;
786 double shearModulusGDefault;
787 std::vector<BlockData> blockData;
791 std::vector<const CubitMeshSets *> meshset_vec_ptr,
795 for (
auto m : meshset_vec_ptr) {
797 std::vector<double> block_data;
798 CHKERR m->getAttributes(block_data);
799 if (block_data.size() != 2) {
801 "Expected that block has two attribute");
803 auto get_block_ents = [&]() {
806 m_field.
get_moab().get_entities_by_handle(
m->meshset, ents,
true);
825 MoFEMErrorCode getMatDPtr(boost::shared_ptr<MatrixDouble> mat_D_ptr,
830 auto set_material_stiffness = [&]() {
840 auto t_D = getFTensor4DdgFromMat<DIM, DIM, 0>(*mat_D_ptr);
847 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
849 set_material_stiffness();
857 PetscOptionsBegin(PETSC_COMM_WORLD,
"",
"",
"none");
858 CHKERR PetscOptionsScalar(
"-young_modulus",
"Young modulus",
"",
E, &
E,
860 CHKERR PetscOptionsScalar(
"-poisson_ratio",
"poisson ratio",
"", nu, &nu,
866 pip.push_back(
new OpMatBlocks(
870 m_field.
getInterface<MeshsetsManager>()->getCubitMeshsetPtr(std::regex(
872 (boost::format(
"%s(.*)") % block_name).str()
875 scale, plane_strain_flag
882template <
int DIM, IntegrationType I,
typename DomainEleOp>
885 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pip,
886 std::string
field_name, std::string block_name, Sev sev,
double scale = 1) {
888 auto common_ptr = boost::make_shared<HenckyOps::CommonData>();
889 common_ptr->matDPtr = boost::make_shared<MatrixDouble>();
890 common_ptr->matGradPtr = boost::make_shared<MatrixDouble>();
893 common_ptr->matDPtr, sev,
scale),
898 pip.push_back(
new OpCalculateVectorFieldGradient<DIM, DIM>(
900 pip.push_back(
new typename H::template OpCalculateEigenVals<DIM, I>(
903 new typename H::template OpCalculateLogC<DIM, I>(
field_name, common_ptr));
904 pip.push_back(
new typename H::template OpCalculateLogC_dC<DIM, I>(
907 pip.push_back(
new typename H::template OpCalculateHenckyStress<DIM, I, 0>(
909 pip.push_back(
new typename H::template OpCalculatePiolaStress<DIM, I, 0>(
915template <
int DIM, AssemblyType A, IntegrationType I,
typename DomainEleOp>
918 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pip,
919 std::string
field_name, boost::shared_ptr<HenckyOps::CommonData> common_ptr,
923 using B =
typename FormsIntegrators<DomainEleOp>::template Assembly<
933template <
int DIM, AssemblyType A, IntegrationType I,
typename DomainEleOp>
936 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pip,
937 std::string
field_name, std::string block_name, Sev sev,
double scale = 1) {
940 auto common_ptr = commonDataFactory<DIM, I, DomainEleOp>(
948template <
int DIM, AssemblyType A, IntegrationType I,
typename DomainEleOp>
951 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pip,
952 std::string
field_name, boost::shared_ptr<HenckyOps::CommonData> common_ptr,
956 using B =
typename FormsIntegrators<DomainEleOp>::template Assembly<
958 using OpKPiola =
typename B::template OpGradTensorGrad<1, DIM, DIM, -1>;
962 pip.push_back(
new typename H::template OpHenckyTangent<DIM, I, 0>(
970template <
int DIM, AssemblyType A, IntegrationType I,
typename DomainEleOp>
973 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pip,
974 std::string
field_name, std::string block_name, Sev sev,
double scale = 1) {
977 auto common_ptr = commonDataFactory<DIM, I, DomainEleOp>(
#define MOFEM_TAG_AND_LOG(channel, severity, tag)
Tag and log in channel.
DomainEle::UserDataOperator DomainEleOp
Finire element operator type.
Kronecker Delta class symmetric.
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
#define MOFEM_LOG_CHANNEL(channel)
Set and reset channel.
FTensor::Index< 'i', SPACE_DIM > i
const double v
phase velocity of light in medium (cm/ns)
const double n
refractive index of diffusive medium
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
auto getMat(A &&t_val, B &&t_vec, Fun< double > f)
Get the Mat object.
auto getDiffMat(A &&t_val, B &&t_vec, Fun< double > f, Fun< double > d_f, const int nb)
Get the Diff Mat object.
auto getDiffDiffMat(A &&t_val, B &&t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, C &&t_S, const int nb)
Get the Diff Diff Mat object.
MoFEMErrorCode opFactoryDomainLhs(MoFEM::Interface &m_field, boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pip, std::string field_name, boost::shared_ptr< HenckyOps::CommonData > common_ptr, Sev sev)
MoFEMErrorCode opFactoryDomainRhs(MoFEM::Interface &m_field, boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pip, std::string field_name, boost::shared_ptr< HenckyOps::CommonData > common_ptr, Sev sev)
MoFEMErrorCode addMatBlockOps(MoFEM::Interface &m_field, boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pip, std::string block_name, boost::shared_ptr< MatrixDouble > mat_D_Ptr, Sev sev, double scale=1)
auto commonDataFactory(MoFEM::Interface &m_field, boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pip, std::string field_name, std::string block_name, Sev sev, double scale=1)
FormsIntegrators< DomainEleOp >::Assembly< A >::LinearForm< I >::OpGradTimesTensor< 1, FIELD_DIM, SPACE_DIM > OpGradTimesTensor
constexpr auto field_name
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::LinearForm< GAUSS >::OpGradTimesTensor< 1, SPACE_DIM, SPACE_DIM > OpInternalForcePiola
PetscBool is_plane_strain
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::BiLinearForm< GAUSS >::OpGradTensorGrad< 1, SPACE_DIM, SPACE_DIM, -1 > OpKPiola
[Only used for dynamics]
FTensor::Index< 'm', 3 > m
auto getMatHenckyStress()
boost::shared_ptr< MatrixDouble > matLogCPlastic
MatrixDouble matHenckyStress
auto getMatFirstPiolaStress()
MatrixDouble matFirstPiolaStress
boost::shared_ptr< MatrixDouble > matDPtr
MatrixDouble matSecondPiolaStress
boost::shared_ptr< MatrixDouble > matGradPtr
OpCalculateEigenValsImpl(const std::string field_name, boost::shared_ptr< CommonData > common_data)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
boost::shared_ptr< CommonData > commonDataPtr
boost::shared_ptr< MatrixDouble > matDPtr
boost::shared_ptr< MatrixDouble > matLogCPlastic
boost::shared_ptr< CommonData > commonDataPtr
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
OpCalculateHenckyPlasticStressImpl(const std::string field_name, boost::shared_ptr< CommonData > common_data, boost::shared_ptr< MatrixDouble > mat_D_ptr, const double scale=1)
boost::shared_ptr< CommonData > commonDataPtr
OpCalculateHenckyStressImpl(const std::string field_name, boost::shared_ptr< CommonData > common_data)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
boost::shared_ptr< CommonData > commonDataPtr
OpCalculateHenckyThermalStressImpl(const std::string field_name, boost::shared_ptr< VectorDouble > temperature, boost::shared_ptr< CommonData > common_data, boost::shared_ptr< VectorDouble > coeff_expansion_ptr, boost::shared_ptr< double > ref_temp_ptr)
boost::shared_ptr< VectorDouble > coeffExpansionPtr
boost::shared_ptr< double > refTempPtr
boost::shared_ptr< VectorDouble > tempPtr
boost::shared_ptr< VectorDouble > coeffExpansionPtr
boost::shared_ptr< CommonData > elasticCommonDataPtr
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
boost::shared_ptr< CommonData > commonDataPtr
OpCalculateLogCImpl(const std::string field_name, boost::shared_ptr< CommonData > common_data)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
OpCalculateLogC_dCImpl(const std::string field_name, boost::shared_ptr< CommonData > common_data)
boost::shared_ptr< CommonData > commonDataPtr
boost::shared_ptr< CommonData > commonDataPtr
OpCalculatePiolaStressImpl(const std::string field_name, boost::shared_ptr< CommonData > common_data)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
OpHenckyTangentImpl(const std::string field_name, boost::shared_ptr< CommonData > common_data, boost::shared_ptr< MatrixDouble > mat_D_ptr=nullptr)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
boost::shared_ptr< MatrixDouble > matDPtr
boost::shared_ptr< CommonData > commonDataPtr
virtual moab::Interface & get_moab()=0
Deprecated interface functions.
Data on single entity (This is passed as argument to DataOperator::doWork)
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.
double young_modulus
Young modulus.
double poisson_ratio
Poisson ratio.