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)