80 answer.
at(1, 1) = answer.
at(2, 2) = answer.
at(3, 3) = 0.;
81 answer.
at(1, 2) = -vec.
at(3);
82 answer.
at(1, 3) = vec.
at(2);
83 answer.
at(2, 1) = vec.
at(3);
84 answer.
at(2, 3) = -vec.
at(1);
85 answer.
at(3, 1) = -vec.
at(2);
86 answer.
at(3, 2) = vec.
at(1);
104 answer.
at(1, 1) = answer.
at(2, 2) = answer.
at(3, 3) = 1.;
106 if ( psiSize <= 1.e-40 ) {
112 S.times(sin(psiSize) / psiSize);
113 SS.
times( ( 1. - cos(psiSize) ) / ( psiSize * psiSize ) );
127 double centreSpinSize;
133 centreSpin.at(1) = 0.5 * ( u.
at(4) + u.
at(10) );
134 centreSpin.at(2) = 0.5 * ( u.
at(5) + u.
at(11) );
135 centreSpin.at(3) = 0.5 * ( u.
at(6) + u.
at(12) );
137 centreSpinSize = centreSpin.computeNorm();
138 if ( centreSpinSize > 1.e-30 ) {
139 centreSpin.normalize();
140 q2.
at(1) = sin(centreSpinSize / 2.) * centreSpin.at(1);
141 q2.
at(2) = sin(centreSpinSize / 2.) * centreSpin.at(2);
142 q2.
at(3) = sin(centreSpinSize / 2.) * centreSpin.at(3);
143 q2.
at(4) = cos(centreSpinSize / 2.);
146 tempQ.at(1) =
q.at(4) * q2.
at(1) + q2.
at(4) *
q.at(1) - (
q.at(2) * q2.
at(3) -
q.at(3) * q2.
at(2) );
147 tempQ.at(2) =
q.at(4) * q2.
at(2) + q2.
at(4) *
q.at(2) - (
q.at(3) * q2.
at(1) -
q.at(1) * q2.
at(3) );
148 tempQ.at(3) =
q.at(4) * q2.
at(3) + q2.
at(4) *
q.at(3) - (
q.at(1) * q2.
at(2) -
q.at(2) * q2.
at(1) );
149 tempQ.at(4) =
q.at(4) * q2.
at(4) - (
q.at(1) * q2.
at(1) +
q.at(2) * q2.
at(2) +
q.at(3) * q2.
at(3) );
165 answer.
at(1, 1) =
q.at(4) *
q.at(4) +
q.at(1) *
q.at(1) - 0.5;
166 answer.
at(1, 2) =
q.at(1) *
q.at(2) -
q.at(3) *
q.at(4);
167 answer.
at(1, 3) =
q.at(1) *
q.at(3) +
q.at(2) *
q.at(4);
169 answer.
at(2, 1) =
q.at(2) *
q.at(1) +
q.at(3) *
q.at(4);
170 answer.
at(2, 2) =
q.at(4) *
q.at(4) +
q.at(2) *
q.at(2) - 0.5;
171 answer.
at(2, 3) =
q.at(2) *
q.at(3) -
q.at(1) *
q.at(4);
173 answer.
at(3, 1) =
q.at(3) *
q.at(1) -
q.at(2) *
q.at(4);
174 answer.
at(3, 2) =
q.at(3) *
q.at(2) +
q.at(1) *
q.at(4);
175 answer.
at(3, 3) =
q.at(4) *
q.at(4) +
q.at(3) *
q.at(3) - 0.5;
191 trR = R.
at(1, 1) + R.
at(2, 2) + R.
at(3, 3);
194 for ( i = 1; i <= 3; i++ ) {
195 if ( R.
at(i, i) > a ) {
203 answer.
at(4) = 0.5 * sqrt(1. + a);
204 answer.
at(1) = ( R.
at(3, 2) - R.
at(2, 3) ) / ( 4. * answer.
at(4) );
205 answer.
at(2) = ( R.
at(1, 3) - R.
at(3, 1) ) / ( 4. * answer.
at(4) );
206 answer.
at(3) = ( R.
at(2, 1) - R.
at(1, 2) ) / ( 4. * answer.
at(4) );
213 }
else if ( ii == 2 ) {
221 answer.
at(ii) = sqrt(0.5 * a + 0.25 * ( 1. - trR ) );
222 answer.
at(4) = 0.25 * ( R.
at(kk, jj) - R.
at(jj, kk) ) / answer.
at(ii);
223 answer.
at(jj) = 0.25 * ( R.
at(jj, ii) + R.
at(ii, jj) ) / answer.
at(ii);
224 answer.
at(kk) = 0.25 * ( R.
at(kk, ii) + R.
at(ii, kk) ) / answer.
at(ii);
242 eps.beTProductOf(tempTc, xd);
243 eps.times(1. / this->
l0);
250 answer.
at(1) = eps.at(1);
251 answer.
at(2) = eps.at(2);
252 answer.
at(3) = eps.at(3);
253 answer.
at(4) = curv.
at(1);
254 answer.
at(5) = curv.
at(2);
255 answer.
at(6) = curv.
at(3);
271 for (
int i = 1; i < 4; i++ ) {
272 answer.
at(i, i) = -1.0;
273 answer.
at(i + 6, i) = 1.0;
274 answer.
at(i + 3, i + 3) = -1.0;
275 answer.
at(i + 9, i + 3) = 1.0;
277 for (
int j = 1; j < 4; j++ ) {
278 answer.
at(i + 3, j) = answer.
at(i + 9, j) = 0.5 * s.
at(j, i);
296 if ( useUpdatedGpRecord == 1 ) {
303 for (
int i = 1; i <= 3; i++ ) {
305 for (
int j = 1; j <= 3; j++ ) {
306 s1 += tempTc.
at(i, j) * stress.
at(j);
307 s2 += tempTc.
at(i, j) * stress.
at(j + 3);
329 ( this->
giveNode(1)->giveCoordinate(1) + u.
at(1) );
331 ( this->
giveNode(1)->giveCoordinate(2) + u.
at(2) );
333 ( this->
giveNode(1)->giveCoordinate(3) + u.
at(3) );
341 FloatMatrix d, x, xt(12, 6), dxt, sn, sm, sxd, y, tempTc;
353 for (
int i = 1; i <= 12; i++ ) {
354 for (
int j = 1; j <= 3; j++ ) {
355 for (
int k = 1; k <= 3; k++ ) {
357 xt.at(i, j) += x.
at(i, k) * tempTc.
at(k, j);
358 xt.at(i, j + 3) += x.
at(i, k + 3) * tempTc.
at(k, j);
373 for (
int i = 1; i <= 3; i++ ) {
375 for (
int j = 1; j <= 3; j++ ) {
376 s1 += tempTc.
at(i, j) * stress.
at(j);
377 s2 += tempTc.
at(i, j) * stress.
at(j + 3);
387 for (
int i = 1; i <= 3; i++ ) {
388 for (
int j = 1; j <= 3; j++ ) {
389 answer.
at(i, j + 3) += sn.
at(i, j);
390 answer.
at(i, j + 9) += sn.
at(i, j);
391 answer.
at(i + 3, j + 3) += sm.
at(i, j);
392 answer.
at(i + 3, j + 9) += sm.
at(i, j);
394 answer.
at(i + 6, j + 3) -= sn.
at(i, j);
395 answer.
at(i + 6, j + 9) -= sn.
at(i, j);
396 answer.
at(i + 9, j + 3) -= sm.
at(i, j);
397 answer.
at(i + 9, j + 9) -= sm.
at(i, j);
408 for (
int i = 1; i <= 3; i++ ) {
409 for (
int j = 1; j <= 3; j++ ) {
410 answer.
at(i + 3, j) -= sn.
at(i, j);
411 answer.
at(i + 3, j + 3) += y.
at(i, j);
412 answer.
at(i + 3, j + 6) += sn.
at(i, j);
413 answer.
at(i + 3, j + 9) += y.
at(i, j);
415 answer.
at(i + 9, j) -= sn.
at(i, j);
416 answer.
at(i + 9, j + 3) += y.
at(i, j);
417 answer.
at(i + 9, j + 6) += sn.
at(i, j);
418 answer.
at(i + 9, j + 9) += y.
at(i, j);
445 OOFEM_ERROR(
"computeConstitutiveMatrix_dPdF_At Not implemented");
496 l0 = sqrt(dx * dx + dy * dy + dz * dz);
513 answer.
at(1, 1) = answer.
at(2, 2) = answer.
at(3, 3) = halfMass;
514 answer.
at(7, 7) = answer.
at(8, 8) = answer.
at(9, 9) = halfMass;
525 ksi = iLocCoord.
at(1);
526 n1 = ( 1. - ksi ) * 0.5;
527 n2 = ( 1. + ksi ) * 0.5;
533 answer.
at(1, 1) = n1;
534 answer.
at(1, 7) = n2;
536 answer.
at(2, 2) = n1;
537 answer.
at(2, 8) = n2;
539 answer.
at(3, 3) = n1;
540 answer.
at(3, 9) = n2;
542 answer.
at(4, 4) = n1;
543 answer.
at(4, 10) = n2;
545 answer.
at(5, 5) = n1;
546 answer.
at(5, 11) = n2;
548 answer.
at(6, 6) = n1;
549 answer.
at(6, 12) = n2;
566 answer = { D_u, D_v, D_w, R_u, R_v, R_w };
575 n1 = ( 1. - ksi ) * 0.5;
576 n2 = ( 1. + ksi ) * 0.5;
599 for (
int i = 1; i <= 12; i++ ) {
626 Node *nodeA, *nodeB, *refNode;
634 for (
int i = 1; i <= 3; i++ ) {
639 lz.beVectorProductOf(lx, help);
641 ly.beVectorProductOf(lz, lx);
644 for (
int i = 1; i <= 3; i++ ) {
645 answer.
at(1, i) = lx.at(i);
646 answer.
at(2, i) = ly.at(i);
647 answer.
at(3, i) = lz.at(i);
672 for (
int i = 1; i <= 3; i++ ) {
673 for (
int j = 1; j <= 3; j++ ) {
674 answer.
at(i, j) = lcs.
at(i, j);
675 answer.
at(3 + i, 3 + j) = lcs.
at(i, j);
778 double acSize, coeff;
782 ac.at(1) = 0.5 * ( ui.at(10) - ui.at(4) );
783 ac.at(2) = 0.5 * ( ui.at(11) - ui.at(5) );
784 ac.at(3) = 0.5 * ( ui.at(12) - ui.at(6) );
790 acSize = ac.computeSquaredNorm();
792 if ( acSize > 1.e-30 ) {
796 om.
times(2. * tan(acSize / 2.) );
798 coeff = ( 1. - ( acSize / sin(acSize) ) );
799 for (
int i = 1; i <= 3; i++ ) {
800 for (
int j = 1; j <= 3; j++ ) {
801 h.
at(i, j) = coeff * ac.at(i) * ac.at(j);
805 for (
int i = 1; i <= 3; i++ ) {
806 h.
at(i, i) = 1. - h.
at(i, i);
810 acp.at(1) = ( ui.at(10) - ui.at(4) ) / this->
l0;
811 acp.at(2) = ( ui.at(11) - ui.at(5) ) / this->
l0;
812 acp.at(3) = ( ui.at(12) - ui.at(6) ) / this->
l0;
815 omp.
times(2. * tan(acSize / 2.) / acSize);
818 kapgn1.
times(1. / 2.);
833 answer.
at(1) += PrevEpsilon.
at(4);
834 answer.
at(2) += PrevEpsilon.
at(5);
835 answer.
at(3) += PrevEpsilon.
at(6);
846 if ( ( iores =
q.storeYourself(stream) ) !=
CIO_OK ) {
858 if ( ( iores =
q.restoreYourself(stream) ) !=
CIO_OK ) {
869 if ( !
gc.testElementGraphicActivity(
this) ) {
876 EASValsSetColor(
gc.getElementColor() );
884 go = CreateLine3D(p);
885 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
886 EGAttachObject(go, ( EObjectP )
this);
887 EMAddGraphicsToModel(ESIModel(), go);
895 if ( !
gc.testElementGraphicActivity(
this) ) {
899 double defScale =
gc.getDefScale();
902 const char *colors[] = {
903 "red",
"green",
"blue"
907 EASValsSetColor(
gc.getDeformedElementColor() );
916 go = CreateLine3D(p);
917 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
918 EMAddGraphicsToModel(ESIModel(), go);
923 double coeff = this->
l0 / 3.;
931 for ( i = 1; i <= 3; i++ ) {
932 p [ 1 ].x = p [ 0 ].x + coeff * tc.
at(1, i);
933 p [ 1 ].y = p [ 0 ].y + coeff * tc.
at(2, i);
934 p [ 1 ].z = p [ 0 ].z + coeff * tc.
at(3, i);
936 EASValsSetColor(ColorGetPixelFromString(
const_cast< char *
>( colors [ i - 1 ] ), & succ) );
938 go = CreateLine3D(p);
939 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
940 EMAddGraphicsToModel(ESIModel(), go);
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)
double giveCoordinate(int i) const
Node * giveNode(int i) const
virtual void updateYourself(TimeStep *tStep)
int numberOfDofMans
Number of dofmanagers.
void computeVectorOf(ValueModeType u, TimeStep *tStep, FloatArray &answer)
void postInitialize() override
Performs post initialization steps.
void saveContext(DataStream &stream, ContextMode mode) override
std::vector< std ::unique_ptr< IntegrationRule > > integrationRulesArray
virtual void initForNewStep()
CrossSection * giveCrossSection()
void restoreContext(DataStream &stream, ContextMode mode) override
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
Domain * giveDomain() const
Domain * domain
Link to domain object, useful for communicating with other FEM components.
int number
Component number.
double computeNorm() const
double computeSquaredNorm() const
Index giveSize() const
Returns the size of receiver.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void beVectorProductOf(const FloatArray &v1, const FloatArray &v2)
void beTProductOf(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 beProductOf(const FloatMatrix &a, const FloatMatrix &b)
void beTranspositionOf(const FloatMatrix &src)
void zero()
Zeroes all coefficient of receiver.
double at(std::size_t i, std::size_t j) const
IntegrationPointStatus * giveMaterialStatus(IntegrationPointStatusIDType key=IPSID_Default)
double giveWeight()
Returns integration weight of receiver.
GaussPoint * getIntegrationPoint(int n)
FloatArray tempQ
Temporary quaternion at the center.
double computeLength() override
int referenceNode
Reference node.
void giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord=0) override
void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer) override
void postInitialize() override
Performs post initialization steps.
void updateYourself(TimeStep *tStep) override
LIBeam3dNL2(int n, Domain *d)
FloatArray q
Quaternion at the center (last equilibrated).
void initializeFrom(InputRecord &ir, int prio) override
void drawDeformedGeometry(oofegGraphicContext &gc, TimeStep *tStep, UnknownType) override
void computeXdVector(FloatArray &answer, TimeStep *tStep)
void saveContext(DataStream &stream, ContextMode mode) override
double computeEdgeVolumeAround(GaussPoint *gp, int iEdge) override
void computeSMtrx(FloatMatrix &answer, FloatArray &vec)
void updateTempQuaternion(TimeStep *tStep)
void restoreContext(DataStream &stream, ContextMode mode) override
void giveEdgeDofMapping(IntArray &answer, int iEdge) const override
void computeRotMtrxFromQuaternion(FloatMatrix &answer, FloatArray &q)
int giveLocalCoordinateSystem(FloatMatrix &answer) override
void computeQuaternionFromRotMtrx(FloatArray &answer, FloatMatrix &R)
void computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep) override
void initForNewStep() override
void computeTempCurv(FloatArray &answer, TimeStep *tStep)
void computeRotMtrx(FloatMatrix &answer, FloatArray &psi)
void giveDofManDofIDMask(int inode, IntArray &answer) const override
void computeBodyLoadVectorAt(FloatArray &answer, Load *load, TimeStep *tStep, ValueModeType mode) override
void computeXMtrx(FloatMatrix &answer, TimeStep *tStep)
int computeLoadGToLRotationMtrx(FloatMatrix &answer) override
void computeLumpedMassMatrix(FloatMatrix &answer, TimeStep *tStep) override
double computeVolumeAround(GaussPoint *gp) override
static ParamKey IPK_LIBeam3dNL2_refnode
int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords) override
void computeGaussPoints() override
void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep) override
void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) override
void computeStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep) override
void computeConstitutiveMatrix_dPdF_At(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) override
int computeLoadLEToLRotationMatrix(FloatMatrix &answer, int iEdge, GaussPoint *gp) override
StateCounterType tempQCounter
Time stamp of temporary centre quaternion.
void drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep) override
void initializeFrom(InputRecord &ir, int priority) override
NLStructuralElement(int n, Domain *d)
int nlGeometry
Flag indicating if geometrical nonlinearities apply.
virtual double giveUpdatedCoordinate(int ic, TimeStep *tStep, double scale=1.)
virtual FloatMatrixF< 6, 6 > give3dBeamStiffMtrx(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const =0
virtual FloatArrayF< 6 > giveGeneralizedStress_Beam3d(const FloatArrayF< 6 > &generalizedStrain, GaussPoint *gp, TimeStep *tStep) const =0
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
virtual void computeBodyLoadVectorAt(FloatArray &answer, Load *load, TimeStep *tStep, ValueModeType mode)
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
const FloatArray & giveStressVector() const
Returns the const pointer to receiver's stress vector.
StateCounterType giveSolutionStateCounter()
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
#define OOFEG_DEFORMED_GEOMETRY_LAYER
#define OOFEG_DEFORMED_GEOMETRY_WIDTH
#define OOFEG_RAW_GEOMETRY_WIDTH
#define OOFEG_RAW_GEOMETRY_LAYER
#define PM_ELEMENT_ERROR_IFNOTSET(_pm, _componentnum, _paramkey)
#define PM_UPDATE_PARAMETER(_val, _pm, _ir, _componentnum, _paramkey, _prio)