14#ifndef _INTEGRAND_BASE_H
15#define _INTEGRAND_BASE_H
34namespace tinyxml2 {
class XMLElement; }
50 virtual bool parse(
const tinyxml2::XMLElement*) {
return false; }
113 bool neumann)
const override;
121 size_t nskip = 0)
const;
127 size_t nskip = 0)
const;
155 const std::vector<size_t>& elem_sizes,
156 const std::vector<size_t>& basis_sizes,
166 const std::vector<size_t>& elem_sizes,
167 const std::vector<size_t>& basis_sizes,
181 const std::vector<size_t>& elem_sizes,
182 const std::vector<size_t>& basis_sizes,
206 const std::vector<int>& MNPC,
size_t nskip = 0)
const;
222 const std::vector<int>& MNPC)
const;
232 const std::vector<int>& MNPC,
233 const std::vector<size_t>& elem_sizes,
234 const std::vector<size_t>& basis_sizes)
const;
280 virtual bool diverged(
size_t = 0)
const {
return false; }
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;
413 const std::vector<size_t>& elem_sizes,
414 const std::vector<size_t>& basis_sizes,
419 const std::vector<size_t>& elem_sizes,
420 const std::vector<size_t>& basis_sizes,
422 {
return this->
initElement(MNPC,elem_sizes,basis_sizes,elmInt); }
430 const std::vector<size_t>& elem_sizes,
431 const std::vector<size_t>& basis_sizes,
457 virtual std::string
getName(
size_t i,
size_t j,
const char* prefix = 0)
const;
493 void setParam(
const std::string& name,
double value)
override
511 size_t nExtraNodes = 0);
555 bool =
false)
const override;
568 const std::vector<size_t>&,
569 const std::vector<size_t>&,
575 const std::vector<size_t>&,
576 const std::vector<size_t>&,
584 const std::vector<size_t>& elem_sizes,
585 const std::vector<size_t>& basis_sizes,
599 void setParam(
const std::string& name,
double value)
override
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