|
1 | 1 | from unittest.mock import MagicMock, patch
|
2 | 2 | from unittest import TestCase
|
3 | 3 | from tests import MockedPrecice
|
4 |
| -from fenics import Expression, UnitSquareMesh, FunctionSpace, VectorFunctionSpace, interpolate, SubDomain, near |
| 4 | +from fenics import Expression, UnitSquareMesh, FunctionSpace, VectorFunctionSpace, interpolate, SubDomain, near, UnitIntervalMesh |
5 | 5 | import numpy as np
|
6 | 6 |
|
7 | 7 | x_left, x_right = 0, 1
|
@@ -185,3 +185,74 @@ def return_dummy_data(n_points):
|
185 | 185 | self.fail(f"Unexpected combination of arg: {arg}, expected_arg: {expected_arg}")
|
186 | 186 |
|
187 | 187 | np.testing.assert_almost_equal(list(read_data.values()), return_dummy_data(self.n_vertices))
|
| 188 | + |
| 189 | + def test_optional_parameters(self): |
| 190 | + from precice import Participant |
| 191 | + import fenicsprecice |
| 192 | + |
| 193 | + def test_all_parameters(adapter): |
| 194 | + # init variables that are tested against |
| 195 | + nx = 10 |
| 196 | + mesh = UnitIntervalMesh(nx) |
| 197 | + V = FunctionSpace(mesh, 'P', 2) |
| 198 | + dummy_value = 1 |
| 199 | + E = Expression("t", t=dummy_value, degree=2) |
| 200 | + u = interpolate(E, V) |
| 201 | + t = 0.5 |
| 202 | + n = 42 |
| 203 | + # test adapter |
| 204 | + adapter.store_checkpoint(u, t, n) # is the old implementation still working? |
| 205 | + res_u, res_t, res_n = adapter.retrieve_checkpoint() |
| 206 | + self.assertEqual(res_t, t) |
| 207 | + self.assertEqual(res_n, n) |
| 208 | + np.testing.assert_array_equal(res_u.vector(), u.vector()) |
| 209 | + |
| 210 | + def test_opt_parameters(adapter): |
| 211 | + # init variables that are tested against |
| 212 | + nx = 10 |
| 213 | + mesh = UnitIntervalMesh(nx) |
| 214 | + V = FunctionSpace(mesh, 'P', 2) |
| 215 | + dummy_value = 1 |
| 216 | + E = Expression("t", t=dummy_value, degree=2) |
| 217 | + u = interpolate(E, V) |
| 218 | + t = 0.5 |
| 219 | + n = 42 |
| 220 | + # test adapter |
| 221 | + adapter.store_checkpoint(u, t=t) # without n |
| 222 | + res = adapter.retrieve_checkpoint() |
| 223 | + self.assertEqual(len(res), 3) # correct number of return values |
| 224 | + res_u, res_t, res_n = res |
| 225 | + self.assertEqual(res_t, t) |
| 226 | + self.assertEqual(res_n, None) |
| 227 | + np.testing.assert_array_equal(res_u.vector(), u.vector()) |
| 228 | + |
| 229 | + adapter.store_checkpoint(u, n=n) # without t |
| 230 | + res = adapter.retrieve_checkpoint() |
| 231 | + self.assertEqual(len(res), 3) # correct number of return values |
| 232 | + res_u, res_t, res_n = res |
| 233 | + self.assertEqual(res_n, n) |
| 234 | + self.assertEqual(res_t, None) |
| 235 | + np.testing.assert_array_equal(res_u.vector(), u.vector()) |
| 236 | + |
| 237 | + def test_payload_only(adapter): |
| 238 | + nx = 10 |
| 239 | + mesh = UnitIntervalMesh(nx) |
| 240 | + V = FunctionSpace(mesh, 'P', 2) |
| 241 | + dummy_value = 1 |
| 242 | + E = Expression("t", t=dummy_value, degree=2) |
| 243 | + u = interpolate(E, V) |
| 244 | + # test adapter |
| 245 | + adapter.store_checkpoint(u) # no optional parameters |
| 246 | + res_u, res_t, res_n = adapter.retrieve_checkpoint() |
| 247 | + self.assertEqual(res_t, None) |
| 248 | + self.assertEqual(res_n, None) |
| 249 | + np.testing.assert_array_equal(res_u.vector(), u.vector()) |
| 250 | + |
| 251 | + Participant.is_time_window_complete = MagicMock(return_value=False) |
| 252 | + |
| 253 | + precice = fenicsprecice.Adapter(self.dummy_config) |
| 254 | + |
| 255 | + # call the tests |
| 256 | + test_all_parameters(precice) |
| 257 | + test_opt_parameters(precice) |
| 258 | + test_payload_only(precice) |
0 commit comments