Files
2026-02-16 21:52:26 +08:00

6.1 KiB

{ "model_name": "MODEL_SPEC", "version": "1.0", "status": "frozen", "states": [ { "name": "z", "unit": "dimensionless", "description": "State of Charge (SOC)", "bounds": [0, 1] }, { "name": "v_p", "unit": "V", "description": "Polarization voltage", "bounds": [null, null] }, { "name": "T_b", "unit": "K", "description": "Battery temperature", "bounds": [0, null] }, { "name": "S", "unit": "dimensionless", "description": "State of Health (SOH)", "bounds": [0, 1] }, { "name": "w", "unit": "dimensionless", "description": "Radio tail activation level", "bounds": [0, 1] } ], "inputs": [ { "name": "L", "unit": "dimensionless", "description": "Screen brightness level", "bounds": [0, 1] }, { "name": "C", "unit": "dimensionless", "description": "Processor load", "bounds": [0, 1] }, { "name": "N", "unit": "dimensionless", "description": "Network activity", "bounds": [0, 1] }, { "name": "Psi", "unit": "dimensionless", "description": "Signal quality", "bounds": [0, 1] }, { "name": "T_a", "unit": "K", "description": "Ambient temperature", "bounds": [null, null] } ], "parameters": [ { "name": "P_bg", "unit": "W", "description": "Background power consumption" }, { "name": "P_scr0", "unit": "W", "description": "Baseline screen power" }, { "name": "k_L", "unit": "W", "description": "Screen power scaling coefficient" }, { "name": "gamma", "unit": "dimensionless", "description": "Screen power exponent" }, { "name": "P_cpu0", "unit": "W", "description": "Baseline CPU power" }, { "name": "k_C", "unit": "W", "description": "CPU power scaling coefficient" }, { "name": "eta", "unit": "dimensionless", "description": "CPU power exponent" }, { "name": "P_net0", "unit": "W", "description": "Baseline network power" }, { "name": "k_N", "unit": "W", "description": "Network power scaling coefficient" }, { "name": "epsilon", "unit": "dimensionless", "description": "Signal quality singularity guard" }, { "name": "kappa", "unit": "dimensionless", "description": "Signal quality penalty exponent" }, { "name": "k_tail", "unit": "W", "description": "Radio tail power coefficient" }, { "name": "tau_up", "unit": "s", "description": "Radio activation time constant" }, { "name": "tau_down", "unit": "s", "description": "Radio decay time constant" }, { "name": "C1", "unit": "F", "description": "Polarization capacitance" }, { "name": "R1", "unit": "Ohm", "description": "Polarization resistance" }, { "name": "C_th", "unit": "J/K", "description": "Thermal capacitance" }, { "name": "hA", "unit": "W/K", "description": "Convective heat transfer coefficient" }, { "name": "E0", "unit": "V", "description": "Standard battery potential" }, { "name": "K", "unit": "V", "description": "Polarization constant" }, { "name": "A", "unit": "V", "description": "Exponential zone amplitude" }, { "name": "B", "unit": "dimensionless", "description": "Exponential zone time constant inverse" }, { "name": "R_ref", "unit": "Ohm", "description": "Reference internal resistance" }, { "name": "E_a", "unit": "J/mol", "description": "Activation energy for resistance" }, { "name": "R_g", "unit": "J/(molK)", "description": "Universal gas constant" }, { "name": "T_ref", "unit": "K", "description": "Reference temperature" }, { "name": "eta_R", "unit": "dimensionless", "description": "Aging resistance factor" }, { "name": "Q_nom", "unit": "Ah", "description": "Nominal capacity" }, { "name": "alpha_Q", "unit": "1/K", "description": "Temperature capacity coefficient" }, { "name": "V_cut", "unit": "V", "description": "Cutoff terminal voltage" }, { "name": "z_min", "unit": "dimensionless", "description": "SOC singularity guard" }, { "name": "Q_eff_floor", "unit": "Ah", "description": "Minimum effective capacity floor" } ], "equations": { "power_mapping": [ "P_scr = P_scr0 + k_L * L^gamma", "P_cpu = P_cpu0 + k_C * C^eta", "P_net = P_net0 + k_N * (N / (Psi + epsilon)^kappa) + k_tail * w", "P_tot = P_bg + P_scr + P_cpu + P_net" ], "constitutive_relations": [ "z_eff = max(z, z_min)", "V_oc = E0 - K * (1/z_eff - 1) + A * exp(-B * (1 - z))", "R0 = R_ref * exp((E_a / R_g) * (1/T_b - 1/T_ref)) * (1 + eta_R * (1 - S))", "Q_eff = max(Q_nom * S * (1 - alpha_Q * (T_ref - T_b)), Q_eff_floor)" ], "cpl_closure": [ "Delta = (V_oc - v_p)^2 - 4 * R0 * P_tot", "I = (V_oc - v_p - sqrt(Delta)) / (2 * R0)", "V_term = V_oc - v_p - I * R0" ], "differential_equations": [ "dz/dt = -I / (3600 * Q_eff)", "dv_p/dt = I/C1 - v_p / (R1 * C1)", "dT_b/dt = (I^2 * R0 + I * v_p - hA * (T_b - T_a)) / C_th", "dw/dt = (sigma_N - w) / tau_N", "sigma_N = min(1, N)", "tau_N = (sigma_N >= w) ? tau_up : tau_down" ] }, "guards": { "z_clamping": "z_eff = max(z, z_min)", "capacity_protection": "Q_eff = max(Q_calc, Q_eff_floor)", "state_projections": "z = clamp(z, 0, 1), S = clamp(S, 0, 1), w = clamp(w, 0, 1)" }, "events": { "functions": { "gV": "V_term - V_cut", "gz": "z", "gDelta": "Delta" }, "termination_logic": "Terminate at t where min(gV(t*), gz(t*), gDelta(t*)) == 0", "reasons": [ "V_CUTOFF", "SOC_ZERO", "DELTA_ZERO" ] }, "tte_definition": { "formula": "TTE = t* - t0", "event_time_interpolation": "t* = t_{n-1} + (t_n - t_{n-1}) * (0 - g(t_{n-1})) / (g(t_n) - g(t_{n-1}))", "tie_breaking": "If multiple events trigger in the same step, the one with the smallest t* is recorded as the termination_reason." }, "numerics": { "method": "RK4_nested_CPL", "dt_symbol": "dt", "stage_recompute_current": true, "step_halving_verification": "||z_dt - z_dt/2|| < 1e-4" }, "validation": { "dimension_check": [ "Units of P_tot must be Watts", "Units of I must be Amperes", "Units of dz/dt must be 1/s", "Units of dT_b/dt must be K/s" ], "monotonicity_check": "dz/dt <= 0 must hold for all I >= 0", "feasibility_check": "Delta must be >= 0 at every evaluation; if Delta < 0, trigger DELTA_ZERO event immediately" } }