35 #include "../sm/Elements/PlaneStress/trplanrot3d.h" 36 #include "../sm/CrossSections/structuralcrosssection.h" 37 #include "../sm/Materials/structuralms.h" 63 OOFEM_ERROR(
"cannot transform coordinates - size mismatch");
85 std :: vector< FloatArray > lc = {{x[0], y[0]}, {x[1], y[1]}, {x[2], y[2]}};
123 answer = {D_u, D_v, D_w, R_u, R_v, R_w};
160 for (
int i = 1; i <= 3; i++ ) {
185 for (
int i = 1; i <= 3; i++ ) {
211 answer.
at(1, 1) = charVect.
at(1) * h;
212 answer.
at(2, 2) = charVect.
at(2) * h;
213 answer.
at(1, 2) = charVect.
at(3) * h;
214 answer.
at(2, 1) = charVect.
at(3) * h;
219 answer.
at(3, 3) = charVect.
at(4);
224 answer.
at(1, 1) = charVect.
at(1);
225 answer.
at(2, 2) = charVect.
at(2);
226 answer.
at(1, 2) = charVect.
at(3) / 2.;
227 answer.
at(2, 1) = charVect.
at(3) / 2.;
232 answer.
at(3, 3) = charVect.
at(4);
254 if ( type == IST_CurvatureTensor || type == IST_ShellStrainTensor ) {
255 if ( type == IST_CurvatureTensor ) {
263 answer.
at(1) = globTensor.
at(1, 1);
264 answer.
at(2) = globTensor.
at(2, 2);
265 answer.
at(3) = globTensor.
at(3, 3);
266 answer.
at(4) = 2 * globTensor.
at(2, 3);
267 answer.
at(5) = 2 * globTensor.
at(1, 3);
268 answer.
at(6) = 2 * globTensor.
at(1, 2);
271 }
else if ( type == IST_ShellMomentTensor || type == IST_ShellForceTensor ) {
272 if ( type == IST_ShellMomentTensor ) {
280 answer.
at(1) = globTensor.
at(1, 1);
281 answer.
at(2) = globTensor.
at(2, 2);
282 answer.
at(3) = globTensor.
at(3, 3);
283 answer.
at(4) = globTensor.
at(2, 3);
284 answer.
at(5) = globTensor.
at(1, 3);
285 answer.
at(6) = globTensor.
at(1, 2);
306 for (
int i = 1; i <= 3; i++ ) {
324 double dens, dV, load;
349 load = force.
at(1) * dens * dV / 3.0;
354 load = force.
at(2) * dens * dV / 3.0;
359 load = force.
at(6) * dens * dV / 3.0;
385 0, 1, 5, 6, 7, 11, 12, 13, 17
388 for (
int i = 0; i < 3; i++ ) {
389 for (
int j = 0; j < 9; j++ ) {
390 answer(ri [ i ], ci [ j ]) = ne(i, j);
451 fprintf( file,
" GP %2d.%-2d :", i + 1, gp->giveNumber() );
453 this->
giveIPValue(v, gp, IST_ShellStrainTensor, tStep);
454 fprintf(file,
" strains ");
455 for (
auto &val : v ) fprintf(file,
" %.4e", val);
457 this->
giveIPValue(v, gp, IST_CurvatureTensor, tStep);
458 fprintf(file,
"\n curvatures ");
459 for (
auto &val : v ) fprintf(file,
" %.4e", val);
462 this->
giveIPValue(v, gp, IST_ShellForceTensor, tStep);
463 fprintf(file,
"\n stresses ");
464 for (
auto &val : v ) fprintf(file,
" %.4e", val);
466 this->
giveIPValue(v, gp, IST_ShellMomentTensor, tStep);
467 fprintf(file,
"\n moments ");
468 for (
auto &val : v ) fprintf(file,
" %.4e", val);
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
virtual void computeBodyLoadVectorAt(FloatArray &answer, Load *forLoad, TimeStep *tStep, ValueModeType mode)
Computes the load vector due to body load acting on receiver, at given time step. ...
void subtract(const FloatArray &src)
Subtracts array src to receiver.
const FloatMatrix * computeGtoLRotationMatrix()
TrPlaneStrRot3d(int n, Domain *d)
Class implements an triangular three-node plane- stress elasticity finite element with independent ro...
void beVectorProductOf(const FloatArray &v1, const FloatArray &v2)
Computes vector product (or cross product) of vectors given as parameters, , and stores the result in...
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
Wrapper around cell with vertex coordinates stored in FloatArray**.
virtual IntegrationRule * GetSurfaceIntegrationRule(int iSurf)
void zero()
Sets all component to zero.
double & at(int i)
Coefficient access function.
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
This class implements a structural material status information.
void clear()
Clears receiver (zero size).
virtual double computeSurfaceVolumeAround(GaussPoint *gp, int iSurf)
Computes volume related to integration point on local surface.
FloatMatrix GtoLRotationMatrix
Transformation Matrix form GtoL(3,3) is stored at the element level for computation efficiency...
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.
int & at(int i)
Coefficient access function.
void rotatedWith(FloatMatrix &r, char mode)
Returns the receiver a rotated according the change-of-base matrix r.
Abstract base class representing integration rule.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be a - b.
virtual void giveSurfaceDofMapping(IntArray &answer, int iSurf) const
Assembles surface dof mapping mask, which provides mapping between surface local DOFs and "global" el...
bool isNotEmpty() const
Tests for empty matrix.
virtual void giveDofManDofIDMask(int inode, IntArray &) const
Returns dofmanager dof mask for node.
void giveLocalCoordinates(FloatArray &answer, FloatArray &global)
virtual double giveWeight()
Returns integration weight of receiver.
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
void rotatedWith(const FloatMatrix &r, char mode= 'n')
Returns the receiver 'a' transformed using give transformation matrix r.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Prints output of receiver to stream, for given time step.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
double at(int i, int j) const
Coefficient access function.
void resize(int n)
Checks size of receiver towards requested bounds.
virtual void giveNodeCoordinates(FloatArray &x, FloatArray &y)
virtual int computeLoadGToLRotationMtrx(FloatMatrix &answer)
Returns transformation matrix from global coordinate system to local element coordinate system for el...
void giveCharacteristicTensor(FloatMatrix &answer, CharTensor type, GaussPoint *gp, TimeStep *tStep)
Class representing vector of real numbers.
Implementation of matrix containing floating point numbers.
virtual double give(CrossSectionProperty a, GaussPoint *gp)
Returns the value of cross section property at given point.
GaussPoint * getIntegrationPoint(int n)
Access particular integration point of receiver.
virtual double giveTransformationJacobian(const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the determinant of the transformation.
const FloatArray & giveStressVector() const
Returns the const pointer to receiver's stress vector.
IntegrationPointStatus * giveMaterialStatus()
Returns reference to associated material status (NULL if not defined).
virtual void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer)
Computes interpolation matrix for element unknowns.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
virtual void computeSurfaceNMatrixAt(FloatMatrix &answer, int iSurf, GaussPoint *gp)
virtual int getRequiredNumberOfIntegrationPoints(integrationDomain dType, int approxOrder)
Abstract service.
void zero()
Zeroes all coefficients of receiver.
virtual bcGeomType giveBCGeoType() const
Returns geometry character of boundary condition.
std::vector< std::unique_ptr< IntegrationRule > > integrationRulesArray
List of integration rules of receiver (each integration rule contains associated integration points a...
virtual int SetUpPointsOnTriangle(int, MaterialMode mode)
Sets up receiver's integration points on triangular (area coords) integration domain.
void zero()
Zeroes all coefficient of receiver.
Load is base abstract class for all loads.
int giveSize() const
Returns the size of receiver.
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual bcValType giveBCValType() const
Returns receiver load type.
double normalize()
Normalizes receiver.
Node * giveNode(int i) const
Returns reference to the i-th node of element.
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
Class representing integration point in finite element program.
Class representing solution step.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
const FloatArray & giveNaturalCoordinates()
Returns coordinate array of receiver.
virtual int SetUpPointsOnTriangle(int nPoints, MaterialMode mode)
Sets up receiver's integration points on triangular (area coords) integration domain.
Class representing Gaussian-quadrature integration rule.
void resize(int s)
Resizes receiver towards requested size.
virtual int computeLoadLSToLRotationMatrix(FloatMatrix &answer, int iSurf, GaussPoint *gp)
Returns transformation matrix from local surface c.s to element local coordinate system of load vecto...