Example #1
0
    def test_update_saving_intervals_offset_long_over_double(self, tmp_path):
        """dt == 300; save_dt == 1000"""
        # create a delta with default settings
        p = utilities.yaml_from_dict(tmp_path, 'input.yaml')
        _delta = DeltaModel(input_file=p)

        # modify the timestep and save interval to be twice dt
        _delta._dt = 300
        _delta._save_dt = 1000
        _delta._save_any_grids = True  # override from settings

        # mock top-level methods, verify call was made to each
        _delta.solve_water_and_sediment_timestep = mock.MagicMock()
        _delta.apply_subsidence = mock.MagicMock()
        _delta.finalize_timestep = mock.MagicMock()
        _delta.log_model_time = mock.MagicMock()
        _delta.output_checkpoint = mock.MagicMock()
        # DO NOT mock output_data

        # mock the calls inside output_data
        _delta.save_grids_and_figs = mock.MagicMock()

        _delta.update()

        assert _delta.time_iter == int(1)
        assert _delta.time == _delta.dt

        _delta.update()

        assert _delta.time_iter == int(2)
        assert _delta.time == 2 * _delta.dt
        assert _delta.save_grids_and_figs.call_count == 0

        _delta.update()

        assert _delta.time_iter == int(3)
        assert _delta.time == 3 * _delta.dt
        assert _delta.save_grids_and_figs.call_count == 0

        _delta.update()

        assert _delta.time == 4 * _delta.dt
        assert _delta.save_grids_and_figs.call_count == 1

        _delta.update()

        assert _delta.time == 5 * _delta.dt
        assert _delta.save_grids_and_figs.call_count == 1

        for _ in range(33):
            _delta.update()

        assert _delta.time == 38 * _delta.dt
        assert _delta.save_grids_and_figs.call_count == 9
        assert _delta._is_finalized is False
Example #2
0
    def test_update_saving_intervals_on_cycle(self, tmp_path):
        """dt == 300; save_dt == 600"""
        # create a delta with default settings
        p = utilities.yaml_from_dict(tmp_path, 'input.yaml')
        _delta = DeltaModel(input_file=p)

        # modify the timestep and save interval to be twice dt
        _delta._dt = 300
        _delta._save_dt = 2 * _delta._dt
        _delta._save_any_grids = True  # override from settings

        # mock top-level methods, verify call was made to each
        _delta.solve_water_and_sediment_timestep = mock.MagicMock()
        _delta.apply_subsidence = mock.MagicMock()
        _delta.finalize_timestep = mock.MagicMock()
        _delta.log_model_time = mock.MagicMock()
        _delta.output_checkpoint = mock.MagicMock()
        # DO NOT mock output_data

        # mock the calls inside output_data
        _delta.save_grids_and_figs = mock.MagicMock()

        _delta.update()  # no new saves, after init

        assert _delta.time_iter == int(1)
        assert _delta.time == _delta.dt
        assert _delta.save_iter == 1
        assert _delta.save_time_since_data == _delta.dt

        _delta.update()  # saves now

        assert _delta.time_iter == int(2)
        assert _delta.time == 2 * _delta.dt
        assert _delta.save_iter == 2
        assert _delta.save_time_since_data == 0

        _delta.update()  # no saves

        assert _delta.time_iter == int(3)
        assert _delta.save_iter == 2
        assert _delta.save_time_since_data == _delta.dt

        # run for a few to bring iters to 10
        for _ in range(7):
            _delta.update()

        assert _delta.time_iter == int(10)
        assert _delta.save_iter == 6

        assert _delta.time == 3000
        assert _delta._is_finalized is False
Example #3
0
    def test_update_saving_intervals_short(self, tmp_path):
        """dt == 300; save_dt == 100"""
        # create a delta with default settings
        p = utilities.yaml_from_dict(tmp_path, 'input.yaml')
        _delta = DeltaModel(input_file=p)

        # modify the timestep and save interval to be twice dt
        _delta._dt = 300
        _delta._save_dt = 100
        _delta._save_any_grids = True  # override from settings

        # mock top-level methods, verify call was made to each
        _delta.solve_water_and_sediment_timestep = mock.MagicMock()
        _delta.apply_subsidence = mock.MagicMock()
        _delta.finalize_timestep = mock.MagicMock()
        _delta.log_model_time = mock.MagicMock()
        _delta.output_checkpoint = mock.MagicMock()
        # DO NOT mock output_data

        # mock the calls inside output_data
        _delta.save_grids_and_figs = mock.MagicMock()

        _delta.update()  # save on first iteration

        assert _delta.time_iter == int(1)
        assert _delta.time == _delta.dt
        assert _delta.save_grids_and_figs.call_count == 1

        _delta.update()  # save again

        assert _delta.save_time_since_data == 0
        assert _delta.time_iter == int(2)
        assert _delta.time == 2 * _delta.dt
        assert _delta.save_grids_and_figs.call_count == 2

        _delta.update()  # save again

        assert _delta.save_time_since_data == 0
        assert _delta.time_iter == int(3)
        assert _delta.save_grids_and_figs.call_count == 3

        assert _delta.save_iter == 4  # once during init
        assert _delta.time == 900