static char * test_prism_tensor_trace() { #define N 4 TESSEROID tesses[N] = { {1,0,1,0,1,6000000,6001000}, {1,180,183,80,81.5,6300000,6302000}, {1,200,203,-90,-88,5500000,5500100}, {1,-10,-7,7,7.5,6500000,6505000}}; PRISM prism; int i; double trace, dist, x, y; for(i = 0; i < N; i++) { tess2prism_flatten(tesses[i], &prism); x = 0.5*(prism.x1 + prism.x2); y = 0.5*(prism.y1 + prism.y2); for(dist=1000; dist <= 5000000; dist += 1000) { trace = prism_gxx(prism, x, y, prism.z1 - dist) + prism_gyy(prism, x, y, prism.z1 - dist) + prism_gzz(prism, x, y, prism.z1 - dist); sprintf(msg, "(prism %d dist %g) trace %.10f", i, dist, trace); mu_assert_almost_equals(trace, 0, 0.0000000001, msg); } } #undef N return 0; }
static char * test_tess2prism_flatten() { double expect, res; PRISM prism; int i; TESSEROID tesses[4] = { {1,0,1,0,1,6000000,6001000}, {1,180,190,80,85,6300000,6301000}, {1,160,200,-90,-70,5500000,6000000}, {1,-10,5,-7,15,6500000,6505000}}; for(i = 0; i < 4; i++) { tess2prism_flatten(tesses[i], &prism); res = prism_volume(prism)*prism.density; expect = tess_volume(tesses[i])*tesses[i].density; sprintf(msg, "(tess %d) expected mass %g, got %g", i, expect, res); mu_assert_almost_equals((double)(res - expect)/expect, 0., 0.01, msg); } return 0; }