Source code for pycif.plugins.transforms.basic.exp.adjoint

import copy
import xarray as xr
import numpy as np


[docs] def adjoint( transform, inout_datastore, controlvect, obsvect, mapper, di, df, mode, runsubdir, workdir, onlyinit=False, **kwargs ): if onlyinit: return ddi = min(di, df) xmod_out = inout_datastore["outputs"] xmod_in = inout_datastore["inputs"] parameter = transform.parameter component = transform.component trid_out = (component, parameter) # Reload forward information file_fwd_dataset = ddi.strftime( "{}/chain/product/{}_fwd_%Y%m%d%H%M.nc".format( transform.model.adj_refdir, transform.orig_name)) fwd_dataset = xr.open_dataset(file_fwd_dataset) # Initialize inputs if cleared with memory if ddi not in xmod_in[trid_out]: xmod_in[trid_out][ddi] = {} # Applying adjoint xmod_in[trid_out][ddi]["adj_out"] = \ copy.deepcopy(xmod_out[trid_out][ddi]["adj_out"]) * \ np.exp(fwd_dataset["___".join(trid_out)])