IFEM 90A354
ASMs2Dmx.h
Go to the documentation of this file.
1// $Id$
2//==============================================================================
12//==============================================================================
13
14#ifndef _ASM_S2D_MX_H
15#define _ASM_S2D_MX_H
16
17#include "ASMs2D.h"
18#include "ASMmxBase.h"
19#include <memory>
20
21
32class ASMs2Dmx : public ASMs2D, private ASMmxBase
33{
34public:
36 ASMs2Dmx(unsigned char n_s, const CharVec& n_f);
38 ASMs2Dmx(const ASMs2Dmx& patch, const CharVec& n_f = CharVec(2,0));
40 virtual ~ASMs2Dmx() = default;
41
43 virtual const Go::SplineSurface* getBasis(int basis = 1) const;
45 virtual Go::SplineSurface* getBasis(int basis = 1);
46
50 virtual Go::SplineCurve* getBoundary(int dir, int basis = 1);
51
52
53 // Methods for model generation
54 // ============================
55
57 virtual bool readBasis(std::istream& is, size_t basis);
58
62 virtual bool generateFEMTopology();
63
67 virtual void clear(bool retainGeometry);
68
71 virtual Vec3 getCoord(size_t inod) const;
72
74 virtual size_t getNoBasis() const { return m_basis.size(); }
76 virtual size_t getNoNodes(int basis) const;
78 virtual unsigned char getNoFields(int basis) const;
81 virtual unsigned char getNodalDOFs(size_t inod) const;
84 virtual char getNodeType(size_t inod) const;
85
87 virtual void initMADOF(const int* sysMadof);
88
97 virtual bool connectPatch(int edge, ASM2D& neighbor, int nedge, bool revers,
98 int basis, bool coordCheck, int thick);
99
102 virtual void closeBoundaries(int dir, int, int);
103
104
105 // Methods for integration of finite element quantities.
106 // These are the main computational methods of the ASM class hierarchy.
107 // ====================================================================
108
113 virtual bool integrate(Integrand& integrand,
114 GlobalIntegral& glbInt, const TimeDomain& time);
115
121 virtual bool integrate(Integrand& integrand, int lIndex,
122 GlobalIntegral& glbInt, const TimeDomain& time);
123
129 virtual bool integrate(Integrand& integrand, GlobalIntegral& glbInt,
130 const TimeDomain& time, const ASM::InterfaceChecker& iChk);
131
132
133 // Post-processing methods
134 // =======================
135
142 virtual int evalPoint(const double* xi, double* param, Vec3& X) const;
143
148 virtual bool getSolution(Matrix& sField, const Vector& locSol,
149 const IntVec& nodes) const;
150
165 virtual bool evalSolution(Matrix& sField, const Vector& locSol,
166 const RealArray* gpar, bool regular,
167 int deriv, int nf) const;
168
180 virtual bool evalSolutionPiola(Matrix& sField, const Vector& locSol,
181 const RealArray* gpar, bool regular) const;
182
196 virtual bool evalSolution(Matrix& sField, const IntegrandBase& integrand,
197 const RealArray* gpar, bool regular) const;
198
200 virtual bool separateProjectionBasis() const;
201
206 virtual void extractNodeVec(const RealArray& globVec, RealArray& nodeVec,
207 unsigned char, int basis) const;
208
213 virtual bool injectNodeVec(const RealArray& nodeVec, RealArray& globVec,
214 unsigned char, int basis) const;
215
221 virtual void generateThreadGroups(const Integrand& integrand, bool silence,
222 bool ignoreGlobalLM);
223
224 using ASMs2D::getSize;
229 virtual bool getSize(int& n1, int& n2, int basis) const;
230
237 virtual void getBoundaryNodes(int lIndex, IntVec& nodes, int basis,
238 int thick, int, bool local) const;
239
241 bool usePiola() const { return piola; }
242
243protected:
245 virtual int getFirstItgElmNode() const;
247 virtual int getLastItgElmNode() const;
248
249 std::vector<std::shared_ptr<Go::SplineSurface>> m_basis;
250};
251
252#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 2D spline FE models.
std::vector< Real > RealArray
A real-valued array without algebraic operations.
Definition ImmersedBoundaries.h:32
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 structured 2D spline FE models.
Definition ASMs2D.h:39
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 ASMs2D.C:2700
virtual void generateThreadGroups(const Integrand &integrand, bool silence, bool ignoreGlobalLM)
Generates element groups for multi-threading of interior integrals.
Definition ASMs2D.C:3043
virtual bool getSize(int &n1, int &n2, int basis=0) const
Returns the number of nodal points in each parameter direction.
Definition ASMs2D.C:1570
Driver for assembly of structured 2D spline mixed FE models.
Definition ASMs2Dmx.h:33
virtual ~ASMs2Dmx()=default
Destructor.
virtual char getNodeType(size_t inod) const
Returns the classification of a node.
Definition ASMs2Dmx.C:163
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 ASMs2Dmx.C:1077
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 ASMs2Dmx.C:1327
std::vector< std::shared_ptr< Go::SplineSurface > > m_basis
Vector of bases.
Definition ASMs2Dmx.h:249
virtual void clear(bool retainGeometry)
Clears the contents of the patch, making it empty.
Definition ASMs2Dmx.C:118
virtual int getLastItgElmNode() const
Returns 0-based index of last node on integration basis.
Definition ASMs2Dmx.C:1344
virtual bool getSize(int &n1, int &n2, int basis) const
Returns the number of nodal points in each parameter direction.
Definition ASMs2Dmx.C:447
virtual bool generateFEMTopology()
Generates the finite element topology data for the patch.
Definition ASMs2Dmx.C:207
virtual Go::SplineCurve * getBoundary(int dir, int basis=1)
Returns the spline curve representing a boundary of this patch.
Definition ASMs2Dmx.C:67
virtual void generateThreadGroups(const Integrand &integrand, bool silence, bool ignoreGlobalLM)
Generates element groups for multi-threading of interior integrals.
Definition ASMs2Dmx.C:1299
virtual bool injectNodeVec(const RealArray &nodeVec, RealArray &globVec, unsigned char, int basis) const
Inject nodal results for this patch into a global vector.
Definition ASMs2Dmx.C:192
bool usePiola() const
Returns true if the last passed integrand used Piola mapping.
Definition ASMs2Dmx.h:241
virtual bool evalSolution(Matrix &sField, const Vector &locSol, const RealArray *gpar, bool regular, int deriv, int nf) const
Evaluates the primary solution field at the given points.
Definition ASMs2Dmx.C:1014
virtual void extractNodeVec(const RealArray &globVec, RealArray &nodeVec, unsigned char, int basis) const
Extracts nodal results for this patch from the global vector.
Definition ASMs2Dmx.C:185
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 ASMs2Dmx.C:382
virtual const Go::SplineSurface * getBasis(int basis=1) const
Returns the spline surface representing a basis of this patch.
Definition ASMs2Dmx.C:49
virtual int evalPoint(const double *xi, double *param, Vec3 &X) const
Evaluates the geometry at a specified point.
Definition ASMs2Dmx.C:995
virtual bool readBasis(std::istream &is, size_t basis)
Reads a basis from the given input stream.
Definition ASMs2Dmx.C:87
virtual void initMADOF(const int *sysMadof)
Initializes the patch level MADOF array for mixed problems.
Definition ASMs2Dmx.C:179
virtual Vec3 getCoord(size_t inod) const
Returns the global coordinates for the given node.
Definition ASMs2Dmx.C:412
virtual bool separateProjectionBasis() const
Checks if a separate projection basis is used for this patch.
Definition ASMs2Dmx.C:1350
virtual bool integrate(Integrand &integrand, GlobalIntegral &glbInt, const TimeDomain &time)
Evaluates an integral over the interior patch domain.
Definition ASMs2Dmx.C:461
virtual void closeBoundaries(int dir, int, int)
Makes two opposite boundary edges periodic.
Definition ASMs2Dmx.C:404
virtual size_t getNoNodes(int basis) const
Returns the total number of nodes in this patch.
Definition ASMs2Dmx.C:134
virtual bool getSolution(Matrix &sField, const Vector &locSol, const IntVec &nodes) const
Extract the primary solution field at the specified nodes.
Definition ASMs2Dmx.C:200
virtual unsigned char getNodalDOFs(size_t inod) const
Returns the number of DOFs per node.
Definition ASMs2Dmx.C:149
virtual int getFirstItgElmNode() const
Returns 0-based index of first node on integration basis.
Definition ASMs2Dmx.C:1338
virtual size_t getNoBasis() const
Returns the number of bases.
Definition ASMs2Dmx.h:74
virtual unsigned char getNoFields(int basis) const
Returns the number of solution fields.
Definition ASMs2Dmx.C:143
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