IFEM  90A354
ASMs3Dmx.h
Go to the documentation of this file.
1 // $Id$
2 //==============================================================================
12 //==============================================================================
13 
14 #ifndef _ASM_S3D_MX_H
15 #define _ASM_S3D_MX_H
16 
17 #include "ASMs3D.h"
18 #include "ASMmxBase.h"
19 #include <memory>
20 
21 
32 class ASMs3Dmx : public ASMs3D, private ASMmxBase
33 {
34 public:
36  explicit ASMs3Dmx(const CharVec& n_f);
38  ASMs3Dmx(const ASMs3Dmx& patch, const CharVec& n_f = CharVec(2,0));
40  virtual ~ASMs3Dmx() = default;
41 
43  virtual const Go::SplineVolume* getBasis(int basis = 1) const;
45  virtual Go::SplineVolume* getBasis(int basis = 1);
49  virtual Go::SplineSurface* getBoundary(int dir, int basis = 1);
50 
51 
52  // Methods for model generation
53  // ============================
54 
58  virtual bool generateFEMTopology();
59 
63  virtual void clear(bool retainGeometry);
64 
67  virtual Vec3 getCoord(size_t inod) const;
68 
70  virtual bool readBasis(std::istream& is, size_t basis);
71 
73  virtual size_t getNoBasis() const { return m_basis.size(); }
75  virtual size_t getNoNodes(int basis) const;
77  virtual unsigned char getNoFields(int basis) const;
80  virtual unsigned char getNodalDOFs(size_t inod) const;
83  virtual char getNodeType(size_t inod) const;
84 
86  virtual void initMADOF(const int* sysMadof);
87 
96  virtual bool connectPatch(int face, ASM3D& neighbor, int nface, int norient,
97  int basis, bool coordCheck, int thick);
98 
101  virtual void closeBoundaries(int dir, int, int);
102 
103 
104  // Methods for integration of finite element quantities.
105  // These are the main computational methods of the ASM class hierarchy.
106  // ====================================================================
107 
112  virtual bool integrate(Integrand& integrand,
113  GlobalIntegral& glbInt, const TimeDomain& time);
114 
120  virtual bool integrate(Integrand& integrand, int lIndex,
121  GlobalIntegral& glbInt, const TimeDomain& time);
122 
128  virtual bool integrate(Integrand& integrand, GlobalIntegral& glbInt,
129  const TimeDomain& time, const ASM::InterfaceChecker& iChk);
130 
131  // Post-processing methods
132  // =======================
133 
140  virtual int evalPoint(const double* xi, double* param, Vec3& X) const;
141 
146  virtual bool getSolution(Matrix& sField, const Vector& locSol,
147  const IntVec& nodes) const;
148 
149  using ASMs3D::evalSolution;
163  virtual bool evalSolution(Matrix& sField, const Vector& locSol,
164  const RealArray* gpar, bool regular,
165  int deriv, int nf) const;
166 
180  virtual bool evalSolution(Matrix& sField, const IntegrandBase& integrand,
181  const RealArray* gpar, bool regular) const;
182 
184  virtual bool separateProjectionBasis() const;
185 
190  virtual void extractNodeVec(const RealArray& globVec, RealArray& nodeVec,
191  unsigned char, int basis) const;
192 
197  virtual bool injectNodeVec(const RealArray& nodeVec, RealArray& globVec,
198  unsigned char, int basis) const;
199 
204  virtual void generateThreadGroups(const Integrand& integrand, bool silence,
205  bool ignoreGlobalLM);
206 
210  virtual void generateThreadGroups(char lIndex, bool silence, bool);
211 
217  virtual bool getSize(int& n1, int& n2, int& n3, int basis) const;
218 
219 protected:
221  virtual int getFirstItgElmNode() const;
223  virtual int getLastItgElmNode() const;
224 
231  virtual void getBoundaryNodes(int lIndex, IntVec& nodes, int basis,
232  int thick, int, bool local) const;
233 
235  std::array<int,3> getMaxSplineOrder() const;
236 
237  std::vector<std::shared_ptr<Go::SplineVolume>> m_basis;
238 };
239 
240 #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 spline 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
Base class to check for internal boundary integrand contributions.
Definition: Interface.h:40
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
Driver for assembly of structured 3D spline FE models.
Definition: ASMs3D.h:39
Driver for assembly of structured 3D spline mixed FE models.
Definition: ASMs3Dmx.h:33
virtual const Go::SplineVolume * getBasis(int basis=1) const
Returns the spline surface representing a basis of this patch.
Definition: ASMs3Dmx.C:51
virtual Vec3 getCoord(size_t inod) const
Returns the global coordinates for the given node.
Definition: ASMs3Dmx.C:415
virtual ~ASMs3Dmx()=default
Empty Destructor.
virtual int getFirstItgElmNode() const
Returns 0-based index of first node on integration basis.
Definition: ASMs3Dmx.C:1317
virtual bool getSize(int &n1, int &n2, int &n3, int basis) const
Returns the number of nodal points in each parameter direction.
Definition: ASMs3Dmx.C:451
virtual size_t getNoBasis() const
Returns the number of bases.
Definition: ASMs3Dmx.h:73
virtual bool separateProjectionBasis() const
Checks if a separate projection basis is used for this patch.
Definition: ASMs3Dmx.C:1329
virtual void getBoundaryNodes(int lIndex, IntVec &nodes, int basis, int thick, int, bool local) const
Finds the global (or patch-local) node numbers on a patch boundary.
Definition: ASMs3Dmx.C:1306
virtual bool integrate(Integrand &integrand, GlobalIntegral &glbInt, const TimeDomain &time)
Evaluates an integral over the interior patch domain.
Definition: ASMs3Dmx.C:468
virtual int getLastItgElmNode() const
Returns 0-based index of last node on integration basis.
Definition: ASMs3Dmx.C:1323
virtual size_t getNoNodes(int basis) const
Returns the total number of nodes in this patch.
Definition: ASMs3Dmx.C:120
virtual char getNodeType(size_t inod) const
Returns the classification of a node.
Definition: ASMs3Dmx.C:149
virtual Go::SplineSurface * getBoundary(int dir, int basis=1)
Returns the spline curve representing a boundary of this patch.
Definition: ASMs3Dmx.C:69
virtual bool generateFEMTopology()
Generates the finite element topology data for the patch.
Definition: ASMs3Dmx.C:193
virtual void initMADOF(const int *sysMadof)
Initializes the patch level MADOF array for mixed problems.
Definition: ASMs3Dmx.C:165
virtual unsigned char getNodalDOFs(size_t inod) const
Returns the number of DOFs per node.
Definition: ASMs3Dmx.C:135
virtual void closeBoundaries(int dir, int, int)
Makes two opposite boundary faces periodic.
Definition: ASMs3Dmx.C:407
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: ASMs3Dmx.C:379
virtual void extractNodeVec(const RealArray &globVec, RealArray &nodeVec, unsigned char, int basis) const
Extracts nodal results for this patch from the global vector.
Definition: ASMs3Dmx.C:171
std::vector< std::shared_ptr< Go::SplineVolume > > m_basis
Vector of bases.
Definition: ASMs3Dmx.h:237
virtual void clear(bool retainGeometry)
Clears the contents of the patch, making it empty.
Definition: ASMs3Dmx.C:104
std::array< int, 3 > getMaxSplineOrder() const
Returns the maximum spline orders for thread groups calculations.
Definition: ASMs3Dmx.C:1260
virtual unsigned char getNoFields(int basis) const
Returns the number of solution fields.
Definition: ASMs3Dmx.C:129
ASMs3Dmx(const CharVec &n_f)
The constructor initializes the dimension of each basis.
Definition: ASMs3Dmx.C:37
virtual int evalPoint(const double *xi, double *param, Vec3 &X) const
Evaluates the geometry at a specified point.
Definition: ASMs3Dmx.C:1078
virtual void generateThreadGroups(const Integrand &integrand, bool silence, bool ignoreGlobalLM)
Generates element groups for multi-threading of interior integrals.
Definition: ASMs3Dmx.C:1275
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 bool getSolution(Matrix &sField, const Vector &locSol, const IntVec &nodes) const
Extract the primary solution field at the specified nodes.
Definition: ASMs3Dmx.C:186
virtual bool injectNodeVec(const RealArray &nodeVec, RealArray &globVec, unsigned char, int basis) const
Injects nodal results for this patch into a global vector.
Definition: ASMs3Dmx.C:178
virtual bool readBasis(std::istream &is, size_t basis)
Reads a basis from the given input stream.
Definition: ASMs3Dmx.C:82
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
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
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 representing the time domain.
Definition: TimeDomain.h:23