MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
Shell4EASANS Class Reference

#include <shelleasans.h>

Inheritance diagram for Shell4EASANS:
Collaboration diagram for Shell4EASANS:

Public Types

enum  IntegrationPoint {
  IP_1_1 = 0, IP_1_2 = 1, IP_1_3 = 2, IP_2_1 = 3,
  IP_2_2 = 4, IP_2_3 = 5, IP_3_1 = 6, IP_3_2 = 7,
  IP_3_3 = 8, NUMIP = 4
}
 
enum  ShearStrainEvaluationPoint {
  SSEP_1 = 0, SSEP_2 = 1, SSEP_3 = 2, SSEP_4 = 3,
  NUMSSEP = 4
}
 
enum  NodeName {
  NODE1 = 0, NODE2 = 1, NODE3 = 2, NODE4 = 3,
  NUMNODES = 4
}
 
enum  Deformations { STRAIN = 0, CURVAT = 1, NUMDEFORM = 2 }
 
- Public Types inherited from Elem
enum  Type {
  UNKNOWN = -1, AIRPROPERTIES = 0, INDUCEDVELOCITY, AUTOMATICSTRUCTURAL,
  GRAVITY, BODY, JOINT, JOINT_REGULARIZATION,
  BEAM, PLATE, FORCE, INERTIA,
  ELECTRICBULK, ELECTRIC, THERMAL, HYDRAULIC,
  BULK, LOADABLE, DRIVEN, EXTERNAL,
  AEROMODAL, AERODYNAMIC, GENEL, SOCKETSTREAM_OUTPUT,
  RTAI_OUTPUT = SOCKETSTREAM_OUTPUT, LASTELEMTYPE
}
 
- Public Types inherited from SimulationEntity
typedef std::vector< Hint * > Hints
 
- Public Types inherited from ToBeOutput
enum  { OUTPUT = 0x1U, OUTPUT_MASK = 0xFU, OUTPUT_PRIVATE = 0x10U, OUTPUT_PRIVATE_MASK = ~OUTPUT_MASK }
 
- Public Types inherited from Shell
enum  Type { UNKNOWN = -1, ELASTIC = 0, VISCOELASTIC, LASTSHELLTYPE }
 
typedef MyVectorHandler vh
 
typedef std::vector< vhvvh
 
typedef FullMatrixHandler fmh
 
typedef std::vector< fmhvfmh
 
typedef ConstitutiveLawOwner
< vh, fmh
ConstitutiveLawOwnerType
 

Public Member Functions

 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 ~Shell4EASANS (void)
 
virtual Shell::Type GetShellType (void) const
 
virtual Elem::Type GetElemType (void) const
 
virtual unsigned int iGetNumDof (void) const
 
virtual DofOrder::Order GetDofType (unsigned int i) const
 
virtual DofOrder::Order GetEqType (unsigned int i) const
 
virtual std::ostream & Restart (std::ostream &out) const
 
virtual void WorkSpaceDim (integer *piNumRows, integer *piNumCols) const
 
void SetValue (DataManager *pDM, VectorHandler &, VectorHandler &, SimulationEntity::Hints *ph=0)
 
