OOFEM 3.0
Loading...
Searching...
No Matches
huertaerrorestimator.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 huertaerrorestimator_h
36#define huertaerrorestimator_h
37
38#include "sm/refinedelement.h"
39#include "sm/refinedmesh.h"
40#include "errorestimator.h"
41#include "interface.h"
42#include "floatarray.h"
43#include "statecountertype.h"
44#include "remeshingcrit.h"
45
46#include <vector>
47
49
50#define _IFT_HuertaErrorEstimator_Name "huerta"
51#define _IFT_HuertaErrorEstimator_normtype "normtype"
52#define _IFT_HuertaErrorEstimator_refinelevel "refinelevel"
53#define _IFT_HuertaErrorEstimator_requirederror "requirederror"
54#define _IFT_HuertaErrorEstimator_skipsteps "skipsteps"
55#define _IFT_HuertaErrorEstimator_initialskipsteps "initialskipsteps"
56#define _IFT_HuertaErrorEstimator_werror "werror"
57#define _IFT_HuertaErrorEstimator_perfectCSect "perCSect"
58#define _IFT_HuertaErrorEstimator_impCSect "impCSect"
59#define _IFT_HuertaErrorEstimator_impPos "imppos"
60#define _IFT_HuertaErrorEstimator_exact "exact"
62
64
65#define _IFT_HuertaRemeshingCriteria_requirederror "requirederror"
66#define _IFT_HuertaRemeshingCriteria_minelemsize "minelemsize"
67#define _IFT_HuertaRemeshingCriteria_noremesh "noremesh"
68#define _IFT_HuertaRemeshingCriteria_werror "werror"
69#define _IFT_HuertaRemeshingCriteria_refinecoeff "refinecoeff"
71
73
74#define _IFT_HuertaErrorEstimatorInterface_coords "coords"
76
77namespace oofem {
78class Element;
79class GaussPoint;
80
96{
97public:
102
103protected:
123 std :: vector< RefinedElement >refinedElementList;
131 bool wError;
132
133 double lastError;
135
136public:
140 {
141 eeType = EET_HEE;
142 stateCounter = 0;
144 refineLevel = 1;
146 wError = false;
147 lastError = -1.0;
149 }
150
153
157 int giveRefinementLevel() { return this->refineLevel; }
158
159 double giveElementError(EE_ErrorType type, Element *elem, TimeStep *tStep) override;
160
161 double giveValue(EE_ValueType type, TimeStep *tStep) override;
162
163 int estimateError(EE_ErrorMode err_mode, TimeStep *tStep) override;
164
166
167 void initializeFrom(InputRecord &ir) override;
168
169 const char *giveInputRecordName() const override { return nullptr; }
170 const char *giveClassName() const override { return "HuertaErrorEstimator"; }
171
173
174 void saveContext(DataStream &stream, ContextMode mode) override;
175 void restoreContext(DataStream &stream, ContextMode mode) override;
176
177private:
181 void buildRefinedMesh();
182
190 void solveRefinedElementProblem(int elemId, IntArray &localNodeIdArray, IntArray &globalNodeIdArray,
191 TimeStep *tStep);
199 void solveRefinedPatchProblem(int nodeId, IntArray &localNodeIdArray,
200 IntArray &globalNodeIdArray, TimeStep *tStep);
207 void solveRefinedWholeProblem(IntArray &localNodeIdArray, IntArray &globalNodeIdArray, TimeStep *tStep);
216 void extractVectorFrom(Element *element, FloatArray &vector, FloatArray &answer, int dofs, TimeStep *tStep);
217
218 void setupRefinedProblemProlog(const char *problemName, int problemId, IntArray &localNodeIdArray,
219 int nodes, int elems, int csects, int mats, int loads, int funcs,
220 IntArray &controlNode, IntArray &controlDof, TimeStep *tStep);
221 void setupRefinedProblemEpilog1(int csects, int mats, int loads, int nlbarriers);
222 void setupRefinedProblemEpilog2(int tfuncs);
223};
224
225
231{
232public:
234 enum SetupMode { CountMode = 0, NodeMode = 1, ElemMode = 2, BCMode = 3 };
235
236public:
239
240 virtual void HuertaErrorEstimatorI_setupRefinedElementProblem(RefinedElement *refinedElement, int level, int nodeId,
241 IntArray &localNodeIdArray, IntArray &globalNodeIdArray,
242 HuertaErrorEstimatorInterface :: SetupMode mode, TimeStep *tStep,
243 int &localNodeId, int &localElemId, int &localBcId,
244 IntArray &controlNode, IntArray &controlDof,
245 HuertaErrorEstimator :: AnalysisMode aMode) = 0;
246
248
249protected:
250 void setupRefinedElementProblem1D(Element *element, RefinedElement *refinedElement,
251 int level, int nodeId, IntArray &localNodeIdArray, IntArray &globalNodeIdArray,
252 HuertaErrorEstimatorInterface :: SetupMode mode, TimeStep *tStep, int nodes,
253 FloatArray *corner, FloatArray &midNode,
254 int &localNodeId, int &localElemId, int &localBcId,
255 IntArray &controlNode, IntArray &controlDof,
256 HuertaErrorEstimator :: AnalysisMode aMode, const char *edgetype);
257
258 void setupRefinedElementProblem2D(Element *element, RefinedElement *refinedElement,
259 int level, int nodeId, IntArray &localNodeIdArray, IntArray &globalNodeIdArray,
260 HuertaErrorEstimatorInterface :: SetupMode mode, TimeStep *tStep, int nodes,
261 FloatArray *corner, FloatArray *midSide, FloatArray &midNode,
262 int &localNodeId, int &localElemId, int &localBcId,
263 IntArray &controlNode, IntArray &controlDof,
264 HuertaErrorEstimator :: AnalysisMode aMode, const char *quadtype);
265
266 void setupRefinedElementProblem3D(Element *element, RefinedElement *refinedElement,
267 int level, int nodeId, IntArray &localNodeIdArray, IntArray &globalNodeIdArray,
268 HuertaErrorEstimatorInterface :: SetupMode mode, TimeStep *tStep, int nodes,
269 FloatArray *corner, FloatArray *midSide, FloatArray *midFace, FloatArray &midNode,
270 int &localNodeId, int &localElemId, int &localBcId,
271 int hexaSideNode [ 1 ] [ 3 ], int hexaFaceNode [ 1 ] [ 3 ],
272 IntArray &controlNode, IntArray &controlDof,
273 HuertaErrorEstimator :: AnalysisMode aMode, const char *hexatype);
274};
275
276
286{
287public:
290
291protected:
309 bool wError;
310
311public:
316
317 double giveRequiredDofManDensity(int num, TimeStep *tStep, int relative = 0) override;
318 double giveDofManDensity(int num) override;
320 int estimateMeshDensities(TimeStep *tStep) override;
321 void initializeFrom(InputRecord &ir) override;
322
323 const char *giveInputRecordName() const override { return nullptr; }
324 const char *giveClassName() const override { return "HuertaErrorEstimator"; }
325};
326
327} // end namespace oofem
328#endif // huertaerrorestimator_h
ErrorEstimatorType eeType
ErrorEstimator(int n, Domain *d)
Constructor.
virtual void HuertaErrorEstimatorI_computeNmatrixAt(GaussPoint *gp, FloatMatrix &answer)=0
void setupRefinedElementProblem1D(Element *element, RefinedElement *refinedElement, int level, int nodeId, IntArray &localNodeIdArray, IntArray &globalNodeIdArray, HuertaErrorEstimatorInterface ::SetupMode mode, TimeStep *tStep, int nodes, FloatArray *corner, FloatArray &midNode, int &localNodeId, int &localElemId, int &localBcId, IntArray &controlNode, IntArray &controlDof, HuertaErrorEstimator ::AnalysisMode aMode, const char *edgetype)
void setupRefinedElementProblem3D(Element *element, RefinedElement *refinedElement, int level, int nodeId, IntArray &localNodeIdArray, IntArray &globalNodeIdArray, HuertaErrorEstimatorInterface ::SetupMode mode, TimeStep *tStep, int nodes, FloatArray *corner, FloatArray *midSide, FloatArray *midFace, FloatArray &midNode, int &localNodeId, int &localElemId, int &localBcId, int hexaSideNode[1][3], int hexaFaceNode[1][3], IntArray &controlNode, IntArray &controlDof, HuertaErrorEstimator ::AnalysisMode aMode, const char *hexatype)
void setupRefinedElementProblem2D(Element *element, RefinedElement *refinedElement, int level, int nodeId, IntArray &localNodeIdArray, IntArray &globalNodeIdArray, HuertaErrorEstimatorInterface ::SetupMode mode, TimeStep *tStep, int nodes, FloatArray *corner, FloatArray *midSide, FloatArray &midNode, int &localNodeId, int &localElemId, int &localBcId, IntArray &controlNode, IntArray &controlDof, HuertaErrorEstimator ::AnalysisMode aMode, const char *quadtype)
virtual void HuertaErrorEstimatorI_setupRefinedElementProblem(RefinedElement *refinedElement, int level, int nodeId, IntArray &localNodeIdArray, IntArray &globalNodeIdArray, HuertaErrorEstimatorInterface ::SetupMode mode, TimeStep *tStep, int &localNodeId, int &localElemId, int &localBcId, IntArray &controlNode, IntArray &controlDof, HuertaErrorEstimator ::AnalysisMode aMode)=0
void setupRefinedProblemProlog(const char *problemName, int problemId, IntArray &localNodeIdArray, int nodes, int elems, int csects, int mats, int loads, int funcs, IntArray &controlNode, IntArray &controlDof, TimeStep *tStep)
bool wError
Weighted error flag.
std ::vector< RefinedElement > refinedElementList
Fine mesh.
void extractVectorFrom(Element *element, FloatArray &vector, FloatArray &answer, int dofs, TimeStep *tStep)
AnalysisMode mode
Linear analysis flag.
void solveRefinedElementProblem(int elemId, IntArray &localNodeIdArray, IntArray &globalNodeIdArray, TimeStep *tStep)
const char * giveInputRecordName() const override
double requiredError
Required error to obtain.
void solveRefinedPatchProblem(int nodeId, IntArray &localNodeIdArray, IntArray &globalNodeIdArray, TimeStep *tStep)
double giveValue(EE_ValueType type, TimeStep *tStep) override
void setupRefinedProblemEpilog1(int csects, int mats, int loads, int nlbarriers)
void restoreContext(DataStream &stream, ContextMode mode) override
RefinedMesh refinedMesh
Mesh refinement.
StateCounterType stateCounter
Actual state counter.
virtual ~HuertaErrorEstimator()
Destructor.
void saveContext(DataStream &stream, ContextMode mode) override
HuertaErrorEstimator(int n, Domain *d)
Constructor.
void initializeFrom(InputRecord &ir) override
double globalUNorm
Global norm of primary unknown.
double globalWENorm
Global weighted error norm.
double globalENorm
Global error norm.
FloatArray eNorms
Cache storing element norms.
const char * giveClassName() const override
double giveElementError(EE_ErrorType type, Element *elem, TimeStep *tStep) override
int estimateError(EE_ErrorMode err_mode, TimeStep *tStep) override
RemeshingCriteria * giveRemeshingCrit() override
NormType normType
Type of norm used.
double globalErrorEstimate
Global error estimate (relative).
FloatArray primaryUnknownError
Primary unknown nodal error.
void solveRefinedWholeProblem(IntArray &localNodeIdArray, IntArray &globalNodeIdArray, TimeStep *tStep)
const char * giveInputRecordName() const override
FloatArray nodalDensities
Array of nodal mesh densities.
void initializeFrom(InputRecord &ir) override
StateCounterType stateCounter
Actual values (densities) state counter.
HuertaRemeshingCriteriaModeType
Mode of receiver, allows to use it in more general situations.
double giveRequiredDofManDensity(int num, TimeStep *tStep, int relative=0) override
RemeshingStrategy giveRemeshingStrategy(TimeStep *tStep) override
double requiredError
Required error to obtain.
virtual ~HuertaRemeshingCriteria()
Destructor.
HuertaRemeshingCriteria(int n, ErrorEstimator *e)
Constructor.
double refineCoeff
Refinement coefficient.
int estimateMeshDensities(TimeStep *tStep) override
double giveDofManDensity(int num) override
double minElemSize
Minimum element size alloved.
const char * giveClassName() const override
HuertaRemeshingCriteriaModeType mode
Mode of receiver.
RemeshingStrategy remeshingStrategy
Remeshing strategy proposed.
Interface()
Constructor.
Definition interface.h:86
RemeshingCriteria(int n, ErrorEstimator *e)
Constructor.
long ContextMode
Definition contextmode.h:43
long StateCounterType
StateCounterType type used to indicate solution state.
RemeshingStrategy
Type representing the remeshing strategy.
@ EET_HEE
Huerta EE.

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