From: wolf Date: Sun, 8 Nov 1998 20:37:40 +0000 (+0000) Subject: Extend testcases. X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5356a0998b8901dc10442b2b000dc82203051e8f;p=dealii-svn.git Extend testcases. git-svn-id: https://svn.dealii.org/trunk@658 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/tests/base/tensor.cc b/tests/base/tensor.cc index 3c030bb652..326e0ea5a3 100644 --- a/tests/base/tensor.cc +++ b/tests/base/tensor.cc @@ -1,27 +1,45 @@ #include #include + + int main () { - const unsigned int dim=3; + double a[3][3] = {{1, 2, 3}, {3, 4, 5}, {6, 7, 8}}; + double b[3][3] = {{25,31,37}, {45,57,69}, {75,96,117}}; - Tensor<2,dim> t; + const unsigned int dim=3; + Tensor<2,dim> t(a); Tensor<2,dim> tt; + Tensor<2,dim> result(b); + cout << "t=" << endl; for (unsigned int i=0; i +#include +#include +#include +#include +#include +#include +#include +#include + + + + +int main () { + Triangulation<2> tria; + tria.create_hypercube (0,1); + + FELinear<2> fe; + DoFHandler<2> dof(&tria); + dof.distribute_dofs(fe); + + StraightBoundary<2> b; + QTrapez<2> q; + FEValues<2> fevalues(fe,q,update_second_derivatives); + + + dVector val(4); + + cout << "------------------------------------------------------------" << endl + << "Testing transformation of 2nd derivatives of shape function:" << endl; + + // test for each of the four + // shape functions. first loop: + // unit cell, second loop: + // one vertex moved + bool testcase_succeeded = true; + for (unsigned int loop=0; loop<2; ++loop) + { + cout << "Test loop: " << loop << endl + << "-----------" << endl; + + // move one vertex of the only cell + if (loop==1) + tria.begin_active()->vertex(2)(0) = 2; + fevalues.reinit (dof.begin_active(),b); + + for (unsigned int vertex=0; vertex<4; ++vertex) + { + val.clear (); + val(vertex) = 1; + + vector > derivs(4); + fevalues.get_function_2nd_derivatives (val, derivs); + + cout << " Vertex " << vertex << ": "; + switch (loop) + { + case 0: + for (unsigned int point=0; point<4; ++point) + { + // on the unit cell, + // the second derivative + // of a linear element + // should be zero + if (derivs[point] != Tensor<2,2>()) + { + testcase_succeeded = false; + cout << "WRONG! "; + } + else + cout << "OK "; + }; + break; + + case 1: + // are these numbers ok? + // I have never checked + // them, exept for the + // symmetry of the tensors + // and some of the signs of + // the entries! Someone + // should really try to + // verify at least + // some of the numbers + static double _true_value[4][4][2][2] + = { { {{0,1}, + {1,0}}, + {{0,0}, + {0,0}}, + {{0,1}, + {1,-2}}, + {{0,0}, + {0,0}} }, + { {{0,-1}, + {-1,0}}, + {{0,0}, + {0,0}}, + {{0,-1}, + {-1,2}}, + {{0,0}, + {0,0}} }, + { {{0,0}, + {0,0}}, + {{0,-.25}, + {-.25,0}}, + {{0,0}, + {0,0}}, + {{0,-.25}, + {-.25,0.5}} }, + { {{0,0}, + {0,0}}, + {{0,.25}, + {.25,0}}, + {{0,0}, + {0,0}}, + {{0,.25}, + {.25,-.5}} } }; + static Tensor<2,2> true_value[4][4] + = {{ Tensor<2,2>(_true_value[0][0]), + Tensor<2,2>(_true_value[0][1]), + Tensor<2,2>(_true_value[0][2]), + Tensor<2,2>(_true_value[0][3]) }, + { Tensor<2,2>(_true_value[1][0]), + Tensor<2,2>(_true_value[1][1]), + Tensor<2,2>(_true_value[1][2]), + Tensor<2,2>(_true_value[1][3]) }, + { Tensor<2,2>(_true_value[2][0]), + Tensor<2,2>(_true_value[2][1]), + Tensor<2,2>(_true_value[2][2]), + Tensor<2,2>(_true_value[2][3]) }, + { Tensor<2,2>(_true_value[3][0]), + Tensor<2,2>(_true_value[3][1]), + Tensor<2,2>(_true_value[3][2]), + Tensor<2,2>(_true_value[3][3]) }}; + + for (unsigned int point=0; point<4; ++point) + { + if (derivs[point] != true_value[vertex][point]) + { + testcase_succeeded = false; + cout << "WRONG! "; + } + else + cout << "OK "; + }; + break; + }; + + cout << endl; + }; + }; + + + cout << "------------------------------------------------------" << endl; + + if (testcase_succeeded) + return 0; + else + return 1; +};