virtual SubVectorHandlerAssRes (SubVectorHandler &WorkVec, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual VariableSubMatrixHandlerAssJac (VariableSubMatrixHandler &WorkMat, doublereal dCoef, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void Output (OutputHandler &OH) const
 
virtual unsigned int iGetInitialNumDof (void) const
 
virtual void InitialWorkSpaceDim (integer *piNumRows, integer *piNumCols) const
 
virtual void SetInitialValue (VectorHandler &)
 
virtual VariableSubMatrixHandlerInitialAssJac (VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
 
virtual SubVectorHandlerInitialAssRes (SubVectorHandler &WorkVec, const VectorHandler &XCurr)
 
virtual const StructNodepGetNode (unsigned int i) const
 
virtual void GetConnectedNodes (std::vector< const Node * > &connectedNodes) const
 
- Public Member Functions inherited from Elem
 Elem (unsigned int uL, flag fOut)
 
virtual ~Elem (void)
 
virtual std::ostream & DescribeDof (std::ostream &out, const char *prefix="", bool bInitial=false) const
 
virtual void DescribeDof (std::vector< std::string > &desc, bool bInitial=false, int i=-1) const
 
virtual std::ostream & DescribeEq (std::ostream &out, const char *prefix="", bool bInitial=false) const
 
virtual void DescribeEq (std::vector< std::string > &desc, bool bInitial=false, int i=-1) const
 
virtual void AssMats (VariableSubMatrixHandler &WorkMatA, VariableSubMatrixHandler &WorkMatB, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual bool bInverseDynamics (void) const
 
void SetInverseDynamicsFlags (unsigned uIDF)
 
unsigned GetInverseDynamicsFlags (void) const
 
bool bIsErgonomy (void) const
 
bool bIsRightHandSide (void) const
 
virtual VariableSubMatrixHandlerAssJac (VariableSubMatrixHandler &WorkMat, const VectorHandler &XCurr)
 
virtual SubVectorHandlerAssRes (SubVectorHandler &WorkVec, const VectorHandler &XCurr, const VectorHandler &XPrimeCurr, const VectorHandler &XPrimePrimeCurr, InverseDynamics::Order iOrder=InverseDynamics::INVERSE_DYNAMICS)
 
virtual int GetNumConnectedNodes (void) const
 
- Public Member Functions inherited from WithLabel
 WithLabel (unsigned int uL=0, const std::string &sN="")
 
virtual ~WithLabel (void)
 
void PutLabel (unsigned int uL)
 
void PutName (const std::string &sN)
 
unsigned int GetLabel (void) const
 
const std::string & GetName (void) const
 
- Public Member Functions inherited from SimulationEntity
 SimulationEntity (void)
 
virtual ~SimulationEntity (void)
 
virtual bool bIsValidIndex (unsigned int i) const
 
virtual HintParseHint (DataManager *pDM, const char *s) const
 
virtual void BeforePredict (VectorHandler &, VectorHandler &, VectorHandler &, VectorHandler &) const
 
virtual void AfterPredict (VectorHandler &X, VectorHandler &XP)
 
virtual void Update (const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void DerivativesUpdate (const VectorHandler &XCurr, const VectorHandler &XPrimeCurr)
 
virtual void Update (const VectorHandler &XCurr, InverseDynamics::Order iOrder)
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP)
 
virtual void AfterConvergence (const VectorHandler &X, const VectorHandler &XP, const VectorHandler &XPP)
 
virtual unsigned int iGetNumPrivData (void) const
 
virtual unsigned int iGetPrivDataIdx (const char *s) const
 
virtual doublereal dGetPrivData (unsigned int i) const
 
virtual std::ostream & OutputAppend (std::ostream &out) const
 
virtual void ReadInitialState (MBDynParser &HP)
 
- Public Member Functions inherited from ToBeOutput
 ToBeOutput (flag fOut=fDefaultOut)
 
virtual ~ToBeOutput (void)
 
virtual void OutputPrepare (OutputHandler &OH)
 
virtual void Output (OutputHandler &OH, const VectorHandler &X, const VectorHandler &XP) const
 
virtual flag fToBeOutput (void) const
 
virtual bool bToBeOutput (void) const
 
virtual void SetOutputFlag (flag f=flag(1))
 
- Public Member Functions inherited from Shell
 Shell (unsigned uLabel, const DofOwner *pDO, flag fOut)
 
virtual ~Shell (void)
 
- Public Member Functions inherited from ElemGravityOwner
 ElemGravityOwner (unsigned int uL, flag fOut)
 
virtual ~ElemGravityOwner (void)
 
virtual doublereal dGetM (void) const
 
Vec3 GetS (void) const
 
Mat3x3 GetJ (void) const
 
Vec3 GetB (void) const
 
Vec3 GetG (void) const
 
- Public Member Functions inherited from GravityOwner
 GravityOwner (void)
 
virtual ~GravityOwner (void)
 
void PutGravity (const Gravity *pG)
 
virtual bool bGetGravity (const Vec3 &X, Vec3 &Acc) const
 
- Public Member Functions inherited from ElemWithDofs
 ElemWithDofs (unsigned int uL, const DofOwner *pDO, flag fOut)
 
virtual ~ElemWithDofs (void)
 
- Public Member Functions inherited from DofOwnerOwner
 DofOwnerOwner (const DofOwner *pDO)
 
virtual ~DofOwnerOwner ()
 
virtual const DofOwnerpGetDofOwner (void) const
 
virtual integer iGetFirstIndex (void) const
 
- Public Member Functions inherited from InitialAssemblyElem
 InitialAssemblyElem (unsigned int uL, flag fOut)
 
virtual ~InitialAssemblyElem (void)
 
- Public Member Functions inherited from SubjectToInitialAssembly
 SubjectToInitialAssembly (void)
 
virtual ~SubjectToInitialAssembly (void)
 

Static Public Attributes

static doublereal xi_i [NUMIP][2]
 
static doublereal w_i [NUMIP]
 
static doublereal xi_A [NUMSSEP][2]
 
static doublereal xi_n [NUMNODES][2]
 
static doublereal xi_0 [2] = {0., 0.}
 

Protected Member Functions

virtual void AddInternalForces (Vec6 &, unsigned int)
 
- Protected Member Functions inherited from ElemGravityOwner
virtual Vec3 GetS_int (void) const
 
virtual Mat3x3 GetJ_int (void) const
 
virtual Vec3 GetB_int (void) const
 
virtual Vec3 GetG_int (void) const
 

Protected Attributes

const StructNodepNode [NUMNODES]
 
Vec3 xa_0 [NUMNODES]
 
Vec3 xa [NUMNODES]
 
Mat3x3 iTa [NUMNODES]
 
Mat3x3 iTa_i [NUMIP]
 
Mat3x3 iTa_A [NUMSSEP]
 
Vec3 phi_tilde_n [NUMNODES]
 
Vec3 phi_tilde_i [NUMIP]
 
Vec3 phi_tilde_A [NUMSSEP]
 
Vec3 phi_tilde_0
 
Mat3x3 T0_overline
 
Mat3x3 T_overline
 
Mat3x3 T_0_0
 
Mat3x3 T_0_i [NUMIP]
 
Mat3x3 T_0_A [NUMSSEP]
 
Mat3x3 T_0
 
Mat3x3 T_i [NUMIP]
 
Mat3x3 T_A [NUMSSEP]
 
Mat3x3 Phi_Delta_i [NUMIP][NUMNODES]
 
Mat3x3 Phi_Delta_A [NUMIP][NUMNODES]
 
Mat3x3 Kappa_delta_i_1 [NUMIP][NUMNODES]
 
Mat3x3 Kappa_delta_i_2 [NUMIP][NUMNODES]
 
Mat3x3 Q_i [NUMIP]
 
Mat3x3 Q_A [NUMSSEP]
 
Vec3 k_1_i [NUMIP]
 
Vec3 k_2_i [NUMIP]
 
Vec3 eps_tilde_1_0_i [NUMIP]
 
Vec3 eps_tilde_2_0_i [NUMIP]
 
Vec3 eps_tilde_1_0_A [NUMSSEP]
 
Vec3 eps_tilde_2_0_A [NUMSSEP]
 
Vec3 eps_tilde_1_i [NUMIP]
 
Vec3 eps_tilde_2_i [NUMIP]
 
Vec3 eps_tilde_1_A [NUMSSEP]
 
Vec3 eps_tilde_2_A [NUMSSEP]
 
Vec3 k_tilde_1_0_i [NUMIP]
 
Vec3 k_tilde_2_0_i [NUMIP]
 
Vec3 k_tilde_1_i [NUMIP]
 
Vec3 k_tilde_2_i [NUMIP]
 
fmh S_alpha_beta_0
 
vfmh S_alpha_beta_i
 
vfmh S_alpha_beta_A
 
doublereal alpha_0
 
doublereal alpha_i [NUMIP]
 
vfmh L_alpha_beta_i
 
vfmh L_alpha_beta_A
 
vfmh B_overline_i
 
vfmh D_overline_i
 
vfmh G_i
 
vfmh P_i
 
vfmh K_beta_beta_i
 
Vec3 y_i_1 [NUMIP]
 
Vec3 y_i_2 [NUMIP]
 
vh beta
 
vh epsilon_hat
 
vh epsilon
 
vvh FRef
 
bool bPreStress
 
vh PreStress
 
vfmh DRef
 
vvh stress_i
 
bool bFirstRes
 
- Protected Attributes inherited from WithLabel
unsigned int uLabel
 
std::string sName
 
- Protected Attributes inherited from ToBeOutput
flag fOutput
 
- Protected Attributes inherited from GravityOwner
GravitypGravity
 

Private Member Functions

void UpdateNodalAndAveragePosAndOrientation ()
 
void ComputeInitialNodeOrientation ()
 
void InterpolateOrientation ()
 
void ComputeIPCurvature ()
 

Detailed Description

Definition at line 70 of file shelleasans.h.

Member Enumeration Documentation

Enumerator
STRAIN 
CURVAT 
NUMDEFORM 

Definition at line 144 of file shelleasans.h.

144  {
145  STRAIN = 0,
146  CURVAT = 1,
147 
148  NUMDEFORM = 2
149  };
Enumerator
IP_1_1 
IP_1_2 
IP_1_3 
IP_2_1 
IP_2_2 
IP_2_3 
IP_3_1 
IP_3_2 
IP_3_3 
NUMIP 

Definition at line 102 of file shelleasans.h.

Enumerator
NODE1 
NODE2 
NODE3 
NODE4 
NUMNODES 

Definition at line 131 of file shelleasans.h.

131  {
132  NODE1 = 0,
133  NODE2 = 1,
134  NODE3 = 2,
135  NODE4 = 3,
136 
137  NUMNODES = 4
138  };
Enumerator
SSEP_1 
SSEP_2 
SSEP_3 
SSEP_4 
NUMSSEP 

Definition at line 120 of file shelleasans.h.

120  {
121  SSEP_1 = 0,
122  SSEP_2 = 1,
123  SSEP_3 = 2,
124  SSEP_4 = 3,
125 
126  NUMSSEP = 4
127  };

Constructor & Destructor Documentation

Shell4EASANS::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 
)

Definition at line 253 of file shelleasans.cc.

References alpha_0, alpha_i, ComputeInitialNodeOrientation(), ComputeIPCurvature(), DRef, eps_tilde_1_0_A, eps_tilde_1_0_i, eps_tilde_2_0_A, eps_tilde_2_0_i, Mat3x3::GetCol(), iGetNumDof(), k_1_i, k_2_i, k_tilde_1_0_i, k_tilde_2_0_i, L_alpha_beta_A, L_alpha_beta_i, MatrixHandler::MatMatMul(), MatrixHandler::MatTMatMul(), Mat3x3::MulTV(), NODE1, NODE2, NODE3, NODE4, NUMIP, NUMNODES, NUMSSEP, P_i, pNode, S_alpha_beta_0, S_alpha_beta_A, S_alpha_beta_i, SAFENEWWITHCONSTRUCTOR, T0_overline, T_0, T_0_0, T_0_A, T_0_i, T_A, T_i, T_overline, xa, xa_0, xi_0, xi_A, xi_i, y_i_1, and y_i_2.

270 :
271 Elem(uL, fOut),
272 Shell(uL, pDO, fOut),
273 
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) ),
277 
278 L_alpha_beta_i(NUMIP, fmh(4, 2) ),
279 L_alpha_beta_A(NUMSSEP, fmh(4, 2) ),
280 
281 B_overline_i(NUMIP, fmh(12, 24) ),
282 D_overline_i(NUMIP, fmh(15, 24) ),
283 G_i(NUMIP, fmh(15, 15) ),
284 
285 P_i(NUMIP, fmh(12, iGetNumDof()) ),
286 
288 
289 beta(iGetNumDof()),
290 epsilon_hat(12),
291 epsilon(12),
292 
293 #ifndef USE_CL_IN_SHELL
294 bPreStress(PreStress.Norm() > 0.),
296 #endif // ! USE_CL_IN_SHELL
297 
298 DRef(NUMIP, fmh(12, 12)),
299 stress_i(NUMIP, vh(12))
300 {
301 #ifdef USE_CL_IN_SHELL
302  for (integer i = 0; i < NUMIP; i++) {
303  pD[i] = 0;
306  ConstitutiveLawOwnerType(pDTmp[i]));
307  }
308 #else // ! USE_CL_IN_SHELL
309  for (unsigned i = 0; i < NUMIP; i++) {
310  DRef[i] = pDTmp;
311  }
312 #endif // ! USE_CL_IN_SHELL
313 
314  pNode[NODE1] = pN1;
315  pNode[NODE2] = pN2;
316  pNode[NODE3] = pN3;
317  pNode[NODE4] = pN4;
318 // f[NODE1] = f1;
319 // f[NODE2] = f2;
320 // f[NODE3] = f3;
321 // f[NODE4] = f4;
323 // UpdateNodalAndAveragePosAndOrientation();
324 // InterpolateOrientation();
325  // copy ref values
327  T_0_0 = T_0;
328  for (integer i = 0; i < NUMNODES; i++) {
329  xa_0[i] = xa[i];
330  }
331  for (integer i = 0; i < NUMIP; i++) {
332  T_0_i[i] = T_i[i];
333  }
334  for (integer i = 0; i < NUMSSEP; i++) {
335  T_0_A[i] = T_A[i];
336  }
337 
338 
339  fmh M_0(4, 4);
340  fmh M_0_Inv(4, 4);
341  {
342  Vec3 x_1 = InterpDeriv_xi1(xa, xi_0);
343  Vec3 x_2 = InterpDeriv_xi2(xa, xi_0);
344  S_alpha_beta_0(1, 1) = T_0_0.GetCol(1) * x_1;
345  S_alpha_beta_0(2, 1) = T_0_0.GetCol(2) * x_1;
346  S_alpha_beta_0(1, 2) = T_0_0.GetCol(1) * x_2;
347  S_alpha_beta_0(2, 2) = T_0_0.GetCol(2) * x_2;
348  alpha_0 = S_alpha_beta_0(1, 1) * S_alpha_beta_0(2, 2) -
349  S_alpha_beta_0(1, 2) * S_alpha_beta_0(2, 1);
350 
351  M_0(1, 1) = S_alpha_beta_0(1, 1) * S_alpha_beta_0(1, 1);
352  M_0(1, 2) = S_alpha_beta_0(1, 2) * S_alpha_beta_0(1, 2);
353  M_0(1, 3) = S_alpha_beta_0(1, 2) * S_alpha_beta_0(1, 1);
354  M_0(1, 4) = S_alpha_beta_0(1, 1) * S_alpha_beta_0(1, 2);
355 
356  M_0(2, 1) = S_alpha_beta_0(2, 1) * S_alpha_beta_0(2, 1);
357  M_0(2, 2) = S_alpha_beta_0(2, 2) * S_alpha_beta_0(2, 2);
358  M_0(2, 3) = S_alpha_beta_0(2, 2) * S_alpha_beta_0(2, 1);
359  M_0(2, 4) = S_alpha_beta_0(2, 1) * S_alpha_beta_0(2, 2);
360 
361  M_0(3, 1) = S_alpha_beta_0(1, 1) * S_alpha_beta_0(2, 1);
362  M_0(3, 2) = S_alpha_beta_0(1, 2) * S_alpha_beta_0(2, 2);
363  M_0(3, 3) = S_alpha_beta_0(1, 1) * S_alpha_beta_0(2, 2);
364  M_0(3, 4) = S_alpha_beta_0(1, 2) * S_alpha_beta_0(2, 1);
365 
366  M_0(4, 1) = S_alpha_beta_0(1, 1) * S_alpha_beta_0(2, 1);
367  M_0(4, 2) = S_alpha_beta_0(1, 2) * S_alpha_beta_0(2, 2);
368  M_0(4, 3) = S_alpha_beta_0(1, 2) * S_alpha_beta_0(2, 1);
369  M_0(4, 4) = S_alpha_beta_0(1, 1) * S_alpha_beta_0(2, 2);
370 
371  Inv4x4(M_0, M_0_Inv);
372  }
373 
374  for (integer i = 0; i < NUMIP; i++) {
375  fmh L_alpha_B_i(4, 2);
376  Vec3 x_1 = InterpDeriv_xi1(xa, xi_i[i]);
377  Vec3 x_2 = InterpDeriv_xi2(xa, xi_i[i]);
378  S_alpha_beta_i[i](1, 1) = T_0_i[i].GetCol(1) * x_1;
379  S_alpha_beta_i[i](2, 1) = T_0_i[i].GetCol(2) * x_1;
380  S_alpha_beta_i[i](1, 2) = T_0_i[i].GetCol(1) * x_2;
381  S_alpha_beta_i[i](2, 2) = T_0_i[i].GetCol(2) * x_2;
382  // alpha_i = det(S_alpha_beta_i)
383  alpha_i[i] = S_alpha_beta_i[i](1, 1) * S_alpha_beta_i[i](2, 2) -
384  S_alpha_beta_i[i](1, 2) * S_alpha_beta_i[i](2, 1);
385 
386  // xi_i_i = S_alpha_beta_i^{-1}
387  FullMatrixHandler xi_i_i(2, 2);
388  Inv2x2(S_alpha_beta_i[i], xi_i_i);
389 
390  for (integer n = 0; n < NUMNODES; n++) {
391  for (integer ii = 0; ii < 2; ii++) {
392  L_alpha_B_i(n + 1, ii + 1) = LI_J[n][ii](xi_i[i]);
393  }
394  }
395 
396  L_alpha_B_i.MatMatMul(L_alpha_beta_i[i], xi_i_i);
397 
398  fmh H(4, iGetNumDof());
399  doublereal t = xi_i[i][0] * xi_i[i][1];
400  H(1, 1) = xi_i[i][0];
401  H(1, 2) = t;
402 
403  H(2, 3) = xi_i[i][1];
404  H(2, 4) = t;
405 
406  H(3, 5) = xi_i[i][0];
407  H(3, 6) = t;
408 
409  H(4, 7) = xi_i[i][1];
410  H(4, 6) = t;
411 
412 // M_0_Inv.MatTMatMul(P_i[i], H);
413 // P_i[i].ScalarMul(alpha_0 / alpha_i[i]);
414 //
415 // //////////////
416  fmh Perm(12, 4), tmpP(4, iGetNumDof());
417  // 1, 5, 4, 2, 3, 6
418  Perm(1, 1) = 1.;
419  Perm(2, 3) = 1.;
420  Perm(4, 4) = 1.;
421  Perm(5, 2) = 1.;
422 
423  M_0_Inv.MatTMatMul(tmpP, H);
424  Perm.MatMatMul(P_i[i], tmpP);
425  P_i[i].ScalarMul(alpha_0 / alpha_i[i]);
426 
427  }
428  // save initial axial values
430  for (integer i = 0; i < NUMIP; i++) {
431  InterpDeriv(xa, L_alpha_beta_i[i], y_i_1[i], y_i_2[i]);
432  eps_tilde_1_0_i[i] = T_i[i].MulTV(y_i_1[i]);
433  eps_tilde_2_0_i[i] = T_i[i].MulTV(y_i_2[i]);
434  k_tilde_1_0_i[i] = T_i[i].MulTV(k_1_i[i]);
435  k_tilde_2_0_i[i] = T_i[i].MulTV(k_2_i[i]);
436  }
437  for (integer i = 0; i < NUMSSEP; i++) {
438  fmh L_alpha_B_A(4, 2);
439  Vec3 x_1 = InterpDeriv_xi1(xa, xi_A[i]);
440  Vec3 x_2 = InterpDeriv_xi2(xa, xi_A[i]);
441  S_alpha_beta_A[i](1, 1) = T_0_A[i].GetCol(1) * x_1;
442  S_alpha_beta_A[i](2, 1) = T_0_A[i].GetCol(2) * x_1;
443  S_alpha_beta_A[i](1, 2) = T_0_A[i].GetCol(1) * x_2;
444  S_alpha_beta_A[i](2, 2) = T_0_A[i].GetCol(2) * x_2;
445 
446  Vec3 y_A_1;
447  Vec3 y_A_2;
448  InterpDeriv(xa, L_alpha_beta_A[i], y_A_1, y_A_2);
449  eps_tilde_1_0_A[i] = T_A[i].MulTV(y_A_1);
450  eps_tilde_2_0_A[i] = T_A[i].MulTV(y_A_2);
451 
452  // xi_A_i = S_alpha_beta_A^{-1}
453  FullMatrixHandler xi_A_i(2, 2);
454  Inv2x2(S_alpha_beta_A[i], xi_A_i);
455 
456  for (integer n = 0; n < NUMNODES; n++) {
457  for (integer ii = 0; ii < 2; ii++) {
458  L_alpha_B_A(n + 1, ii + 1) = LI_J[n][ii](xi_A[i]);
459  }
460  }
461 
462  L_alpha_B_A.MatMatMul(L_alpha_beta_A[i], xi_A_i);
463 
464  }
465  {
466  Vec3 y_A_1;
467  Vec3 y_A_2;
468  for (integer i = 0; i < NUMSSEP; i++) {
469  InterpDeriv(xa, L_alpha_beta_A[i], y_A_1, y_A_2);
470  eps_tilde_1_0_A[i] = T_A[i].MulTV(y_A_1);
471  eps_tilde_2_0_A[i] = T_A[i].MulTV(y_A_2);
472  }
473  }
474 }
static doublereal xi_0[2]
Definition: shelleasans.h:142
Vec3 y_i_2[NUMIP]
Definition: shelleasans.h:267
Vec3 k_1_i[NUMIP]
Definition: shelleasans.h:206
fmh S_alpha_beta_0
Definition: shelleasans.h:249
Definition: matvec3.h:98
Mat3x3 T_0_A[NUMSSEP]
Definition: shelleasans.h:185
doublereal alpha_0
Definition: shelleasans.h:252
vfmh S_alpha_beta_A
Definition: shelleasans.h:251
Vec3 y_i_1[NUMIP]
Definition: shelleasans.h:266
static doublereal xi_i[NUMIP][2]
Definition: shelleasans.h:116
Vec3 xa_0[NUMNODES]
Definition: shelleasans.h:162
Vec3 k_tilde_2_0_i[NUMIP]
Definition: shelleasans.h:226
Vec3 GetCol(unsigned short int i) const
Definition: matvec3.h:903
Vec3 k_tilde_1_0_i[NUMIP]
Definition: shelleasans.h:225
Mat3x3 T_A[NUMSSEP]
Definition: shelleasans.h:189
vfmh L_alpha_beta_i
Definition: shelleasans.h:254
vfmh S_alpha_beta_i
Definition: shelleasans.h:250
Shell(unsigned uLabel, const DofOwner *pDO, flag fOut)
Definition: shell.cc:47
void ComputeInitialNodeOrientation()
Definition: shelleasans.cc:138
virtual doublereal Norm(void) const
Definition: vh.cc:262
Vec3 xa[NUMNODES]
Definition: shelleasans.h:163
Vec3 MulTV(const Vec3 &v) const
Definition: matvec3.cc:482
Mat3x3 T_i[NUMIP]
Definition: shelleasans.h:188
vfmh D_overline_i
Definition: shelleasans.h:259
doublereal alpha_i[NUMIP]
Definition: shelleasans.h:253
Vec3 eps_tilde_1_0_A[NUMSSEP]
Definition: shelleasans.h:215
Vec3 eps_tilde_1_0_i[NUMIP]
Definition: shelleasans.h:213
Mat3x3 T0_overline
Definition: shelleasans.h:177
virtual unsigned int iGetNumDof(void) const
Definition: shelleasans.h:336
vfmh L_alpha_beta_A
Definition: shelleasans.h:255
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
Definition: mynewmem.h:698
vfmh K_beta_beta_i
Definition: shelleasans.h:264
vfmh B_overline_i
Definition: shelleasans.h:257
Mat3x3 T_overline
Definition: shelleasans.h:179
Mat3x3 T_0_i[NUMIP]
Definition: shelleasans.h:184
const StructNode * pNode[NUMNODES]
Definition: shelleasans.h:153
Vec3 eps_tilde_2_0_i[NUMIP]
Definition: shelleasans.h:214
Vec3 eps_tilde_2_0_A[NUMSSEP]
Definition: shelleasans.h:216
static doublereal xi_A[NUMSSEP][2]
Definition: shelleasans.h:129
FullMatrixHandler fmh
Definition: shell.h:82
void ComputeIPCurvature()
Definition: shelleasans.cc:229
Vec3 k_2_i[NUMIP]
Definition: shelleasans.h:207
Elem(unsigned int uL, flag fOut)
Definition: elem.cc:41
double doublereal
Definition: colamd.c:52
long int integer
Definition: colamd.c:51
ConstitutiveLawOwner< vh, fmh > ConstitutiveLawOwnerType
Definition: shell.h:84
MyVectorHandler vh
Definition: shell.h:80
Mat3x3 T_0_0
Definition: shelleasans.h:183

