35 #include "../sm/Elements/Shells/tr_shell02.h" 73 result =
plate->initializeFrom(ir);
78 result =
membrane->initializeFrom(ir);
91 if (
plate->giveDefaultIntegrationRulePtr()->giveNumberOfIntegrationPoints() !=
membrane->giveDefaultIntegrationRulePtr()->giveNumberOfIntegrationPoints() ) {
92 OOFEM_ERROR(
"incompatible integration rules detected");
100 plate->updateLocalNumbering(f);
107 plate->setCrossSection(csIndx);
124 plate->giveCharacteristicVector(aux, mtrx, mode, tStep);
127 membrane->giveCharacteristicVector(aux, mtrx, mode, tStep);
142 plate->giveCharacteristicMatrix(aux, mtrx, tStep);
145 membrane->giveCharacteristicMatrix(aux, mtrx, tStep);
155 bool t1 =
plate->giveRotationMatrix(aux1);
156 bool t2 =
membrane->giveRotationMatrix(aux2);
166 for (
int i = 1; i <= 9; i++ ) {
167 for (
int j = 1; j <= ncol; j++ ) {
172 for (
int i = 1; i <= 9; i++ ) {
173 for (
int j = 1; j <= ncol; j++ ) {
186 plate->updateInternalState(tStep);
187 membrane->updateInternalState(tStep);
195 plate->updateYourself(tStep);
220 return plate->computeVolumeAround(gp);
226 OOFEM_ERROR(
"This function is not implemented yet.");
232 if ( type == IST_ShellForceTensor || type == IST_ShellStrainTensor ||
233 type == IST_ShellMomentTensor || type == IST_CurvatureTensor ) {
238 plate->giveIPValue(answer, plateGP, type, tStep);
239 membrane->giveIPValue(aux, membraneGP, type, tStep);
270 fprintf( file,
" GP %2d.%-2d :", iRule->giveNumber(), gp->giveNumber() );
271 GaussPoint *membraneGP =
membrane->giveDefaultIntegrationRulePtr()->getIntegrationPoint(gp->giveNumber() - 1);
273 plate->giveIPValue(v, gp, IST_ShellStrainTensor, tStep);
274 membrane->giveIPValue(aux, membraneGP, IST_ShellStrainTensor, tStep);
277 fprintf(file,
" strains ");
278 for (
auto &val : v ) fprintf(file,
" %.4e", val);
280 plate->giveIPValue(v, gp, IST_CurvatureTensor, tStep);
281 membrane->giveIPValue(aux, membraneGP, IST_CurvatureTensor, tStep);
284 fprintf(file,
"\n curvatures ");
285 for (
auto &val : v ) fprintf(file,
" %.4e", val);
288 plate->giveIPValue(v, gp, IST_ShellForceTensor, tStep);
289 membrane->giveIPValue(aux, membraneGP, IST_ShellForceTensor, tStep);
292 fprintf(file,
"\n stresses ");
293 for (
auto &val : v ) fprintf(file,
" %.4e", val);
295 plate->giveIPValue(v, gp, IST_ShellMomentTensor, tStep);
296 membrane->giveIPValue(aux, membraneGP, IST_ShellMomentTensor, tStep);
299 fprintf(file,
"\n moments ");
300 for (
auto &val : v ) fprintf(file,
" %.4e", val);
315 if ( ( iores = this->
plate->saveContext(stream, mode, obj) ) !=
CIO_OK ) {
318 if ( ( iores = this->
membrane->saveContext(stream, mode, obj) ) !=
CIO_OK ) {
331 if ( ( iores = this->
plate->restoreContext(stream, mode, obj) ) !=
CIO_OK ) {
334 if ( ( iores = this->
membrane->restoreContext(stream, mode, obj) ) !=
CIO_OK ) {
345 this->
compositeIR->SetUpPointsOnTriangle(
plate->giveDefaultIntegrationRulePtr()->giveNumberOfIntegrationPoints(), _3dShell);
362 globTensor.
at(1, 1) = sig.
at(1);
363 globTensor.
at(1, 2) = sig.
at(6);
364 globTensor.
at(1, 3) = sig.
at(5);
366 globTensor.
at(2, 1) = sig.
at(6);
367 globTensor.
at(2, 2) = sig.
at(2);
368 globTensor.
at(2, 3) = sig.
at(4);
370 globTensor.
at(3, 1) = sig.
at(5);
371 globTensor.
at(3, 2) = sig.
at(4);
372 globTensor.
at(3, 3) = sig.
at(3);
378 answer.
at(1) = globTensor.
at(1, 1);
379 answer.
at(2) = globTensor.
at(2, 2);
380 answer.
at(3) = globTensor.
at(1, 2);
381 answer.
at(7) = globTensor.
at(2, 3);
382 answer.
at(8) = globTensor.
at(1, 3);
386 globTensor.
at(1, 1) = sig.
at(7);
387 globTensor.
at(1, 2) = sig.
at(12);
388 globTensor.
at(1, 3) = sig.
at(11);
390 globTensor.
at(2, 1) = sig.
at(12);
391 globTensor.
at(2, 2) = sig.
at(8);
392 globTensor.
at(2, 3) = sig.
at(10);
394 globTensor.
at(3, 1) = sig.
at(11);
395 globTensor.
at(3, 2) = sig.
at(10);
396 globTensor.
at(3, 3) = sig.
at(9);
401 answer.
at(4) = globTensor.
at(1, 1);
402 answer.
at(5) = globTensor.
at(2, 2);
403 answer.
at(6) = globTensor.
at(1, 2);
460 EASValsSetEdgeFlag(
true);
461 EASValsSetFillStyle(FILL_SOLID);
473 go = CreateTriangle3D(p);
474 EGWithMaskChangeAttributes(WIDTH_MASK | FILL_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
475 EGAttachObject(go, ( EObjectP )
this);
476 EMAddGraphicsToModel(ESIModel(), go);
495 EASValsSetEdgeFlag(
true);
496 EASValsSetFillStyle(FILL_SOLID);
508 go = CreateTriangle3D(p);
509 EGWithMaskChangeAttributes(WIDTH_MASK | FILL_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
510 EMAddGraphicsToModel(ESIModel(), go);
517 int i, indx, result = 0;
521 double s [ 3 ], defScale;
538 this->
giveIPValue(a, gp, IST_ShellMomentTensor, tStep);
539 v.
add(gp->giveWeight(), a);
540 tot_w += gp->giveWeight();
550 s [ 0 ] = v1.
at(indx);
551 s [ 1 ] = v2.
at(indx);
552 s [ 2 ] = v3.
at(indx);
555 for ( i = 0; i < 3; i++ ) {
570 tr = CreateTriangleWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ]);
571 EGWithMaskChangeAttributes(LAYER_MASK, tr);
572 EMAddGraphicsToModel(ESIModel(), tr);
int testElementGraphicActivity(Element *)
Test if particular element passed fulfills various filtering criteria for its graphics output...
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
The element interface required by NodalAvergagingRecoveryModel.
std::unique_ptr< IntegrationRule > compositeIR
Element integraton rule (plate and membrane parts have their own integration rules) this one used to ...
int giveNumberOfColumns() const
Returns number of columns of receiver.
void subtract(const FloatArray &src)
Subtracts array src to receiver.
virtual void postInitialize()
Performs post initialization steps.
virtual void ZZErrorEstimatorI_computeLocalStress(FloatArray &answer, FloatArray &sig)
Returns stress vector in global c.s.
std::unique_ptr< TrPlanestressRotAllman3d > membrane
Pointer to membrane (plane stress) element.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
ScalarAlgorithmType getScalarAlgo()
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
Access method for default integration rule.
The element interface required by ZZNodalRecoveryModel.
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
virtual void giveCharacteristicVector(FloatArray &answer, CharType mtrx, ValueModeType mode, TimeStep *tStep)
Computes characteristic vector of receiver of requested type in given time step.
double & at(int i)
Coefficient access function.
virtual int giveInternalStateAtNode(FloatArray &answer, InternalStateType type, InternalStateMode mode, int node, TimeStep *tStep)
Returns internal state variable (like stress,strain) at node of element in Reduced form...
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
#define OOFEG_RAW_GEOMETRY_LAYER
EPixel getElementEdgeColor()
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. ...
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
virtual double giveCoordinate(int i)
void setCrossSection(int csIndx)
Sets the cross section model of receiver.
int & at(int i)
Coefficient access function.
virtual void NodalAveragingRecoveryMI_computeNodalValue(FloatArray &answer, int node, InternalStateType type, TimeStep *tStep)
Computes the element value in given node.
#define OOFEG_DEFORMED_GEOMETRY_LAYER
void beMaxOf(const FloatArray &a, const FloatArray &b)
Sets receiver to maximum of a or b's respective elements.
Abstract base class representing integration rule.
virtual void drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep)
virtual void drawDeformedGeometry(oofegGraphicContext &gc, TimeStep *tStep, UnknownType type)
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
virtual void SpatialLocalizerI_giveBBox(FloatArray &bb0, FloatArray &bb1)
Creates a bounding box of the nodes and checks if it includes the given coordinate.
virtual int giveNumberOfNodes() const
Returns number of nodes of receiver.
int getInternalVarsDefGeoFlag()
EPixel getDeformedElementColor()
bool isNotEmpty() const
Tests for empty matrix.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
InternalStateType giveIntVarType()
Abstract base class for all "structural" finite elements.
void beMinOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be minimum of a or b's respective elements.
The element interface corresponding to ZZErrorEstimator.
static IntArray loc_membrane
static IntArray loc_plate
int giveNumber()
Returns number of receiver.
#define OOFEG_RAW_GEOMETRY_WIDTH
UnknownType
Type representing particular unknown (its physical meaning).
void rotatedWith(const FloatMatrix &r, char mode= 'n')
Returns the receiver 'a' transformed using give transformation matrix r.
virtual void updateYourself(TimeStep *tStep)
Updates element state after equilibrium in time step has been reached.
virtual void setCrossSection(int csIndx)
Sets the cross section model of receiver.
virtual double giveUpdatedCoordinate(int ic, TimeStep *tStep, double scale=1.)
Returns updated ic-th coordinate of receiver.
This class represent triangular plane stress element with rotational degree of freedom around normal ...
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Prints output of receiver to stream, for given time step.
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix^T and anArray.
bool isEmpty() const
Returns true if receiver is empty.
double at(int i, int j) const
Coefficient access function.
virtual bool giveRotationMatrix(FloatMatrix &answer)
Transformation matrices updates rotation matrix between element-local and primary DOFs...
virtual void giveCharacteristicMatrix(FloatMatrix &answer, CharType mtrx, TimeStep *tStep)
Computes characteristic matrix of receiver of requested type in given time step.
InternalStateMode giveIntVarMode()
virtual void postInitialize()
Performs post initialization steps.
virtual void updateInternalState(TimeStep *tStep)
Updates element state after equilibrium in time step has been reached.
TR_SHELL02(int n, Domain *d)
Constructor.
Class representing vector of real numbers.
virtual Interface * giveInterface(InterfaceType it)
Interface requesting service.
virtual void drawScalar(oofegGraphicContext &gc, TimeStep *tStep)
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
virtual void updateYourself(TimeStep *tStep)
Updates element state after equilibrium in time step has been reached.
This class represent DKT plate element that can be arbitrary oriented in space, in contrast to base D...
void assemble(const FloatArray &fe, const IntArray &loc)
Assembles the array fe (typically, the load vector of a finite element) into the receiver, using loc as location array.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
virtual IntegrationRule * ZZErrorEstimatorI_giveIntegrationRule()
Returns element integration rule used to evaluate error.
void zero()
Zeroes all coefficients of receiver.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
#define OOFEG_DEFORMED_GEOMETRY_WIDTH
void times(double s)
Multiplies receiver with scalar.
void beTranspositionOf(const FloatMatrix &src)
Assigns to the receiver the transposition of parameter.
The spatial localizer element interface associated to spatial localizer.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
virtual bool isActivated(TimeStep *tStep)
virtual FloatArray * giveCoordinates()
void zero()
Zeroes all coefficient of receiver.
InterfaceType
Enumerative type, used to identify interface type.
void updateFringeTableMinMax(double *s, int size)
Load is base abstract class for all loads.
the oofem namespace is to define a context or scope in which all oofem names are defined.
void assemble(const FloatMatrix &src, const IntArray &loc)
Assembles the contribution using localization array into receiver.
virtual void updateLocalNumbering(EntityRenumberingFunctor &f)
Local renumbering support.
Node * giveNode(int i) const
Returns reference to the i-th node of element.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
#define OOFEG_VARPLOT_PATTERN_LAYER
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.
std::unique_ptr< DKTPlate3d > plate
Pointer to plate element.
int numberOfDofMans
Number of dofmanagers.
void add(const FloatArray &src)
Adds array src to receiver.
void updateLocalNumbering(EntityRenumberingFunctor &f)
Local renumbering support.
virtual Material * giveMaterial()
Class representing Gaussian-quadrature integration rule.
void resize(int s)
Resizes receiver towards requested size.