cryo-pump-simulator / murphy_unified /engine_params.py
pandeydigant31's picture
Sweep/Sim param sync + CSV I/O + HW presets (Old/New ICV)
2db5fdd verified
Raw
History Blame Contribute Delete
2.81 kB
"""Pack a flat Simulation-parameter dict into cycle_sim keyword arguments.
Shared by `run_simulation` (Tab 1) and `_sim_point` (Tab 2 sweep) so both
tabs always hand identical kwargs to `cycle_sim`. If either tab wants a
swept/override value, it merges `{key: value}` into the input dict BEFORE
calling this helper.
The array ordering here MUST match what `murphy_unified/engine_bridge.py`
and the underlying engines expect. See `tabs/simulation.py` (pre-refactor)
lines ~237-258 for the original packing.
"""
from __future__ import annotations
def build_engine_kwargs(params: dict) -> dict:
"""Convert a flat params dict into kwargs for ``cycle_sim``.
Parameters
----------
params : dict
Flat dict keyed by `run_simulation` parameter names (see
`murphy_unified/sim_defaults.py::SIM_DEFAULTS`).
Returns
-------
dict with keys:
``Pexit_barg``, ``speed_f``, ``Ptank_barg``, ``Psat_barg``,
``ICVparam``, ``DCVparam``, ``pump_geom``, ``proc_param``,
``flash_eff``, and optionally ``exit_param`` and ``n_cycles``.
"""
ICVparam = [
params["icv_port"], params["icv_mass"], params["icv_travel"],
params["icv_dp_area"], params["icv_Fs"], params["icv_SC"],
params["icv_leakKv"], params["icv_comp_eff"], int(params["icv_npts"]),
]
DCVparam = [
params["dcv_port"], params["dcv_mass"], params["dcv_travel"],
params["dcv_dp_area"], params["dcv_Fs"], params["dcv_SC"],
params["dcv_leakKv"], params["dcv_comp_eff"], int(params["dcv_npts"]),
]
pump_geom = [
params["bore"], params["stroke"], params["hOD"], params["cLen"],
params["emH"], params["emS"], params["kvoid"], params["kH"],
params["Vfv"], params["vac"], params["cpm"], params["dvf"],
]
proc_param = [
params["Tamb"], params["htc"], params["drive"], params["Fmult"],
params["KvBB"], params["Pbb"], params["fric"], params["Exp"],
]
kw: dict = {
"Pexit_barg": params["Pexit"],
"speed_f": params["speed"],
"Ptank_barg": params["Ptank"],
"Psat_barg": params["Psat"],
"ICVparam": ICVparam,
"DCVparam": DCVparam,
"pump_geom": pump_geom,
"proc_param": proc_param,
"flash_eff": params["flash_eff"],
}
fill = params.get("fill_type", "Fixed Pexit")
if fill == "CHSS Fill":
kw["exit_param"] = [1, params["vsnubber"], params["vchss"],
params["aov140f"], params["rodia"]]
elif fill == "RO Vent":
kw["exit_param"] = [0, params["vsnubber"], 0,
params["aov140f"], params["rodia"]]
n_cyc = int(params.get("num_cycles", 1) or 1)
if n_cyc > 1:
kw["n_cycles"] = n_cyc
return kw