Here is the call graph for this function:

Shell4EASANS::~Shell4EASANS ( void  )
virtual

Definition at line 476 of file shelleasans.cc.

References ASSERT, NUMIP, and SAFEDELETE.

477 {
478 #ifdef USE_CL_IN_SHELL
479  for (integer i = 0; i < NUMIP; i++) {
480  ASSERT(pD[i] != 0);
481  if (pD[i] != 0) {
482  SAFEDELETE(pD[i]);
483  }
484  }
485 #endif // USE_CL_IN_SHELL
486 }
#define ASSERT(expression)
Definition: colamd.c:977
long int integer
Definition: colamd.c:51
#define SAFEDELETE(pnt)
Definition: mynewmem.h:710

Member Function Documentation

virtual void Shell4EASANS::AddInternalForces ( Vec6 ,
unsigned  int 
)
inlineprotectedvirtual

Definition at line 294 of file shelleasans.h.

References NO_OP.

294  {
295  NO_OP;
296  };
#define NO_OP
Definition: myassert.h:74
VariableSubMatrixHandler & Shell4EASANS::AssJac ( VariableSubMatrixHandler WorkMat,
doublereal  dCoef,
const VectorHandler XCurr,
const VectorHandler XPrimeCurr 
)
virtual

Implements Elem.

Definition at line 715 of file shelleasans.cc.

References FullSubMatrixHandler::Add(), FullSubMatrixHandler::AddT(), alpha_i, B_overline_i, D_overline_i, DRef, G_i, DofOwnerOwner::iGetFirstIndex(), StructDispNode::iGetFirstMomentumIndex(), StructDispNode::iGetFirstPositionIndex(), iGetNumDof(), MatrixHandler::MatMatMul(), NUMIP, P_i, pNode, FullSubMatrixHandler::PutColIndex(), FullSubMatrixHandler::PutRowIndex(), FullSubMatrixHandler::ResizeReset(), VariableSubMatrixHandler::SetFull(), w_i, and WorkSpaceDim().

