IFEM 90A354
ASMs2DLag.h
Go to the documentation of this file.
1// $Id$
2//==============================================================================
12//==============================================================================
13
14#ifndef _ASM_S2D_LAG_H
15#define _ASM_S2D_LAG_H
16
17#include "ASMs2D.h"
18#include "ASMLagBase.h"
19
20
26class ASMs2DLag : public ASMs2D, protected ASMLagBase
27{
28protected:
31 {
32 public:
35 BasisFunctionCache(const ASMs2DLag& pch);
36
41
43 virtual ~BasisFunctionCache() = default;
44
50 double getParam(int dir, size_t el, size_t gp, bool reduced) const override;
51
52 protected:
54 bool internalInit() override;
55
58 size_t index(size_t, size_t gp, bool) const override { return gp; }
59
63 BasisFunctionVals calculatePt(size_t, size_t gp, bool red) const override;
64
66 void calculateAll() override;
67
69 void setupParameters() override;
70 };
71
72public:
74 explicit ASMs2DLag(unsigned char n_s = 2, unsigned char n_f = 2);
76 ASMs2DLag(const ASMs2DLag& patch, unsigned char n_f);
78 ASMs2DLag(const ASMs2DLag& patch);
80 virtual ~ASMs2DLag() {}
81
82
83 // Methods for model generation
84 // ============================
85
87 virtual bool write(std::ostream& os, int = 0) const;
88
92 virtual bool generateFEMTopology();
93
97 virtual void clear(bool retainGeometry = false);
98
104 virtual bool addXElms(short int dim, short int item,
105 size_t nXn, IntVec& nodes);
106
111 virtual bool getElementCoordinates(Matrix& X, int iel, bool = true) const;
112
116 virtual void getNodalCoordinates(Matrix& X, bool = false) const;
117
120 virtual Vec3 getCoord(size_t inod) const;
121
123 virtual Vec3 getElementCenter(int iel) const;
124
131 virtual void constrainEdge(int dir, bool open, int dof, int code, char basis);
132
134 virtual size_t getNoProjectionNodes() const;
135
141 virtual bool assembleL2matrices(SystemMatrix& A, SystemVector& B,
142 const L2Integrand& integrand,
143 bool continuous) const;
144
145protected:
149 void setCoord(size_t inod, const Vec3& Xnod);
150
154 virtual void findBoundaryElms(IntVec& elms, int lIndex, int = 0) const;
155
158 int findElement(double u, double v,
159 double* xi = nullptr, double* eta = nullptr) const;
160
167 bool integrateElm(Integrand& integrand, GlobalIntegral& glbInt, int iel,
168 ASMs2D::BasisFunctionCache& cache, const TimeDomain& time);
169
170public:
173 virtual bool updateCoords(const Vector& displ);
174
175
176 // Methods for integration of finite element quantities.
177 // These are the main computational methods of the ASM class hierarchy.
178 // ====================================================================
179
184 virtual bool integrate(Integrand& integrand,
185 GlobalIntegral& glbInt, const TimeDomain& time);
186
192 virtual bool integrate(Integrand& integrand, int lIndex,
193 GlobalIntegral& glbInt, const TimeDomain& time);
194
195
196 // Post-processing methods
197 // =======================
198
204 virtual int evalPoint(const double* xi, double* param, Vec3& X) const;
205
209 virtual bool tesselate(ElementBlock& grid, const int*) const;
210
219 virtual bool evalSolution(Matrix& sField, const Vector& locSol,
220 const int*, int n_f, bool) const;
221
232 virtual bool evalSolution(Matrix& sField, const Vector& locSol,
233 const RealArray* gpar, bool regular,
234 int, int) const;
235
242 virtual bool evalSolution(Matrix& sField, const IntegrandBase& integrand,
243 const int*, char) const;
244
255 virtual bool evalSolution(Matrix& sField, const IntegrandBase& integrand,
256 const RealArray* gpar, bool regular) const;
257
263 virtual bool evaluate(const ASMbase* basis, const Vector& locVec,
264 RealArray& vec, int basisNum) const;
265
270 virtual bool getOrder(int& pu, int& pv, int& pw) const;
271
272 using ASMs2D::getSize;
276 virtual bool getSize(int& n1, int& n2, int = 0) const;
277
280 virtual void generateThreadGroups(const Integrand&, bool, bool);
281
283 virtual IntMat getElmNodes(int basis) const;
284
286 virtual size_t getNoBoundaryElms(char lIndex, char ldim) const;
287
288private:
290 static void createMNPC(size_t nx, size_t ny, int p1, int p2, IntMat& MNPC);
291
292protected:
301 virtual bool evalSolPt(int iel, double xi, double eta,
302 size_t nCmp, const Vector& pchSol,
303 RealArray& ptSol, RealArray& N) const;
304
305 size_t nx;
306 size_t ny;
307 int p1;
308 int p2;
309};
310
311#endif
Common base class for Lagrange FE models.
std::vector< int > IntVec
General integer vector.
Definition ASMbase.h:25
std::vector< IntVec > IntMat
General 2D integer matrix.
Definition ASMbase.h:26
Driver for assembly of structured 2D spline FE models.
std::vector< Real > RealArray
A real-valued array without algebraic operations.
Definition ImmersedBoundaries.h:32
Common base class for Lagrange FE models.
Definition ASMLagBase.h:27
Base class for spline-based finite element (FE) assembly drivers.
Definition ASMbase.h:72
const IntMat & MNPC
Matrix of Nodal Point Correspondance.
Definition ASMbase.h:1064
Implementation of basis function cache.
Definition ASMs2DLag.h:31
void calculateAll() override
Calculates basis function info in all integration points.
Definition ASMs2DLag.C:1250
BasisFunctionVals calculatePt(size_t, size_t gp, bool red) const override
Calculates basis function info in a single integration point.
Definition ASMs2DLag.C:1229
void setupParameters() override
Configure quadrature points.
Definition ASMs2DLag.C:1209
virtual ~BasisFunctionCache()=default
Empty destructor.
size_t index(size_t, size_t gp, bool) const override
Obtain global integration point index.
Definition ASMs2DLag.h:58
double getParam(int dir, size_t el, size_t gp, bool reduced) const override
Obtain a single integration point parameter.
Definition ASMs2DLag.C:1220
bool internalInit() override
Implementation specific initialization.
Definition ASMs2DLag.C:1196
Driver for assembly of structured 2D Lagrange FE models.
Definition ASMs2DLag.h:27
bool integrateElm(Integrand &integrand, GlobalIntegral &glbInt, int iel, ASMs2D::BasisFunctionCache &cache, const TimeDomain &time)
Evaluates an integral over an interior element domain.
Definition ASMs2DLag.C:300
virtual void getNodalCoordinates(Matrix &X, bool=false) const
Returns a matrix with all nodal coordinates within the patch.
Definition ASMs2DLag.C:247
virtual bool tesselate(ElementBlock &grid, const int *) const
Creates a quad element model of this patch for visualization.
Definition ASMs2DLag.C:699
int p1
Polynomial order in first parameter direction.
Definition ASMs2DLag.h:307
virtual void constrainEdge(int dir, bool open, int dof, int code, char basis)
Constrains all DOFs on a given boundary edge.
Definition ASMs2DLag.C:723
virtual IntMat getElmNodes(int basis) const
Returns the matrix of nodal point correspondance for given basis.
Definition ASMs2DLag.C:943
virtual bool evalSolPt(int iel, double xi, double eta, size_t nCmp, const Vector &pchSol, RealArray &ptSol, RealArray &N) const
Evaluates a nodal solution field at specified point in an element.
Definition ASMs2DLag.C:782
virtual bool getSize(int &n1, int &n2, int=0) const
Returns the number of nodal points in each parameter direction.
Definition ASMs2DLag.C:272
int findElement(double u, double v, double *xi=nullptr, double *eta=nullptr) const
Finds the element containing specified parametric point.
Definition ASMs2DLag.C:1024
virtual void clear(bool retainGeometry=false)
Clears the contents of the patch, making it empty.
Definition ASMs2DLag.C:60
virtual bool updateCoords(const Vector &displ)
Updates the nodal coordinates for this patch.
Definition ASMs2DLag.C:256
virtual bool evaluate(const ASMbase *basis, const Vector &locVec, RealArray &vec, int basisNum) const
Evaluates and interpolates a field over a given geometry.
Definition ASMs2DLag.C:1057
virtual ~ASMs2DLag()
Empty destructor.
Definition ASMs2DLag.h:80
virtual bool generateFEMTopology()
Generates the finite element topology data for the patch.
Definition ASMs2DLag.C:136
virtual Vec3 getCoord(size_t inod) const
Returns the global coordinates for the given node.
Definition ASMs2DLag.C:193
virtual bool getElementCoordinates(Matrix &X, int iel, bool=true) const
Returns a matrix with nodal coordinates for an element.
Definition ASMs2DLag.C:227
size_t ny
Number of nodes in second parameter direction.
Definition ASMs2DLag.h:306
virtual bool getOrder(int &pu, int &pv, int &pw) const
Returns the polynomial order in each parameter direction.
Definition ASMs2DLag.C:262
void setCoord(size_t inod, const Vec3 &Xnod)
Assigned global coordinates for the given node.
Definition ASMs2DLag.C:202
virtual size_t getNoProjectionNodes() const
Returns the number of projection nodes for this patch.
Definition ASMs2DLag.C:1082
virtual bool addXElms(short int dim, short int item, size_t nXn, IntVec &nodes)
Adds extraordinary elements associated with a patch boundary.
Definition ASMs2DLag.C:70
virtual void generateThreadGroups(const Integrand &, bool, bool)
Generates element groups for multi-threading of interior integrals.
Definition ASMs2DLag.C:932
virtual bool integrate(Integrand &integrand, GlobalIntegral &glbInt, const TimeDomain &time)
Evaluates an integral over the interior patch domain.
Definition ASMs2DLag.C:468
virtual Vec3 getElementCenter(int iel) const
Returns the geometric center of an element.
Definition ASMs2DLag.C:214
int p2
Polynomial order in second parameter direction.
Definition ASMs2DLag.h:308
virtual bool assembleL2matrices(SystemMatrix &A, SystemVector &B, const L2Integrand &integrand, bool continuous) const
Assembles L2-projection matrices for the secondary solution.
Definition ASMs2DLag.C:1088
size_t nx
Number of nodes in first parameter direction.
Definition ASMs2DLag.h:305
virtual bool write(std::ostream &os, int=0) const
Writes the FEM basis to given stream.
Definition ASMs2DLag.C:1018
static void createMNPC(size_t nx, size_t ny, int p1, int p2, IntMat &MNPC)
Returns matrix of nodal point correspondance for a structured grid.
Definition ASMs2DLag.C:970
virtual int evalPoint(const double *xi, double *param, Vec3 &X) const
Evaluates the geometry at a specified point.
Definition ASMs2DLag.C:674
virtual size_t getNoBoundaryElms(char lIndex, char ldim) const
Returns the number of elements on a boundary.
Definition ASMs2DLag.C:281
virtual bool evalSolution(Matrix &sField, const Vector &locSol, const int *, int n_f, bool) const
Evaluates the primary solution field at all visualization points.
Definition ASMs2DLag.C:730
virtual void findBoundaryElms(IntVec &elms, int lIndex, int=0) const
Finds the patch-local element numbers on a patch boundary.
Definition ASMs2DLag.C:996
Implementation of basis function cache.
Definition ASMs2D.h:60
Driver for assembly of structured 2D spline FE models.
Definition ASMs2D.h:39
virtual bool evalSolution(Matrix &sField, const Vector &locSol, const int *npe, int n_f, bool piola) const
Evaluates the primary solution field at all visualization points.
Definition ASMs2D.C:2700
virtual void generateThreadGroups(const Integrand &integrand, bool silence, bool ignoreGlobalLM)
Generates element groups for multi-threading of interior integrals.
Definition ASMs2D.C:3043
virtual bool getSize(int &n1, int &n2, int basis=0) const
Returns the number of nodal points in each parameter direction.
Definition ASMs2D.C:1570
Class for storage of a standard FE grid block.
Definition ElementBlock.h:27
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
Abstract base class representing a system level integrated quantity.
Definition Integrand.h:44
Abstract class for evaluating integrand or function.
Definition GlbL2projector.h:40
Base class for representing a system matrix on different formats.
Definition SystemMatrix.h:220
Base class for representing a system vector on different formats.
Definition SystemMatrix.h:32
Simple class for representing a point in 3D space.
Definition Vec3.h:27
A vector class with some added algebraic operations.
Definition matrix.h:64
Struct holding basis function values and derivatives.
Definition BasisFunctionVals.h:25
Struct representing the time domain.
Definition TimeDomain.h:23