def test_write_vector_data(self): from precice import Interface import fenicsadapter def dummy_set_mesh_vertices(mesh_id, positions): vertex_ids = np.arange(len(positions)) return vertex_ids Interface.configure = MagicMock() Interface.write_block_vector_data = MagicMock() Interface.read_block_scalar_data = MagicMock() Interface.get_dimensions = MagicMock(return_value=2) Interface.set_mesh_vertices = MagicMock( side_effect=dummy_set_mesh_vertices) Interface.initialize = MagicMock() Interface.initialize_data = MagicMock() Interface.is_action_required = MagicMock(return_value=False) Interface.mark_action_fulfilled = MagicMock() Interface.is_time_window_complete = MagicMock() Interface.advance = MagicMock() Interface.get_mesh_id = MagicMock() Interface.get_data_id = MagicMock(return_value=15) Interface.is_read_data_available = MagicMock(return_value=False) Interface.set_mesh_edge = MagicMock() write_u = self.vector_function read_u = self.scalar_function u_init = self.vector_function precice = fenicsadapter.Adapter(self.dummy_config) precice._coupling_bc_expression = MagicMock() precice.initialize(RightBoundary(), self.mesh, read_u, write_u, u_init) precice.advance(write_u, u_init, u_init, 0, 0, 0) expected_data_id = 15 expected_values_x = np.array([ self.vector_expr(x_right, y)[0] for y in np.linspace(y_bottom, y_top, 11) ]) expected_values_y = np.array([ self.vector_expr(x_right, y)[1] for y in np.linspace(y_bottom, y_top, 11) ]) expected_values = np.stack([expected_values_x, expected_values_y], axis=1) expected_ids = np.arange(11) expected_args = [expected_data_id, expected_ids, expected_values] for arg, expected_arg in zip( Interface.write_block_vector_data.call_args[0], expected_args): if type(arg) is int: self.assertTrue(arg == expected_arg) elif type(arg) is np.ndarray: np.testing.assert_almost_equal(arg, expected_arg)
def test_isCouplingOngoing(self): import fenicsadapter from precice import Interface Interface.is_coupling_ongoing = MagicMock(return_value=True) Interface.configure = MagicMock() Interface.get_dimensions = MagicMock() Interface.get_mesh_id = MagicMock() Interface.get_data_id = MagicMock() precice = fenicsadapter.Adapter(self.dummy_config) self.assertEqual(precice.is_coupling_ongoing(), True)
def test_read_vector_data(self): from precice import Interface import fenicsadapter def return_dummy_data(data_id, value_indices): read_data = np.arange(len(value_indices) * self.dimension).reshape( len(value_indices), self.dimension) return read_data def dummy_set_mesh_vertices(mesh_id, positions): vertex_ids = np.arange(len(positions)) return vertex_ids Interface.configure = MagicMock() Interface.write_block_scalar_data = MagicMock() Interface.read_block_vector_data = MagicMock( side_effect=return_dummy_data) Interface.get_dimensions = MagicMock(return_value=self.dimension) Interface.set_mesh_vertices = MagicMock( side_effect=dummy_set_mesh_vertices) Interface.initialize = MagicMock() Interface.initialize_data = MagicMock() Interface.is_action_required = MagicMock(return_value=False) Interface.mark_action_fulfilled = MagicMock() Interface.is_time_window_complete = MagicMock() Interface.advance = MagicMock() Interface.get_mesh_id = MagicMock() Interface.get_data_id = MagicMock(return_value=15) Interface.is_read_data_available = MagicMock(return_value=False) Interface.set_mesh_edge = MagicMock() write_u = self.scalar_function read_u = self.vector_function u_init = self.scalar_function precice = fenicsadapter.Adapter(self.dummy_config) precice._coupling_bc_expression = MagicMock() precice.initialize(RightBoundary(), self.mesh, read_u, write_u, u_init) precice.advance(write_u, u_init, u_init, 0, 0, 0) expected_data_id = 15 expected_ids = np.arange(11) expected_args = [expected_data_id, expected_ids] for arg, expected_arg in zip( Interface.read_block_vector_data.call_args[0], expected_args): if type(arg) is int: self.assertTrue(arg == expected_arg) elif type(arg) is np.ndarray: np.testing.assert_allclose(arg, expected_arg)
def test_read_vector_data(self): from precice import Interface import fenicsadapter def return_dummy_data(unused1, unused2, unused3, read_data): for i in range(len(read_data)): read_data[i] = i Interface.configure = MagicMock() Interface.write_block_scalar_data = MagicMock() Interface.read_block_vector_data = MagicMock( side_effect=return_dummy_data) Interface.get_dimensions = MagicMock(return_value=2) Interface.set_mesh_vertices = MagicMock() Interface.initialize = MagicMock() Interface.initialize_data = MagicMock() Interface.is_action_required = MagicMock(return_value=False) Interface.fulfilled_action = MagicMock() Interface.advance = MagicMock() Interface.get_mesh_id = MagicMock() Interface.get_data_id = MagicMock(return_value=15) Interface.is_read_data_available = MagicMock(return_value=False) Interface.get_mesh_vertex_ids_from_positions = MagicMock() Interface.set_mesh_edge = MagicMock() write_u = self.scalar_function read_u = self.vector_function u_init = self.scalar_function precice = fenicsadapter.Adapter(self.dummy_config) precice._coupling_bc_expression = MagicMock() precice.initialize(RightBoundary(), self.mesh, read_u, write_u, u_init) precice.advance(write_u, u_init, u_init, 0, 0, 0) expected_data_id = 15 expected_size = 11 expected_values = np.array([i for i in range(2 * 11)]) expected_ids = np.zeros(11) expected_args = [ expected_data_id, expected_size, expected_ids, expected_values ] for arg, expected_arg in zip( Interface.read_block_vector_data.call_args[0], expected_args): if type(arg) is int: self.assertTrue(arg == expected_arg) elif type(arg) is np.ndarray: np.testing.assert_allclose(arg, expected_arg)
def test_advance_success(self): """ Test correct checkpointing, if advance succeeded """ import fenicsadapter from precice import Interface, action_read_iteration_checkpoint, \ action_write_iteration_checkpoint def is_action_required_behavior(py_action): if py_action == action_read_iteration_checkpoint(): return False elif py_action == action_write_iteration_checkpoint(): return True Interface.is_action_required = MagicMock( side_effect=is_action_required_behavior) Interface.configure = MagicMock() Interface.get_dimensions = MagicMock() Interface.get_mesh_id = MagicMock() Interface.get_data_id = MagicMock() Interface.write_block_scalar_data = MagicMock() Interface.read_block_scalar_data = MagicMock() Interface.is_time_window_complete = MagicMock(return_value=True) Interface.advance = MagicMock(return_value=self.dt) Interface.mark_action_fulfilled = MagicMock() precice = fenicsadapter.Adapter(self.dummy_config) self.mock_the_adapter(precice) value_u_np1 = self.u_np1_mocked.value precice_step_complete = True # time and iteration count should be increased by a successful call of advance desired_output = (self.t + self.dt, self.n + 1, precice_step_complete, self.dt) self.assertEqual( precice.advance(None, self.u_np1_mocked, self.u_n_mocked, self.t, self.dt, self.n), desired_output) # we expect that self.u_n_mocked.value has been updated to self.u_np1_mocked.value self.assertEqual(self.u_n_mocked.value, self.u_np1_mocked.value) # we expect that the value of the checkpoint has been updated to value_u_np1 self.assertEqual(precice._checkpoint.get_state().u.value, value_u_np1)
def test_advance_continue(self): """ Test correct checkpointing, if advance did succeed, but we do not write a checkpoint (for example, if we do subcycling) :param fake_PySolverInterface_PySolverInterface: mock instance of PySolverInterface.PySolverInterface """ import fenicsadapter from precice import Interface, action_read_iteration_checkpoint, \ action_write_iteration_checkpoint def is_action_required_behavior(py_action): if py_action == action_read_iteration_checkpoint(): return False elif py_action == action_write_iteration_checkpoint(): return False Interface.is_action_required = MagicMock( side_effect=is_action_required_behavior) Interface.configure = MagicMock() Interface.get_dimensions = MagicMock() Interface.get_mesh_id = MagicMock() Interface.get_data_id = MagicMock() Interface.is_time_window_complete = MagicMock(return_value=False) Interface.write_block_scalar_data = MagicMock() Interface.read_block_scalar_data = MagicMock() Interface.advance = MagicMock(return_value=self.dt) Interface.mark_action_fulfilled = MagicMock() precice = fenicsadapter.Adapter(self.dummy_config) self.mock_the_adapter(precice) precice_step_complete = False # time and iteration count should be rolled back by a not successful call of advance desired_output = (self.t + self.dt, self.n + 1, precice_step_complete, self.dt) self.assertEqual( precice.advance(None, self.u_np1_mocked, self.u_n_mocked, self.t, self.dt, self.n), desired_output) # we expect that self.u_n_mocked.value has been updated to self.u_np1_mocked.value self.assertEqual(self.u_n_mocked.value, self.u_np1_mocked.value) # we expect that the value of the checkpoint has not been updated self.assertEqual(precice._checkpoint.get_state().u.value, self.u_cp_mocked.value)
def test_advance_rollback(self): """ Test correct checkpointing, if advance did not succeed and we have to rollback """ import fenicsadapter from precice import Interface, action_write_iteration_checkpoint, \ action_read_iteration_checkpoint def is_action_required_behavior(py_action): if py_action == action_read_iteration_checkpoint(): return True elif py_action == action_write_iteration_checkpoint(): return False Interface.is_action_required = MagicMock( side_effect=is_action_required_behavior) Interface.configure = MagicMock() Interface.get_dimensions = MagicMock() Interface.get_mesh_id = MagicMock() Interface.get_data_id = MagicMock() Interface.write_block_scalar_data = MagicMock() Interface.read_block_scalar_data = MagicMock() Interface.advance = MagicMock(return_value=self.dt) Interface.fulfilled_action = MagicMock() precice = fenicsadapter.Adapter(self.dummy_config) self.mock_the_adapter(precice) precice_step_complete = False # time and iteration count should be rolled back by a not successful call of advance desired_output = (self.t_cp_mocked, self.n_cp_mocked, precice_step_complete, self.dt) self.assertEqual( precice.advance(None, self.u_np1_mocked, self.u_n_mocked, self.t, self.dt, self.n), desired_output) # we expect that self.u_n_mocked.value has been rolled back to self.u_cp_mocked.value self.assertEqual(self.u_n_mocked.value, self.u_cp_mocked.value) # we expect that precice._u_cp.value has not been updated self.assertEqual(precice._u_cp.value, self.u_cp_mocked.value)