35 #include "../sm/Elements/Beams/beam3d.h" 36 #include "../sm/Materials/structuralms.h" 104 answer.
at(1, 1) = -1. / l;
105 answer.
at(1, 7) = 1. / l;
107 answer.
at(2, 3) = ( -2. *
kappay ) / ( l * c1y );
108 answer.
at(2, 5) = kappay / (c1y );
109 answer.
at(2, 9) = 2. * kappay / ( l * c1y );
110 answer.
at(2, 11) = kappay / (c1y );
112 answer.
at(3, 2) = ( -2. *
kappaz ) / ( l * c1z );
113 answer.
at(3, 6) = -kappaz / (c1z );
114 answer.
at(3, 8) = 2. * kappaz / ( l * c1z );
115 answer.
at(3, 12) = -kappaz / (c1z );
118 answer.
at(4, 4) = -1. / l;
119 answer.
at(4, 10) = 1. / l;
121 answer.
at(5, 3) = ( 6. - 12. * ksi ) / ( l * l * c1y );
122 answer.
at(5, 5) = ( -2. * ( 2. +
kappay ) + 6. * ksi ) / ( l * c1y );
123 answer.
at(5, 9) = ( -6. + 12. * ksi ) / ( l * l * c1y );
124 answer.
at(5, 11) = ( -2. * ( 1. -
kappay ) + 6. * ksi ) / ( l * c1y );
126 answer.
at(6, 2) = -1.0*( 6. - 12. * ksi ) / ( l * l * c1z );
127 answer.
at(6, 6) = ( -2. * ( 2. +
kappaz ) + 6. * ksi ) / ( l * c1z );
128 answer.
at(6, 8) = -1.0*( -6. + 12. * ksi ) / ( l * l * c1z );
129 answer.
at(6, 12) = ( -2. * ( 1. -
kappaz ) + 6. * ksi ) / ( l * c1z );
157 ksi = 0.5 + 0.5 * iLocCoord.
at(1);
168 answer.
at(1, 1) = 1. - ksi;
169 answer.
at(1, 7) = ksi;
170 answer.
at(2, 2) = ( c1z - 2. * kappaz * ksi - 3. * ksi2 + 2. * ksi3 ) / c1z;
171 answer.
at(2, 6) = -l * ( -( 1. +
kappaz ) * ksi + ( 2. + kappaz ) * ksi2 - ksi3 ) / c1z;
172 answer.
at(2, 8) = ( 2. * kappaz * ksi + 3. * ksi2 - 2. * ksi3 ) / c1z;
173 answer.
at(2, 12) = -l * ( kappaz * ksi + ( 1. -
kappaz ) * ksi2 - ksi3 ) / c1z;
174 answer.
at(3, 3) = ( c1y - 2. * kappay * ksi - 3. * ksi2 + 2. * ksi3 ) / c1y;
175 answer.
at(3, 5) = l * ( -( 1. +
kappay ) * ksi + ( 2. + kappay ) * ksi2 - ksi3 ) / c1y;
176 answer.
at(3, 9) = ( 2. * kappay * ksi + 3. * ksi2 - 2. * ksi3 ) / c1y;
177 answer.
at(3, 11) = l * ( kappay * ksi + ( 1. -
kappay ) * ksi2 - ksi3 ) / c1y;
180 answer.
at(4, 4) = 1. - ksi;
181 answer.
at(4, 10) = ksi;
182 answer.
at(5, 3) = ( 6. * ksi - 6. * ksi2 ) / ( l * c1y );
183 answer.
at(5, 5) = ( c1y - 2. * ( 2. +
kappay ) * ksi + 3. * ksi2 ) / c1y;
184 answer.
at(5, 9) = -( 6. * ksi - 6. * ksi2 ) / ( l * c1y );
185 answer.
at(5, 11) = ( -2. * ( 1. -
kappay ) * ksi + 3. * ksi2 ) / c1y;
186 answer.
at(6, 2) = -( 6. * ksi - 6. * ksi2 ) / ( l * c1z );
187 answer.
at(6, 6) = ( c1z - 2. * ( 2. +
kappaz ) * ksi + 3. * ksi2 ) / c1z;
188 answer.
at(6, 8) = ( 6. * ksi - 6. * ksi2 ) / ( l * c1z );
189 answer.
at(6, 12) = ( -2. * ( 1. -
kappaz ) * ksi + 3. * ksi2 ) / c1z;
202 double dV = gp->giveWeight() * 0.5 * l;
222 OOFEM_ERROR(
"Beam3D only has 1 edge (the midline) that supports loads. Attempted to apply load to edge %d", edge);
225 if ( type != ExternalForcesVector ) {
234 const FloatArray &lcoords = gp->giveNaturalCoordinates();
238 load->
computeValues(t, tStep, coords, {D_u, D_v, D_w, R_u, R_v, R_w}, mode);
240 load->
computeValues(t, tStep, lcoords, {D_u, D_v, D_w, R_u, R_v, R_w}, mode);
249 double dl = gp->giveWeight() * 0.5 * l;
270 for (
int i = 1; i <= 3; i++ ) {
271 for (
int j = 1; j <= 3; j++ ) {
272 answer.
at(i, j) = lcs.
at(i, j);
273 answer.
at(3 + i, 3 + j) = lcs.
at(i, j);
285 answer.
resize(ndofs, ndofs);
289 for (
int i = 1; i <= 3; i++ ) {
290 for (
int j = 1; j <= 3; j++ ) {
291 answer.
at(i, j) = lcs.
at(i, j);
292 answer.
at(i + 3, j + 3) = lcs.
at(i, j);
293 answer.
at(i + 6, j + 6) = lcs.
at(i, j);
294 answer.
at(i + 9, j + 9) = lcs.
at(i, j);
298 for (
int i = 13; i <= ndofs; i++ ) {
299 answer.
at(i, i) = 1.0;
303 int condensedDofCounter = 0;
305 D_u, D_v, D_w, R_u, R_v, R_w
310 for (
int inode = 0; inode < 2; inode++ ) {
312 for (
int idof = 0; idof < 6; idof++ ) {
313 int eq = inode * 6 + idof + 1;
315 if (
ghostNodes [ inode ]->hasDofID(dofids [ idof ]) ) {
316 condensedDofCounter++;
317 l2p.
at(eq, 12 + condensedDofCounter) = 1.0;
321 l2p.
at(eq, eq) = 1.0;
344 for (
int i = 1; i <= 3; i++ ) {
345 for (
int j = 1; j <= 3; j++ ) {
346 answer.
at(i, j) = lcs.
at(i, j);
347 answer.
at(i + 3, j + 3) = lcs.
at(i, j);
363 if ( type == IST_BeamForceMomentTensor ) {
366 }
else if ( type == IST_BeamStrainCurvatureTensor ) {
369 }
else if ( type == IST_ShellForceTensor || type == IST_ShellStrainTensor ) {
372 const FloatArray &help = type == IST_ShellForceTensor ?
377 answer.
at(1) = help.
at(1);
381 answer.
at(5) = help.
at(2);
382 answer.
at(6) = help.
at(3);
384 }
else if ( type == IST_ShellMomentTensor || type == IST_CurvatureTensor ) {
385 const FloatArray &help = type == IST_ShellMomentTensor ?
389 answer.
at(1) = help.
at(4);
393 answer.
at(5) = help.
at(6);
394 answer.
at(6) = help.
at(5);
406 D_u, D_v, D_w, R_u, R_v, R_w
423 length = sqrt(dx * dx + dy * dy + dz * dz);
442 if ( d.
at(3, 3) != 0. ) {
443 kappay = 6. * d.
at(5, 5) / ( d.
at(3, 3) * l * l );
447 if ( d.
at(2, 2) != 0. ) {
448 kappaz = 6. * d.
at(6, 6) / ( d.
at(2, 2) * l * l );
506 rot.
at(1, 1) = cos(theta) + pow(lx.
at(1), 2) * ( 1 - cos(theta) );
507 rot.
at(1, 2) = lx.
at(1) * lx.
at(2) * ( 1 - cos(theta) ) - lx.
at(3) * sin(theta);
508 rot.
at(1, 3) = lx.
at(1) * lx.
at(3) * ( 1 - cos(theta) ) + lx.
at(2) * sin(theta);
510 rot.
at(2, 1) = lx.
at(2) * lx.
at(1) * ( 1 - cos(theta) ) + lx.
at(3) * sin(theta);
511 rot.
at(2, 2) = cos(theta) + pow(lx.
at(2), 2) * ( 1 - cos(theta) );
512 rot.
at(2, 3) = lx.
at(2) * lx.
at(3) * ( 1 - cos(theta) ) - lx.
at(1) * sin(theta);
514 rot.
at(3, 1) = lx.
at(3) * lx.
at(1) * ( 1 - cos(theta) ) - lx.
at(2) * sin(theta);
515 rot.
at(3, 2) = lx.
at(3) * lx.
at(2) * ( 1 - cos(theta) ) + lx.
at(1) * sin(theta);
516 rot.
at(3, 3) = cos(theta) + pow(lx.
at(3), 2) * ( 1 - cos(theta) );
534 for (
int i = 1; i <= 3; i++ ) {
535 answer.
at(1, i) = lx.
at(i);
536 answer.
at(2, i) = ly.
at(i);
537 answer.
at(3, i) = lz.
at(i);
557 OOFEM_WARNING(
"wrong reference node specified. Using default orientation.");
576 D_u, D_v, D_w, R_u, R_v, R_w
579 for (
int i = 1; i <= val.
giveSize(); i++ ) {
580 if ( val.
at(i) <= 6 ) {
683 fprintf(File,
" local displacements ");
684 for (
auto &val : rl ) {
685 fprintf( File,
" %.4e", val );
688 fprintf(File,
"\n local end forces ");
689 for (
auto &val : Fl ) {
690 fprintf( File,
" %.4e", val );
696 iRule->printOutputAt(File, tStep);
723 double kappay2 = kappay *
kappay;
724 double kappaz2 = kappaz *
kappaz;
727 if ( ipDensity != NULL ) {
729 density = * ipDensity;
733 double c2y = ( area * density ) / ( ( 1. + 2. * kappay ) * ( 1. + 2. *
kappay ) );
734 double c2z = ( area * density ) / ( ( 1. + 2. * kappaz ) * ( 1. + 2. *
kappaz ) );
735 double c1 = ( area * density );
740 answer.
at(1, 1) = c1 * l / 3.0;
741 answer.
at(1, 7) = c1 * l / 6.0;
742 answer.
at(2, 2) = c2z * l * ( 13. / 35. + 7. * kappaz / 5. + 4. * kappaz2 / 3. );
743 answer.
at(2, 6) = -c2z * l * l * ( 11. / 210. + kappaz * 11. / 60. + kappaz2 / 6. );
744 answer.
at(2, 8) = c2z * l * ( 9. / 70. + kappaz * 3. / 5. + kappaz2 * 2. / 3. );
745 answer.
at(2, 12) = c2z * l * l * ( 13. / 420. + kappaz * 3. / 20. + kappaz2 / 6. );
746 answer.
at(3, 3) = c2y * l * ( 13. / 35. + 7. * kappay / 5. + 4. * kappay2 / 3. );
747 answer.
at(3, 5) = -c2y * l * l * ( 11. / 210. + kappay * 11. / 60. + kappay2 / 6. );
748 answer.
at(3, 9) = c2y * l * ( 9. / 70. + kappay * 3. / 5. + kappay2 * 2. / 3. );
749 answer.
at(3, 11) = c2y * l * l * ( 13. / 420. + kappay * 3. / 20. + kappay2 / 6. );
750 answer.
at(5, 5) = c2y * l * l * l * ( 1. / 105. + kappay / 30. + kappay2 / 30. );
751 answer.
at(5, 9) = -c2y * l * l * ( 13. / 420. + kappay * 3. / 20. + kappay2 / 6. );
752 answer.
at(5, 11) = -c2y * l * l * l * ( 1. / 140. + kappay / 30. + kappay2 / 30. );
753 answer.
at(6, 6) = c2z * l * l * l * ( 1. / 105. + kappaz / 30. + kappaz2 / 30. );
754 answer.
at(6, 8) = -c2z * l * l * ( 13. / 420. + kappaz * 3. / 20. + kappaz2 / 6. );
755 answer.
at(6, 12) = -c2z * l * l * l * ( 1. / 140. + kappaz / 30. + kappaz2 / 30. );
758 answer.
at(7, 7) = c1 * l / 3.0;
759 answer.
at(8, 8) = c2z * l * ( 13. / 35. + kappaz * 7. / 5. + kappaz2 * 4. / 3. );
760 answer.
at(8, 12) = c2z * l * l * ( 11. / 210. + kappaz * 11. / 60. + kappaz2 / 6. );
761 answer.
at(9, 9) = c2y * l * ( 13. / 35. + kappay * 7. / 5. + kappay2 * 4. / 3. );
762 answer.
at(9, 11) = c2y * l * l * ( 11. / 210. + kappay * 11. / 60. + kappay2 / 6. );
763 answer.
at(11, 11) = c2y * l * l * l * ( 1. / 105. + kappay / 30. + kappay2 / 30. );
764 answer.
at(12, 12) = c2z * l * l * l * ( 1. / 105. + kappaz / 30. + kappaz2 / 30. );
768 mass = area * l * density;
778 n1 = ( 1. - ksi ) * 0.5;
779 n2 = ( 1. + ksi ) * 0.5;
801 double kappay2 = kappay *
kappay;
802 double kappaz2 = kappaz *
kappaz;
804 double denomy = ( 1. + 2. *
kappay ) * ( 1. + 2. * kappay ), denomz = ( 1. + 2. *
kappaz ) * ( 1. + 2. * kappaz );
810 answer.
at(2, 2) = ( 4. * kappaz2 + 4. * kappaz + 6. / 5. ) / denomz;
811 answer.
at(2, 6) = ( l / 10. ) / denomz;
812 answer.
at(2, 8) = ( -4. * kappaz2 - 4. * kappaz - 6. / 5. ) / denomz;
813 answer.
at(2, 12) = ( l / 10. ) / denomz;
815 answer.
at(3, 3) = ( 4. * kappay2 + 4. * kappay + 6. / 5. ) / denomy;
816 answer.
at(3, 5) = ( -l / 10. ) / denomy;
817 answer.
at(3, 9) = ( -4. * kappay2 - 4. * kappay - 6. / 5. ) / denomy;
818 answer.
at(3, 11) = ( -l / 10. ) / denomy;
820 answer.
at(5, 5) = l * l * ( kappay2 / 3. + kappay / 3. + 2. / 15. ) / denomy;
821 answer.
at(5, 9) = ( l / 10. ) / denomy;
822 answer.
at(5, 11) = -l * l * ( kappay2 / 3. + kappay / 3. + 1. / 30. ) / denomy;
824 answer.
at(6, 6) = l * l * ( kappaz2 / 3. + kappaz / 3. + 2. / 15. ) / denomz;
825 answer.
at(6, 8) = ( -l / 10. ) / denomz;
826 answer.
at(6, 12) = -l * l * ( kappaz2 / 3. + kappaz / 3. + 1. / 30. ) / denomz;
828 answer.
at(8, 8) = ( 4. * kappaz2 + 4. * kappaz + 6. / 5. ) / denomz;
829 answer.
at(8, 12) = ( -l / 10. ) / denomz;
831 answer.
at(9, 9) = ( 4. * kappay2 + 4. * kappay + 6. / 5. ) / denomy;
832 answer.
at(9, 11) = ( l / 10. ) / denomy;
834 answer.
at(11, 11) = l * l * ( kappay2 / 3. + kappay / 3. + 2. / 15. ) / denomy;
835 answer.
at(12, 12) = l * l * ( kappaz2 / 3. + kappaz / 3. + 2. / 15. ) / denomz;
837 minVal =
min( fabs( answer.
at(2, 2) ), fabs( answer.
at(3, 3) ) );
838 minVal =
min( minVal, fabs( answer.
at(5, 5) ) );
839 minVal =
min( minVal, fabs( answer.
at(6, 6) ) );
841 answer.
at(1, 1) = minVal / 1000.;
842 answer.
at(1, 7) = -answer.
at(1, 1);
843 answer.
at(7, 7) = answer.
at(1, 1);
845 answer.
at(4, 4) = minVal / 1000.;
846 answer.
at(4, 10) = -answer.
at(4, 4);
847 answer.
at(10, 10) = answer.
at(4, 4);
855 N = ( -endForces.
at(1) + endForces.
at(7) ) / 2.;
866 double layerYCoord, layerZCoord;
873 answer.
at(1) = masterGpStrain.
at(1) + masterGpStrain.
at(5) * layerZCoord - masterGpStrain.
at(6) * layerYCoord;
874 answer.
at(2) = masterGpStrain.
at(2);
875 answer.
at(3) = masterGpStrain.
at(3);
924 go = CreateLine3D(p);
925 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
926 EGAttachObject(go, ( EObjectP )
this);
927 EMAddGraphicsToModel(ESIModel(), go);
952 go = CreateLine3D(p);
953 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
954 EMAddGraphicsToModel(ESIModel(), go);
977 double dV = gp->giveWeight() * 0.5 * l;
990 n1 = ( 1. - ksi ) * 0.5;
991 n2 = ( 1. + ksi ) * 0.5;
1007 IntArray leftIndx = {1, 2 , 3, 4, 5 , 6};
1017 double ds = sqrt(dx * dx + dy * dy + dz * dz);
1019 answer.
at(5) += iF.
at(3)*ds;
1020 answer.
at(6) -= iF.
at(2)*ds;
1028 for (
int i = 1; i <= nBodyLoads; i++ ) {
1038 OOFEM_ERROR(
"body load %d is of unsupported type (%d)",
id, ltype);
1045 for (
int i = 1; i <= nBoundaryLoads; i++ ) {
1050 if ((bLoad = dynamic_cast<BoundaryLoad*> (load))) {
1054 ExternalForcesVector, VM_Total, tStep, coords, ds,
false);
1058 OOFEM_ERROR(
"boundary load %d is of unsupported type (%d)",
id, ltype);
1072 for (BCTracker::entryListType::iterator it = bcList.begin(); it != bcList.end(); ++it) {
1077 if ((bodyLoad = dynamic_cast<BodyLoad*>(bc))) {
1080 }
else if ((boundaryLoad = dynamic_cast<BoundaryLoad*>(bc))) {
1083 ExternalForcesVector, VM_Total, tStep, coords, ds,
false);
1114 OOFEM_ERROR(
"Beam3D only has 1 edge (the midline) that supports loads. Attempted to apply load to edge %d", edge);
1117 if ( type != ExternalForcesVector ) {
1126 const FloatArray &lcoords = gp->giveNaturalCoordinates();
1129 load->
computeValues(t, tStep, coords, {D_u, D_v, D_w, R_u, R_v, R_w}, mode);
1131 load->
computeValues(t, tStep, lcoords, {D_u, D_v, D_w, R_u, R_v, R_w}, mode);
1141 double dl = gp->giveWeight() * 0.5 * ds;
1144 f.
at(5) += f.
at(3) * (lcoords.
at(1)+1)*ds/2;
1145 f.
at(6) -= f.
at(2) * (lcoords.
at(1)+1)*ds/2;
1186 const FloatArray &lcoords = gp->giveNaturalCoordinates();
1188 dV = gp->giveWeight() * 0.5 * ds;
1192 iF.
at(5) += force.
at(3) * (lcoords.
at(1)+1)*ds/2;
1193 iF.
at(6) -= force.
at(2) * (lcoords.
at(1)+1)*ds/2;
1194 answer.
add(dV * dens, iF);
1211 vtkPieces.resize(1);
1214 vtkPieces[0].setNumberOfNodes(nNodes);
1217 Node *nodeA, *nodeB;
1229 for (
int j = 0; j < 2; j++) {
1233 vtkPieces[0].setNodeCoords(nodeNumber,coords);
1236 connectivity.
at(j+1) = val++;
1239 vtkPieces[0].setConnectivity(i+1, connectivity);
1241 vtkPieces[0].setOffset(i+1, offset);
1242 vtkPieces[0].setCellType(i+1,3);
1248 int n = internalVarsToExport.
giveSize();
1249 vtkPieces[0].setNumberOfInternalVarsToExport(n, nNodes);
1250 for (
int i = 1; i <= n; i++ ) {
1252 for (
int nN = 1; nN <= nNodes; nN++) {
1253 if ( isttype == IST_BeamForceMomentTensor ) {
1254 FloatArray coords = vtkPieces[0].giveNodeCoords(nN);
1257 vtkPieces[0].setInternalVarInNode( i, nN, endForces );
1265 vtkPieces[0].setNumberOfPrimaryVarsToExport(n, nNodes);
1266 for (
int i = 1; i <= n; i++ ) {
1268 if ( utype == DisplacementVector ) {
1273 for (
int nN = 1; nN <= nNodes; nN++) {
1276 xi.
at(1) = nodeXi.at(nN);
1281 vtkPieces[0].setPrimaryVarInNode( i, nN, d );
1284 fprintf( stderr,
"VTKXMLExportModule::exportPrimaryVars: unsupported variable type %s\n",
__UnknownTypeToString(utype) );
CrossSection * giveCrossSection()
void giveInternalForcesVectorAtPoint(FloatArray &answer, TimeStep *tStep, FloatArray &coords)
virtual void drawDeformedGeometry(oofegGraphicContext &gc, TimeStep *tStep, UnknownType)
int testElementGraphicActivity(Element *)
Test if particular element passed fulfills various filtering criteria for its graphics output...
virtual bool isImposed(TimeStep *tStep)
Returns nonzero if receiver representing BC is imposed at given time, otherwise returns zero...
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
void subtract(const FloatArray &src)
Subtracts array src to receiver.
int number
Component number.
This class keeps track of applied boundary conditions on individual entities.
virtual void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
Computes numerically stiffness matrix of receiver.
void computeSubSoilStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
IntArray * giveBoundaryLoadArray()
Returns array containing load numbers of boundary loads acting on element.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
void beVectorProductOf(const FloatArray &v1, const FloatArray &v2)
Computes vector product (or cross product) of vectors given as parameters, , and stores the result in...
void computeVectorOf(ValueModeType u, TimeStep *tStep, FloatArray &answer)
Returns local vector of unknowns.
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
Access method for default integration rule.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
virtual void computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)
Computes the stress vector of receiver at given integration point, at time step tStep.
Domain * domain
Link to domain object, useful for communicating with other FEM components.
Class implementing internal element dof manager having some DOFs.
virtual void computeInitialStressMatrix(FloatMatrix &answer, TimeStep *tStep)
Computes initial stress matrix for linear stability problem.
void computeKappaCoeffs(TimeStep *tStep)
void computeSubSoilNMatrixAt(GaussPoint *gp, FloatMatrix &answer)
Load is specified in global c.s.
#define _IFT_Beam3d_zaxis
bcGeomType
Type representing the geometric character of loading.
double giveKappazCoeff(TimeStep *tStep)
double & at(int i)
Coefficient access function.
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
Class implementing element body load, acting over whole element volume (e.g., the dead weight)...
virtual int computeLoadGToLRotationMtrx(FloatMatrix &answer)
Returns transformation matrix from global coordinate system to local element coordinate system for el...
#define OOFEG_RAW_GEOMETRY_LAYER
This class implements a structural material status information.
void clear()
Clears receiver (zero size).
Elements with geometry defined as EGT_Composite are exported using individual pieces.
BCTracker * giveBCTracker()
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
virtual int giveLocalCoordinateSystem(FloatMatrix &answer)
Returns local coordinate system of receiver Required by material models with ortho- and anisotrophy...
EngngModel * giveEngngModel()
Returns engineering model to which receiver is associated.
virtual CoordSystType giveCoordSystMode()
Returns receiver's coordinate system.
virtual void updateLocalNumbering(EntityRenumberingFunctor &f)
Local renumbering support.
virtual void giveGeneralizedStress_Beam3d(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)=0
virtual FEInterpolation * giveInterpolation() const
#define _IFT_Beam3d_dofstocondense
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Prints output of receiver to stream, for given time step.
virtual void computeComponentArrayAt(FloatArray &answer, TimeStep *tStep, ValueModeType mode)
Computes boundary condition value - its components values at given time.
virtual double giveCoordinate(int i)
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
MatResponseMode
Describes the character of characteristic material matrix.
virtual void computeLocalForceLoadVector(FloatArray &answer, TimeStep *tStep, ValueModeType mode)
Computes element end force vector from applied loading in local coordinate system.
const char * __UnknownTypeToString(UnknownType _value)
virtual void giveInternalForcesVector(FloatArray &answer, TimeStep *, int useUpdatedGpRecord=0)
Returns equivalent nodal forces vectors.
virtual void B3SSMI_getUnknownsGtoLRotationMatrix(FloatMatrix &answer)
Evaluate transformation matrix for reciver unknowns.
#define OOFEG_DEFORMED_GEOMETRY_LAYER
void rotatedWith(FloatMatrix &r, char mode)
Returns the receiver a rotated according the change-of-base matrix r.
virtual int computeNumberOfGlobalDofs()
Computes the total number of element's global dofs.
double giveKappayCoeff(TimeStep *tStep)
const entryListType & getElementRecords(int elem)
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be a - b.
GeneralBoundaryCondition * giveBc(int n)
Service for accessing particular domain bc.
EPixel getDeformedElementColor()
Class representing a general abstraction for finite element interpolation class.
Class representing "master" degree of freedom.
virtual void computeValues(FloatArray &answer, TimeStep *tStep, const FloatArray &coords, const IntArray &dofids, ValueModeType mode)
Computes components values for specified dof ids.
double giveNaturalCoordinate(int i) const
Returns i-th natural element coordinate of receiver.
virtual void computeBodyLoadVectorAt(FloatArray &answer, Load *load, TimeStep *tStep, ValueModeType mode)
Computes the load vector due to body load acting on receiver, at given time step. ...
Abstract base class representing a boundary load (force, momentum, ...) that acts directly on a bound...
Material * giveMaterial(int n)
Service for accessing particular domain material model.
void computeInternalForcesFromBodyLoadVectorAtPoint(FloatArray &answer, Load *forLoad, TimeStep *tStep, ValueModeType mode, FloatArray &pointCoords, double ds)
double dotProduct(const FloatArray &x) const
Computes the dot product (or inner product) of receiver and argument.
int numberOfCondensedDofs
number of condensed DOFs
virtual void giveCompositeExportData(std::vector< VTKPiece > &vtkPieces, IntArray &primaryVarsToExport, IntArray &internalVarsToExport, IntArray cellVarsToExport, TimeStep *tStep)
virtual int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords)
Computes the global coordinates from given element's local coordinates.
virtual void drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep)
void computeInternalForcesFromBoundaryEdgeLoadVectorAtPoint(FloatArray &answer, BoundaryLoad *load, int edge, CharType type, ValueModeType mode, TimeStep *tStep, FloatArray &pointCoords, double ds, bool global)
DofIDItem
Type representing particular dof type.
#define _IFT_Beam3d_refnode
DofManager * ghostNodes[2]
#define OOFEG_RAW_GEOMETRY_WIDTH
virtual double giveWeight()
Returns integration weight of receiver.
virtual bool computeGtoLRotationMatrix(FloatMatrix &answer)
Returns transformation matrix from global c.s.
UnknownType
Type representing particular unknown (its physical meaning).
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
void times(double f)
Multiplies receiver by factor f.
virtual void FiberedCrossSectionInterface_computeStrainVectorInFiber(FloatArray &answer, const FloatArray &masterGpStrain, GaussPoint *slaveGp, TimeStep *tStep)
Computes full 3d strain vector in element fiber.
IntArray * giveBodyLoadArray()
Returns array containing load numbers of loads acting on element.
virtual void computeBodyLoadVectorAt(FloatArray &answer, Load *load, TimeStep *tStep, ValueModeType mode)
Computes the load vector due to body load acting on receiver, at given time step. ...
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
virtual double giveUpdatedCoordinate(int ic, TimeStep *tStep, double scale=1.)
Returns updated ic-th coordinate of receiver.
IntArray bodyLoadArray
Array containing indexes of loads (body loads and boundary loads are kept separately), that apply on receiver.
void plusProductSymmUpper(const FloatMatrix &a, const FloatMatrix &b, double dV)
Adds to the receiver the product .
static FEI3dLineLin interp
Geometry interpolator only.
Abstract base class for all boundary conditions of problem.
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix^T and anArray.
double at(int i, int j) const
Coefficient access function.
virtual void give3dBeamStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)=0
Computes the stiffness matrix for 2d beams.
#define _IFT_Beam3d_subsoilmat
void appendDof(Dof *dof)
Adds the given Dof into the receiver.
virtual int setupIntegrationPoints(IntegrationRule &irule, int npoints, Element *element)
Sets up integration rule for the given element.
int numberOfGaussPoints
Number of integration points as specified by nip.
Class representing vector of real numbers.
Implementation of matrix containing floating point numbers.
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
int subsoilMat
Subsoil material.
IRResultType
Type defining the return values of InputRecord reading operations.
virtual double give(CrossSectionProperty a, GaussPoint *gp)
Returns the value of cross section property at given point.
std::list< Entry > entryListType
void beSubArrayOf(const FloatArray &src, const IntArray &indx)
Extract sub vector form src array and stores the result into receiver.
IntegrationPointStatus * giveMaterialStatus()
Returns reference to associated material status (NULL if not defined).
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
virtual void computeConsistentMassMatrix(FloatMatrix &answer, TimeStep *tStep, double &mass, const double *ipDensity=NULL)
Computes consistent mass matrix of receiver using numerical integration over element volume...
virtual void giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord=0)
Returns equivalent nodal forces vectors.
void add(const FloatMatrix &a)
Adds matrix to the receiver.
virtual bcGeomType giveBCGeoType() const
Returns geometry character of boundary condition.
virtual Interface * giveInterface(InterfaceType it)
Interface requesting service.
virtual void computeGaussPoints()
Initializes the array of integration rules member variable.
#define OOFEG_DEFORMED_GEOMETRY_WIDTH
void times(double s)
Multiplies receiver with scalar.
Abstract base class for all "structural" constitutive models.
std::vector< std::unique_ptr< IntegrationRule > > integrationRulesArray
List of integration rules of receiver (each integration rule contains associated integration points a...
virtual void computeBmatrixAt(GaussPoint *, FloatMatrix &, int=1, int=ALL_STRAINS)
Computes the geometrical matrix of receiver in given integration point.
virtual void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &)
Computes interpolation matrix for element unknowns.
The element interface required by FiberedCrossSection.
virtual FloatArray * giveCoordinates()
void zero()
Zeroes all coefficient of receiver.
Domain * giveDomain() const
InterfaceType
Enumerative type, used to identify interface type.
int min(int i, int j)
Returns smaller value from two given decimals.
const char * __InternalStateTypeToString(InternalStateType _value)
Load is base abstract class for all loads.
#define _IFT_Beam3d_refangle
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
virtual TimeStep * giveCurrentStep(bool force=false)
Returns current time step.
int giveSize() const
Returns the size of receiver.
void giveEndForcesVector(FloatArray &answer, TimeStep *tStep)
virtual void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Computes constitutive matrix of receiver.
Node * giveNode(int n)
Service for accessing particular domain node.
the oofem namespace is to define a context or scope in which all oofem names are defined.
void clear()
Sets size of receiver to be an empty matrix. It will have zero rows and zero columns size...
virtual bcValType giveBCValType() const
Returns receiver load type.
Class implementing node in finite element mesh.
virtual void updateLocalNumbering(EntityRenumberingFunctor &f)
Local renumbering support.
Interface defining required functionality from associated element.
double normalize()
Normalizes receiver.
Node * giveNode(int i) const
Returns reference to the i-th node of element.
Load * giveLoad(int n)
Service for accessing particular domain load.
void symmetrized()
Initializes the lower half of the receiver according to the upper half.
virtual void giveDofManDofIDMask(int inode, IntArray &) const
Returns dofmanager dof mask for node.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Class representing integration point in finite element program.
#define OOFEM_WARNING(...)
virtual void computeBoundaryEdgeLoadVector(FloatArray &answer, BoundaryLoad *load, int edge, CharType type, ValueModeType mode, TimeStep *tStep, bool global=true)
Computes the contribution of the given load at the given boundary edge.
IntArray boundaryLoadArray
Class representing solution step.
int numberOfDofMans
Number of dofmanagers.
void add(const FloatArray &src)
Adds array src to receiver.
This class implements a base beam intented to be a base class for beams based on lagrangian interpola...
const FloatArray & giveNaturalCoordinates()
Returns coordinate array of receiver.
Class representing Gaussian-quadrature integration rule.
void resize(int s)
Resizes receiver towards requested size.
void plusProduct(const FloatMatrix &b, const FloatArray &s, double dV)
Adds the product .
virtual double computeLength()
Computes the length (zero for all but 1D geometries)