719 {
720  FullSubMatrixHandler& WM = WorkMat.SetFull();
721 
722  /* Dimensiona e resetta la matrice di lavoro */
723  integer iNumRows = 0;
724  integer iNumCols = 0;
725  WorkSpaceDim(&iNumRows, &iNumCols);
726  WM.ResizeReset(iNumRows, iNumCols);
727 
728  /* Recupera e setta gli indici */
729  integer iFirstReactionIndex = iGetFirstIndex();
730  for (integer i = 0; i < 4; i++) {
731  integer iNodeFirstMomIndex = pNode[i]->iGetFirstMomentumIndex();
732  integer iNodeFirstPosIndex = pNode[i]->iGetFirstPositionIndex();
733  for (int iCnt = 1; iCnt <= 6; iCnt++) {
734  WM.PutRowIndex(iCnt + 6 * i, iNodeFirstMomIndex + iCnt);
735  WM.PutColIndex(iCnt + 6 * i, iNodeFirstPosIndex + iCnt);
736  }
737  }
738  for (unsigned int iCnt = 1; iCnt <= iGetNumDof(); iCnt++) {
739  WM.PutRowIndex(24 + iCnt, iFirstReactionIndex + iCnt);
740  WM.PutColIndex(24 + iCnt, iFirstReactionIndex + iCnt);
741  }
742 
743  // tangente
744 
745  FullMatrixHandler Kg(24, 24);
746  FullMatrixHandler Km(24, 24);
747  FullMatrixHandler K_beta_q(iGetNumDof(), 24);
748  FullMatrixHandler K_beta_beta(iGetNumDof(), iGetNumDof());
749 
750  FullMatrixHandler Ktg(24, 15);
751  FullMatrixHandler Ktm(24, 12);
752 
753  FullMatrixHandler Ktbetaq(iGetNumDof(), 12);
754 
755  FullMatrixHandler C(12, 12);
756  for (integer i = 0; i < NUMIP; i++) {
757  D_overline_i[i].MatTMatMul(Ktg, G_i[i]);
758  Ktg.MatMatMul(Kg, D_overline_i[i]);
759 
760 #ifdef USE_CL_IN_SHELL
761  C = pD[i]->GetFDE();
762 #else // ! USE_CL_IN_SHELL
763  C = DRef[i];
764 #endif // ! USE_CL_IN_SHELL
765 
766  B_overline_i[i].MatTMatMul(Ktm, C);
767 
768  Ktm.MatMatMul(Km, B_overline_i[i]);
769 
770  // extract Cm matrix from C
771 
772  P_i[i].MatTMatMul(Ktbetaq, C);
773  Ktbetaq.MatMatMul(K_beta_q, B_overline_i[i]);
774 
775  Ktbetaq.MatMatMul(K_beta_beta, P_i[i]);
776 
777 // std::cerr << "Kg:\n" << std::fixed << std::setprecision(12) << Kg << std::endl;
778 // std::cerr << "Km:\n" << std::fixed << std::setprecision(12) << Km << std::endl;
779 
780  // AssembleMatrix(WM, 1, 1, Kg, alpha_i[i] * w_i[i] * dCoef);
781 
782  // AssembleMatrix(WM, 1, 1, Km, alpha_i[i] * w_i[i] * dCoef);
783 
784  // AssembleTransposeMatrix(WM, 1, 25, K_beta_q, alpha_i[i] * w_i[i]);
785  // AssembleMatrix(WM, 25, 1, K_beta_q, alpha_i[i] * w_i[i]);
786  // AssembleMatrix(WM, 25, 25, K_beta_beta, alpha_i[i] * w_i[i] / dCoef);
787 
788  WM.Add(1, 1, Kg, alpha_i[i] * w_i[i] * dCoef);
789 
790  WM.Add(1, 1, Km, alpha_i[i] * w_i[i] * dCoef);
791 
792  WM.AddT(1, 25, K_beta_q, alpha_i[i] * w_i[i]);
793  WM.Add(25, 1, K_beta_q, alpha_i[i] * w_i[i]);
794  WM.Add(25, 25, K_beta_beta, alpha_i[i] * w_i[i] / dCoef);
795  }
796  return WorkMat;
797 
798 }
void PutColIndex(integer iSubCol, integer iCol)
Definition: submat.h:325
static doublereal w_i[NUMIP]
Definition: shelleasans.h:117
FullSubMatrixHandler & SetFull(void)
Definition: submat.h:1168
void Add(integer iRow, integer iCol, const Vec3 &v)
Definition: submat.cc:209
void AddT(integer iRow, integer iCol, const Vec3 &v)
Definition: submat.cc:227
vfmh D_overline_i
Definition: shelleasans.h:259
doublereal alpha_i[NUMIP]
Definition: shelleasans.h:253
virtual unsigned int iGetNumDof(void) const
Definition: shelleasans.h:336
virtual integer iGetFirstMomentumIndex(void) const =0
virtual integer iGetFirstPositionIndex(void) const
Definition: strnode.h:452
vfmh B_overline_i
Definition: shelleasans.h:257
virtual void ResizeReset(integer, integer)
Definition: submat.cc:182
const StructNode * pNode[NUMNODES]
Definition: shelleasans.h:153
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: shelleasans.h:366
void PutRowIndex(integer iSubRow, integer iRow)
Definition: submat.h:311
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

SubVectorHandler & Shell4EASANS::AssRes ( SubVectorHandler WorkVec,
doublereal  dCoef,
const VectorHandler XCurr,
const VectorHandler XPrimeCurr 
)
virtual

Implements Elem.

Definition at line 488 of file shelleasans.cc.

References alpha_i, B_overline_i, beta, bPreStress, ComputeIPCurvature(), FullMatrixHandler::CopyMatrixRow(), D_overline_i, Vec3::Dot(), DRef, eps_tilde_1_0_A, eps_tilde_1_0_i, eps_tilde_1_A, eps_tilde_1_i, eps_tilde_2_0_A, eps_tilde_2_0_i, eps_tilde_2_A, eps_tilde_2_i, epsilon, epsilon_hat, G_i, DofOwnerOwner::iGetFirstIndex(), StructDispNode::iGetFirstMomentumIndex(), iGetNumDof(), InterpolateOrientation(), k_1_i, k_2_i, k_tilde_1_0_i, k_tilde_1_i, k_tilde_2_0_i, k_tilde_2_i, Kappa_delta_i_1, Kappa_delta_i_2, L_alpha_beta_A, L_alpha_beta_i, MatCross, MatrixHandler::MatMatMul(), mb_deye< Mat3x3 >(), Mat3x3::MulTV(), NUMIP, NUMNODES, NUMSSEP, P_i, Phi_Delta_A, Phi_Delta_i, phi_tilde_n, pNode, PreStress, MyVectorHandler::Put(), FullMatrixHandler::Put(), SubVectorHandler::PutRowIndex(), FullMatrixHandler::PutT(), FullMatrixHandler::Reset(), VectorHandler::ResizeReset(), stress_i, T_A, T_i, Vec3::Tens(), UpdateNodalAndAveragePosAndOrientation(), w_i, WorkSpaceDim(), xa, xi_A, xi_i, y_i_1, y_i_2, and Zero3.

