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 };
135 for (
int i = 1; i <= 3; i++ ) {
157 for (
int i = 1; i <= 3; i++ ) {
181 answer.
at(1, 3) = charVect.
at(4);
182 answer.
at(3, 1) = charVect.
at(4);
183 answer.
at(2, 3) = charVect.
at(5);
184 answer.
at(3, 2) = charVect.
at(5);
189 answer.
at(1, 1) = charVect.
at(1);
190 answer.
at(2, 2) = charVect.
at(2);
191 answer.
at(1, 2) = charVect.
at(3);
192 answer.
at(2, 1) = charVect.
at(3);
197 answer.
at(1, 3) = charVect.
at(4) / 2.;
198 answer.
at(3, 1) = charVect.
at(4) / 2.;
199 answer.
at(2, 3) = charVect.
at(5) / 2.;
200 answer.
at(3, 2) = charVect.
at(5) / 2.;
205 answer.
at(1, 1) = charVect.
at(1);
206 answer.
at(2, 2) = charVect.
at(2);
207 answer.
at(1, 2) = charVect.
at(3) / 2.;
208 answer.
at(2, 1) = charVect.
at(3) / 2.;
229 if ( type == IST_CurvatureTensor || type == IST_ShellStrainTensor ) {
230 if ( type == IST_CurvatureTensor ) {
238 answer.
at(1) = globTensor.
at(1, 1);
239 answer.
at(2) = globTensor.
at(2, 2);
240 answer.
at(3) = globTensor.
at(3, 3);
241 answer.
at(4) = 2 * globTensor.
at(2, 3);
242 answer.
at(5) = 2 * globTensor.
at(1, 3);
243 answer.
at(6) = 2 * globTensor.
at(1, 2);
246 }
else if ( type == IST_ShellMomentTensor || type == IST_ShellForceTensor ) {
247 if ( type == IST_ShellMomentTensor ) {
255 answer.
at(1) = globTensor.
at(1, 1);
256 answer.
at(2) = globTensor.
at(2, 2);
257 answer.
at(3) = globTensor.
at(3, 3);
258 answer.
at(4) = globTensor.
at(2, 3);
259 answer.
at(5) = globTensor.
at(1, 3);
260 answer.
at(6) = globTensor.
at(1, 2);
278 for (
int i = 1; i <= 3; i++ ) {
299 2, 3, 4, 8, 9, 10, 14, 15, 16
302 for (
int i = 0; i < 3; i++ ) {
303 for (
int j = 0; j < 9; j++ ) {
304 answer(ri [ i ], ci [ j ]) = ne(i, j);
355 fprintf(file,
" GP %2d.%-2d :", i + 1, gp->giveNumber() );
357 this->
giveIPValue(v, gp, IST_ShellStrainTensor, tStep);
358 fprintf(file,
" strains ");
360 for (
auto &val : v ) {
361 fprintf(file,
" %.4e", val);
364 this->
giveIPValue(v, gp, IST_CurvatureTensor, tStep);
365 fprintf(file,
"\n curvatures ");
366 for (
auto &val : v ) {
367 fprintf(file,
" %.4e", val);
371 this->
giveIPValue(v, gp, IST_ShellForceTensor, tStep);
372 fprintf(file,
"\n stresses ");
373 for (
auto &val : v ) {
374 fprintf(file,
" %.4e", val);
377 this->
giveIPValue(v, gp, IST_ShellMomentTensor, tStep);
378 fprintf(file,
"\n moments ");
379 for (
auto &val : v ) {
380 fprintf(file,
" %.4e", val);
406 }
else if ( iEdge == 2 ) {
413 }
else if ( iEdge == 3 ) {
444 const auto &edgeNodes = this->
interp_lin.computeLocalEdgeMapping(iEdge);
446 auto nodeA = this->
giveNode(edgeNodes.at(1) );
447 auto nodeB = this->
giveNode(edgeNodes.at(2) );
453 double dx = cb.at(1) - ca.
at(1);
454 double dy = cb.at(2) - ca.
at(2);
455 double length = sqrt(dx * dx + dy * dy);
459 answer.
at(1, 1) = 1.0;
476 std::vector< FloatArray >lc(3);
479 for (
int _i = 0; _i < 3; _i++ ) {
485 answer.
at(1) = inputCoords_ElCS.
at(1);
486 answer.
at(2) = inputCoords_ElCS.
at(2);
487 GaussPoint _gp(NULL, 1, answer, 2.0, _2dPlate);
491 return inplane && outofplane;
498 double l1 = lcoords.
at(1);
499 double l2 = lcoords.
at(2);
500 double l3 = 1. - l2 - l1;
503 for (
int _i = 1; _i <= 3; _i++ ) {
517 double dens, dV, load;
540 load = force.
at(1) * dens * dV / 3.0;
543 answer.
at(13) = load;
545 load = force.
at(2) * dens * dV / 3.0;
548 answer.
at(14) = load;
550 load = force.
at(3) * dens * dV / 3.0;
553 answer.
at(15) = load;
double length(const Vector &a)
#define REGISTER_Element(class)
virtual double give(CrossSectionProperty a, GaussPoint *gp) const
int computeLoadLEToLRotationMatrix(FloatMatrix &answer, int iEdge, GaussPoint *gp) override
bool computeLocalCoordinates(FloatArray &answer, const FloatArray &gcoords) override
FloatMatrix GtoLRotationMatrix
void giveSurfaceDofMapping(IntArray &answer, int iSurf) const override
int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords) override
void giveCharacteristicTensor(FloatMatrix &answer, CharTensor type, GaussPoint *gp, TimeStep *tStep)
int computeLoadLSToLRotationMatrix(FloatMatrix &answer, int iSurf, GaussPoint *gp) override
void giveLocalCoordinates(FloatArray &answer, const FloatArray &global)
void printOutputAt(FILE *file, TimeStep *tStep) override
const FloatMatrix * computeGtoLRotationMatrix()
void computeBodyLoadVectorAt(FloatArray &answer, Load *forLoad, TimeStep *tStep, ValueModeType mode) override
void giveDofManDofIDMask(int inode, IntArray &) const override
double computeEdgeVolumeAround(GaussPoint *gp, int iEdge) override
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
void giveEdgeDofMapping(IntArray &answer, int iEdge) const override
double computeSurfaceVolumeAround(GaussPoint *gp, int iSurf) override
void computeSurfaceNMatrixAt(FloatMatrix &answer, int iSurf, GaussPoint *gp)
int computeLoadGToLRotationMtrx(FloatMatrix &answer) override
DKTPlate3d(int n, Domain *d)
void giveNodeCoordinates(double &x1, double &x2, double &x3, double &y1, double &y2, double &y3, double &z1, double &z2, double &z3) override
double computeVolumeAround(GaussPoint *gp) override
DKTPlate(int n, Domain *d)
void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer) override
static FEI2dTrLin interp_lin
Element geometry approximation.
Element_Geometry_Type giveGeometryType() const override
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)
double giveWeight()
Returns integration weight of receiver.
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.