107 auto n = this->
interp_lin.evalN( gp->giveNaturalCoordinates() );
115 answer.
at(1) = force.
at(1);
116 answer.
at(4) = force.
at(2);
117 answer.
at(7) = force.
at(3);
118 answer.
at(10) = force.
at(4);
149 for (
int i = 0; i < 4; ++i ) {
150 answer(0, 2 + i * 3) = dn(0, i);
151 answer(1, 1 + i * 3) = -dn(1, i);
152 answer(2, 2 + i * 3) = dn(1, i);
153 answer(2, 1 + i * 3) = -dn(0, i);
155 answer(3, 0 + i * 3) = dns(0, i);
156 answer(3, 2 + i * 3) = ns [ i ];
157 answer(4, 0 + i * 3) = dns(1, i);
158 answer(4, 1 + i * 3) = -ns [ i ];
189 answer = { D_w, R_u, R_v };
199 auto n =
cross(u, v);
200 answer = n /
norm(n);
216 return detJ * weight;
233 answer.
at(1, 1) = mass * 0.25;
234 answer.
at(4, 4) = mass * 0.25;
235 answer.
at(7, 7) = mass * 0.25;
236 answer.
at(10, 10) = mass * 0.25;
245 if ( type == IST_ShellForceTensor || type == IST_ShellStrainTensor ) {
246 const auto &s = type == IST_ShellForceTensor ? ms->giveStressVector() : ms->giveStrainVector();
250 answer.
at(4) = s.at(5);
251 answer.
at(5) = s.at(4);
254 }
else if ( type == IST_ShellMomentTensor || type == IST_CurvatureTensor ) {
255 const auto &s = type == IST_ShellMomentTensor ? ms->giveStressVector() : ms->giveStrainVector();
256 answer.
at(1) = s.at(1);
257 answer.
at(2) = s.at(2);
261 answer.
at(6) = s.at(3);
272 answer = { 1, 2, 3, 4, 5, 6 };
273 }
else if ( iEdge == 2 ) {
274 answer = { 4, 5, 6, 7, 8, 9 };
275 }
else if ( iEdge == 3 ) {
276 answer = { 7, 8, 9, 10, 11, 12 };
277 }
else if ( iEdge == 4 ) {
278 answer = { 10, 11, 12, 1, 2, 3 };
296 const auto &edgeNodes = this->
interp_lin.computeLocalEdgeMapping(iEdge);
298 auto nodeA = this->
giveNode(edgeNodes.at(1) );
299 auto nodeB = this->
giveNode(edgeNodes.at(2) );
301 double dx = nodeB->giveCoordinate(1) - nodeA->giveCoordinate(1);
302 double dy = nodeB->giveCoordinate(2) - nodeA->giveCoordinate(2);
303 double length = sqrt(dx * dx + dy * dy);
307 answer.
at(1, 1) = 1.0;
310 answer.
at(3, 2) = -answer.
at(2, 3);
311 answer.
at(3, 3) = answer.
at(2, 2);
333 for (
int i = 1; i < 5; i++ ) {
344 for (
int i = 1; i < 5; i++ ) {
double length(const Vector &a)
#define REGISTER_Element(class)
virtual double give(CrossSectionProperty a, GaussPoint *gp) const
virtual int setupIntegrationPoints(IntegrationRule &irule, int npoints, Element *element)
const FloatArray & giveCoordinates() const
ParameterManager elementPPM
Node * giveNode(int i) const
void initializeFrom(InputRecord &ir, int priority) override
int numberOfDofMans
Number of dofmanagers.
std::vector< std ::unique_ptr< IntegrationRule > > integrationRulesArray
double giveCharacteristicLengthForPlaneElements(const FloatArray &normalToCrackPlane)
CrossSection * giveCrossSection()
Domain * giveDomain() const
int number
Component number.
double & at(std::size_t i)
Index giveSize() const
Returns the size of receiver.
void zero()
Zeroes all coefficients of receiver.
void resize(Index rows, Index cols)
void zero()
Zeroes all coefficient of receiver.
double at(std::size_t i, std::size_t j) const
const FloatArray & giveNaturalCoordinates() const
Returns coordinate array of receiver.
IntegrationPointStatus * giveMaterialStatus(IntegrationPointStatusIDType key=IPSID_Default)
double giveWeight()
Returns integration weight of receiver.
virtual bcGeomType giveBCGeoType() const
virtual bcValType giveBCValType() const
virtual void computeComponentArrayAt(FloatArray &answer, TimeStep *tStep, ValueModeType mode)
void SPRNodalRecoveryMI_giveDofMansDeterminedByPatch(IntArray &answer, int pap) override
Interface * giveInterface(InterfaceType it) override
Quad1Mindlin(int n, Domain *d)
double giveCharacteristicLength(const FloatArray &normalToCrackPlane) override
void computeGaussPoints() override
FEInterpolation * giveInterpolation() const override
void giveEdgeDofMapping(IntArray &answer, int iEdge) const override
void SPRNodalRecoveryMI_giveSPRAssemblyPoints(IntArray &pap) override
void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) override
double computeVolumeAround(GaussPoint *gp) override
void initializeFrom(InputRecord &ir, int priority) override
int computeLoadLEToLRotationMatrix(FloatMatrix &answer, int iEdge, GaussPoint *gp) override
void giveDofManDofIDMask(int inode, IntArray &) const override
void computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep) override
double computeEdgeVolumeAround(GaussPoint *gp, int iEdge) override
void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int=1, int=ALL_STRAINS) override
void computeLumpedMassMatrix(FloatMatrix &answer, TimeStep *tStep) override
bool reducedIntegrationFlag
Flag controlling reduced (one - point) integration for shear.
static FEI2dQuadLin interp_lin
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
static ParamKey IPK_Quad1Mindlin_reducedIntegration
void computeMidPlaneNormal(FloatArray &answer, const GaussPoint *gp) override
void computeBodyLoadVectorAt(FloatArray &answer, Load *load, TimeStep *tStep, ValueModeType mode) override
SPRNodalRecoveryModelInterface()
Constructor.
virtual FloatMatrixF< 5, 5 > give2dPlateStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const =0
virtual FloatArrayF< 5 > giveGeneralizedStress_Plate(const FloatArrayF< 5 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const =0
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
StructuralElement(int n, Domain *d)
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
ZZNodalRecoveryModelInterface(Element *element)
Constructor.
double norm(const FloatArray &x)
@ BodyLoadBGT
Distributed body load.
FloatArrayF< 3 > cross(const FloatArrayF< 3 > &x, const FloatArrayF< 3 > &y)
Computes $ x \cross y $.
@ SPRNodalRecoveryModelInterfaceType
@ ZZNodalRecoveryModelInterfaceType
#define PM_CHECK_FLAG_AND_REPORT(_pm, _ir, _componentnum, _paramkey, _prio, _flag)