102 TimeStep *tStep = this->
domain->giveEngngModel()->giveCurrentStep();
114 answer.
at(1, 1) = -1. / l;
115 answer.
at(1, 7) = 1. / l;
117 answer.
at(2, 3) = ( -2. *
kappay ) / ( l * c1y );
119 answer.
at(2, 9) = 2. *
kappay / ( l * c1y );
120 answer.
at(2, 11) =
kappay / ( c1y );
122 answer.
at(3, 2) = ( -2. *
kappaz ) / ( l * c1z );
123 answer.
at(3, 6) = -
kappaz / ( c1z );
124 answer.
at(3, 8) = 2. *
kappaz / ( l * c1z );
125 answer.
at(3, 12) = -
kappaz / ( c1z );
128 answer.
at(4, 4) = -1. / l;
129 answer.
at(4, 10) = 1. / l;
131 answer.
at(5, 3) = ( 6. - 12. * ksi ) / ( l * l * c1y );
132 answer.
at(5, 5) = ( -2. * ( 2. +
kappay ) + 6. * ksi ) / ( l * c1y );
133 answer.
at(5, 9) = ( -6. + 12. * ksi ) / ( l * l * c1y );
134 answer.
at(5, 11) = ( -2. * ( 1. -
kappay ) + 6. * ksi ) / ( l * c1y );
136 answer.
at(6, 2) = -1.0 * ( 6. - 12. * ksi ) / ( l * l * c1z );
137 answer.
at(6, 6) = ( -2. * ( 2. +
kappaz ) + 6. * ksi ) / ( l * c1z );
138 answer.
at(6, 8) = -1.0 * ( -6. + 12. * ksi ) / ( l * l * c1z );
139 answer.
at(6, 12) = ( -2. * ( 1. -
kappaz ) + 6. * ksi ) / ( l * c1z );
143void Beam3d :: computeGaussPoints()
164 TimeStep *tStep = this->
domain->giveEngngModel()->giveCurrentStep();
167 ksi = 0.5 + 0.5 * iLocCoord.
at(1);
178 answer.
at(1, 1) = 1. - ksi;
179 answer.
at(1, 7) = ksi;
180 answer.
at(2, 2) = ( c1z - 2. *
kappaz * ksi - 3. * ksi2 + 2. * ksi3 ) / c1z;
181 answer.
at(2, 6) = -l * ( -( 1. +
kappaz ) * ksi + ( 2. +
kappaz ) * ksi2 - ksi3 ) / c1z;
182 answer.
at(2, 8) = ( 2. *
kappaz * ksi + 3. * ksi2 - 2. * ksi3 ) / c1z;
183 answer.
at(2, 12) = -l * (
kappaz * ksi + ( 1. -
kappaz ) * ksi2 - ksi3 ) / c1z;
184 answer.
at(3, 3) = ( c1y - 2. *
kappay * ksi - 3. * ksi2 + 2. * ksi3 ) / c1y;
185 answer.
at(3, 5) = l * ( -( 1. +
kappay ) * ksi + ( 2. +
kappay ) * ksi2 - ksi3 ) / c1y;
186 answer.
at(3, 9) = ( 2. *
kappay * ksi + 3. * ksi2 - 2. * ksi3 ) / c1y;
187 answer.
at(3, 11) = l * (
kappay * ksi + ( 1. -
kappay ) * ksi2 - ksi3 ) / c1y;
190 answer.
at(4, 4) = 1. - ksi;
191 answer.
at(4, 10) = ksi;
192 answer.
at(5, 3) = ( 6. * ksi - 6. * ksi2 ) / ( l * c1y );
193 answer.
at(5, 5) = ( c1y - 2. * ( 2. +
kappay ) * ksi + 3. * ksi2 ) / c1y;
194 answer.
at(5, 9) = -( 6. * ksi - 6. * ksi2 ) / ( l * c1y );
195 answer.
at(5, 11) = ( -2. * ( 1. -
kappay ) * ksi + 3. * ksi2 ) / c1y;
196 answer.
at(6, 2) = -( 6. * ksi - 6. * ksi2 ) / ( l * c1z );
197 answer.
at(6, 6) = ( c1z - 2. * ( 2. +
kappaz ) * ksi + 3. * ksi2 ) / c1z;
198 answer.
at(6, 8) = ( 6. * ksi - 6. * ksi2 ) / ( l * c1z );
199 answer.
at(6, 12) = ( -2. * ( 1. -
kappaz ) * ksi + 3. * ksi2 ) / c1z;
212 double dV = gp->giveWeight() * 0.5 * l;
232 OOFEM_ERROR(
"Beam3D only has 1 edge (the midline) that supports loads. Attempted to apply load to edge %d", edge);
235 if ( type != ExternalForcesVector ) {
244 const FloatArray &lcoords = gp->giveNaturalCoordinates();
247 load->
computeValues(t, tStep, lcoords, { D_u, D_v, D_w, R_u, R_v, R_w }, mode);
250 load->
computeValues(t, tStep, coords, { D_u, D_v, D_w, R_u, R_v, R_w }, mode);
259 double dl = gp->giveWeight() * 0.5 * l;
280 for (
int i = 1; i <= 3; i++ ) {
281 for (
int j = 1; j <= 3; j++ ) {
282 answer.
at(i, j) = lcs.
at(i, j);
283 answer.
at(3 + i, 3 + j) = lcs.
at(i, j);
295 answer.
resize(ndofs, ndofs);
299 for (
int i = 1; i <= 3; i++ ) {
300 for (
int j = 1; j <= 3; j++ ) {
301 answer.
at(i, j) = lcs.
at(i, j);
302 answer.
at(i + 3, j + 3) = lcs.
at(i, j);
303 answer.
at(i + 6, j + 6) = lcs.
at(i, j);
304 answer.
at(i + 9, j + 9) = lcs.
at(i, j);
308 for (
int i = 13; i <= ndofs; i++ ) {
309 answer.
at(i, i) = 1.0;
313 int condensedDofCounter = 0;
315 D_u, D_v, D_w, R_u, R_v, R_w
320 for (
int inode = 0; inode < 2; inode++ ) {
322 for (
int idof = 0; idof < 6; idof++ ) {
323 int eq = inode * 6 + idof + 1;
325 if (
ghostNodes [ inode ]->hasDofID(dofids [ idof ]) ) {
326 condensedDofCounter++;
327 l2p.
at(eq, 12 + condensedDofCounter) = 1.0;
331 l2p.
at(eq, eq) = 1.0;
345Beam3d :: B3SSMI_getUnknownsGtoLRotationMatrix() const
353 for (
int i = 1; i <= 3; i++ ) {
354 for (
int j = 1; j <= 3; j++ ) {
355 answer.
at(i, j) = lcs.
at(i, j);
356 answer.
at(i + 3, j + 3) = lcs.
at(i, j);
372 if ( type == IST_BeamForceMomentTensor ) {
375 }
else if ( type == IST_BeamStrainCurvatureTensor ) {
378 }
else if ( type == IST_ShellForceTensor || type == IST_ShellStrainTensor ) {
381 const FloatArray &help = type == IST_ShellForceTensor ?
386 answer.
at(1) = help.
at(1);
390 answer.
at(5) = help.
at(2);
391 answer.
at(6) = help.
at(3);
393 }
else if ( type == IST_ShellMomentTensor || type == IST_CurvatureTensor ) {
394 const FloatArray &help = type == IST_ShellMomentTensor ?
398 answer.
at(1) = help.
at(4);
402 answer.
at(5) = help.
at(6);
403 answer.
at(6) = help.
at(5);
406 return BeamBaseElement :: giveIPValue(answer, gp, type, tStep);
412Beam3d :: giveDofManDofIDMask(
int inode,
IntArray &answer)
const
415 D_u, D_v, D_w, R_u, R_v, R_w
421Beam3d :: computeLength()
432 length = sqrt(dx * dx + dy * dy + dz * dz);
451 if ( d.
at(3, 3) != 0. ) {
452 kappay = 6. * d.
at(5, 5) / ( d.
at(3, 3) * l * l );
456 if ( d.
at(2, 2) != 0. ) {
457 kappaz = 6. * d.
at(6, 6) / ( d.
at(2, 2) * l * l );
507 }
else if ( this->
zaxis.giveSize() > 0 ) {
512 }
else if ( this->
yaxis.giveSize() > 0 ) {
523 rot.
at(1, 1) = cos(theta) + pow(lx.
at(1), 2) * ( 1 - cos(theta) );
524 rot.
at(1, 2) = lx.
at(1) * lx.
at(2) * ( 1 - cos(theta) ) - lx.
at(3) * sin(theta);
525 rot.
at(1, 3) = lx.
at(1) * lx.
at(3) * ( 1 - cos(theta) ) + lx.
at(2) * sin(theta);
527 rot.
at(2, 1) = lx.
at(2) * lx.
at(1) * ( 1 - cos(theta) ) + lx.
at(3) * sin(theta);
528 rot.
at(2, 2) = cos(theta) + pow(lx.
at(2), 2) * ( 1 - cos(theta) );
529 rot.
at(2, 3) = lx.
at(2) * lx.
at(3) * ( 1 - cos(theta) ) - lx.
at(1) * sin(theta);
531 rot.
at(3, 1) = lx.
at(3) * lx.
at(1) * ( 1 - cos(theta) ) - lx.
at(2) * sin(theta);
532 rot.
at(3, 2) = lx.
at(3) * lx.
at(2) * ( 1 - cos(theta) ) + lx.
at(1) * sin(theta);
533 rot.
at(3, 3) = cos(theta) + pow(lx.
at(3), 2) * ( 1 - cos(theta) );
553 for (
int i = 1; i <= 3; i++ ) {
554 answer.
at(1, i) = lx.
at(i);
555 answer.
at(2, i) = ly.
at(i);
556 answer.
at(3, i) = lz.
at(i);
566 BeamBaseElement :: initializeFrom(ir, priority);
578Beam3d :: postInitialize()
580 BeamBaseElement :: postInitialize();
584 OOFEM_WARNING(
"wrong reference node specified. Using default orientation.");
592 if (!(
yaxis ||
zaxis || refnode || refangle)) {
598 IntArray val (std::get<IntArray>(*_val));
605 D_u, D_v, D_w, R_u, R_v, R_w
608 for (
int i = 1; i <= val.
giveSize(); i++ ) {
609 if ( val.
at(i) <= 6 ) {
638 BeamBaseElement :: giveInternalForcesVector(answer, tStep, useUpdatedGpRecord);
695Beam3d :: printOutputAt(FILE *File,
TimeStep *tStep)
706 fprintf(File,
" local displacements ");
707 for (
auto &val : rl ) {
708 fprintf(File,
" %.4e", val);
711 fprintf(File,
"\n local end forces ");
712 for (
auto &val : Fl ) {
713 fprintf(File,
" %.4e", val);
719 iRule->printOutputAt(File, tStep);
728 BeamBaseElement :: computeBodyLoadVectorAt(answer, load, tStep, mode);
734Beam3d :: computeConsistentMassMatrix(
FloatMatrix &answer,
TimeStep *tStep,
double &mass,
const double *ipDensity)
760 if ( ipDensity != NULL ) {
762 density = * ipDensity;
768 double c2y = ( area * density ) / ( ( 1. + 2. *
kappay ) * ( 1. + 2. *
kappay ) );
769 double c2z = ( area * density ) / ( ( 1. + 2. *
kappaz ) * ( 1. + 2. *
kappaz ) );
770 double c1 = ( area * density );
775 answer.
at(1, 1) = c1 * l / 3.0;
776 answer.
at(1, 7) = c1 * l / 6.0;
777 answer.
at(2, 2) = c2z * l * ( 13. / 35. + 7. *
kappaz / 5. + 4. * kappaz2 / 3. );
778 answer.
at(2, 6) = c2z * l * l * ( 11. / 210. +
kappaz * 11. / 60. + kappaz2 / 6. );
779 answer.
at(2, 8) = c2z * l * ( 9. / 70. +
kappaz * 3. / 5. + kappaz2 * 2. / 3. );
780 answer.
at(2, 12) = -c2z * l * l * ( 13. / 420. +
kappaz * 3. / 20. + kappaz2 / 6. );
781 answer.
at(3, 3) = c2y * l * ( 13. / 35. + 7. *
kappay / 5. + 4. * kappay2 / 3. );
782 answer.
at(3, 5) = -c2y * l * l * ( 11. / 210. +
kappay * 11. / 60. + kappay2 / 6. );
783 answer.
at(3, 9) = c2y * l * ( 9. / 70. +
kappay * 3. / 5. + kappay2 * 2. / 3. );
784 answer.
at(3, 11) = c2y * l * l * ( 13. / 420. +
kappay * 3. / 20. + kappay2 / 6. );
785 answer.
at(4,4) = Ikk*density*l/3.;
786 answer.
at(4,10) = Ikk*density*l/6.;
787 answer.
at(5, 5) = c2y * l * l * l * ( 1. / 105. +
kappay / 30. + kappay2 / 30. );
788 answer.
at(5, 9) = -c2y * l * l * ( 13. / 420. +
kappay * 3. / 20. + kappay2 / 6. );
789 answer.
at(5, 11) = -c2y * l * l * l * ( 1. / 140. +
kappay / 30. + kappay2 / 30. );
790 answer.
at(6, 6) = c2z * l * l * l * ( 1. / 105. +
kappaz / 30. + kappaz2 / 30. );
791 answer.
at(6, 8) = c2z * l * l * ( 13. / 420. +
kappaz * 3. / 20. + kappaz2 / 6. );
792 answer.
at(6, 12) = -c2z * l * l * l * ( 1. / 140. +
kappaz / 30. + kappaz2 / 30. );
795 answer.
at(7, 7) = c1 * l / 3.0;
796 answer.
at(8, 8) = c2z * l * ( 13. / 35. +
kappaz * 7. / 5. + kappaz2 * 4. / 3. );
797 answer.
at(8, 12) = -c2z * l * l * ( 11. / 210. +
kappaz * 11. / 60. + kappaz2 / 6. );
798 answer.
at(9, 9) = c2y * l * ( 13. / 35. +
kappay * 7. / 5. + kappay2 * 4. / 3. );
799 answer.
at(9, 11) = c2y * l * l * ( 11. / 210. +
kappay * 11. / 60. + kappay2 / 6. );
800 answer.
at(10,10) = Ikk*density*l/3.;
801 answer.
at(11, 11) = c2y * l * l * l * ( 1. / 105. +
kappay / 30. + kappay2 / 30. );
802 answer.
at(12, 12) = c2z * l * l * l * ( 1. / 105. +
kappaz / 30. + kappaz2 / 30. );
806 mass = area * l * density;
817 n1 = ( 1. - ksi ) * 0.5;
818 n2 = ( 1. + ksi ) * 0.5;
821 answer.
at(1) = n1 * this->
giveNode(1)->giveCoordinate(1) + n2 *this->
giveNode(2)->giveCoordinate(1);
822 answer.
at(2) = n1 * this->
giveNode(1)->giveCoordinate(2) + n2 *this->
giveNode(2)->giveCoordinate(2);
823 answer.
at(3) = n1 * this->
giveNode(1)->giveCoordinate(3) + n2 *this->
giveNode(2)->giveCoordinate(3);
849 answer.
at(2, 2) = ( 4. * kappaz2 + 4. *
kappaz + 6. / 5. ) / denomz;
850 answer.
at(2, 6) = ( l / 10. ) / denomz;
851 answer.
at(2, 8) = ( -4. * kappaz2 - 4. *
kappaz - 6. / 5. ) / denomz;
852 answer.
at(2, 12) = ( l / 10. ) / denomz;
854 answer.
at(3, 3) = ( 4. * kappay2 + 4. *
kappay + 6. / 5. ) / denomy;
855 answer.
at(3, 5) = ( -l / 10. ) / denomy;
856 answer.
at(3, 9) = ( -4. * kappay2 - 4. *
kappay - 6. / 5. ) / denomy;
857 answer.
at(3, 11) = ( -l / 10. ) / denomy;
859 answer.
at(5, 5) = l * l * ( kappay2 / 3. +
kappay / 3. + 2. / 15. ) / denomy;
860 answer.
at(5, 9) = ( l / 10. ) / denomy;
861 answer.
at(5, 11) = -l * l * ( kappay2 / 3. +
kappay / 3. + 1. / 30. ) / denomy;
863 answer.
at(6, 6) = l * l * ( kappaz2 / 3. +
kappaz / 3. + 2. / 15. ) / denomz;
864 answer.
at(6, 8) = ( -l / 10. ) / denomz;
865 answer.
at(6, 12) = -l * l * ( kappaz2 / 3. +
kappaz / 3. + 1. / 30. ) / denomz;
867 answer.
at(8, 8) = ( 4. * kappaz2 + 4. *
kappaz + 6. / 5. ) / denomz;
868 answer.
at(8, 12) = ( -l / 10. ) / denomz;
870 answer.
at(9, 9) = ( 4. * kappay2 + 4. *
kappay + 6. / 5. ) / denomy;
871 answer.
at(9, 11) = ( l / 10. ) / denomy;
873 answer.
at(11, 11) = l * l * ( kappay2 / 3. +
kappay / 3. + 2. / 15. ) / denomy;
874 answer.
at(12, 12) = l * l * ( kappaz2 / 3. +
kappaz / 3. + 2. / 15. ) / denomz;
876 minVal =
min( fabs( answer.
at(2, 2) ), fabs( answer.
at(3, 3) ) );
877 minVal =
min( minVal, fabs( answer.
at(5, 5) ) );
878 minVal =
min( minVal, fabs( answer.
at(6, 6) ) );
880 answer.
at(1, 1) = minVal / 1000.;
881 answer.
at(1, 7) = -answer.
at(1, 1);
882 answer.
at(7, 7) = answer.
at(1, 1);
884 answer.
at(4, 4) = minVal / 1000.;
885 answer.
at(4, 10) = -answer.
at(4, 4);
886 answer.
at(10, 10) = answer.
at(4, 4);
894 N = ( -endForces.
at(1) + endForces.
at(7) ) / 2.;
915 answer.
at(2, 2) = 1.;
916 answer.
at(2, 8) =-1.;
917 answer.
at(8, 2) =-1.;
918 answer.
at(8, 8) = 1.;
920 answer.
at(3, 3) = 1.;
921 answer.
at(3, 9) =-1.;
922 answer.
at(9, 3) =-1.;
923 answer.
at(9, 9) = 1.;
929 N = ( -endForces.
at(1) + endForces.
at(7) ) / 2.;
936Beam3d :: FiberedCrossSectionInterface_computeStrainVectorInFiber(
FloatArray &answer,
const FloatArray &masterGpStrain,
939 double layerYCoord, layerZCoord;
946 answer.
at(1) = masterGpStrain.
at(1) + masterGpStrain.
at(5) * layerZCoord - masterGpStrain.
at(6) * layerYCoord;
947 answer.
at(2) = masterGpStrain.
at(2) + layerYCoord * masterGpStrain.
at(4);
948 answer.
at(3) = masterGpStrain.
at(3) - layerZCoord * masterGpStrain.
at(4);
970 BeamBaseElement :: updateLocalNumbering(f);
982 if ( !
gc.testElementGraphicActivity(
this) ) {
989 EASValsSetColor(
gc.getElementColor() );
991 p [ 0 ].x = ( FPNum ) this->
giveNode(1)->giveCoordinate(1);
992 p [ 0 ].y = ( FPNum ) this->
giveNode(1)->giveCoordinate(2);
993 p [ 0 ].z = ( FPNum ) this->
giveNode(1)->giveCoordinate(3);
994 p [ 1 ].x = ( FPNum ) this->
giveNode(2)->giveCoordinate(1);
995 p [ 1 ].y = ( FPNum ) this->
giveNode(2)->giveCoordinate(2);
996 p [ 1 ].z = ( FPNum ) this->
giveNode(2)->giveCoordinate(3);
997 go = CreateLine3D(p);
998 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
999 EGAttachObject(go, ( EObjectP )
this);
1000 EMAddGraphicsToModel(ESIModel(), go);
1008 if ( !
gc.testElementGraphicActivity(
this) ) {
1012 double defScale =
gc.getDefScale();
1016 EASValsSetColor(
gc.getDeformedElementColor() );
1018 p [ 0 ].x = ( FPNum ) this->
giveNode(1)->giveUpdatedCoordinate(1, tStep, defScale);
1019 p [ 0 ].y = ( FPNum ) this->
giveNode(1)->giveUpdatedCoordinate(2, tStep, defScale);
1020 p [ 0 ].z = ( FPNum ) this->
giveNode(1)->giveUpdatedCoordinate(3, tStep, defScale);
1022 p [ 1 ].x = ( FPNum ) this->
giveNode(2)->giveUpdatedCoordinate(1, tStep, defScale);
1023 p [ 1 ].y = ( FPNum ) this->
giveNode(2)->giveUpdatedCoordinate(2, tStep, defScale);
1024 p [ 1 ].z = ( FPNum ) this->
giveNode(2)->giveUpdatedCoordinate(3, tStep, defScale);
1025 go = CreateLine3D(p);
1026 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
1027 EMAddGraphicsToModel(ESIModel(), go);
1041 MatResponseMode rMode,
TimeStep *tStep)
1049 double dV = gp->giveWeight() * 0.5 * l;
1061 ksi = lcoords.
at(1);
1062 n1 = ( 1. - ksi ) * 0.5;
1063 n2 = ( 1. + ksi ) * 0.5;
1066 answer.
at(1) = n1 * this->
giveNode(1)->giveCoordinate(1) + n2 *pCoords.
at(1);
1067 answer.
at(2) = n1 * this->
giveNode(1)->giveCoordinate(2) + n2 *pCoords.
at(2);
1068 answer.
at(3) = n1 * this->
giveNode(1)->giveCoordinate(3) + n2 *pCoords.
at(3);
1090 double ds = sqrt(dx * dx + dy * dy + dz * dz);
1092 answer.
at(5) += iF.
at(3) * ds;
1093 answer.
at(6) -= iF.
at(2) * ds;
1101 for (
int i = 1; i <= nBodyLoads; i++ ) {
1111 OOFEM_ERROR(
"body load %d is of unsupported type (%d)",
id, ltype);
1118 for (
int i = 1; i <= nBoundaryLoads; i++ ) {
1123 if ( ( bLoad =
dynamic_cast< BoundaryLoad *
>(load) ) ) {
1127 ExternalForcesVector, VM_Total, tStep, coords, ds,
false);
1130 OOFEM_ERROR(
"boundary load %d is of unsupported type (%d)",
id, ltype);
1144 for ( BCTracker :: entryListType :: iterator it = bcList.begin(); it != bcList.end(); ++it ) {
1149 if ( ( bodyLoad =
dynamic_cast< BodyLoad *
>(bc) ) ) {
1152 }
else if ( ( boundaryLoad =
dynamic_cast< BoundaryLoad *
>(bc) ) ) {
1155 ExternalForcesVector, VM_Total, tStep, coords, ds,
false);
1185 OOFEM_ERROR(
"Beam3D only has 1 edge (the midline) that supports loads. Attempted to apply load to edge %d", edge);
1188 if ( type != ExternalForcesVector ) {
1197 const FloatArray &lcoords = gp->giveNaturalCoordinates();
1200 load->
computeValues(t, tStep, lcoords, { D_u, D_v, D_w, R_u, R_v, R_w }, mode);
1202 load->
computeValues(t, tStep, coords, { D_u, D_v, D_w, R_u, R_v, R_w }, mode);
1212 double dl = gp->giveWeight() * 0.5 * ds;
1215 f.
at(5) += f.
at(3) * ( lcoords.
at(1) + 1 ) * ds / 2;
1216 f.
at(6) -= f.
at(2) * ( lcoords.
at(1) + 1 ) * ds / 2;
1257 const FloatArray &lcoords = gp->giveNaturalCoordinates();
1259 dV = gp->giveWeight() * 0.5 * ds;
1263 iF.
at(5) += force.
at(3) * ( lcoords.
at(1) + 1 ) * ds / 2;
1264 iF.
at(6) -= force.
at(2) * ( lcoords.
at(1) + 1 ) * ds / 2;
1265 answer.
add(dV * dens, iF);
1274Beam3d :: giveCompositeExportData(std :: vector< ExportRegion > &vtkPieces,
IntArray &primaryVarsToExport,
IntArray &internalVarsToExport,
IntArray cellVarsToExport,
TimeStep *tStep)
1277 vtkPieces.resize(1);
1280 vtkPieces [ 0 ].setNumberOfNodes(nNodes);
1283 Node *nodeA, *nodeB;
1295 for (
int j = 0; j < 2; j++ ) {
1299 vtkPieces [ 0 ].setNodeCoords(nodeNumber, coords);
1302 connectivity.
at(j + 1) = val++;
1304 vtkPieces [ 0 ].setConnectivity(i + 1, connectivity);
1306 vtkPieces [ 0 ].setOffset(i + 1, offset);
1307 vtkPieces [ 0 ].setCellType(i + 1, 3);
1311 int n = internalVarsToExport.
giveSize();
1312 vtkPieces [ 0 ].setNumberOfInternalVarsToExport(internalVarsToExport, nNodes);
1313 for (
int i = 1; i <= n; i++ ) {
1315 for (
int nN = 1; nN <= nNodes; nN++ ) {
1316 if ( isttype == IST_BeamForceMomentTensor ) {
1317 FloatArray coords = vtkPieces [ 0 ].giveNodeCoords(nN);
1320 vtkPieces [ 0 ].setInternalVarInNode(isttype, nN, endForces);
1321 }
else if ( isttype == IST_X_LCS || isttype == IST_Y_LCS || isttype == IST_Z_LCS ) {
1324 vtkPieces[0].setInternalVarInNode(isttype, nN, answer);
1331 n = primaryVarsToExport.
giveSize();
1332 vtkPieces [ 0 ].setNumberOfPrimaryVarsToExport(primaryVarsToExport, nNodes);
1333 for (
int i = 1; i <= n; i++ ) {
1335 if ( utype == DisplacementVector ) {
1340 for (
int nN = 1; nN <= nNodes; nN++ ) {
1343 xi.
at(1) = nodeXi.at(nN);
1350 vtkPieces [ 0 ].setPrimaryVarInNode(utype, nN, d);
1353 fprintf( stderr,
"VTKXMLExportModule::exportPrimaryVars: unsupported variable type %s\n",
__UnknownTypeToString(utype) );
#define REGISTER_Element(class)
const entryListType & getElementRecords(int elem)
Beam3dSubsoilMaterialInterface()
Constructor.
int computeLoadGToLRotationMtrx(FloatMatrix &answer) override
void computeInternalForcesFromBodyLoadVectorAtPoint(FloatArray &answer, Load *forLoad, TimeStep *tStep, ValueModeType mode, FloatArray &pointCoords, double ds)
void giveEndForcesVector(FloatArray &answer, TimeStep *tStep)
void giveInternalForcesVector(FloatArray &answer, TimeStep *, int useUpdatedGpRecord=0) override
static FEI3dLineLin interp
Geometry interpolator only.
double computeLength() override
DofManager * ghostNodes[2]
void computeSubSoilStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
static ParamKey IPK_Beam3d_refangle
[optional] Reference angle for the beam
void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &) override
void computeSubSoilNMatrixAt(GaussPoint *gp, FloatMatrix &answer)
void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep) override
void computeKappaCoeffs(TimeStep *tStep)
static ParamKey IPK_Beam3d_zaxis
[optional] Z axis for the beam
double giveKappayCoeff(TimeStep *tStep)
double giveKappazCoeff(TimeStep *tStep)
FloatMatrixF< 6, 6 > B3SSMI_getUnknownsGtoLRotationMatrix() const override
Evaluate transformation matrix for reciver unknowns.
int numberOfCondensedDofs
number of condensed DOFs
bool computeGtoLRotationMatrix(FloatMatrix &answer) override
void giveInternalForcesVectorAtPoint(FloatArray &answer, TimeStep *tStep, FloatArray &coords)
int computeNumberOfGlobalDofs() override
static ParamKey IPK_Beam3d_dofsToCondense
[optional] DOFs to condense
static ParamKey IPK_Beam3d_yaxis
[optional] Y axis for the beam
static ParamKey IPK_Beam3d_refnode
[optional] Reference node for the beam
void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) override
void computeInternalForcesFromBoundaryEdgeLoadVectorAtPoint(FloatArray &answer, BoundaryLoad *load, int edge, CharType type, ValueModeType mode, TimeStep *tStep, FloatArray &pointCoords, double ds, bool global)
int subsoilMat
Subsoil material.
static ParamKey IPK_Beam3d_subsoilmat
[optional] Subsoil material for the beam
int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords) override
int giveLocalCoordinateSystem(FloatMatrix &answer) override
void computeBmatrixAt(GaussPoint *, FloatMatrix &, int=1, int=ALL_STRAINS) override
virtual void computeLocalForceLoadVector(FloatArray &answer, TimeStep *tStep, ValueModeType mode)
BeamBaseElement(int n, Domain *d)
CoordSystType giveCoordSystMode() override
double giveCoordinate(int i) const
const FloatArray & giveCoordinates() const
Node * giveNode(int i) const
IntArray boundaryLoadArray
virtual void giveLocalCoordinateSystemVector(InternalStateType isttype, FloatArray &answer)
IntArray * giveBodyLoadArray()
Returns array containing load numbers of loads acting on element.
int numberOfDofMans
Number of dofmanagers.
void computeVectorOf(ValueModeType u, TimeStep *tStep, FloatArray &answer)
IntArray * giveBoundaryLoadArray()
Returns array containing load numbers of boundary loads acting on element.
std::vector< std ::unique_ptr< IntegrationRule > > integrationRulesArray
CrossSection * giveCrossSection()
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
Domain * giveDomain() const
Domain * domain
Link to domain object, useful for communicating with other FEM components.
int number
Component number.
FiberedCrossSectionInterface()
void plusProduct(const FloatMatrix &b, const FloatArray &s, double dV)
double dotProduct(const FloatArray &x) const
Index giveSize() const
Returns the size of receiver.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
void rotatedWith(FloatMatrix &r, char mode)
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 subtract(const FloatArray &src)
void beSubArrayOf(const FloatArray &src, const IntArray &indx)
double at(std::size_t i, std::size_t j) const
void plusProductSymmUpper(const FloatMatrix &a, const FloatMatrix &b, double dV)
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.
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 bool isImposed(TimeStep *tStep)
virtual void computeValues(FloatArray &answer, TimeStep *tStep, const FloatArray &coords, const IntArray &dofids, ValueModeType mode)
virtual void computeComponentArrayAt(FloatArray &answer, TimeStep *tStep, ValueModeType mode)
virtual FormulationType giveFormulationType()
bool checkIfSet(size_t componentIndex, size_t paramIndex)
std::optional< paramValue > getTempParam(size_t componentIndex, size_t paramIndex) const
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
virtual void computeConsistentMassMatrix(FloatMatrix &answer, TimeStep *tStep, double &mass, const double *ipDensity=NULL)
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.
virtual FloatMatrixF< 6, 6 > give3dBeamSubSoilStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const
VTKXMLExportModuleElementInterface()
#define OOFEM_WARNING(...)
const char * __InternalStateTypeToString(InternalStateType _value)
@ CS_InertiaMomentZ
Moment of inertia around z-axis.
@ CS_InertiaMomentY
Moment of inertia around y-axis.
FloatArrayF< N > min(const FloatArrayF< N > &a, const FloatArrayF< N > &b)
bcGeomType
Type representing the geometric character of loading.
@ BodyLoadBGT
Distributed body load.
@ EdgeLoadBGT
Distributed edge load.
const char * __UnknownTypeToString(UnknownType _value)
@ Beam3dSubsoilMaterialInterfaceType
@ VTKXMLExportModuleElementInterfaceType
@ FiberedCrossSectionInterfaceType
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_UPDATE_TEMP_PARAMETER(_type, _pm, _ir, _componentnum, _paramkey, _prio)
#define PM_UPDATE_PARAMETER(_val, _pm, _ir, _componentnum, _paramkey, _prio)