Skip to content
Snippets Groups Projects
Commit 380a80ac authored by Oliver Sander's avatar Oliver Sander Committed by sander@PCPOOL.MI.FU-BERLIN.DE
Browse files

various fixes computing the energy

[[Imported from SVN: r5567]]
parent e5e20a50
No related branches found
No related tags found
Loading
...@@ -63,9 +63,11 @@ energy(const Entity& element, ...@@ -63,9 +63,11 @@ energy(const Entity& element,
// The derivative of the function defined on the actual element // The derivative of the function defined on the actual element
Dune::FieldMatrix<double, TargetSpace::EmbeddedTangentVector::size, gridDim> derivative(0); Dune::FieldMatrix<double, TargetSpace::EmbeddedTangentVector::size, gridDim> derivative(0);
for (int comp=0; comp<4; comp++) for (int comp=0; comp<referenceDerivative.N(); comp++)
jacobianInverseTransposed.umv(referenceDerivative[comp], derivative[comp]); jacobianInverseTransposed.umv(referenceDerivative[comp], derivative[comp]);
#if 0
// old debugging: the image of the derivative mapping must be tangent to the TargetSpace
TargetSpace value = localGeodesicFEFunction.evaluate(quadPos); TargetSpace value = localGeodesicFEFunction.evaluate(quadPos);
for (int i=0; i<gridDim; i++) { for (int i=0; i<gridDim; i++) {
...@@ -74,25 +76,16 @@ energy(const Entity& element, ...@@ -74,25 +76,16 @@ energy(const Entity& element,
dotproduct += value[j]*derivative[j][i]; dotproduct += value[j]*derivative[j][i];
assert(std::fabs(dotproduct) < 1e-6); assert(std::fabs(dotproduct) < 1e-6);
} }
#endif
#if 0 #if 0
std::cout << "Derivative norm: "; std::cout << "Derivative norm squared: " << derivative.frobenius_norm2() << std::endl;
for (int i=0; i<gridDim; i++) {
double derivativenorm = 0;
for (int j=0; j<4; j++)
derivativenorm += derivative[j][i]*derivative[j][i];
std::cout << derivativenorm << ", ";
}
std::cout << std::endl;
#endif #endif
for (int comp=0; comp<4; comp++) { // Add the local energy density
// The Frobenius norm is the correct norm here if the metric of TargetSpace is the identity.
for (int dir=0; dir<gridDim; dir++) // (And if the metric of the domain space is the identity, which it always is here.)
energy += weight * derivative[comp][dir] * derivative[comp][dir]; energy += weight * derivative.frobenius_norm2();
}
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment