Changed: Use createFEMmodel instead of preprocess when testing the

the coordinate mappings. That is sufficient since boundary conditions,
integrands, etc. are not needed for these tests.

Inline the comparison values to avoid dependency on data files
(such that the test-program can be run from an arbitrary working dir).
This commit is contained in:
Knut Morten Okstad 2018-02-10 07:43:57 +01:00
parent dc9c862e27
commit a1199376e2
18 changed files with 374 additions and 561 deletions

View File

@ -12,11 +12,11 @@
#include "CoordinateMapping.h" #include "CoordinateMapping.h"
#include "ASMs1D.h" #include "ASMs1D.h"
#include "SIM1D.h"
#include "ASMs2D.h" #include "ASMs2D.h"
#include "ASMs2Dmx.h" #include "ASMs2Dmx.h"
#include "SIM2D.h"
#include "ASMs3D.h" #include "ASMs3D.h"
#include "SIM1D.h"
#include "SIM2D.h"
#include "SIM3D.h" #include "SIM3D.h"
#include "SplineUtils.h" #include "SplineUtils.h"
@ -26,162 +26,196 @@
#include <fstream> #include <fstream>
#include <array> #include <array>
static Matrix readMatrix(size_t r, size_t c, const std::string& file)
{
Matrix result(r,c);
std::ifstream f(file);
for (size_t i=1;i<=r;++i)
for (size_t j=1;j<=c;++j)
f >> result(i,j);
return result;
}
static Matrix3D readMatrices(size_t r, size_t c, size_t k, const std::string& file)
{
Matrix3D result(r,c,k);
std::ifstream f(file);
for (size_t n=1;n<=k;++n)
for (size_t i=1;i<=r;++i)
for (size_t j=1;j<=c;++j)
f >> result(i,j,n);
return result;
}
auto&& CHECK_MATRICES_EQUAL = [](const Matrix& A, const std::string& path)
{
Matrix B = readMatrix(A.rows(), A.cols(), path);
for (size_t i=1;i<=A.rows();++i)
for (size_t j=1;j<=A.cols();++j)
ASSERT_NEAR(A(i,j), B(i,j), 1e-13);
};
auto&& CHECK_MATRICES3D_EQUAL = [](const Matrix3D& A, const std::string& path)
{
Matrix3D B = readMatrices(A.dim(1), A.dim(2), A.dim(3), path);
for (size_t i=1;i<=A.dim(1);++i)
for (size_t j=1;j<=A.dim(2);++j)
for (size_t k=1;k<=A.dim(3);++k)
ASSERT_NEAR(A(i,j,k), B(i,j,k), 1e-13);
};
TEST(TestCoordinateMapping, Jacobian1D) TEST(TestCoordinateMapping, Jacobian1D)
{ {
SIM1D sim(1); SIM1D sim(1);
sim.createDefaultModel(); ASSERT_TRUE(sim.createDefaultModel());
ASMs1D& p = static_cast<ASMs1D&>(*sim.getPatch(1)); ASMs1D& p = static_cast<ASMs1D&>(*sim.getPatch(1));
p.uniformRefine(3); ASSERT_TRUE(p.uniformRefine(3));
sim.preprocess(); ASSERT_TRUE(sim.createFEMmodel());
Vector N; Vector N;
utl::matrix<Real> dNdU; Matrix X, dNdU;
p.extractBasis(0.25, N, dNdU); p.extractBasis(0.25, N, dNdU);
utl::matrix<Real> X;
p.getElementCoordinates(X, 2); p.getElementCoordinates(X, 2);
utl::matrix<Real> J; Matrix J, dNdX;
utl::matrix<Real> dNdX;
Real det = utl::Jacobian(J, dNdX, X, dNdU, true); Real det = utl::Jacobian(J, dNdX, X, dNdU, true);
ASSERT_FLOAT_EQ(det, 1.0);
ASSERT_FLOAT_EQ(J(1,1), 1.0); EXPECT_FLOAT_EQ(det, 1.0);
CHECK_MATRICES_EQUAL(dNdX, "src/Utility/Test/refdata/Jacobian1D_dNdX.asc"); EXPECT_FLOAT_EQ(J(1,1), 1.0);
EXPECT_EQ(dNdX.rows(), 2U);
EXPECT_EQ(dNdX.cols(), 1U);
EXPECT_FLOAT_EQ(dNdX(1,1),-4.0);
EXPECT_FLOAT_EQ(dNdX(2,1), 4.0);
} }
TEST(TestCoordinateMapping, Hessian1D) TEST(TestCoordinateMapping, Hessian1D)
{ {
SIM1D sim(1); SIM1D sim(1);
sim.createDefaultModel(); ASSERT_TRUE(sim.createDefaultModel());
ASMs1D& p = static_cast<ASMs1D&>(*sim.getPatch(1)); ASMs1D& p = static_cast<ASMs1D&>(*sim.getPatch(1));
p.raiseOrder(2); ASSERT_TRUE(p.raiseOrder(2));
p.uniformRefine(3); ASSERT_TRUE(p.uniformRefine(3));
sim.preprocess(); ASSERT_TRUE(sim.createFEMmodel());
Vector N; Vector N;
utl::matrix<Real> dNdU; Matrix X, dNdU;
Matrix3D d2Ndu2; Matrix3D d2Ndu2;
p.extractBasis(0.25, N, dNdU, d2Ndu2); p.extractBasis(0.25, N, dNdU, d2Ndu2);
utl::matrix<Real> X;
p.getElementCoordinates(X, 2); p.getElementCoordinates(X, 2);
utl::matrix<Real> J; Matrix J, dNdX;
utl::matrix<Real> dNdX; Matrix3D H, d2NdX2;
Matrix3D d2NdX2;
Matrix3D H;
Real det = utl::Jacobian(J, dNdX, X, dNdU, true); Real det = utl::Jacobian(J, dNdX, X, dNdU, true);
utl::Hessian(H, d2NdX2, J, X, d2Ndu2, dNdX); utl::Hessian(H, d2NdX2, J, X, d2Ndu2, dNdX);
ASSERT_FLOAT_EQ(det, 1.0); const double dndx[] = {
ASSERT_FLOAT_EQ(J(1,1), 1.0); -3.0, 1.0, 2.0, 0.0
CHECK_MATRICES_EQUAL(dNdX, "src/Utility/Test/refdata/Hessian1D_dNdX.asc"); };
CHECK_MATRICES3D_EQUAL(d2NdX2, "src/Utility/Test/refdata/Hessian1D_d2NdX2.asc");
ASSERT_NEAR(H(1,1,1), 0.0, 1e-12); const double d2ndx2[] = {
24.0,-40.0, 16.0, 0.0
};
EXPECT_FLOAT_EQ(det, 1.0);
EXPECT_FLOAT_EQ(J(1,1), 1.0);
EXPECT_NEAR(H(1,1,1), 0.0, 1.0e-13);
size_t i = 0;
EXPECT_EQ(dNdX.rows(), 4U);
EXPECT_EQ(dNdX.cols(), 1U);
for (double v : dNdX)
EXPECT_FLOAT_EQ(dndx[i++], v);
i = 0;
EXPECT_EQ(d2NdX2.dim(1), 4U);
EXPECT_EQ(d2NdX2.dim(2), 1U);
EXPECT_EQ(d2NdX2.dim(3), 1U);
for (double v : d2NdX2)
EXPECT_FLOAT_EQ(d2ndx2[i++], v);
} }
TEST(TestCoordinateMapping, Jacobian2D) TEST(TestCoordinateMapping, Jacobian2D)
{ {
SIM2D sim(1); SIM2D sim(1);
sim.createDefaultModel(); ASSERT_TRUE(sim.createDefaultModel());
ASMs2D& p = static_cast<ASMs2D&>(*sim.getPatch(1)); ASMs2D& p = static_cast<ASMs2D&>(*sim.getPatch(1));
p.uniformRefine(1,3); ASSERT_TRUE(p.uniformRefine(0,3));
p.uniformRefine(2,3); ASSERT_TRUE(p.uniformRefine(1,3));
sim.preprocess(); ASSERT_TRUE(sim.createFEMmodel());
Vector N; Vector N;
utl::matrix<Real> dNdU; Matrix X, dNdU;
p.extractBasis(0.25, 0.25, N, dNdU); p.extractBasis(0.25, 0.25, N, dNdU);
utl::matrix<Real> X;
p.getElementCoordinates(X, 2); p.getElementCoordinates(X, 2);
utl::matrix<Real> J; Matrix J, dNdX;
utl::matrix<Real> dNdX;
Real det = utl::Jacobian(J, dNdX, X, dNdU, true); Real det = utl::Jacobian(J, dNdX, X, dNdU, true);
ASSERT_FLOAT_EQ(det, 1.0);
CHECK_MATRICES_EQUAL(J, "src/Utility/Test/refdata/Jacobian2D_J.asc"); const double dndx[] = {
CHECK_MATRICES_EQUAL(dNdX, "src/Utility/Test/refdata/Jacobian2D_dNdX.asc"); -4.0, 4.0, 0.0, 0.0,
-4.0, 0.0, 4.0, 0.0
};
EXPECT_FLOAT_EQ(det, 1.0);
for (size_t i = 1; i <= J.rows(); i++)
for (size_t j = 1; j <= J.rows(); j++)
EXPECT_FLOAT_EQ(J(i,j), i == j ? 1.0 : 0.0);
size_t i = 0;
EXPECT_EQ(dNdX.rows(), 4U);
EXPECT_EQ(dNdX.cols(), 2U);
for (double v : dNdX)
EXPECT_FLOAT_EQ(dndx[i++], v);
} }
TEST(TestCoordinateMapping, Hessian2D) TEST(TestCoordinateMapping, Hessian2D)
{ {
SIM2D sim(1); SIM2D sim(1);
sim.createDefaultModel(); ASSERT_TRUE(sim.createDefaultModel());
ASMs2D& p = static_cast<ASMs2D&>(*sim.getPatch(1)); ASMs2D& p = static_cast<ASMs2D&>(*sim.getPatch(1));
p.raiseOrder(2,2); ASSERT_TRUE(p.raiseOrder(2,2));
p.uniformRefine(1,3); ASSERT_TRUE(p.uniformRefine(0,3));
p.uniformRefine(2,3); ASSERT_TRUE(p.uniformRefine(1,3));
sim.preprocess(); ASSERT_TRUE(sim.createFEMmodel());
Vector N; Vector N;
utl::matrix<Real> dNdU; Matrix X, dNdU;
Matrix3D d2Ndu2; Matrix3D d2Ndu2;
p.extractBasis(0.25, 0.25, N, dNdU, d2Ndu2); p.extractBasis(0.25, 0.25, N, dNdU, d2Ndu2);
utl::matrix<Real> X;
p.getElementCoordinates(X, 2); p.getElementCoordinates(X, 2);
utl::matrix<Real> J; Matrix J, dNdX;
utl::matrix<Real> dNdX; Matrix3D H, d2NdX2;
Matrix3D d2NdX2;
Matrix3D H;
Real det = utl::Jacobian(J, dNdX, X, dNdU, true); Real det = utl::Jacobian(J, dNdX, X, dNdU, true);
utl::Hessian(H, d2NdX2, J, X, d2Ndu2, dNdX); utl::Hessian(H, d2NdX2, J, X, d2Ndu2, dNdX);
ASSERT_FLOAT_EQ(det, 1.0);
CHECK_MATRICES_EQUAL(J, "src/Utility/Test/refdata/Hessian2D_J.asc"); const double dndx[] = {
CHECK_MATRICES3D_EQUAL(H, "src/Utility/Test/refdata/Hessian2D_H.asc"); -0.75, 0.25, 0.5, 0.0,-1.75, 0.5833333333333, 1.1666666666667, 0.0,
-0.5, 0.1666666666667, 0.3333333333333, 0.0, 0.0, 0.0, 0.0, 0.0,
-1.2857142857143, -3.0, -0.8571428571428, 0.0,
0.4285714285714, 1.0, 0.2857142857143, 0.0,
0.8571428571428, 2.0, 0.5714285714285, 0.0,
0.0, 0.0, 0.0, 0.0
};
const double d2ndx2[] = {
6.0, -10.0, 4.0, 0.0, 14.0, -23.333333333333, 9.333333333333, 0.0,
4.0, -6.666666666667, 2.666666666667, 0.0, 0.0, 0.0, 0.0, 0.0,
15.428571428571, -5.142857142857, -10.285714285714, 0.0,
-5.142857142857, 1.714285714286, 3.428571428571, 0.0,
-10.285714285714, 3.428571428571, 6.857142857143, 0.0, 0.0, 0.0, 0.0, 0.0,
15.428571428571, -5.142857142857, -10.285714285714, 0.0,
-5.142857142857, 1.714285714286, 3.428571428571, 0.0,
-10.285714285714, 3.428571428571, 6.857142857143, 0.0, 0.0, 0.0, 0.0, 0.0,
20.151603498542, 47.020408163265, 13.434402332362, 0.0,
-30.227405247813, -70.530612244897, -20.151603498542, 0.0,
10.075801749271, 23.510204081632, 6.717201166181, 0.0, 0.0, 0.0, 0.0, 0.0
};
EXPECT_FLOAT_EQ(det, 7.0/12.0);
EXPECT_NEAR(J(1,1), 1.0, 1.0e-13);
EXPECT_NEAR(J(2,2), 1.7142857142857, 1.0e-13);
EXPECT_NEAR(J(1,2), 0.0, 1.0e-13);
EXPECT_NEAR(J(2,1), 0.0, 1.0e-13);
for (size_t i = 1; i <= H.dim(1); i++)
for (size_t j = 1; j <= H.dim(2); j++)
for (size_t k = 1; k <= H.dim(3); k++)
EXPECT_NEAR(H(i,j,k), i==j && j==k && k==2 ? 2.0/3.0 : 0.0, 1.0e-13);
size_t i = 0;
EXPECT_EQ(dNdX.rows(), 16U);
EXPECT_EQ(dNdX.cols(), 2U);
for (double v : dNdX)
EXPECT_NEAR(dndx[i++], v, 1.0e-13);
i = 0;
EXPECT_EQ(d2NdX2.dim(1), 16U);
EXPECT_EQ(d2NdX2.dim(2), 2U);
EXPECT_EQ(d2NdX2.dim(3), 2U);
for (double v : d2NdX2)
EXPECT_NEAR(d2ndx2[i++], v, 1.0e-12);
} }
TEST(TestCoordinateMapping, Hessian2D_mixed) TEST(TestCoordinateMapping, Hessian2D_mixed)
{ {
SIM2D sim({1,1}); SIM2D sim({1,1});
sim.createDefaultModel(); ASSERT_TRUE(sim.createDefaultModel());
ASMs2Dmx& p = static_cast<ASMs2Dmx&>(*sim.getPatch(1)); ASMs2Dmx& p = static_cast<ASMs2Dmx&>(*sim.getPatch(1));
sim.preprocess(); ASSERT_TRUE(sim.createFEMmodel());
std::vector<std::vector<Go::BasisDerivsSf2>> splinex2(2); std::array<std::vector<Go::BasisDerivsSf2>, 2> splinex2;
p.getBasis(1)->computeBasisGrid({0.5}, {0.5}, splinex2[0]); p.getBasis(1)->computeBasisGrid({0.5}, {0.5}, splinex2[0]);
p.getBasis(2)->computeBasisGrid({0.5}, {0.5}, splinex2[1]); p.getBasis(2)->computeBasisGrid({0.5}, {0.5}, splinex2[1]);
@ -194,82 +228,286 @@ TEST(TestCoordinateMapping, Hessian2D_mixed)
Matrix Jac; Matrix Jac;
std::array<Matrix, 2> grad; std::array<Matrix, 2> grad;
int geoBasis = ASMmxBase::geoBasis; int geoBasis = ASMmxBase::geoBasis - 1;
Matrix Xnod; Matrix Xnod;
p.getElementCoordinates(Xnod,1); p.getElementCoordinates(Xnod,1);
utl::Jacobian(Jac, grad[geoBasis-1], Xnod, dNxdu[geoBasis-1]); utl::Jacobian(Jac, grad[geoBasis], Xnod, dNxdu[geoBasis]);
grad[1-(geoBasis-1)].multiply(dNxdu[1-(geoBasis-1)],Jac); grad[1-geoBasis].multiply(dNxdu[1-geoBasis],Jac);
const double Hess_basis1[] = {
0.5,-1.0, 0.5, 1.0,-2.0, 1.0, 0.5,-1.0, 0.5,
1.0, 0.0,-1.0, 0.0, 0.0, 0.0,-1.0, 0.0, 1.0,
1.0, 0.0,-1.0, 0.0, 0.0, 0.0,-1.0, 0.0, 1.0,
0.5, 1.0, 0.5,-1.0,-2.0,-1.0, 0.5, 1.0, 0.5
};
const double Hess_basis2[] = {
0.0, 0.0, 0.0, 0.0,
1.0,-1.0,-1.0, 1.0,
1.0,-1.0,-1.0, 1.0,
0.0, 0.0, 0.0, 0.0,
};
size_t i;
Matrix3D Hess; Matrix3D Hess;
std::array<Matrix3D, 2> hess; std::array<Matrix3D, 2> hess;
utl::Hessian(Hess, hess[1],Jac,Xnod,d2Nxdu2[1],grad[1],true); for (int b = 1; b >= 0; b--)
utl::Hessian(Hess, hess[0],Jac,Xnod,d2Nxdu2[0],grad[0],false); {
utl::Hessian(Hess,hess[b],Jac,Xnod,d2Nxdu2[b],grad[b],b==1);
// geometry mapping should be the identify mapping
const Real* h = hess[b].ptr();
i = 0;
for (double v : d2Nxdu2[b])
EXPECT_FLOAT_EQ(h[i++], v);
}
// geometry mapping should be the identify mapping i = 0;
for (size_t d = 0; d < 2; ++ d) for (double v : hess[0])
for (size_t i=0; i < d2Nxdu2[d].size(); ++i) EXPECT_FLOAT_EQ(Hess_basis1[i++],v);
ASSERT_FLOAT_EQ(d2Nxdu2[d].ptr()[i], hess[d].ptr()[i]);
CHECK_MATRICES3D_EQUAL(hess[0], "src/Utility/Test/refdata/Hessian2D_mixed_b1.asc"); i = 0;
CHECK_MATRICES3D_EQUAL(hess[1], "src/Utility/Test/refdata/Hessian2D_mixed_b2.asc"); for (double v : hess[1])
EXPECT_FLOAT_EQ(Hess_basis2[i++],v);
} }
TEST(TestCoordinateMapping, Jacobian3D) TEST(TestCoordinateMapping, Jacobian3D)
{ {
SIM3D sim(1); SIM3D sim(1);
sim.createDefaultModel(); ASSERT_TRUE(sim.createDefaultModel());
ASMs3D& p = static_cast<ASMs3D&>(*sim.getPatch(1)); ASMs3D& p = static_cast<ASMs3D&>(*sim.getPatch(1));
p.uniformRefine(0, 3); ASSERT_TRUE(p.uniformRefine(0,3));
p.uniformRefine(1, 3); ASSERT_TRUE(p.uniformRefine(1,3));
p.uniformRefine(2, 3); ASSERT_TRUE(p.uniformRefine(2,3));
sim.preprocess(); ASSERT_TRUE(sim.createFEMmodel());
Vector N; Vector N;
utl::matrix<Real> dNdU; Matrix X, dNdU;
p.extractBasis(0.25, 0.25, 0.25, N, dNdU); p.extractBasis(0.25, 0.25, 0.25, N, dNdU);
utl::matrix<Real> X;
p.getElementCoordinates(X, 2); p.getElementCoordinates(X, 2);
utl::matrix<Real> J; Matrix J, dNdX;
utl::matrix<Real> dNdX;
Real det = utl::Jacobian(J, dNdX, X, dNdU, true); Real det = utl::Jacobian(J, dNdX, X, dNdU, true);
ASSERT_FLOAT_EQ(det, 1.0);
CHECK_MATRICES_EQUAL(J, "src/Utility/Test/refdata/Jacobian3D_J.asc"); const double dndx[] = {
CHECK_MATRICES_EQUAL(dNdX, "src/Utility/Test/refdata/Jacobian3D_dNdX.asc"); -4.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
-4.0, 0.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0,
-4.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0
};
EXPECT_FLOAT_EQ(det, 1.0);
for (size_t i = 1; i <= J.rows(); i++)
for (size_t j = 1; j <= J.rows(); j++)
EXPECT_FLOAT_EQ(J(i,j), i == j ? 1.0 : 0.0);
size_t i = 0;
EXPECT_EQ(dNdX.rows(), 8U);
EXPECT_EQ(dNdX.cols(), 3U);
for (double v : dNdX)
EXPECT_FLOAT_EQ(dndx[i++], v);
} }
TEST(TestCoordinateMapping, Hessian3D) TEST(TestCoordinateMapping, Hessian3D)
{ {
SIM3D sim(1); SIM3D sim(1);
sim.createDefaultModel(); ASSERT_TRUE(sim.createDefaultModel());
ASMs3D& p = static_cast<ASMs3D&>(*sim.getPatch(1)); ASMs3D& p = static_cast<ASMs3D&>(*sim.getPatch(1));
p.raiseOrder(2,2,2); ASSERT_TRUE(p.raiseOrder(2,2,2));
p.uniformRefine(0,3); ASSERT_TRUE(p.uniformRefine(0,3));
p.uniformRefine(1,3); ASSERT_TRUE(p.uniformRefine(1,3));
p.uniformRefine(2,3); ASSERT_TRUE(p.uniformRefine(2,3));
sim.preprocess(); ASSERT_TRUE(sim.createFEMmodel());
Vector N; Vector N;
utl::matrix<Real> dNdU; Matrix X, dNdU;
Matrix3D d2Ndu2; Matrix3D d2Ndu2;
p.extractBasis(0.25, 0.25, 0.25, N, dNdU, d2Ndu2); p.extractBasis(0.25, 0.25, 0.25, N, dNdU, d2Ndu2);
utl::matrix<Real> X;
p.getElementCoordinates(X, 2); p.getElementCoordinates(X, 2);
utl::matrix<Real> J; Matrix J, dNdX;
utl::matrix<Real> dNdX; Matrix3D H, d2NdX2;
Matrix3D d2NdX2;
Matrix3D H;
Real det = utl::Jacobian(J, dNdX, X, dNdU, true); Real det = utl::Jacobian(J, dNdX, X, dNdU, true);
utl::Hessian(H, d2NdX2, J, X, d2Ndu2, dNdX); utl::Hessian(H, d2NdX2, J, X, d2Ndu2, dNdX);
ASSERT_FLOAT_EQ(det, 0.34027779);
CHECK_MATRICES_EQUAL(J, "src/Utility/Test/refdata/Hessian3D_J.asc"); size_t i, j, k;
CHECK_MATRICES_EQUAL(dNdX, "src/Utility/Test/refdata/Hessian3D_dNdX.asc"); EXPECT_FLOAT_EQ(det, 0.34027779);
CHECK_MATRICES3D_EQUAL(d2NdX2, "src/Utility/Test/refdata/Hessian3D_d2NdX2.asc"); for (i = 1; i <= J.rows(); i++)
CHECK_MATRICES3D_EQUAL(H, "src/Utility/Test/refdata/Hessian3D_H.asc"); for (j = 1; j <= J.rows(); j++)
if (i == 1 && j == 1)
EXPECT_FLOAT_EQ(J(i,j), 1.0);
else
EXPECT_NEAR(J(i,j), i == j ? 1.7142857142857 : 0.0, 1.0e-13);
const double dndx[] = {
-0.1875, 0.0625, 0.125, 0, -0.4375, 0.1458333333333,
0.2916666666667, 0, -0.125, 0.04166666666667, 0.08333333333333, 0,
0, 0, 0, 0, -0.4375, 0.1458333333333,
0.2916666666667, 0, -1.0208333333333, 0.3402777777778, 0.6805555555556, 0,
-0.2916666666667, 0.09722222222222, 0.1944444444444, 0, 0, 0,
0, 0, -0.125, 0.04166666666667, 0.08333333333333, 0,
-0.2916666666667, 0.09722222222222, 0.1944444444444, 0, -0.08333333333333, 0.02777777777778,
0.05555555555556, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0,
-0.3214285714286, -0.75, -0.2142857142857, 0, 0.1071428571429, 0.25,
0.07142857142857, 0, 0.2142857142857, 0.5, 0.1428571428571, 0,
0, 0, 0, 0, -0.75, -1.75,
-0.5, 0, 0.25, 0.5833333333333, 0.1666666666667, 0,
0.5, 1.1666666666667, 0.3333333333333, 0, 0, 0,
0, 0, -0.2142857142857, -0.5, -0.1428571428571, 0,
0.07142857142857, 0.1666666666667, 0.04761904761905, 0, 0.1428571428571, 0.3333333333333,
0.0952380952381, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0,
-0.3214285714286, -0.75, -0.2142857142857, 0, -0.75, -1.75,
-0.5, 0, -0.2142857142857, -0.5, -0.1428571428571, 0,
0, 0, 0, 0, 0.1071428571429, 0.25,
0.07142857142857, 0, 0.25, 0.5833333333333, 0.1666666666667, 0,
0.07142857142857, 0.1666666666667, 0.04761904761905, 0, 0, 0,
0, 0, 0.2142857142857, 0.5, 0.1428571428571, 0,
0.5, 1.1666666666667, 0.3333333333333, 0, 0.1428571428571, 0.3333333333333,
0.0952380952381, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0.0
};
const double d2ndx2[] = {
1.5, -2.5, 1, 0, 3.5, -5.833333333333,
2.333333333333, 0, 1, -1.666666666667, 0.6666666666667, 0,
0, 0, 0, 0, 3.5, -5.833333333333,
2.333333333333, 0, 8.166666666667, -13.611111111111, 5.444444444444, 0,
2.333333333333, -3.888888888889, 1.555555555556, 0, 0, 0,
0, 0, 1, -1.666666666667, 0.6666666666667, 0,
2.333333333333, -3.888888888889, 1.555555555556, 0, 0.6666666666667, -1.111111111111,
0.4444444444444, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0,
3.857142857143, -1.285714285714, -2.571428571429, 0, -1.285714285714, 0.4285714285714,
0.8571428571429, 0, -2.571428571429, 0.8571428571429, 1.714285714286, 0,
0, 0, 0, 0, 9, -3,
-6, 0, -3, 1, 2, 0,
-6, 2, 4, 0, 0, 0,
0, 0, 2.571428571429, -0.8571428571429, -1.714285714286, 0,
-0.8571428571429, 0.2857142857143, 0.5714285714286, 0, -1.714285714286, 0.5714285714286,
1.142857142857, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0,
3.857142857143, -1.285714285714, -2.571428571429, 0, 9, -3,
-6, 0, 2.571428571429, -0.8571428571429, -1.714285714286, 0,
0, 0, 0, 0, -1.285714285714, 0.4285714285714,
0.8571428571429, 0, -3, 1, 2, 0,
-0.8571428571429, 0.2857142857143, 0.5714285714286, 0, 0, 0,
0, 0, -2.571428571429, 0.8571428571429, 1.714285714286, 0,
-6, 2, 4, 0, -1.714285714286, 0.5714285714286,
1.142857142857, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0,
3.857142857143, -1.285714285714, -2.571428571429, 0, -1.285714285714, 0.4285714285714,
0.8571428571429, 0, -2.571428571429, 0.8571428571429, 1.714285714286, 0,
0, 0, 0, 0, 9, -3,
-6, 0, -3, 1, 2, 0,
-6, 2, 4, 0, 0, 0,
0, 0, 2.571428571429, -0.8571428571429, -1.714285714286, 0,
-0.8571428571429, 0.2857142857143, 0.5714285714286, 0, -1.714285714286, 0.5714285714286,
1.142857142857, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0,
5.037900874636, 11.755102040816, 3.35860058309, 0, -7.556851311953, -17.632653061224,
-5.037900874636, 0, 2.518950437318, 5.877551020408, 1.679300291545, 0,
0, 0, 0, 0, 11.755102040816, 27.428571428571,
7.836734693878, 0, -17.632653061224, -41.142857142857, -11.755102040816, 0,
5.877551020408, 13.714285714286, 3.918367346939, 0, 0, 0,
0, 0, 3.35860058309, 7.836734693878, 2.239067055394, 0,
-5.037900874636, -11.755102040816, -3.35860058309, 0, 1.679300291545, 3.918367346939,
1.119533527697, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0,
6.612244897959, 15.428571428571, 4.408163265306, 0, -2.204081632653, -5.142857142857,
-1.469387755102, 0, -4.408163265306, -10.285714285714, -2.938775510204, 0,
0, 0, 0, 0, -2.204081632653, -5.142857142857,
-1.469387755102, 0, 0.734693877551, 1.714285714286, 0.4897959183673, 0,
1.469387755102, 3.428571428571, 0.9795918367347, 0, 0, 0,
0, 0, -4.408163265306, -10.285714285714, -2.938775510204, 0,
1.469387755102, 3.428571428571, 0.9795918367347, 0, 2.938775510204, 6.857142857143,
1.959183673469, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0,
3.857142857143, -1.285714285714, -2.571428571429, 0, 9, -3,
-6, 0, 2.571428571429, -0.8571428571429, -1.714285714286, 0,
0, 0, 0, 0, -1.285714285714, 0.4285714285714,
0.8571428571429, 0, -3, 1, 2, 0,
-0.8571428571429, 0.2857142857143, 0.5714285714286, 0, 0, 0,
0, 0, -2.571428571429, 0.8571428571429, 1.714285714286, 0,
-6, 2, 4, 0, -1.714285714286, 0.5714285714286,
1.142857142857, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0,
6.612244897959, 15.428571428571, 4.408163265306, 0, -2.204081632653, -5.142857142857,
-1.469387755102, 0, -4.408163265306, -10.285714285714, -2.938775510204, 0,
0, 0, 0, 0, -2.204081632653, -5.142857142857,
-1.469387755102, 0, 0.734693877551, 1.714285714286, 0.4897959183673, 0,
1.469387755102, 3.428571428571, 0.9795918367347, 0, 0, 0,
0, 0, -4.408163265306, -10.285714285714, -2.938775510204, 0,
1.469387755102, 3.428571428571, 0.9795918367347, 0, 2.938775510204, 6.857142857143,
1.959183673469, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0,
5.037900874636, 11.755102040816, 3.35860058309, 0, 11.755102040816, 27.428571428571,
7.836734693878, 0, 3.35860058309, 7.836734693878, 2.239067055394, 0,
0, 0, 0, 0, -7.556851311953, -17.632653061224,
-5.037900874636, 0, -17.632653061224, -41.142857142857, -11.755102040816, 0,
-5.037900874636, -11.755102040816, -3.35860058309, 0, 0, 0,
0, 0, 2.518950437318, 5.877551020408, 1.679300291545, 0,
5.877551020408, 13.714285714286, 3.918367346939, 0, 1.679300291545, 3.918367346939,
1.119533527697, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0
};
i = 0;
EXPECT_EQ(dNdX.rows(), 64U);
EXPECT_EQ(dNdX.cols(), 3U);
for (double v : dNdX)
EXPECT_NEAR(dndx[i++], v, 1.0e-13);
i = 0;
EXPECT_EQ(d2NdX2.dim(1), 64U);
EXPECT_EQ(d2NdX2.dim(2), 3U);
EXPECT_EQ(d2NdX2.dim(3), 3U);
for (double v : d2NdX2)
EXPECT_NEAR(d2ndx2[i++], v, 1.0e-12);
for (i = 1; i <= H.dim(1); i++)
for (j = 1; j <= H.dim(2); j++)
for (k = 1; k <= H.dim(3); k++)
if (k > 1 && j > 1 && i == j && i == k)
EXPECT_NEAR(H(i,j,k), 2.0/3.0, 1.0e-13);
else
EXPECT_NEAR(H(i,j,k), 0.0, 1.0e-13);
} }

