35 #include "../sm/Elements/Shells/rershell.h" 36 #include "../sm/CrossSections/structuralcrosssection.h" 92 double x1, x2, x3, y1, y2, y3,
area;
95 x1 = nodeCoords.
at(1);
96 y1 = nodeCoords.
at(2);
99 x2 = nodeCoords.
at(1);
100 y2 = nodeCoords.
at(2);
103 x3 = nodeCoords.
at(1);
104 y3 = nodeCoords.
at(2);
120 for (
int i = 1; i <= 3; i++ ) {
121 int j = i + 1 - i / 3 * 3;
122 int k = j + 1 - j / 3 * 3;
124 int ii = 6 * ( i - 1 );
125 int ki = 6 * ( k - 1 );
127 answer.
at(1, ii + 1) = b.at(i);
128 answer.
at(1, ki + 4) = -( b.at(i) - b.at(j) ) /
Rx * area / 12.;
129 answer.
at(1, ki + 5) = -( c.at(i) - c.at(j) ) /
Ry * area / 12.;
131 answer.
at(2, ii + 2) = c.at(i);
132 answer.
at(2, ki + 4) = -( b.at(i) - b.at(j) ) /
Ry * area / 12.;
133 answer.
at(2, ki + 5) = -( c.at(i) - c.at(j) ) /
Ry * area / 12.;
135 answer.
at(3, ii + 1) = c.at(i);
136 answer.
at(3, ii + 2) = b.at(i);
137 answer.
at(3, ki + 4) = -( b.at(i) - b.at(j) ) /
Rxy * area / 6.;
138 answer.
at(3, ki + 5) = -( c.at(i) - c.at(j) ) /
Rxy * area / 6.;
140 answer.
at(4, ii + 5) = b.at(i);
142 answer.
at(5, ii + 4) = -c.at(i);
144 answer.
at(6, ii + 4) = -b.at(i);
145 answer.
at(6, ii + 5) = c.at(i);
147 answer.
at(7, ii + 3) = b.at(i);
148 answer.
at(7, ii + 5) += area * ( 2. / 3. );
149 answer.
at(7, ki + 5) += ( -2.0 * area + b.at(k) * ( c.at(i) - c.at(j) ) ) / 6.0;
150 answer.
at(7, ki + 4) = b.at(k) * ( b.at(i) - b.at(j) ) / 6.0;
152 answer.
at(8, ii + 3) = c.at(i);
153 answer.
at(8, ii + 4) += area * ( -2.0 / 3.0 );
154 answer.
at(8, ki + 4) += ( +2.0 * area + c.at(k) * ( b.at(i) - b.at(j) ) ) / 6.0;
155 answer.
at(8, ki + 5) = c.at(k) * ( c.at(i) - c.at(j) ) / 6.0;
158 answer.
times( 1. / ( 2. * area ) );
179 double x1, x2, x3, y1, y2, y3, l1, l2, l3, b1, b2, b3, c1, c2, c3;
182 l1 = iLocCoord.
at(1);
183 l2 = iLocCoord.
at(2);
187 x1 = nodeCoords.
at(1);
188 y1 = nodeCoords.
at(2);
191 x2 = nodeCoords.
at(1);
192 y2 = nodeCoords.
at(2);
195 x3 = nodeCoords.
at(1);
196 y3 = nodeCoords.
at(2);
219 answer.
at(1, 1) = l1;
220 answer.
at(1, 7) = l2;
221 answer.
at(1, 13) = l3;
223 answer.
at(2, 2) = l1;
224 answer.
at(2, 8) = l2;
225 answer.
at(2, 14) = l3;
227 answer.
at(3, 3) = l1;
228 answer.
at(3, 4) = -( l1 * l2 * b3 - l1 * l3 * b2 ) * 0.5;
229 answer.
at(3, 5) = -( l1 * l2 * c3 - l1 * l3 * c2 ) * 0.5;
230 answer.
at(3, 9) = l2;
231 answer.
at(3, 10) = -( l2 * l3 * b1 - l1 * l2 * b3 ) * 0.5;
232 answer.
at(3, 11) = -( l2 * l3 * c1 - l1 * l2 * c3 ) * 0.5;
233 answer.
at(3, 15) = l3;
234 answer.
at(3, 16) = -( l3 * l1 * b2 - l2 * l3 * b1 ) * 0.5;
235 answer.
at(3, 17) = -( l3 * l1 * c2 - l2 * l3 * c1 ) * 0.5;
237 answer.
at(4, 4) = l1;
238 answer.
at(4, 10) = l2;
239 answer.
at(4, 16) = l3;
241 answer.
at(5, 5) = l1;
242 answer.
at(5, 11) = l2;
243 answer.
at(5, 17) = l3;
256 double x1, x2, x3, y1, y2, y3;
259 x1 = nodeCoords.
at(1);
260 y1 = nodeCoords.
at(2);
263 x2 = nodeCoords.
at(1);
264 y2 = nodeCoords.
at(2);
267 x3 = nodeCoords.
at(1);
268 y3 = nodeCoords.
at(2);
270 return (
area = 0.5 * ( x2 * y3 + x1 * y2 + y1 * x3 - x2 * y1 - x3 * y2 - x1 * y3 ) );
317 answer.
at(1, 1) = mss1;
318 answer.
at(2, 2) = mss1;
319 answer.
at(3, 3) = mss1;
321 answer.
at(7, 7) = mss1;
322 answer.
at(8, 8) = mss1;
323 answer.
at(9, 9) = mss1;
325 answer.
at(13, 13) = mss1;
326 answer.
at(14, 14) = mss1;
327 answer.
at(15, 15) = mss1;
336 double dens, dV, load;
353 load = f.
at(1) * dens * dV / 3.0;
356 answer.
at(13) = load;
358 load = f.
at(2) * dens * dV / 3.0;
361 answer.
at(14) = load;
363 load = f.
at(3) * dens * dV / 3.0;
366 answer.
at(15) = load;
392 #define POINT_TOL 1.e-3 406 double x1, x2, x3, y1, y2, y3, z1, z2, z3;
409 x1 = nodeCoords.
at(1);
410 y1 = nodeCoords.
at(2);
411 z1 = nodeCoords.
at(3);
414 x2 = nodeCoords.
at(1);
415 y2 = nodeCoords.
at(2);
416 z2 = nodeCoords.
at(3);
419 x3 = nodeCoords.
at(1);
420 y3 = nodeCoords.
at(2);
421 z3 = nodeCoords.
at(3);
425 area = 0.5 * ( x2 * y3 + x1 * y2 + y1 * x3 - x2 * y1 - x3 * y2 - x1 * y3 );
427 answer.
at(1) = ( ( x2 * y3 - x3 * y2 ) + ( y2 - y3 ) * inputCoords_ElCS.
at(1) + ( x3 - x2 ) * inputCoords_ElCS.
at(2) ) / 2. / area;
428 answer.
at(2) = ( ( x3 * y1 - x1 * y3 ) + ( y3 - y1 ) * inputCoords_ElCS.
at(1) + ( x1 - x3 ) * inputCoords_ElCS.
at(2) ) / 2. / area;
429 answer.
at(3) = ( ( x1 * y2 - x2 * y1 ) + ( y1 - y2 ) * inputCoords_ElCS.
at(1) + ( x2 - x1 ) * inputCoords_ElCS.
at(2) ) / 2. / area;
433 midplZ = z1 * answer.
at(1) + z2 *answer.
at(2) + z3 *answer.
at(3);
437 GaussPoint _gp(NULL, 1, answer, 1.0, _2dPlate);
443 if ( elthick / 2.0 + midplZ - fabs( inputCoords_ElCS.
at(3) ) < -
POINT_TOL ) {
449 for (
int i = 1; i <= 3; i++ ) {
483 for (
int i = 1; i <= 3; i++ ) {
484 for (
int j = 1; j <= 3; j++ ) {
486 answer.
at(i, j) = val;
487 answer.
at(i + 3, j + 3) = val;
488 answer.
at(i + 6, j + 6) = val;
489 answer.
at(i + 9, j + 9) = val;
490 answer.
at(i + 12, j + 12) = val;
491 answer.
at(i + 15, j + 15) = val;
509 OOFEM_ERROR(
"cannot transform coordinates- size mismatch");
534 answer.
at(1, 1) = stress.
at(1);
535 answer.
at(2, 2) = stress.
at(2);
536 answer.
at(1, 2) = stress.
at(3);
537 answer.
at(2, 1) = stress.
at(3);
538 answer.
at(1, 3) = stress.
at(7);
539 answer.
at(3, 1) = stress.
at(7);
540 answer.
at(2, 3) = stress.
at(8);
541 answer.
at(3, 2) = stress.
at(8);
546 answer.
at(1, 1) = stress.
at(4);
547 answer.
at(2, 2) = stress.
at(5);
548 answer.
at(1, 2) = stress.
at(6);
549 answer.
at(2, 1) = stress.
at(6);
554 answer.
at(1, 1) = strain.
at(1);
555 answer.
at(2, 2) = strain.
at(2);
556 answer.
at(1, 2) = strain.
at(3) / 2.;
557 answer.
at(2, 1) = strain.
at(3) / 2.;
558 answer.
at(1, 3) = strain.
at(7) / 2.;
559 answer.
at(3, 1) = strain.
at(7) / 2.;
560 answer.
at(2, 3) = strain.
at(8) / 2.;
561 answer.
at(3, 2) = strain.
at(8) / 2.;
565 answer.
at(1, 1) = curv.
at(4);
566 answer.
at(2, 2) = curv.
at(5);
567 answer.
at(1, 2) = curv.
at(6) / 2.;
568 answer.
at(2, 1) = curv.
at(6) / 2.;
590 double layerZeta, layerZCoord, top, bottom;
595 layerZCoord = 0.5 * ( ( 1. - layerZeta ) * bottom + ( 1. + layerZeta ) * top );
599 answer.
at(1) = masterGpStrain.
at(1) + masterGpStrain.
at(4) * layerZCoord;
600 answer.
at(2) = masterGpStrain.
at(2) + masterGpStrain.
at(5) * layerZCoord;
601 answer.
at(5) = masterGpStrain.
at(3) + masterGpStrain.
at(6) * layerZCoord;
602 answer.
at(3) = masterGpStrain.
at(8);
603 answer.
at(4) = masterGpStrain.
at(7);
616 fprintf( file,
" GP 1.%d :", gp->giveNumber() );
617 this->
giveIPValue(v, gp, IST_ShellStrainTensor, tStep);
618 fprintf(file,
" strains ");
621 " %.4e %.4e %.4e %.4e %.4e %.4e ",
624 this->
giveIPValue(v, gp, IST_CurvatureTensor, tStep);
625 fprintf(file,
"\n curvatures ");
628 " %.4e %.4e %.4e %.4e %.4e %.4e ",
632 this->
giveIPValue(v, gp, IST_ShellForceTensor, tStep);
633 fprintf(file,
"\n stresses ");
636 " %.4e %.4e %.4e %.4e %.4e %.4e ",
639 this->
giveIPValue(v, gp, IST_ShellMomentTensor, tStep);
640 fprintf(file,
"\n moments ");
643 " %.4e %.4e %.4e %.4e %.4e %.4e ",
654 answer = {D_u, D_v, D_w, R_u, R_v, R_w};
674 if ( type == IST_CurvatureTensor || type == IST_ShellStrainTensor ) {
675 if ( type == IST_CurvatureTensor ) {
683 answer.
at(1) = globTensor.
at(1, 1);
684 answer.
at(2) = globTensor.
at(2, 2);
685 answer.
at(3) = globTensor.
at(3, 3);
686 answer.
at(4) = 2*globTensor.
at(2, 3);
687 answer.
at(5) = 2*globTensor.
at(1, 3);
688 answer.
at(6) = 2*globTensor.
at(1, 2);
691 }
else if ( type == IST_ShellMomentTensor || type == IST_ShellForceTensor ) {
692 if ( type == IST_ShellMomentTensor ) {
700 answer.
at(1) = globTensor.
at(1, 1);
701 answer.
at(2) = globTensor.
at(2, 2);
702 answer.
at(3) = globTensor.
at(3, 3);
703 answer.
at(4) = globTensor.
at(2, 3);
704 answer.
at(5) = globTensor.
at(1, 3);
705 answer.
at(6) = globTensor.
at(1, 2);
CrossSection * giveCrossSection()
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
The element interface required by NodalAvergagingRecoveryModel.
int number
Component number.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
virtual bool computeLocalCoordinates(FloatArray &answer, const FloatArray &gcoords)
Computes the element local coordinates from given global coordinates.
The element interface required by ZZNodalRecoveryModel.
double & at(int i)
Coefficient access function.
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
void clear()
Clears receiver (zero size).
virtual void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Computes constitutive matrix of receiver.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Prints output of receiver to stream, for given time step.
virtual void computeStrainVectorInLayer(FloatArray &answer, const FloatArray &masterGpStrain, GaussPoint *masterGp, GaussPoint *slaveGp, TimeStep *tStep)
Computes full 3D strain vector in element layer.
virtual Interface * giveInterface(InterfaceType it)
Interface requesting service.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
virtual void computeComponentArrayAt(FloatArray &answer, TimeStep *tStep, ValueModeType mode)
Computes boundary condition value - its components values at given time.
Class implementing an array of integers.
MatResponseMode
Describes the character of characteristic material matrix.
void rotatedWith(FloatMatrix &r, char mode)
Returns the receiver a rotated according the change-of-base matrix r.
virtual void giveDofManDofIDMask(int inode, IntArray &) const
Returns dofmanager dof mask for node.
virtual void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int=1, int=ALL_STRAINS)
Computes the geometrical matrix of receiver in given integration point.
void giveLocalCoordinates(FloatArray &answer, const FloatArray &global)
double giveNaturalCoordinate(int i) const
Returns i-th natural element coordinate of receiver.
virtual void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer)
Computes interpolation matrix for element unknowns.
FloatMatrix GtoLRotationMatrix
Transformation Matrix form GtoL(3,3) is stored at the element level for computation efficiency...
This class represent CCT plate element that can be arbitrary oriented in space, in contrast to base C...
virtual void give3dShellStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)=0
Method for computing 3d shell stiffness matrix.
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.
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
void times(double f)
Multiplies receiver by factor f.
void rotatedWith(const FloatMatrix &r, char mode= 'n')
Returns the receiver 'a' transformed using give transformation matrix r.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
virtual void computeStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
Compute strain vector of receiver evaluated at given integration point at given time step from elemen...
virtual int giveLocalCoordinateSystem(FloatMatrix &answer)
Returns local coordinate system of receiver Required by material models with ortho- and anisotrophy...
double at(int i, int j) const
Coefficient access function.
virtual void computeLumpedMassMatrix(FloatMatrix &answer, TimeStep *tStep)
Computes lumped mass matrix of 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.
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.
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 resize(int rows, int cols)
Checks size of receiver towards requested bounds.
virtual double giveArea()
void zero()
Zeroes all coefficients of receiver.
void giveCharacteristicTensor(FloatMatrix &answer, CharTensor type, GaussPoint *gp, TimeStep *tStep)
virtual void NodalAveragingRecoveryMI_computeNodalValue(FloatArray &answer, int node, InternalStateType type, TimeStep *tStep)
Computes the element value in given node.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
std::vector< std::unique_ptr< IntegrationRule > > integrationRulesArray
List of integration rules of receiver (each integration rule contains associated integration points a...
virtual void giveGeneralizedStress_Shell(FloatArray &answer, GaussPoint *gp, const FloatArray &generalizedStrain, TimeStep *tStep)=0
void zero()
Zeroes all coefficient of receiver.
InterfaceType
Enumerative type, used to identify interface type.
Load is base abstract class for all loads.
The element interface required by LayeredCrossSection.
RerShell(int n, Domain *d)
int giveSize() const
Returns the size of receiver.
Abstract base class for all structural cross section models.
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
Node * giveNode(int i) const
Returns reference to the i-th node of element.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Class representing integration point in finite element program.
Class representing solution step.
virtual void computeGaussPoints()
Initializes the array of integration rules member variable.
virtual const FloatMatrix * computeGtoLRotationMatrix()
Class representing Gaussian-quadrature integration rule.
void resize(int s)
Resizes receiver towards requested size.