56FEI2dTrQuad TrPlanestressRotAllman :: qinterpolation(1, 2);
58TrPlanestressRotAllman :: TrPlanestressRotAllman(
int n,
Domain *aDomain) :
82TrPlanestressRotAllman :: computeLocalNodalCoordinates(std::vector< FloatArray > &lxy)
85 for (
int i = 0; i < 3; i++ ) {
86 lxy [ i ] = this->
giveNode(i + 1)->giveCoordinates();
91 for (
int i = 1; i <= 2; i++ ) {
92 lxy [ 3 ].at(i) = 0.5 * ( lxy [ 0 ].at(i) + lxy [ 1 ].at(i) );
93 lxy [ 4 ].at(i) = 0.5 * ( lxy [ 1 ].at(i) + lxy [ 2 ].at(i) );
94 lxy [ 5 ].at(i) = 0.5 * ( lxy [ 2 ].at(i) + lxy [ 0 ].at(i) );
106 std::vector< FloatArray > lxy;
115 answer.
at(1, 1) = answer.
at(2, 2) = n.
at(1) + n.
at(4) / 2. + n.
at(6) / 2.;
116 answer.
at(1, 4) = answer.
at(2, 5) = n.
at(2) + n.
at(4) / 2. + n.
at(5) / 2.;
117 answer.
at(1, 7) = answer.
at(2, 8) = n.
at(3) + n.
at(5) / 2. + n.
at(6) / 2.;
118 answer.
at(1, 3) = n.
at(6) * ( lxy [ 0 ].at(2) - lxy [ 2 ].at(2) ) / 8.0 - n.
at(4) * ( lxy [ 1 ].at(2) - lxy [ 0 ].at(2) ) / 8.0;
119 answer.
at(1, 6) = n.
at(4) * ( lxy [ 1 ].at(2) - lxy [ 0 ].at(2) ) / 8.0 - n.
at(5) * ( lxy [ 2 ].at(2) - lxy [ 1 ].at(2) ) / 8.0;
120 answer.
at(1, 9) = n.
at(5) * ( lxy [ 2 ].at(2) - lxy [ 1 ].at(2) ) / 8.0 - n.
at(6) * ( lxy [ 0 ].at(2) - lxy [ 2 ].at(2) ) / 8.0;
121 answer.
at(2, 3) = -n.
at(6) * ( lxy [ 0 ].at(1) - lxy [ 2 ].at(1) ) / 8.0 + n.
at(4) * ( lxy [ 1 ].at(1) - lxy [ 0 ].at(1) ) / 8.0;
122 answer.
at(2, 6) = -n.
at(4) * ( lxy [ 1 ].at(1) - lxy [ 0 ].at(1) ) / 8.0 + n.
at(5) * ( lxy [ 2 ].at(1) - lxy [ 1 ].at(1) ) / 8.0;
123 answer.
at(2, 9) = -n.
at(5) * ( lxy [ 2 ].at(1) - lxy [ 1 ].at(1) ) / 8.0 + n.
at(6) * ( lxy [ 0 ].at(1) - lxy [ 2 ].at(1) ) / 8.0;
125 answer.
at(3, 3) = L.
at(1);
126 answer.
at(3, 6) = L.
at(2);
127 answer.
at(3, 9) = L.
at(3);
136 std::vector< FloatArray > lxy;
145 answer.
at(1, 1) = dnx.
at(1, 1) + 0.5 * dnx.
at(4, 1) + 0.5 * dnx.
at(6, 1);
146 answer.
at(1, 4) = dnx.
at(2, 1) + 0.5 * dnx.
at(4, 1) + 0.5 * dnx.
at(5, 1);
147 answer.
at(1, 7) = dnx.
at(3, 1) + 0.5 * dnx.
at(5, 1) + 0.5 * dnx.
at(6, 1);
148 answer.
at(1, 3) =+dnx.
at(6, 1) * ( lxy [ 0 ].at(2) - lxy [ 2 ].at(2) ) / 8.0 - dnx.
at(4, 1) * ( lxy [ 1 ].at(2) - lxy [ 0 ].at(2) ) / 8.0;
149 answer.
at(1, 6) =+dnx.
at(4, 1) * ( lxy [ 1 ].at(2) - lxy [ 0 ].at(2) ) / 8.0 - dnx.
at(5, 1) * ( lxy [ 2 ].at(2) - lxy [ 1 ].at(2) ) / 8.0;
150 answer.
at(1, 9) =+dnx.
at(5, 1) * ( lxy [ 2 ].at(2) - lxy [ 1 ].at(2) ) / 8.0 - dnx.
at(6, 1) * ( lxy [ 0 ].at(2) - lxy [ 2 ].at(2) ) / 8.0;
153 answer.
at(2, 2) = dnx.
at(1, 2) + 0.5 * dnx.
at(4, 2) + 0.5 * dnx.
at(6, 2);
154 answer.
at(2, 5) = dnx.
at(2, 2) + 0.5 * dnx.
at(4, 2) + 0.5 * dnx.
at(5, 2);
155 answer.
at(2, 8) = dnx.
at(3, 2) + 0.5 * dnx.
at(5, 2) + 0.5 * dnx.
at(6, 2);
156 answer.
at(2, 3) =-dnx.
at(6, 2) * ( lxy [ 0 ].at(1) - lxy [ 2 ].at(1) ) / 8.0 + dnx.
at(4, 2) * ( lxy [ 1 ].at(1) - lxy [ 0 ].at(1) ) / 8.0;
157 answer.
at(2, 6) =-dnx.
at(4, 2) * ( lxy [ 1 ].at(1) - lxy [ 0 ].at(1) ) / 8.0 + dnx.
at(5, 2) * ( lxy [ 2 ].at(1) - lxy [ 1 ].at(1) ) / 8.0;
158 answer.
at(2, 9) =-dnx.
at(5, 2) * ( lxy [ 2 ].at(1) - lxy [ 1 ].at(1) ) / 8.0 + dnx.
at(6, 2) * ( lxy [ 0 ].at(1) - lxy [ 2 ].at(1) ) / 8.0;
161 answer.
at(3, 1) = dnx.
at(1, 2) + 0.5 * dnx.
at(4, 2) + 0.5 * dnx.
at(6, 2);
162 answer.
at(3, 2) = dnx.
at(1, 1) + 0.5 * dnx.
at(4, 1) + 0.5 * dnx.
at(6, 1);
163 answer.
at(3, 4) = dnx.
at(2, 2) + 0.5 * dnx.
at(4, 2) + 0.5 * dnx.
at(5, 2);
164 answer.
at(3, 5) = dnx.
at(2, 1) + 0.5 * dnx.
at(4, 1) + 0.5 * dnx.
at(5, 1);
165 answer.
at(3, 7) = dnx.
at(3, 2) + 0.5 * dnx.
at(5, 2) + 0.5 * dnx.
at(6, 2);
166 answer.
at(3, 8) = dnx.
at(3, 1) + 0.5 * dnx.
at(5, 1) + 0.5 * dnx.
at(6, 1);
168 answer.
at(3, 3) = dnx.
at(6, 2) * ( lxy [ 0 ].at(2) - lxy [ 2 ].at(2) ) / 8.0 - dnx.
at(4, 2) * ( lxy [ 1 ].at(2) - lxy [ 0 ].at(2) ) / 8.0;
169 answer.
at(3, 3) += -dnx.
at(6, 1) * ( lxy [ 0 ].at(1) - lxy [ 2 ].at(1) ) / 8.0 + dnx.
at(4, 1) * ( lxy [ 1 ].at(1) - lxy [ 0 ].at(1) ) / 8.0;
170 answer.
at(3, 6) = dnx.
at(4, 2) * ( lxy [ 1 ].at(2) - lxy [ 0 ].at(2) ) / 8.0 - dnx.
at(5, 2) * ( lxy [ 2 ].at(2) - lxy [ 1 ].at(2) ) / 8.0;
171 answer.
at(3, 6) += -dnx.
at(4, 1) * ( lxy [ 1 ].at(1) - lxy [ 0 ].at(1) ) / 8.0 + dnx.
at(5, 1) * ( lxy [ 2 ].at(1) - lxy [ 1 ].at(1) ) / 8.0;
172 answer.
at(3, 9) = dnx.
at(5, 2) * ( lxy [ 2 ].at(2) - lxy [ 1 ].at(2) ) / 8.0 - dnx.
at(6, 2) * ( lxy [ 0 ].at(2) - lxy [ 2 ].at(2) ) / 8.0;
173 answer.
at(3, 9) += -dnx.
at(5, 1) * ( lxy [ 2 ].at(1) - lxy [ 1 ].at(1) ) / 8.0 + dnx.
at(6, 1) * ( lxy [ 0 ].at(1) - lxy [ 2 ].at(1) ) / 8.0;
178TrPlanestressRotAllman :: computeStiffnessMatrix(
FloatMatrix &answer, MatResponseMode rMode,
TimeStep *tStep)
181 TrPlaneStress2d :: computeStiffnessMatrix(answer, rMode, tStep);
189TrPlanestressRotAllman :: computeStiffnessMatrixZeroEnergyStabilization(
FloatMatrix &answer, MatResponseMode rMode,
TimeStep *tStep)
193 FloatArray lec =
Vec3(0.333333333333, 0.333333333333, 0.333333333333);
194 std::vector< FloatArray > lxy;
200 b.
at(1, 1) = -1.0 * ( dnx.
at(1, 2) + 0.5 * dnx.
at(4, 2) + 0.5 * dnx.
at(6, 2) );
201 b.
at(1, 2) = dnx.
at(1, 1) + 0.5 * dnx.
at(4, 1) + 0.5 * dnx.
at(6, 1);
202 b.
at(1, 4) = -1.0 * ( dnx.
at(2, 2) + 0.5 * dnx.
at(4, 2) + 0.5 * dnx.
at(5, 2) );
203 b.
at(1, 5) = dnx.
at(2, 1) + 0.5 * dnx.
at(4, 1) + 0.5 * dnx.
at(5, 1);
204 b.
at(1, 7) = -1.0 * ( dnx.
at(3, 2) + 0.5 * dnx.
at(5, 2) + 0.5 * dnx.
at(6, 2) );
205 b.
at(1, 8) = dnx.
at(3, 1) + 0.5 * dnx.
at(5, 1) + 0.5 * dnx.
at(6, 1);
207 b.
at(1, 3) = -dnx.
at(6, 2) * ( lxy [ 0 ].at(2) - lxy [ 2 ].at(2) ) / 8.0 + dnx.
at(4, 2) * ( lxy [ 1 ].at(2) - lxy [ 0 ].at(2) ) / 8.0;
208 b.
at(1, 3) += -dnx.
at(6, 1) * ( lxy [ 0 ].at(1) - lxy [ 2 ].at(1) ) / 8.0 + dnx.
at(4, 1) * ( lxy [ 1 ].at(1) - lxy [ 0 ].at(1) ) / 8.0;
209 b.
at(1, 6) = -dnx.
at(4, 2) * ( lxy [ 1 ].at(2) - lxy [ 0 ].at(2) ) / 8.0 + dnx.
at(5, 2) * ( lxy [ 2 ].at(2) - lxy [ 1 ].at(2) ) / 8.0;
210 b.
at(1, 6) += -dnx.
at(4, 1) * ( lxy [ 1 ].at(1) - lxy [ 0 ].at(1) ) / 8.0 + dnx.
at(5, 1) * ( lxy [ 2 ].at(1) - lxy [ 1 ].at(1) ) / 8.0;
211 b.
at(1, 9) = -dnx.
at(5, 2) * ( lxy [ 2 ].at(2) - lxy [ 1 ].at(2) ) / 8.0 + dnx.
at(6, 2) * ( lxy [ 0 ].at(2) - lxy [ 2 ].at(2) ) / 8.0;
212 b.
at(1, 9) += -dnx.
at(5, 1) * ( lxy [ 2 ].at(1) - lxy [ 1 ].at(1) ) / 8.0 + dnx.
at(6, 1) * ( lxy [ 0 ].at(1) - lxy [ 2 ].at(1) ) / 8.0;
215 b.
at(1, 3) -= 1.0 / 3.0;
216 b.
at(1, 6) -= 1.0 / 3.0;
217 b.
at(1, 9) -= 1.0 / 3.0;
228TrPlanestressRotAllman :: giveDofManDofIDMask(
int inode,
IntArray &answer)
const
230 answer = {D_u, D_v, R_w};
236TrPlanestressRotAllman :: giveArea()
246void TrPlanestressRotAllman :: computeGaussPoints()
259 std::vector< FloatArray > lxy;
269 answer.
at(1, 1) = answer.
at(2, 2) = n.
at(1) + n.
at(3) / 2.0;
270 answer.
at(1, 4) = answer.
at(2, 5) = n.
at(2) + n.
at(3) / 2.0;
271 answer.
at(1, 3) = n.
at(3) * ( lxy [ en.at(2) - 1 ].at(2) - lxy [ en.at(1) - 1 ].at(2) ) / 8.0;
272 answer.
at(1, 6) = -answer.
at(1, 3);
273 answer.
at(2, 3) = n.
at(3) * ( lxy [ en.at(2) - 1 ].at(1) - lxy [ en.at(1) - 1 ].at(1) ) / 8.0;
274 answer.
at(2, 6) = -answer.
at(2, 3);
275 answer.
at(3, 3) = l.
at(1);
276 answer.
at(3, 6) = l.
at(2);
280TrPlanestressRotAllman :: giveEdgeDofMapping(
IntArray &answer,
int iEdge)
const
295 }
else if ( iEdge == 2 ) {
302 }
else if ( iEdge == 3 ) {
317 if ( type != ExternalForcesVector ) {
340 edgeLoad->
computeValueAt(force, tStep, gp->giveNaturalCoordinates(), mode);
458TrPlanestressRotAllman :: SPRNodalRecoveryMI_giveNumberOfIP()
#define REGISTER_Element(class)
void computeValueAt(FloatArray &answer, TimeStep *tStep, const FloatArray &coords, ValueModeType mode) override
int giveApproxOrder() override=0
CoordSystType giveCoordSystMode() override
Node * giveNode(int i) const
int numberOfDofMans
Number of dofmanagers.
std::vector< std ::unique_ptr< IntegrationRule > > integrationRulesArray
CrossSection * giveCrossSection()
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
void edgeEvalN(FloatArray &answer, int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
const Element_Geometry_Type giveGeometryType() const override
IntArray computeLocalEdgeMapping(int iedge) const override
void rotatedWith(FloatMatrix &r, char mode)
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void add(const FloatArray &src)
void add(const FloatMatrix &a)
void resize(Index rows, Index cols)
void zero()
Zeroes all coefficient of receiver.
double at(std::size_t i, std::size_t j) const
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
int SetUpPointsOnLine(int nPoints, MaterialMode mode) override
const FloatArray & giveNaturalCoordinates() const
Returns coordinate array of receiver.
virtual FormulationType giveFormulationType()
int computeLoadLEToLRotationMatrix(FloatMatrix &answer, int iEdge, GaussPoint *gp) override
double computeEdgeVolumeAround(GaussPoint *gp, int iEdge) override
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
virtual int computeLoadGToLRotationMtrx(FloatMatrix &answer)
TrPlaneStress2d(int n, Domain *d)
FEInterpolation * giveInterpolation() const override
void computeEgdeNMatrixAt(FloatMatrix &answer, int iedge, GaussPoint *gp)
void computeStiffnessMatrixZeroEnergyStabilization(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
double giveArea() override
static FEI2dTrQuad qinterpolation
virtual void computeLocalNodalCoordinates(std::vector< FloatArray > &lxy)
@ SPRNodalRecoveryModelInterfaceType
@ ZZNodalRecoveryModelInterfaceType
@ LayeredCrossSectionInterfaceType
@ SpatialLocalizerInterfaceType
static FloatArray Vec3(const double &a, const double &b, const double &c)