118 #ifdef USE_CL_IN_MEMBRANE
129 S_alpha_beta_0(2, 2),
131 L_alpha_beta_i(NUMIP, fmh(4, 2) ),
133 B_overline_i(NUMIP, fmh(3, 12) ),
135 P_i(NUMIP, fmh(3, iGetNumDof()) ),
141 #ifndef USE_CL_IN_MEMBRANE
142 bPreStress(PreStress.
Norm() > 0.),
143 PreStress(PreStress),
146 DRef(NUMIP, fmh(3, 3)),
147 stress_i(NUMIP,
vh(3))
149 #ifdef USE_CL_IN_MEMBRANE
156 #else // ! USE_CL_IN_MEMBRANE
157 for (
unsigned i = 0; i <
NUMIP; i++) {
160 #endif // ! USE_CL_IN_MEMBRANE
220 Inv3x3(M_0, M_0_Inv);
224 fmh L_alpha_B_i(4, 2);
225 fmh S_alpha_beta_i(2, 2);
235 alpha_i[i] = S_alpha_beta_i(1, 1) * S_alpha_beta_i(2, 2) -
236 S_alpha_beta_i(1, 2) * S_alpha_beta_i(2, 1);
240 Inv2x2(S_alpha_beta_i, xi_i_i);
243 for (
integer ii = 0; ii < 2; ii++) {
244 L_alpha_B_i(n + 1, ii + 1) = LI_J[n][ii](
xi_i[i]);
253 H(1, 1) = xi_i[i][0];
256 H(2, 3) = xi_i[i][1];
259 H(3, 5) = xi_i[i][0];
262 H(3, 7) = xi_i[i][1];
273 M_0_Inv.MatTMatMul(tmpP, H);
274 Perm.MatMatMul(
P_i[i], tmpP);
282 F.Put(1, 1,
y_i_1[i]);
283 F.Put(1, 2,
y_i_2[i]);
286 F.MatTMatMul(FTF, F);
299 #ifdef USE_CL_IN_MEMBRANE
306 #endif // USE_CL_IN_MEMBRANE
322 for (
integer i = 0; i < 4; i++) {
324 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
325 WorkVec.
PutRowIndex(iCnt + 3 * i, iNodeFirstMomIndex + iCnt);
330 for (
unsigned int iCnt = 1; iCnt <=
iGetNumDof(); iCnt++) {
331 WorkVec.
PutRowIndex(12 + iCnt, iFirstReactionIndex + iCnt);
335 for (
unsigned int i = 1; i <=
iGetNumDof(); i++) {
336 beta(i) = XCurr(iFirstReactionIndex + i);
343 F.Put(1, 1,
y_i_1[i]);
344 F.Put(1, 2,
y_i_2[i]);
346 F.MatTMatMul(FTF, F);
359 fmh TMP_1(3, 3), TMP_2(3, 3);
400 #ifdef USE_CL_IN_MEMBRANE
403 #else // ! USE_CL_IN_MEMBRANE
408 #endif // ! USE_CL_IN_MEMBRANE
420 AssembleVector(WorkVec, 1, rd, -
alpha_i[i] *
w_i[i]);
421 AssembleVector(WorkVec, 13, rbeta, -
alpha_i[i] *
w_i[i]);
444 for (
integer i = 0; i < 4; i++) {
447 for (
int iCnt = 1; iCnt <= 3; iCnt++) {
448 WM.
PutRowIndex(iCnt + 3 * i, iNodeFirstMomIndex + iCnt);
449 WM.
PutColIndex(iCnt + 3 * i, iNodeFirstPosIndex + iCnt);
452 for (
unsigned int iCnt = 1; iCnt <=
iGetNumDof(); iCnt++) {
453 WM.
PutRowIndex(12 + iCnt, iFirstReactionIndex + iCnt);
454 WM.
PutColIndex(12 + iCnt, iFirstReactionIndex + iCnt);
469 #ifdef USE_CL_IN_SHELL
471 #else // ! USE_CL_IN_SHELL
473 #endif // ! USE_CL_IN_SHELL
479 P_i[i].MatTMatMul(Ktbetaq, C);
492 for (
int n = 0; n <
NUMNODES; n++) {
493 for (
int m = 0; m <
NUMNODES; m++) {
504 for (
integer l = 0; l < 3; l++) {
506 for (
integer n = 0; n < 4; n++) {
510 for (
integer n = 0; n < 4; n++) {
511 for (
integer m = 0; m < 4; m++) {
529 return out <<
"# not implemented yet" << std::endl;
577 std::ostream& out = OH.
Plates();
581 for (
integer r = 1; r <= 3; r++) {
601 for (
unsigned i = 0; i < 4; i++) {
609 #ifdef USE_CL_IN_MEMBRANE
615 for (
unsigned ir = 1; ir <= 3; ir++) {
616 for (
unsigned ic = 1; ic <= 3; ic++) {
624 for (
unsigned i = 1; i < 4; i++) {
625 pD[i] = pD[0]->Copy();
627 #else // ! USE_CL_IN_MEMBRANE
631 silent_cerr(
"Membrane(" << uLabel <<
"): unable to read constitutive law" << std::endl);
634 #endif // ! USE_CL_IN_MEMBRANE
641 pN[0], pN[1], pN[2], pN[3],
642 #ifdef USE_CL_IN_MEMBRANE
649 out <<
"membrane4: " << uLabel
flag fReadOutput(MBDynParser &HP, const T &t) const
void PutColIndex(integer iSubCol, integer iCol)
virtual VariableSubMatrixHandler & AssJac(VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
Vec3 Cross(const Vec3 &v) const
virtual void Output(OutputHandler &OH) const
Membrane4EAS(unsigned int uL, const DofOwner *pDO, const StructDispNode *pN1, const StructDispNode *pN2, const StructDispNode *pN3, const StructDispNode *pN4, const fmh &pDTmp, const vh &PreStress, flag fOut)
virtual bool bToBeOutput(void) const
#define MBDYN_EXCEPT_ARGS
virtual void ResizeReset(integer)
FullSubMatrixHandler & SetFull(void)
doublereal Norm(void) const
doublereal alpha_i[NUMIP]
ConstitutiveLawOwner< vh, fmh > ConstitutiveLawOwnerType
void Add(integer iRow, integer iCol, const Vec3 &v)
Vec3 GetCol(unsigned short int i) const
virtual void Put(integer iRow, const Vec3 &v)
std::vector< Hint * > Hints
void UpdateNodalAndAveragePos()
void IncCoef(integer iRow, integer iCol, const doublereal &dCoef)
void AddT(integer iRow, integer iCol, const Vec3 &v)
virtual std::ostream & Restart(std::ostream &out) const
void SetValue(DataManager *pDM, VectorHandler &, VectorHandler &, SimulationEntity::Hints *ph=0)
int ReadMembraneConstLaw(MBDynParser &HP, Membrane::fmh &pD, Membrane::vh &PreStress)
static doublereal xi_n[NUMNODES][2]
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
virtual ~Membrane4EAS(void)
#define ASSERT(expression)
void ComputeInitialIptOrientation()
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
Elem * ReadMembrane4EAS(DataManager *pDM, MBDynParser &HP, const DofOwner *pDO, unsigned int uLabel)
virtual const StructDispNode * pGetNode(unsigned int i) const
virtual const Vec3 & GetXCurr(void) const
virtual void ResizeReset(integer, integer)
VectorExpression< VectorExpr, N_rows >::ScalarType Norm(const VectorExpression< VectorExpr, N_rows > &u)
virtual SubVectorHandler & AssRes(SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
static doublereal xi_0[2]
const StructDispNode * pNode[NUMNODES]
void PutRowIndex(integer iSubRow, integer iRow)
std::ostream & GetLogFile(void) const
static doublereal xi_i[NUMIP][2]
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
virtual VariableSubMatrixHandler & InitialAssJac(VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
virtual integer iGetFirstIndex(void) const
std::ostream & Plates(void) const
static doublereal w_i[NUMIP]
virtual MatrixHandler & MatMatMul(MatrixHandler &out, const MatrixHandler &in) const
unsigned int GetLabel(void) const
Node * ReadNode(MBDynParser &HP, Node::Type type) const
virtual unsigned int iGetNumDof(void) const
LinearElasticGenericConstitutiveLaw< Membrane::vh, Membrane::fmh > LEGCLMembrane
virtual SubVectorHandler & InitialAssRes(SubVectorHandler &WorkVec, const VectorHandler &XCurr)
virtual void Resize(integer iNewSize)=0
Vec3 eps_tilde_0_i[NUMIP]
bool UseText(int out) const
virtual doublereal GetReal(const doublereal &dDefval=0.0)