changed: move bezier bases to protected scope
and some reorganization of calculations to fix usage with shared models and mixed
This commit is contained in:
parent
c2162ab8db
commit
b3b7846332
@ -543,11 +543,7 @@ bool ASMu2D::generateFEMTopology ()
|
||||
nnod = lrspline->nBasisFunctions();
|
||||
nel = lrspline->nElements();
|
||||
|
||||
const int p1 = lrspline->order(0);
|
||||
const int p2 = lrspline->order(1);
|
||||
|
||||
bezier_u = getBezierBasis(p1);
|
||||
bezier_v = getBezierBasis(p2);
|
||||
this->generateBezierBasis();
|
||||
|
||||
if (!MLGN.empty()) {
|
||||
if (MLGN.size() != nnod)
|
||||
@ -567,11 +563,9 @@ bool ASMu2D::generateFEMTopology ()
|
||||
myMLGE.resize(nel);
|
||||
myMNPC.resize(nel);
|
||||
|
||||
myBezierExtract.resize(nel);
|
||||
lrspline->generateIDs();
|
||||
|
||||
size_t iel = 0;
|
||||
RealArray extrMat;
|
||||
for (const LR::Element* elm : lrspline->getAllElements())
|
||||
{
|
||||
myMLGE[iel] = ++gEl; // global element number over all patches
|
||||
@ -580,17 +574,14 @@ bool ASMu2D::generateFEMTopology ()
|
||||
int lnod = 0;
|
||||
for (LR::Basisfunction* b : elm->support())
|
||||
myMNPC[iel][lnod++] = b->getId();
|
||||
|
||||
// Get bezier extraction matrix
|
||||
PROFILE1("Bezier extraction");
|
||||
lrspline->getBezierExtraction(iel,extrMat);
|
||||
myBezierExtract[iel].resize(elm->nBasisFunctions(),p1*p2);
|
||||
myBezierExtract[iel++].fill(extrMat.data(),extrMat.size());
|
||||
++iel;
|
||||
}
|
||||
|
||||
for (size_t inod = 0; inod < nnod; inod++)
|
||||
myMLGN[inod] = ++gNod;
|
||||
|
||||
this->generateBezierExtraction();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -2517,3 +2508,29 @@ bool ASMu2D::refine (const LR::RefineData& prm,
|
||||
<< std::endl;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void ASMu2D::generateBezierBasis()
|
||||
{
|
||||
bezier_u = this->getBezierBasis(geo->order(0));
|
||||
bezier_v = this->getBezierBasis(geo->order(1));
|
||||
}
|
||||
|
||||
|
||||
void ASMu2D::generateBezierExtraction()
|
||||
{
|
||||
const int p1 = geo->order(0);
|
||||
const int p2 = geo->order(1);
|
||||
|
||||
myBezierExtract.resize(nel);
|
||||
RealArray extrMat;
|
||||
int iel = 0;
|
||||
for (const LR::Element* elm : geo->getAllElements())
|
||||
{
|
||||
// Get bezier extraction matrix
|
||||
PROFILE1("Bezier extraction");
|
||||
geo->getBezierExtraction(iel,extrMat);
|
||||
myBezierExtract[iel].resize(elm->nBasisFunctions(),p1*p2);
|
||||
myBezierExtract[iel++].fill(extrMat.data(),extrMat.size());
|
||||
}
|
||||
}
|
||||
|
@ -582,6 +582,12 @@ protected:
|
||||
//! \brief Converts current tensor spline object to LR-spline.
|
||||
LR::LRSplineSurface* createLRfromTensor();
|
||||
|
||||
//! \brief Generate bezier basis.
|
||||
void generateBezierBasis();
|
||||
|
||||
//! \brief Generate bezier extraction operators.
|
||||
void generateBezierExtraction();
|
||||
|
||||
public:
|
||||
//! \brief Returns the number of elements on a boundary.
|
||||
virtual size_t getNoBoundaryElms(char lIndex, char ldim) const;
|
||||
@ -605,10 +611,10 @@ protected:
|
||||
const Matrices& bezierExtract; //!< Bezier extraction matrices
|
||||
Matrices myBezierExtract; //!< Bezier extraction matrices
|
||||
|
||||
private:
|
||||
Go::BsplineBasis bezier_u; //!< Bezier basis in the u-direction
|
||||
Go::BsplineBasis bezier_v; //!< Bezier basis in the v-direction
|
||||
|
||||
private:
|
||||
mutable double aMin; //!< Minimum element area for adaptive refinement
|
||||
};
|
||||
|
||||
|
@ -279,6 +279,8 @@ bool ASMu2Dmx::generateFEMTopology ()
|
||||
#endif
|
||||
|
||||
geo = m_basis[geoBasis-1].get();
|
||||
this->generateBezierBasis();
|
||||
this->generateBezierExtraction();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user