492 {
493  /* Dimensiona e resetta la matrice di lavoro */
494  integer iNumRows = 0;
495  integer iNumCols = 0;
496  WorkSpaceDim(&iNumRows, &iNumCols);
497  WorkVec.ResizeReset(iNumRows);
498 
499  /* Recupera e setta gli indici */
500  for (integer i = 0; i < 4; i++) {
501  integer iNodeFirstMomIndex = pNode[i]->iGetFirstMomentumIndex();
502  for (int iCnt = 1; iCnt <= 6; iCnt++) {
503  WorkVec.PutRowIndex(iCnt + 6 * i, iNodeFirstMomIndex + iCnt);
504  }
505  }
506 
507  integer iFirstReactionIndex = iGetFirstIndex();
508  for (unsigned int iCnt = 1; iCnt <= iGetNumDof(); iCnt++) {
509  WorkVec.PutRowIndex(24 + iCnt, iFirstReactionIndex + iCnt);
510  }
511 
514 // ComputeIPSEPRotations();
515  for (unsigned int i = 1; i <= iGetNumDof(); i++) {
516  beta(i) = XCurr(iFirstReactionIndex + i);
517  }
518 
519 
521  for (integer i = 0; i < NUMIP; i++) {
522  InterpDeriv(xa, L_alpha_beta_i[i], y_i_1[i], y_i_2[i]);
523  eps_tilde_1_i[i] = T_i[i].MulTV(y_i_1[i]) - eps_tilde_1_0_i[i];
524  eps_tilde_2_i[i] = T_i[i].MulTV(y_i_2[i]) - eps_tilde_2_0_i[i];
525  k_tilde_1_i[i] = T_i[i].MulTV(k_1_i[i]) - k_tilde_1_0_i[i];
526  k_tilde_2_i[i] = T_i[i].MulTV(k_2_i[i]) - k_tilde_2_0_i[i];
527  // parte variabile di B_overline_i
528  for (integer n = 0; n < NUMNODES; n++) {
529  Mat3x3 Phi_Delta_i_n_LI_i = Phi_Delta_i[i][n] * LI[n](xi_i[i]);
530 
531  // delta epsilon_tilde_1_i
532  B_overline_i[i].PutT(1, 1 + 6 * n, T_i[i] * L_alpha_beta_i[i](n + 1, 1));
533  B_overline_i[i].Put(1, 4 + 6 * n, T_i[i].MulTM(Mat3x3(MatCross, y_i_1[i])) * Phi_Delta_i_n_LI_i);
534 
535  // delta epsilon_tilde_2_i
536  B_overline_i[i].PutT(4, 1 + 6 * n, T_i[i] * L_alpha_beta_i[i](n + 1, 2));
537  B_overline_i[i].Put(4, 4 + 6 * n, T_i[i].MulTM(Mat3x3(MatCross, y_i_2[i])) * Phi_Delta_i_n_LI_i);
538 
539  // delta k_tilde_1_i
540  Vec3 phi_tilde_1_i(Zero3);
541  Vec3 phi_tilde_2_i(Zero3);
542  InterpDeriv(phi_tilde_n, L_alpha_beta_i[i], phi_tilde_1_i, phi_tilde_2_i);
543  B_overline_i[i].Put(7, 4 + 6 * n,
544  T_i[i].MulTM(Mat3x3(MatCross, k_1_i[i])) * Phi_Delta_i_n_LI_i
545  +
546  T_i[i].MulTM(Kappa_delta_i_1[i][n])
547  );
548 
549  // delta k_tilde_2_i
550  B_overline_i[i].Put(10, 4 + 6 * n,
551  T_i[i].MulTM(Mat3x3(MatCross, k_2_i[i])) * Phi_Delta_i_n_LI_i
552  +
553  T_i[i].MulTM(Kappa_delta_i_2[i][n])
554  );
555 
556  // delta y_alpha_1
557  D_overline_i[i].Put(1, 1 + n * 6, mb_deye<Mat3x3>(L_alpha_beta_i[i](n + 1, 1)));
558 
559  // delta y_alpha_2
560  D_overline_i[i].Put(4, 1 + n * 6, mb_deye<Mat3x3>(L_alpha_beta_i[i](n + 1, 2)));
561 
562  // delta k_1_i
563  D_overline_i[i].Put(7, 4 + n * 6, Kappa_delta_i_1[i][n]);
564 
565  // delta k_1_i
566  D_overline_i[i].Put(10, 4 + n * 6, Kappa_delta_i_2[i][n]);
567 
568  // phi_delta
569  D_overline_i[i].Put(13, 4 + n * 6, Phi_Delta_i_n_LI_i);
570  }
571  }
572  // ANS
573  {
574  fmh B_overline_A(6, 24);
575  Vec3 y_A_1;
576  Vec3 y_A_2;
577  fmh B_overline_3_ABCD(4, 24);
578  fmh B_overline_6_ABCD(4, 24);
579  for (integer i = 0; i < NUMSSEP; i++) {
580  B_overline_A.Reset();
581  InterpDeriv(xa, L_alpha_beta_A[i], y_A_1, y_A_2);
582  eps_tilde_1_A[i] = T_A[i].MulTV(y_A_1) - eps_tilde_1_0_A[i];
583  eps_tilde_2_A[i] = T_A[i].MulTV(y_A_2) - eps_tilde_2_0_A[i];
584  for (integer n = 0; n < NUMNODES; n++) {
585  Mat3x3 Phi_Delta_A_n_LI_i = Phi_Delta_A[i][n] * LI[n](xi_A[i]);
586 
587  // delta epsilon_tilde_1_A
588  B_overline_A.PutT(1, 1 + 6 * n, T_A[i] * L_alpha_beta_A[i](n + 1, 1));
589  B_overline_A.Put(1, 4 + 6 * n,
590  T_A[i].MulTM(Mat3x3(MatCross, y_A_1)) * Phi_Delta_A_n_LI_i
591  );
592 
593  // delta epsilon_tilde_2_A
594  B_overline_A.PutT(4, 1 + 6 * n, T_A[i] * L_alpha_beta_A[i](n + 1, 2));
595  B_overline_A.Put(4, 4 + 6 * n,
596  T_A[i].MulTM(Mat3x3(MatCross, y_A_2)) * Phi_Delta_A_n_LI_i
597  );
598  }
599 #if 0
600  CopyMatrixRow(B_overline_3_ABCD, i + 1, B_overline_A, 3);
601  CopyMatrixRow(B_overline_6_ABCD, i + 1, B_overline_A, 6);
602 #endif
603  B_overline_3_ABCD.CopyMatrixRow(i + 1, B_overline_A, 3);
604  B_overline_6_ABCD.CopyMatrixRow(i + 1, B_overline_A, 6);
605  }
606  fmh tmp_B_ANS(1, 24);
607  for (integer i = 0; i < NUMIP; i++) {
608  FullMatrixHandler sh1(1, 4);
609  FullMatrixHandler sh2(1, 4);
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;
614 
615  eps_tilde_1_i[i](3) =
616  sh1(1, 1) * eps_tilde_1_A[0](3) +
617  sh1(1, 3) * eps_tilde_1_A[2](3)
618  ;
619  eps_tilde_2_i[i](3) =
620  sh2(1, 2) * eps_tilde_2_A[1](3) +
621  sh2(1, 4) * eps_tilde_2_A[3](3)
622  ;
623 
624  sh1.MatMatMul(tmp_B_ANS, B_overline_3_ABCD);
625 #if 0
626  CopyMatrixRow(B_overline_i[i], 3, tmp_B_ANS, 1);
627 #endif
628  B_overline_i[i].CopyMatrixRow(3, tmp_B_ANS, 1);
629 
630  sh2.MatMatMul(tmp_B_ANS, B_overline_6_ABCD);
631 #if 0
632  CopyMatrixRow(B_overline_i[i], 6, tmp_B_ANS, 1);
633 #endif
634  B_overline_i[i].CopyMatrixRow(6, tmp_B_ANS, 1);
635  }
636  }
637 
638  // EAS: B membranali
639 // {
640 // integer tmpidx1[5] = {0, 1, 5, 4, 2};
641 // for (integer i = 0; i < NUMIP; i++) {
642 // for (integer n = 1; n <= 4; n++) {
643 //#if 0
644 // CopyMatrixRow(B_overline_m_i[i], n, B_overline_i[i], tmpidx1[n]);
645 //#endif
646 // B_overline_m_i[i].CopyMatrixRow(n, B_overline_i[i], tmpidx1[n]);
647 // }
648 // }
649 // }
650 
651  /* Calcola le azioni interne */
652  for (integer i = 0; i < NUMIP; i++) {
653  epsilon.Put(1, eps_tilde_1_i[i]);
654  epsilon.Put(4, eps_tilde_2_i[i]);
655  epsilon.Put(7, k_tilde_1_i[i]);
656  epsilon.Put(10, k_tilde_2_i[i]);
657  // TODO: recupera epsilon_hat con l'ordine giusto per qua
658  P_i[i].MatVecMul(epsilon_hat, beta);
659 
660  epsilon += epsilon_hat;
661 #ifdef USE_CL_IN_SHELL
662  pD[i]->Update(epsilon);
663  stress_i[i] = pD[i]->GetF();
664 #else // ! USE_CL_IN_SHELL
665  DRef[i].MatVecMul(stress_i[i], epsilon);
666  if (bPreStress) {
667  stress_i[i] += PreStress;
668  }
669 #endif // ! USE_CL_IN_SHELL
670 
671  Vec3 n1, n2, m1, m2;
672  ExtractVec3(n1, stress_i[i], 1);
673  ExtractVec3(n2, stress_i[i], 4);
674  ExtractVec3(m1, stress_i[i], 7);
675  ExtractVec3(m2, stress_i[i], 10);
676 
677  Mat3x3 Hh;
678  Vec3 Tn1 = T_i[i] * n1;
679  Vec3 Tn2 = T_i[i] * n2;
680  Vec3 Tm1 = T_i[i] * m1;
681  Vec3 Tm2 = T_i[i] * m2;
682  Hh = Tn1.Tens(y_i_1[i]) - mb_deye<Mat3x3>(Tn1.Dot(y_i_1[i]))
683  + Tn2.Tens(y_i_2[i]) - mb_deye<Mat3x3>(Tn2.Dot(y_i_2[i]))
684  + Tm1.Tens(k_1_i[i]) - mb_deye<Mat3x3>(Tm1.Dot(k_1_i[i]))
685  + Tm2.Tens(k_2_i[i]) - mb_deye<Mat3x3>(Tm2.Dot(k_2_i[i]))
686  ;
687 
688  // NOTE: use PutCross()?
689  G_i[i].PutT(1, 13, Mat3x3(MatCross, Tn1));
690  G_i[i].PutT(4, 13, Mat3x3(MatCross, Tn2));
691  G_i[i].Put(13, 7, Mat3x3(MatCross, Tm1));
692  G_i[i].Put(13, 10, Mat3x3(MatCross, Tm2));
693  G_i[i].Put(13, 1, Mat3x3(MatCross, Tn1));
694  G_i[i].Put(13, 4, Mat3x3(MatCross, Tn2));
695  G_i[i].Put(13, 13, Hh);
696  }
697 
698  //Residuo
699  //forze di volume
700  MyVectorHandler rd(24);
701  MyVectorHandler rbeta(iGetNumDof());
702  for (integer i = 0; i < NUMIP; i++) {
703  B_overline_i[i].MatTVecMul(rd, stress_i[i]);
704  P_i[i].MatTVecMul(rbeta, stress_i[i]);
705 
706  AssembleVector(WorkVec, 1, rd, -alpha_i[i] * w_i[i]);
707  AssembleVector(WorkVec, 25, rbeta, -alpha_i[i] * w_i[i] / dCoef);
708  }
709 
710  return WorkVec;
711 }
Mat3x3 Phi_Delta_i[NUMIP][NUMNODES]
Definition: shelleasans.h:191
Vec3 eps_tilde_2_A[NUMSSEP]
Definition: shelleasans.h:221
Vec3 y_i_2[NUMIP]
Definition: shelleasans.h:267
Mat3x3 Kappa_delta_i_1[NUMIP][NUMNODES]
Definition: shelleasans.h:193
Vec3 k_1_i[NUMIP]
Definition: shelleasans.h:206
const Vec3 Zero3(0., 0., 0.)
static doublereal w_i[NUMIP]
Definition: shelleasans.h:117
Definition: matvec3.h:98
virtual void ResizeReset(integer)
Definition: vh.cc:55
const MatCross_Manip MatCross
Definition: matvec3.cc:639
Vec3 y_i_1[NUMIP]
Definition: shelleasans.h:266
doublereal Dot(const Vec3 &v) const
Definition: matvec3.h:243
static doublereal xi_i[NUMIP][2]
Definition: shelleasans.h:116
Vec3 k_tilde_2_0_i[NUMIP]
Definition: shelleasans.h:226
Mat3x3 Phi_Delta_A[NUMIP][NUMNODES]
Definition: shelleasans.h:192
Vec3 k_tilde_1_0_i[NUMIP]
Definition: shelleasans.h:225
Mat3x3 T_A[NUMSSEP]
Definition: shelleasans.h:189
Vec3 k_tilde_2_i[NUMIP]
Definition: shelleasans.h:229
vfmh L_alpha_beta_i
Definition: shelleasans.h:254
virtual void Put(integer iRow, const Vec3 &v)
Definition: vh.cc:699
Mat3x3 mb_deye< Mat3x3 >(const doublereal d)
Definition: matvec3.h:1584
Vec3 xa[NUMNODES]
Definition: shelleasans.h:163
void InterpolateOrientation()
Definition: shelleasans.cc:185
Vec3 MulTV(const Vec3 &v) const
Definition: matvec3.cc:482
Mat3x3 T_i[NUMIP]
Definition: shelleasans.h:188
vfmh D_overline_i
Definition: shelleasans.h:259
virtual void PutRowIndex(integer iSubRow, integer iRow)=0
doublereal alpha_i[NUMIP]
Definition: shelleasans.h:253
Vec3 eps_tilde_1_0_A[NUMSSEP]
Definition: shelleasans.h:215
Vec3 eps_tilde_2_i[NUMIP]
Definition: shelleasans.h:219
Vec3 eps_tilde_1_i[NUMIP]
Definition: shelleasans.h:218
Vec3 eps_tilde_1_0_i[NUMIP]
Definition: shelleasans.h:213
virtual unsigned int iGetNumDof(void) const
Definition: shelleasans.h:336
vfmh L_alpha_beta_A
Definition: shelleasans.h:255
Vec3 phi_tilde_n[NUMNODES]
Definition: shelleasans.h:169
virtual integer iGetFirstMomentumIndex(void) const =0
Mat3x3 Tens(const Vec3 &v) const
Definition: matvec3.cc:53
vfmh B_overline_i
Definition: shelleasans.h:257
Vec3 eps_tilde_1_A[NUMSSEP]
Definition: shelleasans.h:220
const StructNode * pNode[NUMNODES]
Definition: shelleasans.h:153
virtual void WorkSpaceDim(integer *piNumRows, integer *piNumCols) const
Definition: shelleasans.h:366
Vec3 eps_tilde_2_0_i[NUMIP]
Definition: shelleasans.h:214
Vec3 eps_tilde_2_0_A[NUMSSEP]
Definition: shelleasans.h:216
Vec3 k_tilde_1_i[NUMIP]
Definition: shelleasans.h:228
static doublereal xi_A[NUMSSEP][2]
Definition: shelleasans.h:129
void UpdateNodalAndAveragePosAndOrientation()
Definition: shelleasans.cc:116
FullMatrixHandler fmh
Definition: shell.h:82
void ComputeIPCurvature()
Definition: shelleasans.cc:229
void Put(unsigned short int iRow, unsigned short int iCol, const doublereal &dCoef)
Definition: matvec3.h:758
virtual integer iGetFirstIndex(void) const
Definition: dofown.h:127
Vec3 k_2_i[NUMIP]
Definition: shelleasans.h:207
long int integer
Definition: colamd.c:51
Mat3x3 Kappa_delta_i_2[NUMIP][NUMNODES]
Definition: shelleasans.h:194

