103 answer = {V_u, V_v, P_f};
156 for (
int i = 1; i <= 6; i++ ) {
157 answer.
at(1, 2 * i - 1) = dn.
at(i, 1) * u.
at(1) + dn.
at(i, 2) * u.
at(2);
158 answer.
at(2, 2 * i) = dn.
at(i, 1) * u.
at(1) + dn.
at(i, 2) * u.
at(2);
171 for (
int i = 1; i <= 6; i++ ) {
172 answer.
at(1, 2 * i - 1) = dn.
at(i, 1);
173 answer.
at(2, 2 * i) = dn.
at(i, 2);
174 answer.
at(3, 2 * i - 1) = dn.
at(i, 2);
175 answer.
at(3, 2 * i) = dn.
at(i, 1);
188 for (
int i = 1; i <= 6; i++ ) {
189 answer.
at(1, 2 * i - 1) = dn.
at(i, 1);
190 answer.
at(1, 2 * i) = dn.
at(i, 2);
203 answer.
at(1, 1) = n.
at(1);
204 answer.
at(1, 2) = n.
at(2);
205 answer.
at(1, 3) = n.
at(3);
217 for (
int i = 1; i <= 6; i++ ) {
218 um.
at(1, i) = u.
at(2 * i - 1);
219 um.
at(2, i) = u.
at(2 * i);
249 for (
int i = 1; i <= 6; i++ ) {
250 answer.
at(1, 2 * i - 1) = D.
at(1, 1) * d2n.
at(i, 1) + D.
at(1, 3) * d2n.
at(i, 3) + D.
at(3, 1) * d2n.
at(i, 3) + D.
at(3, 3) * d2n.
at(i, 2);
251 answer.
at(1, 2 * i) = D.
at(1, 2) * d2n.
at(i, 3) + D.
at(1, 3) * d2n.
at(i, 1) + D.
at(3, 2) * d2n.
at(i, 2) + D.
at(3, 3) * d2n.
at(i, 3);
252 answer.
at(2, 2 * i - 1) = D.
at(2, 1) * d2n.
at(i, 3) + D.
at(2, 3) * d2n.
at(i, 2) + D.
at(3, 1) * d2n.
at(i, 1) + D.
at(3, 3) * d2n.
at(i, 3);
253 answer.
at(2, 2 * i) = D.
at(2, 2) * d2n.
at(i, 2) + D.
at(2, 3) * d2n.
at(i, 3) + D.
at(3, 2) * d2n.
at(i, 3) + D.
at(3, 3) * d2n.
at(i, 1);
261 double mu_min, norm_N, norm_N_d, norm_M_d, norm_LSIC;
285 if ( ( norm_N == 0 ) || ( norm_N_d == 0 ) || ( norm_M_d == 0 ) ) {
292 if ( norm_LSIC == 0 ) {
397 double answer = 0.0, vol = 0.0;
403 for (
int i = 1; i <= 6; i++ ) {
445 double determinant, weight, volume;
449 weight = gp->giveWeight();
450 volume = determinant * weight;
474 double vol = 0.0, eps = 0.0, _fi,
S = 0.0;
476 for (
int i = 1; i <= 6; i++ ) {
485 S += _fi / ( _fi * _fi + eps * eps ) * dV;
496 int neg = 0, pos = 0, zero = 0, si = 0, sqi = 0;
501 for (
double ifi: fi ) {
504 }
else if ( ifi < 0.0 ) {
512 int first_control = 0;
514 OOFEM_LOG_INFO(
"TR21_2D_SUPG :: LS_PCS_computeVOFFractions - First control, sign(fi) in vertices, element no. %d", first_control);
521 }
else if ( pos == 0 ) {
524 }
else if ( zero == 3 ) {
532 int inter_case, negq = 0, posq = 0, zeroq = 0;
534 for (
double ifi: fi ) {
537 }
else if ( ifi < 0.0 ) {
544 for (
int i = 1; i <= 3; i++ ) {
545 if ( ( pos > neg ) && ( fi.at(i) < 0.0 ) ) {
550 if ( ( pos < neg ) && ( fi.at(i) >= 0.0 ) ) {
558 for (
int i = 4; i <= 6; i++ ) {
559 if ( ( posq > negq ) && ( fi.at(i) < 0.0 ) ) {
564 if ( ( posq < negq ) && ( fi.at(i) >= 0.0 ) ) {
572 }
else if ( posq == 0 ) {
575 if ( fi.at(si) * fi.at(sqi) > 0 ) {
583 int edge1 = 0, edge2 = 0;
587 if ( inter_case > 3 ) {
593 OOFEM_LOG_INFO(
"TR21_2D_SUPG :: LS_PCS_computeVOFFractions - case 1 - first type of element deviation by LS, element no. %d", second_control1);
606 }
else if ( si == 2 ) {
614 }
else if ( si == 3 ) {
627 OOFEM_LOG_INFO(
"case 1 - after intersections of LS and edges, element no. %d", second_control1);
634 FloatArray _l(4), M(2), X_si(2), _Mid(2), line(6), _X1(2), Mid1(2), Mid2(2), Coeff(3), loc_Mid(3), loc_X1(3), N_Mid, N_X1;
635 double x1, xsi, y1, ysi, t, fi_X1, fi_Mid, r1, r11, r12;
637 _l.
at(1) = inter1.at(1);
638 _l.at(2) = inter1.at(2);
639 _l.at(3) = inter2.
at(1);
640 _l.at(4) = inter2.
at(2);
650 x1 = xsi + 2 * ( _Mid.at(1) - xsi );
651 y1 = ysi + 2 * ( _Mid.at(2) - ysi );
667 line.at(2) = fi.at(si);
668 line.at(3) = sqrt( ( _Mid.at(1) - xsi ) * ( _Mid.at(1) - xsi ) + ( _Mid.at(2) - ysi ) * ( _Mid.at(2) - ysi ) );
670 line.at(5) = sqrt( ( _Mid.at(1) - _X1.at(1) ) * ( _Mid.at(1) - _X1.at(1) ) + ( _Mid.at(2) - _X1.at(2) ) * ( _Mid.at(2) - _X1.at(2) ) );
677 if ( r11 > line.at(6) || r11 < line.at(1) ) {
683 t = r1 / sqrt( ( _Mid.at(1) - xsi ) * ( _Mid.at(1) - xsi ) + ( _Mid.at(2) - ysi ) * ( _Mid.at(2) - ysi ) );
685 M.at(1) = xsi + t * ( _Mid.at(1) - xsi );
686 M.at(2) = ysi + t * ( _Mid.at(2) - ysi );
689 OOFEM_LOG_INFO(
"case 1 - after computing third point on zero level set curve inside element, element no. %d", second_control1);
696 borderpoints.
at(1) = xsi;
697 borderpoints.
at(2) = ysi;
698 borderpoints.
at(3) = inter1.at(1);
699 borderpoints.
at(4) = inter1.at(2);
703 borderpoints.
at(1) = xsi;
704 borderpoints.
at(2) = ysi;
705 borderpoints.
at(3) = inter2.
at(1);
706 borderpoints.
at(4) = inter2.
at(2);
735 if ( inter_case == 11 ) {
736 answer.
at(2) = vol_1 / vol;
737 answer.
at(1) = 1.0 - answer.
at(2);
739 answer.
at(1) = vol_1 / vol;
740 answer.
at(2) = 1.0 - answer.
at(1);
743 else if ( inter_case == 2 ) {
745 int second_control2 = 0;
747 OOFEM_LOG_INFO(
"case 2 - second type of element deviation by LS, element no. %d", second_control2);
750 FloatArray inter1(2), inter2(2), crosssect(4);
760 }
else if ( si == 2 ) {
767 }
else if ( si == 3 ) {
778 FloatArray X_qsi(2), X_si(2), _Mid(2), line(6), _X1(2), Mid1(2), Coeff(3), loc_Mid, loc_X1, N_Mid, N_X1, M(2);
779 double x1, xsi, y1, ysi, t, fi_X1, fi_Mid, r1, r11, r12;
792 x1 = xsi + 1.3 * ( _Mid.at(1) - xsi );
793 y1 = ysi + 1.3 * ( _Mid.at(2) - ysi );
808 line.at(2) = fi.at(si);
809 line.at(3) = sqrt( ( _Mid.at(1) - xsi ) * ( _Mid.at(1) - xsi ) + ( _Mid.at(2) - ysi ) * ( _Mid.at(2) - ysi ) );
811 line.at(5) = sqrt( ( _Mid.at(1) - _X1.at(1) ) * ( _Mid.at(1) - _X1.at(1) ) + ( _Mid.at(2) - _X1.at(2) ) * ( _Mid.at(2) - _X1.at(2) ) );
818 if ( r11 > line.at(6) || r11 < line.at(1) ) {
824 t = r1 / sqrt( ( _Mid.at(1) - xsi ) * ( _Mid.at(1) - xsi ) + ( _Mid.at(2) - ysi ) * ( _Mid.at(2) - ysi ) );
826 M.
at(1) = xsi + t * ( _Mid.at(1) - xsi );
827 M.
at(2) = ysi + t * ( _Mid.at(2) - ysi );
832 if ( ( si == 1 ) && ( sqi == 4 ) ) {
833 borderpoints.at(1) = xsi;
834 borderpoints.at(2) = ysi;
835 borderpoints.at(3) = inter2.at(1);
836 borderpoints.at(4) = inter2.at(2);
842 if ( ( si == 1 ) && ( sqi == 6 ) ) {
843 borderpoints.at(1) = xsi;
844 borderpoints.at(2) = ysi;
845 borderpoints.at(3) = inter1.at(1);
846 borderpoints.at(4) = inter1.at(2);
851 if ( ( si == 2 ) && ( sqi == 4 ) ) {
852 borderpoints.at(1) = xsi;
853 borderpoints.at(2) = ysi;
854 borderpoints.at(3) = inter1.at(1);
855 borderpoints.at(4) = inter1.at(2);
860 if ( ( si == 2 ) && ( sqi == 5 ) ) {
861 borderpoints.at(1) = xsi;
862 borderpoints.at(2) = ysi;
863 borderpoints.at(3) = inter2.at(1);
864 borderpoints.at(4) = inter2.at(2);
869 if ( ( si == 3 ) && ( sqi == 6 ) ) {
870 borderpoints.at(1) = xsi;
871 borderpoints.at(2) = ysi;
872 borderpoints.at(3) = inter2.at(1);
873 borderpoints.at(4) = inter2.at(2);
878 if ( ( si == 3 ) && ( sqi == 5 ) ) {
879 borderpoints.at(1) = xsi;
880 borderpoints.at(2) = ysi;
881 borderpoints.at(3) = inter1.at(1);
882 borderpoints.at(4) = inter1.at(2);
895 if ( sub_case == 1 ) {
920 answer.
at(2) = vol_1 / vol;
921 answer.
at(1) = 1.0 - answer.
at(2);
923 answer.
at(1) = vol_1 / vol;
924 answer.
at(2) = 1.0 - answer.
at(1);
929 int second_control3 = 0;
931 OOFEM_LOG_INFO(
"case 3 - third type of element deviation by LS, element no. %d", second_control3);
934 FloatArray inter1(2), inter2(2), crosssect(4);
944 }
else if ( si == 2 ) {
952 }
else if ( si == 3 ) {
964 FloatArray X_si(2), M(2), _Mid(2), line(6), _X1(2), Mid1(2), Coeff(3), loc_Mid, loc_X1, N_Mid, N_X1;
965 double x1, xsi, y1, ysi, t, fi_X1, fi_Mid, r1, r11, r12;
974 x1 = xsi + 0.5 * ( _Mid.at(1) - xsi );
975 y1 = ysi + 0.5 * ( _Mid.at(2) - ysi );
990 line.at(2) = fi.at(si);
991 line.at(3) = sqrt( ( _Mid.at(1) - xsi ) * ( _Mid.at(1) - xsi ) + ( _Mid.at(2) - ysi ) * ( _Mid.at(2) - ysi ) );
993 line.at(5) = sqrt( ( _Mid.at(1) - _X1.at(1) ) * ( _Mid.at(1) - _X1.at(1) ) + ( _Mid.at(2) - _X1.at(2) ) * ( _Mid.at(2) - _X1.at(2) ) );
1000 if ( r11 > line.at(6) || r11 < line.at(1) ) {
1006 t = r1 / sqrt( ( _Mid.at(1) - xsi ) * ( _Mid.at(1) - xsi ) + ( _Mid.at(2) - ysi ) * ( _Mid.at(2) - ysi ) );
1008 M.at(1) = xsi + t * ( _Mid.at(1) - xsi );
1009 M.at(2) = ysi + t * ( _Mid.at(2) - ysi );
1028 c1 [ 1 ] = & inter1;
1029 c1 [ 2 ] = & inter2;
1044 answer.
at(2) = vol_1 / vol;
1045 answer.
at(1) = 1.0 - answer.
at(2);
1047 answer.
at(1) = vol_1 / vol;
1048 answer.
at(2) = 1.0 - answer.
at(1);
1058 double fi1, fi2, fi3, r1, r11, r12;
1064 fi1 = fi.
at( edge.
at(1) );
1065 fi2 = fi.
at( edge.
at(2) );
1066 fi3 = fi.
at( edge.
at(3) );
1068 Coeff.at(1) = fi1 + fi2 - 2 * fi3;
1069 Coeff.at(2) = fi2 - fi1;
1070 Coeff.at(3) = 2 * fi3;
1074 if ( r11 > 1.0 || r11 < -1.0 ) {
1081 helplcoords.
at(1) = r1;
1094 double fi1, fi2, fi3, r1, r11, r12;
1100 fi1 = fi.
at(
edge.at(1) );
1101 fi2 = fi.
at(
edge.at(2) );
1102 fi3 = fi.
at(
edge.at(3) );
1104 Coeff.at(1) = fi1 + fi2 - 2 * fi3;
1105 Coeff.at(2) = fi2 - fi1;
1106 Coeff.at(3) = 2 * fi3;
1110 if ( r11 > 1.0 || r11 < -1.0 ) {
1117 helplcoords.
at(1) = r1;
1143 answer.
at(1) = C.
at(1);
1144 answer.
at(2) = a * C.
at(1) * C.
at(1) + b *C.
at(1) + c;
1156 C.
at(1) = ( c.
at(1) + c.
at(3) ) / 2;
1157 C.
at(2) = ( c.
at(2) + c.
at(4) ) / 2;
1163 C.
at(1) = ( c.
at(1) + c.
at(3) + c.
at(5) ) / 3;
1164 C.
at(2) = ( c.
at(2) + c.
at(4) + c.
at(6) ) / 3;
1180 r1 = ( -b + sqrt(b * b - 4 * a * c) ) / ( 2 * a );
1181 r2 = ( -b - sqrt(b * b - 4 * a * c) ) / ( 2 * a );
1194 answer.
at(1) = this->
giveNode( edge.
at(1) )->giveCoordinate(1);
1195 answer.
at(2) = this->
giveNode( edge.
at(1) )->giveCoordinate(2);
1197 answer.
at(3) = this->
giveNode( edge.
at(2) )->giveCoordinate(1);
1198 answer.
at(4) = this->
giveNode( edge.
at(2) )->giveCoordinate(2);
1200 answer.
at(5) = this->
giveNode( edge.
at(3) )->giveCoordinate(1);
1201 answer.
at(6) = this->
giveNode( edge.
at(3) )->giveCoordinate(2);
1211 double x1, y1, x2, y2, x3, y3, detA, detA1;
1230 A.at(1, 1) = x1 * x1;
1231 A.at(2, 1) = x2 * x2;
1232 A.at(3, 1) = x3 * x3;
1242 detA = A.giveDeterminant();
1248 for (
int k = 1; k <= 3; k++ ) {
1249 for (
int i = 1; i <= 3; i++ ) {
1250 for (
int j = 1; j <= 3; j++ ) {
1251 A1.
at(i, j) = A.at(i, j);
1254 A1.
at(i, k) = b.
at(i);
1258 answer.
at(k) = detA1 / detA;
1265 double x1, y1, x2, y2, x3, y3, detA, detA1;
1280 A.at(1, 1) = x1 * x1;
1281 A.at(2, 1) = x2 * x2;
1282 A.at(3, 1) = x3 * x3;
1292 detA = A.giveDeterminant();
1298 for (
int k = 1; k <= 3; k++ ) {
1299 for (
int i = 1; i <= 3; i++ ) {
1300 for (
int j = 1; j <= 3; j++ ) {
1301 A1.
at(i, j) = A.at(i, j);
1304 A1.
at(i, k) = b.
at(i);
1308 answer.
at(k) = detA1 / detA;
1383 double determinant, weight, volume;
1389 volume = determinant * weight;
1413 map = {1, 2, 4, 5, 7, 8, 10, 11, 12, 13, 14, 15};
1449 EASValsSetEdgeFlag(
true);
1461 go = CreateTriangle3D(p);
1462 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
1463 EGAttachObject(go, ( EObjectP )
this);
1464 EMAddGraphicsToModel(ESIModel(), go);
1469 int i, indx, result = 0;
1503 if ( result != 3 ) {
1509 s [ 0 ] = v1.
at(indx);
1510 s [ 1 ] = v2.
at(indx);
1511 s [ 2 ] = v3.
at(indx);
1516 for ( i = 0; i < 3; i++ ) {
1524 tr = CreateTriangleWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ]);
1525 EGWithMaskChangeAttributes(LAYER_MASK, tr);
1526 EMAddGraphicsToModel(ESIModel(), tr);
1530 for ( i = 0; i < 3; i++ ) {
1533 p [ i ].z = s [ i ] * landScale;
1539 EASValsSetFillStyle(FILL_SOLID);
1540 tr = CreateTriangle3D(p);
1541 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | FILL_MASK | LAYER_MASK, tr);
1544 EASValsSetFillStyle(FILL_SOLID);
1545 tr = CreateTriangleWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ]);
1546 EGWithMaskChangeAttributes(FILL_MASK | LAYER_MASK, tr);
1549 EMAddGraphicsToModel(ESIModel(), tr);
double giveDeterminant() const
Returns the trace (sum of diagonal components) of the receiver.
CrossSection * giveCrossSection()
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.
IntArray dofManArray
Array containing dofmanager numbers.
virtual int checkConsistency()
Used to check consistency and initialize some element geometry data (area,b,c).
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
EPixel getStandardSparseProfileColor()
virtual void giveLocalVelocityDofMap(IntArray &map)
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
virtual FEInterpolation * giveInterpolation() const
virtual double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point...
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the array of interpolation functions (shape functions) at given point.
ScalarAlgorithmType getScalarAlgo()
virtual void computeDivTauMatrix(FloatMatrix &answer, GaussPoint *gp, TimeStep *tStep)
virtual void computeLocalEdgeMapping(IntArray &edgeNodes, int iedge)
virtual double giveTransformationJacobian(const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the determinant of the transformation.
The element interface required by ZZNodalRecoveryModel.
virtual void computeAdvectionTerm(FloatMatrix &answer, TimeStep *tStep)
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
double & at(int i)
Coefficient access function.
double giveLevelSetDofManValue(int i)
Returns level set value in specific node.
#define OOFEG_RAW_GEOMETRY_LAYER
Element interface for LevelSetPCS class representing level-set like material interface.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
EPixel getElementEdgeColor()
void computeCenterOf(FloatArray &C, FloatArray c, int dim)
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
virtual void LS_PCS_computeVOFFractions(FloatArray &answer, FloatArray &fi)
Returns VOF fractions for each material on element according to nodal values of level set function (p...
static FEI2dTrLin pressureInterpolation
virtual void updateYourself(TimeStep *tStep)
Updates element state after equilibrium in time step has been reached.
virtual void computeDivUMatrix(FloatMatrix &answer, GaussPoint *gp)
virtual void computeAdvectionDeltaTerm(FloatMatrix &answer, TimeStep *tStep)
virtual void evald2Ndx2(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the matrix of second derivatives of interpolation functions (shape functions) at given poin...
virtual double giveCoordinate(int i)
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
void computeQuadraticFunct(FloatArray &answer, int iedge)
virtual void initGeometry()
virtual void drawScalar(oofegGraphicContext &gc, TimeStep *tStep)
virtual int computeNumberOfDofs()
Computes or simply returns total number of element's local DOFs.
virtual void NodalAveragingRecoveryMI_computeNodalValue(FloatArray &answer, int node, InternalStateType type, TimeStep *tStep)
Computes the element value in given node.
This abstract class represent a general base element class for fluid dynamic problems.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
virtual void drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep)
virtual void giveLocalPressureDofMap(IntArray &map)
EPixel getDeformedElementColor()
Class representing a general abstraction for finite element interpolation class.
void plusProductUnsym(const FloatMatrix &a, const FloatMatrix &b, double dV)
Adds to the receiver the product .
InternalStateType giveIntVarType()
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the array of interpolation functions (shape functions) at given point.
#define OOFEM_LOG_INFO(...)
virtual void computeVectorOfVelocities(ValueModeType mode, TimeStep *tStep, FloatArray &velocities)
double dotProduct(const FloatArray &x) const
Computes the dot product (or inner product) of receiver and argument.
virtual void computeGradUMatrix(FloatMatrix &answer, GaussPoint *gp, TimeStep *tStep)
void computeQuadraticRoots(FloatArray Coeff, double &r1, double &r2)
virtual void updateYourself(TimeStep *tStep)
Updates element state after equilibrium in time step has been reached.
virtual void computeNpMatrix(FloatMatrix &answer, GaussPoint *gp)
DofIDItem
Type representing particular dof type.
#define OOFEG_RAW_GEOMETRY_WIDTH
virtual double giveWeight()
Returns integration weight of receiver.
static FEI2dTrQuad velocityInterpolation
double t_supg
Stabilization coefficients, updated for each solution step in updateStabilizationCoeffs() ...
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
virtual double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point...
Wrapper around element definition to provide FEICellGeometry interface.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
void plusProductSymmUpper(const FloatMatrix &a, const FloatMatrix &b, double dV)
Adds to the receiver the product .
TimeStep * givePreviousStep()
Returns pointer to previous solution step.
void computeMiddlePointOnParabolicArc(FloatArray &answer, int iedge, FloatArray borderpoints)
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix^T and anArray.
void computeCoordsOfEdge(FloatArray &answer, int iedge)
double at(int i, int j) const
Coefficient access function.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
virtual void computeNuMatrix(FloatMatrix &answer, GaussPoint *gp)
TR21_2D_SUPG(int n, Domain *aDomain)
virtual int setupIntegrationPoints(IntegrationRule &irule, int npoints, Element *element)
Sets up integration rule for the given element.
InternalStateMode giveIntVarMode()
void beNMatrixOf(const FloatArray &n, int nsd)
Assigns the receiver to be a repeated diagonal matrix.
Class representing vector of real numbers.
virtual Interface * giveInterface(InterfaceType)
Interface requesting service.
Class representing 2D polygon.
Implementation of matrix containing floating point numbers.
virtual void edgeLocal2global(FloatArray &answer, int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates edge global coordinates from given local ones.
double computeFrobeniusNorm() const
Computes the Frobenius norm of the receiver.
Abstract base class representing Level Set representation of material interfaces. ...
virtual void LS_PCS_computedN(FloatMatrix &answer)
Returns gradient of shape functions.
virtual void computeMassDeltaTerm(FloatMatrix &answer, TimeStep *tStep)
double computeNorm() const
Computes the norm (or length) of the vector.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
void add(const FloatMatrix &a)
Adds matrix to the receiver.
void zero()
Zeroes all coefficients of receiver.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
virtual void computeUDotGradUMatrix(FloatMatrix &answer, GaussPoint *gp, TimeStep *tStep)
#define OOFEG_DEFORMED_GEOMETRY_WIDTH
void beTranspositionOf(const FloatMatrix &src)
Assigns to the receiver the transposition of parameter.
virtual double computeCriticalTimeStep(TimeStep *tStep)
Computes the critical time increment.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
std::vector< std::unique_ptr< IntegrationRule > > integrationRulesArray
List of integration rules of receiver (each integration rule contains associated integration points a...
virtual double LS_PCS_computeVolume()
Returns receiver's volume.
void zero()
Zeroes all coefficient of receiver.
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...
Domain * giveDomain() const
InterfaceType
Enumerative type, used to identify interface type.
virtual void updateStabilizationCoeffs(TimeStep *tStep)
Updates the stabilization coefficients used for CBS and SUPG algorithms.
virtual int giveNumberOfSpatialDimensions()
void updateFringeTableMinMax(double *s, int size)
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
GraphicObj * draw(oofegGraphicContext &, bool filled, int layer=OOFEG_DEBUG_LAYER)
the oofem namespace is to define a context or scope in which all oofem names are defined.
void clear()
Sets size of receiver to be an empty matrix. It will have zero rows and zero columns size...
virtual double LS_PCS_computeS(LevelSetPCS *ls, TimeStep *tStep)
Evaluates S in level set equation of the form where .
virtual int checkConsistency()
Performs consistency check.
Node * giveNode(int i) const
Returns reference to the i-th node of element.
virtual void computeLSICTerm(FloatMatrix &answer, TimeStep *tStep)
void symmetrized()
Initializes the lower half of the receiver according to the upper half.
virtual void giveDofManDofIDMask(int inode, IntArray &answer) const
Returns dofmanager dof mask for node.
#define OOFEG_VARPLOT_PATTERN_LAYER
Class representing integration point in finite element program.
virtual int global2local(FloatArray &answer, const FloatArray &gcoords, const FEICellGeometry &cellgeo)
Default implementation using Newton's method to find the local coordinates.
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...
void computeIntersection(int iedge, FloatArray &intcoords, FloatArray &fi)
Class representing solution step.
virtual void computeGaussPoints()
Initializes the array of integration rules member variable.
virtual void computeGradPMatrix(FloatMatrix &answer, GaussPoint *gp)
int numberOfDofMans
Number of dofmanagers.
InternalStateMode
Determines the mode of internal variable.
virtual void computeBMatrix(FloatMatrix &anwer, GaussPoint *gp)
virtual double LS_PCS_computeF(LevelSetPCS *ls, TimeStep *tStep)
Evaluates F in level set equation of the form where for interface position driven by flow with speed...
const FloatArray & giveNaturalCoordinates()
Returns coordinate array of receiver.
Class representing Gaussian-quadrature integration rule.
void resize(int s)
Resizes receiver towards requested size.