IFEM  90A354
ASMs3DLag.h
Go to the documentation of this file.
1 // $Id$
2 //==============================================================================
12 //==============================================================================
13 
14 #ifndef _ASM_S3D_LAG_H
15 #define _ASM_S3D_LAG_H
16 
17 #include "ASMs3D.h"
18 #include "ASMLagBase.h"
19 
20 
26 class ASMs3DLag : public ASMs3D, protected ASMLagBase
27 {
28 protected:
31  {
32  public:
35  BasisFunctionCache(const ASMs3DLag& pch);
36 
41 
43  virtual ~BasisFunctionCache() = default;
44 
50  double getParam(int dir, size_t el, size_t gp, bool reduced = false) 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 
72 public:
74  explicit ASMs3DLag(unsigned char n_f = 3);
76  ASMs3DLag(const ASMs3D& patch, unsigned char n_f);
78  ASMs3DLag(const ASMs3DLag& patch, unsigned char n_f);
80  ASMs3DLag(const ASMs3DLag& patch);
82  virtual ~ASMs3DLag() {}
83 
84 
85  // Methods for model generation
86  // ============================
87 
89  virtual bool write(std::ostream& os, int = 0) const;
90 
94  virtual bool generateFEMTopology();
95 
99  virtual void clear(bool retainGeometry = false);
100 
106  virtual bool addXElms(short int dim, short int item,
107  size_t nXn, IntVec& nodes);
108 
113  virtual bool getElementCoordinates(Matrix& X, int iel, bool = true) const;
114 
118  virtual void getNodalCoordinates(Matrix& X, bool = false) const;
119 
122  virtual Vec3 getCoord(size_t inod) const;
123 
125  virtual Vec3 getElementCenter(int iel) const;
126 
131  virtual bool getGridParameters(RealArray& prm, int dir, int nSegSpan) const;
132 
139  virtual void constrainFace(int dir, bool open, int dof,
140  int code = 0, char basis = 1);
141 
148  virtual void constrainEdge(int lEdge, bool open, int dof,
149  int code = 0, char basis = 1);
150 
151 protected:
155  void setCoord(size_t inod, const Vec3& Xnod);
156 
160  virtual void findBoundaryElms(IntVec& elms, int lIndex, int = 0) const;
161 
164  virtual int findElement(double u, double v, double w,
165  double* xi = nullptr, double* eta = nullptr,
166  double* zeta = nullptr) const;
167 
168 public:
171  virtual bool updateCoords(const Vector& displ);
172 
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 
200  virtual bool integrateEdge(Integrand& integrand, int lEdge,
201  GlobalIntegral& glbInt, const TimeDomain& time);
202 
203 
204  // Post-processing methods
205  // =======================
206 
212  virtual int evalPoint(const double* xi, double* param, Vec3& X) const;
213 
217  virtual bool tesselate(ElementBlock& grid, const int*) const;
218 
219  using ASMs3D::evalSolution;
227  virtual bool evalSolution(Matrix& sField, const Vector& locSol,
228  const int*, int n_f, bool) const;
229 
240  virtual bool evalSolution(Matrix& sField, const Vector& locSol,
241  const RealArray* gpar, bool regular,
242  int, int) const;
243 
250  virtual bool evalSolution(Matrix& sField, const IntegrandBase& integrand,
251  const int*, char) const;
252 
263  virtual bool evalSolution(Matrix& sField, const IntegrandBase& integrand,
264  const RealArray* gpar, bool regular) const;
265 
271  virtual bool evaluate(const ASMbase* basis, const Vector& locVec,
272  RealArray& vec, int basisNum) const;
273 
278  virtual bool getOrder(int& pu, int& pv, int& pw) const;
279 
284  virtual bool getSize(int& n1, int& n2, int& n3, int = 0) const;
285 
287  virtual void generateThreadGroups(const Integrand&, bool, bool);
290  virtual void generateThreadGroups(char lIndex, bool, bool);
291 
293  virtual IntMat getElmNodes(int basis) const;
294 
296  virtual size_t getNoBoundaryElms(char lIndex, char ldim) const;
297 
299  virtual size_t getNoProjectionNodes() const;
300 
306  virtual bool assembleL2matrices(SystemMatrix& A, SystemVector& B,
307  const L2Integrand& integrand,
308  bool continuous) const;
309 
310 private:
312  static void createMNPC(size_t nx, size_t ny, size_t nz,
313  int p1, int p2, int p3, IntMat& MNPC);
314 
315 protected:
325  virtual bool evalSolPt(int iel, double xi, double eta, double zeta,
326  size_t nCmp, const Vector& pchSol,
327  RealArray& ptSol, RealArray& N) const;
328 
329  size_t nx;
330  size_t ny;
331  size_t nz;
332  int p1;
333  int p2;
334  int p3;
335 };
336 
337 #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 3D spline FE models.
std::vector< Real > RealArray
A real-valued array without algebraic operations.
Definition: ImmersedBoundaries.h:29
Common base class for Lagrange FE models.
Definition: ASMLagBase.h:27
void updateOrigin(const Vec3 &origin)
Updates patch origin by adding a constant to all nodes.
Definition: ASMLagBase.C:72
Base class for spline-based finite element (FE) assembly drivers.
Definition: ASMbase.h:70
const IntMat & MNPC
Matrix of Nodal Point Correspondance.
Definition: ASMbase.h:1040
Implementation of basis function cache.
Definition: ASMs3DLag.h:31
virtual ~BasisFunctionCache()=default
Empty destructor.
double getParam(int dir, size_t el, size_t gp, bool reduced=false) const override
Obtain a single integration point parameter.
Definition: ASMs3DLag.C:1550
size_t index(size_t, size_t gp, bool) const override
Obtain global integration point index.
Definition: ASMs3DLag.h:58
BasisFunctionVals calculatePt(size_t, size_t gp, bool red) const override
Calculates basis function info in a single integration point.
Definition: ASMs3DLag.C:1559
void setupParameters() override
Configure quadrature points.
Definition: ASMs3DLag.C:1539
bool internalInit() override
Implementation specific initialization.
Definition: ASMs3DLag.C:1526
void calculateAll() override
Calculates basis function info in all integration points.
Definition: ASMs3DLag.C:1583
Driver for assembly of structured 3D Lagrange FE models.
Definition: ASMs3DLag.h:27
virtual bool evalSolPt(int iel, double xi, double eta, double zeta, size_t nCmp, const Vector &pchSol, RealArray &ptSol, RealArray &N) const
Evaluates a nodal solution field at specified point in an element.
Definition: ASMs3DLag.C:1043
int p2
Polynomial order in second parameter direction.
Definition: ASMs3DLag.h:333
ASMs3DLag(unsigned char n_f=3)
Default constructor.
Definition: ASMs3DLag.C:33
int p1
Polynomial order in first parameter direction.
Definition: ASMs3DLag.h:332
virtual bool getSize(int &n1, int &n2, int &n3, int=0) const
Returns the number of nodal points in each parameter direction.
Definition: ASMs3DLag.C:287
size_t nz
Number of nodes in third parameter direction.
Definition: ASMs3DLag.h:331
virtual size_t getNoProjectionNodes() const
Returns the number of projection nodes for this patch.
Definition: ASMs3DLag.C:1423
virtual bool getElementCoordinates(Matrix &X, int iel, bool=true) const
Returns a matrix with nodal coordinates for an element.
Definition: ASMs3DLag.C:242
virtual void constrainEdge(int lEdge, bool open, int dof, int code=0, char basis=1)
Constrains all DOFs on a given boundary edge.
Definition: ASMs3DLag.C:1416
virtual bool generateFEMTopology()
Generates the finite element topology data for the patch.
Definition: ASMs3DLag.C:147
ASMs3DLag(const ASMs3D &patch, unsigned char n_f)
Special constructor creating a Lagrang patch from a Spline patch,.
virtual bool write(std::ostream &os, int=0) const
Writes the FEM basis to given stream.
Definition: ASMs3DLag.C:1378
virtual void getNodalCoordinates(Matrix &X, bool=false) const
Returns a matrix with all nodal coordinates within the patch.
Definition: ASMs3DLag.C:262
virtual bool evaluate(const ASMbase *basis, const Vector &locVec, RealArray &vec, int basisNum) const
Evaluates and interpolates a field over a given geometry.
Definition: ASMs3DLag.C:1384
virtual bool getGridParameters(RealArray &prm, int dir, int nSegSpan) const
Calculates parameter values for visualization nodal points.
Definition: ASMs3DLag.C:1342
virtual size_t getNoBoundaryElms(char lIndex, char ldim) const
Returns the number of elements on a boundary.
Definition: ASMs3DLag.C:297
void setCoord(size_t inod, const Vec3 &Xnod)
Assigned global coordinates for the given node.
Definition: ASMs3DLag.C:217
virtual void clear(bool retainGeometry=false)
Clears the contents of the patch, making it empty.
Definition: ASMs3DLag.C:64
virtual bool addXElms(short int dim, short int item, size_t nXn, IntVec &nodes)
Adds extraordinary elements associated with a patch boundary.
Definition: ASMs3DLag.C:74
virtual ~ASMs3DLag()
Empty destructor.
Definition: ASMs3DLag.h:82
virtual bool updateCoords(const Vector &displ)
Updates the nodal coordinates for this patch.
Definition: ASMs3DLag.C:271
int p3
Polynomial order in third parameter direction.
Definition: ASMs3DLag.h:334
virtual void constrainFace(int dir, bool open, int dof, int code=0, char basis=1)
Constrains all DOFs on a given boundary face.
Definition: ASMs3DLag.C:1409
virtual void generateThreadGroups(const Integrand &, bool, bool)
Generates element groups for multi-threading of interior integrals.
Definition: ASMs3DLag.C:1197
virtual void findBoundaryElms(IntVec &elms, int lIndex, int=0) const
Finds the patch-local element numbers on a patch boundary.
Definition: ASMs3DLag.C:1310
virtual int evalPoint(const double *xi, double *param, Vec3 &X) const
Evaluates the geometry at a specified point.
Definition: ASMs3DLag.C:889
size_t nx
Number of nodes in first parameter direction.
Definition: ASMs3DLag.h:329
virtual bool integrate(Integrand &integrand, GlobalIntegral &glbInt, const TimeDomain &time)
Evaluates an integral over the interior patch domain.
Definition: ASMs3DLag.C:327
virtual int findElement(double u, double v, double w, double *xi=nullptr, double *eta=nullptr, double *zeta=nullptr) const
Finds the element containing specified parametric point.
Definition: ASMs3DLag.C:950
virtual bool getOrder(int &pu, int &pv, int &pw) const
Returns the polynomial order in each parameter direction.
Definition: ASMs3DLag.C:277
virtual bool integrateEdge(Integrand &integrand, int lEdge, GlobalIntegral &glbInt, const TimeDomain &time)
Evaluates a boundary integral over a patch edge.
Definition: ASMs3DLag.C:745
virtual bool assembleL2matrices(SystemMatrix &A, SystemVector &B, const L2Integrand &integrand, bool continuous) const
Assembles L2-projection matrices for the secondary solution.
Definition: ASMs3DLag.C:1429
virtual bool tesselate(ElementBlock &grid, const int *) const
Creates a hexahedron element model of this patch for visualization.
Definition: ASMs3DLag.C:913
static void createMNPC(size_t nx, size_t ny, size_t nz, int p1, int p2, int p3, IntMat &MNPC)
Creates matrix of nodal point correspondance for a structured grid.
Definition: ASMs3DLag.C:1269
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: ASMs3D.C:3131
virtual Vec3 getElementCenter(int iel) const
Returns the geometric center of an element.
Definition: ASMs3DLag.C:229
virtual Vec3 getCoord(size_t inod) const
Returns the global coordinates for the given node.
Definition: ASMs3DLag.C:208
size_t ny
Number of nodes in second parameter direction.
Definition: ASMs3DLag.h:330
virtual IntMat getElmNodes(int basis) const
Returns the matrix of nodal point correspondance for given basis.
Definition: ASMs3DLag.C:1241
Implementation of basis function cache.
Definition: ASMs3D.h:80
Driver for assembly of structured 3D spline FE models.
Definition: ASMs3D.h:39
virtual bool evalSolution(Matrix &sField, const Vector &locSol, const int *npe, int n_f=0, bool piola=false) const
Evaluates the primary solution field at all visualization points.
Definition: ASMbase.C:1735
BasisFunctionCache()
Default constructor.
Definition: BasisFunctionCache.C:22
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:39
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