IFEM 90A354
ASMu2Dmx.h
Go to the documentation of this file.
1// $Id$
2//==============================================================================
12//==============================================================================
13
14#ifndef _ASM_U2D_MX_H
15#define _ASM_U2D_MX_H
16
17#include "ASMu2D.h"
18#include "ASMmxBase.h"
19
20
31class ASMu2Dmx : public ASMu2D, private ASMmxBase
32{
33public:
35 ASMu2Dmx(unsigned char n_s, const CharVec& n_f);
37 ASMu2Dmx(const ASMu2Dmx& patch, const CharVec& n_f = CharVec(2,0));
39 virtual ~ASMu2Dmx() {}
40
42 virtual const LR::LRSplineSurface* getBasis(int basis = 1) const;
44 virtual LR::LRSplineSurface* 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
105 virtual bool integrate(Integrand& integrand, GlobalIntegral& glbInt,
106 const TimeDomain& time,
107 const ASM::InterfaceChecker& iChk);
108
109
110 // Post-processing methods
111 // =======================
112
117 virtual bool getSolution(Matrix& sField, const Vector& locSol,
118 const IntVec& nodes) const;
119
133 virtual bool evalSolution(Matrix& sField, const Vector& locSol,
134 const RealArray* gpar, bool,
135 int deriv, int nf) const;
136
148 virtual bool evalSolutionPiola(Matrix& sField, const Vector& locSol,
149 const RealArray* gpar, bool regular) const;
150
163 virtual bool evalSolution(Matrix& sField, const IntegrandBase& integrand,
164 const RealArray* gpar, bool) const;
165
170 virtual void extractNodeVec(const RealArray& globVec, RealArray& nodeVec,
171 unsigned char, int basis) const;
172
177 virtual bool injectNodeVec(const RealArray& nodeVec, RealArray& globVec,
178 unsigned char, int basis) const;
179
181 virtual size_t getNoRefineNodes() const;
182
184 virtual size_t getNoRefineElms() const;
185
186 using ASMu2D::refine;
190 virtual bool refine(const LR::RefineData& prm, Vectors& sol);
191
195 virtual void storeMesh(const std::string& fName, int fType) const;
196
205 virtual bool connectPatch(int edge, ASM2D& neighbor, int nedge, bool revers,
206 int basis, bool coordCheck, int thick);
207
215 virtual void getBoundaryNodes(int lIndex, IntVec& nodes,
216 int basis, int thick, int orient, bool local) const;
217
222 virtual void remapErrors(RealArray& errors,
223 const RealArray& origErr, bool elemErrors) const;
224
226 virtual bool separateProjectionBasis() const;
227
229 bool usePiola() const { return piola; }
230
231private:
236 void getElementsAt(const RealArray& param,
237 std::vector<int>& elms,
238 std::vector<size_t>* sizes = nullptr) const;
239
240protected:
246 void generateThreadGroups(const Integrand& integrand, bool silence,
247 bool ignoreGlobalLM);
248
249private:
250 using SplinePtr = std::shared_ptr<LR::LRSplineSurface>;
251
252 std::vector<SplinePtr> m_basis;
253 LR::LRSplineSurface* threadBasis;
254};
255
256#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 2D spline FE models.
std::vector< Real > RealArray
A real-valued array without algebraic operations.
Definition ImmersedBoundaries.h:32
std::vector< Vector > Vectors
An array of real-valued vectors with algebraic operations.
Definition MatVec.h:37
Abstract interface for 2D spline patches.
Definition ASM2D.h:33
std::vector< unsigned char > CharVec
Convenience type.
Definition ASM2D.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:1057
Base class for spline-based mixed finite element assembly drivers.
Definition ASMmxBase.h:35
bool piola
True if last used integrand was Piola mapped.
Definition ASMmxBase.h:81
Driver for assembly of unstructured 2D spline FE models.
Definition ASMu2D.h:50
virtual bool refine(int dir, const RealArray &xi, double scale)
Refines the parametrization by inserting extra tensor knots.
Definition ASMu2D.C:316
void generateThreadGroups(const Integrand &integrand, bool silence, bool ignoreGlobalLM)
Generates element groups for multi-threading of interior integrals.
Definition ASMu2D.C:2660
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 ASMu2D.C:2065
Driver for assembly of unstructured 2D spline mixed FE models.
Definition ASMu2Dmx.h:32
virtual bool separateProjectionBasis() const
Checks if a separate projection basis is used for this patch.
Definition ASMu2Dmx.C:1369
virtual void getBoundaryNodes(int lIndex, IntVec &nodes, int basis, int thick, int orient, bool local) const
Finds the global (or patch-local) node numbers on a patch boundary.
Definition ASMu2Dmx.C:1267
bool usePiola() const
Returns true if the last passed integrand used Piola mapping.
Definition ASMu2Dmx.h:229
virtual bool generateFEMTopology()
Generates the finite element topology data for the patch.
Definition ASMu2Dmx.C:187
virtual bool connectPatch(int edge, ASM2D &neighbor, int nedge, bool revers, int basis, bool coordCheck, int thick)
Connects all matching nodes on two adjacent boundary edges.
Definition ASMu2Dmx.C:1251
virtual void extractNodeVec(const RealArray &globVec, RealArray &nodeVec, unsigned char, int basis) const
Extracts nodal results for this patch from the global vector.
Definition ASMu2Dmx.C:165
virtual unsigned char getNoFields(int basis) const
Returns the number of solution fields.
Definition ASMu2Dmx.C:120
virtual void clear(bool retainGeometry)
Clears the contents of the patch, making it empty.
Definition ASMu2Dmx.C:96
virtual Vec3 getCoord(size_t inod) const
Returns the global coordinates for the given node.
Definition ASMu2Dmx.C:1180
std::shared_ptr< LR::LRSplineSurface > SplinePtr
Pointer to spline.
Definition ASMu2Dmx.h:250
virtual void remapErrors(RealArray &errors, const RealArray &origErr, bool elemErrors) const
Remaps element-wise errors from geometry mesh to refinement mesh.
Definition ASMu2Dmx.C:1278
virtual bool getSolution(Matrix &sField, const Vector &locSol, const IntVec &nodes) const
Extracts the primary solution field at the specified nodes.
Definition ASMu2Dmx.C:180
virtual size_t getNoRefineElms() const
Returns the number of refinement elements for this patch.
Definition ASMu2Dmx.C:1299
void generateThreadGroups(const Integrand &integrand, bool silence, bool ignoreGlobalLM)
Generates element groups for multi-threading of interior integrals.
Definition ASMu2Dmx.C:1199
virtual void storeMesh(const std::string &fName, int fType) const
Stores the mesh basis to encapsulated postscript files.
Definition ASMu2Dmx.C:1305
virtual void initMADOF(const int *sysMadof)
Initializes the patch level MADOF array for mixed problems.
Definition ASMu2Dmx.C:159
virtual bool evalSolutionPiola(Matrix &sField, const Vector &locSol, const RealArray *gpar, bool regular) const
Evaluates the primary solution field at the given points with Piola mapping.
Definition ASMu2Dmx.C:914
virtual bool readBasis(std::istream &is, size_t basis)
Reads a basis from the given input stream.
Definition ASMu2Dmx.C:76
virtual bool integrate(Integrand &integrand, GlobalIntegral &glbInt, const TimeDomain &time)
Evaluates an integral over the interior patch domain.
Definition ASMu2Dmx.C:324
virtual size_t getNoRefineNodes() const
Returns the number of refinement nodes for this patch.
Definition ASMu2Dmx.C:1293
virtual char getNodeType(size_t inod) const
Returns the classification of a node.
Definition ASMu2Dmx.C:144
virtual bool injectNodeVec(const RealArray &nodeVec, RealArray &globVec, unsigned char, int basis) const
Injects nodal results for this patch into a global vector.
Definition ASMu2Dmx.C:172
virtual ~ASMu2Dmx()
Empty destructor.
Definition ASMu2Dmx.h:39
virtual size_t getNoNodes(int basis) const
Returns the total number of nodes in this patch.
Definition ASMu2Dmx.C:111
std::vector< SplinePtr > m_basis
All bases.
Definition ASMu2Dmx.h:252
virtual bool refine(const LR::RefineData &prm, Vectors &sol)
Refines the mesh adaptively.
Definition ASMu2Dmx.C:1102
virtual size_t getNoBasis() const
Returns the number of bases.
Definition ASMu2Dmx.h:63
virtual unsigned char getNodalDOFs(size_t inod) const
Returns the number of DOFs per node.
Definition ASMu2Dmx.C:132
virtual bool evalSolution(Matrix &sField, const Vector &locSol, const RealArray *gpar, bool, int deriv, int nf) const
Evaluates the primary solution field at the given points.
Definition ASMu2Dmx.C:863
LR::LRSplineSurface * threadBasis
Basis for thread groups.
Definition ASMu2Dmx.h:253
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 ASMu2Dmx.C:1346
virtual const LR::LRSplineSurface * getBasis(int basis=1) const
Returns the spline surface representing a basis of this patch.
Definition ASMu2Dmx.C:58
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