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))