| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| import importlib.resources |
| import pickle |
|
|
| from dinosaur import coordinate_systems |
| from dinosaur import horizontal_interpolation |
| from dinosaur import spherical_harmonic |
| import model as neuralgcm |
| import numpy as np |
| import xarray |
|
|
|
|
| def _horizontal_regrid( |
| regridder: horizontal_interpolation.Regridder, dataset: xarray.Dataset |
| ) -> xarray.Dataset: |
| """Horizontally regrid an xarray Dataset.""" |
| |
| regridded = xarray.apply_ufunc( |
| regridder, |
| dataset, |
| input_core_dims=[['longitude', 'latitude']], |
| output_core_dims=[['longitude', 'latitude']], |
| exclude_dims={'longitude', 'latitude'}, |
| vectorize=True, |
| ) |
| regridded.coords['longitude'] = np.rad2deg(regridder.target_grid.longitudes) |
| regridded.coords['latitude'] = np.rad2deg(regridder.target_grid.latitudes) |
| return regridded |
|
|
|
|
| def load_checkpoint_tl63_stochastic(): |
| """Load a checkpoint for a toy TL63 stochastic model.""" |
| package = importlib.resources.files(neuralgcm) |
| file = package.joinpath('data/tl63_stochastic_mini.pkl') |
| return pickle.loads(file.read_bytes()) |
|
|
|
|
| def load_data(coords: coordinate_systems.CoordinateSystem) -> xarray.Dataset: |
| """Load demo data for the given coordinate system.""" |
| if coords.vertical.layers != 37: |
| raise ValueError('can only load demo data for 37 pressure levels') |
| package = importlib.resources.files(neuralgcm) |
| with package.joinpath('data/era5_tl31_19590102T00.nc').open('rb') as f: |
| ds = xarray.load_dataset(f).expand_dims('time') |
| regridder = horizontal_interpolation.ConservativeRegridder( |
| spherical_harmonic.Grid.TL31(), coords.horizontal |
| ) |
| return _horizontal_regrid(regridder, ds) |
|
|