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