IFEM  90A354
ASMu3D.h
Go to the documentation of this file.
1 // $Id$
2 //==============================================================================
12 //==============================================================================
13 
14 #ifndef _ASM_U3D_H
15 #define _ASM_U3D_H
16 
17 #include "ASMLRSpline.h"
18 #include "ASM3D.h"
19 #include "BasisFunctionCache.h"
20 #include "LRSpline/LRSpline.h"
21 #include "ThreadGroups.h"
22 #include <memory>
23 
24 class FiniteElement;
25 
26 namespace utl {
27  class Point;
28 }
29 
30 namespace Go {
31  class SplineVolume;
32 }
33 
34 namespace LR {
35  class LRSplineVolume;
36 }
37 
38 
44 class ASMu3D : public ASMLRSpline, public ASM3D
45 {
46 protected:
49  {
50  public:
54  BasisFunctionCache(const ASMu3D& pch, bool useBezier = true);
55 
59  BasisFunctionCache(const BasisFunctionCache& cache, int b);
60 
62  virtual ~BasisFunctionCache() = default;
63 
64  protected:
66  bool internalInit() override;
67 
72  BasisFunctionVals calculatePt(size_t el, size_t gp, bool reduced) const override;
73 
81  const std::array<double,3>& du,
82  size_t el, size_t gp, bool reduced) const;
83 
85  void calculateAll() override;
86 
88  struct BezierExtract {
93  };
94 
98 
99  const ASMu3D& patch;
100 
101  private:
103  bool setupQuadrature();
104  };
105 
106 public:
108  explicit ASMu3D(unsigned char n_f = 3);
110  ASMu3D(const ASMu3D& patch, unsigned char n_f = 0);
112  virtual ~ASMu3D() {}
113 
115  virtual const LR::LRSplineVolume* getBasis(int basis = 1) const;
117  virtual LR::LRSplineVolume* getBasis(int basis = 1);
118 
119 
120  // Methods for model generation and refinement
121  // ===========================================
122 
124  virtual bool read(std::istream&);
126  virtual bool write(std::ostream&, int) const;
127 
131  virtual bool generateFEMTopology();
132 
136  virtual void clear(bool retainGeometry = false);
137 
143  virtual bool getElementCoordinates(Matrix& X, int iel,
144  bool forceItg = false) const;
145 
149  virtual void getElmConnectivities(IntMat& neighs,
150  int basis = ASM::INTEGRATION_BASIS) const;
151 
153  virtual IntMat getElmNodes(int basis) const;
154 
158  virtual void getNodalCoordinates(Matrix& X, bool = false) const;
159 
162  virtual Vec3 getCoord(size_t inod) const;
163 
166  virtual bool updateCoords(const Vector& displ);
167 
174  virtual void getBoundaryNodes(int lIndex, IntVec& nodes, int basis,
175  int, int orient, bool local) const;
176 
184  virtual void getBoundary1Nodes(int lEdge, IntVec& nodes, int basis,
185  int orient, bool local,
186  bool open = false) const;
187 
193  virtual int getCorner(int I, int J, int K, int basis) const;
194 
199  virtual bool getOrder(int& p1, int& p2, int& p3) const;
200 
202  virtual size_t getNoNodes(int basis = 0) const;
203 
205  virtual size_t getNoProjectionNodes() const;
206 
210  virtual bool uniformRefine(int dir, int nInsert);
211  using ASMLRSpline::refine;
215  virtual bool refine(int dir, const RealArray& xi);
219  virtual bool refine(const LR::RefineData& prm, Vectors& sol);
225  virtual bool raiseOrder(int ru, int rv, int rw, bool setOrder);
226 
228  virtual bool createProjectionBasis(bool init);
229 
231  virtual void setMinimumSize(double size) { vMin = size; }
234  virtual double getMinimumSize(int nrefinements) const;
238  virtual bool checkElementSize(int elmId, bool globalNum = true) const;
239 
243  void copyRefinement(LR::LRSplineVolume* basis, int multiplicity = 1) const;
244 
245 
246  // Various methods for preprocessing of boundary conditions and patch topology
247  // ===========================================================================
248 
255  virtual void constrainFace(int dir, bool open, int dof,
256  int code = 0, char basis = 1);
265  virtual size_t constrainFaceLocal(int dir, bool open, int dof, int code = 0,
266  bool project = false, char T1 = '\0');
267 
274  virtual void constrainEdge(int lEdge, bool open, int dof,
275  int code = 0, char basis = 1);
276 
292  virtual void constrainLine(int fdir, int ldir, double xi, int dof,
293  int code = 0, char basis = 1);
294 
306  virtual void constrainCorner(int I, int J, int K, int dof,
307  int code = 0, char basis = 1);
320  virtual void constrainNode(double xi, double eta, double zeta, int dof,
321  int code = 0);
322 
336  virtual bool connectPatch(int face, ASM3D& neighbor, int nface, int norient,
337  int = 0, bool coordCheck = true, int thick = 1);
338 
339 
340  // Methods for integration of finite element quantities.
341  // These are the main computational methods of the ASM class hierarchy.
342  // ====================================================================
343 
345  virtual void getNoBouPoints(size_t& nPt, char ldim, char lindx);
346 
351  virtual bool integrate(Integrand& integrand,
352  GlobalIntegral& glbInt, const TimeDomain& time);
353 
359  virtual bool integrate(Integrand& integrand, int lIndex,
360  GlobalIntegral& glbInt, const TimeDomain& time);
361 
367  virtual bool integrateEdge(Integrand& integrand, int lEdge,
368  GlobalIntegral& glbInt, const TimeDomain& time);
369 
375  virtual bool diracPoint(Integrand& integrand, GlobalIntegral& glbInt,
376  const double* param, const Vec3& pval);
377 
383  virtual bool updateDirichlet(const std::map<int,RealFunc*>& func,
384  const std::map<int,VecFunc*>& vfunc, double time,
385  const std::map<int,int>* g2l = nullptr);
386 
387  // Post-processing methods
388  // =======================
389 
396  virtual int evalPoint(const double* xi, double* param, Vec3& X) const;
397 
401  virtual int findElementContaining(const double* param) const;
402 
407  virtual double findPoint(Vec3& X, double* param) const;
408 
413  virtual bool getGridParameters(RealArray& prm, int dir, int nSegSpan) const;
414 
419  virtual bool tesselate(ElementBlock& grid, const int* npe) const;
420 
427  virtual bool evalSolution(Matrix& sField, const Vector& locSol,
428  const int* npe, int n_f, bool piola) const;
429 
435  virtual bool evalSolution(Matrix& sField, const Vector& locSol,
436  const RealArray* gpar, bool = false,
437  int deriv = 0, int = 0) const;
438 
444  virtual bool evalProjSolution(Matrix& sField, const Vector& locSol,
445  const int* npe, int n_f) const;
446 
451  virtual bool evaluate(const FunctionBase* func, RealArray& vec,
452  int, double time) const;
453 
468  virtual bool evalSolution(Matrix& sField, const IntegrandBase& integrand,
469  const int* npe, char project = '\0') const;
470 
472  virtual bool separateProjectionBasis() const;
473 
476  virtual Field* getProjectedField(const Vector& coefs) const;
477 
480  virtual Fields* getProjectedFields(const Vector& coefs, size_t = 0) const;
481 
484  void setOutputMaster(const ASMu3D* pch)
485  { outputMaster = pch; }
486 
491  virtual void extractElmRes(const Matrix& globRes, Matrix& elmRes,
492  size_t internalFirst) const;
493 
494 protected:
497  {
498  LR::LRSplineVolume* lr;
499  LR::parameterEdge edg;
503  int dof;
504  int code;
505  int corners[4];
506 
508  DirichletFace(LR::LRSplineVolume* sv, int dir,
509  int d = 0, int c = 0, int offset = 1);
511  bool isCorner(int b) const;
512  };
513 
516  LR::LRSplineVolume* projectSolution(const IntegrandBase& integrand) const;
519  LR::LRSplineVolume* scRecovery(const IntegrandBase& integrand) const;
520 
528  LR::LRSplineVolume* regularInterpolation(const RealArray& upar,
529  const RealArray& vpar,
530  const RealArray& wpar,
531  const Matrix& points,
532  int basis) const;
533 
534 public:
537  virtual LR::LRSpline* evalSolution(const IntegrandBase& integrand) const;
538 
548  virtual bool evalSolution(Matrix& sField, const IntegrandBase& integrand,
549  const RealArray* gpar, bool = false) const;
550 
556  bool faceL2projection(const DirichletFace& face, const FunctionBase& values,
557  Real2DMat& result, double time) const;
558 
564  virtual bool transferGaussPtVars(const LR::LRSpline* old_basis,
565  const RealArray& oldVar, RealArray& newVar,
566  int nGauss) const;
572  virtual bool transferGaussPtVarsN(const LR::LRSpline* old_basis,
573  const RealArray& oldVar, RealArray& newVar,
574  int nGauss) const;
575 
581  virtual bool transferCntrlPtVars(const LR::LRSpline* old_basis,
582  RealArray& newVar, int nGauss) const;
583 
589  virtual void generateThreadGroups(const Integrand& integrand, bool silence,
590  bool ignoreGlobalLM);
591 
592 protected:
593 
594  // Internal utility methods
595  // ========================
596 
601  virtual void findBoundaryElms(IntVec& elms, int lIndex, int orient) const;
602 
608  virtual bool assembleL2matrices(SystemMatrix& A, SystemVector& B,
609  const L2Integrand& integrand,
610  bool continuous) const;
611 
622  bool connectBasis(int face, ASMu3D& neighbor, int nface, int norient,
623  int basis = 1, int slave = 0, int master = 0,
624  bool coordCheck = true, int thick = 1);
625 
633  void getGaussPointParameters(RealArray& uGP, int dir, int nGauss,
634  int iel, const double* xi,
635  const LR::LRSplineVolume* spline = nullptr) const;
636 
641  bool getGrevilleParameters(RealArray& prm, int dir, int basisNum = 1) const;
642 
646  bool getQuasiInterplParameters(RealArray& prm, int dir) const;
647 
651  double getParametricArea(int iel, int dir) const;
652 
658  double getElementCorners(int iel, std::vector<Vec3>& XC,
659  RealArray* uC = nullptr) const;
663  void getCornerPoints(int iel, std::vector<utl::Point>& XC) const;
664 
666  void evaluateBasis(int iel, double u, double v, double w,
667  Vector& N, Matrix& dNdu, int basis = 1) const;
668 
670  void evaluateBasis(Vector& N, Matrix& dNdu,
671  const Matrix& C, const Matrix& B) const;
672 
674  void evaluateBasis(int iel, FiniteElement& fe, Matrix& dNdu,
675  int basis = 1) const;
676 
678  void evaluateBasis(int iel, double u, double v, double w,
679  Vector& N, Matrix& dNdu, Matrix3D& d2Ndu2, int basis = 1) const;
680 
687  virtual int evalPoint(int iel, const double* param, Vec3& X) const;
688 
690  virtual void generateThreadGroupsFromElms(const IntVec& elms);
691 
693  virtual void generateProjThreadGroupsFromElms(const IntVec& elms);
694 
696  virtual void changeNumThreads();
697 
702  virtual void remapErrors(RealArray& errors,
703  const RealArray& origErr, bool elemErrors) const;
704 
708  virtual void extendRefinementDomain(IntSet& refineIndices,
709  const IntSet& neighborIndices) const;
710 
712  std::shared_ptr<LR::LRSplineVolume> createLRfromTensor();
713 
714 public:
716  virtual size_t getNoBoundaryElms(char lIndex, char ldim) const;
717 
718 protected:
719  std::shared_ptr<LR::LRSplineVolume> lrspline;
720 
721  const ASMu3D* outputMaster = nullptr;
722 
723  Go::SplineVolume* tensorspline;
724  Go::SplineVolume* tensorPrjBas;
725  // The tensor spline object is kept for backward compatability with the REFINE
726  // and RAISEORDER key-words, although we take note that there is a possibility
727  // of optimization since all mapping values and Jacobians may be performed on
728  // this object for increased efficiency.
729 
731  std::vector<DirichletFace> dirich;
732 
735 
737  std::vector<std::unique_ptr<BasisFunctionCache>> myCache;
738 
739 private:
740  mutable double vMin;
741 };
742 
743 #endif
Abstract interface for 3D patches.
Base class for FE assembly drivers using LR B-splines.
std::vector< int > IntVec
General integer vector.
Definition: ASMbase.h:25
std::vector< IntVec > IntMat
General 2D integer matrix.
Definition: ASMbase.h:26
std::set< int > IntSet
General integer set.
Definition: ASMunstruct.h:22
Basis function cache.
static SystemMatrix * K
Pointer to coefficient matrix A.
Definition: EigSolver.C:91
std::vector< RealArray > Real2DMat
A real-valued two-dimensional array without algebraic operations.
Definition: ImmersedBoundaries.h:34
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< Matrix > Matrices
An array of real-valued matrices with algebraic operations.
Definition: MatVec.h:39
Threading group partitioning.
static const double T1[2]
1-point rule coordinates.
Definition: TriangleQuadrature.C:19
Abstract interface for 3D spline patches.
Definition: ASM3D.h:33
Base class for LR B-spline FE assembly drivers.
Definition: ASMLRSpline.h:76
virtual bool refine(const LR::RefineData &prm, Vectors &sol)
Refines the mesh adaptively.
Definition: ASMLRSpline.C:219
virtual bool transferCntrlPtVars(const LR::LRSpline *oldBasis, RealArray &newVar, int nGauss) const =0
Transfers control point variables from old basis to this patch.
virtual int evalPoint(const double *xi, double *param, Vec3 &X) const=0
Evaluates the geometry at a specified point.
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
int nGauss
Numerical integration scheme for this patch.
Definition: ASMbase.h:1064
virtual void generateThreadGroups(const Integrand &, bool, bool)
Generates element groups for multi-threading of interior integrals.
Definition: ASMbase.h:516
Implementation of basis function cache.
Definition: ASMu3D.h:49
const ASMu3D & patch
Reference to patch cache is for.
Definition: ASMu3D.h:99
BezierExtract reducedB
Bezier extraction for reduced basis.
Definition: ASMu3D.h:97
void calculateAll() override
Calculates basis function info in all integration points.
Definition: ASMu3D.C:2655
virtual ~BasisFunctionCache()=default
Empty destructor.
bool internalInit() override
Implementation specific initialization.
Definition: ASMu3D.C:2487
bool bezierEnabled
True to enable Bezier extraction.
Definition: ASMu3D.h:95
BezierExtract mainB
Bezier extraction for main basis.
Definition: ASMu3D.h:96
BasisFunctionVals calculatePrm(FiniteElement &fe, const std::array< double, 3 > &du, size_t el, size_t gp, bool reduced) const
Calculates basis function info in a single integration point.
Definition: ASMu3D.C:2622
bool setupQuadrature()
Configure quadratures.
Definition: ASMu3D.C:2542
BasisFunctionVals calculatePt(size_t el, size_t gp, bool reduced) const override
Calculates basis function info in a single integration point.
Definition: ASMu3D.C:2597
Driver for assembly of unstructured 3D spline FE models.
Definition: ASMu3D.h:45
virtual bool read(std::istream &)
Creates an instance by reading the given input stream.
Definition: ASMu3D.C:95
virtual void changeNumThreads()
Hook for changing number of threads.
Definition: ASMu3D.C:1938
virtual void constrainEdge(int lEdge, bool open, int dof, int code=0, char basis=1)
Constrains all DOFs on a given boundary edge.
Definition: ASMu3D.C:612
virtual void constrainCorner(int I, int J, int K, int dof, int code=0, char basis=1)
Constrains a corner node identified by the three parameter indices.
Definition: ASMu3D.C:633
virtual bool tesselate(ElementBlock &grid, const int *npe) const
Creates a hexahedron element model of this patch for visualization.
Definition: ASMu3D.C:1471
bool faceL2projection(const DirichletFace &face, const FunctionBase &values, Real2DMat &result, double time) const
Projects inhomogenuous dirichlet conditions by continuous L2-fit.
Definition: ASMu3Drecovery.C:474
LR::LRSplineVolume * projectSolution(const IntegrandBase &integrand) const
Projects the secondary solution field onto the primary basis.
Definition: ASMu3Drecovery.C:75
virtual void extendRefinementDomain(IntSet &refineIndices, const IntSet &neighborIndices) const
Extends the refinement domain with information for neighbors.
Definition: ASMu3D.C:2270
virtual bool uniformRefine(int dir, int nInsert)
Refines the parametrization by inserting tensor knots uniformly.
Definition: ASMu3D.C:176
virtual void getBoundaryNodes(int lIndex, IntVec &nodes, int basis, int, int orient, bool local) const
Finds the global (or patch-local) node numbers on a patch boundary.
Definition: ASMu3D.C:1831
virtual bool refine(const LR::RefineData &prm, Vectors &sol)
Refines the mesh adaptively.
Definition: ASMLRSpline.C:219
virtual void extractElmRes(const Matrix &globRes, Matrix &elmRes, size_t internalFirst) const
Extracts element results for this patch from a global vector.
Definition: ASMu3D.C:2448
virtual bool integrate(Integrand &integrand, GlobalIntegral &glbInt, const TimeDomain &time)
Evaluates an integral over the interior patch domain.
Definition: ASMu3D.C:904
virtual bool transferCntrlPtVars(const LR::LRSpline *oldBasis, RealArray &newVar, int nGauss) const=0
Transfers control point variables from old basis to this patch.
LR::LRSplineVolume * scRecovery(const IntegrandBase &integrand) const
Projects the secondary solution using a superconvergent approach.
Definition: ASMu3Drecovery.C:247
bool connectBasis(int face, ASMu3D &neighbor, int nface, int norient, int basis=1, int slave=0, int master=0, bool coordCheck=true, int thick=1)
Connects all matching nodes on two adjacent boundary faces.
Definition: ASMu3D.C:370
virtual double getMinimumSize(int nrefinements) const
Defines the minimum element volume for adaptive refinement.
Definition: ASMu3D.C:2242
double getParametricArea(int iel, int dir) const
Returns boundary face area in the parameter space for an element.
Definition: ASMu3D.C:662
virtual size_t getNoNodes(int basis=0) const
Returns the total number of nodes in this patch.
Definition: ASMu3D.C:1999
virtual void generateProjThreadGroupsFromElms(const IntVec &elms)
Generate element groups from a partition.
Definition: ASMu3D.C:2442
virtual bool getGridParameters(RealArray &prm, int dir, int nSegSpan) const
Calculates parameter values for visualization nodal points.
Definition: ASMu3D.C:1429
virtual void constrainFace(int dir, bool open, int dof, int code=0, char basis=1)
Constrains all DOFs on a given boundary face.
Definition: ASMu3D.C:501
virtual void getElmConnectivities(IntMat &neighs, int basis=ASM::INTEGRATION_BASIS) const
Calculates the matrix of element neighbour connectivities.
Definition: ASMu3D.C:2367
virtual bool updateDirichlet(const std::map< int, RealFunc * > &func, const std::map< int, VecFunc * > &vfunc, double time, const std::map< int, int > *g2l=nullptr)
Updates the time-dependent in-homogeneous Dirichlet coefficients.
Definition: ASMu3D.C:1945
virtual bool transferGaussPtVarsN(const LR::LRSpline *old_basis, const RealArray &oldVar, RealArray &newVar, int nGauss) const
Transfers Gauss point variables from old basis to this patch.
Definition: ASMu3D.C:2138
virtual void generateThreadGroupsFromElms(const IntVec &elms)
Generate element groups from a partition.
Definition: ASMu3D.C:2424
virtual void constrainLine(int fdir, int ldir, double xi, int dof, int code=0, char basis=1)
Constrains all DOFs along a line on a given boundary face.
Definition: ASMu3D.C:625
virtual bool separateProjectionBasis() const
Checks if a separate projection basis is used for this patch.
Definition: ASMu3D.C:2014
virtual bool checkElementSize(int elmId, bool globalNum=true) const
Checks if the specified element is larger than the minimum size.
Definition: ASMu3D.C:2253
LR::LRSplineVolume * regularInterpolation(const RealArray &upar, const RealArray &vpar, const RealArray &wpar, const Matrix &points, int basis) const
Interpolates an LR spline at a given set of parametric coordinates.
Definition: ASMu3Drecovery.C:409
std::shared_ptr< LR::LRSplineVolume > createLRfromTensor()
Converts current tensor spline object to LR-spline.
Definition: ASMu3D.C:270
virtual void findBoundaryElms(IntVec &elms, int lIndex, int orient) const
Finds the patch-local element numbers on a patch boundary.
Definition: ASMu3D.C:2391
void evaluateBasis(int iel, double u, double v, double w, Vector &N, Matrix &dNdu, int basis=1) const
Evaluate all basis functions and first derivatives on one element.
Definition: ASMu3D.C:838
std::vector< DirichletFace > dirich
Inhomogeneous Dirichlet boundary condition data.
Definition: ASMu3D.h:731
virtual ~ASMu3D()
Empty destructor.
Definition: ASMu3D.h:112
virtual Vec3 getCoord(size_t inod) const
Returns the global coordinates for the given node.
Definition: ASMu3D.C:730
virtual IntMat getElmNodes(int basis) const
Returns the matrix of nodal point correspondance for given basis.
Definition: ASMu3D.C:2383
virtual void clear(bool retainGeometry=false)
Clears the contents of the patch, making it empty.
Definition: ASMu3D.C:154
Matrices myBezierExtract
Bezier extraction matrices.
Definition: ASMu3D.h:734
virtual bool generateFEMTopology()
Generates the finite element topology data for the patch.
Definition: ASMu3D.C:283
std::shared_ptr< LR::LRSplineVolume > lrspline
The LR-spline volume object.
Definition: ASMu3D.h:719
virtual int findElementContaining(const double *param) const
Returns the element that contains a specified spatial point.
Definition: ASMu3D.C:1416
std::vector< std::unique_ptr< BasisFunctionCache > > myCache
Basis function cache.
Definition: ASMu3D.h:737
double vMin
Minimum element volume for adaptive refinement.
Definition: ASMu3D.h:740
ASMu3D(unsigned char n_f=3)
Default constructor.
Definition: ASMu3D.C:46
virtual bool transferGaussPtVars(const LR::LRSpline *old_basis, const RealArray &oldVar, RealArray &newVar, int nGauss) const
Transfers Gauss point variables from old basis to this patch.
Definition: ASMu3D.C:2072
virtual bool getOrder(int &p1, int &p2, int &p3) const
Returns the polynomial order in each parameter direction.
Definition: ASMu3D.C:1865
virtual bool updateCoords(const Vector &displ)
Updates the nodal coordinates for this patch.
Definition: ASMu3D.C:739
virtual bool raiseOrder(int ru, int rv, int rw, bool setOrder)
Raises the order of the tensor spline object for this patch.
Definition: ASMu3D.C:228
virtual bool getElementCoordinates(Matrix &X, int iel, bool forceItg=false) const
Returns a matrix with nodal coordinates for an element.
Definition: ASMu3D.C:690
virtual void setMinimumSize(double size)
Sets the minimum element volume for adaptive refinement.
Definition: ASMu3D.h:231
bool getQuasiInterplParameters(RealArray &prm, int dir) const
Calculates parameter values for the Quasi-Interpolation points.
Go::SplineVolume * tensorspline
Pointer to original tensor spline object.
Definition: ASMu3D.h:723
virtual double findPoint(Vec3 &X, double *param) const
Searches for the specified Cartesian point in the patch.
Definition: ASMu3D.C:1422
virtual size_t getNoBoundaryElms(char lIndex, char ldim) const
Returns the number of elements on a boundary.
Definition: ASMu3D.C:765
virtual void getBoundary1Nodes(int lEdge, IntVec &nodes, int basis, int orient, bool local, bool open=false) const
Finds the global (or patch-local) node numbers on a patch boundary.
Definition: ASMu3D.C:563
virtual bool evalProjSolution(Matrix &sField, const Vector &locSol, const int *npe, int n_f) const
Evaluates the projected solution field at all visualization points.
Definition: ASMu3D.C:1626
virtual void getNoBouPoints(size_t &nPt, char ldim, char lindx)
Computes the number of boundary integration points in this patch.
Definition: ASMu3D.C:1892
void copyRefinement(LR::LRSplineVolume *basis, int multiplicity=1) const
Copies the refinement to another spline volume.
Definition: ASMu3D.C:2458
void getCornerPoints(int iel, std::vector< utl::Point > &XC) const
Computes the element corner coordinates and parameters.
Definition: ASMu3D.C:825
double getElementCorners(int iel, std::vector< Vec3 > &XC, RealArray *uC=nullptr) const
Computes the element corner coordinates.
Definition: ASMu3D.C:795
virtual bool integrateEdge(Integrand &integrand, int lEdge, GlobalIntegral &glbInt, const TimeDomain &time)
Evaluates a boundary integral over a patch edge.
Definition: ASMu3D.C:1348
void setOutputMaster(const ASMu3D *pch)
Set master patch for VTF output.
Definition: ASMu3D.h:484
virtual void constrainNode(double xi, double eta, double zeta, int dof, int code=0)
Constrains a node identified by three relative parameter values.
Definition: ASMu3D.C:651
virtual bool assembleL2matrices(SystemMatrix &A, SystemVector &B, const L2Integrand &integrand, bool continuous) const
Assembles L2-projection matrices for the secondary solution.
Definition: ASMu3Drecovery.C:107
Go::SplineVolume * tensorPrjBas
Pointer to tensor spline projection base.
Definition: ASMu3D.h:724
bool getGrevilleParameters(RealArray &prm, int dir, int basisNum=1) const
Calculates parameter values for the Greville points.
Definition: ASMu3Drecovery.C:30
virtual bool createProjectionBasis(bool init)
Creates a separate projection basis for this patch.
Definition: ASMu3D.C:256
virtual Fields * getProjectedFields(const Vector &coefs, size_t=0) const
Returns a field using the projection basis.
Definition: ASMu3D.C:2032
virtual bool write(std::ostream &, int) const
Writes the geometry of the SplineVolume object to given stream.
Definition: ASMu3D.C:141
virtual int getCorner(int I, int J, int K, int basis) const
Returns the node index for a given corner.
Definition: ASMu3D.C:1875
void getGaussPointParameters(RealArray &uGP, int dir, int nGauss, int iel, const double *xi, const LR::LRSplineVolume *spline=nullptr) const
Extracts parameter values of the Gauss points in one direction.
Definition: ASMu3D.C:778
const Matrices & bezierExtract
Bezier extraction matrices.
Definition: ASMu3D.h:733
virtual void getNodalCoordinates(Matrix &X, bool=false) const
Returns a matrix with all nodal coordinates within the patch.
Definition: ASMu3D.C:720
virtual Field * getProjectedField(const Vector &coefs) const
Returns a field using the projection basis.
Definition: ASMu3D.C:2020
virtual bool connectPatch(int face, ASM3D &neighbor, int nface, int norient, int=0, bool coordCheck=true, int thick=1)
Connects all matching nodes on two adjacent boundary faces.
Definition: ASMu3D.C:355
virtual void remapErrors(RealArray &errors, const RealArray &origErr, bool elemErrors) const
Remap element wise errors to basis functions.
Definition: ASMu3D.C:2045
virtual const LR::LRSplineVolume * getBasis(int basis=1) const
Returns the spline volume representing a basis of this patch.
Definition: ASMu3D.C:69
virtual bool diracPoint(Integrand &integrand, GlobalIntegral &glbInt, const double *param, const Vec3 &pval)
Integrates a spatial dirac-delta function over a patch.
Definition: ASMu3D.C:1357
virtual size_t getNoProjectionNodes() const
Returns the number of projection nodes for this patch.
Definition: ASMu3D.C:2008
virtual void generateThreadGroups(const Integrand &integrand, bool silence, bool ignoreGlobalLM)
Generates element groups for multi-threading of interior integrals.
Definition: ASMu3D.C:1916
virtual bool evaluate(const FunctionBase *func, RealArray &vec, int, double time) const
Evaluates and interpolates a function over a given geometry.
Definition: ASMu3D.C:2061
const ASMu3D * outputMaster
Master patch to use for VTF output.
Definition: ASMu3D.h:721
virtual size_t constrainFaceLocal(int dir, bool open, int dof, int code=0, bool project=false, char T1='\0')
Constrains all DOFs in local directions on a given boundary face.
Definition: ASMu3D.C:556
BasisFunctionCache()
Default constructor.
Definition: BasisFunctionCache.C:22
Class for storage of a standard FE grid block.
Definition: ElementBlock.h:27
Interface class for scalar fields.
Definition: Field.h:30
Base class for vector fields.
Definition: Fields.h:35
Class representing a finite element.
Definition: FiniteElement.h:29
Base class for unary spatial functions of arbitrary result type.
Definition: Function.h:147
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
Abstract class for evaluating integrand or function.
Definition: GlbL2projector.h:39
Base class for representing a system matrix on different formats.
Definition: SystemMatrix.h:220
Base class for representing a system vector on different formats.
Definition: SystemMatrix.h:32
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
@ INTEGRATION_BASIS
Integration basis.
Definition: ASMenums.h:58
Utilities for LR-splines.
Definition: AdaptiveSetup.h:22
Go::SplineCurve * project(const Go::SplineCurve *curve, const FunctionBase &f, int nComp=1, Real time=Real(0))
Projects a spatial function onto a spline curve.
Definition: SplineUtils.C:204
General utility classes and functions.
Definition: SIMoptions.h:22
Struct holding bezier extraction matrices.
Definition: ASMu3D.h:88
Matrix dNdw
Basis function w-derivatives.
Definition: ASMu3D.h:92
Matrix N
Basis function values.
Definition: ASMu3D.h:89
Matrix dNdv
Basis function v-derivatives.
Definition: ASMu3D.h:91
Matrix dNdu
Basis function u-derivatives.
Definition: ASMu3D.h:90
Struct representing an inhomogeneous Dirichlet boundary condition.
Definition: ASMu3D.h:497
int dof
Local DOF to constrain along the boundary.
Definition: ASMu3D.h:503
IntMat MNPC
Matrix of Nodal-Point Correpondanse.
Definition: ASMu3D.h:502
LR::LRSplineVolume * lr
Pointer to the right object (in case of multiple bases)
Definition: ASMu3D.h:498
bool isCorner(int b) const
Returns true if basis function b is at a corner point.
Definition: ASMu3D.C:488
IntVec MLGE
Local-to-Global Element numbers.
Definition: ASMu3D.h:500
IntVec MLGN
Local-to-Global Nodal numbers.
Definition: ASMu3D.h:501
int code
Inhomogeneous Dirichlet condition code.
Definition: ASMu3D.h:504
int corners[4]
Index of the four corners of this face.
Definition: ASMu3D.h:505
LR::parameterEdge edg
Which face is this.
Definition: ASMu3D.h:499
DirichletFace(LR::LRSplineVolume *sv, int dir, int d=0, int c=0, int offset=1)
The constructor detects the face corners.
Definition: ASMu3D.C:425
Struct holding basis function values and derivatives.
Definition: BasisFunctionVals.h:25
A struct of data to control the mesh refinement.
Definition: ASMunstruct.h:44
Struct representing the time domain.
Definition: TimeDomain.h:23