Here is the call graph for this function:

void Shell4EASANS::ComputeInitialNodeOrientation ( void  )
private

Definition at line 138 of file shelleasans.cc.

References Vec3::Cross(), Eye3, StructNode::GetRCurr(), StructDispNode::GetXCurr(), InterpolateOrientation(), iTa, iTa_A, iTa_i, Vec3::Norm(), NUMIP, NUMNODES, NUMSSEP, pNode, T_A, T_i, UpdateNodalAndAveragePosAndOrientation(), xa, xi_A, xi_i, and xi_n.

Referenced by Shell4EASANS().

139 {
140  for (integer i = 0; i < NUMNODES; i++) {
141  xa[i] = pNode[i]->GetXCurr();
142  }
143  for (integer i = 0; i < NUMNODES; i++) {
144  Vec3 t1 = InterpDeriv_xi1(xa, xi_n[i]);
145  t1 = t1 / t1.Norm();
146  Vec3 t2 = InterpDeriv_xi2(xa, xi_n[i]);
147  t2 = t2 / t2.Norm();
148  Vec3 t3 = t1.Cross(t2);
149  t3 = t3 / t3.Norm();
150  t2 = t3.Cross(t1);
151  iTa[i] = (pNode[i]->GetRCurr()).MulTM(Mat3x3(t1, t2, t3));
152  }
153  for (integer i = 0; i < NUMIP; i++) {
154  iTa_i[i] = Eye3;
155  }
156  for (integer i = 0; i < NUMSSEP; i++) {
157  iTa_A[i] = Eye3;
158  }
161  for (integer i = 0; i < NUMIP; i++) {
162  Vec3 t1 = InterpDeriv_xi1(xa, xi_i[i]);
163  t1 = t1 / t1.Norm();
164  Vec3 t2 = InterpDeriv_xi2(xa, xi_i[i]);
165  t2 = t2 / t2.Norm();
166  Vec3 t3 = t1.Cross(t2);
167  t3 = t3 / t3.Norm();
168  t2 = t3.Cross(t1);
169  iTa_i[i] = (T_i[i]).MulTM(Mat3x3(t1, t2, t3));
170  }
171  for (integer i = 0; i < NUMSSEP; i++) {
172  Vec3 t1 = InterpDeriv_xi1(xa, xi_A[i]);
173  t1 = t1 / t1.Norm();
174  Vec3 t2 = InterpDeriv_xi2(xa, xi_A[i]);
175  t2 = t2 / t2.Norm();
176  Vec3 t3 = t1.Cross(t2);
177  t3 = t3 / t3.Norm();
178  t2 = t3.Cross(t1);
179  iTa_A[i] = (T_A[i]).MulTM(Mat3x3(t1, t2, t3));
180  }
182 }
Vec3 Cross(const Vec3 &v) const
Definition: matvec3.h:218
Definition: matvec3.h:98
virtual const Mat3x3 & GetRCurr(void) const
Definition: strnode.h:1012
doublereal Norm(void) const
Definition: matvec3.h:263
static doublereal xi_i[NUMIP][2]
Definition: shelleasans.h:116
const Mat3x3 Eye3(1., 0., 0., 0., 1., 0., 0., 0., 1.)
Mat3x3 T_A[NUMSSEP]
Definition: shelleasans.h:189
Vec3 xa[NUMNODES]
Definition: shelleasans.h:163
void InterpolateOrientation()
Definition: shelleasans.cc:185
Mat3x3 T_i[NUMIP]
Definition: shelleasans.h:188
Mat3x3 iTa_A[NUMSSEP]
Definition: shelleasans.h:167
Mat3x3 iTa_i[NUMIP]
Definition: shelleasans.h:166
virtual const Vec3 & GetXCurr(void) const
Definition: strnode.h:310
static doublereal xi_n[NUMNODES][2]
Definition: shelleasans.h:140
const StructNode * pNode[NUMNODES]
Definition: shelleasans.h:153
Mat3x3 iTa[NUMNODES]
Definition: shelleasans.h:165
static doublereal xi_A[NUMSSEP][2]
Definition: shelleasans.h:129
void UpdateNodalAndAveragePosAndOrientation()
Definition: shelleasans.cc:116
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

void Shell4EASANS::ComputeIPCurvature ( void  )
private

Definition at line 229 of file shelleasans.cc.

References RotManip::DRot(), RotManip::DRot_I(), RotManip::Elle(), k_1_i, k_2_i, Kappa_delta_i_1, Kappa_delta_i_2, L_alpha_beta_i, Mat3x3::MulMT(), NUMIP, NUMNODES, Phi_Delta_i, phi_tilde_i, phi_tilde_n, T_overline, xi_i, and Zero3.

Referenced by AssRes(), and Shell4EASANS().

230 {
231  Mat3x3 Gamma_I_n_MT_T_overline[NUMNODES];
232  for (integer n = 0; n < NUMNODES; n++) {
233  Gamma_I_n_MT_T_overline[n] = RotManip::DRot_I(phi_tilde_n[n]).MulMT(T_overline);
234  }
235  for (integer i = 0; i < NUMIP; i++) {
236  Vec3 phi_tilde_1_i(Zero3);
237  Vec3 phi_tilde_2_i(Zero3);
238  InterpDeriv(phi_tilde_n, L_alpha_beta_i[i], phi_tilde_1_i, phi_tilde_2_i);
239  Mat3x3 T_overlineGamma_tilde_i(T_overline * RotManip::DRot(phi_tilde_i[i]));
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;
242  Mat3x3 tmp1 = T_overline * RotManip::Elle(phi_tilde_i[i], phi_tilde_1_i);
243  Mat3x3 tmp2 = T_overline * RotManip::Elle(phi_tilde_i[i], phi_tilde_2_i);
244  for (int n = 0; n < NUMNODES; n++) {
245  Kappa_delta_i_1[i][n] = tmp1 * Gamma_I_n_MT_T_overline[n] * LI[n](xi_i[i]) +
246  Phi_Delta_i[i][n] * L_alpha_beta_i[i](n + 1, 1);
247  Kappa_delta_i_2[i][n] = tmp2 * Gamma_I_n_MT_T_overline[n] * LI[n](xi_i[i]) +
248  Phi_Delta_i[i][n] * L_alpha_beta_i[i](n + 1, 2);
249  }
250  }
251 }
Mat3x3 Phi_Delta_i[NUMIP][NUMNODES]
Definition: shelleasans.h:191
Mat3x3 Kappa_delta_i_1[NUMIP][NUMNODES]
Definition: shelleasans.h:193
Vec3 k_1_i[NUMIP]
Definition: shelleasans.h:206
const Vec3 Zero3(0., 0., 0.)
Definition: matvec3.h:98
Mat3x3 DRot(const Vec3 &phi)
Definition: Rot.cc:74
static doublereal xi_i[NUMIP][2]
Definition: shelleasans.h:116
vfmh L_alpha_beta_i
Definition: shelleasans.h:254
Vec3 phi_tilde_i[NUMIP]
Definition: shelleasans.h:172
Vec3 phi_tilde_n[NUMNODES]
Definition: shelleasans.h:169
Mat3x3 Elle(const Vec3 &phi, const Vec3 &a)
Definition: Rot.cc:179
Mat3x3 T_overline
Definition: shelleasans.h:179
Mat3x3 MulMT(const Mat3x3 &m) const
Definition: matvec3.cc:444
Vec3 k_2_i[NUMIP]
Definition: shelleasans.h:207
long int integer
Definition: colamd.c:51
Mat3x3 DRot_I(const Vec3 &phi)
Definition: Rot.cc:111
Mat3x3 Kappa_delta_i_2[NUMIP][NUMNODES]
Definition: shelleasans.h:194

Here is the call graph for this function:

virtual void Shell4EASANS::GetConnectedNodes ( std::vector< const Node * > &  connectedNodes) const
inlinevirtual

Reimplemented from Elem.

Definition at line 452 of file shelleasans.h.

References NUMNODES, and pNode.

452  {
453  connectedNodes.resize(NUMNODES);
454  for (int i = 0; i < NUMNODES; i++) {
455  connectedNodes[i] = pNode[i];
456  }
457  };
const StructNode * pNode[NUMNODES]
Definition: shelleasans.h:153
virtual DofOrder::Order Shell4EASANS::GetDofType ( unsigned int  i) const
inlinevirtual

Reimplemented from Elem.

Definition at line 341 of file shelleasans.h.

References DofOrder::ALGEBRAIC, ASSERT, and iGetNumDof().

341  {
342  ASSERT(i >= 0 && i < iGetNumDof());
343  return DofOrder::ALGEBRAIC;
344  };
virtual unsigned int iGetNumDof(void) const
Definition: shelleasans.h:336
#define ASSERT(expression)
Definition: colamd.c:977

Here is the call graph for this function:

virtual Elem::Type Shell4EASANS::GetElemType ( void  ) const
inlinevirtual

Implements Elem.

Definition at line 332 of file shelleasans.h.

References Elem::PLATE.

332  {
333  return Elem::PLATE;
334  };
virtual DofOrder::Order Shell4EASANS::GetEqType ( unsigned int  i) const
inlinevirtual

Reimplemented from SimulationEntity.

Definition at line 346 of file shelleasans.h.

References DofOrder::ALGEBRAIC, ASSERT, and iGetNumDof().

346  {
347  ASSERT(i >= 0 && i < iGetNumDof());
348  return DofOrder::ALGEBRAIC;
349  };
virtual unsigned int iGetNumDof(void) const
Definition: shelleasans.h:336
#define ASSERT(expression)
Definition: colamd.c:977

Here is the call graph for this function:

virtual Shell::Type Shell4EASANS::GetShellType ( void  ) const
inlinevirtual

Definition at line 327 of file shelleasans.h.

References Shell::ELASTIC.

327  {
328  return Shell::ELASTIC;
329  };
virtual unsigned int Shell4EASANS::iGetInitialNumDof ( void  ) const
inlinevirtual

Implements SubjectToInitialAssembly.

Definition at line 417 of file shelleasans.h.

417  {
418  return 0;
419  };
virtual unsigned int Shell4EASANS::iGetNumDof ( void  ) const
inlinevirtual

Reimplemented from Elem.

Definition at line 336 of file shelleasans.h.

Referenced by AssJac(), AssRes(), GetDofType(), GetEqType(), Shell4EASANS(), and WorkSpaceDim().

336  {
337 // return 8;
338  return 7;
339  };
VariableSubMatrixHandler & Shell4EASANS::InitialAssJac ( VariableSubMatrixHandler WorkMat,
const VectorHandler XCurr 
)
virtual

Implements SubjectToInitialAssembly.

Definition at line 817 of file shelleasans.cc.

