IFEM  90A354
ASMs3DmxLag.h
Go to the documentation of this file.
1 // $Id$
2 //==============================================================================
12 //==============================================================================
13 
14 #ifndef _ASM_S3D_MX_LAG_H
15 #define _ASM_S3D_MX_LAG_H
16 
17 #include "ASMs3DLag.h"
18 #include "ASMmxBase.h"
19 #include <array>
20 
21 
29 class ASMs3DmxLag : public ASMs3DLag, private ASMmxBase
30 {
33  {
34  public:
37  BasisFunctionCache(const ASMs3DLag& pch);
38 
43 
45  virtual ~BasisFunctionCache() = default;
46 
47  protected:
51  BasisFunctionVals calculatePt(size_t, size_t gp, bool red) const override;
52 
54  void calculateAll() override;
55  };
56 
57 public:
59  explicit ASMs3DmxLag(const CharVec& n_f);
61  ASMs3DmxLag(const ASMs3DmxLag& patch, const CharVec& n_f = CharVec(2,0));
63  virtual ~ASMs3DmxLag() {}
64 
65 
66  // Methods for model generation
67  // ============================
68 
72  virtual bool generateFEMTopology();
73 
77  virtual void clear(bool retainGeometry);
78 
80  virtual size_t getNoBasis() const { return 2; }
82  virtual size_t getNoNodes(int basis) const;
84  virtual unsigned char getNoFields(int basis) const;
87  virtual unsigned char getNodalDOFs(size_t inod) const;
90  virtual char getNodeType(size_t inod) const;
91 
93  virtual void initMADOF(const int* sysMadof);
94 
103  virtual bool connectPatch(int face, ASM3D& neighbor, int nface, int norient,
104  int basis, bool coordCheck, int thick);
105 
108  virtual void closeBoundaries(int dir, int, int);
109 
110 
111  // Methods for integration of finite element quantities.
112  // These are the main computational methods of the ASM class hierarchy.
113  // ====================================================================
114 
119  virtual bool integrate(Integrand& integrand,
120  GlobalIntegral& glbInt, const TimeDomain& time);
121 
127  virtual bool integrate(Integrand& integrand, int lIndex,
128  GlobalIntegral& glbInt, const TimeDomain& time);
129 
130 
131  // Post-processing methods
132  // =======================
133 
138  virtual bool getSolution(Matrix& sField, const Vector& locSol,
139  const IntVec& nodes) const;
140 
148  virtual bool evalSolution(Matrix& sField, const IntegrandBase& integrand,
149  const int*, char = 0) const;
150 
155  virtual bool evalSolution(Matrix& sField, const Vector& locSol,
156  const RealArray*, bool, int, int nf) const;
157 
162  virtual bool evalSolution(Matrix& sField, const IntegrandBase& integrand,
163  const RealArray* gpar, bool) const;
164 
169  virtual void extractNodeVec(const RealArray& globVec, RealArray& nodeVec,
170  unsigned char, int basis) const;
171 
172 protected:
173 
174  // Internal utility methods
175  // ========================
176 
182  virtual bool getSize(int& n1, int& n2, int& n3, int basis) const;
183 
184 private:
185  std::vector<size_t> nxx;
186  std::vector<size_t> nyx;
187  std::vector<size_t> nzx;
188 
189  std::vector< std::array<size_t,3> > elem_sizes;
190 };
191 
192 #endif
std::vector< int > IntVec
General integer vector.
Definition: ASMbase.h:25
Base class for spline-based mixed finite element assembly drivers.
Driver for assembly of structured 3D Lagrange FE models.
std::vector< Real > RealArray
A real-valued array without algebraic operations.
Definition: ImmersedBoundaries.h:29
Abstract interface for 3D spline patches.
Definition: ASM3D.h:33
std::vector< unsigned char > CharVec
Convenience type.
Definition: ASM3D.h:42
unsigned char nf
Number of primary solution fields (1 or larger)
Definition: ASMbase.h:1033
Base class for spline-based mixed finite element assembly drivers.
Definition: ASMmxBase.h:35
Implementation of basis function cache.
Definition: ASMs3DLag.h:31
Driver for assembly of structured 3D Lagrange FE models.
Definition: ASMs3DLag.h:27
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
Implementation of basis function cache.
Definition: ASMs3D.h:80
Implementation of basis function cache.
Definition: ASMs3DmxLag.h:33
virtual ~BasisFunctionCache()=default
Empty destructor.
void calculateAll() override
Calculates basis function info in all integration points.
Definition: ASMs3DmxLag.C:722
BasisFunctionVals calculatePt(size_t, size_t gp, bool red) const override
Calculates basis function info in a single integration point.
Definition: ASMs3DmxLag.C:703
Driver for assembly of structured 3D Lagrange mixed FE models.
Definition: ASMs3DmxLag.h:30
virtual unsigned char getNodalDOFs(size_t inod) const
Returns the number of DOFs per node.
Definition: ASMs3DmxLag.C:66
virtual char getNodeType(size_t inod) const
Returns the classification of a node.
Definition: ASMs3DmxLag.C:78
virtual void initMADOF(const int *sysMadof)
Initializes the patch level MADOF array for mixed problems.
Definition: ASMs3DmxLag.C:90
std::vector< size_t > nxx
Basis dimensions in 1st parameter direction.
Definition: ASMs3DmxLag.h:185
virtual void closeBoundaries(int dir, int, int)
Makes two opposite boundary faces periodic.
Definition: ASMs3DmxLag.C:242
virtual bool generateFEMTopology()
Generates the finite element topology data for the patch.
Definition: ASMs3DmxLag.C:110
virtual void extractNodeVec(const RealArray &globVec, RealArray &nodeVec, unsigned char, int basis) const
Extracts nodal results for this patch from the global vector.
Definition: ASMs3DmxLag.C:96
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: ASMs3DLag.C:943
virtual ~ASMs3DmxLag()
Empty destructor.
Definition: ASMs3DmxLag.h:63
ASMs3DmxLag(const CharVec &n_f)
The constructor initializes the dimension of each basis.
Definition: ASMs3DmxLag.C:26
virtual void clear(bool retainGeometry)
Clears the contents of the patch, making it empty.
Definition: ASMs3DmxLag.C:39
virtual unsigned char getNoFields(int basis) const
Returns the number of solution fields.
Definition: ASMs3DmxLag.C:57
virtual size_t getNoBasis() const
Returns the number of bases.
Definition: ASMs3DmxLag.h:80
std::vector< size_t > nzx
Basis dimensions in 3rd parameter direction.
Definition: ASMs3DmxLag.h:187
virtual bool integrate(Integrand &integrand, GlobalIntegral &glbInt, const TimeDomain &time)
Evaluates an integral over the interior patch domain.
Definition: ASMs3DmxLag.C:263
virtual size_t getNoNodes(int basis) const
Returns the total number of nodes in this patch.
Definition: ASMs3DmxLag.C:48
virtual bool getSize(int &n1, int &n2, int &n3, int basis) const
Returns the number of nodal points in each parameter direction.
Definition: ASMs3DmxLag.C:250
virtual bool connectPatch(int face, ASM3D &neighbor, int nface, int norient, int basis, bool coordCheck, int thick)
Connects all matching nodes on two adjacent boundary faces.
Definition: ASMs3DmxLag.C:213
virtual bool getSolution(Matrix &sField, const Vector &locSol, const IntVec &nodes) const
Extract the primary solution field at the specified nodes.
Definition: ASMs3DmxLag.C:103
std::vector< std::array< size_t, 3 > > elem_sizes
Size on each basis.
Definition: ASMs3DmxLag.h:189
std::vector< size_t > nyx
Basis dimensions in 2nd parameter direction.
Definition: ASMs3DmxLag.h:186
BasisFunctionCache()
Default constructor.
Definition: BasisFunctionCache.C:22
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
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