View File

@ -1,4 +0,0 @@
24.0
-40.0
16.0
0.0

View File

@ -1,4 +0,0 @@
-3.0
1.0
2.0
0.0

View File

@ -1,5 +0,0 @@
0 0
0 0
0 0
0 0

View File

@ -1,2 +0,0 @@
1 0
0 1

View File

@ -1,61 +0,0 @@
0.4218750000000002 2.109375
-0.5624999999999999 3.893370001395446e-16
-0.09375000000000006 -1.40625
0.1874999999999999 -0.625
0.046875 -0.07812500000000001
2.734375 3.671874999999998
-3.645833333333333 7.518942066186973e-16
-0.6076388888888891 -2.447916666666666
1.215277777777778 -1.087962962962963
0.3038194444444444 -0.1359953703703704
2.7734375 -3.0859375
-3.697916666666667 7.128968097271094e-16
-0.6163194444444442 2.057291666666666
1.232638888888889 0.9143518518518512
0.3081597222222222 0.1142939814814814
0.7499999999999998 -2.34375
-1 3.837669114784003e-16
-0.1666666666666666 1.5625
0.3333333333333333 0.6944444444444443
0.08333333333333333 0.08680555555555552
0.07031249999999997 -0.3515625
-0.09375000000000003 0
-0.01562499999999999 0.2343750000000001
0.03125 0.1041666666666667
0.0078125 0.01302083333333333
0 0
0 0
0 0
0 0
0 0
2.109375 6.328124999999999
3.893370001395446e-16 8.4375
-1.40625 4.218750000000001
-0.625 0.9375000000000003
-0.07812500000000001 0.07812500000000004
3.671874999999998 -3.984375000000003
7.518942066186973e-16 -5.312500000000001
-2.447916666666666 -2.65625
-1.087962962962963 -0.5902777777777775
-0.1359953703703704 -0.04918981481481478
-3.0859375 -6.210937499999996
7.128968097271094e-16 -8.281249999999996
2.057291666666666 -4.140624999999999
0.9143518518518512 -0.9201388888888892
0.1142939814814814 -0.07667824074074078
-2.34375 2.8125
3.837669114784003e-16 3.749999999999998
1.5625 1.874999999999998
0.6944444444444443 0.416666666666666
0.08680555555555552 0.03472222222222215
-0.3515625 1.0546875
0 1.40625
0.2343750000000001 0.703125
0.1041666666666667 0.15625
0.01302083333333333 0.01302083333333333
0 0
0 0
0 0
0 0
0 0

