IFEM 90A354
Integrand.h
Go to the documentation of this file.
1// $Id$
2//==============================================================================
12//==============================================================================
13
14#ifndef _INTEGRAND_H
15#define _INTEGRAND_H
16
17#include "SIMenums.h"
18#include <vector>
19#include <string>
20
21struct TimeDomain;
22class LocalIntegral;
23class FiniteElement;
24class MxFiniteElement;
25class Vec3;
26
27
44{
45protected:
48
49public:
51 virtual ~Integrand() {}
52
58 virtual void setNeumannOrder(char) {}
59
60
61 // Element-level initialization interface
62 // ======================================
63
68 virtual LocalIntegral* getLocalIntegral(size_t nen, size_t iEl,
69 bool neumann = false) const = 0;
79 virtual LocalIntegral* getLocalIntegral(const std::vector<size_t>& nen,
80 size_t iEl,
81 bool neumann = false) const
82 {
83 return this->getLocalIntegral(nen.front(),iEl,neumann);
84 }
85
99 virtual bool initElement(const std::vector<int>& MNPC,
100 const FiniteElement& fe,
101 const Vec3& X0, size_t nPt,
102 LocalIntegral& elmInt) = 0;
114 virtual bool initElement(const std::vector<int>& MNPC,
115 LocalIntegral& elmInt) = 0;
121 virtual bool initElement(const std::vector<int>& MNPC,
122 const std::vector<size_t>& elem_sizes,
123 const std::vector<size_t>& basis_sizes,
124 LocalIntegral& elmInt) = 0;
131 virtual bool initElement(const std::vector<int>& MNPC,
132 const MxFiniteElement& fe,
133 const std::vector<size_t>& elem_sizes,
134 const std::vector<size_t>& basis_sizes,
135 LocalIntegral& elmInt) = 0;
136
140 virtual bool initElementBou(const std::vector<int>& MNPC,
141 LocalIntegral& elmInt) = 0;
147 virtual bool initElementBou(const std::vector<int>& MNPC,
148 const std::vector<size_t>& elem_sizes,
149 const std::vector<size_t>& basis_sizes,
150 LocalIntegral& elmInt) = 0;
151
152
153 // Integrand evaluation interface
154 // ==============================
155
174
176 virtual SIM::SolutionMode getMode(bool = false) const = 0;
178 virtual int getIntegrandType() const { return STANDARD; }
180 virtual int getReducedIntegration(int) const { return 0; }
182 virtual int getBouIntegrationPoints(int nGP) const { return nGP; }
183
192 virtual bool reducedInt(LocalIntegral& elmInt,
193 const FiniteElement& fe, const Vec3& X) const
194 {
195 return false;
196 }
197
206 virtual bool evalInt(LocalIntegral& elmInt, const FiniteElement& fe,
207 const TimeDomain& time, const Vec3& X) const
208 {
209 return this->evalInt(elmInt,fe,X);
210 }
211
221 virtual bool evalIntMx(LocalIntegral& elmInt, const MxFiniteElement& fe,
222 const TimeDomain& time, const Vec3& X) const
223 {
224 return this->evalIntMx(elmInt,fe,X);
225 }
226
236 virtual bool evalInt(LocalIntegral& elmInt, const FiniteElement& fe,
237 const TimeDomain& time,
238 const Vec3& X, const Vec3& normal) const
239 {
240 return this->evalInt(elmInt,fe,X,normal);
241 }
242
252 virtual bool evalIntMx(LocalIntegral& elmInt, const MxFiniteElement& fe,
253 const TimeDomain& time,
254 const Vec3& X, const Vec3& normal) const
255 {
256 return this->evalIntMx(elmInt,fe,X,normal);
257 }
258
266 virtual bool evalPoint(LocalIntegral& elmInt, const FiniteElement& fe,
267 const Vec3& pval) { return false; }
268
285 virtual bool finalizeElement(LocalIntegral& elmInt, const FiniteElement& fe,
286 const TimeDomain& time, size_t iGP = 0)
287 {
288 return this->finalizeElement(elmInt,time,iGP);
289 }
290
302 virtual bool finalizeElementBou(LocalIntegral& elmInt,
303 const FiniteElement& fe,
304 const TimeDomain& time)
305 {
306 return true;
307 }
308
318 virtual bool evalBou(LocalIntegral& elmInt, const FiniteElement& fe,
319 const TimeDomain& time,
320 const Vec3& X, const Vec3& normal) const
321 {
322 return this->evalBou(elmInt,fe,X,normal);
323 }
324
335 virtual bool evalBouMx(LocalIntegral& elmInt, const MxFiniteElement& fe,
336 const TimeDomain& time,
337 const Vec3& X, const Vec3& normal) const
338 {
339 return this->evalBouMx(elmInt,fe,X,normal);
340 }
341
342protected:
344 virtual bool evalInt(LocalIntegral&, const FiniteElement& fe,
345 const Vec3&) const { return false; }
347 virtual bool evalIntMx(LocalIntegral&, const MxFiniteElement& fe,
348 const Vec3&) const { return false; }
350 virtual bool evalInt(LocalIntegral&, const FiniteElement& fe,
351 const Vec3&, const Vec3&) const { return false; }
353 virtual bool evalIntMx(LocalIntegral&, const MxFiniteElement& fe,
354 const Vec3&, const Vec3&) const { return false; }
355
357 virtual bool evalBou(LocalIntegral&, const FiniteElement&,
358 const Vec3&, const Vec3&) const { return false; }
361 const Vec3&, const Vec3&) const { return false; }
362
368 virtual bool finalizeElement(LocalIntegral& elmInt, const TimeDomain&, size_t)
369 {
370 return this->finalizeElement(elmInt);
371 }
375 virtual bool finalizeElement(LocalIntegral&) { return true; }
376
377public:
379 virtual void setParam(const std::string&, double) {}
381 virtual void setParam(const std::string&, const Vec3&) {}
382};
383
384#endif
Various enums for simulation scope.
Class representing a finite element.
Definition FiniteElement.h:29
Abstract base class representing a system level integrated quantity.
Definition Integrand.h:44
virtual bool initElement(const std::vector< int > &MNPC, const MxFiniteElement &fe, const std::vector< size_t > &elem_sizes, const std::vector< size_t > &basis_sizes, LocalIntegral &elmInt)=0
Initializes current element for numerical integration (mixed).
virtual bool evalIntMx(LocalIntegral &elmInt, const MxFiniteElement &fe, const TimeDomain &time, const Vec3 &X, const Vec3 &normal) const
Evaluates the integrand at an element interface point.
Definition Integrand.h:252
virtual bool finalizeElement(LocalIntegral &)
Finalizes the element quantities after the numerical integration.
Definition Integrand.h:375
virtual LocalIntegral * getLocalIntegral(size_t nen, size_t iEl, bool neumann=false) const =0
Returns a local integral contribution object for the given element.
virtual bool evalBou(LocalIntegral &elmInt, const FiniteElement &fe, const TimeDomain &time, const Vec3 &X, const Vec3 &normal) const
Evaluates the integrand at a boundary point.
Definition Integrand.h:318
virtual bool evalInt(LocalIntegral &elmInt, const FiniteElement &fe, const TimeDomain &time, const Vec3 &X) const
Evaluates the integrand at an interior point.
Definition Integrand.h:206
virtual bool evalInt(LocalIntegral &, const FiniteElement &fe, const Vec3 &, const Vec3 &) const
Evaluates the integrand at interface points, stationary problems.
Definition Integrand.h:350
virtual bool evalInt(LocalIntegral &, const FiniteElement &fe, const Vec3 &) const
Evaluates the integrand at interior points for stationary problems.
Definition Integrand.h:344
virtual void setNeumannOrder(char)
Defines the Neumann order that is the subject of integration.
Definition Integrand.h:58
virtual bool finalizeElement(LocalIntegral &elmInt, const TimeDomain &, size_t)
Finalizes the element quantities after the numerical integration.
Definition Integrand.h:368
virtual bool finalizeElementBou(LocalIntegral &elmInt, const FiniteElement &fe, const TimeDomain &time)
Finalizes the element quantities after boundary integration.
Definition Integrand.h:302
virtual bool initElementBou(const std::vector< int > &MNPC, const std::vector< size_t > &elem_sizes, const std::vector< size_t > &basis_sizes, LocalIntegral &elmInt)=0
Initializes current element for boundary integration (mixed).
virtual bool finalizeElement(LocalIntegral &elmInt, const FiniteElement &fe, const TimeDomain &time, size_t iGP=0)
Finalizes the element quantities after the numerical integration.
Definition Integrand.h:285
virtual bool reducedInt(LocalIntegral &elmInt, const FiniteElement &fe, const Vec3 &X) const
Evaluates reduced integration terms at an interior point.
Definition Integrand.h:192
virtual bool evalIntMx(LocalIntegral &elmInt, const MxFiniteElement &fe, const TimeDomain &time, const Vec3 &X) const
Evaluates the integrand at an interior point.
Definition Integrand.h:221
virtual int getReducedIntegration(int) const
Returns the number of reduced-order integration points.
Definition Integrand.h:180
virtual bool initElementBou(const std::vector< int > &MNPC, LocalIntegral &elmInt)=0
Initializes current element for boundary integration.
virtual SIM::SolutionMode getMode(bool=false) const =0
Returns current solution mode.
virtual LocalIntegral * getLocalIntegral(const std::vector< size_t > &nen, size_t iEl, bool neumann=false) const
Returns a local integral contribution object for the given element.
Definition Integrand.h:79
virtual void setParam(const std::string &, double)
Assigns a parameter value to property functions of the integrand.
Definition Integrand.h:379
virtual void setParam(const std::string &, const Vec3 &)
Assigns parameter values to property functions of the integrand.
Definition Integrand.h:381
virtual bool initElement(const std::vector< int > &MNPC, const FiniteElement &fe, const Vec3 &X0, size_t nPt, LocalIntegral &elmInt)=0
Initializes current element for numerical integration.
virtual bool evalIntMx(LocalIntegral &, const MxFiniteElement &fe, const Vec3 &) const
Evaluates the integrand at interior points for stationary problems.
Definition Integrand.h:347
virtual bool evalIntMx(LocalIntegral &, const MxFiniteElement &fe, const Vec3 &, const Vec3 &) const
Evaluates the integrand at interface points, stationary problems.
Definition Integrand.h:353
virtual bool initElement(const std::vector< int > &MNPC, LocalIntegral &elmInt)=0
Initializes current element for numerical integration.
virtual int getBouIntegrationPoints(int nGP) const
Returns the number of boundary integration points.
Definition Integrand.h:182
Integrand()
The default constructor is protected to allow sub-classes only.
Definition Integrand.h:47
virtual bool evalPoint(LocalIntegral &elmInt, const FiniteElement &fe, const Vec3 &pval)
Evaluates the dirac-delta integrand at a specified point.
Definition Integrand.h:266
virtual bool evalBouMx(LocalIntegral &, const MxFiniteElement &, const Vec3 &, const Vec3 &) const
Evaluates the integrand at boundary points for stationary problems.
Definition Integrand.h:360
virtual bool evalBouMx(LocalIntegral &elmInt, const MxFiniteElement &fe, const TimeDomain &time, const Vec3 &X, const Vec3 &normal) const
Evaluates the integrand at a boundary point.
Definition Integrand.h:335
virtual bool evalBou(LocalIntegral &, const FiniteElement &, const Vec3 &, const Vec3 &) const
Evaluates the integrand at boundary points for stationary problems.
Definition Integrand.h:357
virtual int getIntegrandType() const
Defines which FE quantities are needed by the integrand.
Definition Integrand.h:178
virtual ~Integrand()
Empty destructor.
Definition Integrand.h:51
virtual bool evalInt(LocalIntegral &elmInt, const FiniteElement &fe, const TimeDomain &time, const Vec3 &X, const Vec3 &normal) const
Evaluates the integrand at an element interface point.
Definition Integrand.h:236
Traits
Enum defining the additional terms that an Integrand may require.
Definition Integrand.h:157
@ AVERAGE
Integrand wants basis function averages.
Definition Integrand.h:162
@ G_MATRIX
Integrand wants the G matrix.
Definition Integrand.h:165
@ PIOLA_MAPPING
Integrand wants Piola mapping.
Definition Integrand.h:171
@ THIRD_DERIVATIVES
Integrand wants third derivatives.
Definition Integrand.h:161
@ XO_ELEMENTS
Integrand uses extraordinary elements.
Definition Integrand.h:167
@ STANDARD
Default integrand type (first derivatives only)
Definition Integrand.h:158
@ UPDATED_NODES
Integrand wants updated nodal coordinates.
Definition Integrand.h:170
@ POINT_DEFORMATION
Integrand wants point-wise deformation.
Definition Integrand.h:172
@ ELEMENT_CORNERS
Integrand wants element corner coordinates.
Definition Integrand.h:163
@ NORMAL_DERIVS
Integrand uses p-order normal derivatives.
Definition Integrand.h:169
@ SECOND_DERIVATIVES
Integrand wants second derivatives.
Definition Integrand.h:160
@ ELEMENT_CENTER
Integrand wants element center coordinates.
Definition Integrand.h:164
@ NODAL_ROTATIONS
Integrand wants nodal rotation tensors.
Definition Integrand.h:166
@ INTERFACE_TERMS
Integrand has element interface terms.
Definition Integrand.h:168
@ NO_DERIVATIVES
Integrand don't want any derivatives.
Definition Integrand.h:159
virtual bool initElement(const std::vector< int > &MNPC, const std::vector< size_t > &elem_sizes, const std::vector< size_t > &basis_sizes, LocalIntegral &elmInt)=0
Initializes current element for numerical integration (mixed).
Abstract base class representing an element level integrated quantity.
Definition LocalIntegral.h:25
Class representing a mixed finite element.
Definition FiniteElement.h:115
Simple class for representing a point in 3D space.
Definition Vec3.h:27
SolutionMode
Enum defining the various solution modes that may occur.
Definition SIMenums.h:31
Struct representing the time domain.
Definition TimeDomain.h:23