References VariableSubMatrixHandler::SetNullMatrix().

819 {
820  WorkMat.SetNullMatrix();
821  return WorkMat;
822 }
void SetNullMatrix(void)
Definition: submat.h:1159

Here is the call graph for this function:

SubVectorHandler & Shell4EASANS::InitialAssRes ( SubVectorHandler WorkVec,
const VectorHandler XCurr 
)
virtual

Implements SubjectToInitialAssembly.

Definition at line 825 of file shelleasans.cc.

References VectorHandler::Resize().

826 {
827  WorkVec.Resize(0);
828  return WorkVec;
829 }
virtual void Resize(integer iNewSize)=0

Here is the call graph for this function:

virtual void Shell4EASANS::InitialWorkSpaceDim ( integer piNumRows,
integer piNumCols 
) const
inlinevirtual

Implements SubjectToInitialAssembly.

Definition at line 422 of file shelleasans.h.

422  {
423  *piNumRows = 6*4;
424  *piNumCols = 6*4;
425  };
void Shell4EASANS::InterpolateOrientation ( void  )
private

Definition at line 185 of file shelleasans.cc.

References RotManip::DRot_I(), iTa_A, iTa_i, Mat3x3::MulMT(), NUMIP, NUMNODES, NUMSSEP, Phi_Delta_A, Phi_Delta_i, phi_tilde_0, phi_tilde_A, phi_tilde_i, phi_tilde_n, RotManip::Rot(), RotManip::RotAndDRot(), T_0, T_A, T_i, T_overline, xi_0, xi_A, and xi_i.

Referenced by AssRes(), and ComputeInitialNodeOrientation().

186 {
187  Mat3x3 DRot_I_phi_tilde_n_MT_T_overline[NUMNODES];
188  Mat3x3 Ri, Gammai;
189  for (integer n = 0; n < NUMNODES; n++) {
190  DRot_I_phi_tilde_n_MT_T_overline[n] =
192  }
193  for (integer i = 0; i < NUMIP; i++) {
194  phi_tilde_i[i] = Interp(phi_tilde_n, xi_i[i]);
195  RotManip::RotAndDRot(phi_tilde_i[i], Ri, Gammai);
196  T_i[i] = T_overline * Ri * iTa_i[i];
197  Mat3x3 T_overline_Gamma_tilde_i(T_overline * Gammai);
198  for (int n = 0; n < NUMNODES; n++) {
199  Phi_Delta_i[i][n] = T_overline_Gamma_tilde_i *
200  DRot_I_phi_tilde_n_MT_T_overline[n];
201  }
202  }
203  Vec3 phi_tilde_0 = Interp(phi_tilde_n, xi_0);
204  T_0 = T_overline * RotManip::Rot(phi_tilde_0);
205  for (integer i = 0; i < NUMSSEP; i++) {
206  phi_tilde_A[i] = Interp(phi_tilde_n, xi_A[i]);
207  RotManip::RotAndDRot(phi_tilde_A[i], Ri, Gammai);
208  T_A[i] = T_overline * Ri * iTa_A[i];
209  Mat3x3 T_overline_Gamma_tilde_A(T_overline * Gammai);
210  for (int n = 0; n < NUMNODES; n++) {
211  Phi_Delta_A[i][n] = T_overline_Gamma_tilde_A *
212  DRot_I_phi_tilde_n_MT_T_overline[n];
213  }
214  }
215 }
Mat3x3 Phi_Delta_i[NUMIP][NUMNODES]
Definition: shelleasans.h:191
static doublereal xi_0[2]
Definition: shelleasans.h:142
Definition: matvec3.h:98
static doublereal xi_i[NUMIP][2]
Definition: shelleasans.h:116
Mat3x3 Phi_Delta_A[NUMIP][NUMNODES]
Definition: shelleasans.h:192
Mat3x3 T_A[NUMSSEP]
Definition: shelleasans.h:189
Vec3 phi_tilde_0
Definition: shelleasans.h:174
Mat3x3 T_i[NUMIP]
Definition: shelleasans.h:188
Mat3x3 iTa_A[NUMSSEP]
Definition: shelleasans.h:167
Vec3 phi_tilde_i[NUMIP]
Definition: shelleasans.h:172
Vec3 phi_tilde_n[NUMNODES]
Definition: shelleasans.h:169
Mat3x3 Rot(const Vec3 &phi)
Definition: Rot.cc:62
Vec3 phi_tilde_A[NUMSSEP]
Definition: shelleasans.h:173
Mat3x3 iTa_i[NUMIP]
Definition: shelleasans.h:166
Mat3x3 T_overline
Definition: shelleasans.h:179
void RotAndDRot(const Vec3 &phi, Mat3x3 &Phi, Mat3x3 &Ga)
Definition: Rot.cc:86
static doublereal xi_A[NUMSSEP][2]
Definition: shelleasans.h:129
Mat3x3 MulMT(const Mat3x3 &m) const
Definition: matvec3.cc:444
long int integer
Definition: colamd.c:51
Mat3x3 DRot_I(const Vec3 &phi)
Definition: Rot.cc:111

Here is the call graph for this function:

void Shell4EASANS::Output ( OutputHandler OH) const
virtual

Reimplemented from ToBeOutput.

Definition at line 848 of file shelleasans.cc.

References ToBeOutput::bToBeOutput(), WithLabel::GetLabel(), NUMIP, OutputHandler::PLATES, OutputHandler::Plates(), stress_i, and OutputHandler::UseText().

849 {
850  if (bToBeOutput()) {
851  if (OH.UseText(OutputHandler::PLATES)) {
852  std::ostream& out = OH.Plates();
853  out << std::setw(8) << GetLabel();
854  // TODO: complete
855  for (integer i = 0; i < NUMIP; i++) {
856  for (integer r = 1; r <= 12; r++) {
857  out << " " << stress_i[i](r);
858  }
859  }
860  out << std::endl;
861  }
862  }
863 }
virtual bool bToBeOutput(void) const
Definition: output.cc:890
std::ostream & Plates(void) const
Definition: output.h:580
long int integer
Definition: colamd.c:51
unsigned int GetLabel(void) const
Definition: withlab.cc:62
bool UseText(int out) const
Definition: output.cc:446

Here is the call graph for this function:

const StructNode * Shell4EASANS::pGetNode ( unsigned int  i) const
virtual

Definition at line 833 of file shelleasans.cc.

References ASSERT, MBDYN_EXCEPT_ARGS, and pNode.

834 {
835  ASSERT(i >= 1 && i <= 4);
836  switch (i) {
837  case 1:
838  case 2:
839  case 3:
840  case 4:
841  return pNode[i - 1];
842  default:
844  }
845 }
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
#define ASSERT(expression)
Definition: colamd.c:977
const StructNode * pNode[NUMNODES]
Definition: shelleasans.h:153
std::ostream & Shell4EASANS::Restart ( std::ostream &  out) const
virtual

Implements Elem.

Definition at line 802 of file shelleasans.cc.

803 {
804  return out << "# not implemented yet" << std::endl;
805 }
virtual void Shell4EASANS::SetInitialValue ( VectorHandler X)
inlinevirtual

Initialize state vector used in initial assembly. May set internal states of the element. Do not rely on being always called, because initial assembly could be implicitly or explicitly skipped

Reimplemented from DofOwnerOwner.

Definition at line 427 of file shelleasans.h.

References NO_OP.

427  {
428  NO_OP;
429  };
#define NO_OP
Definition: myassert.h:74
void Shell4EASANS::SetValue ( DataManager pDM,
VectorHandler ,
VectorHandler ,
SimulationEntity::Hints ph = 0 
)
virtual

Reimplemented from SimulationEntity.

Definition at line 809 of file shelleasans.cc.

References NO_OP.

812 {
813  NO_OP;
814 }
#define NO_OP
Definition: myassert.h:74
void Shell4EASANS::UpdateNodalAndAveragePosAndOrientation ( void  )
private

Definition at line 116 of file shelleasans.cc.

References StructNode::GetRCurr(), StructNode::GetRRef(), StructDispNode::GetXCurr(), iTa, Mat3x3::MulTM(), NUMNODES, phi_tilde_n, pNode, RotManip::Rot(), T_overline, RotManip::VecRot(), xa, and Zero3x3.

Referenced by AssRes(), and ComputeInitialNodeOrientation().

117 {
118  Mat3x3 T_avg(Zero3x3);
119  Mat3x3 Tn[NUMNODES];
120  Mat3x3 R_tilde_n[NUMNODES];
121  for (integer i = 0; i < NUMNODES; i++) {
122 // xa[i] = pNode[i]->GetXCurr()+pNode[i]->GetRCurr()*f[i];
123  xa[i] = pNode[i]->GetXCurr();
124  Tn[i] = pNode[i]->GetRCurr() * iTa[i];
125 // T_a_avg += Ta[i];
126  T_avg += pNode[i]->GetRRef() * iTa[i];
127  }
128  T_avg /= 4.;
129  //FIXME; alternative solution: polar decomposition of T_a_avg = T0*U
131  for (integer i = 0; i < NUMNODES; i++) {
132  R_tilde_n[i] = T_overline.MulTM(Tn[i]);
133  phi_tilde_n[i] = RotManip::VecRot(R_tilde_n[i]);
134  }
135 }
virtual const Mat3x3 & GetRRef(void) const
Definition: strnode.h:1006
virtual const Mat3x3 & GetRCurr(void) const
Definition: strnode.h:1012
Vec3 xa[NUMNODES]
Definition: shelleasans.h:163
Vec3 VecRot(const Mat3x3 &Phi)
Definition: Rot.cc:136
const Mat3x3 Zero3x3(0., 0., 0., 0., 0., 0., 0., 0., 0.)
Vec3 phi_tilde_n[NUMNODES]
Definition: shelleasans.h:169
Mat3x3 Rot(const Vec3 &phi)
Definition: Rot.cc:62
Mat3x3 MulTM(const Mat3x3 &m) const
Definition: matvec3.cc:500
virtual const Vec3 & GetXCurr(void) const
Definition: strnode.h:310
Mat3x3 T_overline
Definition: shelleasans.h:179
const StructNode * pNode[NUMNODES]
Definition: shelleasans.h:153
Mat3x3 iTa[NUMNODES]
Definition: shelleasans.h:165
long int integer
Definition: colamd.c:51

Here is the call graph for this function:

virtual void Shell4EASANS::WorkSpaceDim ( integer piNumRows,
integer piNumCols 
) const
inlinevirtual

Implements Elem.

Definition at line 366 of file shelleasans.h.

References iGetNumDof().

Referenced by AssJac(), and AssRes().

366  {
367  *piNumRows = 6*4 + iGetNumDof();
368  *piNumCols = 6*4 + iGetNumDof();
369  };
virtual unsigned int iGetNumDof(void) const
Definition: shelleasans.h:336

Here is the call graph for this function:

Member Data Documentation

doublereal Shell4EASANS::alpha_0
protected

