OOFEM 3.0
Loading...
Searching...
No Matches
enrichmentfunction.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 enrichmentfunction_h
36#define enrichmentfunction_h
37
38#include "intarray.h"
39#include "femcmpnn.h"
40
41#define _IFT_DiscontinuousFunction_Name "discontinuousfunction"
42#define _IFT_HeavisideFunction_Name "heavisidefunction"
43#define _IFT_RampFunction_Name "rampfunction"
44
45namespace oofem {
46class EnrichmentItem;
47class EnrichmentDomain;
48class BasicGeometry;
49class GaussPoint;
50
61{
62protected:
64
65public:
71 EnrichmentFunction(int n, Domain *aDomain) : FEMComponent(n, aDomain) { }
73 virtual ~EnrichmentFunction() { }
74
75 // New interface
76 virtual void evaluateEnrFuncAt(double &oEnrFunc, const FloatArray &iPos, const double &iLevelSet) const = 0;
77 virtual void evaluateEnrFuncDerivAt(FloatArray &oEnrFuncDeriv, const FloatArray &iPos, const double &iLevelSet, const FloatArray &iGradLevelSet) const = 0;
78
84 virtual void giveJump(std :: vector< double > &oJumps) const = 0;
85
86 void initializeFrom(InputRecord &ir) override;
87 void giveInputRecord(DynamicInputRecord &input) override;
88 const char *giveClassName() const override { return "EnrichmentFunction"; }
89 int giveNumberOfDofs() const { return numberOfDofs; }
90
91};
92
95{
96public:
97 DiscontinuousFunction(int n, Domain *aDomain) : EnrichmentFunction(n, aDomain) {
98 this->numberOfDofs = 1;
99 }
100
101 void evaluateEnrFuncAt(double &oEnrFunc, const FloatArray &iPos, const double &iLevelSet) const override;
102 void evaluateEnrFuncDerivAt(FloatArray &oEnrFuncDeriv, const FloatArray &iPos, const double &iLevelSet, const FloatArray &iGradLevelSet) const override;
103
104 void giveJump(std :: vector< double > &oJumps) const override {
105 oJumps.clear();
106 oJumps.push_back(2.0);
107 }
108
109 const char *giveClassName() const override { return "DiscontinuousFunction"; }
110 const char *giveInputRecordName() const override { return _IFT_DiscontinuousFunction_Name; }
111};
112
119{
120public:
121 HeavisideFunction(int n, Domain *aDomain) : EnrichmentFunction(n, aDomain) {
122 this->numberOfDofs = 1;
123 }
124
125 void evaluateEnrFuncAt(double &oEnrFunc, const FloatArray &iPos, const double &iLevelSet) const override;
126 void evaluateEnrFuncDerivAt(FloatArray &oEnrFuncDeriv, const FloatArray &iPos, const double &iLevelSet, const FloatArray &iGradLevelSet) const override;
127
128 void giveJump(std :: vector< double > &oJumps) const override {
129 oJumps.clear();
130 oJumps.push_back(1.0);
131 }
132
133 const char *giveClassName() const override { return "HeavisideFunction"; }
134 const char *giveInputRecordName() const override { return _IFT_HeavisideFunction_Name; }
135};
136
139{
140public:
142
143 void evaluateEnrFuncAt(std :: vector< double > &oEnrFunc, const double &iR, const double &iTheta) const;
144 void evaluateEnrFuncDerivAt(std :: vector< FloatArray > &oEnrFuncDeriv, const double &iR, const double &iTheta) const;
145
146 void giveJump(std :: vector< double > &oJumps) const;
147 void giveJump(std :: vector< double > &oJumps, const double &iRadius) const;
148
149 std :: string errorInfo(const char *func) const { return std :: string( giveClassName() ) + func; }
150 const char *giveClassName() const { return "LinElBranchFunction"; }
151};
152
155{
156protected:
157 double mExponent;
158
159public:
161
162 void evaluateEnrFuncAt(std :: vector< double > &oEnrFunc, const double &iR, const double &iTheta) const;
163 void evaluateEnrFuncDerivAt(std :: vector< FloatArray > &oEnrFuncDeriv, const double &iR, const double &iTheta) const;
164
165 void giveJump(std :: vector< double > &oJumps) const;
166 void giveJump(std :: vector< double > &oJumps, const double &iRadius) const;
167
168 std :: string errorInfo(const char *func) const { return std :: string( giveClassName() ) + func; }
169 const char *giveClassName() const { return "CohesiveBranchFunction"; }
170};
171
174{
175public:
176
177 RampFunction(int n, Domain *aDomain) : EnrichmentFunction(n, aDomain) {
178 this->numberOfDofs = 1;
179 }
180
181 void evaluateEnrFuncAt(double &oEnrFunc, const FloatArray &iPos, const double &iLevelSet) const override;
182 void evaluateEnrFuncDerivAt(FloatArray &oEnrFuncDeriv, const FloatArray &iPos, const double &iLevelSet, const FloatArray &iGradLevelSet) const override;
183
184 void giveJump(std :: vector< double > &oJumps) const override {
185 oJumps.clear();
186 oJumps.push_back(0.0);
187 }
188
189 const char *giveClassName() const override { return "RampFunction"; }
190 const char *giveInputRecordName() const override { return _IFT_RampFunction_Name; }
191};
192} // end namespace oofem
193#endif // enrichmentfunction_h
std::string errorInfo(const char *func) const
DiscontinuousFunction(int n, Domain *aDomain)
const char * giveInputRecordName() const override
const char * giveClassName() const override
void giveJump(std ::vector< double > &oJumps) const override
void giveInputRecord(DynamicInputRecord &input) override
void initializeFrom(InputRecord &ir) override
const char * giveClassName() const override
virtual void evaluateEnrFuncDerivAt(FloatArray &oEnrFuncDeriv, const FloatArray &iPos, const double &iLevelSet, const FloatArray &iGradLevelSet) const =0
virtual void evaluateEnrFuncAt(double &oEnrFunc, const FloatArray &iPos, const double &iLevelSet) const =0
virtual void giveJump(std ::vector< double > &oJumps) const =0
virtual ~EnrichmentFunction()
Destructor.
EnrichmentFunction(int n, Domain *aDomain)
FEMComponent(int n, Domain *d)
Definition femcmpnn.h:88
void giveJump(std ::vector< double > &oJumps) const override
const char * giveInputRecordName() const override
HeavisideFunction(int n, Domain *aDomain)
const char * giveClassName() const override
std::string errorInfo(const char *func) const
const char * giveClassName() const
RampFunction(int n, Domain *aDomain)
void giveJump(std ::vector< double > &oJumps) const override
const char * giveInputRecordName() const override
const char * giveClassName() const override
#define _IFT_DiscontinuousFunction_Name
#define _IFT_RampFunction_Name
#define _IFT_HeavisideFunction_Name
#define OOFEM_EXPORT
Definition oofemcfg.h:7

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