20#include "LRSpline/LRSpline.h"
81 const std::array<double,3>& du,
82 size_t el,
size_t gp,
bool reduced)
const;
108 explicit ASMu3D(
unsigned char n_f = 3);
115 virtual const LR::LRSplineVolume*
getBasis(
int basis = 1)
const;
117 virtual LR::LRSplineVolume*
getBasis(
int basis = 1);
124 virtual bool read(std::istream&);
126 virtual bool write(std::ostream&,
int)
const;
136 virtual void clear(
bool retainGeometry =
false);
144 bool forceItg =
false)
const;
175 int,
int orient,
bool local)
const;
185 int orient,
bool local,
186 bool open =
false)
const;
193 virtual int getCorner(
int I,
int J,
int K,
int basis)
const;
199 virtual bool getOrder(
int& p1,
int& p2,
int& p3)
const;
202 virtual size_t getNoNodes(
int basis = 0)
const;
225 virtual bool raiseOrder(
int ru,
int rv,
int rw,
bool setOrder);
243 void copyRefinement(LR::LRSplineVolume* basis,
int multiplicity = 1)
const;
256 int code = 0,
char basis = 1);
266 bool project =
false,
char T1 =
'\0');
275 int code = 0,
char basis = 1);
292 virtual void constrainLine(
int fdir,
int ldir,
double xi,
int dof,
293 int code = 0,
char basis = 1);
307 int code = 0,
char basis = 1);
320 virtual void constrainNode(
double xi,
double eta,
double zeta,
int dof,
337 int = 0,
bool coordCheck =
true,
int thick = 1);
376 const double* param,
const Vec3& pval);
385 const std::map<int,VecFunc*>& vfunc,
double time,
386 const std::map<int,int>* g2l =
nullptr,
387 bool tangent =
false);
398 virtual int evalPoint(
const double* xi,
double* param,
Vec3& X)
const;
430 const int* npe,
int n_f,
bool piola)
const;
439 int deriv = 0,
int = 0)
const;
447 const int* npe,
int n_f)
const;
454 int,
double time)
const;
471 const int* npe,
char project =
'\0')
const;
493 LR::LRSplineVolume*
lr;
504 int d = 0,
int c = 0,
int offset = 1);
544 const RealArray* gpar,
bool =
false)
const;
554 bool tangent =
false)
const;
587 bool ignoreGlobalLM);
607 bool continuous)
const;
620 int basis = 1,
int slave = 0,
int master = 0,
621 bool coordCheck =
true,
int thick = 1);
631 int iel,
const double* xi,
632 const LR::LRSplineVolume* spline =
nullptr)
const;
672 int basis = 1)
const;
684 virtual int evalPoint(
int iel,
const double* param,
Vec3& X)
const;
700 const RealArray& origErr,
bool elemErrors)
const;
706 const IntSet& neighborIndices)
const;
734 std::vector<std::unique_ptr<BasisFunctionCache>>
myCache;
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
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:32
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.
Base class for spline-based finite element (FE) assembly drivers.
Definition ASMbase.h:72
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
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:2658
virtual ~BasisFunctionCache()=default
Empty destructor.
bool internalInit() override
Implementation specific initialization.
Definition ASMu3D.C:2490
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:2625
bool setupQuadrature()
Configure quadratures.
Definition ASMu3D.C:2545
BasisFunctionVals calculatePt(size_t el, size_t gp, bool reduced) const override
Calculates basis function info in a single integration point.
Definition ASMu3D.C:2600
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:98
virtual void changeNumThreads()
Hook for changing number of threads.
Definition ASMu3D.C:1950
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:624
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:645
virtual bool tesselate(ElementBlock &grid, const int *npe) const
Creates a hexahedron element model of this patch for visualization.
Definition ASMu3D.C:1483
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:2283
bool faceL2projection(const DirichletFace &face, const FunctionBase &values, Real2DMat &result, double time, bool tangent=false) const
Projects inhomogenuous dirichlet conditions by continuous L2-fit.
Definition ASMu3Drecovery.C:474
virtual bool uniformRefine(int dir, int nInsert)
Refines the parametrization by inserting tensor knots uniformly.
Definition ASMu3D.C:188
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:1843
virtual bool integrate(Integrand &integrand, GlobalIntegral &glbInt, const TimeDomain &time)
Evaluates an integral over the interior patch domain.
Definition ASMu3D.C:916
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:382
virtual double getMinimumSize(int nrefinements) const
Defines the minimum element volume for adaptive refinement.
Definition ASMu3D.C:2255
double getParametricArea(int iel, int dir) const
Returns boundary face area in the parameter space for an element.
Definition ASMu3D.C:674
virtual size_t getNoNodes(int basis=0) const
Returns the total number of nodes in this patch.
Definition ASMu3D.C:2012
virtual void generateProjThreadGroupsFromElms(const IntVec &elms)
Generate element groups from a partition.
Definition ASMu3D.C:2455
virtual bool getGridParameters(RealArray &prm, int dir, int nSegSpan) const
Calculates parameter values for visualization nodal points.
Definition ASMu3D.C:1441
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:513
virtual void getElmConnectivities(IntMat &neighs, int basis=ASM::INTEGRATION_BASIS) const
Calculates the matrix of element neighbour connectivities.
Definition ASMu3D.C:2380
virtual int evalPoint(const double *xi, double *param, Vec3 &X) const
Evaluates the geometry at a specified point.
Definition ASMu3D.C:1395
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:2151
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 ASMu3D.C:1957
virtual void generateThreadGroupsFromElms(const IntVec &elms)
Generate element groups from a partition.
Definition ASMu3D.C:2437
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:637
virtual bool separateProjectionBasis() const
Checks if a separate projection basis is used for this patch.
Definition ASMu3D.C:2027
virtual bool checkElementSize(int elmId, bool globalNum=true) const
Checks if the specified element is larger than the minimum size.
Definition ASMu3D.C:2266
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
virtual const ASMbase * getOutputMaster() const
Returns the master patch to use for VTF- and HDF5-output.
Definition ASMu3D.h:487
std::shared_ptr< LR::LRSplineVolume > createLRfromTensor()
Converts current tensor spline object to LR-spline.
Definition ASMu3D.C:282
virtual void findBoundaryElms(IntVec &elms, int lIndex, int orient) const
Finds the patch-local element numbers on a patch boundary.
Definition ASMu3D.C:2404
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:850
std::vector< DirichletFace > dirich
Inhomogeneous Dirichlet boundary condition data.
Definition ASMu3D.h:728
virtual ~ASMu3D()
Empty destructor.
Definition ASMu3D.h:112
virtual bool refine(int dir, const RealArray &xi)
Refines the parametrization by inserting extra tensor knots.
Definition ASMu3D.C:213
virtual Vec3 getCoord(size_t inod) const
Returns the global coordinates for the given node.
Definition ASMu3D.C:742
virtual IntMat getElmNodes(int basis) const
Returns the matrix of nodal point correspondance for given basis.
Definition ASMu3D.C:2396
virtual void clear(bool retainGeometry=false)
Clears the contents of the patch, making it empty.
Definition ASMu3D.C:166
Matrices myBezierExtract
Bezier extraction matrices.
Definition ASMu3D.h:731
virtual bool generateFEMTopology()
Generates the finite element topology data for the patch.
Definition ASMu3D.C:295
std::shared_ptr< LR::LRSplineVolume > lrspline
The LR-spline volume object.
Definition ASMu3D.h:716
virtual int findElementContaining(const double *param) const
Returns the element that contains a specified spatial point.
Definition ASMu3D.C:1428
std::vector< std::unique_ptr< BasisFunctionCache > > myCache
Basis function cache.
Definition ASMu3D.h:734
double vMin
Minimum element volume for adaptive refinement.
Definition ASMu3D.h:737
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:2085
virtual bool getOrder(int &p1, int &p2, int &p3) const
Returns the polynomial order in each parameter direction.
Definition ASMu3D.C:1877
virtual bool updateCoords(const Vector &displ)
Updates the nodal coordinates for this patch.
Definition ASMu3D.C:751
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:240
virtual bool getElementCoordinates(Matrix &X, int iel, bool forceItg=false) const
Returns a matrix with nodal coordinates for an element.
Definition ASMu3D.C:702
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:720
virtual double findPoint(Vec3 &X, double *param) const
Searches for the specified Cartesian point in the patch.
Definition ASMu3D.C:1434
virtual size_t getNoBoundaryElms(char lIndex, char ldim) const
Returns the number of elements on a boundary.
Definition ASMu3D.C:777
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:575
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:1638
virtual void getNoBouPoints(size_t &nPt, char ldim, char lindx)
Computes the number of boundary integration points in this patch.
Definition ASMu3D.C:1904
void copyRefinement(LR::LRSplineVolume *basis, int multiplicity=1) const
Copies the refinement to another spline volume.
Definition ASMu3D.C:2461
void getCornerPoints(int iel, std::vector< utl::Point > &XC) const
Computes the element corner coordinates and parameters.
Definition ASMu3D.C:837
double getElementCorners(int iel, std::vector< Vec3 > &XC, RealArray *uC=nullptr) const
Computes the element corner coordinates.
Definition ASMu3D.C:807
virtual bool integrateEdge(Integrand &integrand, int lEdge, GlobalIntegral &glbInt, const TimeDomain &time)
Evaluates a boundary integral over a patch edge.
Definition ASMu3D.C:1360
void setOutputMaster(const ASMu3D *pch)
Sets the master patch to use for VTF- and HDF5-output.
Definition ASMu3D.h:485
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:663
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:721
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:268
virtual Fields * getProjectedFields(const Vector &coefs, size_t=0) const
Returns a field using the projection basis.
Definition ASMu3D.C:2045
virtual bool transferCntrlPtVars(const LR::LRSpline *old_basis, RealArray &newVar, int nGauss) const
Transfers control point variables from old basis to this patch.
Definition ASMu3D.C:2224
virtual bool write(std::ostream &, int) const
Writes the geometry of the SplineVolume object to given stream.
Definition ASMu3D.C:153
virtual int getCorner(int I, int J, int K, int basis) const
Returns the node index for a given corner.
Definition ASMu3D.C:1887
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:790
const Matrices & bezierExtract
Bezier extraction matrices.
Definition ASMu3D.h:730
virtual void getNodalCoordinates(Matrix &X, bool=false) const
Returns a matrix with all nodal coordinates within the patch.
Definition ASMu3D.C:732
virtual Field * getProjectedField(const Vector &coefs) const
Returns a field using the projection basis.
Definition ASMu3D.C:2033
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:367
virtual void remapErrors(RealArray &errors, const RealArray &origErr, bool elemErrors) const
Remap element wise errors to basis functions.
Definition ASMu3D.C:2058
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:1540
virtual const LR::LRSplineVolume * getBasis(int basis=1) const
Returns the spline volume representing a basis of this patch.
Definition ASMu3D.C:72
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:1369
virtual size_t getNoProjectionNodes() const
Returns the number of projection nodes for this patch.
Definition ASMu3D.C:2021
virtual void generateThreadGroups(const Integrand &integrand, bool silence, bool ignoreGlobalLM)
Generates element groups for multi-threading of interior integrals.
Definition ASMu3D.C:1928
virtual bool evaluate(const FunctionBase *func, RealArray &vec, int, double time) const
Evaluates and interpolates a function over a given geometry.
Definition ASMu3D.C:2074
const ASMu3D * outputMaster
Master patch to use for VTF output.
Definition ASMu3D.h:718
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:568
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 ASMu3D.h:492
int dof
Local DOF to constrain along the boundary.
Definition ASMu3D.h:498
IntMat MNPC
Matrix of Nodal-Point Correpondanse.
Definition ASMu3D.h:497
LR::LRSplineVolume * lr
Pointer to the right object (in case of multiple bases)
Definition ASMu3D.h:493
bool isCorner(int b) const
Returns true if basis function b is at a corner point.
Definition ASMu3D.C:500
IntVec MLGE
Local-to-Global Element numbers.
Definition ASMu3D.h:495
IntVec MLGN
Local-to-Global Nodal numbers.
Definition ASMu3D.h:496
int code
Inhomogeneous Dirichlet condition code.
Definition ASMu3D.h:499
int corners[4]
Index of the four corners of this face.
Definition ASMu3D.h:500
LR::parameterEdge edg
Which face is this.
Definition ASMu3D.h:494
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