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
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
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