View File

@ -1,30 +0,0 @@
-0.10546875 -0.3955078125
0 -0.52734375
0.07031249999999999 -0.263671875
0.03125 -0.05859375000000001
0.00390625 -0.004882812500000001
-0.68359375 -0.6884765624999996
0 -0.9179687499999997
0.4557291666666666 -0.4589843749999999
0.2025462962962963 -0.1019965277777778
0.02531828703703703 -0.008499710648148152
-0.693359375 0.57861328125
0 0.7714843749999998
0.4622395833333334 0.3857421874999998
0.2054398148148148 0.08572048611111102
0.02567997685185185 0.007143373842592583
-0.1875 0.4394531250000001
0 0.5859375
0.125 0.2929687499999999
0.05555555555555555 0.06510416666666664
0.006944444444444444 0.00542534722222222
-0.017578125 0.06591796875000001
0 0.08789062500000001
0.01171875 0.04394531250000001
0.005208333333333334 0.009765625
0.0006510416666666667 0.0008138020833333333
0 0
0 0
0 0
0 0
0 0

View File

@ -1,20 +0,0 @@
0.5 1
-1 0
0.5 -1
1 0
-2 0
1 0
0.5 -1
-1 0
0.5 1
1 0.5
0 1
-1 0.5
0 -1
0 -2
0 -1
-1 0.5
0 1
1 0.5

