fixed: make sure to always set geoBasis
if not we risk getting the wrong setting if we instance a SIM with e.g. subgrid followed by instancing a SIM with Taylor-Hood.
This commit is contained in:
@@ -135,6 +135,7 @@ ASMmxBase::SurfaceVec ASMmxBase::establishBases (Go::SplineSurface* surf,
|
||||
// basis1 should be one degree higher than basis2 and C^p-1 continuous
|
||||
result[0].reset(ASMmxBase::raiseBasis(surf));
|
||||
result[1].reset(new Go::SplineSurface(*surf));
|
||||
geoBasis = 2;
|
||||
}
|
||||
else if (type == REDUCED_CONT_RAISE_BASIS1 || type == REDUCED_CONT_RAISE_BASIS2)
|
||||
{
|
||||
@@ -143,6 +144,7 @@ ASMmxBase::SurfaceVec ASMmxBase::establishBases (Go::SplineSurface* surf,
|
||||
result[0].reset(new Go::SplineSurface(*surf));
|
||||
result[0]->raiseOrder(1,1);
|
||||
result[1].reset(new Go::SplineSurface(*surf));
|
||||
geoBasis = 2;
|
||||
}
|
||||
else if (ASMmxBase::Type == ASMmxBase::DIV_COMPATIBLE)
|
||||
{
|
||||
@@ -260,6 +262,7 @@ ASMmxBase::VolumeVec ASMmxBase::establishBases(Go::SplineVolume* svol,
|
||||
// basis1 should be one degree higher than basis2 and C^p-1 continuous
|
||||
result[0].reset(ASMmxBase::raiseBasis(svol));
|
||||
result[1].reset(new Go::SplineVolume(*svol));
|
||||
geoBasis = 2;
|
||||
}
|
||||
else if (type == REDUCED_CONT_RAISE_BASIS1 || type == REDUCED_CONT_RAISE_BASIS2)
|
||||
{
|
||||
@@ -268,6 +271,7 @@ ASMmxBase::VolumeVec ASMmxBase::establishBases(Go::SplineVolume* svol,
|
||||
result[0].reset(new Go::SplineVolume(*svol));
|
||||
result[0]->raiseOrder(1,1,1);
|
||||
result[1].reset(new Go::SplineVolume(*svol));
|
||||
geoBasis = 2;
|
||||
}
|
||||
else if (ASMmxBase::Type == ASMmxBase::DIV_COMPATIBLE)
|
||||
{
|
||||
@@ -380,7 +384,7 @@ ASMmxBase::VolumeVec ASMmxBase::establishBases(Go::SplineVolume* svol,
|
||||
}
|
||||
|
||||
if (type == FULL_CONT_RAISE_BASIS2 || type == REDUCED_CONT_RAISE_BASIS2)
|
||||
std::swap(result[0], result[1]);
|
||||
std::swap(result[0], result[1]), geoBasis = 1;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -214,8 +214,12 @@ bool ASMu3Dmx::generateFEMTopology ()
|
||||
if (ASMmxBase::Type == ASMmxBase::REDUCED_CONT_RAISE_BASIS1 ||
|
||||
ASMmxBase::Type == ASMmxBase::DIV_COMPATIBLE ||
|
||||
ASMmxBase::Type == ASMmxBase::SUBGRID) {
|
||||
// make a backup as establishBases resets it
|
||||
int geoB = ASMmxBase::geoBasis;
|
||||
std::shared_ptr<Go::SplineVolume> otherBasis =
|
||||
ASMmxBase::establishBases(tensorspline, ASMmxBase::FULL_CONT_RAISE_BASIS1).front();
|
||||
ASMmxBase::establishBases(tensorspline,
|
||||
ASMmxBase::FULL_CONT_RAISE_BASIS1).front();
|
||||
geoBasis = geoB;
|
||||
if (ASMmxBase::Type == ASMmxBase::SUBGRID) {
|
||||
refBasis.reset(new LR::LRSplineVolume(otherBasis.get()));
|
||||
projBasis = m_basis.front();
|
||||
|
||||
Reference in New Issue
Block a user