File size: 2,807 Bytes
2db5fdd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
"""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