35 #include "../sm/Elements/Shells/tr_shell01.h" 75 OOFEM_WARNING(
"key word NIP is not allowed for element TR_SHELL01");
80 OOFEM_WARNING(
"key word NIProt is not allowed for element TR_SHELL01");
85 result =
plate->initializeFrom(ir);
89 result =
membrane->initializeFrom(ir);
102 if (
plate->giveDefaultIntegrationRulePtr()->giveNumberOfIntegrationPoints() !=
membrane->giveDefaultIntegrationRulePtr()->giveNumberOfIntegrationPoints() ) {
103 OOFEM_ERROR(
"incompatible integration rules detected %d vs %d IPs",
104 plate->giveDefaultIntegrationRulePtr()->giveNumberOfIntegrationPoints(),
105 membrane->giveDefaultIntegrationRulePtr()->giveNumberOfIntegrationPoints());
113 plate->updateLocalNumbering(f);
120 plate->setCrossSection(csIndx);
136 plate->giveCharacteristicVector(aux, mtrx, mode, tStep);
139 membrane->giveCharacteristicVector(aux, mtrx, mode, tStep);
154 plate->giveCharacteristicMatrix(aux, mtrx, tStep);
157 membrane->giveCharacteristicMatrix(aux, mtrx, tStep);
168 plate->computeBodyLoadVectorAt(aux, forLoad, tStep, mode);
171 membrane->computeBodyLoadVectorAt(aux, forLoad, tStep, mode);
184 bool t1 =
plate->giveRotationMatrix(aux1);
185 bool t2 =
membrane->giveRotationMatrix(aux2);
195 for (
int i = 1; i <= 9; i++ ) {
196 for (
int j = 1; j <= ncol; j++ ) {
201 for (
int i = 1; i <= 9; i++ ) {
202 for (
int j = 1; j <= ncol; j++ ) {
215 plate->updateInternalState(tStep);
216 membrane->updateInternalState(tStep);
224 plate->updateYourself(tStep);
248 return plate->computeVolumeAround(gp);
254 if ( type == IST_ShellForceTensor || type == IST_ShellStrainTensor ||
255 type == IST_ShellMomentTensor || type == IST_CurvatureTensor ) {
260 plate->giveIPValue(answer, plateGP, type, tStep);
261 membrane->giveIPValue(aux, membraneGP, type, tStep);
285 for (
auto &gp: *iRule ) {
286 fprintf( file,
" GP %2d.%-2d :", iRule->giveNumber(), gp->giveNumber() );
288 this->
giveIPValue(v, gp, IST_ShellStrainTensor, tStep);
290 fprintf(file,
" strains ");
292 fprintf(file,
" %.4e %.4e %.4e %.4e %.4e %.4e ",
295 this->
giveIPValue(v, gp, IST_CurvatureTensor, tStep);
297 fprintf(file,
"\n curvatures ");
299 fprintf(file,
" %.4e %.4e %.4e %.4e %.4e %.4e ",
303 this->
giveIPValue(v, gp, IST_ShellForceTensor, tStep);
305 fprintf(file,
"\n stresses ");
307 fprintf(file,
" %.4e %.4e %.4e %.4e %.4e %.4e ",
310 this->
giveIPValue(v, gp, IST_ShellMomentTensor, tStep);
312 fprintf(file,
"\n moments ");
314 fprintf(file,
" %.4e %.4e %.4e %.4e %.4e %.4e ",
329 if ( ( iores = this->
plate->saveContext(stream, mode, obj) ) !=
CIO_OK ) {
332 if ( ( iores = this->
membrane->saveContext(stream, mode, obj) ) !=
CIO_OK ) {
345 if ( ( iores = this->
plate->restoreContext(stream, mode, obj) ) !=
CIO_OK ) {
348 if ( ( iores = this->
membrane->restoreContext(stream, mode, obj) ) !=
CIO_OK ) {
359 this->
compositeIR->SetUpPointsOnTriangle(
plate->giveDefaultIntegrationRulePtr()->giveNumberOfIntegrationPoints(), _3dShell);
376 globTensor.
at(1, 1) = sig.
at(1);
377 globTensor.
at(1, 2) = sig.
at(6);
378 globTensor.
at(1, 3) = sig.
at(5);
380 globTensor.
at(2, 1) = sig.
at(6);
381 globTensor.
at(2, 2) = sig.
at(2);
382 globTensor.
at(2, 3) = sig.
at(4);
384 globTensor.
at(3, 1) = sig.
at(5);
385 globTensor.
at(3, 2) = sig.
at(4);
386 globTensor.
at(3, 3) = sig.
at(3);
392 answer.
at(1) = globTensor.
at(1, 1);
393 answer.
at(2) = globTensor.
at(2, 2);
394 answer.
at(3) = globTensor.
at(1, 2);
395 answer.
at(7) = globTensor.
at(2, 3);
396 answer.
at(8) = globTensor.
at(1, 3);
400 globTensor.
at(1, 1) = sig.
at(7);
401 globTensor.
at(1, 2) = sig.
at(12);
402 globTensor.
at(1, 3) = sig.
at(11);
404 globTensor.
at(2, 1) = sig.
at(12);
405 globTensor.
at(2, 2) = sig.
at(8);
406 globTensor.
at(2, 3) = sig.
at(10);
408 globTensor.
at(3, 1) = sig.
at(11);
409 globTensor.
at(3, 2) = sig.
at(10);
410 globTensor.
at(3, 3) = sig.
at(9);
415 answer.
at(4) = globTensor.
at(1, 1);
416 answer.
at(5) = globTensor.
at(2, 2);
417 answer.
at(6) = globTensor.
at(1, 2);
474 EASValsSetEdgeFlag(
true);
475 EASValsSetFillStyle(FILL_SOLID);
487 go = CreateTriangle3D(p);
488 EGWithMaskChangeAttributes(WIDTH_MASK | FILL_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
489 EGAttachObject(go, ( EObjectP )
this);
490 EMAddGraphicsToModel(ESIModel(), go);
509 EASValsSetEdgeFlag(
true);
510 EASValsSetFillStyle(FILL_SOLID);
522 go = CreateTriangle3D(p);
523 EGWithMaskChangeAttributes(WIDTH_MASK | FILL_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
524 EMAddGraphicsToModel(ESIModel(), go);
531 int indx, result = 0;
535 double s [ 3 ], defScale;
552 this->
giveIPValue(a, gp, IST_ShellMomentTensor, tStep);
553 v.
add(gp->giveWeight(), a);
554 tot_w += gp->giveWeight();
564 s [ 0 ] = v1.
at(indx);
565 s [ 1 ] = v2.
at(indx);
566 s [ 2 ] = v3.
at(indx);
569 for (
int i = 0; i < 3; i++ ) {
584 tr = CreateTriangleWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ]);
585 EGWithMaskChangeAttributes(LAYER_MASK, tr);
586 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.
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 giveCharacteristicMatrix(FloatMatrix &answer, CharType mtrx, TimeStep *tStep)
Computes characteristic matrix of receiver of requested type in given time step.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
ScalarAlgorithmType getScalarAlgo()
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
The element interface required by ZZNodalRecoveryModel.
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
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...
virtual void updateYourself(TimeStep *tStep)
Updates element state after equilibrium in time step has been reached.
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
#define OOFEG_RAW_GEOMETRY_LAYER
EPixel getElementEdgeColor()
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
virtual bool giveRotationMatrix(FloatMatrix &answer)
Transformation matrices updates rotation matrix between element-local and primary DOFs...
This class represent triangular plane stress element with rotational degree of freedom around normal ...
virtual double giveCoordinate(int i)
int & at(int i)
Coefficient access function.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
virtual void SpatialLocalizerI_giveBBox(FloatArray &bb0, FloatArray &bb1)
Creates a bounding box of the nodes and checks if it includes the given coordinate.
#define OOFEG_DEFORMED_GEOMETRY_LAYER
void beMaxOf(const FloatArray &a, const FloatArray &b)
Sets receiver to maximum of a or b's respective elements.
static IntArray loc_plate
Abstract base class representing integration rule.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
virtual int giveNumberOfNodes() const
Returns number of nodes of receiver.
int getInternalVarsDefGeoFlag()
EPixel getDeformedElementColor()
virtual void updateInternalState(TimeStep *tStep)
Updates element state after equilibrium in time step has been reached.
bool isNotEmpty() const
Tests for empty matrix.
InternalStateType giveIntVarType()
Abstract base class for all "structural" finite elements.
std::unique_ptr< IntegrationRule > compositeIR
Element integraton rule (plate and membrane parts have their own integration rules) this one used to ...
void beMinOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be minimum of a or b's respective elements.
This class represent CCT plate element that can be arbitrary oriented in space, in contrast to base C...
The element interface corresponding to ZZErrorEstimator.
static IntArray loc_membrane
int giveNumber()
Returns number of receiver.
#define OOFEG_RAW_GEOMETRY_WIDTH
UnknownType
Type representing particular unknown (its physical meaning).
virtual void ZZErrorEstimatorI_computeLocalStress(FloatArray &answer, FloatArray &sig)
Returns stress vector in global c.s.
void rotatedWith(const FloatMatrix &r, char mode= 'n')
Returns the receiver 'a' transformed using give transformation matrix r.
void updateLocalNumbering(EntityRenumberingFunctor &f)
Local renumbering support.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
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.
TR_SHELL01(int n, Domain *d)
Constructor.
virtual void drawScalar(oofegGraphicContext &gc, TimeStep *tStep)
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 IntegrationRule * ZZErrorEstimatorI_giveIntegrationRule()
Returns element integration rule used to evaluate error.
InternalStateMode giveIntVarMode()
virtual void giveCharacteristicVector(FloatArray &answer, CharType mtrx, ValueModeType mode, TimeStep *tStep)
Computes characteristic vector of receiver of requested type in given time step.
Class representing vector of real numbers.
virtual void drawRawGeometry(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.
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 void drawDeformedGeometry(oofegGraphicContext &gc, TimeStep *tStep, UnknownType type)
void zero()
Zeroes all coefficients of receiver.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
std::unique_ptr< CCTPlate3d > plate
Pointer to plate element.
virtual Interface * giveInterface(InterfaceType it)
Interface requesting service.
virtual void postInitialize()
Performs post initialization steps.
#define OOFEG_DEFORMED_GEOMETRY_WIDTH
void times(double s)
Multiplies receiver with scalar.
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 beTranspositionOf(const FloatMatrix &src)
Assigns to the receiver the transposition of parameter.
The spatial localizer element interface associated to spatial localizer.
virtual void NodalAveragingRecoveryMI_computeNodalValue(FloatArray &answer, int node, InternalStateType type, TimeStep *tStep)
Computes the element value in given node.
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.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
InterfaceType
Enumerative type, used to identify interface type.
void updateFringeTableMinMax(double *s, int size)
#define _IFT_TrPlaneStrRot_niprot
Load is base abstract class for all loads.
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
Access method for default integration rule.
std::unique_ptr< TrPlaneStrRot3d > membrane
Pointer to membrane (plane stress) element.
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.
#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.
#define OOFEM_WARNING(...)
Class representing solution step.
int numberOfDofMans
Number of dofmanagers.
void add(const FloatArray &src)
Adds array src to receiver.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Prints output of receiver to stream, for given time step.
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
void setCrossSection(int csIndx)
Sets the cross section model of receiver.
virtual Material * giveMaterial()
Class representing Gaussian-quadrature integration rule.
void resize(int s)
Resizes receiver towards requested size.