def run_model(grid, orography):
    "Run the PISM implementation of the model to compare to the Python version."

    model = PISM.AtmosphereOrographicPrecipitation(
        grid, PISM.AtmosphereUniform(grid))
    geometry = PISM.Geometry(grid)

    with PISM.vec.Access(nocomm=geometry.ice_thickness):
        for i, j in grid.points():
            geometry.ice_thickness[i, j] = orography[j, i]

    geometry.bed_elevation.set(0.0)
    geometry.sea_level_elevation.set(0.0)
    geometry.ice_area_specific_volume.set(0.0)

    # compute surface elevation from ice thickness and bed elevation
    geometry.ensure_consistency(0)

    model.init(geometry)
    model.update(geometry, 0, 1)

    config = PISM.Context().config
    water_density = config.get_number("constants.fresh_water.density")

    # convert from kg / (m^2 s) to mm/s
    return model.mean_precipitation().numpy() / (1e-3 * water_density)
Exemple #2
0
def input_file(filename):

    ctx = PISM.Context()

    grid = PISM.IceGrid.FromFile(ctx.ctx, filename, ["topg"], PISM.CELL_CENTER)

    geometry = PISM.Geometry(grid)

    geometry.bed_elevation.regrid(filename)
    geometry.ice_thickness.set(0.0)
    geometry.sea_level_elevation.set(0.0)
    geometry.ensure_consistency(0.0)

    model = PISM.AtmosphereOrographicPrecipitation(
        grid, PISM.AtmosphereUniform(grid))
    model.init(geometry)
    model.update(geometry, 0, 1)

    model.mean_precipitation().dump(config.get_string("output.file_name"))
Exemple #3
0
def synthetic_geometry(grid, orography):
    config = PISM.Context().config

    # set wind speed and direction
    config.set_number("atmosphere.orographic_precipitation.wind_speed", 15.0)
    config.set_number("atmosphere.orographic_precipitation.wind_direction",
                      270)

    config.set_number("atmosphere.orographic_precipitation.conversion_time",
                      1000.0)
    config.set_number("atmosphere.orographic_precipitation.fallout_time",
                      1000.0)
    config.set_number(
        "atmosphere.orographic_precipitation.water_vapor_scale_height", 2500.0)
    config.set_number(
        "atmosphere.orographic_precipitation.moist_stability_frequency", 0.005)
    config.set_number("atmosphere.orographic_precipitation.reference_density",
                      7.4e-3)

    # eliminate the effect of the Coriolis force
    config.set_number("atmosphere.orographic_precipitation.coriolis_latitude",
                      0.0)

    model = PISM.AtmosphereOrographicPrecipitation(
        grid, PISM.AtmosphereUniform(grid))
    geometry = PISM.Geometry(grid)

    with PISM.vec.Access(nocomm=geometry.ice_thickness):
        for i, j in grid.points():
            geometry.ice_thickness[i, j] = orography[j, i]

    geometry.bed_elevation.set(0.0)
    geometry.sea_level_elevation.set(0.0)
    geometry.ice_area_specific_volume.set(0.0)

    # compute surface elevation from ice thickness and bed elevation
    geometry.ensure_consistency(0)

    model.init(geometry)
    model.update(geometry, 0, 1)

    # convert from mm/s to mm/hour
    return model.mean_precipitation().numpy() * 3600