Skip to content

Commit 3cc6778

Browse files
committed
Finish tests on post-processings
1 parent f76a0c0 commit 3cc6778

File tree

3 files changed

+80
-1
lines changed

3 files changed

+80
-1
lines changed

bindings/python/tests/PostProcessingTest.py

+19
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,24 @@ def test_behaviour(self):
3131
self.assertTrue("PrincipalStrain" in postprocessings, "invalid post-processing names")
3232
pass
3333

34+
def test_behaviour_data(self):
35+
eps = 1.e-14
36+
e = numpy.asarray([1.3e-2, 1.2e-2, 1.4e-2, 0., 0., 0.], dtype=numpy.float64)
37+
e2 = numpy.asarray([1.2e-2, 1.3e-2, 1.4e-2, 0., 0., 0.], dtype=numpy.float64)
38+
h = mgis_bv.Hypothesis.Tridimensional
39+
b = self.__get_behaviour(h)
40+
m = mgis_bv.MaterialDataManager(b, 2)
41+
mgis_bv.setMaterialProperty(m.s1, "YoungModulus", 150e9);
42+
mgis_bv.setMaterialProperty(m.s1, "PoissonRatio", 0.3);
43+
mgis_bv.setExternalStateVariable(m.s1, "Temperature", 293.15);
44+
mgis_bv.update(m);
45+
m.s1.gradients[0:] = e;
46+
m.s1.gradients[1:] = e;
47+
outputs =numpy.empty(shape = (2, 3), dtype=numpy.float64)
48+
mgis_bv.executePostProcessing(outputs.reshape(6), m, "PrincipalStrain");
49+
for i in range(0, 3):
50+
self.assertTrue(abs(outputs[0,i] - e2[i]) < eps, "invalid output value")
51+
self.assertTrue(abs(outputs[1,i] - e2[i]) < eps, "invalid output value")
52+
3453
if __name__ == '__main__':
3554
unittest.main()

tests/PostProcessingTest.cxx

+60
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414

1515
#include <cmath>
16+
#include <array>
1617
#include <cstdlib>
1718
#include <iostream>
1819
#include <string_view>
@@ -53,6 +54,63 @@ void check_behaviour(const mgis::behaviour::Behaviour& b,
5354
check(getVariableSize(o, h) == 3, "invalid post-processing output size");
5455
} // end of check_behaviour
5556

57+
void call_postprocessing(const mgis::behaviour::Behaviour& b){
58+
using namespace mgis::behaviour;
59+
constexpr auto e =
60+
std::array<mgis::real, 6u>{1.3e-2, 1.2e-2, 1.4e-2, 0., 0., 0.};
61+
constexpr auto e2 =
62+
std::array<mgis::real, 6u>{1.2e-2, 1.3e-2, 1.4e-2, 0., 0., 0.};
63+
constexpr auto eps = 10 * std::numeric_limits<mgis::real>::epsilon();
64+
auto d = BehaviourData{b};
65+
// initialize the states
66+
setExternalStateVariable(d.s0, "Temperature", 293.15);
67+
setExternalStateVariable(d.s1, "Temperature", 293.15);
68+
//
69+
for (mgis::size_type i = 0; i != 6; ++i) {
70+
d.s1.gradients[i] = e[i];
71+
}
72+
//
73+
auto outputs = allocatePostProcessingVariables(b, "PrincipalStrain");
74+
if (!check(outputs.size() == 3u, "invalid outputs initialisation")) {
75+
return;
76+
}
77+
auto v = make_view(d);
78+
executePostProcessing(outputs, v, b, "PrincipalStrain");
79+
for (mgis::size_type i = 0; i != 3; ++i) {
80+
check(std::abs(outputs[i] - e2[i]) < eps, "invalid output value");
81+
}
82+
} // end of call_postprocessing
83+
84+
void call_postprocessing2(const mgis::behaviour::Behaviour& b){
85+
using namespace mgis::behaviour;
86+
constexpr auto e =
87+
std::array<mgis::real, 6u>{1.3e-2, 1.2e-2, 1.4e-2, 0., 0., 0.};
88+
constexpr auto e2 =
89+
std::array<mgis::real, 6u>{1.2e-2, 1.3e-2, 1.4e-2, 0., 0., 0.};
90+
constexpr auto eps = 10 * std::numeric_limits<mgis::real>::epsilon();
91+
auto m = MaterialDataManager{b, 2u};
92+
// initialize the states
93+
setMaterialProperty(m.s1, "YoungModulus", 150e9);
94+
setMaterialProperty(m.s1, "PoissonRatio", 0.3);
95+
setExternalStateVariable(m.s1, "Temperature", 293.15);
96+
update(m);
97+
//
98+
for (mgis::size_type i = 0; i != 6; ++i) {
99+
m.s1.gradients[i] = e[i];
100+
m.s1.gradients[6 + i] = e[i];
101+
}
102+
//
103+
auto outputs = allocatePostProcessingVariables(m, "PrincipalStrain");
104+
if (!check(outputs.size() == 6u, "invalid outputs initialisation")) {
105+
return;
106+
}
107+
executePostProcessing(outputs, m, "PrincipalStrain");
108+
for (mgis::size_type i = 0; i != 3; ++i) {
109+
check(std::abs(outputs[i] - e2[i]) < eps, "invalid output value");
110+
check(std::abs(outputs[3 + i] - e2[i]) < eps, "invalid output value");
111+
}
112+
} // end of call_postprocessing2
113+
56114
int main(const int argc, const char* const* argv) {
57115
using namespace mgis::behaviour;
58116
constexpr const auto h = Hypothesis::TRIDIMENSIONAL;
@@ -62,6 +120,8 @@ int main(const int argc, const char* const* argv) {
62120
try {
63121
const auto b = load(argv[1], argv[2], h);
64122
check_behaviour(b, h);
123+
call_postprocessing(b);
124+
call_postprocessing2(b);
65125
} catch (std::exception& e) {
66126
std::cerr << e.what() << std::endl;
67127
return EXIT_FAILURE;

tests/PostProcessingTest.mfront

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,5 @@ nu.setGlossaryName("PoissonRatio");
3131
εᵖ.setEntryName("PrincipalStrain");
3232
//! compute the principal strain
3333
@PostProcessing PrincipalStrain {
34-
εᵖ = eto.computeEigenValues();
34+
εᵖ = eto.computeEigenValues(Stensor::ASCENDING);
3535
}

0 commit comments

Comments
 (0)