View File

@ -1,9 +0,0 @@
0.0 1.0
0.0 -1.0
0.0 -1.0
0.0 1.0
1.0 0.0
-1.0 0.0
-1.0 0.0
1.0 0.0

View File

@ -1,10 +0,0 @@
4.4408920985006262e-16 -1.6653345369377348e-16 -3.8857805861880479e-16
0 0 0
0 0 -1.3877787807814457e-16
-1.6653345369377348e-16 0 0
0 0.6666666666666663 0
0 2.9143354396410359e-16 0
-3.8857805861880479e-16 0 -5.2735593669694936e-16
0 0 4.0245584642661925e-16
-1.3877787807814457e-16 0 0.66666666666666596

View File

@ -1,3 +0,0 @@
1 -1.48690583655155e-16 -4.57966997657878e-16
2.9738116731031e-18 1.71428571428571 1.52938886045302e-17
-2.9738116731031e-18 -2.54898143408837e-17 1.71428571428572

View File

@ -1,193 +0,0 @@
1.5000000000000013 3.857142857142859 3.8571428571428603
-2.5000000000000022 -1.285714285714286 -1.285714285714286
1.0000000000000009 -2.571428571428573 -2.5714285714285743
0 0 0
3.5000000000000027 -1.2857142857142874 9.0000000000000053
-5.8333333333333375 0.42857142857142971 -3.0000000000000004
2.3333333333333353 0.85714285714285754 -6.0000000000000062
0 0 0
1.0000000000000009 -2.571428571428573 2.5714285714285734
-1.6666666666666685 0.85714285714285798 -0.85714285714285732
0.6666666666666673 1.7142857142857153 -1.7142857142857162
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
3.5000000000000027 9.0000000000000036 -1.2857142857142887
-5.8333333333333375 -3.0000000000000009 0.42857142857143177
2.3333333333333353 -6.0000000000000027 0.8571428571428571
0 0 0
8.1666666666666714 -3.0000000000000031 -3.0000000000000071
-13.61111111111112 1.0000000000000024 1.0000000000000075
5.4444444444444473 2 1.9999999999999998
0 0 0
2.3333333333333353 -6.0000000000000027 -0.85714285714285932
-3.8888888888888928 2.0000000000000013 0.28571428571428797
1.5555555555555569 4.0000000000000018 0.57142857142857151
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
1.0000000000000009 2.5714285714285734 -2.5714285714285743
-1.6666666666666685 -0.85714285714285754 0.85714285714285887
0.6666666666666673 -1.7142857142857153 1.7142857142857157
0 0 0
2.3333333333333357 -0.85714285714285798 -6.0000000000000062
-3.8888888888888919 0.28571428571428653 2.000000000000004
1.5555555555555569 0.57142857142857162 4.0000000000000027
0 0 0
0.6666666666666673 -1.7142857142857153 -1.7142857142857162
-1.1111111111111123 0.57142857142857195 0.57142857142857273
0.44444444444444492 1.1428571428571437 1.1428571428571439
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
3.857142857142859 5.0379008746355689 6.6122448979591866
-1.285714285714286 11.755102040816329 15.428571428571438
-2.571428571428573 3.3586005830903809 4.4081632653061273
0 0 0
-1.2857142857142874 -7.5568513119533547 -2.2040816326530637
0.42857142857142971 -17.632653061224492 -5.1428571428571468
0.85714285714285754 -5.0379008746355716 -1.4693877551020418
0 0 0
-2.571428571428573 2.5189504373177862 -4.4081632653061247
0.85714285714285798 5.8775510204081645 -10.285714285714294
1.7142857142857153 1.67930029154519 -2.9387755102040845
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
9.0000000000000036 11.755102040816325 -2.2040816326530668
-3.0000000000000009 27.428571428571427 -5.142857142857145
-6.0000000000000027 7.8367346938775544 -1.4693877551020396
0 0 0
-3.0000000000000031 -17.632653061224492 0.73469387755102289
1.0000000000000024 -41.142857142857146 1.7142857142857157
2 -11.755102040816332 0.48979591836734643
0 0 0
-6.0000000000000027 5.8775510204081662 1.4693877551020451
2.0000000000000013 13.714285714285715 3.4285714285714306
4.0000000000000018 3.9183673469387763 0.97959183673469297
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
2.5714285714285734 3.3586005830903791 -4.4081632653061265
-0.85714285714285754 7.8367346938775544 -10.285714285714294
-1.7142857142857153 2.2390670553935874 -2.9387755102040836
0 0 0
-0.85714285714285798 -5.0379008746355716 1.4693877551020436
0.28571428571428653 -11.755102040816331 3.4285714285714306
0.57142857142857162 -3.3586005830903813 0.97959183673469385
0 0 0
-1.7142857142857153 1.6793002915451904 2.9387755102040849
0.57142857142857195 3.9183673469387768 6.8571428571428621
1.1428571428571437 1.1195335276967933 1.9591836734693888
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
3.8571428571428603 6.6122448979591866 5.0379008746355698
-1.285714285714286 15.428571428571438 11.75510204081634
-2.5714285714285743 4.4081632653061273 3.3586005830903853
0 0 0
9.0000000000000053 -2.2040816326530637 11.755102040816327
-3.0000000000000004 -5.1428571428571468 27.428571428571455
-6.0000000000000062 -1.4693877551020418 7.8367346938775659
0 0 0
2.5714285714285734 -4.4081632653061247 3.3586005830903796
-0.85714285714285732 -10.285714285714294 7.8367346938775597
-1.7142857142857162 -2.9387755102040845 2.2390670553935901
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
-1.2857142857142887 -2.2040816326530668 -7.5568513119533609
0.42857142857143177 -5.142857142857145 -17.632653061224502
0.8571428571428571 -1.4693877551020396 -5.0379008746355733
0 0 0
-3.0000000000000071 0.73469387755102289 -17.632653061224506
1.0000000000000075 1.7142857142857157 -41.142857142857181
1.9999999999999998 0.48979591836734643 -11.75510204081634
0 0 0
-0.85714285714285932 1.4693877551020451 -5.037900874635576
0.28571428571428797 3.4285714285714306 -11.755102040816341
0.57142857142857151 0.97959183673469297 -3.358600583090384
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
-2.5714285714285743 -4.4081632653061265 2.5189504373177898
0.85714285714285887 -10.285714285714294 5.8775510204081698
1.7142857142857157 -2.9387755102040836 1.6793002915451907
0 0 0
-6.0000000000000062 1.4693877551020436 5.8775510204081733
2.000000000000004 3.4285714285714306 13.714285714285728
4.0000000000000027 0.97959183673469385 3.9183673469387768
0 0 0
-1.7142857142857162 2.9387755102040849 1.6793002915451929
0.57142857142857273 6.8571428571428621 3.9183673469387803
1.1428571428571439 1.9591836734693888 1.1195335276967933
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0

