From ac07a843d358b21754139138a4ff56c13702b6d1 Mon Sep 17 00:00:00 2001 From: Oliver Sander <sander@igpm.rwth-aachen.de> Date: Sat, 12 Nov 2011 19:50:40 +0000 Subject: [PATCH] lots of adaptation work to the current interfaces. Still not compiling, though. [[Imported from SVN: r8151]] --- test/fdcheck.cc | 62 ++++++++++++++++++++++++------------------------- test/fdcheck.hh | 32 ++++++++++++------------- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/test/fdcheck.cc b/test/fdcheck.cc index 619151f2..13e3be54 100644 --- a/test/fdcheck.cc +++ b/test/fdcheck.cc @@ -56,10 +56,10 @@ void testDDExp() } else { - FieldVector<double,3> ffV = v[i]; ffV[j] += eps; ffV[k] += eps; - FieldVector<double,3> fbV = v[i]; fbV[j] += eps; fbV[k] -= eps; - FieldVector<double,3> bfV = v[i]; bfV[j] -= eps; bfV[k] += eps; - FieldVector<double,3> bbV = v[i]; bbV[j] -= eps; bbV[k] -= eps; + SkewMatrix<double,3> ffV(v[i]); ffV.axial()[j] += eps; ffV.axial()[k] += eps; + SkewMatrix<double,3> fbV(v[i]); fbV.axial()[j] += eps; fbV.axial()[k] -= eps; + SkewMatrix<double,3> bfV(v[i]); bfV.axial()[j] -= eps; bfV.axial()[k] += eps; + SkewMatrix<double,3> bbV(v[i]); bbV.axial()[j] -= eps; bbV.axial()[k] -= eps; Quaternion<double> forwardForwardQ = Quaternion<double>::exp(ffV); Quaternion<double> forwardBackwardQ = Quaternion<double>::exp(fbV); @@ -78,7 +78,7 @@ void testDDExp() // Compute analytical second derivative of exp Dune::array<Dune::FieldMatrix<double,3,3>, 4> ddExp; - Quaternion<double>::DDexp(v[i], ddExp); + Rotation<double,3>::DDexp(v[i], ddExp); for (int m=0; m<4; m++) for (int j=0; j<3; j++) @@ -122,28 +122,28 @@ void testDerivativeOfInterpolatedPosition() // /////////////////////////////////////////////////////////// // First: test the interpolated position // /////////////////////////////////////////////////////////// - fdGrad[0] = Quaternion<double>::interpolate(q[i].mult(Quaternion<double>::exp(eps,0,0)), q[j], s); - fdGrad[0] -= Quaternion<double>::interpolate(q[i].mult(Quaternion<double>::exp(-eps,0,0)), q[j], s); + fdGrad[0] = Rotation<double,3>::interpolate(q[i].mult(Quaternion<double>::exp(eps,0,0)), q[j], s); + fdGrad[0] -= Rotation<double,3>::interpolate(q[i].mult(Quaternion<double>::exp(-eps,0,0)), q[j], s); fdGrad[0] /= 2*eps; - fdGrad[1] = Quaternion<double>::interpolate(q[i].mult(Quaternion<double>::exp(0,eps,0)), q[j], s); - fdGrad[1] -= Quaternion<double>::interpolate(q[i].mult(Quaternion<double>::exp(0,-eps,0)), q[j], s); + fdGrad[1] = Rotation<double,3>::interpolate(q[i].mult(Quaternion<double>::exp(0,eps,0)), q[j], s); + fdGrad[1] -= Rotation<double,3>::interpolate(q[i].mult(Quaternion<double>::exp(0,-eps,0)), q[j], s); fdGrad[1] /= 2*eps; - fdGrad[2] = Quaternion<double>::interpolate(q[i].mult(Quaternion<double>::exp(0,0,eps)), q[j], s); - fdGrad[2] -= Quaternion<double>::interpolate(q[i].mult(Quaternion<double>::exp(0,0,-eps)), q[j], s); + fdGrad[2] = Rotation<double,3>::interpolate(q[i].mult(Quaternion<double>::exp(0,0,eps)), q[j], s); + fdGrad[2] -= Rotation<double,3>::interpolate(q[i].mult(Quaternion<double>::exp(0,0,-eps)), q[j], s); fdGrad[2] /= 2*eps; - fdGrad[3] = Quaternion<double>::interpolate(q[i], q[j].mult(Quaternion<double>::exp(eps,0,0)), s); - fdGrad[3] -= Quaternion<double>::interpolate(q[i], q[j].mult(Quaternion<double>::exp(-eps,0,0)), s); + fdGrad[3] = Rotation<double,3>::interpolate(q[i], q[j].mult(Quaternion<double>::exp(eps,0,0)), s); + fdGrad[3] -= Rotation<double,3>::interpolate(q[i], q[j].mult(Quaternion<double>::exp(-eps,0,0)), s); fdGrad[3] /= 2*eps; - fdGrad[4] = Quaternion<double>::interpolate(q[i], q[j].mult(Quaternion<double>::exp(0,eps,0)), s); - fdGrad[4] -= Quaternion<double>::interpolate(q[i], q[j].mult(Quaternion<double>::exp(0,-eps,0)), s); + fdGrad[4] = Rotation<double,3>::interpolate(q[i], q[j].mult(Quaternion<double>::exp(0,eps,0)), s); + fdGrad[4] -= Rotation<double,3>::interpolate(q[i], q[j].mult(Quaternion<double>::exp(0,-eps,0)), s); fdGrad[4] /= 2*eps; - fdGrad[5] = Quaternion<double>::interpolate(q[i], q[j].mult(Quaternion<double>::exp(0,0,eps)), s); - fdGrad[5] -= Quaternion<double>::interpolate(q[i], q[j].mult(Quaternion<double>::exp(0,0,-eps)), s); + fdGrad[5] = Rotation<double,3>::interpolate(q[i], q[j].mult(Quaternion<double>::exp(0,0,eps)), s); + fdGrad[5] -= Rotation<double,3>::interpolate(q[i], q[j].mult(Quaternion<double>::exp(0,0,-eps)), s); fdGrad[5] /= 2*eps; // Compute analytical gradient @@ -168,34 +168,34 @@ void testDerivativeOfInterpolatedPosition() double intervalLength = l/(double(3)); - fdGrad[0] = Quaternion<double>::interpolateDerivative(q[i].mult(Quaternion<double>::exp(eps,0,0)), + fdGrad[0] = Rotation<double,3>::interpolateDerivative(q[i].mult(Quaternion<double>::exp(eps,0,0)), q[j], s, intervalLength); - fdGrad[0] -= Quaternion<double>::interpolateDerivative(q[i].mult(Quaternion<double>::exp(-eps,0,0)), + fdGrad[0] -= Rotation<double,3>::interpolateDerivative(q[i].mult(Quaternion<double>::exp(-eps,0,0)), q[j], s, intervalLength); fdGrad[0] /= 2*eps; - fdGrad[1] = Quaternion<double>::interpolateDerivative(q[i].mult(Quaternion<double>::exp(0,eps,0)), + fdGrad[1] = Rotation<double,3>::interpolateDerivative(q[i].mult(Quaternion<double>::exp(0,eps,0)), q[j], s, intervalLength); - fdGrad[1] -= Quaternion<double>::interpolateDerivative(q[i].mult(Quaternion<double>::exp(0,-eps,0)), + fdGrad[1] -= Rotation<double,3>::interpolateDerivative(q[i].mult(Quaternion<double>::exp(0,-eps,0)), q[j], s, intervalLength); fdGrad[1] /= 2*eps; - fdGrad[2] = Quaternion<double>::interpolateDerivative(q[i].mult(Quaternion<double>::exp(0,0,eps)), + fdGrad[2] = Rotation<double,3>::interpolateDerivative(q[i].mult(Quaternion<double>::exp(0,0,eps)), q[j], s, intervalLength); - fdGrad[2] -= Quaternion<double>::interpolateDerivative(q[i].mult(Quaternion<double>::exp(0,0,-eps)), + fdGrad[2] -= Rotation<double,3>::interpolateDerivative(q[i].mult(Quaternion<double>::exp(0,0,-eps)), q[j], s, intervalLength); fdGrad[2] /= 2*eps; - fdGrad[3] = Quaternion<double>::interpolateDerivative(q[i], q[j].mult(Quaternion<double>::exp(eps,0,0)), s, intervalLength); - fdGrad[3] -= Quaternion<double>::interpolateDerivative(q[i], q[j].mult(Quaternion<double>::exp(-eps,0,0)), s, intervalLength); + fdGrad[3] = Rotation<double,3>::interpolateDerivative(q[i], q[j].mult(Quaternion<double>::exp(eps,0,0)), s, intervalLength); + fdGrad[3] -= Rotation<double,3>::interpolateDerivative(q[i], q[j].mult(Quaternion<double>::exp(-eps,0,0)), s, intervalLength); fdGrad[3] /= 2*eps; - fdGrad[4] = Quaternion<double>::interpolateDerivative(q[i], q[j].mult(Quaternion<double>::exp(0,eps,0)), s, intervalLength); - fdGrad[4] -= Quaternion<double>::interpolateDerivative(q[i], q[j].mult(Quaternion<double>::exp(0,-eps,0)), s, intervalLength); + fdGrad[4] = Rotation<double,3>::interpolateDerivative(q[i], q[j].mult(Quaternion<double>::exp(0,eps,0)), s, intervalLength); + fdGrad[4] -= Rotation<double,3>::interpolateDerivative(q[i], q[j].mult(Quaternion<double>::exp(0,-eps,0)), s, intervalLength); fdGrad[4] /= 2*eps; - fdGrad[5] = Quaternion<double>::interpolateDerivative(q[i], q[j].mult(Quaternion<double>::exp(0,0,eps)), s, intervalLength); - fdGrad[5] -= Quaternion<double>::interpolateDerivative(q[i], q[j].mult(Quaternion<double>::exp(0,0,-eps)), s, intervalLength); + fdGrad[5] = Rotation<double,3>::interpolateDerivative(q[i], q[j].mult(Quaternion<double>::exp(0,0,eps)), s, intervalLength); + fdGrad[5] -= Rotation<double,3>::interpolateDerivative(q[i], q[j].mult(Quaternion<double>::exp(0,0,-eps)), s, intervalLength); fdGrad[5] /= 2*eps; // Compute analytical velocity vector gradient @@ -235,7 +235,7 @@ int main (int argc, char *argv[]) try // ////////////////////////////////////////////// testDerivativeOfInterpolatedPosition(); exit(0); - typedef std::vector<Configuration> SolutionType; + typedef std::vector<RigidBodyMotion<double,3> > SolutionType; // /////////////////////////////////////// // Create the grid @@ -282,7 +282,7 @@ int main (int argc, char *argv[]) try // /////////////////////////////////////////// // Create a solver for the rod problem // /////////////////////////////////////////// - RodAssembler<GridType> rodAssembler(grid); + RodAssembler<GridType,3> rodAssembler(grid); //rodAssembler.setShapeAndMaterial(0.01, 0.0001, 0.0001, 2.5e5, 0.3); //rodAssembler.setParameters(0,0,0,0,1,0); rodAssembler.setParameters(0,0,100,0,0,0); diff --git a/test/fdcheck.hh b/test/fdcheck.hh index 00ac0cf6..49eea2db 100644 --- a/test/fdcheck.hh +++ b/test/fdcheck.hh @@ -243,13 +243,13 @@ void expHessianFD() // /////////////////////////////////////////////////////////// // Compute gradient by finite-difference approximation // /////////////////////////////////////////////////////////// - FieldVector<double,3> forward; - FieldVector<double,3> backward; + SkewMatrix<double,3> forward; + SkewMatrix<double,3> backward; - FieldVector<double,3> forwardForward; - FieldVector<double,3> forwardBackward; - FieldVector<double,3> backwardForward; - FieldVector<double,3> backwardBackward; + SkewMatrix<double,3> forwardForward; + SkewMatrix<double,3> forwardBackward; + SkewMatrix<double,3> backwardForward; + SkewMatrix<double,3> backwardBackward; for (int i=0; i<3; i++) { @@ -260,8 +260,8 @@ void expHessianFD() if (i==j) { forward = backward = 0; - forward[i] += eps; - backward[i] -= eps; + forward.axial()[i] += eps; + backward.axial()[i] -= eps; // Second derivative // fdHessian[j][k] = (assembler.computeEnergy(forward) @@ -278,14 +278,14 @@ void expHessianFD() forwardForward = forwardBackward = 0; backwardForward = backwardBackward = 0; - forwardForward[i] += eps; - forwardForward[j] += eps; - forwardBackward[i] += eps; - forwardBackward[j] -= eps; - backwardForward[i] -= eps; - backwardForward[j] += eps; - backwardBackward[i] -= eps; - backwardBackward[j] -= eps; + forwardForward.axial()[i] += eps; + forwardForward.axial()[j] += eps; + forwardBackward.axial()[i] += eps; + forwardBackward.axial()[j] -= eps; + backwardForward.axial()[i] -= eps; + backwardForward.axial()[j] += eps; + backwardBackward.axial()[i] -= eps; + backwardBackward.axial()[j] -= eps; hessian = Rotation<double,3>::exp(forwardForward); -- GitLab