Source code for pycif.plugins.models.dummy.ini_mapper
import numpy as np
import datetime
[docs]
def ini_mapper(model, general_mapper={}, backup_comps={},
transforms_order=[], ref_transform="", **kwargs):
"""Build the data-flow mapper for the dummy Gaussian plume model.
Declares:
* **Inputs** — meteorological fields (``windspeed``, ``winddir``,
``stabclass``) and one surface flux field per active species.
* **Outputs** — one sparse (observation-sampled) concentration field per
active species.
* **outputs2inputs** — links each concentration output to the flux input
of the corresponding species so the adjoint pipeline knows which flux
sensitivity to accumulate.
Input date windows are hourly intervals derived from
``model.input_dates``.
Args:
model: dummy model plugin instance (carries ``input_dates``,
``domain``, and ``chemistry.acspecies``).
general_mapper (dict): unused.
backup_comps (dict): unused.
transforms_order (list): unused.
ref_transform (str): unused.
**kwargs: unused.
Returns:
dict: mapper with ``inputs``, ``outputs``, and ``outputs2inputs``.
"""
input_intervals = {
ddi: np.append(
model.input_dates[ddi][:-1, np.newaxis],
model.input_dates[ddi][:-1, np.newaxis]
+ datetime.timedelta(hours=1),
axis=1)
for ddi in model.input_dates}
default_dict = {
"input_dates": input_intervals,
"force_loadin": True,
"force_dump": True,
"sparse_data": False,
"sampled": False,
}
dict_surface = dict(default_dict, **{"domain": model.domain})
# Executable
mapper = {
"inputs": {("meteo", param): dict_surface
for param in ["windspeed", "winddir", "stabclass"]},
"outputs": {("concs", s): {
"force_loadout": True,
"input_dates": input_intervals,
"continuous_hdomain": True,
"continuous_vdomain": True,
"domain": model.domain,
"sampled": True,
"sparse_data": False
}
for s in model.chemistry.acspecies.attributes},
}
emis = {
("flux", s): dict_surface
for s in model.chemistry.acspecies.attributes
}
mapper["inputs"].update(emis)
# Save propagation of perturbations
mapper["outputs2inputs"] = {
("concs", s): [("flux", s)]
for s in model.chemistry.acspecies.attributes
}
return mapper