78 double l, ksi, n1, n2, n1x, n2x;
91 n1 = 0.5 * ( 1 - ksi );
92 n2 = 0.5 * ( 1. + ksi );
96 answer.
at(1, 1) = -1. / l;
97 answer.
at(1, 7) = 1. / l;
99 answer.
at(2, 3) = n1x;
100 answer.
at(2, 5) = n1;
101 answer.
at(2, 9) = n2x;
102 answer.
at(2, 11) = n2;
104 answer.
at(3, 2) = n1x;
105 answer.
at(3, 6) = -n1;
106 answer.
at(3, 8) = n2x;
107 answer.
at(3, 12) = -n2;
109 answer.
at(4, 4) = -1. / l;
110 answer.
at(4, 10) = 1. / l;
112 answer.
at(5, 5) = n1x;
113 answer.
at(5, 11) = n2x;
115 answer.
at(6, 6) = n1x;
116 answer.
at(6, 12) = n2x;
142 answer.
at(1, 1) = answer.
at(2, 2) = answer.
at(3, 3) = halfMass;
143 answer.
at(7, 7) = answer.
at(8, 8) = answer.
at(9, 9) = halfMass;
154 ksi = iLocCoord.
at(1);
155 n1 = ( 1. - ksi ) * 0.5;
156 n2 = ( 1. + ksi ) * 0.5;
161 answer.
at(1, 1) = n1;
162 answer.
at(1, 7) = n2;
163 answer.
at(2, 2) = n1;
164 answer.
at(2, 8) = n2;
165 answer.
at(3, 3) = n1;
166 answer.
at(3, 9) = n2;
168 answer.
at(4, 4) = n1;
169 answer.
at(4, 10) = n2;
170 answer.
at(5, 5) = n1;
171 answer.
at(5, 11) = n2;
172 answer.
at(6, 6) = n1;
173 answer.
at(6, 12) = n2;
196 for (
int i = 1; i <= 3; i++ ) {
197 for (
int j = 1; j <= 3; j++ ) {
198 answer.
at(i, j) = lcs.
at(i, j);
199 answer.
at(i + 3, j + 3) = lcs.
at(i, j);
200 answer.
at(i + 6, j + 6) = lcs.
at(i, j);
201 answer.
at(i + 9, j + 9) = lcs.
at(i, j);
207 for (
int i = 1; i <= 3; i++ ) {
208 for (
int j = 1; j <= 3; j++ ) {
210 answer.
at(i + 3, j + 3) =
tempTc.at(j, i);
211 answer.
at(i + 6, j + 6) =
tempTc.at(j, i);
212 answer.
at(i + 9, j + 9) =
tempTc.at(j, i);
234 answer = { D_u, D_v, D_w, R_u, R_v, R_w };
244 n1 = ( 1. - ksi ) * 0.5;
245 n2 = ( 1. + ksi ) * 0.5;
265 OOFEM_ERROR(
"computeConstitutiveMatrix_dPdF_At Not implemented");
296 length = sqrt(dx * dx + dy * dy + dz * dz);
324 this->
tc.beTranspositionOf(lcs);
340 for (
int i = 1; i <= 12; i++ ) {
375 for (
int i = 1; i <= 3; i++ ) {
376 for (
int j = 1; j <= 3; j++ ) {
377 answer.
at(i, j) = lcs.
at(i, j);
378 answer.
at(3 + i, 3 + j) = lcs.
at(i, j);
419 Node *nodeA, *nodeB, *refNode;
427 for (
int i = 1; i <= 3; i++ ) {
432 lz.beVectorProductOf(lx, help);
434 ly.beVectorProductOf(lz, lx);
437 for (
int i = 1; i <= 3; i++ ) {
438 answer.
at(1, i) = lx.at(i);
439 answer.
at(2, i) = ly.at(i);
440 answer.
at(3, i) = lz.at(i);
462 centreSpin.
at(1) = 0.5 * ( u.
at(4) + u.
at(10) );
463 centreSpin.
at(2) = 0.5 * ( u.
at(5) + u.
at(11) );
464 centreSpin.
at(3) = 0.5 * ( u.
at(6) + u.
at(12) );
490 answer.
at(1, 1) = answer.
at(2, 2) = answer.
at(3, 3) = 1.;
492 if ( psiSize <= 1.e-40 ) {
498 S.times(sin(psiSize) / psiSize);
499 SS.
times( ( 1. - cos(psiSize) ) / ( psiSize * psiSize ) );
515 answer.
at(1, 1) = answer.
at(2, 2) = answer.
at(3, 3) = 0.;
516 answer.
at(1, 2) = -vec.
at(3);
517 answer.
at(1, 3) = vec.
at(2);
518 answer.
at(2, 1) = vec.
at(3);
519 answer.
at(2, 3) = -vec.
at(1);
520 answer.
at(3, 1) = -vec.
at(2);
521 answer.
at(3, 2) = vec.
at(1);
541 answer.
add(PrevEpsilon);
557 ( this->
giveNode(1)->giveCoordinate(1) + u.
at(1) );
559 ( this->
giveNode(1)->giveCoordinate(2) + u.
at(2) );
561 ( this->
giveNode(1)->giveCoordinate(3) + u.
at(3) );
563 return sqrt(dx * dx + dy * dy + dz * dz);
599 if ( ( iores =
tc.storeYourself(stream) ) !=
CIO_OK ) {
610 if ( ( iores =
tc.restoreYourself(stream) ) !=
CIO_OK ) {
620 double layerYCoord, layerZCoord;
627 answer.
at(1) = masterGpStrain.
at(1) + masterGpStrain.
at(5) * layerZCoord - masterGpStrain.
at(6) * layerYCoord;
628 answer.
at(2) = masterGpStrain.
at(2);
629 answer.
at(3) = masterGpStrain.
at(3);
650 if ( !
gc.testElementGraphicActivity(
this) ) {
657 EASValsSetColor(
gc.getElementColor() );
665 go = CreateLine3D(p);
666 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
667 EGAttachObject(go, ( EObjectP )
this);
668 EMAddGraphicsToModel(ESIModel(), go);
677 if ( !
gc.testElementGraphicActivity(
this) ) {
681 double defScale =
gc.getDefScale();
684 char const *colors[] = {
685 "red",
"green",
"blue"
689 EASValsSetColor(
gc.getDeformedElementColor() );
698 go = CreateLine3D(p);
699 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
700 EMAddGraphicsToModel(ESIModel(), go);
712 for ( i = 1; i <= 3; i++ ) {
713 p [ 1 ].x = p [ 0 ].x + coeff *
tc.at(1, i);
714 p [ 1 ].y = p [ 0 ].y + coeff *
tc.at(2, i);
715 p [ 1 ].z = p [ 0 ].z + coeff *
tc.at(3, i);
717 EASValsSetColor(ColorGetPixelFromString(
const_cast< char *
>( colors [ i - 1 ] ), & succ) );
719 go = CreateLine3D(p);
720 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
721 EMAddGraphicsToModel(ESIModel(), go);
734 if ( !
gc.testElementGraphicActivity(
this) ) {
739 if (
gc.getInternalVarsDefGeoFlag() ) {
741 defScale =
gc.getDefScale();
765 gc.updateFringeTableMinMax(& s, 1);
767 go = CreateLine3D(p);
768 EASValsSetColor(
gc.getElementColor() );
771 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
772 EMAddGraphicsToModel(ESIModel(), go);
774 EASValsSetMType(FILLED_CIRCLE_MARKER);
775 go = CreateMarkerWD3D(p, v.
at(1) );
776 EGWithMaskChangeAttributes(LAYER_MASK | FILL_MASK | MTYPE_MASK, go);
777 EMAddGraphicsToModel(ESIModel(), go);
#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
Domain * giveDomain() const
Domain * domain
Link to domain object, useful for communicating with other FEM components.
int number
Component number.
FiberedCrossSectionInterface()
double computeNorm() const
Index giveSize() const
Returns the size of receiver.
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 beProductOf(const FloatMatrix &a, const FloatMatrix &b)
void zero()
Zeroes all coefficient of receiver.
double at(std::size_t i, std::size_t j) const
double giveNaturalCoordinate(int i) const
Returns i-th natural element coordinate of receiver.
IntegrationPointStatus * giveMaterialStatus(IntegrationPointStatusIDType key=IPSID_Default)
double giveWeight()
Returns integration weight of receiver.
StateCounterType tempTcCounter
Time stamp of temporary centre triad.
bool computeGtoLRotationMatrix(FloatMatrix &answer) override
double giveCurrentLength(TimeStep *tStep)
double computeLength() override
void initForNewStep() override
void giveEdgeDofMapping(IntArray &answer, int iEdge) const override
void updateYourself(TimeStep *tStep) override
void computeRotMtrx(FloatMatrix &answer, FloatArray &psi)
void initializeFrom(InputRecord &ir, int prio) override
void drawDeformedGeometry(oofegGraphicContext &gc, TimeStep *tStep, UnknownType) override
void drawScalar(oofegGraphicContext &gc, TimeStep *tStep) override
static ParamKey IPK_LIBeam3d2_refnode
double computeVolumeAround(GaussPoint *gp) override
int computeLoadGToLRotationMtrx(FloatMatrix &answer) override
void computeBodyLoadVectorAt(FloatArray &answer, Load *load, TimeStep *tStep, ValueModeType mode) override
void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int=1, int=ALL_STRAINS) override
void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep) override
void updateTempTriad(TimeStep *tStep)
int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords) override
void computeConstitutiveMatrix_dPdF_At(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) override
void saveContext(DataStream &stream, ContextMode mode) override
double computeEdgeVolumeAround(GaussPoint *gp, int iEdge) override
void computeLumpedMassMatrix(FloatMatrix &answer, TimeStep *tStep) override
void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) override
void postInitialize() override
Performs post initialization steps.
Interface * giveInterface(InterfaceType it) override
int testElementExtension(ElementExtension ext) override
int giveLocalCoordinateSystem(FloatMatrix &answer) override
void giveDofManDofIDMask(int inode, IntArray &) const override
void restoreContext(DataStream &stream, ContextMode mode) override
void computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep) override
void computeSMtrx(FloatMatrix &answer, FloatArray &vec)
void computeGaussPoints() override
void drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep) override
FloatMatrix tc
Last equilibrium triad at the centre.
LIBeam3d2(int n, Domain *d)
FloatMatrix tempTc
Temporary triad at the centre.
int computeLoadLEToLRotationMatrix(FloatMatrix &answer, int iEdge, GaussPoint *gp) override
void FiberedCrossSectionInterface_computeStrainVectorInFiber(FloatArray &answer, const FloatArray &masterGpStrain, GaussPoint *slaveGp, TimeStep *tStep) override
void computeStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep) override
void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer) 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 computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
virtual void computeBodyLoadVectorAt(FloatArray &answer, Load *load, TimeStep *tStep, ValueModeType mode)
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
StateCounterType giveSolutionStateCounter()
@ FiberedCrossSectionInterfaceType
@ Element_EdgeLoadSupport
Element extension for edge loads.
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
#define OOFEG_VARPLOT_PATTERN_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)