Source code for landlab.grid.create
#! /usr/bin/env python
"""Create landlab model grids."""
from landlab.core import model_parameter_dictionary as mpd
from .raster import from_dict as raster_from_dict
from .hex import from_dict as hex_from_dict
[docs]class Error(Exception):
"""Base class for exceptions from this module."""
pass
[docs]class BadGridTypeError(Error):
"""Raise this error for a bad grid type."""
def __init__(self, grid_type):
self._type = str(grid_type)
def __str__(self):
return self._type
_GRID_READERS = {
'raster': raster_from_dict,
'hex': hex_from_dict,
}
[docs]def create_and_initialize_grid(input_source):
"""Create and initialize a grid from a file.
Creates, initializes, and returns a new grid object using parameters
specified in *input_source*. *input_source* is either a
ModelParameterDictionary instance (or, really, just dict-like) or a
named input file.
Parameters
----------
input_source : str or dict
Input file or ``dict`` of parameter values.
Raises
------
KeyError
If missing a key from the input file.
Examples
--------
>>> from six import StringIO
>>> test_file = StringIO('''
... GRID_TYPE:
... raster
... NUM_ROWS:
... 4
... NUM_COLS:
... 5
... GRID_SPACING:
... 2.5
... ''')
>>> from landlab import create_and_initialize_grid
>>> grid = create_and_initialize_grid(test_file)
>>> grid.number_of_nodes
20
"""
if isinstance(input_source, dict):
param_dict = input_source
else:
param_dict = mpd.ModelParameterDictionary(from_file=input_source)
grid_type = param_dict['GRID_TYPE']
grid_type.strip().lower()
# Read parameters appropriate to that type, create it, and initialize it
try:
grid_reader = _GRID_READERS[grid_type]
except KeyError:
raise BadGridTypeError(grid_type)
# Return the created and initialized grid
return grid_reader(param_dict)