Esempio n. 1
0
    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)
Esempio n. 3
0
    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)
Esempio n. 4
0
    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)