diff --git a/src/ASM/ASMunstruct.h b/src/ASM/ASMunstruct.h index da6b771d..f39c57c6 100644 --- a/src/ASM/ASMunstruct.h +++ b/src/ASM/ASMunstruct.h @@ -115,7 +115,7 @@ public: virtual LR::LRSpline* evalSolution(const IntegrandBase& integrand) const = 0; //! \brief Returns a Bezier basis of order \a p. - static Go::BsplineBasis getBezierBasis(int p, double start=-1, double end=1); + static Go::BsplineBasis getBezierBasis(int p, double start=-1.0, double end=1.0); //! \brief Returns a list of basis functions having support on given elements. IntVec getFunctionsForElements(const IntVec& elements); diff --git a/src/ASM/LR/ASMu2Drecovery.C b/src/ASM/LR/ASMu2Drecovery.C index 0eccf95d..dffd359a 100644 --- a/src/ASM/LR/ASMu2Drecovery.C +++ b/src/ASM/LR/ASMu2Drecovery.C @@ -283,9 +283,13 @@ LR::LRSplineSurface* ASMu2D::scRecovery (const IntegrandBase& integrand) const // if(nel*ng1*ng2 < nPol) if(true) { - // KMO: Here I'm not sure how this will change when m > 1. - // In that case I think we would need smaller patches (as in the tensor - // splines case). But how to do that??? + // I am unsure as to the consequence of going back to previous if-statement + // here so we keep if(true) for now. This was introduced mainly when considering + // functions that live on the boundary and have support on few elements; + // corner functions have support on one element. Using i.e. 2x2 points + // for every element is not enough to fit 1,x,x^2,x^3,y,xy,...x^3y^3 when + // we only have one element. The solution is getExtendedSupport, which is the + // union of support from all functions that overlap *b. supportElements = b->getExtendedSupport(); elStart = supportElements.begin(); elEnd = supportElements.end(); diff --git a/src/ASM/LR/ASMu3D.C b/src/ASM/LR/ASMu3D.C index 4654d882..ceb783e6 100644 --- a/src/ASM/LR/ASMu3D.C +++ b/src/ASM/LR/ASMu3D.C @@ -1131,9 +1131,9 @@ bool ASMu3D::integrate (Integrand& integrand, // Extract bezier basis functions B.fillColumn(1, BN.getColumn(ig)); - B.fillColumn(2, BdNdu.getColumn(ig)*2/du); - B.fillColumn(3, BdNdv.getColumn(ig)*2/dv); - B.fillColumn(4, BdNdw.getColumn(ig)*2/dw); + B.fillColumn(2, BdNdu.getColumn(ig)*2.0/du); + B.fillColumn(3, BdNdv.getColumn(ig)*2.0/dv); + B.fillColumn(4, BdNdw.getColumn(ig)*2.0/dw); // Fetch basis function derivatives at current integration point if (integrand.getIntegrandType() & Integrand::SECOND_DERIVATIVES) diff --git a/src/ASM/LR/ASMu3Drecovery.C b/src/ASM/LR/ASMu3Drecovery.C index 8504b691..dfc65aa2 100644 --- a/src/ASM/LR/ASMu3Drecovery.C +++ b/src/ASM/LR/ASMu3Drecovery.C @@ -158,7 +158,7 @@ bool ASMu3D::globalL2projection (Matrix& sField, this->getGaussPointParameters(gpar[1],1,ng2,iel,yg); this->getGaussPointParameters(gpar[2],2,ng3,iel,zg); - // convert to unstructred mesh representation + // convert to unstructured mesh representation expandTensorGrid(gpar.data(),unstrGpar.data()); // Evaluate the secondary solution at all integration points @@ -300,9 +300,13 @@ LR::LRSplineVolume* ASMu3D::scRecovery (const IntegrandBase& integrand) const // if(nel*ng1*ng2*ng3 < nPol) if(true) { - // KMO: Here I'm not sure how this will change when m > 1. - // In that case I think we would need smaller patches (as in the tensor - // splines case). But how to do that??? + // I am unsure as to the consequence of going back to previous if-statement + // here so we keep if(true) for now. This was introduced mainly when considering + // functions that live on the boundary and have support on few elements; + // corner functions have support on one element. Using i.e. 2x2 points + // for every element is not enough to fit 1,x,x^2,x^3,y,xy,...x^3y^3 when + // we only have one element. The solution is getExtendedSupport, which is the + // union of support from all functions that overlap *b. supportElements = b->getExtendedSupport(); elStart = supportElements.begin(); elEnd = supportElements.end();