Source code for terrainbento.output_writers.ow_simple_netcdf
#!/usr/bin/env python3
import os.path
from landlab import RasterModelGrid
from landlab.io.netcdf import to_netcdf, write_raster_netcdf
from terrainbento.output_writers.static_interval_writer import (
StaticIntervalOutputWriter,
)
[docs]class OWSimpleNetCDF(StaticIntervalOutputWriter):
[docs] def __init__(
self,
model,
output_fields,
name="simple-netCDF",
**static_interval_kwargs,
):
"""A simple output writer which generates netCDF files at uniform
intervals. Mimics the built-in netCDF writing code in older versions of
terrainbento.
Parameters
----------
model : a terrainbento ErosionModel instance
output_fields : model grid field name
The grid field to be written to file.
name : string, optional
The name of the output writer used when generating output
filenames. Defaults to 'simple-netCDF'
static_interval_kwargs : keyword args, optional
Keyword arguments that will be passed directly to
StaticIntervalOutputWriter. These include:
* intervals : float, list of floats, defaults to model duration
* intervals_repeat : bool, defaults to False
* times : list of floats, defaults to clock stop time
* add_id : bool, defaults to True
* save_first_timestep : bool, defaults to False
* save_last_timestep : bool, defaults to True
* output_dir : string, defaults to './output'
Please see
:py:class:`StaticIntervalOutputWriter` and
:py:class:`GenericOutputWriter` for
more detail.
Returns
-------
OWSimpleNetCDF: object
"""
super().__init__(model, name=name, **static_interval_kwargs)
self.output_fields = output_fields
[docs] def run_one_step(self):
""" Write output to file as a netCDF. """
filename_prefix = self.filename_prefix
filename = f"{filename_prefix}.nc"
filepath = os.path.join(self.output_dir, filename)
grid = self.model.grid
if isinstance(grid, RasterModelGrid):
write_raster_netcdf(
filepath, grid, names=self.output_fields, format="NETCDF4"
)
else:
to_netcdf(grid, filepath, format="NETCDF4")
self.register_output_filepath(filepath)