1818#include " TFEL/Tests/TestCase.hxx"
1919#include " TFEL/Tests/TestProxy.hxx"
2020#include " TFEL/Tests/TestManager.hxx"
21+ #include " TFEL/Material/Lame.hxx"
2122#include " MGIS/Function/BasicLinearSpace.hxx"
2223#include " MGIS/Function/BasicLinearQuadratureSpace.hxx"
2324#include " MGIS/Function/Function.hxx"
@@ -37,13 +38,15 @@ struct TensorialFunctionsTest final : public tfel::tests::TestCase {
3738 this ->test2 ();
3839 this ->test3 ();
3940 this ->test4 ();
41+ this ->test5 ();
4042 return this ->result ;
4143 }
4244
4345 private:
4446 static constexpr bool check_value (const mgis::real a,
45- const mgis::real b) noexcept {
46- constexpr auto eps = mgis::real{1e-12 };
47+ const mgis::real b,
48+ const mgis::real eps = mgis::real{
49+ 1e-12 }) noexcept {
4750 auto local_abs = [](const mgis::real r) { return r > 0 ? r : -r; };
4851 return local_abs (a - b) < eps;
4952 } // end of check_value
@@ -140,6 +143,47 @@ struct TensorialFunctionsTest final : public tfel::tests::TestCase {
140143 TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[0 ], 1 ));
141144 TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[1 ], 1 ));
142145 TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[2 ], 1 ));
146+ #endif /* MGIS_DISABLE_CONSTEXPR_FUNCTION_TESTS */
147+ }
148+ void test5 () {
149+ #ifndef MGIS_DISABLE_CONSTEXPR_FUNCTION_TESTS
150+ using namespace tfel ::math;
151+ using namespace tfel ::material;
152+ using namespace mgis ;
153+ using namespace mgis ::function;
154+ using mgis::real;
155+ constexpr auto E = real{150e9 };
156+ constexpr auto nu = 0.3 ;
157+ constexpr auto l = computeLambda (E, nu);
158+ constexpr auto m = computeMu (E, nu);
159+ constexpr auto k = l + (2 * m) / 3 ;
160+ constexpr auto eps = E * real{1e-14 };
161+ constexpr auto values = [&]() -> std::optional<std::array<real, 16 >> {
162+ using Stensor4 = st2tost2<2u , real>;
163+ auto space = BasicLinearSpace{1 };
164+ auto D = ST2toST2Function<BasicLinearSpace, 2u >{space};
165+ D (0 ) = k * Stensor4::IxI () + 2 * m * Stensor4::K ();
166+ auto D_values = std::array<real, 16 >{};
167+ std::copy (D.data ().begin (), D.data ().end (), D_values.begin ());
168+ return D_values;
169+ }();
170+ TFEL_TESTS_STATIC_ASSERT (values.has_value ());
171+ TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[0 ], l + 2 * m, eps));
172+ TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[1 ], l, eps));
173+ TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[2 ], l, eps));
174+ TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[3 ], 0 , eps));
175+ TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[4 ], l, eps));
176+ TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[5 ], l + 2 * m, eps));
177+ TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[6 ], l, eps));
178+ TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[7 ], 0 , eps));
179+ TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[8 ], l, eps));
180+ TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[9 ], l, eps));
181+ TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[10 ], l + 2 * m, eps));
182+ TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[11 ], 0 , eps));
183+ TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[12 ], 0 , eps));
184+ TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[13 ], 0 , eps));
185+ TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[14 ], 0 , eps));
186+ TFEL_TESTS_STATIC_ASSERT (check_value ((*values)[15 ], 2 * m, eps));
143187#endif /* MGIS_DISABLE_CONSTEXPR_FUNCTION_TESTS */
144188 }
145189};
0 commit comments