From ed697e3ddf371c49a069ef4f1ad2be67cc6e4970 Mon Sep 17 00:00:00 2001 From: Jean-Paul Pelteret Date: Tue, 12 May 2020 21:03:42 +0200 Subject: [PATCH] Split out utilities file for SD tests --- .../sd_common_tests/batch_optimizer_02.h | 28 +--- .../sd_common_tests/batch_optimizer_03.h | 140 ++++------------- .../sd_common_tests/batch_optimizer_05.h | 28 +--- .../sd_common_tests/batch_optimizer_06.h | 29 +--- tests/symengine/sd_common_tests/cse_03.h | 61 +------- tests/symengine/sd_common_tests/utilities.h | 144 ++++++++++++++++++ 6 files changed, 177 insertions(+), 253 deletions(-) create mode 100644 tests/symengine/sd_common_tests/utilities.h diff --git a/tests/symengine/sd_common_tests/batch_optimizer_02.h b/tests/symengine/sd_common_tests/batch_optimizer_02.h index f5b458c646..75d73c8e54 100644 --- a/tests/symengine/sd_common_tests/batch_optimizer_02.h +++ b/tests/symengine/sd_common_tests/batch_optimizer_02.h @@ -25,35 +25,11 @@ #include "../../tests.h" +#include "utilities.h" + using namespace dealii; namespace SD = Differentiation::SD; -template -Tensor<2, dim, NumberType> -make_tensor(const NumberType &val) -{ - Tensor<2, dim, NumberType> out; - for (unsigned int i = 0; i < dim; ++i) - out[i][i] = 1.0; - - for (unsigned int i = 0; i < out.n_independent_components; ++i) - out[out.unrolled_to_component_indices(i)] += i + val; - return out; -} - -template -SymmetricTensor<2, dim, NumberType> -make_symm_tensor(const NumberType &val) -{ - SymmetricTensor<2, dim, NumberType> out; - for (unsigned int i = 0; i < dim; ++i) - out[i][i] = 1.0; - - for (unsigned int i = 0; i < out.n_independent_components; ++i) - out[out.unrolled_to_component_indices(i)] += i + val; - return out; -} - template diff --git a/tests/symengine/sd_common_tests/batch_optimizer_03.h b/tests/symengine/sd_common_tests/batch_optimizer_03.h index d38c275c00..de7d619a9b 100644 --- a/tests/symengine/sd_common_tests/batch_optimizer_03.h +++ b/tests/symengine/sd_common_tests/batch_optimizer_03.h @@ -32,101 +32,13 @@ #include "../../tests.h" +#include "utilities.h" + using namespace dealii; namespace SD = Differentiation::SD; namespace Diff_Test { - namespace internal - { - namespace - { - template - void - print(Stream &stream, const std::string &name, const NumberType &val) - { - stream << name << ": " << val << std::endl; - } - template - void - print(Stream & stream, - const std::string & name, - const Tensor<0, dim, NumberType> &val) - { - stream << name << ": " << val << std::endl; - } - template - void - print(Stream & stream, - const std::string & name, - const Tensor<1, dim, NumberType> &t) - { - for (unsigned int i = 0; i < dim; ++i) - stream << name << "[" << i << "]: " << t[i] << std::endl; - } - template - void - print(Stream & stream, - const std::string & name, - const Tensor<2, dim, NumberType> &t) - { - for (unsigned int i = 0; i < dim; ++i) - for (unsigned int j = 0; j < dim; ++j) - stream << name << "[" << i << "][" << j << "]: " << t[i][j] - << std::endl; - } - template - void - print(Stream & stream, - const std::string & name, - const SymmetricTensor<2, dim, NumberType> &t) - { - for (unsigned int i = 0; i < dim; ++i) - for (unsigned int j = i; j < dim; ++j) - stream << name << "[" << i << "][" << j << "]: " << t[i][j] - << std::endl; - } - template - void - print(Stream & stream, - const std::string & name, - const Tensor<3, dim, NumberType> &t) - { - for (unsigned int i = 0; i < dim; ++i) - for (unsigned int j = 0; j < dim; ++j) - for (unsigned int k = 0; k < dim; ++k) - stream << name << "[" << i << "][" << j << "][" << k - << "]: " << t[i][j][k] << std::endl; - } - template - void - print(Stream & stream, - const std::string & name, - const Tensor<4, dim, NumberType> &t) - { - for (unsigned int i = 0; i < dim; ++i) - for (unsigned int j = 0; j < dim; ++j) - for (unsigned int k = 0; k < dim; ++k) - for (unsigned int l = 0; l < dim; ++l) - stream << name << "[" << i << "][" << j << "][" << k << "][" - << l << "]: " << t[i][j][k][l] << std::endl; - } - template - void - print(Stream & stream, - const std::string & name, - const SymmetricTensor<4, dim, NumberType> &t) - { - for (unsigned int i = 0; i < dim; ++i) - for (unsigned int j = i; j < dim; ++j) - for (unsigned int k = 0; k < dim; ++k) - for (unsigned int l = k; l < dim; ++l) - stream << name << "[" << i << "][" << j << "][" << k << "][" - << l << "]: " << t[i][j][k][l] << std::endl; - } - } // namespace - } // namespace internal - template dQd_SD_dC = SD::differentiate(Qd_SD, C_SD); - // internal::print(deallog,"Qd_SD",Qd_SD); - // internal::print(deallog,"dQd_SD_dC",dQd_SD_dC); + // print(deallog,"Qd_SD",Qd_SD); + // print(deallog,"dQd_SD_dC",dQd_SD_dC); // Now we substitute out the independent internal variable // for one that has a sensitivity on the primary independent variable @@ -360,7 +272,7 @@ namespace Diff_Test const SymmetricTensor<4, dim, SD::Expression> symbolic_HH_total_impl = 2.0 * SD::differentiate(symbolic_S_subs_Q, C_SD); // HH = 2*dS_dC = 4*d2psi_dC_dC - // internal::print(deallog,"symbolic_HH_total_impl",symbolic_HH_total_impl); + // print(deallog,"symbolic_HH_total_impl",symbolic_HH_total_impl); // An example of an implicit relationship would be // dQ/dt = 2.0*C*log( det(C)*log(Q(C) ) @@ -376,7 +288,7 @@ namespace Diff_Test SD::make_substitution_map(std::make_pair(Qd_SD, Qi_SD), std::make_pair(SD::differentiate(Qd_SD, C_SD), dQ_dC_i_SD)); - // internal::print(deallog,"dQ_dC_i",dQ_dC_i); + // print(deallog,"dQ_dC_i",dQ_dC_i); // Substitute derivative terms SD::resolve_explicit_dependencies(sub_vals_explicit); @@ -398,9 +310,9 @@ namespace Diff_Test const bool print_symbols = true; if (print_symbols == true) { - internal::print(deallog, "psi", symbolic_psi); - internal::print(deallog, "S", symbolic_S); - internal::print(deallog, "HH", symbolic_HH); + print(deallog, "psi", symbolic_psi); + print(deallog, "S", symbolic_S); + print(deallog, "HH", symbolic_HH); } // Numerical substitution @@ -435,9 +347,9 @@ namespace Diff_Test const bool print_values = true; if (print_values == true) { - internal::print(deallog, "psi", optimizer.evaluate(symbolic_psi)); - internal::print(deallog, "S", optimizer.evaluate(symbolic_S)); - internal::print(deallog, "HH", optimizer.evaluate(symbolic_HH)); + print(deallog, "psi", optimizer.evaluate(symbolic_psi)); + print(deallog, "S", optimizer.evaluate(symbolic_S)); + print(deallog, "HH", optimizer.evaluate(symbolic_HH)); } } diff --git a/tests/symengine/sd_common_tests/batch_optimizer_05.h b/tests/symengine/sd_common_tests/batch_optimizer_05.h index 98630f4320..3a5c52392e 100644 --- a/tests/symengine/sd_common_tests/batch_optimizer_05.h +++ b/tests/symengine/sd_common_tests/batch_optimizer_05.h @@ -27,37 +27,11 @@ #include "../../tests.h" #include "serialization.h" +#include "utilities.h" using namespace dealii; namespace SD = Differentiation::SD; - -template -Tensor<2, dim, NumberType> -make_tensor(const NumberType &val) -{ - Tensor<2, dim, NumberType> out; - for (unsigned int i = 0; i < dim; ++i) - out[i][i] = 1.0; - - for (unsigned int i = 0; i < out.n_independent_components; ++i) - out[out.unrolled_to_component_indices(i)] += i + val; - return out; -} - -template -SymmetricTensor<2, dim, NumberType> -make_symm_tensor(const NumberType &val) -{ - SymmetricTensor<2, dim, NumberType> out; - for (unsigned int i = 0; i < dim; ++i) - out[i][i] = 1.0; - - for (unsigned int i = 0; i < out.n_independent_components; ++i) - out[out.unrolled_to_component_indices(i)] += i + val; - return out; -} - template -Tensor<2, dim, NumberType> -make_tensor(const NumberType &val) -{ - Tensor<2, dim, NumberType> out; - for (unsigned int i = 0; i < dim; ++i) - out[i][i] = 1.0; - - for (unsigned int i = 0; i < out.n_independent_components; ++i) - out[out.unrolled_to_component_indices(i)] += i + val; - return out; -} - -template -SymmetricTensor<2, dim, NumberType> -make_symm_tensor(const NumberType &val) -{ - SymmetricTensor<2, dim, NumberType> out; - for (unsigned int i = 0; i < dim; ++i) - out[i][i] = 1.0; - - for (unsigned int i = 0; i < out.n_independent_components; ++i) - out[out.unrolled_to_component_indices(i)] += i + val; - return out; -} - template #include +#include "utilities.h" + using namespace dealii; namespace SD = Differentiation::SD; @@ -266,65 +268,6 @@ struct CoupledFunction template const double CoupledFunction::sf(2.2); -template -void -print(Stream &stream, const std::string &name, const NumberType &val) -{ - stream << name << ": " << val << std::endl; -} -template -void -print(Stream & stream, - const std::string & name, - const Tensor<0, dim, NumberType> &val) -{ - stream << name << ": " << val << std::endl; -} -template -void -print(Stream & stream, - const std::string & name, - const Tensor<1, dim, NumberType> &t) -{ - for (unsigned int i = 0; i < dim; ++i) - stream << name << "[" << i << "]: " << t[i] << std::endl; -} -template -void -print(Stream & stream, - const std::string & name, - const Tensor<2, dim, NumberType> &t) -{ - for (unsigned int i = 0; i < dim; ++i) - for (unsigned int j = 0; j < dim; ++j) - stream << name << "[" << i << "][" << j << "]: " << t[i][j] << std::endl; -} -template -void -print(Stream & stream, - const std::string & name, - const Tensor<3, dim, NumberType> &t) -{ - for (unsigned int i = 0; i < dim; ++i) - for (unsigned int j = 0; j < dim; ++j) - for (unsigned int k = 0; k < dim; ++k) - stream << name << "[" << i << "][" << j << "][" << k - << "]: " << t[i][j][k] << std::endl; -} -template -void -print(Stream & stream, - const std::string & name, - const Tensor<4, dim, NumberType> &t) -{ - for (unsigned int i = 0; i < dim; ++i) - for (unsigned int j = 0; j < dim; ++j) - for (unsigned int k = 0; k < dim; ++k) - for (unsigned int l = 0; l < dim; ++l) - stream << name << "[" << i << "][" << j << "][" << k << "][" << l - << "]: " << t[i][j][k][l] << std::endl; -} - template +#include + + +template +Tensor<2, dim, NumberType> +make_tensor(const NumberType &val) +{ + Tensor<2, dim, NumberType> out; + for (unsigned int i = 0; i < dim; ++i) + out[i][i] = 1.0; + + for (unsigned int i = 0; i < out.n_independent_components; ++i) + out[out.unrolled_to_component_indices(i)] += i + val; + return out; +} + + +template +SymmetricTensor<2, dim, NumberType> +make_symm_tensor(const NumberType &val) +{ + SymmetricTensor<2, dim, NumberType> out; + for (unsigned int i = 0; i < dim; ++i) + out[i][i] = 1.0; + + for (unsigned int i = 0; i < out.n_independent_components; ++i) + out[out.unrolled_to_component_indices(i)] += i + val; + return out; +} + + +template +void +print(Stream &stream, const std::string &name, const NumberType &val) +{ + stream << name << ": " << val << std::endl; +} + + +template +void +print(Stream & stream, + const std::string & name, + const Tensor<0, dim, NumberType> &val) +{ + stream << name << ": " << val << std::endl; +} + + +template +void +print(Stream & stream, + const std::string & name, + const Tensor<1, dim, NumberType> &t) +{ + for (unsigned int i = 0; i < dim; ++i) + stream << name << "[" << i << "]: " << t[i] << std::endl; +} + + +template +void +print(Stream & stream, + const std::string & name, + const Tensor<2, dim, NumberType> &t) +{ + for (unsigned int i = 0; i < dim; ++i) + for (unsigned int j = 0; j < dim; ++j) + stream << name << "[" << i << "][" << j << "]: " << t[i][j] << std::endl; +} + + +template +void +print(Stream & stream, + const std::string & name, + const SymmetricTensor<2, dim, NumberType> &t) +{ + for (unsigned int i = 0; i < dim; ++i) + for (unsigned int j = i; j < dim; ++j) + stream << name << "[" << i << "][" << j << "]: " << t[i][j] << std::endl; +} + + +template +void +print(Stream & stream, + const std::string & name, + const Tensor<3, dim, NumberType> &t) +{ + for (unsigned int i = 0; i < dim; ++i) + for (unsigned int j = 0; j < dim; ++j) + for (unsigned int k = 0; k < dim; ++k) + stream << name << "[" << i << "][" << j << "][" << k + << "]: " << t[i][j][k] << std::endl; +} + + +template +void +print(Stream & stream, + const std::string & name, + const Tensor<4, dim, NumberType> &t) +{ + for (unsigned int i = 0; i < dim; ++i) + for (unsigned int j = 0; j < dim; ++j) + for (unsigned int k = 0; k < dim; ++k) + for (unsigned int l = 0; l < dim; ++l) + stream << name << "[" << i << "][" << j << "][" << k << "][" << l + << "]: " << t[i][j][k][l] << std::endl; +} + + +template +void +print(Stream & stream, + const std::string & name, + const SymmetricTensor<4, dim, NumberType> &t) +{ + for (unsigned int i = 0; i < dim; ++i) + for (unsigned int j = i; j < dim; ++j) + for (unsigned int k = 0; k < dim; ++k) + for (unsigned int l = k; l < dim; ++l) + stream << name << "[" << i << "][" << j << "][" << k << "][" << l + << "]: " << t[i][j][k][l] << std::endl; +} \ No newline at end of file -- 2.39.5