def test_append_with_new_field(tmpdir, format): grid = RasterModelGrid((3, 4)) grid.add_full("elevation", 1.0, at="node") with tmpdir.as_cwd(): to_netcdf(grid, "test.nc", format=format) grid.add_full("temperature", 2.0, at="node") to_netcdf(grid, "test.nc", format=format, mode="a", time=10.0)
def test_add_full(at): grid = RasterModelGrid((4, 5)) grid.add_full("temperature", 3, at=at) assert_array_equal( getattr(grid, "at_{0}".format(at))["temperature"], np.full(grid.number_of_elements(at), 3), )
def test_append_with_new_field(tmpdir, format): grid = RasterModelGrid((3, 4)) grid.add_full("elevation", 1.0, at="node") with tmpdir.as_cwd(): to_netcdf(grid, "test.nc", format=format, time=0.0) grid.add_full("temperature", 2.0, at="node") to_netcdf(grid, "test.nc", format=format, mode="a", time=10.0) with xr.open_dataset("test.nc") as ds: assert sorted(ds.variables) == [ "at_node:elevation", "at_node:temperature", "shape", "status_at_node", "time", "xy_of_lower_left", "xy_spacing", ] assert_array_equal( ds["at_node:temperature"], np.vstack([ np.full(grid.number_of_nodes, np.nan), grid.at_node["temperature"] ]), ) assert_array_equal( ds["at_node:elevation"], np.vstack( [grid.at_node["elevation"], grid.at_node["elevation"]]), ) assert_array_equal(ds["time"], [0.0, 10.0])
def test_bad_filepath(tmpdir): grid = RasterModelGrid((3, 5)) grid.add_full("bedrock_surface__elevation", 0.0, at="node") grid.add_full("topographic__elevation", 0.0, at="node") with pytest.raises(ValueError): SubsidenceTimeSeries(grid) with tmpdir.as_cwd(): with pytest.raises(OSError): SubsidenceTimeSeries(grid, filepath="missing-file.csv")
def test_with_and_without_time(tmpdir, format, mode): grid = RasterModelGrid((3, 4)) grid.add_full("elevation", 1.0, at="node") with tmpdir.as_cwd(): to_netcdf(grid, "test-without-time.nc", format=format, mode=mode) with xr.open_dataset("test-without-time.nc") as actual: assert "time" not in actual.dims assert "time" not in actual.variables assert actual["at_node:elevation"].dims == ("node",) to_netcdf(grid, "test-with-time.nc", format=format, time=10.0, mode=mode) with xr.open_dataset("test-with-time.nc") as actual: assert "time" in actual.dims assert "time" in actual.variables assert actual["time"] == [10.0] assert actual["at_node:elevation"].dims == ("time", "node")
def test_constant_subsidence(tmpdir): grid = RasterModelGrid((3, 5)) grid.add_full("bedrock_surface__elevation", 0.0, at="node") grid.add_full("topographic__elevation", 0.0, at="node") with tmpdir.as_cwd(): with open("subsidence.csv", "w") as fp: fp.write("0.0,1.0\n5.0,1.0") subsidence = SubsidenceTimeSeries(grid, filepath="subsidence.csv") assert_array_equal( grid.at_node["bedrock_surface__increment_of_elevation"], 1.0) subsidence.run_one_step(dt=1.0) assert_array_equal(grid.at_node["bedrock_surface__elevation"], 1.0) subsidence.run_one_step(dt=1.0) assert_array_equal(grid.at_node["bedrock_surface__elevation"], 2.0)
def test_append_with_and_without_time(tmpdir, format, mode, time0, time1): grid = RasterModelGrid((3, 4)) grid.add_full("elevation", 1.0, at="node") with tmpdir.as_cwd(): to_netcdf(grid, "test.nc", format=format, mode=mode, time=time0) to_netcdf(grid, "test.nc", format=format, mode="a", time=time1) time0 = np.nan if time0 is None else time0 with xr.open_dataset("test.nc") as actual: assert "time" in actual.dims assert "time" in actual.variables assert_array_equal( actual["time"], [ np.nan if time0 is None else time0, time0 + 1 if time1 is None else time1, ], )
def test_linear_subsidence(tmpdir): grid = RasterModelGrid((3, 5)) grid.add_full("bedrock_surface__elevation", 0.0, at="node") grid.add_full("topographic__elevation", 0.0, at="node") with tmpdir.as_cwd(): with open("subsidence.csv", "w") as fp: fp.write("0.0,0.0\n4.0,40.0") subsidence = SubsidenceTimeSeries(grid, filepath="subsidence.csv") assert_array_equal( grid.at_node["bedrock_surface__increment_of_elevation"].reshape( (3, 5)), [ [0.0, 10.0, 20.0, 30.0, 40.0], [0.0, 10.0, 20.0, 30.0, 40.0], [0.0, 10.0, 20.0, 30.0, 40.0], ], ) subsidence.run_one_step(dt=1.0) assert_array_equal( grid.at_node["bedrock_surface__elevation"].reshape((3, 5)), [ [0.0, 10.0, 20.0, 30.0, 40.0], [0.0, 10.0, 20.0, 30.0, 40.0], [0.0, 10.0, 20.0, 30.0, 40.0], ], ) subsidence.run_one_step(dt=1.0) assert_array_equal( grid.at_node["bedrock_surface__elevation"].reshape((3, 5)), [ [0.0, 20.0, 40.0, 60.0, 80.0], [0.0, 20.0, 40.0, 60.0, 80.0], [0.0, 20.0, 40.0, 60.0, 80.0], ], )