IFEM 90A354
ASMu2D.h
Go to the documentation of this file.
1// $Id$
2//==============================================================================
12//==============================================================================
13
14#ifndef _ASM_U2D_H
15#define _ASM_U2D_H
16
17#include "ASMLRSpline.h"
18#include "ASM2D.h"
19#include "BasisFunctionCache.h"
20#include "Interface.h"
21#include "LRSpline/LRSpline.h"
22#include "ThreadGroups.h"
23#include <memory>
24
25class FiniteElement;
26
27namespace utl {
28 class Point;
29}
30
31namespace Go {
32 class SplineSurface;
33 struct BasisPtsSf;
34 struct BasisDerivsSf;
35 struct BasisDerivsSf2;
36 struct BasisDerivsSf3;
37}
38
39namespace LR {
40 class LRSplineSurface;
41}
42
43
49class ASMu2D : public ASMLRSpline, public ASM2D
50{
51protected:
54 {
55 public:
58 BasisFunctionCache(const ASMu2D& pch);
59
63 BasisFunctionCache(const BasisFunctionCache& cache, int b);
64
66 virtual ~BasisFunctionCache() = default;
67
68 protected:
70 bool internalInit() override;
71
76 BasisFunctionVals calculatePt(size_t el, size_t gp, bool reduced) const override;
77
79 void calculateAll() override;
80
81 protected:
82 const ASMu2D& patch;
83
84 private:
86 bool setupQuadrature();
87 };
88
89public:
92 {
93 public:
95 explicit InterfaceChecker(const ASMu2D& pch);
97 virtual ~InterfaceChecker() {}
100 virtual short int hasContribution(int iel, int = -1,
101 int = -1, int = -1) const;
106 const RealArray& getIntersections(int iel, int edge,
107 int* cont = nullptr) const;
108
109 protected:
111
114 int continuity = 0;
116 };
117
119 std::map<int,Intersection> intersections;
120 };
121
123 ASMu2D(unsigned char n_s = 2, unsigned char n_f = 2);
125 ASMu2D(const ASMu2D& patch, unsigned char n_f = 0);
127 virtual ~ASMu2D() { geomB = nullptr; }
128
130 virtual const LR::LRSplineSurface* getBasis(int basis = 1) const;
132 virtual LR::LRSplineSurface* getBasis(int basis = 1);
133
134
135 // Methods for model generation and refinement
136 // ===========================================
137
139 virtual bool read(std::istream&);
141 virtual bool write(std::ostream&, int) const;
142
146 virtual bool generateFEMTopology();
147
151 virtual void clear(bool retainGeometry = false);
152
158 virtual bool getElementCoordinates(Matrix& X, int iel,
159 bool forceItg = false) const;
160
164 virtual void getElmConnectivities(IntMat& neighs,
165 int basis = ASM::INTEGRATION_BASIS) const;
166
168 virtual IntMat getElmNodes(int basis) const;
169
173 virtual void getNodalCoordinates(Matrix& X, bool = false) const
174 { this->getCoordinates(X, nsd, *lrspline); }
175
178 virtual Vec3 getCoord(size_t inod) const;
179
182 virtual bool updateCoords(const Vector& displ);
183
190 virtual void getBoundaryNodes(int lIndex, IntVec& nodes, int basis, int = 1,
191 int orient = 0, bool local = false) const;
192
197 virtual bool getOrder(int& p1, int& p2, int& p3) const;
198
200 virtual size_t getNoNodes(int basis = 0) const;
201
203 virtual size_t getNoProjectionNodes() const;
204
209 bool diagonalRefine(int minBasisfunctions);
214 bool cornerRefine(int minBasisfunctions);
219 bool uniformRefine(int minBasisfunctions);
223 virtual bool uniformRefine(int dir, int nInsert);
229 virtual bool refine(int dir, const RealArray& xi, double scale);
233 virtual bool refine(const LR::RefineData& prm, Vectors& sol);
237 virtual bool raiseOrder(int ru, int rv);
238
240 virtual bool createProjectionBasis(bool init);
241
243 virtual void setMinimumSize(double size) { aMin = size; }
246 virtual double getMinimumSize(int nrefinements) const;
250 virtual bool checkElementSize(int elmId, bool globalNum = true) const;
251
255 void copyRefinement(LR::LRSplineSurface* basis, int multiplicity = 1) const;
256
257
258 // Various methods for preprocessing of boundary conditions and patch topology
259 // ===========================================================================
260
267 virtual void constrainEdge(int dir, bool open, int dof, int code, char basis);
275 virtual size_t constrainEdgeLocal(int dir, bool open, int dof, int code,
276 bool project = false);
277
288 virtual void constrainCorner(int I, int J, int dof,
289 int code = 0, char basis = 1);
301 virtual void constrainNode(double xi, double eta, int dof, int code = 0);
302
310 virtual bool connectPatch(int edge, ASM2D& neighbor, int nedge, bool revers,
311 int = 0, bool coordCheck = true, int thick = 1);
312
313
314 // Methods for integration of finite element quantities.
315 // These are the main computational methods of the ASM class hierarchy.
316 // ====================================================================
317
318 using ASMbase::integrate;
323 virtual bool integrate(Integrand& integrand,
324 GlobalIntegral& glbInt, const TimeDomain& time);
325
331 virtual bool integrate(Integrand& integrand, int lIndex,
332 GlobalIntegral& glbInt, const TimeDomain& time);
333
339 virtual bool integrate(Integrand& integrand, GlobalIntegral& glbInt,
340 const TimeDomain& time,
341 const ASM::InterfaceChecker& iChk);
342
348 virtual bool diracPoint(Integrand& integrand, GlobalIntegral& glbInt,
349 const double* param, const Vec3& pval);
350
357 virtual bool updateDirichlet(const std::map<int,RealFunc*>& func,
358 const std::map<int,VecFunc*>& vfunc, double time,
359 const std::map<int,int>* g2l = nullptr,
360 bool tangent = false);
361
366 virtual int getCorner(int I, int J, int basis) const;
367
368protected:
374 bool integrate(Integrand& integrand, GlobalIntegral& glbInt,
375 const TimeDomain& time, const Real3DMat& itgPts);
376
377public:
378
379 // Post-processing methods
380 // =======================
381
388 virtual int evalPoint(const double* xi, double* param, Vec3& X) const;
389
393 virtual int findElementContaining(const double* param) const;
394
399 virtual double findPoint(Vec3& X, double* param) const;
400
405 virtual bool getGridParameters(RealArray& prm, int dir, int nSegSpan) const;
406
411 virtual bool tesselate(ElementBlock& grid, const int* npe) const;
412
419 virtual bool evalSolution(Matrix& sField, const Vector& locSol,
420 const int* npe, int n_f, bool piola) const;
421
427 virtual bool evalSolution(Matrix& sField, const Vector& locSol,
428 const RealArray* gpar, bool = false,
429 int deriv = 0, int = 0) const;
430
436 virtual bool evalProjSolution(Matrix& sField, const Vector& locSol,
437 const int* npe, int n_f) const;
438
443 virtual bool evaluate(const FunctionBase* func, RealArray& vec,
444 int, double time) const;
445
460 virtual bool evalSolution(Matrix& sField, const IntegrandBase& integrand,
461 const int* npe, char project = '\0') const;
462
464 virtual bool separateProjectionBasis() const;
465
468 virtual Field* getProjectedField(const Vector& coefs) const;
469
472 virtual Fields* getProjectedFields(const Vector& coefs, size_t = 0) const;
473
477 virtual void storeMesh(const std::string& fName, int fType) const;
478
480 void setOutputMaster(const ASMu2D* pch) { outputMaster = pch; }
482 virtual const ASMbase* getOutputMaster() const { return outputMaster; }
483
484protected:
487 {
488 LR::LRSplineSurface* lr;
489 LR::parameterEdge edg;
493 int dof;
494 int code;
495 int corners[2];
496
498 DirichletEdge(LR::LRSplineSurface* sf, int dir,
499 int d = 0, int c = 0, int offset = 1);
501 bool isCorner(int b) const { return b == corners[0] || b == corners[1]; }
502 };
503
506 LR::LRSplineSurface* projectSolution(const IntegrandBase& integrand) const;
509 LR::LRSplineSurface* scRecovery(const IntegrandBase& integrand) const;
510
517 LR::LRSplineSurface* regularInterpolation(const RealArray& upar,
518 const RealArray& vpar,
519 const Matrix& points, int basis) const;
520
521public:
524 virtual LR::LRSpline* evalSolution(const IntegrandBase& integrand) const;
525
535 virtual bool evalSolution(Matrix& sField, const IntegrandBase& integrand,
536 const RealArray* gpar, bool = false) const;
537
544 bool edgeL2projection(const DirichletEdge& edge, const FunctionBase& values,
545 Real2DMat& result, double time,
546 bool tangent = false) const;
547
553 virtual bool transferGaussPtVars(const LR::LRSpline* old_basis,
554 const RealArray& oldVar, RealArray& newVar,
555 int nGauss) const;
561 virtual bool transferGaussPtVarsN(const LR::LRSpline* old_basis,
562 const RealArray& oldVar, RealArray& newVar,
563 int nGauss) const;
564
570 virtual bool transferCntrlPtVars(const LR::LRSpline* old_basis,
571 RealArray& newVar, int nGauss) const;
572
573protected:
574
575 // Internal utility methods
576 // ========================
577
582 virtual void findBoundaryElms(IntVec& elms, int lIndex, int orient) const;
583
589 virtual bool assembleL2matrices(SystemMatrix& A, SystemVector& B,
590 const L2Integrand& integrand,
591 bool continuous) const;
592
603 bool connectBasis(int edge, ASMu2D& neighbor, int nedge, bool revers,
604 int basis = 1, int slave = 0, int master = 0,
605 bool coordCheck = true, int thick = 1);
606
614 void getGaussPointParameters(RealArray& uGP, int dir, int nGauss,
615 int iel, const double* xi,
616 const LR::LRSplineSurface* spline = nullptr) const;
617
622 bool getGrevilleParameters(RealArray& prm, int dir, int basisNum = 1) const;
623
627 double getParametricLength(int iel, int dir) const;
628
634 double getElementCorners(int iel, std::vector<Vec3>& XC,
635 RealArray* uC = nullptr) const;
639 void getCornerPoints(int iel, std::vector<utl::Point>& XC) const;
640
645 bool evaluateBasis(int iel, FiniteElement& fe, int derivs = 0) const;
646
648 void computeBasis(double u, double v,
649 Go::BasisPtsSf& bas, int iel,
650 const LR::LRSplineSurface* spline = nullptr) const;
652 void computeBasis(double u, double v,
653 Go::BasisDerivsSf& bas, int iel,
654 const LR::LRSplineSurface* spline = nullptr) const;
656 void computeBasis(double u, double v,
657 Go::BasisDerivsSf2& bas, int iel,
658 const LR::LRSplineSurface* spline = nullptr) const;
660 void computeBasis(double u, double v,
661 Go::BasisDerivsSf3& bas, int iel,
662 const LR::LRSplineSurface* spline = nullptr) const;
663
670 virtual int evalPoint(int iel, const double* param, Vec3& X) const;
671
677 void generateThreadGroups(const Integrand& integrand, bool silence,
678 bool ignoreGlobalLM);
679
681 virtual void generateThreadGroupsFromElms(const IntVec& elms);
682
684 virtual void generateProjThreadGroupsFromElms(const IntVec& elms);
685
687 virtual void changeNumThreads();
688
693 virtual void remapErrors(RealArray& errors,
694 const RealArray& origErr, bool elemErrors) const;
695
699 virtual void extendRefinementDomain(IntSet& refineIndices,
700 const IntSet& neighborIndices) const;
701
703 std::shared_ptr<LR::LRSplineSurface> createLRfromTensor();
704
706 static std::shared_ptr<LR::LRSplineSurface> createLRNurbs(const Go::SplineSurface& srf);
707
709 void generateBezierBasis();
710
713
715 void writePostscriptElementsNurbs (std::shared_ptr<LR::LRSplineSurface> mesh,
716 std::ostream& out, bool close = true,
717 int nu = 2, int nv = 2);
719 void writePostscriptMeshWithControlPointsNurbs (std::shared_ptr<LR::LRSplineSurface> mesh,
720 std::ostream& out, int nu = 2, int nv = 2);
721
722public:
724 virtual size_t getNoBoundaryElms(char lIndex, char ldim) const;
725
727 static void computeBasisNurbs(double u, double v,
728 Go::BasisPtsSf& bas, int iel,
729 const LR::LRSplineSurface& spline);
731 static void computeBasisNurbs(double u, double v,
732 Go::BasisDerivsSf& bas, int iel,
733 const LR::LRSplineSurface& spline);
735 static void computeBasisNurbs(double u, double v,
736 Go::BasisDerivsSf2& bas, int iel,
737 const LR::LRSplineSurface& spline);
739 static void computeBasisNurbs(double u, double v,
740 Go::BasisDerivsSf3& bas, int iel,
741 const LR::LRSplineSurface& spline);
742
744 bool rational() const { return is_rational; }
745
751 static bool getCoordinates(Matrix& X,
752 unsigned char nsd,
753 const LR::LRSplineSurface& spline,
754 int iel = -1);
755
756protected:
757 std::shared_ptr<LR::LRSplineSurface> lrspline;
758
759 bool is_rational = false;
760
761 const ASMu2D* outputMaster = nullptr;
762
763 Go::SplineSurface* tensorspline;
764 Go::SplineSurface* tensorPrjBas;
765 // The tensor spline object is kept for backward compatability with the REFINE
766 // and RAISEORDER key-words, although we take note that there is a possibility
767 // of optimization since all mapping values and Jacobians may be performed on
768 // this object for increased efficiency.
769
771 std::vector<DirichletEdge> dirich;
772
775
776 Go::BsplineBasis bezier_u;
777 Go::BsplineBasis bezier_v;
778
780 std::vector<std::unique_ptr<BasisFunctionCache>> myCache;
781
782private:
783 mutable double aMin;
784
789 bool evaluateBasisNurbs(int iel, FiniteElement& fe,
790 int derivs) const;
791};
792
793#endif
Abstract interface for 2D 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.
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:32
std::vector< Real2DMat > Real3DMat
A real-valued three-dimensional array without algebraic operations.
Definition ImmersedBoundaries.h:36
Representation of domain interfaces.
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.
Abstract interface for 2D spline patches.
Definition ASM2D.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.
std::shared_ptr< LR::LRSpline > geomB
Pointer to spline object of the geometry basis.
Definition ASMLRSpline.h:213
Base class to check for internal boundary integrand contributions.
Definition Interface.h:40
Base class for spline-based finite element (FE) assembly drivers.
Definition ASMbase.h:72
virtual bool integrate(Integrand &integrand, GlobalIntegral &glbInt, const TimeDomain &time)=0
Evaluates an integral over the interior patch domain.
int nGauss
Numerical integration scheme for this patch.
Definition ASMbase.h:1090
virtual void generateThreadGroups(const Integrand &, bool, bool)
Generates element groups for multi-threading of interior integrals.
Definition ASMbase.h:528
unsigned char nsd
Number of space dimensions (ndim <= nsd <= 3)
Definition ASMbase.h:1056
Implementation of basis function cache.
Definition ASMu2D.h:54
BasisFunctionVals calculatePt(size_t el, size_t gp, bool reduced) const override
Calculates basis function info in a single integration point.
Definition ASMu2D.C:3175
virtual ~BasisFunctionCache()=default
Empty destructor.
const ASMu2D & patch
Reference to patch cache is for.
Definition ASMu2D.h:82
bool internalInit() override
Implementation specific initialization.
Definition ASMu2D.C:3108
void calculateAll() override
Calculates basis function info in all integration points.
Definition ASMu2D.C:3208
bool setupQuadrature()
Configure quadratures.
Definition ASMu2D.C:3121
Base class that checks if an element has interface contributions.
Definition ASMu2D.h:92
const ASMu2D & myPatch
Reference to the patch being integrated.
Definition ASMu2D.h:110
virtual ~InterfaceChecker()
Empty destructor.
Definition ASMu2D.h:97
virtual short int hasContribution(int iel, int=-1, int=-1, int=-1) const
Returns non-zero if the specified element have contributions.
Definition ASMu2D.C:2793
std::map< int, Intersection > intersections
Intersections for elements. Key: element << 4 + edge (1..4).
Definition ASMu2D.h:119
const RealArray & getIntersections(int iel, int edge, int *cont=nullptr) const
Get intersections for a given element edge.
Definition ASMu2D.C:2812
Driver for assembly of unstructured 2D spline FE models.
Definition ASMu2D.h:50
virtual void extendRefinementDomain(IntSet &refineIndices, const IntSet &neighborIndices) const
Extends the refinement domain with information for neighbors.
Definition ASMu2D.C:370
virtual void remapErrors(RealArray &errors, const RealArray &origErr, bool elemErrors) const
Remap element wise errors to basis functions.
Definition ASMu2D.C:2696
virtual void generateThreadGroupsFromElms(const IntVec &elms)
Generate element groups from a partition.
Definition ASMu2D.C:3020
virtual IntMat getElmNodes(int basis) const
Returns the matrix of nodal point correspondance for given basis.
Definition ASMu2D.C:2681
virtual void findBoundaryElms(IntVec &elms, int lIndex, int orient) const
Finds the patch-local element numbers on a patch boundary.
Definition ASMu2D.C:2996
std::shared_ptr< LR::LRSplineSurface > lrspline
The LR-spline surface object.
Definition ASMu2D.h:757
virtual bool refine(int dir, const RealArray &xi, double scale)
Refines the parametrization by inserting extra tensor knots.
Definition ASMu2D.C:316
void getGaussPointParameters(RealArray &uGP, int dir, int nGauss, int iel, const double *xi, const LR::LRSplineSurface *spline=nullptr) const
Extracts parameter values of the Gauss points in one direction.
Definition ASMu2D.C:1051
virtual size_t constrainEdgeLocal(int dir, bool open, int dof, int code, bool project=false)
Constrains all DOFs in local directions on a given boundary edge.
Definition ASMu2D.C:828
virtual bool updateDirichlet(const std::map< int, RealFunc * > &func, const std::map< int, VecFunc * > &vfunc, double time, const std::map< int, int > *g2l=nullptr, bool tangent=false)
Updates the time-dependent in-homogeneous Dirichlet coefficients.
Definition ASMu2D.C:2411
virtual bool write(std::ostream &, int) const
Writes the geometry of the SplineSurface object to given stream.
Definition ASMu2D.C:165
virtual bool updateCoords(const Vector &displ)
Updates the nodal coordinates for this patch.
Definition ASMu2D.C:1012
virtual void changeNumThreads()
Hook for changing number of threads.
Definition ASMu2D.C:2689
virtual bool evaluate(const FunctionBase *func, RealArray &vec, int, double time) const
Evaluates and interpolates a function over a given geometry.
Definition ASMu2D.C:2712
virtual bool read(std::istream &)
Creates an instance by reading the given input stream.
Definition ASMu2D.C:101
const ASMu2D * outputMaster
Master patch to use for VTF output.
Definition ASMu2D.h:761
Go::SplineSurface * tensorPrjBas
Pointer to tensor spline projection base.
Definition ASMu2D.h:764
virtual const LR::LRSplineSurface * getBasis(int basis=1) const
Returns the spline surface representing a basis of this patch.
Definition ASMu2D.C:75
bool evaluateBasisNurbs(int iel, FiniteElement &fe, int derivs) const
Evaluates the NURBS basis functions and derivatives of an element.
Definition ASMu2Dnurbs.C:26
bool edgeL2projection(const DirichletEdge &edge, const FunctionBase &values, Real2DMat &result, double time, bool tangent=false) const
Projects inhomogenuous dirichlet conditions by continuous L2-fit.
Definition ASMu2Drecovery.C:458
bool connectBasis(int edge, ASMu2D &neighbor, int nedge, bool revers, int basis=1, int slave=0, int master=0, bool coordCheck=true, int thick=1)
Connects all matching nodes on two adjacent boundary edges.
Definition ASMu2D.C:669
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 ASMu2D.C:2514
virtual void storeMesh(const std::string &fName, int fType) const
Stores the mesh basis to encapsulated postscript files.
Definition ASMu2D.C:3044
virtual bool raiseOrder(int ru, int rv)
Raises the order of the tensor spline object for this patch.
Definition ASMu2D.C:420
static void computeBasisNurbs(double u, double v, Go::BasisPtsSf &bas, int iel, const LR::LRSplineSurface &spline)
Evaluate NURBS basis functions in a point.
Definition ASMu2Dnurbs.C:129
std::vector< std::unique_ptr< BasisFunctionCache > > myCache
Basis function cache.
Definition ASMu2D.h:780
Go::SplineSurface * tensorspline
Pointer to original tensor spline object.
Definition ASMu2D.h:763
bool rational() const
Query whether basis is rational or not.
Definition ASMu2D.h:744
virtual size_t getNoNodes(int basis=0) const
Returns the total number of nodes in this patch.
Definition ASMu2D.C:2466
virtual bool tesselate(ElementBlock &grid, const int *npe) const
Creates a quad element model of this patch for visualization.
Definition ASMu2D.C:2018
Matrices myBezierExtract
Bezier extraction matrices.
Definition ASMu2D.h:774
virtual Fields * getProjectedFields(const Vector &coefs, size_t=0) const
Returns a field using the projection basis.
Definition ASMu2D.C:2500
std::shared_ptr< LR::LRSplineSurface > createLRfromTensor()
Converts current tensor spline object to LR-spline.
Definition ASMu2D.C:557
LR::LRSplineSurface * scRecovery(const IntegrandBase &integrand) const
Projects the secondary solution using a superconvergent approach.
Definition ASMu2Drecovery.C:241
virtual bool getGridParameters(RealArray &prm, int dir, int nSegSpan) const
Calculates parameter values for visualization nodal points.
Definition ASMu2D.C:1979
virtual void getBoundaryNodes(int lIndex, IntVec &nodes, int basis, int=1, int orient=0, bool local=false) const
Finds the global (or patch-local) node numbers on a patch boundary.
Definition ASMu2D.C:2368
virtual void generateProjThreadGroupsFromElms(const IntVec &elms)
Generate element groups from a partition.
Definition ASMu2D.C:3038
virtual int findElementContaining(const double *param) const
Returns the element that contains a specified spatial point.
Definition ASMu2D.C:1966
virtual Field * getProjectedField(const Vector &coefs) const
Returns a field using the projection basis.
Definition ASMu2D.C:2487
virtual size_t getNoProjectionNodes() const
Returns the number of projection nodes for this patch.
Definition ASMu2D.C:2475
bool is_rational
True if basis is rational.
Definition ASMu2D.h:759
virtual bool createProjectionBasis(bool init)
Creates a separate projection basis for this patch.
Definition ASMu2D.C:442
void generateThreadGroups(const Integrand &integrand, bool silence, bool ignoreGlobalLM)
Generates element groups for multi-threading of interior integrals.
Definition ASMu2D.C:2660
const Matrices & bezierExtract
Bezier extraction matrices.
Definition ASMu2D.h:773
double getElementCorners(int iel, std::vector< Vec3 > &XC, RealArray *uC=nullptr) const
Computes the element corner coordinates.
Definition ASMu2D.C:1061
double aMin
Minimum element area for adaptive refinement.
Definition ASMu2D.h:783
void generateBezierExtraction()
Generate bezier extraction operators.
Definition ASMu2D.C:2869
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 ASMu2D.C:2567
void generateBezierBasis()
Generate bezier basis.
Definition ASMu2D.C:2862
LR::LRSplineSurface * regularInterpolation(const RealArray &upar, const RealArray &vpar, const Matrix &points, int basis) const
Interpolates an LR spline at a given set of parametric coordinates.
Definition ASMu2Drecovery.C:396
void writePostscriptElementsNurbs(std::shared_ptr< LR::LRSplineSurface > mesh, std::ostream &out, bool close=true, int nu=2, int nv=2)
Write NURBS elements as postscript file.
Definition ASMu2Dnurbs.C:289
virtual size_t getNoBoundaryElms(char lIndex, char ldim) const
Returns the number of elements on a boundary.
Definition ASMu2D.C:1037
virtual void clear(bool retainGeometry=false)
Clears the contents of the patch, making it empty.
Definition ASMu2D.C:178
LR::LRSplineSurface * projectSolution(const IntegrandBase &integrand) const
Projects the secondary solution field onto the primary basis.
Definition ASMu2Drecovery.C:76
virtual double getMinimumSize(int nrefinements) const
Defines the minimum element area for adaptive refinement.
Definition ASMu2D.C:347
virtual bool transferCntrlPtVars(const LR::LRSpline *old_basis, RealArray &newVar, int nGauss) const
Transfers control point variables from old basis to this patch.
Definition ASMu2D.C:2631
Go::BsplineBasis bezier_v
Bezier basis in the v-direction.
Definition ASMu2D.h:777
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
virtual int getCorner(int I, int J, int basis) const
Returns the node index for a given corner.
Definition ASMu2D.C:835
bool evaluateBasis(int iel, FiniteElement &fe, int derivs=0) const
Evaluates the basis functions and derivatives of an element.
Definition ASMu2D.C:456
virtual bool getOrder(int &p1, int &p2, int &p3) const
Returns the polynomial order in each parameter direction.
Definition ASMu2D.C:2401
virtual const ASMbase * getOutputMaster() const
Returns the master patch to use for VTF- and HDF5-output.
Definition ASMu2D.h:482
std::vector< DirichletEdge > dirich
Inhomogeneous Dirichlet boundary condition data.
Definition ASMu2D.h:771
void computeBasis(double u, double v, Go::BasisPtsSf &bas, int iel, const LR::LRSplineSurface *spline=nullptr) const
Evaluate basis functions in a point.
Definition ASMu2D.C:2889
void copyRefinement(LR::LRSplineSurface *basis, int multiplicity=1) const
Copies the refinement to another surface.
Definition ASMu2D.C:3078
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 ASMu2D.C:2159
virtual void getElmConnectivities(IntMat &neighs, int basis=ASM::INTEGRATION_BASIS) const
Calculates the matrix of element neighbour connectivities.
Definition ASMu2D.C:2953
void setOutputMaster(const ASMu2D *pch)
Sets the master patch to use for VTF- and HDF5-output.
Definition ASMu2D.h:480
static std::shared_ptr< LR::LRSplineSurface > createLRNurbs(const Go::SplineSurface &srf)
Converts a rational spline surface to a LR NURBS surface.
Definition ASMu2D.C:546
virtual double findPoint(Vec3 &X, double *param) const
Searches for the specified Cartesian point in the patch.
Definition ASMu2D.C:1972
virtual bool getElementCoordinates(Matrix &X, int iel, bool forceItg=false) const
Returns a matrix with nodal coordinates for an element.
Definition ASMu2D.C:971
virtual void constrainNode(double xi, double eta, int dof, int code=0)
Constrains a node identified by two relative parameter values.
Definition ASMu2D.C:874
void getCornerPoints(int iel, std::vector< utl::Point > &XC) const
Computes the element corner coordinates and parameters.
Definition ASMu2D.C:1095
Go::BsplineBasis bezier_u
Bezier basis in the u-direction.
Definition ASMu2D.h:776
virtual void constrainCorner(int I, int J, int dof, int code=0, char basis=1)
Constrains a corner node identified by the two parameter indices.
Definition ASMu2D.C:864
virtual bool checkElementSize(int elmId, bool globalNum=true) const
Checks if the specified element is larger than the minimum size.
Definition ASMu2D.C:358
virtual void constrainEdge(int dir, bool open, int dof, int code, char basis)
Constrains all DOFs on a given boundary edge.
Definition ASMu2D.C:773
virtual bool connectPatch(int edge, ASM2D &neighbor, int nedge, bool revers, int=0, bool coordCheck=true, int thick=1)
Connects all matching nodes on two adjacent boundary edges.
Definition ASMu2D.C:654
bool getGrevilleParameters(RealArray &prm, int dir, int basisNum=1) const
Calculates parameter values for the Greville points.
Definition ASMu2Drecovery.C:36
virtual void getNodalCoordinates(Matrix &X, bool=false) const
Returns a matrix with all nodal coordinates within the patch.
Definition ASMu2D.h:173
virtual int evalPoint(const double *xi, double *param, Vec3 &X) const
Evaluates the geometry at a specified point.
Definition ASMu2D.C:1918
virtual bool generateFEMTopology()
Generates the finite element topology data for the patch.
Definition ASMu2D.C:595
double getParametricLength(int iel, int dir) const
Returns boundary edge length in the parameter space for an element.
Definition ASMu2D.C:898
virtual bool diracPoint(Integrand &integrand, GlobalIntegral &glbInt, const double *param, const Vec3 &pval)
Integrates a spatial dirac-delta function over a patch.
Definition ASMu2D.C:1889
virtual bool assembleL2matrices(SystemMatrix &A, SystemVector &B, const L2Integrand &integrand, bool continuous) const
Assembles L2-projection matrices for the secondary solution.
Definition ASMu2Drecovery.C:108
virtual bool separateProjectionBasis() const
Checks if a separate projection basis is used for this patch.
Definition ASMu2D.C:2481
static bool getCoordinates(Matrix &X, unsigned char nsd, const LR::LRSplineSurface &spline, int iel=-1)
Returns a matrix with control point coordinates.
Definition ASMu2D.C:931
void writePostscriptMeshWithControlPointsNurbs(std::shared_ptr< LR::LRSplineSurface > mesh, std::ostream &out, int nu=2, int nv=2)
Write NURBS elements as postscript file.
Definition ASMu2Dnurbs.C:393
bool uniformRefine(int minBasisfunctions)
Refines the LR-spline patch uniformly.
Definition ASMu2D.C:251
virtual ~ASMu2D()
Empty destructor.
Definition ASMu2D.h:127
bool diagonalRefine(int minBasisfunctions)
Refines along the diagonal of the LR-spline patch.
Definition ASMu2D.C:221
bool cornerRefine(int minBasisfunctions)
Refines the lower-left corner of the LR-spline patch.
Definition ASMu2D.C:200
virtual Vec3 getCoord(size_t inod) const
Returns the global coordinates for the given node.
Definition ASMu2D.C:1000
virtual bool integrate(Integrand &integrand, GlobalIntegral &glbInt, const TimeDomain &time)
Evaluates an integral over the interior patch domain.
Definition ASMu2D.C:1108
virtual void setMinimumSize(double size)
Sets the minimum element area for adaptive refinement.
Definition ASMu2D.h:243
Base class for basis function caches.
Definition BasisFunctionCache.h:31
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:40
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:24
General utility classes and functions.
Definition SIMoptions.h:22
Struct representing an inhomogeneous Dirichlet boundary condition.
Definition ASMu2D.h:487
int corners[2]
Index of the two end-points of this line.
Definition ASMu2D.h:495
int code
Inhomogeneous Dirichlet condition code.
Definition ASMu2D.h:494
IntMat MNPC
Matrix of Nodal-Point Correpondanse.
Definition ASMu2D.h:492
IntVec MLGE
Local-to-Global Element numbers.
Definition ASMu2D.h:490
IntVec MLGN
Local-to-Global Nodal numbers.
Definition ASMu2D.h:491
int dof
Local DOF to constrain along the boundary.
Definition ASMu2D.h:493
bool isCorner(int b) const
Returns true if basis function b is at a corner point.
Definition ASMu2D.h:501
LR::LRSplineSurface * lr
Pointer to the right object (in case of multiple bases)
Definition ASMu2D.h:488
LR::parameterEdge edg
Which edge is this.
Definition ASMu2D.h:489
Struct describing an intersection of mesh lines.
Definition ASMu2D.h:113
RealArray pts
Intersection points.
Definition ASMu2D.h:115
int continuity
Continuity across intersection.
Definition ASMu2D.h:114
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