fixed: do not use bezier extraction with subgrid in 3D unstruct

we cannot uniformly use bezier extraction from gauss points
with subgrid, since we are not evaluating in gauss points
distributed across the element for all bases. this because
our integration elements have an additional subdivision,
which means the pressure basis is evaluated in non-uniform points
(ie we evaluate in 8 distinct sets of gauss-points over its elements).
This commit is contained in:
Arne Morten Kvarving 2023-09-04 12:28:46 +02:00
parent dbb7b41ade
commit 34841db38c

View File

@ -305,7 +305,8 @@ bool ASMu3Dmx::integrate (Integrand& integrand,
bool use2ndDer = integrand.getIntegrandType() & Integrand::SECOND_DERIVATIVES; bool use2ndDer = integrand.getIntegrandType() & Integrand::SECOND_DERIVATIVES;
if (myCache.empty()) { if (myCache.empty()) {
myCache.emplace_back(std::make_unique<BasisFunctionCache>(*this, cachePolicy, 1)); myCache.emplace_back(std::make_unique<BasisFunctionCache>(*this, cachePolicy, 1,
ASMmxBase::Type != SUBGRID));
for (size_t b = 2; b <= this->getNoBasis(); ++b) { for (size_t b = 2; b <= this->getNoBasis(); ++b) {
const BasisFunctionCache& c = static_cast<const BasisFunctionCache&>(*myCache.front()); const BasisFunctionCache& c = static_cast<const BasisFunctionCache&>(*myCache.front());
myCache.emplace_back(std::make_unique<BasisFunctionCache>(c,b)); myCache.emplace_back(std::make_unique<BasisFunctionCache>(c,b));
@ -992,6 +993,7 @@ void ASMu3Dmx::swapProjectionBasis ()
ASMmxBase::itgBasis = ASMmxBase::itgBasis == 1 ? 2 : 1; ASMmxBase::itgBasis = ASMmxBase::itgBasis == 1 ? 2 : 1;
std::swap(projB, projB2); std::swap(projB, projB2);
std::swap(projThreadGroups, proj2ThreadGroups); std::swap(projThreadGroups, proj2ThreadGroups);
geomB = lrspline = m_basis[ASMmxBase::itgBasis-1];
} }
} }