49ParamKey SolidShell :: IPK_SolidShell_EAS_type(
"eas_type");
51SolidShell :: SolidShell(
int n,
Domain *aDomain) :
LSpace(n, aDomain)
60SolidShell :: postInitialize()
62 LSpace :: postInitialize();
79 this->
fE.resize(numEASparam);
83 this->
invKEE.resize(numEASparam, numEASparam);
85 this->
alpha.resize(numEASparam);
90SolidShell :: computeGaussPoints()
107 NLStructuralElement :: initializeFrom(ir, priority);
143 double NA = 0.5 * ( 1.0 - lCoords.
at(2) );
144 double NC = 0.5 * ( 1.0 + lCoords.
at(2) );
145 double NB = 0.5 * ( 1.0 - lCoords.
at(1) );
146 double ND = 0.5 * ( 1.0 + lCoords.
at(1) );
152 answer.
at(1, 3 * i - 2) = dNdx.
at(i, 1);
153 answer.
at(2, 3 * i - 1) = dNdx.
at(i, 2);
154 answer.
at(6, 3 * i - 2) = dNdx.
at(i, 2);
155 answer.
at(6, 3 * i - 1) = dNdx.
at(i, 1);
159 answer.
at(3, 3 * i - 0) = dNdx0.
at(i, 3);
161 answer.
at(4, 3 * i - 1) = NB * dNdxB.
at(i, 3) + ND * dNdxD.
at(i, 3);
162 answer.
at(4, 3 * i - 0) = NB * dNdxB.
at(i, 2) + ND * dNdxD.
at(i, 2);
164 answer.
at(5, 3 * i - 2) = NA * dNdxA.
at(i, 3) + NC * dNdxC.
at(i, 3);
165 answer.
at(5, 3 * i - 0) = NA * dNdxA.
at(i, 1) + NC * dNdxC.
at(i, 1);
184 answer.
at(1, 3 * i - 2) = dNdx.
at(i, 1);
185 answer.
at(2, 3 * i - 1) = dNdx.
at(i, 2);
186 answer.
at(3, 3 * i - 0) = dNdx.
at(i, 3);
187 answer.
at(4, 3 * i - 1) = dNdx.
at(i, 3);
188 answer.
at(7, 3 * i - 0) = dNdx.
at(i, 2);
189 answer.
at(5, 3 * i - 2) = dNdx.
at(i, 3);
190 answer.
at(8, 3 * i - 0) = dNdx.
at(i, 1);
191 answer.
at(6, 3 * i - 2) = dNdx.
at(i, 2);
192 answer.
at(9, 3 * i - 1) = dNdx.
at(i, 1);
218 double NA = 0.5 * ( 1.0 - lCoords.
at(2) );
219 double NC = 0.5 * ( 1.0 + lCoords.
at(2) );
220 double NB = 0.5 * ( 1.0 - lCoords.
at(1) );
221 double ND = 0.5 * ( 1.0 + lCoords.
at(1) );
227 answer.
at(1, 3 * i - 2) = dNdx.
at(i, 1);
228 answer.
at(2, 3 * i - 1) = dNdx.
at(i, 2);
229 answer.
at(6, 3 * i - 2) = dNdx.
at(i, 2);
230 answer.
at(9, 3 * i - 1) = dNdx.
at(i, 1);
234 answer.
at(3, 3 * i - 0) = dNdx0.
at(i, 3);
236 answer.
at(4, 3 * i - 1) = NB * dNdxB.
at(i, 3) + ND * dNdxD.
at(i, 3);
237 answer.
at(7, 3 * i - 0) = NB * dNdxB.
at(i, 2) + ND * dNdxD.
at(i, 2);
239 answer.
at(5, 3 * i - 2) = NA * dNdxA.
at(i, 3) + NC * dNdxC.
at(i, 3);
240 answer.
at(8, 3 * i - 0) = NA * dNdxA.
at(i, 1) + NC * dNdxC.
at(i, 1);
260 double xi = lCoords.
at(1);
261 double eta = lCoords.
at(2);
262 double zeta = lCoords.
at(3);
306 x.beColumnOf(base,1);
310 {
x(0) *
x(0),
x(1) *
x(1),
x(2) *
x(2),
x(1) *
x(2),
x(0) *
x(2),
x(0) *
x(1) },
311 { y(0) * y(0), y(1) * y(1), y(2) * y(2), y(1) * y(2), y(0) * y(2), y(0) * y(1) },
312 { z(0) * z(0), z(1) * z(1), z(2) * z(2), z(1) * z(2), z(0) * z(2), z(0) * z(1) },
313 { 2 * y(0) * z(0), 2 * y(1) * z(1), 2 * y(2) * z(2), y(2) * z(1) + y(1) * z(2), y(2) * z(0) + y(0) * z(2), y(1) * z(0) + y(0) * z(1) },
314 { 2 *
x(0) * z(0), 2 *
x(1) * z(1), 2 *
x(2) * z(2),
x(2) * z(1) +
x(1) * z(2),
x(2) * z(0) +
x(0) * z(2),
x(1) * z(0) +
x(0) * z(1) },
315 { 2 *
x(0) * y(0), 2 *
x(1) * y(1), 2 *
x(2) * y(2),
x(2) * y(1) +
x(1) * y(2),
x(2) * y(0) +
x(0) * y(2),
x(1) * y(0) +
x(0) * y(1) }
335 answer = this->
alpha - deltaAlpha;
345 FloatArray fC,
fE, strain, u, vStrainC, vStrainE, vStress;
363 vStrainC.
add(vStrainE);
383 vStrainC.
add(vStrainE);
391 fE.plusProduct(BE, vStress, dV);
404 LSpace :: giveInternalForcesVector(answer, tStep, useUpdatedGpRecord);
413 FloatArray fC,
fE, strain, u, vStrainC, vStrainE, vStress;
432 KEC.plusProductUnsym(BE, DBC, dV);
437 cs->giveStiffnessMatrix_dPdF(D, rMode, gp, tStep);
449 KEC.plusProductUnsym(BE, DBC, dV);
454 KCC.
add(dV, KCC_geo);
469 LSpace :: computeStiffnessMatrix(answer, rMode, tStep);
492 for (
int j = 1; j <= 3; j++ ) {
493 answer.
at(1,col + j) = F.
at(j,1) * dN.
at(i, 1);
494 answer.
at(2,col + j) = F.
at(j,2) * dN.
at(i, 2);
495 answer.
at(3,col + j) = F.
at(j,3) * dN.
at(i, 3);
496 answer.
at(4,col + j) = F.
at(j,2) * dN.
at(i, 3) + F.
at(j,3) * dN.
at(i, 2);
497 answer.
at(5,col + j) = F.
at(j,1) * dN.
at(i, 3) + F.
at(j,3) * dN.
at(i, 1);
498 answer.
at(6,col + j) = F.
at(j,1) * dN.
at(i, 2) + F.
at(j,2) * dN.
at(i, 1);
535 double NA = 0.5 * ( 1.0 - lCoords.
at(2) );
536 double NC = 0.5 * ( 1.0 + lCoords.
at(2) );
537 double NB = 0.5 * ( 1.0 - lCoords.
at(1) );
538 double ND = 0.5 * ( 1.0 + lCoords.
at(1) );
544 for (
int j = 1; j <= 3; j++ ) {
545 answer.
at(1,col + j) = F.
at(j,1) * dN.
at(i, 1);
546 answer.
at(2,col + j) = F.
at(j,2) * dN.
at(i, 2);
547 answer.
at(3,col + j) = F.
at(j,3) * dN.
at(i, 3);
548 answer.
at(6,col + j) = F.
at(j,1) * dN.
at(i, 2) + F.
at(j,2) * dN.
at(i, 1);
550 answer.
at(4,col + j) = NB * ( FB.
at(j,2) * dNdxB.
at(i, 3) + FB.
at(j,3) * dNdxB.
at(i, 2) ) + ND * ( FD.
at(j,2) * dNdxD.
at(i, 3) + FD.
at(j,3) * dNdxD.
at(i, 2) ) ;
551 answer.
at(5,col + j) = NA * ( FA.
at(j,1) * dNdxA.
at(i, 3) + FA.
at(j,3) * dNdxA.
at(i, 1) ) + NC * ( FC.
at(j,1) * dNdxC.
at(i, 3) + FC.
at(j,3) * dNdxC.
at(i, 1) );
579 E.beTProductOf(F, F);
588 E.beTProductOf(F, F);
621 double NA = 0.5 * ( 1.0 - lCoords.
at(2) );
622 double NC = 0.5 * ( 1.0 + lCoords.
at(2) );
623 double NB = 0.5 * ( 1.0 - lCoords.
at(1) );
624 double ND = 0.5 * ( 1.0 + lCoords.
at(1) );
626 answer.
at(4) = NB * EB.
at(2,3) + ND * ED.
at(2,3);
627 answer.
at(5) = NA * EA.
at(2,3) + NC * EC.
at(2,3);
646 S.beMatrixFormOfStress(vS);
656 K_ij.
at(1,1) = K_ij.
at(2,2) = K_ij.
at(3,3) = G_ij.
at(i,j);
657 answer.
assemble(K_ij, { (i-1)*3 + 1, (i-1)*3 + 2, (i-1)*3 + 3 }, { (j-1)*3 + 1, (j-1)*3 + 2, (j-1)*3 + 3 } );
#define REGISTER_Element(class)
int numberOfDofMans
Number of dofmanagers.
void computeVectorOf(ValueModeType u, TimeStep *tStep, FloatArray &answer)
std::vector< std ::unique_ptr< IntegrationRule > > integrationRulesArray
CrossSection * giveCrossSection()
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
virtual double giveTransformationJacobian(const FloatArray &lcoords, const FEICellGeometry &cellgeo) const
virtual void giveJacobianMatrixAt(FloatMatrix &jacobianMatrix, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const
virtual double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
Domain * giveDomain() const
int number
Component number.
void plusProduct(const FloatMatrix &b, const FloatArray &s, double dV)
void beSymVectorFormOfStrain(const FloatMatrix &aMatrix)
void beColumnOf(const FloatMatrix &mat, int col)
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void add(const FloatArray &src)
void add(const FloatMatrix &a)
void resize(Index rows, Index cols)
*Sets size of receiver to be an empty matrix It will have zero rows and zero columns size void clear()
void beProductTOf(const FloatMatrix &a, const FloatMatrix &b)
void plusProductUnsym(const FloatMatrix &a, const FloatMatrix &b, double dV)
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
void zero()
Zeroes all coefficient of receiver.
bool beInverseOf(const FloatMatrix &src)
double giveDeterminant() const
void beMatrixForm(const FloatArray &aArray)
int giveNumberOfRows() const
Returns number of rows of receiver.
void assemble(const FloatMatrix &src, const IntArray &loc)
double at(std::size_t i, std::size_t j) const
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
const FloatArray & giveNaturalCoordinates() const
Returns coordinate array of receiver.
IntegrationPointStatus * giveMaterialStatus(IntegrationPointStatusIDType key=IPSID_Default)
int nlGeometry
Flag indicating if geometrical nonlinearities apply.
static ParamKey IPK_SolidShell_EAS_type
static FEI3dHexaLin interpolation
void computeAlpha(FloatArray &answer, FloatArray &u)
virtual void computeBEmatrixAt(GaussPoint *gp, FloatMatrix &answer, TimeStep *tStep)
virtual void computeEASBmatrixAt(GaussPoint *gp, FloatMatrix &answer)
void computeBondTransformationMatrix(FloatMatrix &answer, FloatMatrix &base)
void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int lowerIndx=1, int upperIndx=ALL_STRAINS) override
void computeEVector(FloatArray &answer, FloatArray &lCoords, FloatArray &ae)
void computeFVector(FloatArray &answer, FloatArray &lCoords, FloatArray &ae)
void computeBHmatrixAt(GaussPoint *gp, FloatMatrix &answer) override
void computeGeometricStiffness(FloatMatrix &answer, GaussPoint *gp, TimeStep *tStep)
FEInterpolation * giveInterpolation() const override
void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) override
double computeVolumeAround(GaussPoint *gp) override
FloatArray giveRealStresses(const FloatArray &reducedStrain, GaussPoint *gp, TimeStep *tStep) const
virtual FloatArray giveFirstPKStresses(const FloatArray &reducedF, GaussPoint *gp, TimeStep *tStep) const
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
const FloatArray & giveStressVector() const
Returns the const pointer to receiver's stress vector.
#define PM_UPDATE_PARAMETER(_val, _pm, _ir, _componentnum, _paramkey, _prio)