|
IFEM 90A354
|
Base class for LR B-spline FE assembly drivers. More...
#include <ASMLRSpline.h>


Public Member Functions | |
| virtual | ~ASMLRSpline () |
| Empty destructor. | |
| virtual bool | empty () const |
| Checks if the patch is empty. | |
| virtual bool | getParameterDomain (Real2DMat &, IntVec *) const |
| Returns parameter values and node numbers of the domain corners. | |
| const LR::LRSpline * | getRefinementBasis () const |
| Returns a const pointer to refinement basis. | |
| virtual bool | refine (const LR::RefineData &prm, Vectors &sol) |
| Refines the mesh adaptively. | |
| virtual LR::LRSpline * | evalSolution (const IntegrandBase &integrand) const =0 |
| Projects the secondary solution field onto the primary basis. | |
| IntVec | getFunctionsForElements (const IntVec &elements, bool globalId=false) const |
| Returns a list of basis functions having support on given elements. | |
| void | getFunctionsForElements (IntSet &functions, const IntVec &elements, bool globalId=true) const |
| Returns a list of basis functions having support on given elements. | |
| virtual IntVec | getBoundaryCovered (const IntSet &nodes) const |
| Returns all boundary functions that are covered by the given nodes. | |
| IntVec | getOverlappingNodes (const IntSet &nodes, int dir=7) const |
| Returns all functions whose support overlap with the input nodes. | |
| IntVec | getOverlappingNodes (int node, int dir=7) const |
| Returns all functions whose support overlap with the input node. | |
| virtual bool | transferGaussPtVars (const LR::LRSpline *oldBasis, const RealArray &oldVar, RealArray &newVar, int nGauss) const =0 |
| Transfers Gauss point variables from old basis to this patch. | |
| virtual bool | transferGaussPtVarsN (const LR::LRSpline *oldBasis, const RealArray &oldVar, RealArray &newVar, int nGauss) const =0 |
| Transfers Gauss point variables from old basis to this patch. | |
| virtual bool | transferCntrlPtVars (const LR::LRSpline *oldBasis, RealArray &newVar, int nGauss) const =0 |
| Transfers control point variables from old basis to this patch. | |
| bool | transferCntrlPtVars (LR::LRSpline *oldBasis, const RealArray &oldVar, RealArray &newVar, int nGauss, int nf=1) const |
| Transfers control point variables from old basis to this patch. | |
| virtual std::pair< size_t, double > | findClosestNode (const Vec3 &X) const |
| Finds the node that is closest to the given point X. | |
| virtual Vec3 | getElementCenter (int iel) const |
| Returns the coordinates of the element center. | |
| virtual void | getNoIntPoints (size_t &nPt, size_t &nIPt) |
| Computes the total number of integration points in this patch. | |
| virtual void | swapProjectionBasis () |
| Swaps between the first and second projection basis. | |
| 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. | |
| virtual bool | evalSolution (Matrix &sField, const Vector &locSol, const RealArray *gpar, bool regular=true, int deriv=0, int n_f=0) const |
| Evaluates the primary solution field at the given points. | |
| virtual bool | evalSolution (Matrix &sField, const IntegrandBase &integrand, const int *npe=nullptr, char project=0) const |
| Evaluates the secondary solution field at all visualization points. | |
| virtual bool | evalSolution (Matrix &sField, const IntegrandBase &integrand, const RealArray *gpar, bool regular=true) const |
| Evaluates the secondary solution field at the given points. | |
| virtual bool | evalSolution (Matrix &sField, const IntegrandBase &integrand, const IntVec &elements) const |
| Evaluates the secondary solution field at element centers. | |
Public Member Functions inherited from ASMbase | |
| virtual | ~ASMbase () |
| The destructor frees the dynamically allocated data objects. | |
| ASMbase * | cloneUnShared () const |
| Returns a copy of this patch with identical FE discretization. | |
| virtual bool | read (std::istream &is)=0 |
| Creates an instance by reading the given input stream. | |
| virtual bool | readBasis (std::istream &, size_t) |
| Reads a basis from the given input stream. | |
| virtual bool | write (std::ostream &os, int basis=0) const =0 |
| Writes the geometry/basis of the patch to the given stream. | |
| virtual void | addHole (double, double, double) |
| Adds a circular immersed boundary in the physical geometry. | |
| virtual void | addHole (double, double, double, double, double) |
| Adds an oval immersed boundary in the physical geometry. | |
| virtual bool | setGeometry (RealFunc *, double, double) |
| Defines the immersed geometry from a scalar function. | |
| virtual bool | generateFEMTopology ()=0 |
| Generates the finite element topology data for this patch. | |
| virtual void | clear (bool retainGeometry=false) |
| Clears the contents of this patch, making it empty. | |
| virtual bool | addXElms (short int dim, short int item, size_t nXn, IntVec &nodes) |
| Adds extraordinary elements associated with a patch boundary. | |
| bool | addLagrangeMultipliers (size_t iel, const IntVec &mGLag, unsigned char nnLag=1) |
| Adds a set of Lagrange multipliers to the specified element. | |
| bool | addGlobalLagrangeMultipliers (const IntVec &mGLag, unsigned char nnLag=1) |
| Adds global Lagrange multipliers to the system. | |
| virtual void | setGauss (int ng) |
| Defines the numerical integration scheme nGauss in the patch. | |
| void | setNoFields (unsigned char n) |
| Defines the number of solution fields in the patch. | |
| void | setElementActivator (IntFunc *efunc) |
| Sets the element activation function. | |
| const IntFunc * | getElementActivator () const |
| Returns a pointer to the element activation function. | |
| virtual void | setMinimumSize (double) |
| Sets the minimum element size for adaptive refinement. | |
| virtual double | getMinimumSize (int=0) const |
| Defines the minimum element size for adaptive refinement. | |
| virtual bool | checkElementSize (int, bool=true) const |
| Checks if the specified element is larger than the minimum size. | |
| unsigned char | getNoSpaceDim () const |
| Returns the number of spatial dimensions. | |
| unsigned char | getNoParamDim () const |
| Returns the number of parameter dimensions. | |
| virtual unsigned char | getNoFields (int b=0) const |
| Returns the number of solution fields. | |
| unsigned char | getNoLagPerNode () const |
| Returns the number of Lagrange multipliers per node. | |
| virtual bool | getOrder (int &, int &, int &) const |
| Returns the polynomial order in each parameter direction. | |
| virtual size_t | getNodeIndex (int globalNum, bool=false) const |
| Returns local 1-based index of the node with given global number. | |
| virtual int | getNodeID (size_t inod, bool=false) const |
| Returns the global node number for the given node. | |
| size_t | getElmIndex (int globalNum) const |
| Returns local 1-based index of element with given global number. | |
| int | getElmID (size_t iel) const |
| Returns the global element number for the given element. | |
| virtual unsigned char | getNodalDOFs (size_t inod) const |
| Returns the number of DOFs per node. | |
| virtual char | getNodeType (size_t inod) const |
| Returns the classification of a node. | |
| bool | isLMn (size_t n) const |
| Returns true if node n is a Lagrange multiplier node. | |
| bool | isRMn (size_t n) const |
| Returns true if node n is a master node of a rigid coupling. | |
| char | getLMType (size_t inod) const |
| Returns the type of a Lagrange multiplier node. | |
| virtual Vec3 | getCoord (size_t inod) const =0 |
| Returns the global coordinates for the given node. | |
| virtual void | getNodalCoordinates (Matrix &X, bool geo=false) const =0 |
| Returns a matrix with all nodal coordinates within the patch. | |
| virtual bool | getElementCoordinates (Matrix &X, int iel, bool forceItg=false) const =0 |
| Returns a matrix with nodal coordinates for an element. | |
| virtual void | getBoundaryNodes (int lIndex, IntVec &nodes, int basis=0, int thick=1, int orient=-1, bool local=false) const =0 |
| Finds the global (or patch-local) node numbers on a patch boundary. | |
| virtual void | getBoundary1Nodes (int lIndex, IntVec &nodes, int basis=0, int orient=-1, bool local=false, bool open=false) const |
| Finds the global (or patch-local) node numbers on a patch boundary. | |
| void | getBoundaryElms (int lIndex, IntVec &elms, int orient=-1, bool local=false) const |
| Finds the global (or patch-local) element numbers on a boundary. | |
| int | getNodeSetIdx (const std::string &setName) const |
| Returns (1-based) index of a predefined node set in the patch. | |
| const IntVec & | getNodeSet (int iset) const |
| Returns an indexed predefined node set. | |
| IntVec & | getNodeSet (const std::string &setName, int &idx) |
| Returns a named node set for update. | |
| bool | isInNodeSet (int iset, int inod) const |
| Checks if node inod is within predefined node set iset. | |
| int | parseNodeSet (const std::string &setName, const char *cset, bool assumeZeroBased=false) |
| Defines a node set by parsing a list of node numbers. | |
| virtual int | parseNodeBox (const std::string &, const char *) |
| Defines a node set by parsing a 3D bounding box. | |
| void | convertNodeSets () |
| Converts node number sets to internal (1-based) node indices. | |
| virtual int | getElementSetIdx (const std::string &) const |
| Returns (1-based) index of a predefined element set in the patch. | |
| virtual const IntVec & | getElementSet (int) const |
| Returns an indexed predefined element set. | |
| virtual bool | getElementSet (int, std::string &) const |
| Returns the name of an indexed predefined element set. | |
| virtual bool | isInElementSet (int, int) const |
| Checks if an element is within a predefined element set. | |
| virtual int | parseElemSet (const std::string &, const char *) |
| Defines an element set by parsing a list of element numbers. | |
| virtual int | parseElemBox (const std::string &, const std::string &, const char *) |
| Defines an element set by parsing a 3D bounding box. | |
| void | printNodes (std::ostream &os) const |
| Prints out the nodal coordinates of this patch to the given stream. | |
| void | printElements (std::ostream &os) const |
| Prints out element connections of this patch to the given stream. | |
| virtual void | printElmInfo (int, const IntegrandBase *) const |
| Prints out additional app-dependent element information. | |
| virtual void | shiftGlobalNodeNums (int nshift) |
| Increase all global node numbers by nshift. | |
| void | setGlobalNodeNums (const IntVec &nodes) |
| Sets the global node numbers for this patch. | |
| const IntVec & | getMyNodeNums () const |
| Returns the actual global node numbers of this patch. | |
| const IntVec & | getGlobalNodeNums () const |
| Returns the global node numbers of this patch. | |
| virtual void | shiftGlobalElmNums (int eshift) |
| Increase all global element numbers by eshift. | |
| const IntVec & | getGlobalElementNums () const |
| Returns the global element numbers of this patch. | |
| void | setActiveElements (IntVec *active) |
| Sets the list of active elements during assembly. | |
| bool | isElementActive (int iel, double time=-1.0) const |
| Returns true if element with 0-based index iel is active. | |
| bool | inActive (double time=-1.0) const |
| Returns true if none of the elements in the patch are active. | |
| double | getAge (int iel, double time) const |
| Returns the age of the element with 0-based index iel. | |
| bool | isElementInPartition (int iel) const |
| Returns true if element is in process partition. | |
| const IntVec & | getElementNodes (int iel) const |
| Returns the nodal point correspondance array for an element. | |
| virtual size_t | getNoBasis () const |
| Returns number of bases of this patch. | |
| virtual size_t | getNoNodes (int basis=0) const |
| Returns the total number of nodes in this patch. | |
| size_t | getNoElms (bool includeZeroVolElms=false, bool includeXElms=false) const |
| Returns the total number of elements in this patch. | |
| int | getMaxElmNo () const |
| Returns the highest external element number in this patch. | |
| virtual size_t | getNoBoundaryElms (char, char) const |
| Returns the number of elements on a boundary. | |
| size_t | getNoMPCs () const |
| Returns the total number of multi-point constraint equations. | |
| virtual void | getNoBouPoints (size_t &nPt, char ldim, char lindx) |
| Computes the number of boundary integration points in this patch. | |
| BCVec::const_iterator | begin_BC () const |
| Returns the beginning of the BCode array. | |
| BCVec::const_iterator | end_BC () const |
| Returns the end of the BCode array. | |
| IntMat::const_iterator | begin_elm () const |
| Returns the beginning of the MNPC array. | |
| IntMat::const_iterator | end_elm () const |
| Returns the end of the MNPC array. | |
| MPCIter | begin_MPC () const |
| Returns the beginning of the mpcs set. | |
| MPCIter | end_MPC () const |
| Returns the end of the mpcs set. | |
| MPC * | findMPC (int node, int dof) const |
| Returns a pointer to the MPC object for a specified slave, if any. | |
| bool | isShared () const |
| Returns true if this patch shares FE data with another patch. | |
| bool | hasXNodes () const |
| Returns true if this patch has additional (extraordinary) nodes. | |
| virtual void | getElmConnectivities (IntMat &neighs, int basis=ASM::INTEGRATION_BASIS) const =0 |
| Calculates the matrix of element neighbour connectivities. | |
| virtual IntMat | getElmNodes (int) const |
| Returns the matrix of nodal point correspondance for given basis. | |
| virtual void | copyParameterDomain (const ASMbase *) |
| Copies the parameter domain from another patch. | |
| virtual void | closeBoundaries (int dir=1, int basis=0, int master=1) |
| Makes two opposite boundaries periodic. | |
| bool | mergeNodes (size_t inod, int globalNum, bool verbose=true) |
| Merges a given node in this patch with a given global node. | |
| int | renumberNodes (std::map< int, int > &old2new, int &nNod) |
| Renumbers the global node numbers in this patch. | |
| bool | renumberNodes (const std::map< int, int > &old2new, const std::vector< int > &new2old={}, int renumGN=0, std::map< int, int > *degenElm=nullptr) |
| Renumbers the global node numbers referred by this patch. | |
| virtual bool | initConstraints () |
| Initializes the multi-point constraint coefficients. | |
| virtual void | setNodeNumbers (const IntVec &nodes) |
| Sets the global node numbers for this patch. | |
| bool | hasTimeDependentDirichlet (const std::map< int, RealFunc * > &func, const std::map< int, VecFunc * > &vfunc) |
| Checks for time-dependent in-homogeneous Dirichlet conditions. | |
| virtual bool | updateDirichlet (const std::map< int, RealFunc * > &func, const std::map< int, VecFunc * > &vfunc, double time=0.0, const std::map< int, int > *g2l=nullptr, bool tangent=false) |
| Updates the time-dependent in-homogeneous Dirichlet coefficients. | |
| virtual bool | updateCoords (const Vector &displ)=0 |
| Updates the nodal coordinates for this patch. | |
| virtual bool | transform (const Matrix &) |
| Applies a transformation matrix from local to global system. | |
| virtual void | initMADOF (const int *) |
| Initializes the patch level MADOF array for mixed problems. | |
| virtual void | generateThreadGroups (const Integrand &, bool, bool) |
| Generates element groups for multi-threading of interior integrals. | |
| virtual void | generateThreadGroups (char, bool, bool) |
| Generates element groups for multi-threading of boundary integrals. | |
| virtual void | generateThreadGroupsFromElms (const IntVec &) |
| Generates element groups for multi-threading based on a partition. | |
| virtual void | generateProjThreadGroupsFromElms (const IntVec &) |
| Generates element groups for multi-threading based on a partition. | |
| virtual bool | validateThreadGroups (const SAM *) const |
| Validates the threading groups based on the assembly data in SAM. | |
| virtual void | changeNumThreads () |
| Hook for changing number of threads. | |
| virtual bool | integrate (Integrand &integrand, GlobalIntegral &glbInt, const TimeDomain &time)=0 |
| Evaluates an integral over the interior patch domain. | |
| virtual bool | integrate (Integrand &integrand, int lIndex, GlobalIntegral &glbInt, const TimeDomain &time)=0 |
| Evaluates a boundary integral over a patch face/edge. | |
| virtual bool | integrateEdge (Integrand &integrand, int lEdge, GlobalIntegral &glbInt, const TimeDomain &time) |
| Evaluates a boundary integral over a patch edge. | |
| virtual bool | integrate (Integrand &integrand, GlobalIntegral &glbInt, const TimeDomain &time, const ASM::InterfaceChecker &iChk) |
| Evaluates an integral over element interfaces in the patch. | |
| virtual bool | diracPoint (Integrand &integrand, GlobalIntegral &glbInt, const double *u, const Vec3 &p) |
| Integrates a spatial dirac-delta function over a patch. | |
| virtual int | findElementContaining (const double *param) const =0 |
| Returns the element that contains a specified spatial point. | |
| virtual double | findPoint (Vec3 &X, double *param) const =0 |
| Searches for the specified Cartesian point in the patch. | |
| virtual bool | tesselate (ElementBlock &grid, const int *npe) const =0 |
| Creates a standard FE model of this patch for visualization. | |
| virtual ElementBlock * | immersedGeometry (char *) const |
| Returns an additional geometry to visualize (immersed boundaries). | |
| virtual ElementBlock * | extraGeometry (char *) const |
| Returns an additional geometry to visualize (spiders, etc.). | |
| virtual void | filterResults (Matrix &, const ElementBlock *) const |
| Filters out result point values that are outside physical domain. | |
| virtual bool | getSolution (Matrix &sField, const Vector &locSol, const IntVec &nodes) const |
| Extract the primary solution field at the specified nodes. | |
| virtual bool | immersedSolution (Matrix &, const Vector &) const |
| Evaluates the primary solution at the immersed geometry points. | |
| virtual bool | extraSolution (Matrix &, const Vector &) const |
| Evaluates the primary solution at the extra geometry points. | |
| virtual bool | evalProjSolution (Matrix &sField, const Vector &locSol, const int *npe, int n_f=0) const |
| Evaluates the projected solution field at all visualization points. | |
| virtual bool | evalSolutionPiola (Matrix &sField, const Vector &locSol, const RealArray *gpar, bool regular) const |
| Evaluates the primary solution field with Piola mapping. | |
| virtual bool | evaluate (const ASMbase *basis, const Vector &locVec, RealArray &vec, int basisNum=1) const |
| Evaluates and interpolates a field over a given geometry. | |
| virtual bool | evaluate (const Field *f, RealArray &vec, int basisNum=1) const |
| Evaluates and interpolates a scalar field over a given geometry. | |
| virtual bool | evaluate (const FunctionBase *func, RealArray &vec, int basisNum=1, double time=0.0) const |
| Evaluates and interpolates a scalar function over a given geometry. | |
| bool | globalL2projection (Matrix &sField, const L2Integrand &integrand, bool continuous=false, bool enforceEnds=false) const |
| Projects the secondary solution using a (discrete) global L2-fit. | |
| bool | L2projection (Matrix &sField, IntegrandBase *integrand, const TimeDomain &time) |
| Projects the secondary solution using a continuous global L2-fit. | |
| bool | L2projection (Matrix &fVals, FunctionBase *func, double t=0.0) |
| Projects an explicit function using a continuous global L2-fit. | |
| bool | L2projection (const std::vector< Matrix * > &fVals, const std::vector< FunctionBase * > &funcs, double t=0.0) |
| Projects explicit functions using a continuous global L2-fit. | |
| virtual size_t | getNoProjectionNodes () const |
| Returns the number of projection nodes for this patch. | |
| virtual size_t | getNoRefineNodes () const |
| Returns the number of nodes on refinement basis for this patch. | |
| virtual size_t | getNoRefineElms () const |
| Returns the number of elements on refinement basis for this patch. | |
| virtual Field * | getProjectedField (const Vector &) const |
| Returns a field using the projection basis. | |
| virtual Fields * | getProjectedFields (const Vector &, size_t) const |
| Returns a field using the projection basis. | |
| virtual bool | createProjectionBasis (bool) |
| Creates a separate projection basis for this patch. | |
| virtual bool | separateProjectionBasis () const |
| Checks if a separate projection basis is used for this patch. | |
| virtual const ASMbase * | getOutputMaster () const |
| Returns the master patch to use for VTF- and HDF5-output. | |
| void | extractElmRes (const Vector &globRes, Vector &elmRes, size_t internalFirst=0) const |
| Extracts element results for this patch from a global vector. | |
| void | extractElmRes (const Matrix &globRes, Vector &elmRes, size_t irow) const |
| Extracts element results for this patch from a global matrix. | |
| bool | extractNodalVec (const RealArray &globVec, RealArray &nodeVec, const int *madof, int ngnod=-1) const |
| Extracts nodal results for this patch from the global vector. | |
| virtual void | extractNodeVec (const RealArray &globVec, RealArray &nodeVec, unsigned char nndof=0, int basis=0) const |
| Extracts nodal results for this patch from the global vector. | |
| virtual bool | injectNodeVec (const RealArray &nodeVec, RealArray &globVec, unsigned char nndof=0, int basis=0) const |
| Injects nodal results for this patch into the global vector. | |
| bool | injectNodalVec (const RealArray &nodeVec, RealArray &globVec, const IntVec &madof, int basis=0) const |
| Injects nodal results for this patch into the global vector. | |
| bool | add2PC (int slave, int dir, int master, int code=0) |
| Creates and adds a two-point constraint to this patch. | |
| bool | addMPC (MPC *&mpc, int code=0, bool verbose=false, bool overrideD=false) |
| Adds a general multi-point-constraint (MPC) equation to this patch. | |
| virtual bool | addRigidCpl (int lindx, int ldim, int basis, int &gMaster, const Vec3 &Xmaster, bool extraPt=true) |
| Adds MPC-equations representing a rigid coupling to this patch. | |
| void | addRigidCouplings (int gMaster, const Vec3 &Xmaster, const IntVec &slaveNodes) |
| Adds MPC-equations representing a rigid coupling to this patch. | |
| void | addNodalCouplings (int slave, const IntVec &masters, const RealArray &weights) |
| Adds MPC-equations for general nodal couplings in this patch. | |
| void | constrainPatch (int dof, int code=0) |
| Constrains all nodes in the patch. | |
| void | constrainNodes (const IntVec &nodes, int dof, int code=0, bool overrideD=false) |
| Constrains a list of nodes in the patch. | |
| bool | constrainXnode (int node, int dof, int code=0) |
| Constrains an extraordinary node in the patch. | |
| int | prescribe (size_t inod, int dirs, int code, bool overrideD=false) |
| Constrains DOFs in the given node to the given value. | |
| int | fix (size_t inod, int dirs=123) |
| Constrains DOFs in the given node to zero. | |
| bool | isFixed (int node, int dof, bool all=false) const |
| Checks if the given DOFs are fixed. | |
| virtual bool | selfInterconnect (const std::vector< Ipair > &nodes, double xtol=1.0e-8) |
| Connects a list of node pairs to each other. | |
Public Member Functions inherited from ASMunstruct | |
| virtual | ~ASMunstruct () |
| Empty destructor. | |
| virtual void | remapErrors (RealArray &errors, const RealArray &orig, bool=false) const |
| Remaps element-wise errors from geometry mesh to refinement mesh. | |
| virtual void | extendRefinementDomain (IntSet &, const IntSet &) const |
| Extends the refinement domain with information for neighbors. | |
| virtual void | storeMesh (const std::string &fName, int fType=15) const |
| Stores the mesh basis to encapsulated postscript files. | |
Static Public Member Functions | |
| static Go::BsplineBasis | getBezierBasis (int p, double start=-1.0, double end=1.0) |
| Returns a Bezier basis of order p. | |
| static void | Sort (int u, int v, int orient, std::vector< LR::Basisfunction * > &functions) |
| Sort basis functions based on local knot vectors. | |
Static Public Member Functions inherited from ASMbase | |
| static void | resetNumbering (int n=0) |
| Resets the global element and node counters. | |
| static int | renumberNodes (const ASM::PatchVec &model, std::map< int, int > &old2new) |
| Renumbers all global node numbers in the entire model. | |
| static void | mergeAndGetAllMPCs (const ASM::PatchVec &model, MPCSet &allMPCs) |
| Computes the set of all MPC-equations over the whole model. | |
| static void | resolveMPCchains (const MPCSet &allMPCs, const ASM::PatchVec &model, bool setPtrOnly=false) |
| Resolves (possibly multi-level) chaining in MPC-equations. | |
Protected Member Functions | |
| ASMLRSpline (unsigned char n_p, unsigned char n_s, unsigned char n_f) | |
| The constructor sets the space dimensions. | |
| ASMLRSpline (const ASMLRSpline &patch, unsigned char n_f) | |
| Special copy constructor for sharing of FE data. | |
| bool | doRefine (const LR::RefineData &prm, LR::LRSpline *lrspline) |
| Refines the mesh adaptively. | |
| virtual int | evalPoint (int iel, const double *param, Vec3 &X) const =0 |
| Evaluates the geometry at a specified point. | |
| virtual int | evalPoint (const double *xi, double *param, Vec3 &X) const=0 |
| Evaluates the geometry at a specified point. | |
Protected Member Functions inherited from ASMbase | |
| ASMbase (unsigned char n_p, unsigned char n_s, unsigned char n_f) | |
| The constructor sets the number of space dimensions and fields. | |
| ASMbase (const ASMbase &patch, unsigned char n_f) | |
| Special copy constructor for sharing of FE data. | |
| ASMbase (const ASMbase &patch) | |
| Default copy constructor, copying everything except neighbors. | |
| void | addLocal2GlobalCpl (int iSlave, int master, const Tensor &Tlg) |
| Creates constraint equations coupling global DOFs to local DOFs. | |
| bool | add3PC (int slave, int dir, int master1, int master2, int code=0) |
| Creates and adds a three-point constraint to this patch. | |
| bool | addPeriodicity (size_t master, size_t slave, int dir) |
| Creates and adds a periodicity constraint to this patch. | |
| void | makePeriodic (size_t master, size_t slave, int dirs=123) |
| Creates periodicity constraints between two nodes in this patch. | |
| void | addNeighbor (ASMbase *pch) |
| Adds a patch to the list of neighbors of this patch. | |
| bool | createRgdMasterNode (int &gMaster, const Vec3 &Xmaster) |
| Creates an additional master node for a rigid coupling. | |
| void | addRigidMPC (int gSlave, int gMaster, const Vec3 &dX) |
| Adds MPC-equations representing a rigid arm to a 6-DOF node. | |
| int | getNoGaussPt (int p, bool neumann=false) const |
| Returns the number of Gauss points to use in one direction. | |
| int | searchCtrlPt (RealArray::const_iterator cit, RealArray::const_iterator end, const Vec3 &X, int dimension, double xtol=0.001) const |
| Helper method used by evalPoint to search for a control point. | |
| virtual void | findBoundaryElms (IntVec &elms, int lIndex, int orient) const =0 |
| Finds the patch-local element numbers on a patch boundary. | |
| virtual bool | assembleL2matrices (SystemMatrix &A, SystemVector &B, const L2Integrand &obj, bool continuous) const |
| Assembles L2-projection matrices for the secondary solution. | |
| bool | allDofs (int dirs) const |
| Returns true if dirs constains all local DOFs in the patch. | |
| bool | writeLagBasis (std::ostream &os, const char *type) const |
| Writes a Lagrangian basis to the given stream. | |
Protected Member Functions inherited from ASMunstruct | |
| ASMunstruct () | |
| The constructor is protected to allow objects of sub-classes only. | |
Static Protected Member Functions | |
| static bool | checkThreadGroups (const IntMat &groups, const std::vector< const LR::LRSpline * > &bases, const LR::LRSpline *threadBasis) |
| Santity check thread groups. | |
Static Protected Member Functions inherited from ASMbase | |
| static bool | deformedConfig (const Matrix &Xnod, Vectors &eVec, bool force2nd=false) |
| Calculates the deformed configuration for current element. | |
| static bool | collapseNodes (ASMbase &pch1, int node1, ASMbase &pch2, int node2) |
| Collapses the given two nodes into one. | |
Protected Attributes | |
| std::shared_ptr< LR::LRSpline > | geomB |
| Pointer to spline object of the geometry basis. | |
| std::shared_ptr< LR::LRSpline > | projB |
| Pointer to spline object of the projection basis. | |
| std::shared_ptr< LR::LRSpline > | projB2 |
| Pointer to spline object of the secondary projection basis. | |
| std::shared_ptr< LR::LRSpline > | refB |
| Pointer to spline object of the refinement basis. | |
| ThreadGroups | threadGroups |
| Element groups for multi-threaded assembly. | |
| ThreadGroups | projThreadGroups |
| Element groups for multi-threaded assembly - projection basis. | |
| ThreadGroups | proj2ThreadGroups |
| Element groups for multi-threaded assembly - second projection basis. | |
Protected Attributes inherited from ASMbase | |
| unsigned char | ndim |
| Number of parametric dimensions (1, 2 or 3) | |
| unsigned char | nsd |
| Number of space dimensions (ndim <= nsd <= 3) | |
| unsigned char | nf |
| Number of primary solution fields (1 or larger) | |
| unsigned char | nLag |
| Number of Lagrange multipliers per node. | |
| size_t | nel |
| Number of regular elements in this patch. | |
| size_t | nnod |
| Number of regular nodes in this patch. | |
| const IntVec & | MLGE |
| Matrix of Local to Global Element numbers. | |
| const IntVec & | MLGN |
| Matrix of Local to Global Node numbers. | |
| const IntMat & | MNPC |
| Matrix of Nodal Point Correspondance. | |
| const char | shareFE |
| Flag telling whether this patch shares its data with another patch. | |
| BCVec | BCode |
| Array of Boundary Condition codes. | |
| MPCMap | dCode |
| Inhomogeneous Dirichlet condition codes for the MPCs. | |
| MPCSet | mpcs |
| All multi-point constraints with the slave in this patch. | |
| std::vector< ASM::NodeSet > | nodeSets |
| Node sets for explicit Dirichlet BCs. | |
| IntVec | myMLGE |
| The actual Matrix of Local to Global Element numbers. | |
| IntVec | myMLGN |
| The actual Matrix of Local to Global Node numbers. | |
| IntMat | myMNPC |
| The actual Matrix of Nodal Point Correspondance. | |
| IntVec | myElms |
| Elements on patch - used with partitioning. | |
| int | nGauss |
| Numerical integration scheme for this patch. | |
| size_t | firstEl |
| Global index to first element within this patch. | |
| size_t | firstIp |
| Global index to first interior integration point. | |
| std::map< char, size_t > | firstBp |
| Global indices to first integration point for the Neumann boundaries. | |
| ASM::PatchVec | neighbors |
| Patches having nodes in common with this one. | |
| std::map< size_t, XYZ > | myRmaster |
| Rigid master nodal points. | |
Additional Inherited Members | |
Public Types inherited from ASMbase | |
| using | BCVec = std::vector< BC > |
| Nodal boundary condition container. | |
Public Attributes inherited from ASMbase | |
| size_t | idx |
| Index of this patch in the multi-patch model. | |
Static Public Attributes inherited from ASMbase | |
| static bool | fixHomogeneousDirichlet = true |
| If true, pre-eliminate fixed DOFs. | |
| static int | dbgElm = 0 |
| One-based element index to print debugging info for. | |
| static double | modelSize = 1.0 |
| Characteristic model size. | |
Protected Types inherited from ASMbase | |
| using | XYZ = std::array< double, 3 > |
| Convenience type definition. | |
Static Protected Attributes inherited from ASMbase | |
| static std::map< int, int > | xNode |
| Auxilliary node number map used when establishing Dirichlet constraints. | |
| static int | gEl = 0 |
| Global element counter. | |
| static int | gNod = 0 |
| Global node counter. | |
Base class for LR B-spline FE assembly drivers.
This class contains methods common for unstructured spline patches.
|
protected |
The constructor sets the space dimensions.
| [in] | n_p | Number of parameter dimensions |
| [in] | n_s | Number of spatial dimensions |
| [in] | n_f | Number of primary solution fields |
References geomB.
|
protected |
Special copy constructor for sharing of FE data.
| [in] | patch | The patch to use FE data from |
| [in] | n_f | Number of primary solution fields |
|
staticprotected |
Santity check thread groups.
| [in] | groups | The generated thread groups |
| [in] | bases | The bases to check for |
| [in] | threadBasis | The LRSpline the element groups are derived from |
Referenced by ASMu2Dmx::generateThreadGroups(), and ASMu3Dmx::generateThreadGroups().
|
protected |
Refines the mesh adaptively.
| [in] | prm | Input data used to control the mesh refinement |
| lrspline | The spline to perform adaptation for |
References ASMbase::clear(), doRefine(), LR::RefineData::elements, LR::RefineData::errors, and LR::RefineData::options.
Referenced by doRefine(), ASMu2Dmx::refine(), and ASMu3Dmx::refine().
|
inlinevirtual |
Checks if the patch is empty.
Implements ASMbase.
References geomB.
Referenced by ASMu2DIB::generateFEMTopology(), and ASMu2D::InterfaceChecker::getIntersections().
|
protectedvirtual |
Evaluates the geometry at a specified point.
| [in] | xi | Dimensionless parameters in range [0.0,1.0] of the point |
| [out] | param | The parameters of the point in the knot-span domain |
| [out] | X | The Cartesian coordinates of the point |
Implements ASMbase.
|
protectedpure virtual |
Evaluates the geometry at a specified point.
Implemented in ASMu2D, and ASMu3D.
Referenced by getElementCenter().
|
pure virtual |
|
virtual |
Evaluates the secondary solution field at all visualization points.
| [out] | sField | Solution field |
| [in] | integrand | Object with problem-specific data and methods |
| [in] | npe | Number of visualization nodes over each knot span |
| [in] | project | Flag indicating result recovery method |
The secondary solution is derived from the primary solution, which is assumed to be stored within the integrand for current patch. If npe is null, the solution is recovered or evaluated at the Greville points and then projected onto the spline basis to obtain the control point values, which then are returned through sField. If npe is not null and project is defined, the solution is also projected onto the spline basis, and then evaluated at the npe points.
Reimplemented from ASMbase.
|
virtual |
Evaluates the secondary solution field at element centers.
| [out] | sField | Solution field |
| [in] | integrand | Object with problem-specific data and methods |
| [in] | elements | List of elements to evaluate for (all if empty) |
The secondary solution is derived from the primary solution, which is assumed to be stored within the integrand for current patch. This method evaluates the secondary solution at the center of the provided list of elements, or for all if the list is empty.
Reimplemented from ASMbase.
|
virtual |
Evaluates the secondary solution field at the given points.
| [out] | sField | Solution field |
| [in] | integrand | Object with problem-specific data and methods |
| [in] | gpar | Parameter values of the result sampling points |
| [in] | regular | Flag indicating how the sampling points are defined |
The secondary solution is derived from the primary solution, which is assumed to be stored within the integrand for current patch. When regular is true, it is assumed that the parameter value array gpar forms a regular tensor-product point grid of dimension gpar[0].size() X gpar[1].size() X gpar[2].size(). Otherwise, we assume that it contains the u, v and w parameters directly for each sampling point.
Reimplemented from ASMbase.
Reimplemented in ASMu2Dmx, ASMu3Dmx, ASMu2D, ASMu2Dmx, ASMu3D, and ASMu3Dmx.
|
virtual |
Evaluates the primary solution field at all visualization points.
| [out] | sField | Solution field |
| [in] | locSol | Solution vector local to current patch |
| [in] | npe | Number of visualization nodes over each knot span |
| [in] | n_f | If nonzero, mixed evaluates n_f fields on first basis |
| [in] | piola | If true, use piola mapping |
Reimplemented from ASMbase.
|
virtual |
Evaluates the primary solution field at the given points.
| [out] | sField | Solution field |
| [in] | locSol | Solution vector local to current patch |
| [in] | gpar | Parameter values of the result sampling points |
| [in] | regular | Flag indicating how the sampling points are defined |
| [in] | deriv | Derivative order to return |
| [in] | n_f | If nonzero, mixed evaluates n_f fields on first basis |
When regular is true, it is assumed that the parameter value array gpar forms a regular tensor-product point grid of dimension gpar[0].size() X gpar[1].size() X gpar[2].size(). Otherwise, we assume that it contains the u, v and w parameters directly for each sampling point.
Reimplemented from ASMbase.
Reimplemented in ASMu2Dmx, ASMu3Dmx, ASMu2D, ASMu2Dmx, ASMu3D, and ASMu3Dmx.
|
virtual |
Finds the node that is closest to the given point X.
Reimplemented from ASMbase.
References geomB, and ASMbase::nsd.
Returns all boundary functions that are covered by the given nodes.
| [in] | nodes | Set of (0-based) patch local node IDs |
Reimplemented from ASMunstruct.
References GlobalNodes::getBoundaryNodes(), ASMbase::getNoParamDim(), and refB.
|
virtual |
Returns the coordinates of the element center.
Implements ASMbase.
References evalPoint(), geomB, and ASMbase::ndim.
|
virtual |
Computes the total number of integration points in this patch.
Reimplemented from ASMbase.
Reimplemented in ASMu2DIB.
References ASMbase::firstIp, ASMbase::getOrder(), ASMbase::MLGE, ASMbase::ndim, ASMbase::nel, and ASMbase::nGauss.
Returns all functions whose support overlap with the input nodes.
| [in] | nodes | List of (0-based) patch local node IDs (typically requested by adaptive refinement) |
| [in] | dir | 3-bit binary mask on which parameter directions are allowed to grow; i.e. bin(011)=dec(3) allows u-direction and v-direction to grow, default is bin(111)=dec(7) all directions |
References refB.
Referenced by ASMu3D::extendRefinementDomain(), and getOverlappingNodes().
|
inline |
Returns all functions whose support overlap with the input node.
| [in] | node | 0-based patch local node ID |
| [in] | dir | 3-bit binary mask for which parameter directions can grow |
References getOverlappingNodes().
|
virtual |
Refines the mesh adaptively.
| [in] | prm | Input data used to control the mesh refinement |
| sol | Control point results values that are transferred to new mesh |
Implements ASMunstruct.
Reimplemented in ASMu2D, ASMu2D, ASMu2Dmx, ASMu2Dmx, ASMu2Dmx, ASMu3D, ASMu3D, ASMu3Dmx, ASMu3Dmx, and ASMu3Dmx.
References geomB.
Referenced by ASMu2D::refine(), and ASMu3D::refine().
|
virtual |
Swaps between the first and second projection basis.
Reimplemented from ASMbase.
References proj2ThreadGroups, projB, projB2, and projThreadGroups.
|
pure virtual |
Transfers control point variables from old basis to this patch.
| [in] | oldBasis | The LR-spline basis to transfer from |
| [out] | newVar | Gauss point variables associated with this patch |
| [in] | nGauss | Number of Gauss points along a knot-span |
Implemented in ASMu2D, ASMu3D, ASMu2D, and ASMu3D.
Referenced by transferCntrlPtVars().
| bool ASMLRSpline::transferCntrlPtVars | ( | LR::LRSpline * | oldBasis, |
| const RealArray & | oldVar, | ||
| RealArray & | newVar, | ||
| int | nGauss, | ||
| int | nf = 1 |
||
| ) | const |
Transfers control point variables from old basis to this patch.
| [in] | oldBasis | The LR-spline basis to transfer from |
| [in] | oldVar | Control point variables associated with oldBasis |
| [out] | newVar | Gauss point variables associated with this patch |
| [in] | nGauss | Number of Gauss points along a knot-span |
| [in] | nf | Number of field components |
References ASMbase::nf, ASMbase::nGauss, and transferCntrlPtVars().
|
pure virtual |
Transfers Gauss point variables from old basis to this patch.
| [in] | oldBasis | The LR-spline basis to transfer from |
| [in] | oldVar | Gauss point variables associated with oldBasis |
| [out] | newVar | Gauss point variables associated with this patch |
| [in] | nGauss | Number of Gauss points along a knot-span |
|
pure virtual |
Transfers Gauss point variables from old basis to this patch.
| [in] | oldBasis | The LR-spline basis to transfer from |
| [in] | oldVar | Gauss point variables associated with oldBasis |
| [out] | newVar | Gauss point variables associated with this patch |
| [in] | nGauss | Number of Gauss points along a knot-span |