Skip to content
Snippets Groups Projects
Commit 1ca92d13 authored by Amaury Johnen's avatar Amaury Johnen
Browse files

update scaled jacobian for pyramids

parent af47f665
No related branches found
No related tags found
No related merge requests found
...@@ -35,7 +35,7 @@ std::vector<double> _CoeffDataAnisotropy::mytimes; ...@@ -35,7 +35,7 @@ std::vector<double> _CoeffDataAnisotropy::mytimes;
std::vector<int> _CoeffDataAnisotropy::mynumbers; std::vector<int> _CoeffDataAnisotropy::mynumbers;
double _CoeffDataScaledJac::cTri = 2/std::sqrt(3); double _CoeffDataScaledJac::cTri = 2/std::sqrt(3);
double _CoeffDataScaledJac::cTet = std::sqrt(2); double _CoeffDataScaledJac::cTet = std::sqrt(2);
double _CoeffDataScaledJac::cPyr = std::sqrt(2)*4; double _CoeffDataScaledJac::cPyr = std::sqrt(2);
void minMaxJacobianDeterminant(MElement *el, double &min, double &max, void minMaxJacobianDeterminant(MElement *el, double &min, double &max,
const fullMatrix<double> *normals) const fullMatrix<double> *normals)
...@@ -688,8 +688,8 @@ void _CoeffDataScaledJac::_computeAtCorner(double &min, double &max) const ...@@ -688,8 +688,8 @@ void _CoeffDataScaledJac::_computeAtCorner(double &min, double &max) const
1/v(i,0)/v(i,1)/v(i,5) + 1/v(i,0)/v(i,1)/v(i,5) +
1/v(i,2)/v(i,3)/v(i,4) + 1/v(i,2)/v(i,3)/v(i,4) +
1/v(i,2)/v(i,3)/v(i,5) + 1/v(i,2)/v(i,3)/v(i,5) +
1/v(i,2)/v(i,4)/v(i,5) + 1/v(i,4)/v(i,5)/v(i,2) +
1/v(i,3)/v(i,4)/v(i,5) ) / 8; 1/v(i,4)/v(i,5)/v(i,3) ) / 8;
break; break;
default: default:
Msg::Error("Unkown type for scaled jac computation"); Msg::Error("Unkown type for scaled jac computation");
...@@ -786,23 +786,35 @@ double _CoeffDataScaledJac::_computeLowerBound() const ...@@ -786,23 +786,35 @@ double _CoeffDataScaledJac::_computeLowerBound() const
} }
case TYPE_PYR: case TYPE_PYR:
raiser->computeCoeff(prox[0], prox[1], prox[2], coeffDenominator); {
result += _computeBoundRational(_coeffsJacDet, coeffDenominator, true); fullVector<double> thirdTerm, coeffNum1, tmp;
raiser->computeCoeff(prox[0], prox[1], prox[3], coeffDenominator); thirdTerm = prox[2];
result += _computeBoundRational(_coeffsJacDet, coeffDenominator, true); thirdTerm.axpy(prox[3]);
raiser->computeCoeff(prox[0], prox[1], prox[4], coeffDenominator); thirdTerm.axpy(prox[4]);
result += _computeBoundRational(_coeffsJacDet, coeffDenominator, true); thirdTerm.axpy(prox[5]);
raiser->computeCoeff(prox[0], prox[1], prox[5], coeffDenominator); raiser->computeCoeff(prox[0], prox[1], thirdTerm, coeffNum1);
result += _computeBoundRational(_coeffsJacDet, coeffDenominator, true); thirdTerm = prox[4];
raiser->computeCoeff(prox[2], prox[4], prox[5], coeffDenominator); thirdTerm.axpy(prox[5]);
result += _computeBoundRational(_coeffsJacDet, coeffDenominator, true); raiser->computeCoeff(prox[2], prox[3], thirdTerm, tmp);
raiser->computeCoeff(prox[2], prox[3], prox[4], coeffDenominator); coeffNum1.axpy(tmp);
result += _computeBoundRational(_coeffsJacDet, coeffDenominator, true); thirdTerm = prox[2];
raiser->computeCoeff(prox[2], prox[3], prox[5], coeffDenominator); thirdTerm.axpy(prox[3]);
result += _computeBoundRational(_coeffsJacDet, coeffDenominator, true); raiser->computeCoeff(prox[4], prox[5], thirdTerm, tmp);
raiser->computeCoeff(prox[3], prox[4], prox[5], coeffDenominator); coeffNum1.axpy(tmp);
result += _computeBoundRational(_coeffsJacDet, coeffDenominator, true);
fullVector<double> coeffDen1, coeffDen2;
raiser->computeCoeff(prox[0], prox[1], prox[2], coeffDen1);
raiser->computeCoeff(prox[3], prox[4], prox[5], coeffDen2);
fullVector<double> &coeffNumerator = tmp;
bezierBasisRaiser *raiserBis;
raiserBis = raiser->getRaisedBezierBasis(3)->getRaiser();
raiserBis->computeCoeff(coeffNum1, _coeffsJacDet, coeffNumerator);
raiserBis->computeCoeff(coeffDen1, coeffDen2, coeffDenominator);
result = _computeBoundRational(coeffNumerator, coeffDenominator, true);
return cPyr*result/8; return cPyr*result/8;
}
default: default:
Msg::Info("Unknown type for scaled Jacobian (%d)", _type); Msg::Info("Unknown type for scaled Jacobian (%d)", _type);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment