Source code for pycif.plugins.models.dummy.perturb_model
import copy
[docs]
def perturb_model(self, nsamples, transf_mapper):
"""Extend the chemistry active-species list to accommodate ensemble members.
For each active species ``spec``, creates ``nsamples`` copies named
``spec__sample#000``, …, ``spec__sample#NNN`` on
``self.chemistry.acspecies``, then removes the original species.
This allows the ensemble inversion modes (EnSRF, Monte Carlo) to
propagate multiple concentration fields through the model simultaneously.
Args:
self (Plugin): dummy model plugin instance.
nsamples (int): number of ensemble members (samples per species).
transf_mapper (dict): transform mapper (unused; kept for API
consistency with other model plugins).
"""
# Perturb active species in the chemical scheme
list_acspecies = copy.deepcopy(self.chemistry.acspecies.attributes[:])
for spec in list_acspecies:
for i in range(nsamples):
spec_sample = f"{spec}__sample#{i:03d}"
spec_plg = getattr(self.chemistry.acspecies, spec)
setattr(self.chemistry.acspecies, spec_sample, spec_plg)
self.chemistry.acspecies.attributes.append(spec_sample)
delattr(self.chemistry.acspecies, spec)
self.chemistry.acspecies.attributes.remove(spec)