190 DRot_I_phi_tilde_n_MT_T_overline[n] =
198 for (
int n = 0; n <
NUMNODES; n++) {
200 DRot_I_phi_tilde_n_MT_T_overline[n];
210 for (
int n = 0; n <
NUMNODES; n++) {
212 DRot_I_phi_tilde_n_MT_T_overline[n];
240 k_1_i[i] = T_overlineGamma_tilde_i * phi_tilde_1_i;
241 k_2_i[i] = T_overlineGamma_tilde_i * phi_tilde_2_i;
244 for (
int n = 0; n <
NUMNODES; n++) {
263 #ifdef USE_CL_IN_SHELL
272 Shell(uL, pDO, fOut),
274 S_alpha_beta_0(2, 2),
275 S_alpha_beta_i(NUMIP,
fmh(2, 2) ),
276 S_alpha_beta_A(NUMSSEP,
fmh(2, 2) ),
278 L_alpha_beta_i(NUMIP,
fmh(4, 2) ),
279 L_alpha_beta_A(NUMSSEP,
fmh(4, 2) ),
281 B_overline_i(NUMIP,
fmh(12, 24) ),
282 D_overline_i(NUMIP,
fmh(15, 24) ),
283 G_i(NUMIP,
fmh(15, 15) ),
285 P_i(NUMIP,
fmh(12, iGetNumDof()) ),
287 K_beta_beta_i(NUMIP,
fmh(iGetNumDof(), iGetNumDof()) ),
293 #ifndef USE_CL_IN_SHELL
294 bPreStress(PreStress.
Norm() > 0.),
295 PreStress(PreStress),
298 DRef(NUMIP,
fmh(12, 12)),
299 stress_i(NUMIP, vh(12))
301 #ifdef USE_CL_IN_SHELL
308 #else // ! USE_CL_IN_SHELL
309 for (
unsigned i = 0; i <
NUMIP; i++) {
312 #endif // ! USE_CL_IN_SHELL
371 Inv4x4(M_0, M_0_Inv);
375 fmh L_alpha_B_i(4, 2);
391 for (
integer ii = 0; ii < 2; ii++) {
392 L_alpha_B_i(n + 1, ii + 1) = LI_J[n][ii](
xi_i[i]);
400 H(1, 1) = xi_i[i][0];
403 H(2, 3) = xi_i[i][1];
406 H(3, 5) = xi_i[i][0];
409 H(4, 7) = xi_i[i][1];
438 fmh L_alpha_B_A(4, 2);
457 for (
integer ii = 0; ii < 2; ii++) {
458 L_alpha_B_A(n + 1, ii + 1) = LI_J[n][ii](
xi_A[i]);
478 #ifdef USE_CL_IN_SHELL
485 #endif // USE_CL_IN_SHELL
500 for (
integer i = 0; i < 4; i++) {
502 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
503 WorkVec.
PutRowIndex(iCnt + 6 * i, iNodeFirstMomIndex + iCnt);
508 for (
unsigned int iCnt = 1; iCnt <=
iGetNumDof(); iCnt++) {
509 WorkVec.
PutRowIndex(24 + iCnt, iFirstReactionIndex + iCnt);
515 for (
unsigned int i = 1; i <=
iGetNumDof(); i++) {
516 beta(i) = XCurr(iFirstReactionIndex + i);
574 fmh B_overline_A(6, 24);
577 fmh B_overline_3_ABCD(4, 24);
578 fmh B_overline_6_ABCD(4, 24);
580 B_overline_A.
Reset();
589 B_overline_A.
Put(1, 4 + 6 * n,
595 B_overline_A.
Put(4, 4 + 6 * n,
600 CopyMatrixRow(B_overline_3_ABCD, i + 1, B_overline_A, 3);
601 CopyMatrixRow(B_overline_6_ABCD, i + 1, B_overline_A, 6);
606 fmh tmp_B_ANS(1, 24);
610 sh1(1, 1) = (1. +
xi_i[i][1]) * 0.5;
611 sh1(1, 3) = (1. -
xi_i[i][1]) * 0.5;
612 sh2(1, 4) = (1. +
xi_i[i][0]) * 0.5;
613 sh2(1, 2) = (1. -
xi_i[i][0]) * 0.5;
624 sh1.
MatMatMul(tmp_B_ANS, B_overline_3_ABCD);
630 sh2.
MatMatMul(tmp_B_ANS, B_overline_6_ABCD);
661 #ifdef USE_CL_IN_SHELL
664 #else // ! USE_CL_IN_SHELL
669 #endif // ! USE_CL_IN_SHELL
695 G_i[i].Put(13, 13, Hh);
706 AssembleVector(WorkVec, 1, rd, -
alpha_i[i] *
w_i[i]);
707 AssembleVector(WorkVec, 25, rbeta, -
alpha_i[i] *
w_i[i] / dCoef);
730 for (
integer i = 0; i < 4; i++) {
733 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
734 WM.
PutRowIndex(iCnt + 6 * i, iNodeFirstMomIndex + iCnt);
735 WM.
PutColIndex(iCnt + 6 * i, iNodeFirstPosIndex + iCnt);
738 for (
unsigned int iCnt = 1; iCnt <=
iGetNumDof(); iCnt++) {
739 WM.
PutRowIndex(24 + iCnt, iFirstReactionIndex + iCnt);
740 WM.
PutColIndex(24 + iCnt, iFirstReactionIndex + iCnt);
760 #ifdef USE_CL_IN_SHELL
762 #else // ! USE_CL_IN_SHELL
764 #endif // ! USE_CL_IN_SHELL
772 P_i[i].MatTMatMul(Ktbetaq, C);
804 return out <<
"# not implemented yet" << std::endl;
852 std::ostream& out = OH.
Plates();
856 for (
integer r = 1; r <= 12; r++) {
876 for (
unsigned i = 0; i < 4; i++) {
890 #ifdef USE_CL_IN_SHELL
896 for (
unsigned ir = 1; ir <= 12; ir++) {
897 for (
unsigned ic = 1; ic <= 12; ic++) {
905 for (
unsigned i = 1; i < 4; i++) {
906 pD[i] = pD[0]->Copy();
908 #else // ! USE_CL_IN_SHELL
912 silent_cerr(
"Shell(" << uLabel <<
"): unable to read constitutive law" << std::endl);
915 #endif // ! USE_CL_IN_SHELL
922 pN[0], pN[1], pN[2], pN[3],
923 R[0], R[1], R[2], R[3],
924 #ifdef USE_CL_IN_SHELL
931 out <<
"shell4: " << uLabel
flag fReadOutput(MBDynParser &HP, const T &t) const
Mat3x3 Phi_Delta_i[NUMIP][NUMNODES]
void PutT(integer iRow, integer iCol, const FullMatrixHandler &source)
Mat3x3 GetRotRel(const ReferenceFrame &rf)
static doublereal xi_0[2]
Vec3 eps_tilde_2_A[NUMSSEP]
void PutColIndex(integer iSubCol, integer iCol)
virtual ~Shell4EASANS(void)
Mat3x3 Kappa_delta_i_1[NUMIP][NUMNODES]
const Vec3 Zero3(0., 0., 0.)
Vec3 Cross(const Vec3 &v) const
static doublereal w_i[NUMIP]
virtual const Mat3x3 & GetRRef(void) const
virtual bool bToBeOutput(void) const
#define MBDYN_EXCEPT_ARGS
virtual void ResizeReset(integer)
const MatCross_Manip MatCross
FullSubMatrixHandler & SetFull(void)
virtual const Mat3x3 & GetRCurr(void) const
doublereal Norm(void) const
LinearElasticGenericConstitutiveLaw< Shell::vh, Shell::fmh > LEGCLShell
doublereal Dot(const Vec3 &v) const
void Add(integer iRow, integer iCol, const Vec3 &v)
Elem * ReadShell4EASANS(DataManager *pDM, MBDynParser &HP, const DofOwner *pDO, unsigned int uLabel)
Mat3x3 DRot(const Vec3 &phi)
static doublereal xi_i[NUMIP][2]
void Put(integer iRow, integer iCol, const FullMatrixHandler &source)
Shell4EASANS(unsigned int uL, const DofOwner *pDO, const StructNode *pN1, const StructNode *pN2, const StructNode *pN3, const StructNode *pN4, const Mat3x3 &R1, const Mat3x3 &R2, const Mat3x3 &R3, const Mat3x3 &R4, const fmh &pDTmp, const vh &PreStress, flag fOut)
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Vec3 k_tilde_2_0_i[NUMIP]
const Mat3x3 Eye3(1., 0., 0., 0., 1., 0., 0., 0., 1.)
void CopyMatrixRow(integer dest_row, const FullMatrixHandler &source, integer source_row)
Vec3 GetCol(unsigned short int i) const
Mat3x3 Phi_Delta_A[NUMIP][NUMNODES]
Vec3 k_tilde_1_0_i[NUMIP]
virtual void Put(integer iRow, const Vec3 &v)
Mat3x3 mb_deye< Mat3x3 >(const doublereal d)
std::vector< Hint * > Hints
void ComputeInitialNodeOrientation()
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
void AddT(integer iRow, integer iCol, const Vec3 &v)
Vec3 VecRot(const Mat3x3 &Phi)
void InterpolateOrientation()
Vec3 MulTV(const Vec3 &v) const
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
doublereal alpha_i[NUMIP]
Vec3 eps_tilde_1_0_A[NUMSSEP]
Vec3 eps_tilde_2_i[NUMIP]
const Mat3x3 Zero3x3(0., 0., 0., 0., 0., 0., 0., 0., 0.)
virtual const StructNode * pGetNode(unsigned int i) const
int ReadShellConstLaw(MBDynParser &HP, Shell::fmh &pD, Shell::vh &PreStress)
Vec3 eps_tilde_1_i[NUMIP]
Vec3 eps_tilde_1_0_i[NUMIP]
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
virtual unsigned int iGetNumDof(void) const
virtual std::ostream & Restart(std::ostream &out) const
virtual bool IsKeyWord(const char *sKeyWord)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Vec3 phi_tilde_n[NUMNODES]
Mat3x3 Rot(const Vec3 &phi)
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
Vec3 phi_tilde_A[NUMSSEP]
#define ASSERT(expression)
Mat3x3 Tens(const Vec3 &v) const
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
Mat3x3 MulTM(const Mat3x3 &m) const
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
virtual const Vec3 & GetXCurr(void) const
Mat3x3 Elle(const Vec3 &phi, const Vec3 &a)
virtual void ResizeReset(integer, integer)
Vec3 eps_tilde_1_A[NUMSSEP]
static doublereal xi_n[NUMNODES][2]
VectorExpression< VectorExpr, N_rows >::ScalarType Norm(const VectorExpression< VectorExpr, N_rows > &u)
const StructNode * pNode[NUMNODES]
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
void PutRowIndex(integer iSubRow, integer iRow)
Vec3 eps_tilde_2_0_i[NUMIP]
void RotAndDRot(const Vec3 &phi, Mat3x3 &Phi, Mat3x3 &Ga)
void SetValue(DataManager *pDM, VectorHandler &, VectorHandler &, SimulationEntity::Hints *ph=0)
std::ostream & GetLogFile(void) const
virtual void Output(OutputHandler &OH) const
Vec3 eps_tilde_2_0_A[NUMSSEP]
static doublereal xi_A[NUMSSEP][2]
void UpdateNodalAndAveragePosAndOrientation()
void ComputeIPCurvature()
Mat3x3 MulMT(const Mat3x3 &m) const
virtual integer iGetFirstIndex(void) const
std::ostream & Plates(void) const
virtual MatrixHandler & MatMatMul(MatrixHandler &out, const MatrixHandler &in) const
unsigned int GetLabel(void) const
virtual MatrixHandler & MatTMatMul(MatrixHandler &out, const MatrixHandler &in) const
Node * ReadNode(MBDynParser &HP, Node::Type type) const
ConstitutiveLawOwner< vh, fmh > ConstitutiveLawOwnerType
virtual void Resize(integer iNewSize)=0
Mat3x3 DRot_I(const Vec3 &phi)
Mat3x3 Kappa_delta_i_2[NUMIP][NUMNODES]
bool UseText(int out) const
virtual doublereal GetReal(const doublereal &dDefval=0.0)