Running#
Restarting a crashed simulation#
If the reload_results input argument is set to true, an interrupted
response-functions mode simulation will not recompute already computed
response function simulation and resume where it was interrupted when restarted.
The observation operator plugin
autorestart input argument can also be used to resume the simulation
that was interrupted.
Exploit results#
The following code examples can be used to read and exploit the response functions results:
\(\mathbf{H}\) matrix#
Reading the \(\mathbf{H}\) matrix (with the control vector coordinates) from the observation vector decomposition.
Note
The response function simulation need to be run with the input argument
dump_obsvect_decompostion set to true to the CIF produces
the necessary outputs.
import os
import numpy as np
import pandas as pd
import xarray as xr
from pycif.utils.sparse_array import to_dense_dataset
def read_decomp(path, region_names=None, use_sparse_dtype=False):
with xr.open_dataset(path) as ds:
if 'sparse_sim_tl' in ds:
ds = to_dense_dataset(ds)
ds = ds.isel(vresol=0).drop_vars('vresol') # Dropping vertical levels
# Replacing hresol with region names
if region_names is not None and 'region_id' in ds:
ds['hresol'] = (['hresol'], region_names[ds.region_id.values])
decomp = ds.sim_tl.to_series().unstack(['date', 'hresol'])
if use_sparse_dtype:
decomp = decomp.astype(pd.SparseDtype("float", 0.0))
return decomp
def read_h_matrix(workdir, region_names=None):
h_dict = {}
dirname = os.path.join(workdir, "base_functions/decomposition")
for component in os.listdir(dirname):
comp_dirname = os.path.join(dirname, component)
for parameter in os.listdir(comp_dirname):
print(f"reading H matrix for {component}/{parameter}")
path = os.path.join(comp_dirname, parameter, "obsvect_decomp.nc")
h_dict[(component, parameter)] = read_decomp(path, region_names, True)
df = pd.concat(
h_dict.values(),
keys=h_dict.keys(),
names=['component', 'parameter'],
axis='columns',
)
return df
with xr.open_dataset("region_mask.nc") as ds_mask:
region_names = ds_mask.regions_name.values
h_matrix = read_h_matrix("path/to/workdir", region_names)
Variational inv#
TODO: Output
TODO: Rerun with another B, R