58 OOFEM_ERROR(
"cannot transform coordinates - size mismatch");
72 double &y1,
double &y2,
double &y3,
73 double &z1,
double &z2,
double &z3)
98 answer = { D_u, D_v, D_w, R_u, R_v, R_w };
110 std::vector< FloatArray >lc(3);
113 for (
int _i = 0; _i < 3; _i++ ) {
119 answer.
at(1) = inputCoords_ElCS.
at(1);
120 answer.
at(2) = inputCoords_ElCS.
at(2);
121 GaussPoint _gp(NULL, 1, answer, 2.0, _2dPlate);
125 return inplane && outofplane;
132 double l1 = lcoords.
at(1);
133 double l2 = lcoords.
at(2);
134 double l3 = 1. - l2 - l1;
137 for (
int _i = 1; _i <= 3; _i++ ) {
177 for (
int i = 1; i <= 3; i++ ) {
199 for (
int i = 1; i <= 3; i++ ) {
223 answer.
at(1, 3) = charVect.
at(4);
224 answer.
at(3, 1) = charVect.
at(4);
225 answer.
at(2, 3) = charVect.
at(5);
226 answer.
at(3, 2) = charVect.
at(5);
231 answer.
at(1, 1) = charVect.
at(1);
232 answer.
at(2, 2) = charVect.
at(2);
233 answer.
at(1, 2) = charVect.
at(3);
234 answer.
at(2, 1) = charVect.
at(3);
239 answer.
at(1, 3) = charVect.
at(4) / 2.;
240 answer.
at(3, 1) = charVect.
at(4) / 2.;
241 answer.
at(2, 3) = charVect.
at(5) / 2.;
242 answer.
at(3, 2) = charVect.
at(5) / 2.;
247 answer.
at(1, 1) = charVect.
at(1);
248 answer.
at(2, 2) = charVect.
at(2);
249 answer.
at(1, 2) = charVect.
at(3) / 2.;
250 answer.
at(2, 1) = charVect.
at(3) / 2.;
271 if ( type == IST_CurvatureTensor || type == IST_ShellStrainTensor ) {
272 if ( type == IST_CurvatureTensor ) {
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) = 2 * globTensor.
at(2, 3);
284 answer.
at(5) = 2 * globTensor.
at(1, 3);
285 answer.
at(6) = 2 * globTensor.
at(1, 2);
288 }
else if ( type == IST_ShellMomentTensor || type == IST_ShellForceTensor ) {
289 if ( type == IST_ShellMomentTensor ) {
297 answer.
at(1) = globTensor.
at(1, 1);
298 answer.
at(2) = globTensor.
at(2, 2);
299 answer.
at(3) = globTensor.
at(3, 3);
300 answer.
at(4) = globTensor.
at(2, 3);
301 answer.
at(5) = globTensor.
at(1, 3);
302 answer.
at(6) = globTensor.
at(1, 2);
320 for (
int i = 1; i <= 3; i++ ) {
337 double dens, dV, load;
363 load = force.
at(3) * dens * dV / 3.0;
368 load = force.
at(4) * dens * dV / 3.0;
373 load = force.
at(5) * dens * dV / 3.0;
399 2, 3, 4, 8, 9, 10, 14, 15, 16
402 for (
int i = 0; i < 3; i++ ) {
403 for (
int j = 0; j < 9; j++ ) {
404 answer(ri [ i ], ci [ j ]) = ne(i, j);
455 fprintf(file,
" GP %2d.%-2d :", i + 1, gp->giveNumber() );
457 this->
giveIPValue(v, gp, IST_ShellStrainTensor, tStep);
458 fprintf(file,
" strains ");
459 for (
auto &val : v ) {
460 fprintf(file,
" %.4e", val);
463 this->
giveIPValue(v, gp, IST_CurvatureTensor, tStep);
464 fprintf(file,
"\n curvatures ");
465 for (
auto &val : v ) {
466 fprintf(file,
" %.4e", val);
470 this->
giveIPValue(v, gp, IST_ShellForceTensor, tStep);
471 fprintf(file,
"\n stresses ");
472 for (
auto &val : v ) {
473 fprintf(file,
" %.4e", val);
476 this->
giveIPValue(v, gp, IST_ShellMomentTensor, tStep);
477 fprintf(file,
"\n moments ");
478 for (
auto &val : v ) {
479 fprintf(file,
" %.4e", val);
#define REGISTER_Element(class)
void giveLocalCoordinates(FloatArray &answer, const FloatArray &global)
FloatMatrix GtoLRotationMatrix
void giveSurfaceDofMapping(IntArray &answer, int iSurf) const override
void giveCharacteristicTensor(FloatMatrix &answer, CharTensor type, GaussPoint *gp, TimeStep *tStep)
int computeLoadGToLRotationMtrx(FloatMatrix &answer) override
void computeSurfaceNMatrixAt(FloatMatrix &answer, int iSurf, GaussPoint *gp)
virtual const FloatMatrix * computeGtoLRotationMatrix()
int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords) override
void printOutputAt(FILE *file, TimeStep *tStep) override
double computeSurfaceVolumeAround(GaussPoint *gp, int iSurf) override
void giveDofManDofIDMask(int inode, IntArray &) const override
void giveNodeCoordinates(double &x1, double &x2, double &x3, double &y1, double &y2, double &y3, double &z1, double &z2, double &z3) override
bool computeLocalCoordinates(FloatArray &answer, const FloatArray &gcoords) override
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
int computeLoadLSToLRotationMatrix(FloatMatrix &answer, int iSurf, GaussPoint *gp) override
CCTPlate3d(int n, Domain *d)
void computeBodyLoadVectorAt(FloatArray &answer, Load *forLoad, TimeStep *tStep, ValueModeType mode) override
CCTPlate(int n, Domain *d)
Element_Geometry_Type giveGeometryType() const override
void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer) override
double computeVolumeAround(GaussPoint *gp) override
virtual double give(CrossSectionProperty a, GaussPoint *gp) const
double giveCoordinate(int i) const
Node * giveNode(int i) const
std::vector< std ::unique_ptr< IntegrationRule > > integrationRulesArray
CrossSection * giveCrossSection()
int global2local(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Index giveSize() const
Returns the size of receiver.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
void zero()
Zeroes all coefficients of receiver.
void rotatedWith(FloatMatrix &r, char mode)
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void beVectorProductOf(const FloatArray &v1, const FloatArray &v2)
void rotatedWith(const FloatMatrix &r, char mode='n')
void resize(Index rows, Index cols)
void zero()
Zeroes all coefficient of receiver.
double at(std::size_t i, std::size_t j) const
int SetUpPointsOnTriangle(int nPoints, MaterialMode mode) override
const FloatArray & giveNaturalCoordinates() const
Returns coordinate array of receiver.
IntegrationPointStatus * giveMaterialStatus(IntegrationPointStatusIDType key=IPSID_Default)
virtual bcGeomType giveBCGeoType() const
virtual bcValType giveBCValType() const
void zero()
Sets all component to zero.
GaussPoint * getIntegrationPoint(int n)
virtual void computeComponentArrayAt(FloatArray &answer, TimeStep *tStep, ValueModeType mode)
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
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.
@ BodyLoadBGT
Distributed body load.