Source code for pycif.plugins.modes.co2mvs.execute

import numpy as np
import copy
from logging import info
from ....utils.datastores.dump import dump_datastore

from ....utils.classes.setup import Setup

from .utils.forward import run_forward
from .utils.adjoint import run_adjoint


[docs] def execute(self, **kwargs): """Runs the CO2MVS mode at a given outer loop Args: setup (Plugin): definition of the full set-up """ # Working directory workdir = self.workdir # Observation operator obsoper = self.obsoperator # Control vector controlvect = obsoper.controlvect # Simulation window datei = self.datei datef = self.datef # Some verbose info("Running an outer loop of the CO2MVS system") # First run a reference forward obsvect = obsoper.obsoper( controlvect, obsoper.obsvect, "fwd", datei=datei, datef=datef, workdir=workdir, run_id="ref_forward", reload_results=self.reload_results, **kwargs ) # Now runs the backward propagation controlvect = obsoper.obsoper( controlvect, obsvect, "adj", datei=datei, datef=datef, workdir=self.workdir, run_id="backward_propagation", reload_results=self.reload_results, **kwargs, ) # Updating the control vector by applying the B matrix controlvect.x += controlvect.sqrtbprod_ad( controlvect.dx, compute_sqrt=False, **kwargs) controlvect.dump( "{}/controlvect_final.pickle".format(workdir), to_netcdf=controlvect.save_out_netcdf or self.save_out_netcdf, dir_netcdf="{}/controlvect/".format(workdir), ) # Running updated forward model obsvect = obsoper.obsoper( controlvect, obsoper.obsvect, "fwd", datei=datei, datef=datef, workdir=workdir, run_id="posterior_trajectory", reload_results=self.reload_results, **kwargs ) return obsvect