IFEM 90A354
IntegrandBase.h
Go to the documentation of this file.
1// $Id$
2//==============================================================================
12//==============================================================================
13
14#ifndef _INTEGRAND_BASE_H
15#define _INTEGRAND_BASE_H
16
17#include "Integrand.h"
18#include "ASMenums.h"
19#include "LinAlgenums.h"
20#include "MatVec.h"
21#include <map>
22
23class ASMbase;
24class NormBase;
25class ForceBase;
26class GlobalIntegral;
27class AnaSol;
28class VTF;
29class Field;
30class Fields;
31class VecFunc;
32class TensorFunc;
33class STensorFunc;
34namespace tinyxml2 { class XMLElement; }
35
36
42{
43protected:
45 explicit IntegrandBase(unsigned short int n) : nsd(n), npv(1), myTime(0.0),
46 m_mode(SIM::INIT) {}
47
48public:
50 virtual bool parse(const tinyxml2::XMLElement*) { return false; }
51
53 virtual void printLog() const {}
54
55
56 // Global initialization interface
57 // ===============================
58
60 virtual void setMode(SIM::SolutionMode mode);
62 SIM::SolutionMode getMode(bool = false) const override { return m_mode; }
64 virtual void setIntegrationPrm(unsigned short int, double) {}
66 virtual double getIntegrationPrm(unsigned short int) const { return 0.0; }
69 virtual void initIntegration(size_t, size_t) {}
73 virtual void initIntegration(const TimeDomain&, const Vector&, bool = false){}
75 virtual void initLHSbuffers(size_t) {}
81 virtual void initMatrixBuffers(size_t, size_t ielMax)
82 { this->initLHSbuffers(ielMax); }
91 virtual void initResultPoints(double time, char = 0) { myTime = time; }
93 virtual void initNodeMap(const std::vector<int>&) {}
95 virtual void setSecondaryInt(GlobalIntegral* = nullptr) {}
97 virtual GlobalIntegral& getGlobalInt(GlobalIntegral* gq) const;
101 virtual void initForPatch(const ASMbase*) {}
102
103
104 // Element-level initialization interface
105 // ======================================
106
112 LocalIntegral* getLocalIntegral(size_t nen, size_t iEl,
113 bool neumann) const override;
114
115protected:
120 bool initElement1(const std::vector<int>& MNPC, Vectors& elmVec,
121 size_t nskip = 0) const;
126 bool initElement2(const std::vector<int>& MNPC, Vectors& elmVec,
127 size_t nskip = 0) const;
128
129public:
138 bool initElement(const std::vector<int>& MNPC,
139 LocalIntegral& elmInt) override;
146 bool initElement(const std::vector<int>& MNPC,
147 const FiniteElement& fe,
148 const Vec3& X0, size_t nPt, LocalIntegral& elmInt) override;
154 bool initElement(const std::vector<int>& MNPC,
155 const std::vector<size_t>& elem_sizes,
156 const std::vector<size_t>& basis_sizes,
157 LocalIntegral& elmInt) override;
164 bool initElement(const std::vector<int>& MNPC,
165 const MxFiniteElement& fe,
166 const std::vector<size_t>& elem_sizes,
167 const std::vector<size_t>& basis_sizes,
168 LocalIntegral& elmInt) override;
169
173 bool initElementBou(const std::vector<int>& MNPC,
174 LocalIntegral& elmInt) override;
180 bool initElementBou(const std::vector<int>& MNPC,
181 const std::vector<size_t>& elem_sizes,
182 const std::vector<size_t>& basis_sizes,
183 LocalIntegral& elmInt) override;
184
186 virtual bool hasInteriorTerms() const { return true; }
188 virtual bool hasBoundaryTerms() const { return true; }
189
191 void activateElmGroup(const std::vector<int>& elms = {}) { elmGrp = elms; }
193 bool inActive(int iel) const;
194
195
196 // Secondary solution field evaluation interface
197 // =============================================
198
205 bool evalSol1(Vector& s, const FiniteElement& fe, const Vec3& X,
206 const std::vector<int>& MNPC, size_t nskip = 0) const;
207
213 virtual bool evalSol2(Vector& s, const Vectors& elmVec,
214 const FiniteElement& fe, const Vec3& X) const;
215
221 virtual bool evalSol(Vector& s, const FiniteElement& fe, const Vec3& X,
222 const std::vector<int>& MNPC) const;
223
231 virtual bool evalSol(Vector& s, const MxFiniteElement& fe, const Vec3& X,
232 const std::vector<int>& MNPC,
233 const std::vector<size_t>& elem_sizes,
234 const std::vector<size_t>& basis_sizes) const;
235
240 virtual bool evalSol(Vector& s,
241 const TensorFunc& asol, const Vec3& X) const;
242
247 virtual bool evalSol(Vector& s,
248 const STensorFunc& asol, const Vec3& X) const;
249
254 virtual bool evalSol(Vector& s,
255 const VecFunc& asol, const Vec3& X) const;
256
258 virtual bool getPrincipalDir(Matrix&, size_t, size_t) const { return false; }
259
261 virtual size_t getNo2ndSolPerLine() const { return 999; }
262
264 virtual void primaryScalarFields(Matrix&) {}
265
266
267 // Various service methods
268 // =======================
269
271 virtual int derivativeOrder() const { return 1; }
272
274 virtual bool writeGlvT(VTF*, int, int&, int&) const { return true; }
275
277 virtual bool hasTractionValues() const { return false; }
278
280 virtual bool diverged(size_t = 0) const { return false; }
281
283 virtual NormBase* getNormIntegrand(AnaSol* = nullptr) const
284 { return nullptr; }
286 virtual ForceBase* getForceIntegrand(const Vec3*, AnaSol* = nullptr) const
287 { return nullptr; }
289 virtual ForceBase* getForceIntegrand() const { return nullptr; }
290
292 size_t getNoSpaceDim() const { return nsd; }
294 virtual size_t getNoFields(int = 2) const { return 0; }
296 virtual size_t getNoElmFields() const { return 0; }
298 virtual size_t getNoGLMs() const { return 0; }
299
303 virtual std::string getField1Name(size_t idx, const char* prefix = 0) const;
307 virtual std::string getField2Name(size_t idx, const char* prefix = 0) const;
310 virtual std::string getEFieldName(size_t idx) const;
312 virtual bool suppressOutput(size_t, ASM::ResultClass) const { return false; }
313
315 virtual size_t getNoSolutions(bool = true) const { return primsol.size(); }
316
318 virtual Vector* getExtractionField(size_t = 1) { return nullptr; }
320 Vector& getSolution(size_t n = 0) { return primsol[n]; }
323
325 void resetSolution();
326
328 void printSolution(std::ostream& os, int pindx);
329
331 virtual void setNamedField(const std::string&, Field*);
333 virtual void setNamedFields(const std::string&, Fields*);
334
336 Vector* getNamedVector(const std::string& name) const;
337
346
350 void registerVector(const std::string& name, Vector* vec);
351
353 virtual void getNodalDofTypes(std::vector<char>&) const {}
354
356 double getTimeLevel() const { return myTime; }
357
358private:
359 std::map<std::string,Vector*> myFields;
360
361protected:
362 unsigned short int nsd;
363 unsigned short int npv;
364 double myTime;
366 std::vector<int> elmGrp;
368};
369
370
371using LintegralVec = std::vector<LocalIntegral*>;
372
373
378class NormBase : public Integrand
379{
380protected:
382 explicit NormBase(IntegrandBase& p) : myProblem(p), projBou(false), nrcmp(0),
383 lints(nullptr), finalOp(ASM::SQRT) {}
384
385public:
387 virtual ~NormBase();
388
390 virtual void initIntegration(size_t, size_t) {}
392 void initProjection(size_t nproj);
394 void setLocalIntegrals(LintegralVec* elementNorms) { lints = elementNorms; }
398 virtual void initForPatch(const ASMbase*) {}
399
402 LocalIntegral* getLocalIntegral(size_t, size_t iEl, bool) const override;
403
405 bool initElement(const std::vector<int>& MNPC,
406 LocalIntegral& elmInt) override;
408 bool initElement(const std::vector<int>& MNPC,
409 const FiniteElement& fe, const Vec3& X0, size_t nPt,
410 LocalIntegral& elmInt) override;
412 bool initElement(const std::vector<int>& MNPC,
413 const std::vector<size_t>& elem_sizes,
414 const std::vector<size_t>& basis_sizes,
415 LocalIntegral& elmInt) override;
417 bool initElement(const std::vector<int>& MNPC,
418 const MxFiniteElement&,
419 const std::vector<size_t>& elem_sizes,
420 const std::vector<size_t>& basis_sizes,
421 LocalIntegral& elmInt) override
422 { return this->initElement(MNPC,elem_sizes,basis_sizes,elmInt); }
423
424
426 bool initElementBou(const std::vector<int>& MNPC,
427 LocalIntegral& elmInt) override;
429 bool initElementBou(const std::vector<int>& MNPC,
430 const std::vector<size_t>& elem_sizes,
431 const std::vector<size_t>& basis_sizes,
432 LocalIntegral& elmInt) override;
433
435 virtual bool hasBoundaryTerms() const { return false; }
436
438 void activateElmGroup(const std::vector<int>& elms = {})
439 {
441 }
442
446 void addBoundaryTerms(Vectors& gNorm, double energy) const;
447
451 virtual size_t getNoFields(int group = 0) const;
452
457 virtual std::string getName(size_t i, size_t j, const char* prefix = 0) const;
458
460 virtual bool hasElementContributions(size_t, size_t) const { return true; }
461
463 Vector& getProjection(size_t i);
464
469
471 int getIntegrandType() const override;
473 int getReducedIntegration(int n) const override;
474
479 bool reducedInt(LocalIntegral& elmInt,
480 const FiniteElement& fe, const Vec3& X) const override;
481
483 virtual bool hasExternalProjections() const { return false; }
484
488 virtual void setProjectedFields(Fields* f, size_t idx);
489
493 void setParam(const std::string& name, double value) override
494 {
495 myProblem.setParam(name,value);
496 }
500 void setParam(const std::string& name, const Vec3& value) override
501 {
502 myProblem.setParam(name,value);
503 }
504
506 SIM::SolutionMode getMode(bool) const override { return myProblem.getMode(); }
507
508protected:
510 bool initProjection(const std::vector<int>& MNPC, LocalIntegral& elmInt,
511 size_t nExtraNodes = 0);
512
514 double applyFinalOp(double value) const;
515
517
518 std::vector<Fields*> prjFld;
519
521 bool projBou;
522
523 unsigned short int nrcmp;
526};
527
528
533class ForceBase : public Integrand
534{
535protected:
537 explicit ForceBase(IntegrandBase& p) : myProblem(p), eBuffer(nullptr) {}
538
539public:
541 virtual ~ForceBase();
542
544 void initBuffer(size_t nel);
545
547 void assemble(RealArray& force) const;
548
550 virtual void initIntegration(size_t, size_t) {}
551
554 LocalIntegral* getLocalIntegral(size_t, size_t iEl,
555 bool = false) const override;
556
558 bool initElement(const std::vector<int>&,
559 LocalIntegral&) override { return false; }
560
562 bool initElement(const std::vector<int>&,
563 const FiniteElement&, const Vec3&, size_t,
564 LocalIntegral&) override { return false; }
565
567 bool initElement(const std::vector<int>&,
568 const std::vector<size_t>&,
569 const std::vector<size_t>&,
570 LocalIntegral&) override { return false; }
571
573 bool initElement(const std::vector<int>&,
574 const MxFiniteElement&,
575 const std::vector<size_t>&,
576 const std::vector<size_t>&,
577 LocalIntegral&) override { return false; }
578
580 bool initElementBou(const std::vector<int>& MNPC,
581 LocalIntegral& elmInt) override;
583 bool initElementBou(const std::vector<int>& MNPC,
584 const std::vector<size_t>& elem_sizes,
585 const std::vector<size_t>& basis_sizes,
586 LocalIntegral& elmInt) override;
587
589 virtual size_t getNoComps() const = 0;
590
592 virtual bool hasInteriorTerms() const { return false; }
594 virtual bool hasBoundaryTerms() const { return true; }
595
599 void setParam(const std::string& name, double value) override
600 {
601 myProblem.setParam(name,value);
602 }
606 void setParam(const std::string& name, const Vec3& value) override
607 {
608 myProblem.setParam(name,value);
609 }
610
612 SIM::SolutionMode getMode(bool) const override { return myProblem.getMode(); }
613
614protected:
616 void clearBuffer();
617
620 double* eBuffer;
621};
622
623#endif
Various enums for assembly scope.
std::vector< Real > RealArray
A real-valued array without algebraic operations.
Definition ImmersedBoundaries.h:32
std::vector< LocalIntegral * > LintegralVec
Local integral container.
Definition IntegrandBase.h:371
Abstract interface for classes representing FEM integrands.
Various enums for linear algebra scope.
Global algebraic operations on index 1-based matrices and vectors.
std::vector< Vector > Vectors
An array of real-valued vectors with algebraic operations.
Definition MatVec.h:37
Base class for spline-based finite element (FE) assembly drivers.
Definition ASMbase.h:72
Class for analytical solution fields (primary and secondary solution).
Definition AnaSol.h:32
Interface class for scalar fields.
Definition Field.h:30
Base class for vector fields.
Definition Fields.h:35
Class representing a finite element.
Definition FiniteElement.h:29
Base class representing a system level boundary force quantity.
Definition IntegrandBase.h:534
double * eBuffer
Element force buffer used during integration.
Definition IntegrandBase.h:620
virtual size_t getNoComps() const =0
Returns the number of force components.
LintegralVec eForce
Local integrals used during force integration.
Definition IntegrandBase.h:619
void initBuffer(size_t nel)
Allocates internal element force buffers.
Definition IntegrandBase.C:635
IntegrandBase & myProblem
The problem-specific data.
Definition IntegrandBase.h:618
void clearBuffer()
Clears out internal buffers.
Definition IntegrandBase.C:625
void assemble(RealArray &force) const
Assembles the global forces.
Definition IntegrandBase.C:684
LocalIntegral * getLocalIntegral(size_t, size_t iEl, bool=false) const override
Returns a local integral container for the element iEl.
Definition IntegrandBase.C:654
ForceBase(IntegrandBase &p)
The constructor is protected to allow sub-classes only.
Definition IntegrandBase.h:537
virtual ~ForceBase()
The destructor frees the internally allocated objects.
Definition IntegrandBase.C:619
void setParam(const std::string &name, const Vec3 &value) override
Assigns parameter values to property functions of the integrand.
Definition IntegrandBase.h:606
bool initElement(const std::vector< int > &, const std::vector< size_t > &, const std::vector< size_t > &, LocalIntegral &) override
Dummy implementation (only boundary integration is relevant).
Definition IntegrandBase.h:567
bool initElement(const std::vector< int > &, const MxFiniteElement &, const std::vector< size_t > &, const std::vector< size_t > &, LocalIntegral &) override
Dummy implementation (only boundary integration is relevant).
Definition IntegrandBase.h:573
void setParam(const std::string &name, double value) override
Assigns a parameter value to property functions of the integrand.
Definition IntegrandBase.h:599
bool initElement(const std::vector< int > &, const FiniteElement &, const Vec3 &, size_t, LocalIntegral &) override
Dummy implementation (only boundary integration is relevant).
Definition IntegrandBase.h:562
SIM::SolutionMode getMode(bool) const override
Returns current solution mode.
Definition IntegrandBase.h:612
bool initElement(const std::vector< int > &, LocalIntegral &) override
Dummy implementation (only boundary integration is relevant).
Definition IntegrandBase.h:558
virtual bool hasInteriorTerms() const
Returns whether this integrand has explicit interior contributions.
Definition IntegrandBase.h:592
virtual void initIntegration(size_t, size_t)
Initializes the integrand with the number of integration points.
Definition IntegrandBase.h:550
bool initElementBou(const std::vector< int > &MNPC, LocalIntegral &elmInt) override
Initializes current element for boundary integration.
Definition IntegrandBase.C:664
virtual bool hasBoundaryTerms() const
Returns whether this integrand has explicit boundary contributions.
Definition IntegrandBase.h:594
Abstract base class representing a system level integrated quantity.
Definition GlobalIntegral.h:29
Base class representing a system level integrated quantity.
Definition IntegrandBase.h:42
virtual void setNamedFields(const std::string &, Fields *)
Registers where we can inject a mixed-basis vector field.
Definition IntegrandBase.C:385
IntegrandBase(unsigned short int n)
The constructor is protected to allow sub-classes only.
Definition IntegrandBase.h:45
virtual int derivativeOrder() const
Returns the derivative order of the differential operator.
Definition IntegrandBase.h:271
virtual size_t getNo2ndSolPerLine() const
Returns max number of 2ndary solution components to print per line.
Definition IntegrandBase.h:261
virtual size_t getNoFields(int=2) const
Returns the number of primary/secondary solution field components.
Definition IntegrandBase.h:294
virtual size_t getNoSolutions(bool=true) const
Returns the number of solution vectors.
Definition IntegrandBase.h:315
SIM::SolutionMode m_mode
Current solution mode.
Definition IntegrandBase.h:365
std::vector< int > elmGrp
List of currently active elements.
Definition IntegrandBase.h:366
virtual std::string getField1Name(size_t idx, const char *prefix=0) const
Returns the name of a primary solution field component.
Definition IntegrandBase.C:398
virtual NormBase * getNormIntegrand(AnaSol *=nullptr) const
Returns a pointer to an Integrand for solution norm evaluation.
Definition IntegrandBase.h:283
double myTime
Evaluation time for the secondary solution.
Definition IntegrandBase.h:364
virtual void setMode(SIM::SolutionMode mode)
Defines the solution mode before the element assembly is started.
Definition IntegrandBase.C:35
virtual size_t getNoGLMs() const
Returns the number of global Lagrange multipliers in the model.
Definition IntegrandBase.h:298
virtual size_t getNoElmFields() const
Returns the number of element-wise constant field components.
Definition IntegrandBase.h:296
virtual void setSecondaryInt(GlobalIntegral *=nullptr)
Assigns a secondary integral to be computed (for reaction forces).
Definition IntegrandBase.h:95
bool initElement(const std::vector< int > &MNPC, LocalIntegral &elmInt) override
Initializes current element for numerical integration.
Definition IntegrandBase.C:159
virtual void initLHSbuffers(size_t)
Initializes and toggles the use of left-hand-side matrix buffers.
Definition IntegrandBase.h:75
void resetSolution()
Resets the primary solution vectors.
Definition IntegrandBase.C:334
virtual GlobalIntegral & getGlobalInt(GlobalIntegral *gq) const
Returns the system quantity to be integrated by *this.
Definition IntegrandBase.C:49
virtual bool hasInteriorTerms() const
Returns whether this integrand has explicit interior contributions.
Definition IntegrandBase.h:186
virtual void initResultPoints(double time, char=0)
Initializes the integrand for a new result point loop.
Definition IntegrandBase.h:91
virtual void initIntegration(const TimeDomain &, const Vector &, bool=false)
Initializes the integrand for a new integration loop.
Definition IntegrandBase.h:73
Vectors & getSolutions()
Accesses the primary solution vectors of current patch.
Definition IntegrandBase.h:322
void registerVector(const std::string &name, Vector *vec)
Registers a vector to inject a named field into.
Definition IntegrandBase.C:373
bool inActive(int iel) const
Returns true, if the element iel is deactivated.
Definition IntegrandBase.C:422
virtual Vector * getExtractionField(size_t=1)
Returns the patch-wise extraction function field, if any.
Definition IntegrandBase.h:318
void activateElmGroup(const std::vector< int > &elms={})
Assigns the group of active elements.
Definition IntegrandBase.h:191
virtual bool getPrincipalDir(Matrix &, size_t, size_t) const
Returns an evaluated principal direction vector field for plotting.
Definition IntegrandBase.h:258
bool initElementBou(const std::vector< int > &MNPC, LocalIntegral &elmInt) override
Initializes current element for boundary integration.
Definition IntegrandBase.C:214
virtual bool hasBoundaryTerms() const
Returns whether this integrand has explicit boundary contributions.
Definition IntegrandBase.h:188
size_t getNoSpaceDim() const
Returns the number of spatial dimensions.
Definition IntegrandBase.h:292
virtual ForceBase * getForceIntegrand() const
Returns a pointer to an Integrand for nodal force evaluation.
Definition IntegrandBase.h:289
virtual void initForPatch(const ASMbase *)
Interface for initialization of integrand with patch-specific data.
Definition IntegrandBase.h:101
virtual bool writeGlvT(VTF *, int, int &, int &) const
Writes surface tractions/fluxes for a given time step to VTF-file.
Definition IntegrandBase.h:274
virtual std::string getField2Name(size_t idx, const char *prefix=0) const
Returns the name of a secondary solution field component.
Definition IntegrandBase.C:406
virtual void printLog() const
Prints out the problem definition to the log stream.
Definition IntegrandBase.h:53
unsigned short int nsd
Number of spatial dimensions (1, 2 or 3)
Definition IntegrandBase.h:362
virtual void initIntegration(size_t, size_t)
Initializes the integrand with the number of integration points.
Definition IntegrandBase.h:69
virtual bool evalSol2(Vector &s, const Vectors &elmVec, const FiniteElement &fe, const Vec3 &X) const
Evaluates the secondary solution at a result point.
Definition IntegrandBase.C:271
unsigned short int npv
Number of primary solution variables per node.
Definition IntegrandBase.h:363
virtual std::string getEFieldName(size_t idx) const
Returns the name of an element-wise solution field component.
Definition IntegrandBase.C:414
void printSolution(std::ostream &os, int pindx)
Prints out the patch-wise solution vectors.
Definition IntegrandBase.C:340
virtual void setIntegrationPrm(unsigned short int, double)
Initializes an integration parameter for the integrand.
Definition IntegrandBase.h:64
virtual double getIntegrationPrm(unsigned short int) const
Returns an integration parameter for the integrand.
Definition IntegrandBase.h:66
virtual void getNodalDofTypes(std::vector< char > &) const
Returns nodal DOF flags for monolithic coupled integrands.
Definition IntegrandBase.h:353
bool evalSol1(Vector &s, const FiniteElement &fe, const Vec3 &X, const std::vector< int > &MNPC, size_t nskip=0) const
Evaluates the secondary solution at a result point.
Definition IntegrandBase.C:244
virtual void initMatrixBuffers(size_t, size_t ielMax)
Initializes the use of left-hand-side matrix buffers.
Definition IntegrandBase.h:81
Vector & getSolution(size_t n=0)
Accesses the primary solution vector of current patch.
Definition IntegrandBase.h:320
LocalIntegral * getLocalIntegral(size_t nen, size_t iEl, bool neumann) const override
Returns a local integral contribution object for the given element.
Definition IntegrandBase.C:68
virtual void primaryScalarFields(Matrix &)
Computes some derived primary solution quantities.
Definition IntegrandBase.h:264
std::map< std::string, Vector * > myFields
Named fields of this integrand.
Definition IntegrandBase.h:359
SIM::SolutionMode getMode(bool=false) const override
Returns current solution mode.
Definition IntegrandBase.h:62
bool initElement1(const std::vector< int > &MNPC, Vectors &elmVec, size_t nskip=0) const
Initializes the first primary solution vector for current element.
Definition IntegrandBase.C:90
virtual bool suppressOutput(size_t, ASM::ResultClass) const
Filters a result components for output.
Definition IntegrandBase.h:312
virtual bool diverged(size_t=0) const
Returns true if simulation diverged on integration point level.
Definition IntegrandBase.h:280
virtual LinAlg::LinearSystemType getLinearSystemType() const
Defines the properties of the resulting linear system.
Definition IntegrandBase.h:342
double getTimeLevel() const
Returns current time/load parameter for 2ndary solution evaluation.
Definition IntegrandBase.h:356
Vectors primsol
Primary solution vectors for current patch.
Definition IntegrandBase.h:367
virtual bool evalSol(Vector &s, const FiniteElement &fe, const Vec3 &X, const std::vector< int > &MNPC) const
Evaluates the secondary solution at a result point.
Definition IntegrandBase.C:286
virtual bool hasTractionValues() const
Returns whether there are any traction/flux values to write to VTF.
Definition IntegrandBase.h:277
virtual void initNodeMap(const std::vector< int > &)
Initializes the global node number mapping for current patch.
Definition IntegrandBase.h:93
virtual ForceBase * getForceIntegrand(const Vec3 *, AnaSol *=nullptr) const
Returns a pointer to an Integrand for boundary force evaluation.
Definition IntegrandBase.h:286
virtual bool parse(const tinyxml2::XMLElement *)
Parses a data section from an XML element.
Definition IntegrandBase.h:50
Vector * getNamedVector(const std::string &name) const
Returns a vector where we can store a named field.
Definition IntegrandBase.C:391
virtual void setNamedField(const std::string &, Field *)
Registers where we can inject a mixed-basis scalar field.
Definition IntegrandBase.C:379
bool initElement2(const std::vector< int > &MNPC, Vectors &elmVec, size_t nskip=0) const
Initializes all primary solution vectors for current element.
Definition IntegrandBase.C:123
Abstract base class representing a system level integrated quantity.
Definition Integrand.h:44
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 void setParam(const std::string &, double)
Assigns a parameter value to property functions of the integrand.
Definition Integrand.h:379
Abstract base class representing an element level integrated quantity.
Definition LocalIntegral.h:25
Class representing a mixed finite element.
Definition FiniteElement.h:115
Base class representing a system level norm quantity.
Definition IntegrandBase.h:379
void activateElmGroup(const std::vector< int > &elms={})
Assigns the group of active elements.
Definition IntegrandBase.h:438
Vectors prjsol
Projected secondary solution vectors for current patch.
Definition IntegrandBase.h:520
bool initElementBou(const std::vector< int > &MNPC, LocalIntegral &elmInt) override
Initializes current element for boundary integration.
Definition IntegrandBase.C:566
void setParam(const std::string &name, double value) override
Assigns a parameter value to property functions of the integrand.
Definition IntegrandBase.h:493
void setParam(const std::string &name, const Vec3 &value) override
Assigns parameter values to property functions of the integrand.
Definition IntegrandBase.h:500
SIM::SolutionMode getMode(bool) const override
Returns current solution mode.
Definition IntegrandBase.h:506
bool reducedInt(LocalIntegral &elmInt, const FiniteElement &fe, const Vec3 &X) const override
Evaluates reduced integration terms at an interior point.
Definition IntegrandBase.C:612
virtual ~NormBase()
The destructor deletes the projected secondary solution fields.
Definition IntegrandBase.C:430
virtual void setProjectedFields(Fields *f, size_t idx)
Sets a projected secondary solution as a field quantity.
Definition IntegrandBase.C:454
virtual void initForPatch(const ASMbase *)
Interface for initialization of integrand with patch-specific data.
Definition IntegrandBase.h:398
double applyFinalOp(double value) const
Applies the operation finalOp on the given value.
Definition IntegrandBase.C:501
std::vector< Fields * > prjFld
Projected secondary solution fields.
Definition IntegrandBase.h:518
virtual std::string getName(size_t i, size_t j, const char *prefix=0) const
Returns the name of a norm quantity.
Definition IntegrandBase.C:589
LintegralVec * lints
Local integrals used during norm integration.
Definition IntegrandBase.h:524
ASM::FinalNormOp finalOp
The final operation to apply to norms.
Definition IntegrandBase.h:525
int getReducedIntegration(int n) const override
Returns the number of reduced-order integration points.
Definition IntegrandBase.C:606
bool initElement(const std::vector< int > &MNPC, const MxFiniteElement &, const std::vector< size_t > &elem_sizes, const std::vector< size_t > &basis_sizes, LocalIntegral &elmInt) override
Initializes current element for numerical integration (mixed).
Definition IntegrandBase.h:417
unsigned short int nrcmp
Number of projected solution components.
Definition IntegrandBase.h:523
virtual void initIntegration(size_t, size_t)
Initializes the integrand with the number of integration points.
Definition IntegrandBase.h:390
virtual bool hasElementContributions(size_t, size_t) const
Returns whether a norm quantity stores element contributions.
Definition IntegrandBase.h:460
virtual bool hasBoundaryTerms() const
Returns whether this norm has explicit boundary contributions.
Definition IntegrandBase.h:435
virtual size_t getNoFields(int group=0) const
Returns the number of norm groups or size of a specified group.
Definition IntegrandBase.C:531
int getIntegrandType() const override
Defines which FE quantities are needed by the integrand.
Definition IntegrandBase.C:599
void addBoundaryTerms(Vectors &gNorm, double energy) const
Adds external energy terms to relevant norms.
Definition IntegrandBase.C:515
virtual bool hasExternalProjections() const
Returns whether projections are fed through external means.
Definition IntegrandBase.h:483
LocalIntegral * getLocalIntegral(size_t, size_t iEl, bool) const override
Returns a local integral container for the element iEl.
Definition IntegrandBase.C:484
bool projBou
If true, the boundary integrand needs prjsol too.
Definition IntegrandBase.h:521
IntegrandBase & myProblem
The problem-specific data.
Definition IntegrandBase.h:516
void initProjection(size_t nproj)
Sets the number of projected solutions.
Definition IntegrandBase.C:437
NormBase(IntegrandBase &p)
The default constructor is protected to allow sub-classes only.
Definition IntegrandBase.h:382
Vector & getProjection(size_t i)
Accesses a projected secondary solution vector of current patch.
Definition IntegrandBase.C:444
bool initElement(const std::vector< int > &MNPC, LocalIntegral &elmInt) override
Initializes current element for numerical integration.
Definition IntegrandBase.C:547
void setFinalOperation(ASM::FinalNormOp op)
Sets the final operation to apply to norms.
Definition IntegrandBase.h:466
ASM::FinalNormOp getFinalOperation()
Returns the final operation applied to norms.
Definition IntegrandBase.h:468
void setLocalIntegrals(LintegralVec *elementNorms)
Sets a vector of LocalIntegrals to be used during norm integration.
Definition IntegrandBase.h:394
Symmetric tensor-valued unary function of a spatial point.
Definition TensorFunction.h:71
Tensor-valued unary function of a spatial point.
Definition TensorFunction.h:27
Class for output of FE model and results to VTF file.
Definition VTF.h:58
Simple class for representing a point in 3D space.
Definition Vec3.h:27
Vector-valued unary function of a spatial point.
Definition Function.h:242
A vector class with some added algebraic operations.
Definition matrix.h:64
Assembly scope.
Definition SIMdummy.h:24
ResultClass
Enum for cathegorization of result quantities.
Definition ASMenums.h:62
FinalNormOp
Operations to be applied after summing norm element contributions.
Definition ASMenums.h:35
LinearSystemType
Enum defining linear system properties.
Definition LinAlgenums.h:35
@ GENERAL_MATRIX
General matrix.
Definition LinAlgenums.h:36
Simulation scope.
Definition ForceIntegrator.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