22#ifndef __SOLIDSHELLPRISMELEMENT_HPP__
23#define __SOLIDSHELLPRISMELEMENT_HPP__
45 vector<ublas::matrix<double, ublas::column_major>>
79 vector<ublas::symmetric_matrix<double, ublas::lower>>
109 template <
typename TYPE>
struct ADouble {
112 ublas::matrix<TYPE, ublas::row_major, ublas::bounded_array<TYPE, 9>>
114 ublas::matrix<TYPE, ublas::row_major, ublas::bounded_array<TYPE, 9>>
117 ublas::matrix<TYPE, ublas::row_major, ublas::bounded_array<TYPE, 9>> mMF,
119 ublas::matrix<TYPE, ublas::row_major, ublas::bounded_array<TYPE, 9>> gMab,
121 ublas::matrix<TYPE, ublas::row_major, ublas::bounded_array<TYPE, 9>>
124 ublas::matrix<TYPE, ublas::row_major, ublas::bounded_array<TYPE, 9>>
126 ublas::matrix<TYPE, ublas::row_major, ublas::bounded_array<TYPE, 9>>
128 ublas::matrix<TYPE, ublas::row_major, ublas::bounded_array<TYPE, 9>> mCAB;
129 ublas::matrix<TYPE, ublas::row_major, ublas::bounded_array<TYPE, 9>> mEAB;
131 ublas::matrix<TYPE, ublas::row_major, ublas::bounded_array<TYPE, 9>>
133 ublas::matrix<TYPE, ublas::row_major, ublas::bounded_array<TYPE, 9>>
134 globalPiolaStressIi_I;
135 ublas::matrix<TYPE, ublas::row_major, ublas::bounded_array<TYPE, 9>>
136 localPiolaStressIA_a;
137 ublas::matrix<TYPE, ublas::row_major, ublas::bounded_array<TYPE, 9>>
138 localPiolaStressIa_A;
140 TYPE t0, t1, t2, t3, t4;
143 ADouble<adouble> aDouble;
144 ADouble<double> dDouble;
148#ifdef __ARC_LENGTH_TOOLS_HPP__
149 vector<VectorDouble3> incrementsOfDisplacements;
167 if (rval == MB_SUCCESS) {
171 "DISPLACEMENT", dof)) {
182 return 2 * (
order + 1) + 1;
185 int rule = 2 *
order + 1;
186 return (rule <= 1) ? 2 : rule;
209 PetscErrorCode
makeBDisp(
const MatrixAdaptor &diffN,
const MatrixDouble &T,
218 PetscErrorCode
makeBZeta(
const MatrixAdaptor &diffN, MatrixDouble &
B);
226 PetscErrorCode
makeBKsiEta(
const MatrixAdaptor &diffN, MatrixDouble &
B);
233 PetscErrorCode
makeFDisp(
const MatrixAdaptor &diffN, MatrixDouble &
F);
235 PetscErrorCode
makeFZeta(
const MatrixAdaptor &diffN, MatrixDouble &
F);
237 PetscErrorCode
makeFKsiEta(
const MatrixAdaptor &diffN, MatrixDouble &
F);
239 template <
typename TYPE>
241 ublas::matrix<TYPE, ublas::row_major, ublas::bounded_array<TYPE, 9>> &
a,
252 det =
a(0, 0) *
a(1, 1) *
a(2, 2) +
a(1, 0) *
a(2, 1) *
a(0, 2) +
253 a(2, 0) *
a(0, 1) *
a(1, 2) -
a(0, 0) *
a(2, 1) *
a(1, 2) -
254 a(2, 0) *
a(1, 1) *
a(0, 2) -
a(1, 0) *
a(0, 1) *
a(2, 2);
255 PetscFunctionReturn(0);
260 template <
typename TYPE>
263 ublas::matrix<TYPE, ublas::row_major, ublas::bounded_array<TYPE, 9>> &
a,
264 ublas::matrix<TYPE, ublas::row_major, ublas::bounded_array<TYPE, 9>>
268 inv_a.resize(3, 3,
false);
271 inv_a(0, 0) =
a(1, 1) *
a(2, 2) -
a(1, 2) *
a(2, 1);
272 inv_a(0, 1) =
a(0, 2) *
a(2, 1) -
a(0, 1) *
a(2, 2);
273 inv_a(0, 2) =
a(0, 1) *
a(1, 2) -
a(0, 2) *
a(1, 1);
274 inv_a(1, 0) =
a(1, 2) *
a(2, 0) -
a(1, 0) *
a(2, 2);
275 inv_a(1, 1) =
a(0, 0) *
a(2, 2) -
a(0, 2) *
a(2, 0);
276 inv_a(1, 2) =
a(0, 2) *
a(1, 0) -
a(0, 0) *
a(1, 2);
277 inv_a(2, 0) =
a(1, 0) *
a(2, 1) -
a(1, 1) *
a(2, 0);
278 inv_a(2, 1) =
a(0, 1) *
a(2, 0) -
a(0, 0) *
a(2, 1);
279 inv_a(2, 2) =
a(0, 0) *
a(1, 1) -
a(0, 1) *
a(1, 0);
281 PetscFunctionReturn(0);
296 DataForcesAndSourcesCore::EntData &data);
307 DataForcesAndSourcesCore::EntData &data);
320 DataForcesAndSourcesCore::EntData &data);
339 DataForcesAndSourcesCore::EntData &data);
353 DataForcesAndSourcesCore::EntData &data);
371 DataForcesAndSourcesCore::EntData &data);
388 DataForcesAndSourcesCore::EntData &data);
405 DataForcesAndSourcesCore::EntData &data);
421 DataForcesAndSourcesCore::EntData &data);
439 DataForcesAndSourcesCore::EntData &data);
457 DataForcesAndSourcesCore::EntData &data);
471 const string &col_field_name,
const bool symm =
false)
479 DataForcesAndSourcesCore::EntData &row_data,
480 DataForcesAndSourcesCore::EntData &col_data);
493 map<EntityHandle, EntityHandle> &elements_map,
494 vector<EntityHandle> &map_gauss_pts,
501 DataForcesAndSourcesCore::EntData &data);
513 vector<EntityHandle> &map_gauss_pts,
521 DataForcesAndSourcesCore::EntData &data);
533 vector<EntityHandle> &map_gauss_pts,
541 DataForcesAndSourcesCore::EntData &data);
544#ifndef __POSTPROC_ON_REF_MESH_HPP
545#error "Include file PostProcOnRefMesh.hpp before this header"
573 vector<EntityHandle> &map_gauss_pts,
584 DataForcesAndSourcesCore::EntData &data);
596 vector<EntityHandle> &map_gauss_pts,
CommonData &common_data)
604 DataForcesAndSourcesCore::EntData &data);
617 DataForcesAndSourcesCore::EntData &data);
631 DataForcesAndSourcesCore::EntData &data);
638 struct EvaluateForward :
public MakeB {
644 : commonData(common_data), lAmbda(
lambda), mU(
mu),
645 convectiveLike(true) {}
647 template <
typename TYPE>
648 PetscErrorCode initializeData(CommonData::ADouble<TYPE> &data) {
650 if (data.mGrad1.size1() != 3) {
652 data.mGrad1.resize(3, 3,
false);
653 data.mGrad2.resize(3, 3,
false);
654 data.mMF.resize(3, 3,
false);
655 data.mF.resize(3, 3,
false);
656 data.eM_i_a.resize(3, 3,
false);
657 data.eMai.resize(3, 3,
false);
658 data.gMab.resize(3, 3,
false);
659 data.gM_a_b.resize(3, 3,
false);
660 data.mCA_B.resize(3, 3,
false);
661 data.mEA_B.resize(3, 3,
false);
662 data.mCAB.resize(3, 3,
false);
663 data.mEAB.resize(3, 3,
false);
664 data.piolaStressIIA_B.resize(3, 3,
false);
665 data.localPiolaStressIA_a.resize(3, 3,
false);
666 data.localPiolaStressIa_A.resize(3, 3,
false);
667 data.globalPiolaStressIi_I.resize(3, 3,
false);
669 PetscFunctionReturn(0);
679 template <
typename TYPE>
680 PetscErrorCode physicalEquation(CommonData::ADouble<TYPE> &data,
int ggf,
681 int ggt,
int gg,
bool global_row,
687 noalias(data.mEA_B) = data.mCA_B;
688 for (
int AA = 0; AA != 3; AA++) {
690 data.mEA_B(AA, BB) -= 1;
695 data.piolaStressIIA_B = 2 * mU * data.mEA_B;
697 for (
int AA = 0; AA != 3; AA++) {
699 data.tR += data.mEA_B(AA, BB);
701 for (
int AA = 0; AA != 3; AA++) {
703 data.piolaStressIIA_B(AA, BB) += data.tR * lAmbda;
711 data.localPiolaStressIa_A.clear();
712 for (
int cc = 0; cc != 3; cc++) {
713 for (
int CC = 0; CC != 3; CC++) {
714 TYPE &localPiolaStressIa_A = data.localPiolaStressIa_A(CC, cc);
715 for (
int BB = 0; BB != 3; BB++) {
716 localPiolaStressIa_A +=
717 data.mF(cc, BB) * data.piolaStressIIA_B(BB, CC);
721 data.localPiolaStressIA_a.clear();
722 for (
int aa = 0; aa != 3; aa++) {
723 for (
int AA = 0; AA != 3; AA++) {
724 TYPE &localPiolaStressIA_a = data.localPiolaStressIA_a(aa, AA);
725 for (
int cc = 0; cc != 3; cc++) {
726 TYPE &gM_a_b = data.gM_a_b(aa, cc);
727 for (
int CC = 0; CC != 3; CC++) {
728 data.t0 = gM_a_b * commonData.mGAB[ggf](AA, CC);
729 data.t1 = data.t0 * data.localPiolaStressIa_A(CC, cc);
730 localPiolaStressIA_a += data.t1;
736 }
catch (
const std::exception &ex) {
738 ss <<
"throw in method: " << ex.what() << endl;
739 SETERRQ(PETSC_COMM_SELF, 1, ss.str().c_str());
741 PetscFunctionReturn(0);
744 template <
typename TYPE>
745 PetscErrorCode evaluateForward(CommonData::ADouble<TYPE> &data,
int ggf,
746 int ggt,
int gg,
bool global_row,
754 if (convectiveLike) {
756 noalias(data.mMF) = data.mGrad1;
757 for (
int II = 0; II != 3; II++) {
759 data.mMF(ii, II) += 1;
763 for (
int aa = 0; aa != 3; aa++) {
765 for (
int ii = 0; ii != 3; ii++) {
766 TYPE &eMai = data.eMai(aa, ii);
767 for (
int II = 0; II != 3; II++) {
768 eMai += data.mMF(ii, II) * commonData.mEAI[ggf](AA, II);
773 CHKERR dEterminatnt(data.eMai, data.dEt);
774 CHKERR iNvert(data.dEt, data.eMai, data.eM_i_a);
777 for (
int aa = 0; aa != 3; aa++) {
778 for (
int bb = 0; bb != 3; bb++) {
779 TYPE &gMab = data.gM_a_b(aa, bb);
780 for (
int ii = 0; ii != 3; ii++) {
781 data.t0 = data.eMai(aa, ii) * data.eMai(bb, ii);
787 for (
int aa = 0; aa != 3; aa++) {
788 for (
int bb = 0; bb != 3; bb++) {
789 TYPE &gM_a_b = data.gM_a_b(aa, bb);
790 for (
int ii = 0; ii != 3; ii++) {
791 data.t0 = data.eM_i_a(ii, aa) * data.eM_i_a(ii, bb);
799 noalias(data.eMai) = commonData.mEAI[ggf];
800 noalias(data.eM_i_a) = commonData.mE_I_A[ggf];
801 noalias(data.gMab) = commonData.mGAB[ggf];
802 noalias(data.gM_a_b) = commonData.mG_A_B[ggf];
809 for (
int aa = 0; aa != 3; aa++) {
810 for (
int AA = 0; AA != 3; AA++) {
811 TYPE &mF = data.mF(aa, AA);
812 for (
int ii = 0; ii != 3; ii++) {
814 mF += data.eMai(aa, ii) * commonData.mE_I_A[ggf](II, AA);
819 for (
int aa = 0; aa != 3; aa++) {
820 for (
int AA = 0; AA != 3; AA++) {
821 TYPE &mF = data.mF(aa, AA);
822 for (
int ii = 0; ii != 3; ii++) {
823 for (
int II = 0; II != 3; II++) {
824 data.t0 = data.eMai(aa, ii) * commonData.mE_I_A[ggf](II, AA);
825 mF += data.t0 * data.mGrad1(ii, II);
830 noalias(data.mF) += commonData.mGrad2[gg];
832 for (
int aa = 0; aa != 3; aa++) {
833 for (
int AA = 0; AA != 3; AA++) {
834 TYPE &mF = data.mF(aa, AA);
835 for (
int ii = 0; ii != 3; ii++) {
836 for (
int II = 0; II != 3; II++) {
837 data.t0 = data.eMai(aa, ii) * commonData.mE_I_A[ggf](II, AA);
838 mF += data.t0 * commonData.mGrad1[gg](ii, II);
843 noalias(data.mF) += data.mGrad2;
849 TYPE &mGAB_AA_CCmF_bb_CC = data.t0;
850 TYPE &mGAB_AA_CCmF_bb_CCgM_aa_ba = data.t1;
851 for (
int AA = 0; AA != 3; AA++) {
852 for (
int CC = 0; CC != 3; CC++) {
853 double mGAB_AA_CC = commonData.mGAB[ggf](AA, CC);
854 for (
int bb = 0; bb != 3; bb++) {
855 mGAB_AA_CCmF_bb_CC = mGAB_AA_CC * data.mF(bb, CC);
856 for (
int aa = 0; aa != 3; aa++) {
857 mGAB_AA_CCmF_bb_CCgM_aa_ba =
858 mGAB_AA_CCmF_bb_CC * data.gM_a_b(aa, bb);
859 for (
int BB = 0; BB != 3; BB++) {
860 data.t3 = mGAB_AA_CCmF_bb_CCgM_aa_ba * data.mF(aa, BB);
861 data.mCA_B(AA, BB) += data.t3;
873 physicalEquation<TYPE>(data, ggf, ggt, gg, global_row, global_col);
878 data.globalPiolaStressIi_I.clear();
879 for (
int ii = 0; ii != 3; ii++) {
880 for (
int II = 0; II != 3; II++) {
881 TYPE &globalPiolaStressIi_I = data.globalPiolaStressIi_I(ii, II);
882 for (
int aa = 0; aa != 3; aa++) {
883 for (
int AA = 0; AA != 3; AA++) {
884 data.t0 = data.eMai(aa, ii) * commonData.mE_I_A[ggf](II, AA);
885 data.t1 = data.t0 * data.localPiolaStressIA_a(aa, AA);
886 globalPiolaStressIi_I += data.t1;
893 }
catch (
const std::exception &ex) {
895 ss <<
"throw in method: " << ex.what() << endl;
896 SETERRQ(PETSC_COMM_SELF, 1, ss.str().c_str());
899 PetscFunctionReturn(0);
903 struct OpEvaluatePiolaStress
910 int tag,
int order_thickness,
bool get_tangent)
913 EvaluateForward(common_data,
lambda,
mu),
914 orderThickness(order_thickness), getTangent(get_tangent), tAg(tag) {}
915 PetscErrorCode doWork(
int side,
EntityType type,
916 DataForcesAndSourcesCore::EntData &data);
919 struct OpAssembleLhsPiolaStress
923 MatrixDouble mK, mTransK;
924 MatrixDouble mRowF, mColF;
926 bool assembleTranspose;
927 OpAssembleLhsPiolaStress(
CommonData &common_data,
928 const string &row_field_name,
929 const string &col_field_name,
930 const bool symm =
false,
931 const bool assemble_transpose =
true)
934 commonData(common_data), assembleTranspose(assemble_transpose) {
937 PetscErrorCode doWork(
int row_side,
int col_side,
EntityType row_type,
939 DataForcesAndSourcesCore::EntData &row_data,
940 DataForcesAndSourcesCore::EntData &col_data);
943 struct OpAssembleRhsPiolaStress
952 commonData(common_data) {}
953 PetscErrorCode doWork(
int side,
EntityType type,
954 DataForcesAndSourcesCore::EntData &data);
979 double z, VectorDouble normal,
980 VectorDouble tangent1,
981 VectorDouble tangent2);
984#ifdef __ARC_LENGTH_TOOLS_HPP__
986 struct OpGetIncrementOfDisplacements
989 OpGetIncrementOfDisplacements(
CommonData &common_data)
992 commonData(common_data) {}
993 PetscErrorCode doWork(
int side,
EntityType type,
994 DataForcesAndSourcesCore::EntData &data);
997 struct OpNumericalViscousDampingRhs
1002 OpNumericalViscousDampingRhs(
CommonData &common_data,
double &alpha)
1005 commonData(common_data), aLpha(alpha) {}
1006 PetscErrorCode doWork(
int side,
EntityType type,
1007 DataForcesAndSourcesCore::EntData &data);
1010 struct OpNumericalViscousDampingLhs
1014 MatrixDouble mC, mCTrans;
1015 OpNumericalViscousDampingLhs(
CommonData &common_data,
double &alpha)
1018 commonData(common_data), aLpha(
alpha) {
1021 PetscErrorCode doWork(
int row_side,
int col_side,
EntityType row_type,
1023 DataForcesAndSourcesCore::EntData &row_data,
1024 DataForcesAndSourcesCore::EntData &col_data);
1044 DataForcesAndSourcesCore::EntData &data);
ForcesAndSourcesCore::UserDataOperator UserDataOperator
#define MOAB_THROW(err)
Check error code of MoAB function and throw MoFEM exception.
#define CHKERR
Inline error check.
implementation of Data Operators for Forces and Sources
constexpr auto field_name
virtual moab::Interface & get_moab()=0
bool sYmm
If true assume that matrix is symmetric structure.
Deprecated interface functions.
boost::shared_ptr< const NumeredEntFiniteElement > numeredEntFiniteElementPtr
default operator for Flat Prism element
FatPrismElementForcesAndSourcesCore(Interface &m_field)
@ OPROW
operator doWork function is executed on FE rows
@ OPROWCOL
operator doWork is executed on FE rows &columns
Common data for solid shell element.
vector< MatrixDouble3by3 > globalPiolaStressIiBTangent
map< EntityHandle, int > shellElementsMap
vector< MatrixDouble > tangentOfPiolaStressLocalLocal
MatrixDouble directorVectorAtGaussPts
map< int, map< UId, double > > coVector1DofsMap
vector< MatrixDouble > mGrad2
Mid-surface gradient of deformation.
vector< MatrixDouble3by3 > mGAB
MatrixDouble materialStiffness
Material stiffness matrix in Voigt notation.
MatrixDouble positionsAtGaussPts
Reference gauss points coordinates.
MatrixDouble tangent1AtGaussPts
vector< MatrixDouble > tangentOfPiolaStressGlobalGlobal
vector< MatrixDouble3by3 > globalPiolaStressIi_I
vector< MatrixDouble > tangentOfPiolaStressGlobalLocal
vector< MatrixDouble > mGrad1
VectorDouble jacDeterminantAtGaussPts
Determinant of jacobian.
vector< MatrixDouble3by3 > mG_A_B
vector< MatrixDouble3by3 > localPiolaStressIaBTangent
vector< MatrixDouble3by3 > mEAI
double tHickness
Shell thickness.
MatrixDouble localDisplacementsAtGaussPts
Local displacement at integration Pts.
vector< MatrixDouble3by3 > localPiolaStressIA_a
string displacementFieldName
Name of displacement field.
MatrixDouble tangent0AtGaussPts
VectorDouble surfaceParametrisation
User direction of surface parametrization.
string ksiEtaFieldName
In plane HO approximation.
vector< ublas::matrix< double, ublas::column_major > > jacobianInvAtGaussPts
For element local to global.
vector< MatrixDouble3by3 > mE_I_A
vector< MatrixDouble > diffDirectorVectorAtGaussPts
map< int, map< UId, double > > coVector0DofsMap
MatrixDouble globalDisplacentAtGaussPts
Global displacement at integration ptrs.
string zetaFieldName
Name of zeta field.
vector< MatrixDouble > tangentOfPiolaStressLocalGlobal
map< EntityType, map< int, MatrixDouble > > diffGlobN
double sHift
Shift elements in normal direction.
vector< ublas::symmetric_matrix< double, ublas::lower > > localStress
Calculate strain element operators.
PetscErrorCode makeFKsiEta(const MatrixAdaptor &diffN, MatrixDouble &F)
PetscErrorCode makeBZeta(const MatrixAdaptor &diffN, MatrixDouble &B)
Calculate strain operator for displacement thought shell thickness.
PetscErrorCode iNvert(TYPE det, ublas::matrix< TYPE, ublas::row_major, ublas::bounded_array< TYPE, 9 > > &a, ublas::matrix< TYPE, ublas::row_major, ublas::bounded_array< TYPE, 9 > > &inv_a)
Calculate inverse of 3x3 matrix.
PetscErrorCode makeBDisp(const MatrixAdaptor &diffN, const MatrixDouble &T, MatrixDouble &B)
Calculate strain operator for displacements DoFs.
PetscErrorCode makeBKsiEta(const MatrixAdaptor &diffN, MatrixDouble &B)
Calculate strain operator for non-plannar displacements through shell thickness.
PetscErrorCode makeFDisp(const MatrixAdaptor &diffN, MatrixDouble &F)
Gradient of deformation.
PetscErrorCode dEterminatnt(ublas::matrix< TYPE, ublas::row_major, ublas::bounded_array< TYPE, 9 > > &a, TYPE &det)
PetscErrorCode makeFZeta(const MatrixAdaptor &diffN, MatrixDouble &F)
Evaluate normals and tangents on shell surface.
vector< VectorDouble > & operator()(EntityHandle ent, double x, double y, double z, VectorDouble normal, VectorDouble tangent1, VectorDouble tangent2)
vector< VectorDouble > rEsult
NormalApprox(moab::Interface &moab)
NormalApprox(moab::Interface &moab, const double angle)
VectorDouble surfaceParametrisation
PetscErrorCode getRotMatrix(VectorDouble &u, double phi)
Assemble stiffness matrix.
PetscErrorCode doWork(int row_side, int col_side, EntityType row_type, EntityType col_type, DataForcesAndSourcesCore::EntData &row_data, DataForcesAndSourcesCore::EntData &col_data)
OpAssembleLhsMix(CommonData &common_data, const string &row_field_name, const string &col_field_name, const bool symm=false)
Assemble internal forces for displacement DoFs.
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
OpAssembleRhsDisp(CommonData &common_data)
Assemble internal forces for local thorough thickness DoFs.
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
OpAssembleRhsLocal(CommonData &common_data, const string &field)
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
OpEnergyNormH1(CommonData &common_data)
Post process axial and shear forces.
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
moab::Interface & postProcMesh
OpGetAxialForces(moab::Interface &post_proc_mesh, vector< EntityHandle > &map_gauss_pts, CommonData &common_data)
vector< EntityHandle > & mapGaussPts
OpGetCoVectors(CommonData &common_data)
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
VectorDouble coVector0Data
VectorDouble coVector1Data
OpGetDirectorVector(CommonData &common_data)
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
Calculate displacements at integration points.
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
OpGetDisplacements(CommonData &common_data)
OpGetFCartesian(CommonData &common_data)
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
OpGetFLocal(CommonData &common_data, const string &field_name, bool zero)
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
Post process moments forces.
OpGetMoment(moab::Interface &post_proc_mesh, vector< EntityHandle > &map_gauss_pts, CommonData &common_data)
moab::Interface & postProcMesh
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
vector< EntityHandle > & mapGaussPts
Calculate rotation matrices to local (user) element coordinate system.
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
OpGetReferenceBase(CommonData &common_data)
Get strain form displacements at integration points.
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
OpGetStrainDisp(CommonData &common_data)
Get strain form local through thickness displacements at integration points.
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
OpGetStrainLocal(CommonData &common_data, const string &field)
Evaluate stress at integration points.
OpGetStress(CommonData &common_data)
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
Calculate inverse of Jacobian.
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
OpInvJacobian(CommonData &common_data)
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
OpJacobioan(CommonData &common_data)
Post process displacements on post-processing mesh.
vector< EntityHandle > & mapGaussPts
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
MatrixDouble meshNodePositions
moab::Interface & postProcMesh
OpPostProcMeshNodeDispalcements(moab::Interface &post_proc_mesh, vector< EntityHandle > &map_gauss_pts, CommonData &common_data)
Post process geometry (mesh nodal positions) on post-processing mesh.
MatrixDouble meshNodePositions
vector< EntityHandle > & mapGaussPts
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
OpPostProcMeshNodePositions(moab::Interface &post_proc_mesh, vector< EntityHandle > &map_gauss_pts, CommonData &common_data)
moab::Interface & postProcMesh
Post process strain and stresses on post-processing mesh.
moab::Interface & postProcMesh
OpPostProcStressAndStrain(moab::Interface &post_proc_mesh, map< EntityHandle, EntityHandle > &elements_map, vector< EntityHandle > &map_gauss_pts, CommonData &common_data)
map< EntityHandle, EntityHandle > & elementsMap
PetscErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
vector< EntityHandle > & mapGaussPts
Generate post-processing triangular mesh for solid-shell element.
PostProcFatPrismOnTriangleOnRefinedMesh(MoFEM::Interface &m_field, bool ten_nodes_post_proc_tets=true)
PetscErrorCode setGaussPtsTrianglesOnly(int order_triangles_only)
PetscErrorCode postProcess()
function is run at the end of loop
PetscErrorCode generateReferenceElementMesh()
PetscErrorCode setGaussPtsThroughThickness(int order_thickness)
int getRuleThroughThickness(int order)
int getRuleTrianglesOnly(int order)
PetscErrorCode preProcess()
function is run at the beginning of loop
PetscErrorCode postProcess()
function is run at the end of loop
SolidShellError(MoFEM::Interface &m_field, CommonData &common_data)
int getRuleTrianglesOnly(int order)
PetscErrorCode postProcess()
function is run at the end of loop
PetscErrorCode preProcess()
function is run at the beginning of loop
SolidShell(MoFEM::Interface &m_field, CommonData &common_data)
int getRuleThroughThickness(int order)
Main class for solid shell element.