IFEM  90A354
ASMu3Dmx.h
Go to the documentation of this file.
1 // $Id$
2 //==============================================================================
12 //==============================================================================
13 
14 #ifndef _ASM_U3D_MX_H
15 #define _ASM_U3D_MX_H
16 
17 #include "ASMu3D.h"
18 #include "ASMmxBase.h"
19 
20 
31 class ASMu3Dmx : public ASMu3D, private ASMmxBase
32 {
33 public:
35  explicit ASMu3Dmx(const CharVec& n_f);
37  ASMu3Dmx(const ASMu3Dmx& patch, const CharVec& n_f = CharVec(3,0));
39  virtual ~ASMu3Dmx() = default;
40 
42  virtual const LR::LRSplineVolume* getBasis(int basis = 1) const;
44  virtual LR::LRSplineVolume* getBasis(int basis = 1);
45 
46  // Methods for model generation
47  // ============================
48 
50  virtual bool readBasis(std::istream& is, size_t basis);
51 
55  virtual bool generateFEMTopology();
56 
60  virtual void clear(bool retainGeometry);
61 
63  virtual size_t getNoBasis() const { return m_basis.size(); }
65  virtual size_t getNoNodes(int basis) const;
67  virtual unsigned char getNoFields(int basis) const;
70  virtual unsigned char getNodalDOFs(size_t inod) const;
73  virtual char getNodeType(size_t inod) const;
76  virtual Vec3 getCoord(size_t inod) const;
77 
79  virtual void initMADOF(const int* sysMadof);
80 
81  // Methods for integration of finite element quantities.
82  // These are the main computational methods of the ASM class hierarchy.
83  // ====================================================================
84 
89  virtual bool integrate(Integrand& integrand,
90  GlobalIntegral& glbInt, const TimeDomain& time);
91 
97  virtual bool integrate(Integrand& integrand, int lIndex,
98  GlobalIntegral& glbInt, const TimeDomain& time);
99 
100 
101  // Post-processing methods
102  // =======================
103 
108  virtual bool getSolution(Matrix& sField, const Vector& locSol,
109  const IntVec& nodes) const;
110 
111  using ASMu3D::evalSolution;
124  virtual bool evalSolution(Matrix& sField, const Vector& locSol,
125  const RealArray* gpar, bool,
126  int deriv, int nf) const;
127 
140  virtual bool evalSolution(Matrix& sField, const IntegrandBase& integrand,
141  const RealArray* gpar, bool) const;
142 
147  virtual void extractNodeVec(const RealArray& globVec, RealArray& nodeVec,
148  unsigned char, int basis) const;
149 
154  virtual bool injectNodeVec(const RealArray& nodeVec, RealArray& globVec,
155  unsigned char, int basis) const;
156 
158  virtual size_t getNoRefineNodes() const;
159 
161  virtual size_t getNoRefineElms() const;
162 
163  using ASMu3D::refine;
167  virtual bool refine(const LR::RefineData& prm, Vectors& sol);
168 
173  virtual void remapErrors(RealArray& errors,
174  const RealArray& origErr, bool elemErrors) const;
175 
177  virtual bool separateProjectionBasis() const;
178 
179 private:
184  void getElementsAt(const RealArray& param,
185  std::vector<int>& elms,
186  std::vector<size_t>* sizes = nullptr) const;
187 
188 protected:
193  void generateThreadGroups(const Integrand& integrand, bool silence,
194  bool ignoreGlobalLM);
195 
196 private:
197  using SplinePtr = std::shared_ptr<LR::LRSplineVolume>;
198 
199  std::vector<SplinePtr> m_basis;
200  LR::LRSplineVolume* threadBasis;
201 };
202 
203 #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 unstructured 3D spline FE models.
std::vector< Real > RealArray
A real-valued array without algebraic operations.
Definition: ImmersedBoundaries.h:29
std::vector< Vector > Vectors
An array of real-valued vectors with algebraic operations.
Definition: MatVec.h:37
std::vector< unsigned char > CharVec
Convenience type.
Definition: ASM3D.h:42
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
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 unstructured 3D spline FE models.
Definition: ASMu3D.h:45
virtual bool refine(const LR::RefineData &prm, Vectors &sol)
Refines the mesh adaptively.
Definition: ASMLRSpline.C:219
Driver for assembly of unstructured 3D spline mixed FE models.
Definition: ASMu3Dmx.h:32
ASMu3Dmx(const CharVec &n_f)
The constructor initializes the dimension of each basis.
Definition: ASMu3Dmx.C:40
virtual bool separateProjectionBasis() const
Checks if a separate projection basis is used for this patch.
Definition: ASMu3Dmx.C:1041
virtual char getNodeType(size_t inod) const
Returns the classification of a node.
Definition: ASMu3Dmx.C:143
virtual void clear(bool retainGeometry)
Clears the contents of the patch, making it empty.
Definition: ASMu3Dmx.C:95
LR::LRSplineVolume * threadBasis
Basis for thread groups.
Definition: ASMu3Dmx.h:200
virtual bool getSolution(Matrix &sField, const Vector &locSol, const IntVec &nodes) const
Extracts the primary solution field at the specified nodes.
Definition: ASMu3Dmx.C:179
virtual size_t getNoRefineNodes() const
Returns the number of refinement nodes for this patch.
Definition: ASMu3Dmx.C:1006
virtual void remapErrors(RealArray &errors, const RealArray &origErr, bool elemErrors) const
Remaps element-wise errors from geometry mesh to refinement mesh.
Definition: ASMu3Dmx.C:991
virtual const LR::LRSplineVolume * getBasis(int basis=1) const
Returns the spline volume representing a basis of this patch.
Definition: ASMu3Dmx.C:57
virtual size_t getNoNodes(int basis) const
Returns the total number of nodes in this patch.
Definition: ASMu3Dmx.C:110
virtual void initMADOF(const int *sysMadof)
Initializes the patch level MADOF array for mixed problems.
Definition: ASMu3Dmx.C:158
virtual void extractNodeVec(const RealArray &globVec, RealArray &nodeVec, unsigned char, int basis) const
Extracts nodal results for this patch from the global vector.
Definition: ASMu3Dmx.C:164
virtual bool refine(int dir, const RealArray &xi)
Refines the parametrization by inserting extra tensor knots.
Definition: ASMu3D.C:201
virtual bool integrate(Integrand &integrand, GlobalIntegral &glbInt, const TimeDomain &time)
Evaluates an integral over the interior patch domain.
Definition: ASMu3Dmx.C:311
void generateThreadGroups(const Integrand &integrand, bool silence, bool ignoreGlobalLM)
Generates element groups for multi-threading of interior integrals.
Definition: ASMu3Dmx.C:939
virtual bool generateFEMTopology()
Generates the finite element topology data for the patch.
Definition: ASMu3Dmx.C:186
virtual bool readBasis(std::istream &is, size_t basis)
Reads a basis from the given input stream.
Definition: ASMu3Dmx.C:75
virtual unsigned char getNoFields(int basis) const
Returns the number of solution fields.
Definition: ASMu3Dmx.C:119
std::shared_ptr< LR::LRSplineVolume > SplinePtr
Pointer to spline.
Definition: ASMu3Dmx.h:197
virtual unsigned char getNodalDOFs(size_t inod) const
Returns the number of DOFs per node.
Definition: ASMu3Dmx.C:131
virtual size_t getNoRefineElms() const
Returns the number of refinement elements for this patch.
Definition: ASMu3Dmx.C:1012
virtual Vec3 getCoord(size_t inod) const
Returns the global coordinates for the given node.
Definition: ASMu3Dmx.C:920
virtual bool injectNodeVec(const RealArray &nodeVec, RealArray &globVec, unsigned char, int basis) const
Injects nodal results for this patch into a global vector.
Definition: ASMu3Dmx.C:171
virtual ~ASMu3Dmx()=default
Empty destructor.
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: ASMu3D.C:1528
virtual size_t getNoBasis() const
Returns the number of bases.
Definition: ASMu3Dmx.h:63
std::vector< SplinePtr > m_basis
All bases.
Definition: ASMu3Dmx.h:199
void getElementsAt(const RealArray &param, std::vector< int > &elms, std::vector< size_t > *sizes=nullptr) const
Finds the elements and associted sizes at given parametric point.
Definition: ASMu3Dmx.C:1018
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
A struct of data to control the mesh refinement.
Definition: ASMunstruct.h:44
Struct representing the time domain.
Definition: TimeDomain.h:23