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 
23 class ASMbase;
24 class NormBase;
25 class ForceBase;
26 class GlobalIntegral;
27 class AnaSol;
28 class VTF;
29 class Field;
30 class Fields;
31 class VecFunc;
32 class TensorFunc;
33 class STensorFunc;
34 namespace tinyxml2 { class XMLElement; }
35 
36 
41 class IntegrandBase : public Integrand
42 {
43 protected:
45  explicit IntegrandBase(unsigned short int n) : nsd(n), npv(1), myTime(0.0),
46  m_mode(SIM::INIT) {}
47 
48 public:
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;
99  virtual void initForPatch(const ASMbase* pch);
100 
101 
102  // Element-level initialization interface
103  // ======================================
104 
110  LocalIntegral* getLocalIntegral(size_t nen, size_t iEl,
111  bool neumann) const override;
112 
113 protected:
118  bool initElement1(const std::vector<int>& MNPC, Vectors& elmVec,
119  size_t nskip = 0) const;
124  bool initElement2(const std::vector<int>& MNPC, Vectors& elmVec,
125  size_t nskip = 0) const;
126 
127 public:
136  bool initElement(const std::vector<int>& MNPC,
137  LocalIntegral& elmInt) override;
144  bool initElement(const std::vector<int>& MNPC,
145  const FiniteElement& fe,
146  const Vec3& X0, size_t nPt, LocalIntegral& elmInt) override;
152  bool initElement(const std::vector<int>& MNPC,
153  const std::vector<size_t>& elem_sizes,
154  const std::vector<size_t>& basis_sizes,
155  LocalIntegral& elmInt) override;
162  bool initElement(const std::vector<int>& MNPC,
163  const MxFiniteElement& fe,
164  const std::vector<size_t>& elem_sizes,
165  const std::vector<size_t>& basis_sizes,
166  LocalIntegral& elmInt) override;
167 
171  bool initElementBou(const std::vector<int>& MNPC,
172  LocalIntegral& elmInt) override;
178  bool initElementBou(const std::vector<int>& MNPC,
179  const std::vector<size_t>& elem_sizes,
180  const std::vector<size_t>& basis_sizes,
181  LocalIntegral& elmInt) override;
182 
184  virtual bool hasInteriorTerms() const { return true; }
186  virtual bool hasBoundaryTerms() const { return true; }
187 
189  void activateElmGroup(const std::vector<int>& elms = {}) { elmGrp = elms; }
191  bool inActive(int iel) const;
192 
193 
194  // Secondary solution field evaluation interface
195  // =============================================
196 
203  bool evalSol1(Vector& s, const FiniteElement& fe, const Vec3& X,
204  const std::vector<int>& MNPC, size_t nskip = 0) const;
205 
211  virtual bool evalSol2(Vector& s, const Vectors& elmVec,
212  const FiniteElement& fe, const Vec3& X) const;
213 
219  virtual bool evalSol(Vector& s, const FiniteElement& fe, const Vec3& X,
220  const std::vector<int>& MNPC) const;
221 
229  virtual bool evalSol(Vector& s, const MxFiniteElement& fe, const Vec3& X,
230  const std::vector<int>& MNPC,
231  const std::vector<size_t>& elem_sizes,
232  const std::vector<size_t>& basis_sizes) const;
233 
238  virtual bool evalSol(Vector& s,
239  const TensorFunc& asol, const Vec3& X) const;
240 
245  virtual bool evalSol(Vector& s,
246  const STensorFunc& asol, const Vec3& X) const;
247 
252  virtual bool evalSol(Vector& s,
253  const VecFunc& asol, const Vec3& X) const;
254 
256  virtual bool getPrincipalDir(Matrix&, size_t, size_t) const { return false; }
257 
259  virtual size_t getNo2ndSolPerLine() const { return 999; }
260 
262  virtual void primaryScalarFields(Matrix&) {}
263 
264 
265  // Various service methods
266  // =======================
267 
269  virtual int derivativeOrder() const { return 1; }
270 
272  virtual bool writeGlvT(VTF*, int, int&, int&) const { return true; }
273 
275  virtual bool hasTractionValues() const { return false; }
276 
278  virtual bool diverged(size_t = 0) const { return false; }
279 
281  virtual NormBase* getNormIntegrand(AnaSol* = nullptr) const
282  { return nullptr; }
284  virtual ForceBase* getForceIntegrand(const Vec3*, AnaSol* = nullptr) const
285  { return nullptr; }
287  virtual ForceBase* getForceIntegrand() const { return nullptr; }
288 
290  size_t getNoSpaceDim() const { return nsd; }
292  virtual size_t getNoFields(int = 2) const { return 0; }
294  virtual size_t getNoGLMs() const { return 0; }
295 
299  virtual std::string getField1Name(size_t idx, const char* prefix = 0) const;
303  virtual std::string getField2Name(size_t idx, const char* prefix = 0) const;
305  virtual bool suppressOutput(size_t, ASM::ResultClass) const { return false; }
306 
308  virtual size_t getNoSolutions(bool = true) const { return primsol.size(); }
309 
311  virtual Vector* getExtractionField(size_t = 1) { return nullptr; }
313  Vector& getSolution(size_t n = 0) { return primsol[n]; }
315  Vectors& getSolutions() { return primsol; }
316 
318  void resetSolution();
319 
321  void printSolution(std::ostream& os, int pindx);
322 
324  virtual void setNamedField(const std::string&, Field*);
326  virtual void setNamedFields(const std::string&, Fields*);
327 
329  Vector* getNamedVector(const std::string& name) const;
330 
336  {
337  return LinAlg::GENERAL_MATRIX;
338  }
339 
343  void registerVector(const std::string& name, Vector* vec);
344 
346  virtual void getNodalDofTypes(std::vector<char>&) const {}
347 
349  double getTimeLevel() const { return myTime; }
350 
351 private:
352  std::map<std::string,Vector*> myFields;
353 
354 protected:
355  unsigned short int nsd;
356  unsigned short int npv;
357  double myTime;
359  std::vector<int> elmGrp;
361 };
362 
363 
364 using LintegralVec = std::vector<LocalIntegral*>;
365 
366 
371 class NormBase : public Integrand
372 {
373 protected:
375  explicit NormBase(IntegrandBase& p) : myProblem(p), projBou(false), nrcmp(0),
376  lints(nullptr), finalOp(ASM::SQRT) {}
377 
378 public:
380  virtual ~NormBase();
381 
383  virtual void initIntegration(size_t, size_t) {}
385  void initProjection(size_t nproj);
387  void setLocalIntegrals(LintegralVec* elementNorms) { lints = elementNorms; }
388 
391  LocalIntegral* getLocalIntegral(size_t, size_t iEl, bool) const override;
392 
394  bool initElement(const std::vector<int>& MNPC,
395  LocalIntegral& elmInt) override;
397  bool initElement(const std::vector<int>& MNPC,
398  const FiniteElement& fe, const Vec3& X0, size_t nPt,
399  LocalIntegral& elmInt) override;
401  bool initElement(const std::vector<int>& MNPC,
402  const std::vector<size_t>& elem_sizes,
403  const std::vector<size_t>& basis_sizes,
404  LocalIntegral& elmInt) override;
406  bool initElement(const std::vector<int>& MNPC,
407  const MxFiniteElement&,
408  const std::vector<size_t>& elem_sizes,
409  const std::vector<size_t>& basis_sizes,
410  LocalIntegral& elmInt) override
411  { return this->initElement(MNPC,elem_sizes,basis_sizes,elmInt); }
412 
413 
415  bool initElementBou(const std::vector<int>& MNPC,
416  LocalIntegral& elmInt) override;
418  bool initElementBou(const std::vector<int>& MNPC,
419  const std::vector<size_t>& elem_sizes,
420  const std::vector<size_t>& basis_sizes,
421  LocalIntegral& elmInt) override;
422 
424  virtual bool hasBoundaryTerms() const { return false; }
425 
427  void activateElmGroup(const std::vector<int>& elms = {})
428  {
430  }
431 
435  void addBoundaryTerms(Vectors& gNorm, double energy) const;
436 
440  virtual size_t getNoFields(int group = 0) const;
441 
446  virtual std::string getName(size_t i, size_t j, const char* prefix = 0) const;
447 
449  virtual bool hasElementContributions(size_t, size_t) const { return true; }
450 
452  Vector& getProjection(size_t i);
453 
458 
460  int getIntegrandType() const override;
462  int getReducedIntegration(int n) const override;
463 
468  bool reducedInt(LocalIntegral& elmInt,
469  const FiniteElement& fe, const Vec3& X) const override;
470 
472  virtual bool hasExternalProjections() const { return false; }
473 
477  virtual void setProjectedFields(Fields* f, size_t idx);
478 
482  void setParam(const std::string& name, double value) override
483  {
484  myProblem.setParam(name,value);
485  }
489  void setParam(const std::string& name, const Vec3& value) override
490  {
491  myProblem.setParam(name,value);
492  }
493 
495  SIM::SolutionMode getMode(bool) const override { return myProblem.getMode(); }
496 
497 protected:
499  bool initProjection(const std::vector<int>& MNPC, LocalIntegral& elmInt,
500  size_t nExtraNodes = 0);
501 
503  double applyFinalOp(double value) const;
504 
506 
507  std::vector<Fields*> prjFld;
508 
510  bool projBou;
511 
512  unsigned short int nrcmp;
515 };
516 
517 
522 class ForceBase : public Integrand
523 {
524 protected:
526  explicit ForceBase(IntegrandBase& p) : myProblem(p), eBuffer(nullptr) {}
527 
528 public:
530  virtual ~ForceBase();
531 
533  void initBuffer(size_t nel);
534 
536  void assemble(RealArray& force) const;
537 
539  virtual void initIntegration(size_t, size_t) {}
540 
543  LocalIntegral* getLocalIntegral(size_t, size_t iEl,
544  bool = false) const override;
545 
547  bool initElement(const std::vector<int>&,
548  LocalIntegral&) override { return false; }
549 
551  bool initElement(const std::vector<int>&,
552  const FiniteElement&, const Vec3&, size_t,
553  LocalIntegral&) override { return false; }
554 
556  bool initElement(const std::vector<int>&,
557  const std::vector<size_t>&,
558  const std::vector<size_t>&,
559  LocalIntegral&) override { return false; }
560 
562  bool initElement(const std::vector<int>&,
563  const MxFiniteElement&,
564  const std::vector<size_t>&,
565  const std::vector<size_t>&,
566  LocalIntegral&) override { return false; }
567 
569  bool initElementBou(const std::vector<int>& MNPC,
570  LocalIntegral& elmInt) override;
572  bool initElementBou(const std::vector<int>& MNPC,
573  const std::vector<size_t>& elem_sizes,
574  const std::vector<size_t>& basis_sizes,
575  LocalIntegral& elmInt) override;
576 
578  virtual size_t getNoComps() const = 0;
579 
581  virtual bool hasInteriorTerms() const { return false; }
583  virtual bool hasBoundaryTerms() const { return true; }
584 
588  void setParam(const std::string& name, double value) override
589  {
590  myProblem.setParam(name,value);
591  }
595  void setParam(const std::string& name, const Vec3& value) override
596  {
597  myProblem.setParam(name,value);
598  }
599 
601  SIM::SolutionMode getMode(bool) const override { return myProblem.getMode(); }
602 
603 protected:
605  void clearBuffer();
606 
609  double* eBuffer;
610 };
611 
612 #endif
Various enums for assembly scope.
std::vector< Real > RealArray
A real-valued array without algebraic operations.
Definition: ImmersedBoundaries.h:29
std::vector< LocalIntegral * > LintegralVec
Local integral container.
Definition: IntegrandBase.h:364
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:70
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:523
double * eBuffer
Element force buffer used during integration.
Definition: IntegrandBase.h:609
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 size_t getNoComps() const =0
Returns the number of force components.
LintegralVec eForce
Local integrals used during force integration.
Definition: IntegrandBase.h:608
void initBuffer(size_t nel)
Allocates internal element force buffers.
Definition: IntegrandBase.C:639
IntegrandBase & myProblem
The problem-specific data.
Definition: IntegrandBase.h:607
void clearBuffer()
Clears out internal buffers.
Definition: IntegrandBase.C:629
void assemble(RealArray &force) const
Assembles the global forces.
Definition: IntegrandBase.C:688
ForceBase(IntegrandBase &p)
The constructor is protected to allow sub-classes only.
Definition: IntegrandBase.h:526
virtual ~ForceBase()
The destructor frees the internally allocated objects.
Definition: IntegrandBase.C:623
void setParam(const std::string &name, const Vec3 &value) override
Assigns parameter values to property functions of the integrand.
Definition: IntegrandBase.h:595
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:556
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:562
void setParam(const std::string &name, double value) override
Assigns a parameter value to property functions of the integrand.
Definition: IntegrandBase.h:588
bool initElement(const std::vector< int > &, const FiniteElement &, const Vec3 &, size_t, LocalIntegral &) override
Dummy implementation (only boundary integration is relevant).
Definition: IntegrandBase.h:551
SIM::SolutionMode getMode(bool) const override
Returns current solution mode.
Definition: IntegrandBase.h:601
bool initElement(const std::vector< int > &, LocalIntegral &) override
Dummy implementation (only boundary integration is relevant).
Definition: IntegrandBase.h:547
virtual bool hasInteriorTerms() const
Returns whether this integrand has explicit interior contributions.
Definition: IntegrandBase.h:581
virtual void initIntegration(size_t, size_t)
Initializes the integrand with the number of integration points.
Definition: IntegrandBase.h:539
bool initElementBou(const std::vector< int > &MNPC, LocalIntegral &elmInt) override
Initializes current element for boundary integration.
Definition: IntegrandBase.C:668
virtual bool hasBoundaryTerms() const
Returns whether this integrand has explicit boundary contributions.
Definition: IntegrandBase.h:583
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:397
virtual ForceBase * getForceIntegrand(const Vec3 *, AnaSol *=nullptr) const
Returns a pointer to an Integrand for boundary force evaluation.
Definition: IntegrandBase.h:284
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:269
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 ForceBase * getForceIntegrand() const
Returns a pointer to an Integrand for nodal force evaluation.
Definition: IntegrandBase.h:287
virtual size_t getNo2ndSolPerLine() const
Returns max number of 2ndary solution components to print per line.
Definition: IntegrandBase.h:259
virtual size_t getNoFields(int=2) const
Returns the number of primary/secondary solution field components.
Definition: IntegrandBase.h:292
virtual size_t getNoSolutions(bool=true) const
Returns the number of solution vectors.
Definition: IntegrandBase.h:308
SIM::SolutionMode m_mode
Current solution mode.
Definition: IntegrandBase.h:358
std::vector< int > elmGrp
List of currently active elements.
Definition: IntegrandBase.h:359
virtual std::string getField1Name(size_t idx, const char *prefix=0) const
Returns the name of a primary solution field component.
Definition: IntegrandBase.C:410
double myTime
Evaluation time for the secondary solution.
Definition: IntegrandBase.h:357
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:294
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:171
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:346
virtual GlobalIntegral & getGlobalInt(GlobalIntegral *gq) const
Returns the system quantity to be integrated by *this.
Definition: IntegrandBase.C:61
virtual bool hasInteriorTerms() const
Returns whether this integrand has explicit interior contributions.
Definition: IntegrandBase.h:184
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
void registerVector(const std::string &name, Vector *vec)
Registers a vector to inject a named field into.
Definition: IntegrandBase.C:385
bool inActive(int iel) const
Returns true, if the element iel is deactivated.
Definition: IntegrandBase.C:426
void activateElmGroup(const std::vector< int > &elms={})
Assigns the group of active elements.
Definition: IntegrandBase.h:189
virtual bool getPrincipalDir(Matrix &, size_t, size_t) const
Returns an evaluated principal direction vector field for plotting.
Definition: IntegrandBase.h:256
bool initElementBou(const std::vector< int > &MNPC, LocalIntegral &elmInt) override
Initializes current element for boundary integration.
Definition: IntegrandBase.C:226
virtual NormBase * getNormIntegrand(AnaSol *=nullptr) const
Returns a pointer to an Integrand for solution norm evaluation.
Definition: IntegrandBase.h:281
virtual bool hasBoundaryTerms() const
Returns whether this integrand has explicit boundary contributions.
Definition: IntegrandBase.h:186
size_t getNoSpaceDim() const
Returns the number of spatial dimensions.
Definition: IntegrandBase.h:290
virtual bool writeGlvT(VTF *, int, int &, int &) const
Writes surface tractions/fluxes for a given time step to VTF-file.
Definition: IntegrandBase.h:272
virtual std::string getField2Name(size_t idx, const char *prefix=0) const
Returns the name of a secondary solution field component.
Definition: IntegrandBase.C:418
virtual Vector * getExtractionField(size_t=1)
Returns the patch-wise extraction function field, if any.
Definition: IntegrandBase.h:311
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:355
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:283
unsigned short int npv
Number of primary solution variables per node.
Definition: IntegrandBase.h:356
void printSolution(std::ostream &os, int pindx)
Prints out the patch-wise solution vectors.
Definition: IntegrandBase.C:352
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
Vector & getSolution(size_t n=0)
Accesses the primary solution vector of current patch.
Definition: IntegrandBase.h:313
virtual void getNodalDofTypes(std::vector< char > &) const
Returns nodal DOF flags for monolithic coupled integrands.
Definition: IntegrandBase.h:346
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:256
virtual void initMatrixBuffers(size_t, size_t ielMax)
Initializes the use of left-hand-side matrix buffers.
Definition: IntegrandBase.h:81
virtual void initForPatch(const ASMbase *pch)
Interface for initialization of integrand with patch-specific data.
Definition: IntegrandBase.C:48
Vectors & getSolutions()
Accesses the primary solution vectors of current patch.
Definition: IntegrandBase.h:315
virtual void primaryScalarFields(Matrix &)
Computes some derived primary solution quantities.
Definition: IntegrandBase.h:262
std::map< std::string, Vector * > myFields
Named fields of this integrand.
Definition: IntegrandBase.h:352
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:102
virtual bool suppressOutput(size_t, ASM::ResultClass) const
Filters a result components for output.
Definition: IntegrandBase.h:305
virtual bool diverged(size_t=0) const
Returns true if simulation diverged on integration point level.
Definition: IntegrandBase.h:278
virtual LinAlg::LinearSystemType getLinearSystemType() const
Defines the properties of the resulting linear system.
Definition: IntegrandBase.h:335
double getTimeLevel() const
Returns current time/load parameter for 2ndary solution evaluation.
Definition: IntegrandBase.h:349
Vectors primsol
Primary solution vectors for current patch.
Definition: IntegrandBase.h:360
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:298
virtual bool hasTractionValues() const
Returns whether there are any traction/flux values to write to VTF.
Definition: IntegrandBase.h:275
virtual void initNodeMap(const std::vector< int > &)
Initializes the global node number mapping for current patch.
Definition: IntegrandBase.h:93
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:403
virtual void setNamedField(const std::string &, Field *)
Registers where we can inject a mixed-basis scalar field.
Definition: IntegrandBase.C:391
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:135
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:382
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:372
void activateElmGroup(const std::vector< int > &elms={})
Assigns the group of active elements.
Definition: IntegrandBase.h:427
Vectors prjsol
Projected secondary solution vectors for current patch.
Definition: IntegrandBase.h:509
bool initElementBou(const std::vector< int > &MNPC, LocalIntegral &elmInt) override
Initializes current element for boundary integration.
Definition: IntegrandBase.C:570
void setParam(const std::string &name, double value) override
Assigns a parameter value to property functions of the integrand.
Definition: IntegrandBase.h:482
virtual LocalIntegral * getLocalIntegral(size_t nen, size_t iEl, bool neumann=false) const=0
Returns a local integral contribution object for the given element.
void setParam(const std::string &name, const Vec3 &value) override
Assigns parameter values to property functions of the integrand.
Definition: IntegrandBase.h:489
SIM::SolutionMode getMode(bool) const override
Returns current solution mode.
Definition: IntegrandBase.h:495
bool reducedInt(LocalIntegral &elmInt, const FiniteElement &fe, const Vec3 &X) const override
Evaluates reduced integration terms at an interior point.
Definition: IntegrandBase.C:616
virtual ~NormBase()
The destructor deletes the projected secondary solution fields.
Definition: IntegrandBase.C:434
virtual void setProjectedFields(Fields *f, size_t idx)
Sets a projected secondary solution as a field quantity.
Definition: IntegrandBase.C:458
double applyFinalOp(double value) const
Applies the operation finalOp on the given value.
Definition: IntegrandBase.C:505
std::vector< Fields * > prjFld
Projected secondary solution fields.
Definition: IntegrandBase.h:507
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:593
LintegralVec * lints
Local integrals used during norm integration.
Definition: IntegrandBase.h:513
ASM::FinalNormOp finalOp
The final operation to apply to norms.
Definition: IntegrandBase.h:514
int getReducedIntegration(int n) const override
Returns the number of reduced-order integration points.
Definition: IntegrandBase.C:610
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:406
unsigned short int nrcmp
Number of projected solution components.
Definition: IntegrandBase.h:512
virtual void initIntegration(size_t, size_t)
Initializes the integrand with the number of integration points.
Definition: IntegrandBase.h:383
virtual bool hasElementContributions(size_t, size_t) const
Returns whether a norm quantity stores element contributions.
Definition: IntegrandBase.h:449
virtual bool hasBoundaryTerms() const
Returns whether this norm has explicit boundary contributions.
Definition: IntegrandBase.h:424
virtual size_t getNoFields(int group=0) const
Returns the number of norm groups or size of a specified group.
Definition: IntegrandBase.C:535
int getIntegrandType() const override
Defines which FE quantities are needed by the integrand.
Definition: IntegrandBase.C:603
void addBoundaryTerms(Vectors &gNorm, double energy) const
Adds external energy terms to relevant norms.
Definition: IntegrandBase.C:519
virtual bool hasExternalProjections() const
Returns whether projections are fed through external means.
Definition: IntegrandBase.h:472
bool projBou
If true, the boundary integrand needs prjsol too.
Definition: IntegrandBase.h:510
IntegrandBase & myProblem
The problem-specific data.
Definition: IntegrandBase.h:505
void initProjection(size_t nproj)
Sets the number of projected solutions.
Definition: IntegrandBase.C:441
NormBase(IntegrandBase &p)
The default constructor is protected to allow sub-classes only.
Definition: IntegrandBase.h:375
Vector & getProjection(size_t i)
Accesses a projected secondary solution vector of current patch.
Definition: IntegrandBase.C:448
bool initElement(const std::vector< int > &MNPC, LocalIntegral &elmInt) override
Initializes current element for numerical integration.
Definition: IntegrandBase.C:551
void setFinalOperation(ASM::FinalNormOp op)
Sets the final operation to apply to norms.
Definition: IntegrandBase.h:455
ASM::FinalNormOp getFinalOperation()
Returns the final operation applied to norms.
Definition: IntegrandBase.h:457
void setLocalIntegrals(LintegralVec *elementNorms)
Sets a vector of LocalIntegrals to be used during norm integration.
Definition: IntegrandBase.h:387
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