OOFEM 3.0
Loading...
Searching...
No Matches
tr1_2d_supg.h
Go to the documentation of this file.
1/*
2 *
3 * ##### ##### ###### ###### ### ###
4 * ## ## ## ## ## ## ## ### ##
5 * ## ## ## ## #### #### ## # ##
6 * ## ## ## ## ## ## ## ##
7 * ## ## ## ## ## ## ## ##
8 * ##### ##### ## ###### ## ##
9 *
10 *
11 * OOFEM : Object Oriented Finite Element Code
12 *
13 * Copyright (C) 1993 - 2025 Borek Patzak
14 *
15 *
16 *
17 * Czech Technical University, Faculty of Civil Engineering,
18 * Department of Structural Mechanics, 166 29 Prague, Czech Republic
19 *
20 * This library is free software; you can redistribute it and/or
21 * modify it under the terms of the GNU Lesser General Public
22 * License as published by the Free Software Foundation; either
23 * version 2.1 of the License, or (at your option) any later version.
24 *
25 * This program is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28 * Lesser General Public License for more details.
29 *
30 * You should have received a copy of the GNU Lesser General Public
31 * License along with this library; if not, write to the Free Software
32 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33 */
34
35#ifndef tr1_2d_supg_h
36#define tr1_2d_supg_h
37
38#include "supgelement.h"
39#include "primaryfield.h"
40#include "spatiallocalizer.h"
44#include "leplic.h"
45#include "levelsetpcs.h"
46
48
49#define _IFT_TR1_2D_SUPG_Name "tr1supg"
51
52namespace oofem {
53class FEI2dTrLin;
54class ParamKey;
55
65class TR1_2D_SUPG : public SUPGElement,
69{
70protected:
72
73 //double a[3];
74 double b [ 3 ];
75 double c [ 3 ];
76 double area = 0.;
77
82
83public:
84 TR1_2D_SUPG(int n, Domain * d);
85
86 FEInterpolation *giveInterpolation() const override;
87
88 void computeAccelerationTerm_MB(FloatMatrix &answer, TimeStep *tStep) override;
89 void computeAdvectionTerm_MB(FloatArray &answer, TimeStep *tStep) override;
90 void computeAdvectionDerivativeTerm_MB(FloatMatrix &answer, TimeStep *tStep) override;
91 void computeDiffusionTerm_MB(FloatArray &answer, TimeStep *tStep) override;
92 void computeDiffusionDerivativeTerm_MB(FloatMatrix &answer, MatResponseMode mode, TimeStep *tStep) override;
93 void computePressureTerm_MB(FloatMatrix &answer, TimeStep *tStep) override;
94 void computeLSICStabilizationTerm_MB(FloatMatrix &answer, TimeStep *tStep) override;
95 void computeLinearAdvectionTerm_MC(FloatMatrix &answer, TimeStep *tStep) override;
96 void computeAdvectionTerm_MC(FloatArray &answer, TimeStep *tStep) override;
97 void computeAdvectionDerivativeTerm_MC(FloatMatrix &answer, TimeStep *tStep) override;
99 answer.resize(3, 6);
100 answer.zero();
101 }
102 void computeDiffusionTerm_MC(FloatArray &answer, TimeStep *tStep) override {
103 answer.resize(3);
104 answer.zero();
105 }
106 void computeAccelerationTerm_MC(FloatMatrix &answer, TimeStep *tStep) override;
107 void computePressureTerm_MC(FloatMatrix &answer, TimeStep *tStep) override;
108 void computeBCRhsTerm_MB(FloatArray &answer, TimeStep *tStep) override;
109 void computeBCRhsTerm_MC(FloatArray &answer, TimeStep *tStep) override;
110 void computeLoadVector(FloatArray &answer, BodyLoad *load, CharType type, ValueModeType mode, TimeStep *tStep) override;
111
112 void computeSlipWithFrictionBCTerm_MB(FloatMatrix &answer, Load *load, int side, TimeStep *tStep) override;
113 void computePenetrationWithResistanceBCTerm_MB(FloatMatrix &answer, Load *load, int side, TimeStep *tStep) override;
114 void computeOutFlowBCTerm_MB(FloatMatrix &answer, int side, TimeStep *tStep) override;
115
116 void computeHomogenizedReinforceTerm_MB(FloatMatrix &answer, Load *load, TimeStep *tStep) override;
117 void computeHomogenizedReinforceTerm_MC(FloatMatrix &answer, Load *load, TimeStep *tStep) override;
118
119 void updateStabilizationCoeffs(TimeStep *tStep) override;
120 double computeCriticalTimeStep(TimeStep *tStep) override;
121
122 // definition
123 const char *giveClassName() const override { return "TR1_2D_SUPG"; }
124 const char *giveInputRecordName() const override { return _IFT_TR1_2D_SUPG_Name; }
125 MaterialMode giveMaterialMode() override { return _2dFlow; }
126 Element_Geometry_Type giveGeometryType() const override {return EGT_triangle_1;}
127
128
129 void giveDofManDofIDMask(int inode, IntArray &answer) const override;
130 int computeNumberOfDofs() override;
131 void initializeFrom(InputRecord &ir, int priority) override;
132 void giveInputRecord(DynamicInputRecord &input) override;
133 void updateYourself(TimeStep *tStep) override;
135 int checkConsistency() override;
136
137 void saveContext(DataStream &stream, ContextMode mode) override;
138 void restoreContext(DataStream &stream, ContextMode mode) override;
139
141
143 const FloatArray &coords, IntArray &dofId, ValueModeType mode,
144 TimeStep *tStep) override;
145
146 double computeLEPLICVolumeFraction(const FloatArray &n, const double p, LEPlic *matInterface, bool updFlag) override;
147 void formMaterialVolumePoly(Polygon &matvolpoly, LEPlic *matInterface,
148 const FloatArray &normal, const double p, bool updFlag) override;
149 void formVolumeInterfacePoly(Polygon &matvolpoly, LEPlic *matInterface,
150 const FloatArray &normal, const double p, bool updFlag) override;
151 double truncateMatVolume(const Polygon &matvolpoly, double &volume) override;
152 void giveElementCenter(LEPlic *mat_interface, FloatArray &center, bool updFlag) override;
153 void formMyVolumePoly(Polygon &myPoly, LEPlic *mat_interface, bool updFlag) override;
154 Element *giveElement() override { return this; }
155 double computeMyVolume(LEPlic *matInterface, bool updFlag) override;
156 double computeVolumeAround(GaussPoint *gp) override;
157 double computeCriticalLEPlicTimeStep(TimeStep *tStep) override;
158
160 InternalStateType type, TimeStep *tStep) override;
161
163 void SPRNodalRecoveryMI_giveDofMansDeterminedByPatch(IntArray &answer, int pap) override;
166
167 double LS_PCS_computeF(LevelSetPCS *ls, TimeStep *tStep) override;
168 void LS_PCS_computedN(FloatMatrix &answer) override;
169 double LS_PCS_computeVolume() override { return area; }
170 double LS_PCS_computeS(LevelSetPCS *ls, TimeStep *tStep) override;
171 void LS_PCS_computeVOFFractions(FloatArray &answer, FloatArray &fi) override;
172
173 int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override;
174
175#ifdef __OOFEG
177 int node, TimeStep *tStep) override;
178 // Graphics output
179 void drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep) override;
180 void drawScalar(oofegGraphicContext &gc, TimeStep *tStep) override;
181 //void drawDeformedGeometry(oofegGraphicContext &gc, TimeStep *tStep, UnknownType) override {}
182#endif
183
184 void printOutputAt(FILE *file, TimeStep *tStep) override;
185
186protected:
187 void giveLocalVelocityDofMap(IntArray &map) override;
188 void giveLocalPressureDofMap(IntArray &map) override;
189
190 void computeNMtrx(FloatArray &answer, GaussPoint *gp);
191 void computeGaussPoints() override;
192
193 void computeDeviatoricStrain(FloatArray &answer, GaussPoint *gp, TimeStep *tStep) override;
194 void computeDeviatoricStress(FloatArray &answer, const FloatArray &eps, GaussPoint *gp, TimeStep *tStep) override;
195 void computeTangent(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) override;
196 virtual void initGeometry();
197};
198} // end namespace oofem
199#endif // tr1_2d_supg_h
void resize(Index s)
Definition floatarray.C:94
void zero()
Zeroes all coefficients of receiver.
Definition floatarray.C:683
void resize(Index rows, Index cols)
Definition floatmatrix.C:79
void zero()
Zeroes all coefficient of receiver.
FloatArray normal
Interface segment normal.
Definition leplic.h:67
double p
Line constant of line segment representing interface.
Definition leplic.h:65
SUPGElement(int n, Domain *aDomain)
Definition supgelement.C:61
SpatialLocalizerInterface(Element *element)
FEInterpolation * giveInterpolation() const override
Definition tr1_2d_supg.C:98
static ParamKey IPK_TR1_2D_SUPG_vof
Definition tr1_2d_supg.h:78
void computeNMtrx(FloatArray &answer, GaussPoint *gp)
void computeGaussPoints() override
void saveContext(DataStream &stream, ContextMode mode) override
double LS_PCS_computeF(LevelSetPCS *ls, TimeStep *tStep) override
void computeTangent(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) override
int checkConsistency() override
Used to check consistency and initialize some element geometry data (area,b,c).
void giveDofManDofIDMask(int inode, IntArray &answer) const override
Definition tr1_2d_supg.C:92
double truncateMatVolume(const Polygon &matvolpoly, double &volume) override
Truncates given material polygon to receiver.
int EIPrimaryFieldI_evaluateFieldVectorAt(FloatArray &answer, PrimaryField &pf, const FloatArray &coords, IntArray &dofId, ValueModeType mode, TimeStep *tStep) override
void drawScalar(oofegGraphicContext &gc, TimeStep *tStep) override
void computeLoadVector(FloatArray &answer, BodyLoad *load, CharType type, ValueModeType mode, TimeStep *tStep) override
void computeAccelerationTerm_MB(FloatMatrix &answer, TimeStep *tStep) override
void giveLocalVelocityDofMap(IntArray &map) override
void drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep) override
static FEI2dTrLin interp
Definition tr1_2d_supg.h:71
double LS_PCS_computeS(LevelSetPCS *ls, TimeStep *tStep) override
double computeVolumeAround(GaussPoint *gp) override
void initializeFrom(InputRecord &ir, int priority) override
void computeLinearAdvectionTerm_MC(FloatMatrix &answer, TimeStep *tStep) override
void computeAccelerationTerm_MC(FloatMatrix &answer, TimeStep *tStep) override
void computeDiffusionTerm_MC(FloatArray &answer, TimeStep *tStep) override
void LS_PCS_computeVOFFractions(FloatArray &answer, FloatArray &fi) override
void computePressureTerm_MB(FloatMatrix &answer, TimeStep *tStep) override
void computeDiffusionTerm_MB(FloatArray &answer, TimeStep *tStep) override
void computeLSICStabilizationTerm_MB(FloatMatrix &answer, TimeStep *tStep) override
void formMaterialVolumePoly(Polygon &matvolpoly, LEPlic *matInterface, const FloatArray &normal, const double p, bool updFlag) override
Assembles the true element material polygon (takes receiver vof into accout).
TR1_2D_SUPG(int n, Domain *d)
Definition tr1_2d_supg.C:79
SPRPatchType SPRNodalRecoveryMI_givePatchType() override
void computeDeviatoricStrain(FloatArray &answer, GaussPoint *gp, TimeStep *tStep) override
void computeAdvectionDerivativeTerm_MB(FloatMatrix &answer, TimeStep *tStep) override
void SPRNodalRecoveryMI_giveDofMansDeterminedByPatch(IntArray &answer, int pap) override
static ParamKey IPK_TR1_2D_SUPG_pvof
Definition tr1_2d_supg.h:79
int giveInternalStateAtNode(FloatArray &answer, InternalStateType type, InternalStateMode mode, int node, TimeStep *tStep) override
void computeOutFlowBCTerm_MB(FloatMatrix &answer, int side, TimeStep *tStep) override
const char * giveClassName() const override
void giveLocalPressureDofMap(IntArray &map) override
void computeAdvectionTerm_MC(FloatArray &answer, TimeStep *tStep) override
void computePressureTerm_MC(FloatMatrix &answer, TimeStep *tStep) override
void SPRNodalRecoveryMI_giveSPRAssemblyPoints(IntArray &pap) override
void updateYourself(TimeStep *tStep) override
virtual void initGeometry()
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
MaterialMode giveMaterialMode() override
void computeDiffusionDerivativeTerm_MC(FloatMatrix &answer, TimeStep *tStep) override
Definition tr1_2d_supg.h:98
static ParamKey IPK_TR1_2D_SUPG_mat1
Definition tr1_2d_supg.h:81
double computeCriticalTimeStep(TimeStep *tStep) override
Computes the critical time increment.
void computeAdvectionDerivativeTerm_MC(FloatMatrix &answer, TimeStep *tStep) override
Element_Geometry_Type giveGeometryType() const override
const char * giveInputRecordName() const override
int SPRNodalRecoveryMI_giveNumberOfIP() override
void printOutputAt(FILE *file, TimeStep *tStep) override
double computeLEPLICVolumeFraction(const FloatArray &n, const double p, LEPlic *matInterface, bool updFlag) override
Computes corresponding volume fraction to given interface position.
double computeCriticalLEPlicTimeStep(TimeStep *tStep) override
Computes critical time step.
void computePenetrationWithResistanceBCTerm_MB(FloatMatrix &answer, Load *load, int side, TimeStep *tStep) override
void formMyVolumePoly(Polygon &myPoly, LEPlic *mat_interface, bool updFlag) override
Assembles receiver volume.
void computeHomogenizedReinforceTerm_MB(FloatMatrix &answer, Load *load, TimeStep *tStep) override
void giveInputRecord(DynamicInputRecord &input) override
void updateStabilizationCoeffs(TimeStep *tStep) override
void computeBCRhsTerm_MB(FloatArray &answer, TimeStep *tStep) override
void restoreContext(DataStream &stream, ContextMode mode) override
Interface * giveInterface(InterfaceType) override
void computeSlipWithFrictionBCTerm_MB(FloatMatrix &answer, Load *load, int side, TimeStep *tStep) override
void computeBCRhsTerm_MC(FloatArray &answer, TimeStep *tStep) override
void computeAdvectionTerm_MB(FloatArray &answer, TimeStep *tStep) override
void LS_PCS_computedN(FloatMatrix &answer) override
double LS_PCS_computeVolume() override
Returns receiver's volume.
int computeNumberOfDofs() override
Definition tr1_2d_supg.C:86
Element * giveElement() override
Return number of receiver's element.
void computeDiffusionDerivativeTerm_MB(FloatMatrix &answer, MatResponseMode mode, TimeStep *tStep) override
void formVolumeInterfacePoly(Polygon &matvolpoly, LEPlic *matInterface, const FloatArray &normal, const double p, bool updFlag) override
Assembles receiver material polygon based solely on given interface line.
void computeDeviatoricStress(FloatArray &answer, const FloatArray &eps, GaussPoint *gp, TimeStep *tStep) override
void giveElementCenter(LEPlic *mat_interface, FloatArray &center, bool updFlag) override
Computes the receiver center (in updated Lagrangian configuration).
static ParamKey IPK_TR1_2D_SUPG_mat0
Definition tr1_2d_supg.h:80
void NodalAveragingRecoveryMI_computeNodalValue(FloatArray &answer, int node, InternalStateType type, TimeStep *tStep) override
double computeMyVolume(LEPlic *matInterface, bool updFlag) override
Computes the volume of receiver.
void computeHomogenizedReinforceTerm_MC(FloatMatrix &answer, Load *load, TimeStep *tStep) override
ZZNodalRecoveryModelInterface(Element *element)
Constructor.
long ContextMode
Definition contextmode.h:43
InternalStateMode
Determines the mode of internal variable.
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
#define _IFT_TR1_2D_SUPG_Name
Definition tr1_2d_supg.h:49

This page is part of the OOFEM-3.0 documentation. Copyright Copyright (C) 1994-2025 Borek Patzak Bořek Patzák
Project e-mail: oofem@fsv.cvut.cz
Generated at for OOFEM by doxygen 1.15.0 written by Dimitri van Heesch, © 1997-2011