diff --git a/dune/fufem/test/Makefile.am b/dune/fufem/test/Makefile.am index 234056be1e33167b34e92b185cd0f5f018325460..de45fb7b03ab7a1c8577ac79a3876a8874e13e82 100644 --- a/dune/fufem/test/Makefile.am +++ b/dune/fufem/test/Makefile.am @@ -19,7 +19,8 @@ TESTS = basisgridfunctiontest \ ppmtest \ serializationtest \ subgridxyfunctionalassemblertest \ - sumfunctiontest + sumfunctiontest \ + tensortest # programs just to build when "make check" is used check_PROGRAMS = $(TESTS) @@ -136,4 +137,6 @@ sumfunctiontest_CPPFLAGS = $(COMMON_CPPFLAGS) $(GRID_CPPFLAGS) sumfunctiontest_LDADD = $(COMMON_LDADD) $(GRID_LDADD) sumfunctiontest_LDFLAGS = $(COMMON_LDFLAGS) $(GRID_LDFLAGS) +tensortest_SOURCES = tensortest.cc + include $(top_srcdir)/am/global-rules diff --git a/dune/fufem/test/tensortest.cc b/dune/fufem/test/tensortest.cc new file mode 100644 index 0000000000000000000000000000000000000000..6e8d55b2748472c081bd96e8e44929ddddaadb63 --- /dev/null +++ b/dune/fufem/test/tensortest.cc @@ -0,0 +1,62 @@ +// -*- c-basic-offset:2 indent-tabs-mode:nil -*- + +#include <dune/fufem/symmetrictensor.hh> +#include <dune/fufem/mechanics/isotropictensor.hh> +#include <dune/fufem/mechanics/cubictensor.hh> +#include <dune/fufem/mechanics/tetratensor.hh> + +#include <iostream> +#include <cassert> + +int +main() +{ + SymmetricTensor<3> e1; + e1(0,0) = 1; + e1(1,1) = 2; + e1(2,2) = 3; + e1(1,0) = 4; + e1(2,0) = 5; + e1(2,1) = 6; + + SymmetricTensor<3> e2; + e2(0,0) = 1; + e2(1,1) = 2; + e2(2,2) = 3; + e2(0,1) = 4; + e2(0,2) = 5; + e2(1,2) = 6; + + SymmetricTensor<3> const e3(e2); + std::cout << e3 << std::endl; + // There is no `operator() const` + //std::cout << e3(1,1) << std::endl; + + assert( e1 == e2); + assert(!(e1 != e2)); + + e2 *= 2; + assert(abs(e1 * e2 - 2 * (e1 * e1)) < 1e-10); + + assert(!(e1 == e2)); + assert( e1 != e2); + + e2 /= 2; + assert(abs(e1 * e1 - e1 * e2) < 1e-10); + + IsotropicTensor<3> const C(.5,.25); + SymmetricTensor<3> h; + C.mv(e1, h); + + std::cout << e1 << std::endl; + std::cout << h << std::endl; + std::cout << e1 * h << std::endl; + assert(abs(e1 * h - 74.4) < 1e-10); // e : C : e + + TetraTensor<2> const tt2(1,2,3,4); + TetraTensor<3> const tt3(1,2,3,4,5,6); + CubicTensor<2> const ct2(1,2,3); + CubicTensor<3> const ct3(1,2,3); + + return 0; +}