Source code for pycif.plugins.chemistries.lmdz.make_chemistry

from __future__ import annotations

from pathlib import Path

from ....utils.namelist import format_fortran_namelist
from .utils import parse_reaction


[docs] def create_chemicalscheme(self) -> None: reactants = [] products = [] products_stoi = [] rate_type = [] rate_terms = [] jrates_var = [] self.jrates_varname = [] for reac_str in self.reactions: reacs, prods, stoi, rtype, rterms = parse_reaction(self, reac_str) reactants.append(reacs) products.append(prods) products_stoi.append(stoi) rate_type.append(rtype) if rtype == "photolysis": varname = rterms rate_terms.append([]) jrates_var.append(varname) if varname not in self.jrates_varname: self.jrates_varname.append(varname) else: rate_terms.append(rterms) jrates_var.append("") namelists = { "dims": { "nprescr": len(self.prescribed_species), "nprodloss": len(self.prodloss_species), "ndepvel": len(self.deposition_species), "njrates": len(self.jrates_varname), "nreac": len(self.reactions), }, "species": { "prescribed_species": self.prescribed_species, "prodloss_species": self.prodloss_species, "deposition_species": self.deposition_species, "jrates_varname": self.jrates_varname, }, "reactions": { "reactants": reactants, "products": products, "products_stoi": products_stoi, "rate_type": rate_type, "rate_terms": rate_terms, "jrates_var": jrates_var, }, } with open(Path(self.chem_dir, "chemical_scheme.nml"), "w") as f: for name, variables in namelists.items(): f.write(format_fortran_namelist(name, variables))