161 DRot_I_phi_tilde_n_MT_T_overline[n] =
170 for (
int n = 0; n <
NUMNODES; n++) {
172 DRot_I_phi_tilde_n_MT_T_overline[n];
202 k_1_i[i] = T_overlineGamma_tilde_i * phi_tilde_1_i;
203 k_2_i[i] = T_overlineGamma_tilde_i * phi_tilde_2_i;
206 for (
int n = 0; n <
NUMNODES; n++) {
225 #ifdef USE_CL_IN_SHELL
234 Shell(uL, pDO, fOut),
236 S_alpha_beta_0(2, 2),
238 L_alpha_beta_i(NUMIP,
fmh(4, 2) ),
240 B_overline_i(NUMIP,
fmh(12, 24) ),
242 P_i(NUMIP,
fmh(12, iGetNumDof()) ),
248 #ifndef USE_CL_IN_SHELL
249 bPreStress(PreStress.
Norm() > 0.),
250 PreStress(PreStress),
253 DRef(NUMIP,
fmh(12, 12)),
254 stress_i(NUMIP,
vh(12))
256 #ifdef USE_CL_IN_SHELL
263 #else // ! USE_CL_IN_SHELL
264 for (
unsigned i = 0; i <
NUMIP; i++) {
267 #endif // ! USE_CL_IN_SHELL
328 InvBlockDiagonal4_2x4_2(M_0, M_0_Inv);
332 fmh L_alpha_B_i(4, 2);
333 fmh S_alpha_beta_i(2, 2);
341 alpha_i[i] = S_alpha_beta_i(1, 1) * S_alpha_beta_i(2, 2) -
342 S_alpha_beta_i(1, 2) * S_alpha_beta_i(2, 1);
346 Inv2x2(S_alpha_beta_i, xi_i_i);
349 for (
integer ii = 0; ii < 2; ii++) {
350 L_alpha_B_i(n + 1, ii + 1) = LI_J[n][ii](
xi_i[i]);
358 H(1, 1) = xi_i[i][0];
361 H(2, 3) = xi_i[i][1];
364 H(3, 5) = xi_i[i][0];
367 H(4, 7) = xi_i[i][1];
370 doublereal a = 2. * xi_i[i][0] * (xi_i[i][1] * xi_i[i][1] - 1.);
371 doublereal b = 2. * xi_i[i][1] * (xi_i[i][0] * xi_i[i][0] - 1.);
412 #ifdef USE_CL_IN_SHELL
419 #endif // USE_CL_IN_SHELL
434 for (
integer i = 0; i < 4; i++) {
436 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
437 WorkVec.
PutRowIndex(iCnt + 6 * i, iNodeFirstMomIndex + iCnt);
442 for (
unsigned int iCnt = 1; iCnt <=
iGetNumDof(); iCnt++) {
443 WorkVec.
PutRowIndex(24 + iCnt, iFirstReactionIndex + iCnt);
449 for (
unsigned int i = 1; i <=
iGetNumDof(); i++) {
450 beta(i) = XCurr(iFirstReactionIndex + i);
516 #ifdef USE_CL_IN_SHELL
519 #else // ! USE_CL_IN_SHELL
524 #endif // ! USE_CL_IN_SHELL
536 AssembleVector(WorkVec, 1, rd, -
alpha_i[i] *
w_i[i]);
537 AssembleVector(WorkVec, 25, rbeta, -
alpha_i[i] *
w_i[i]);
560 for (
integer i = 0; i < 4; i++) {
563 for (
int iCnt = 1; iCnt <= 6; iCnt++) {
564 WM.
PutRowIndex(iCnt + 6 * i, iNodeFirstMomIndex + iCnt);
565 WM.
PutColIndex(iCnt + 6 * i, iNodeFirstPosIndex + iCnt);
568 for (
unsigned int iCnt = 1; iCnt <=
iGetNumDof(); iCnt++) {
569 WM.
PutRowIndex(24 + iCnt, iFirstReactionIndex + iCnt);
570 WM.
PutColIndex(24 + iCnt, iFirstReactionIndex + iCnt);
764 #ifdef USE_CL_IN_SHELL
766 #else // ! USE_CL_IN_SHELL
768 #endif // ! USE_CL_IN_SHELL
785 P_i[i].MatTMatMul(Ktbetaq, C);
1001 for (
int n = 0; n <
NUMNODES; n++) {
1003 for (
int m = 0; m <
NUMNODES; m++) {
1006 WM.
Add(4 + 6 * n, 4 + 6 * m,
1019 WM.
Add(4 + 6 * n, 1 + 6 * m,
1030 WM.
Sub(1 + 6 * n, 4 + 6 * m,
1042 WM.
Add(4 + 6 * n, 4 + 6 * m,
1048 ).MulMT(ToverGammaITm)
1056 ).MulMT(ToverGammaITm)
1062 WM.
Add(4 + 6 * n, 4 + 6 * m,
1087 WM.
Add(4 + 6 * n, 4 + 6 * m,
1095 ).
MulMT(ToverGammaITn)
1105 ).
MulMT(ToverGammaITn)
1131 WM.
Add(4 + 6 * n, 4 + 6 * n,
1139 ).MulMT(ToverGammaITn)
1150 ).MulMT(ToverGammaITn)
1155 WM.
Add(4 + 6 * n, 4 + 6 * n,
1163 ).MulMT(ToverGammaITn)
1174 ).MulMT(ToverGammaITn)
1207 return out <<
"# not implemented yet" << std::endl;
1238 ASSERT(i >= 1 && i <= 4);
1244 return pNode[i - 1];
1255 std::ostream& out = OH.
Plates();
1259 for (
integer r = 1; r <= 12; r++) {
1275 unsigned int uLabel)
1277 silent_cout(
"Shell4EAS(" << uLabel <<
"): warning, \"shell4eas\" is deprecated; use \"shell4easans\" instead" << std::endl);
1281 for (
unsigned i = 0; i < 4; i++) {
1295 #ifdef USE_CL_IN_SHELL
1301 for (
unsigned ir = 1; ir <= 12; ir++) {
1302 for (
unsigned ic = 1; ic <= 12; ic++) {
1310 for (
unsigned i = 1; i < 4; i++) {
1311 pD[i] = pD[0]->Copy();
1313 #else // ! USE_CL_IN_SHELL
1317 silent_cerr(
"Shell(" << uLabel <<
"): unable to read constitutive law" << std::endl);
1320 #endif // ! USE_CL_IN_SHELL
1327 pN[0], pN[1], pN[2], pN[3],
1328 R[0], R[1], R[2], R[3],
1329 #ifdef USE_CL_IN_SHELL
1336 out <<
"shell4: " << uLabel
flag fReadOutput(MBDynParser &HP, const T &t) const
Mat3x3 GetRotRel(const ReferenceFrame &rf)
void ComputeInitialNodeAndIptOrientation()
void PutColIndex(integer iSubCol, integer iCol)
Shell4EAS(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)
Mat3x3 DRot_IT(const Vec3 &phi)
virtual std::ostream & Restart(std::ostream &out) const
void SetValue(DataManager *pDM, VectorHandler &, VectorHandler &, SimulationEntity::Hints *ph=0)
const Vec3 Zero3(0., 0., 0.)
Vec3 Cross(const Vec3 &v) const
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
virtual const Mat3x3 & GetRRef(void) const
virtual bool bToBeOutput(void) const
#define MBDYN_EXCEPT_ARGS
static doublereal xi_i[NUMIP][2]
virtual void ResizeReset(integer)
const MatCross_Manip MatCross
Mat3x3 MulTMT(const Mat3x3 &m) const
FullSubMatrixHandler & SetFull(void)
virtual const Mat3x3 & GetRCurr(void) const
virtual void Output(OutputHandler &OH) const
doublereal Norm(void) const
Mat3x3 Phi_Delta_i[NUMIP][NUMNODES]
void Add(integer iRow, integer iCol, const Vec3 &v)
Mat3x3 DRot(const Vec3 &phi)
const Mat3x3 Eye3(1., 0., 0., 0., 1., 0., 0., 0., 1.)
Vec3 GetCol(unsigned short int i) const
Mat3x3 Kappa_delta_i_1[NUMIP][NUMNODES]
virtual void Put(integer iRow, const Vec3 &v)
void ComputeIPCurvature()
std::vector< Hint * > Hints
static doublereal xi_0[2]
Vec3 eps_tilde_1_0_i[NUMIP]
static doublereal xi_n[NUMNODES][2]
doublereal alpha_i[NUMIP]
void AddT(integer iRow, integer iCol, const Vec3 &v)
Vec3 VecRot(const Mat3x3 &Phi)
Vec3 MulTV(const Vec3 &v) const
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
const Mat3x3 Zero3x3(0., 0., 0., 0., 0., 0., 0., 0., 0.)
virtual unsigned int iGetNumDof(void) const
int ReadShellConstLaw(MBDynParser &HP, Shell::fmh &pD, Shell::vh &PreStress)
Vec3 phi_tilde_n[NUMNODES]
Vec3 k_tilde_1_0_i[NUMIP]
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
Mat3x3 Kappa_delta_i_2[NUMIP][NUMNODES]
virtual bool IsKeyWord(const char *sKeyWord)
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
static doublereal w_i[NUMIP]
Mat3x3 Rot(const Vec3 &phi)
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
#define ASSERT(expression)
Elem * ReadShell4EAS(DataManager *pDM, MBDynParser &HP, const DofOwner *pDO, unsigned int uLabel)
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)
VectorExpression< VectorExpr, N_rows >::ScalarType Norm(const VectorExpression< VectorExpr, N_rows > &u)
Vec3 eps_tilde_2_0_i[NUMIP]
void PutRowIndex(integer iSubRow, integer iRow)
void RotAndDRot(const Vec3 &phi, Mat3x3 &Phi, Mat3x3 &Ga)
std::ostream & GetLogFile(void) const
void Sub(integer iRow, integer iCol, const Vec3 &v)
static const doublereal a
virtual const StructNode * pGetNode(unsigned int i) const
void UpdateNodalAndAveragePosAndOrientation()
Mat3x3 MulMT(const Mat3x3 &m) const
virtual integer iGetFirstIndex(void) const
std::ostream & Plates(void) const
LinearElasticGenericConstitutiveLaw< Shell::vh, Shell::fmh > LEGCLShell
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
Vec3 eps_tilde_1_i[NUMIP]
const StructNode * pNode[NUMNODES]
ConstitutiveLawOwner< vh, fmh > ConstitutiveLawOwnerType
Vec3 eps_tilde_2_i[NUMIP]
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
void InterpolateOrientation()
virtual void Resize(integer iNewSize)=0
Mat3x3 DRot_I(const Vec3 &phi)
bool UseText(int out) const
Vec3 k_tilde_2_0_i[NUMIP]
virtual doublereal GetReal(const doublereal &dDefval=0.0)