14 #ifndef _INTEGRAND_BASE_H
15 #define _INTEGRAND_BASE_H
34 namespace tinyxml2 {
class XMLElement; }
50 virtual bool parse(
const tinyxml2::XMLElement*) {
return false; }
111 bool neumann)
const override;
119 size_t nskip = 0)
const;
125 size_t nskip = 0)
const;
153 const std::vector<size_t>& elem_sizes,
154 const std::vector<size_t>& basis_sizes,
164 const std::vector<size_t>& elem_sizes,
165 const std::vector<size_t>& basis_sizes,
179 const std::vector<size_t>& elem_sizes,
180 const std::vector<size_t>& basis_sizes,
204 const std::vector<int>& MNPC,
size_t nskip = 0)
const;
220 const std::vector<int>& MNPC)
const;
230 const std::vector<int>& MNPC,
231 const std::vector<size_t>& elem_sizes,
232 const std::vector<size_t>& basis_sizes)
const;
278 virtual bool diverged(
size_t = 0)
const {
return false; }
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;
402 const std::vector<size_t>& elem_sizes,
403 const std::vector<size_t>& basis_sizes,
408 const std::vector<size_t>& elem_sizes,
409 const std::vector<size_t>& basis_sizes,
411 {
return this->
initElement(MNPC,elem_sizes,basis_sizes,elmInt); }
419 const std::vector<size_t>& elem_sizes,
420 const std::vector<size_t>& basis_sizes,
446 virtual std::string
getName(
size_t i,
size_t j,
const char* prefix = 0)
const;
482 void setParam(
const std::string& name,
double value)
override
500 size_t nExtraNodes = 0);
544 bool =
false)
const override;
557 const std::vector<size_t>&,
558 const std::vector<size_t>&,
564 const std::vector<size_t>&,
565 const std::vector<size_t>&,
573 const std::vector<size_t>& elem_sizes,
574 const std::vector<size_t>& basis_sizes,
588 void setParam(
const std::string& name,
double value)
override
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