View File

@ -1,65 +0,0 @@
-0.1875 -0.321428571428571 -0.321428571428572
0.0625 -0.75 -0.75
0.125 -0.214285714285714 -0.214285714285714
0 0 0
-0.4375 0.107142857142857 -0.75
0.145833333333333 0.25 -1.75
0.291666666666667 0.0714285714285714 -0.5
0 0 0
-0.125 0.214285714285714 -0.214285714285714
0.0416666666666667 0.5 -0.5
0.0833333333333334 0.142857142857143 -0.142857142857143
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
-0.4375 -0.75 0.107142857142857
0.145833333333333 -1.75 0.25
0.291666666666667 -0.5 0.0714285714285713
0 0 0
-1.02083333333333 0.25 0.250000000000001
0.340277777777778 0.583333333333333 0.583333333333333
0.680555555555556 0.166666666666667 0.166666666666666
0 0 0
-0.291666666666667 0.5 0.0714285714285716
0.0972222222222223 1.16666666666667 0.166666666666667
0.194444444444445 0.333333333333333 0.0476190476190476
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
-0.125 -0.214285714285714 0.214285714285714
0.0416666666666667 -0.5 0.5
0.0833333333333334 -0.142857142857143 0.142857142857143
0 0 0
-0.291666666666667 0.0714285714285715 0.5
0.0972222222222223 0.166666666666667 1.16666666666667
0.194444444444445 0.0476190476190476 0.333333333333333
0 0 0
-0.0833333333333334 0.142857142857143 0.142857142857143
0.0277777777777778 0.333333333333333 0.333333333333334
0.0555555555555556 0.0952380952380953 0.0952380952380953
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0

View File

@ -1,2 +0,0 @@
-4.0
4.0

View File

@ -1,2 +0,0 @@
1 0
0 1

View File

@ -1,4 +0,0 @@
-1 -3
1 -1
0 3
0 1

View File

@ -1,3 +0,0 @@
1 0 0
0 1 0
0 0 1

View File

@ -1,8 +0,0 @@
-4 -4 -4
4 0 0
0 4 0
0 0 0
0 0 4
0 0 0
0 0 0
0 0 0