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)