Definition at line 252 of file shelleasans.h.

Referenced by Shell4EASANS().

doublereal Shell4EASANS::alpha_i[NUMIP]
protected

Definition at line 253 of file shelleasans.h.

Referenced by AssJac(), AssRes(), and Shell4EASANS().

vfmh Shell4EASANS::B_overline_i
protected

Definition at line 257 of file shelleasans.h.

Referenced by AssJac(), and AssRes().

vh Shell4EASANS::beta
protected

Definition at line 269 of file shelleasans.h.

Referenced by AssRes().

bool Shell4EASANS::bFirstRes
protected

Definition at line 289 of file shelleasans.h.

bool Shell4EASANS::bPreStress
protected

Definition at line 278 of file shelleasans.h.

Referenced by AssRes().

vfmh Shell4EASANS::D_overline_i
protected

Definition at line 259 of file shelleasans.h.

Referenced by AssJac(), and AssRes().

vfmh Shell4EASANS::DRef
protected

Definition at line 283 of file shelleasans.h.

Referenced by AssJac(), AssRes(), and Shell4EASANS().

Vec3 Shell4EASANS::eps_tilde_1_0_A[NUMSSEP]
protected

Definition at line 215 of file shelleasans.h.

Referenced by AssRes(), and Shell4EASANS().

Vec3 Shell4EASANS::eps_tilde_1_0_i[NUMIP]
protected

Definition at line 213 of file shelleasans.h.

Referenced by AssRes(), and Shell4EASANS().

Vec3 Shell4EASANS::eps_tilde_1_A[NUMSSEP]
protected

Definition at line 220 of file shelleasans.h.

Referenced by AssRes().

Vec3 Shell4EASANS::eps_tilde_1_i[NUMIP]
protected

Definition at line 218 of file shelleasans.h.

Referenced by AssRes().

Vec3 Shell4EASANS::eps_tilde_2_0_A[NUMSSEP]
protected

Definition at line 216 of file shelleasans.h.

Referenced by AssRes(), and Shell4EASANS().

Vec3 Shell4EASANS::eps_tilde_2_0_i[NUMIP]
protected

Definition at line 214 of file shelleasans.h.

Referenced by AssRes(), and Shell4EASANS().

Vec3 Shell4EASANS::eps_tilde_2_A[NUMSSEP]
protected

Definition at line 221 of file shelleasans.h.

Referenced by AssRes().

Vec3 Shell4EASANS::eps_tilde_2_i[NUMIP]
protected

Definition at line 219 of file shelleasans.h.

Referenced by AssRes().

vh Shell4EASANS::epsilon
protected

Definition at line 271 of file shelleasans.h.

Referenced by AssRes().

vh Shell4EASANS::epsilon_hat
protected

Definition at line 270 of file shelleasans.h.

Referenced by AssRes().

vvh Shell4EASANS::FRef
protected

Definition at line 277 of file shelleasans.h.

vfmh Shell4EASANS::G_i
protected

Definition at line 260 of file shelleasans.h.

Referenced by AssJac(), and AssRes().

Mat3x3 Shell4EASANS::iTa[NUMNODES]
protected
Mat3x3 Shell4EASANS::iTa_A[NUMSSEP]
protected

Definition at line 167 of file shelleasans.h.

Referenced by ComputeInitialNodeOrientation(), and InterpolateOrientation().

Mat3x3 Shell4EASANS::iTa_i[NUMIP]
protected

Definition at line 166 of file shelleasans.h.

Referenced by ComputeInitialNodeOrientation(), and InterpolateOrientation().

Vec3 Shell4EASANS::k_1_i[NUMIP]
protected

Definition at line 206 of file shelleasans.h.

Referenced by AssRes(), ComputeIPCurvature(), and Shell4EASANS().

Vec3 Shell4EASANS::k_2_i[NUMIP]
protected

Definition at line 207 of file shelleasans.h.

Referenced by AssRes(), ComputeIPCurvature(), and Shell4EASANS().

vfmh Shell4EASANS::K_beta_beta_i
protected

Definition at line 264 of file shelleasans.h.

Vec3 Shell4EASANS::k_tilde_1_0_i[NUMIP]
protected

Definition at line 225 of file shelleasans.h.

Referenced by AssRes(), and Shell4EASANS().

Vec3 Shell4EASANS::k_tilde_1_i[NUMIP]
protected

Definition at line 228 of file shelleasans.h.

Referenced by AssRes().

Vec3 Shell4EASANS::k_tilde_2_0_i[NUMIP]
protected

Definition at line 226 of file shelleasans.h.

Referenced by AssRes(), and Shell4EASANS().

Vec3 Shell4EASANS::k_tilde_2_i[NUMIP]
protected

Definition at line 229 of file shelleasans.h.

Referenced by AssRes().

Mat3x3 Shell4EASANS::Kappa_delta_i_1[NUMIP][NUMNODES]
protected

Definition at line 193 of file shelleasans.h.

Referenced by AssRes(), and ComputeIPCurvature().

Mat3x3 Shell4EASANS::Kappa_delta_i_2[NUMIP][NUMNODES]
protected

Definition at line 194 of file shelleasans.h.

Referenced by AssRes(), and ComputeIPCurvature().

vfmh Shell4EASANS::L_alpha_beta_A
protected

Definition at line 255 of file shelleasans.h.

Referenced by AssRes(), and Shell4EASANS().

vfmh Shell4EASANS::L_alpha_beta_i
protected

Definition at line 254 of file shelleasans.h.

Referenced by AssRes(), ComputeIPCurvature(), and Shell4EASANS().

vfmh Shell4EASANS::P_i
protected

Definition at line 262 of file shelleasans.h.

Referenced by AssJac(), AssRes(), and Shell4EASANS().

Mat3x3 Shell4EASANS::Phi_Delta_A[NUMIP][NUMNODES]
protected

Definition at line 192 of file shelleasans.h.

Referenced by AssRes(), and InterpolateOrientation().

Mat3x3 Shell4EASANS::Phi_Delta_i[NUMIP][NUMNODES]
protected

Definition at line 191 of file shelleasans.h.

Referenced by AssRes(), ComputeIPCurvature(), and InterpolateOrientation().

Vec3 Shell4EASANS::phi_tilde_0
protected

Definition at line 174 of file shelleasans.h.

Referenced by InterpolateOrientation().

Vec3 Shell4EASANS::phi_tilde_A[NUMSSEP]
protected

Definition at line 173 of file shelleasans.h.

Referenced by InterpolateOrientation().

Vec3 Shell4EASANS::phi_tilde_i[NUMIP]
protected

Definition at line 172 of file shelleasans.h.

Referenced by ComputeIPCurvature(), and InterpolateOrientation().

Vec3 Shell4EASANS::phi_tilde_n[NUMNODES]
protected
vh Shell4EASANS::PreStress
protected

Definition at line 279 of file shelleasans.h.

Referenced by AssRes().

Mat3x3 Shell4EASANS::Q_A[NUMSSEP]
protected

Definition at line 203 of file shelleasans.h.

Mat3x3 Shell4EASANS::Q_i[NUMIP]
protected

Definition at line 202 of file shelleasans.h.

fmh Shell4EASANS::S_alpha_beta_0
protected

Definition at line 249 of file shelleasans.h.

Referenced by Shell4EASANS().

vfmh Shell4EASANS::S_alpha_beta_A
protected

Definition at line 251 of file shelleasans.h.

Referenced by Shell4EASANS().

vfmh Shell4EASANS::S_alpha_beta_i
protected

Definition at line 250 of file shelleasans.h.

Referenced by Shell4EASANS().

vvh Shell4EASANS::stress_i
protected

Definition at line 286 of file shelleasans.h.

Referenced by AssRes(), and Output().

Mat3x3 Shell4EASANS::T0_overline
protected

Definition at line 177 of file shelleasans.h.

Referenced by Shell4EASANS().

Mat3x3 Shell4EASANS::T_0
protected

Definition at line 187 of file shelleasans.h.

Referenced by InterpolateOrientation(), and Shell4EASANS().

Mat3x3 Shell4EASANS::T_0_0
protected

Definition at line 183 of file shelleasans.h.

Referenced by Shell4EASANS().

Mat3x3 Shell4EASANS::T_0_A[NUMSSEP]
protected

Definition at line 185 of file shelleasans.h.

Referenced by Shell4EASANS().

Mat3x3 Shell4EASANS::T_0_i[NUMIP]
protected

Definition at line 184 of file shelleasans.h.

Referenced by Shell4EASANS().

Mat3x3 Shell4EASANS::T_A[NUMSSEP]
protected
Mat3x3 Shell4EASANS::T_i[NUMIP]
protected
Mat3x3 Shell4EASANS::T_overline
protected
doublereal Shell4EASANS::w_i
static
Initial value:
= {
1.,
1.,
1.,
1.
}

Definition at line 117 of file shelleasans.h.

Referenced by AssJac(), and AssRes().

Vec3 Shell4EASANS::xa[NUMNODES]
protected
Vec3 Shell4EASANS::xa_0[NUMNODES]
protected

Definition at line 162 of file shelleasans.h.

Referenced by Shell4EASANS().

doublereal Shell4EASANS::xi_0 = {0., 0.}
static

Definition at line 142 of file shelleasans.h.

Referenced by InterpolateOrientation(), and Shell4EASANS().

doublereal Shell4EASANS::xi_A
static
Initial value:
= {
{ 0., 1.},
{-1., 0.},
{ 0., -1.},
{ 1., 0.}
}

Definition at line 129 of file shelleasans.h.

Referenced by AssRes(), ComputeInitialNodeOrientation(), InterpolateOrientation(), and Shell4EASANS().

doublereal Shell4EASANS::xi_i
static
Initial value:
= {
{-1. / std::sqrt(3.), -1. / std::sqrt(3.)},
{ 1. / std::sqrt(3.), -1. / std::sqrt(3.)},
{ 1. / std::sqrt(3.), 1. / std::sqrt(3.)},
{-1. / std::sqrt(3.), 1. / std::sqrt(3.)}
}

Definition at line 116 of file shelleasans.h.

Referenced by AssRes(), ComputeInitialNodeOrientation(), ComputeIPCurvature(), InterpolateOrientation(), and Shell4EASANS().

doublereal Shell4EASANS::xi_n
static
Initial value:
= {
{ 1., 1.},
{-1., 1.},
{-1., -1.},
{ 1., -1.}
}

Definition at line 140 of file shelleasans.h.

Referenced by ComputeInitialNodeOrientation().

Vec3 Shell4EASANS::y_i_1[NUMIP]
protected

Definition at line 266 of file shelleasans.h.

Referenced by AssRes(), and Shell4EASANS().

Vec3 Shell4EASANS::y_i_2[NUMIP]
protected

Definition at line 267 of file shelleasans.h.

Referenced by AssRes(), and Shell4EASANS().


The documentation for this class was generated from the following files: