Source code for pycif.plugins.transforms.system.array2sampled.forward
import numpy as np
import xarray as xr
from logging import warning
[docs]
def forward(
transform,
inout_datastore,
controlvect,
obsvect,
mapper,
di,
df,
mode,
runsubdir,
workdir,
onlyinit=False,
**kwargs
):
if onlyinit:
return
ddi = min(di, df)
for trid_in, trid_out in zip(mapper["inputs"], mapper["outputs"]):
xmod_in = inout_datastore["inputs"][trid_in][ddi]
xmod_out = inout_datastore["outputs"][trid_out][ddi]
t = xmod_out["metadata"]["tstep"].astype(int).values
i = xmod_out["metadata"]["i"].astype(int).values
j = xmod_out["metadata"]["j"].astype(int).values
# Deal with levels differently
if xmod_in["spec"].shape[1] == 1:
lev = (0. * i).astype(int)
else:
lev = xmod_out["metadata"]["level"].astype(int).values
columns = ["spec"] if mode == "fwd" else ["spec", "incr"]
for c in columns:
if c not in xmod_in:
continue
xmod_out[("maindata", c)] = xmod_in[c].isel(
lat=xr.DataArray(i),
lon=xr.DataArray(j),
time=xr.DataArray(t),
lev=xr.DataArray(lev)).data