56 #ifndef ASDShellQ4Transformation_h 57 #define ASDShellQ4Transformation_h 59 #include "ASDShellQ4LocalCoordinateSystem.h" 60 #include "domain/mesh/node/Node.h" 61 #include "domain/domain/Domain.h" 81 typedef std::array<Node*, 4> NodeContainerType;
85 NodeContainerType m_nodes= { {
nullptr,
nullptr,
nullptr,
nullptr} };
97 virtual bool isLinear(
void)
const 100 virtual void revertToStart(
void)
103 virtual void setDomain(
Domain *,
const ID &);
105 virtual void revertToLastCommit()
108 virtual void commit()
111 virtual void update(
const VectorType& globalDisplacements)
119 Vector3Type(m_nodes[0]->getCrds()),
120 Vector3Type(m_nodes[1]->getCrds()),
121 Vector3Type(m_nodes[2]->getCrds()),
122 Vector3Type(m_nodes[3]->getCrds())
129 return createReferenceCoordinateSystem();
132 virtual void computeGlobalDisplacements(VectorType& globalDisplacements)
const 134 for (
int i = 0; i < 4; i++) {
136 const VectorType& iU = m_nodes[i]->getTrialDisp();
137 for (
int j = 0; j < 6; j++) {
138 globalDisplacements(index + j) = iU(j) - m_U0(index + j);
145 static MatrixType R(24, 24);
146 static MatrixType T(24, 24);
147 static MatrixType W(24, 24);
148 if (LCS.IsWarped()) {
149 LCS.ComputeTotalRotationMatrix(R);
150 LCS.ComputeTotalWarpageMatrix(W);
151 T.addMatrixProduct(0.0, W, R, 1.0);
154 LCS.ComputeTotalRotationMatrix(T);
159 virtual void calculateLocalDisplacements(
161 const VectorType& globalDisplacements,
162 VectorType& localDisplacements)
164 const MatrixType& R = computeTransformationMatrix(LCS);
168 virtual void transformToGlobal(
170 const VectorType& globalDisplacements,
171 const VectorType& localDisplacements,
176 static MatrixType RT_LHS(24, 24);
177 static VectorType RHScopy(24);
178 const MatrixType& R = computeTransformationMatrix(LCS);
180 RHS.addMatrixTransposeVector(0.0, R, RHScopy, 1.0);
182 RT_LHS.addMatrixTransposeProduct(0.0, R, LHS, 1.0);
183 LHS.addMatrixProduct(0.0, RT_LHS, R, 1.0);
187 virtual void transformToGlobal(
193 static VectorType dummy;
194 transformToGlobal(LCS, dummy, dummy, LHS, RHS, LHSrequired);
197 virtual int internalDataSize()
const 206 Vector retval(internalDataSize());
207 for(
int i = 0; i < 24; i++)
215 for(
int i = 0; i < 24; i++)
221 inline const NodeContainerType& getNodes()
const {
return m_nodes; }
222 inline NodeContainerType& getNodes() {
return m_nodes; }
228 #endif // !ASDShellQ4Transformation_h Float vector abstraction.
Definition: Vector.h:94
Vector of integers.
Definition: ID.h:95
This class represent the local coordinate system of any element whose geometry is a 4-node Quadrilate...
Definition: ASDShellQ4LocalCoordinateSystem.h:41
Open source finite element program for structural analysis.
Definition: ContinuaReprComponent.h:35
Matrix of floats.
Definition: Matrix.h:111
Domain (mesh and boundary conditions) of the finite element model.
Definition: Domain.h:117
int addMatrixVector(double factThis, const Matrix &m, const Vector &v, double factOther)
To add a factor fact times the Vector formed by the product of the matrix m and the Vector v to the c...
Definition: Vector.cpp:470
ASDQuaternion A simple class that implements the main features of quaternion algebra.
Definition: ASDMath.h:328