Below is a **paper blueprint** that matches COMAP’s required elements (continuous-time model, TTE, sensitivity, uncertainty, recommendations, validation) and is **logically aligned** with your mechanistic narrative + CPL/ODE structure and your simulation/robustness→sensitivity→UQ workflow . --- ## 0) One-page Summary Sheet (executive-style) ### Logical progression 1. What you built (continuous-time dynamical model + CPL closure). 2. What you predicted (baseline TTE + scenario deltas + uncertainty bands). 3. What drives rapid drain (ranked drivers + mechanism). 4. What users/OS should do (actionable recommendations, prioritized). ### Must include (data/evidence) * **Headline baseline TTE**: 4.60 h (z0=1.0), plus 10/50/90% or CI summary. * **Biggest drain drivers** with quantified impact: e.g., Poor signal −1.82 h; Cold −1.45 h; show ranking table. * **Global sensitivity ranking** (total-order Sobol ST): k_L, k_C, κ, … with values. * **UQ statement**: mean/std/CI + survival curve milestone (e.g., S(t)=1 until ~4.25h, then drop). * One sentence on **validation**: step-halving passes + feasibility handling (Δ≥0). --- ## 1) Introduction and problem framing ### Logical progression 1. Define “unpredictable battery life” as **deterministic dynamics under varying inputs**, not randomness. 2. State deliverables required by COMAP: SOC(t), TTE under scenarios, sensitivity, recommendations. 3. Preview your modeling philosophy: **explicit continuous-time** + interpretable mechanisms (screen/CPU/network/temp/aging). ### Must include (arguments/evidence) * A short “causal chain” narrative: inputs → power → current → states → voltage → TTE (you already have this). * Clear statement that the model is **continuous-time ODE + algebraic closure**, not curve fitting/black box. * Define key terms: SOC, TTE, drivers of drain (align with problem glossary). --- ## 2) Model overview: states, inputs, outputs, and assumptions ### Logical progression 1. Present the system as state-space: **x(t), u(t), outputs**. 2. Explain *why* each state exists (memory/physics): polarization, thermal, radio-tail, SOH. 3. List assumptions from strongest to weakest (and what they buy you). ### Must include (specific content) * **Table: variables with units and bounds** * States: z, v_p, T_b, S, w * Inputs: L, C, N, Ψ, T_a * Outputs: V_term(t), SOC(t), TTE * **Assumptions (must be explicit):** * Smartphone ≈ constant-power-load at short timescale (CPL). * 1st-order Thevenin ECM adequate for transient voltage memory. * Lumped thermal model; SOH constant over a single discharge (but model-ready for multi-cycle). --- ## 3) Governing equations (core contribution) ### Logical progression (recommended subsection order) 3.1 **Power mapping** (usage → demand): P_tot(L,C,N,Ψ,w). 3.2 **Electro-thermal-aging constitutive laws**: V_oc(z), R0(T_b,S), Q_eff(T_b,S). 3.3 **CPL closure**: solve current algebraically each instant. 3.4 **ODE system**: dz/dt, dv_p/dt, dT_b/dt, dw/dt (+ optional dS/dt). 3.5 **Guards/constraints**: z_min, Q_eff_floor, clamping, feasibility Δ≥0. ### Must include (equations + interpretive evidence) * **Explicit equations** (as you already froze): * P_scr, P_cpu, P_net (include Ψ penalty + radio tail term). * V_term = V_oc − v_p − I R0 and ODEs for z, v_p, T_b, w. * CPL quadratic and chosen root + discriminant Δ. * **Physical interpretation paragraph per block** * Why weak signal increases power (Ψ^{−κ} factor). * Why cold reduces deliverable power (R0↑, Q_eff↓). * Why CPL creates “end-of-discharge acceleration” (feedback loop). * **Non-negotiable rigor items** * Define z_eff = max(z, z_min) to avoid 1/z singularity (show where it enters). * Define Q_eff floor and clamping rules. * State feasibility: if Δ<0, requested power exceeds deliverable → shutdown/collapse mechanism. --- ## 4) Time-to-empty (TTE) definition and event logic ### Logical progression 1. Define termination events **mathematically**: gV, gz, gΔ. 2. Explain why multiple termination modes exist (voltage cutoff vs SOC exhaustion vs deliverability collapse). 3. Define numerical event location (interpolation) and tie-breaking. ### Must include (data/evidence) * **Event function definitions**: * gV(t)=V_term−V_cut, gz(t)=z, gΔ(t)=Δ * Terminate at earliest crossing (min t*). * **Interpolation formula** for t* between samples (include exact linear formula). * **Unit-consistent TTE**: TTE = t* − t0. * **Worked micro-example** (1–2 sentences) illustrating interpolation (optional but strengthens clarity). This directly satisfies “compute/approximate TTE under various initial charges and scenarios.” --- ## 5) Parameterization and data support (credibility section) ### Logical progression 1. Split parameters into **(i) physical battery**, **(ii) phone power mapping**, **(iii) thermal**, **(iv) radio tail**. 2. State how each group can be obtained: * literature/specs, simple experiments, or plausibility constraints. 3. Include a “plausibility check” pipeline (energy, ranges, signs). ### Must include (specific evidence) * **Full parameter table** with units + baseline values (your BASELINE_CONFIG_v1). * **Justification strategy** (even if you used synthetic values): * Which parameters are “tuned” vs “known.” * Show at least one sanity anchor: nominal energy ≈ 14.8 Wh for 4 Ah @ 3.7 V (you used this as an energy check). * **Validation constraints**: * P_tot in plausible W-range; V_term stays finite; Δ≥0 except at collapse; SOC monotone when I≥0. --- ## 6) Numerical method and reproducibility ### Logical progression 1. Present solver choice: RK4 with nested CPL solve “inside stages.” 2. Show the algorithm pipeline and what is recorded each step (trajectory columns). 3. State robustness checks: step-halving + event-location stability. ### Must include (data/evidence) * **Algorithm box** (pseudo-code is fine): * compute P_tot → constitutive → Δ → I → RHS → RK4 step → clamp → event check. * **Step-halving table** (you already have): z_diff_inf and relative TTE error, all passing. * **Event bracket report** (previous/curr g values + interpolated t*), proving event detection is stable. * **Reproducibility controls**: dt, t_max, seed, scenario definition. --- ## 7) Baseline results: SOC curves and TTE vs initial charge ### Logical progression 1. Present baseline scenario definition (6 segments + smooth transitions). 2. Show trajectory plots (SOC, I/P_tot, T_b, Δ). 3. Summarize TTE across z0 options; connect to mechanism. ### Must include (data/evidence) * **TTE table** for z0={1,0.75,0.5,0.25}: TTE_hours, reason, avg power, max current, max temperature. * **Figures (minimum set):** 1. z(t) 2. I(t) and P_tot(t) 3. T_b(t) 4. Δ(t) * **Energy plausibility check**: integrate P_tot over [0,t*] and compare to nominal battery energy. --- ## 8) Scenario analysis: “drivers of rapid drain” ### Logical progression 1. Define controlled scenario set (one-factor ablations + stress tests). 2. Compare ΔTTE relative to baseline; rank drivers. 3. For top drivers, show “mechanistic signature” metrics (why it happened in your model). ### Must include (data/evidence) * **Scenario matrix table** (S0–S7) with TTE and ΔTTE. * **Driver ranking** list (largest reductions first). * **Mechanistic signatures for top 2–3 drain cases**: * avg(P_tot), max(I), min(Δ), avg(R0), avg(Q_eff). * **Mechanistic explanation paragraphs**: * Poor signal: Ψ penalty increases P_net → Δ decreases → higher I → faster SOC decline. * Cold: Arrhenius R0↑ + Q_eff↓ → earlier V_cut termination (switching reason matters). This directly answers COMAP’s “identify drivers; which conditions reduce battery life most; which change little.” --- ## 9) Sensitivity analysis (assumptions + parameters) ### Logical progression 1. Distinguish **local** (one-at-a-time) from **global** sensitivity. 2. Use Sobol/Saltelli for global ranking of TTE drivers. 3. Interpret what high ST means operationally (what the OS/user can influence). ### Must include (data/evidence) * **Sobol results table**: S_i and ST_i for exactly the selected parameters (k_L, k_C, κ, …). * **Sampling details**: N_base, seed, ranges (±20%), failure count = 0. * **Interpretation**: e.g., k_L dominating suggests brightness policy is powerful; κ indicates signal-quality management is critical. This fulfills “examine how predictions vary with assumptions/parameters/usage fluctuations.” --- ## 10) Uncertainty quantification (usage variability) + survival curve ### Logical progression 1. Define the uncertainty source: **stochastic usage paths** around baseline. 2. Explain OU perturbations and why they are appropriate (mean-reverting behavior). 3. Convert Monte Carlo TTE samples into decision-friendly outputs (CI, percentiles, survival curve). ### Must include (data/evidence) * **UQ summary**: mean/std/p10/p50/p90 and CI95 for mean. * **Survival curve table/plot**: S(t)=P(TTE>t) on fixed grid. * **Reproducibility**: M, seed, θ, σ, dt. * **Discussion**: what uncertainty means for “unpredictability” (bounded variability, not arbitrary). --- ## 11) Recommendations (user + operating system) ### Logical progression 1. Convert scenario + sensitivity findings into ranked interventions. 2. Provide user-facing recommendations (actions) and OS-facing (policies). 3. Tie each recommendation to a model mechanism and quantified benefit. ### Must include (data/evidence) * **Ranked recommendation table**: * Action, mechanism, expected ΔTTE (hours/%), tradeoff. * Examples you can justify directly from your tables: * Improve signal conditions / switch network modes in poor signal (largest loss case). * Reduce brightness and CPU load (largest gains in ablations; aligns with Sobol ranking). * Cold-weather mitigation: thermal management / conservative power mode to avoid V_cut early. * Explicitly connect to COMAP’s recommendation prompt. --- ## 12) Model validation, limitations, and extensions ### Logical progression 1. Validation checks you performed (numerical + physical). 2. Where the model performs well vs poorly (conditions). 3. Extensions that preserve continuous-time, mechanistic nature. ### Must include (data/evidence) * **Validation evidence** * Dimensional consistency checklist (units). * Monotonicity dz/dt ≤ 0 for I ≥ 0. * Step-halving pass + event stability report. * **Limitations** * Parameter realism (if synthetic) and what data would tighten it. * Single-node thermal; simplified CPU/network power mapping; SOH dynamics negligible in single discharge. * **Extensions** * Multi-cycle SOH (SEI-inspired) already proposed in your model narrative as an upgrade path. * Multi-node thermal / OS control loops / adaptive power caps (still continuous-time). --- ## 13) References + AI Use Report ### Must include * Proper citations for any literature/specs used for parameters and for OCV/ECM modeling (your BibTeX draft is a good start). * COMAP-required **AI Use Report** appended (doesn’t count toward 25 pages). --- ### If you want a “no-miss” checklist I can turn the above into a **page-by-page outline** (25-page cap aware) with: * exact figure placements, * exact table placements, * and paragraph-level “claim → evidence → implication” bullets for each subsection. { "model_name": "MODEL_SPEC", "version": "1.0", "status": "frozen", "states": [ { "name": "z", "unit": "dimensionless", "bounds": [0, 1], "description": "State of Charge" }, { "name": "v_p", "unit": "V", "bounds": [null, null], "description": "Polarization voltage" }, { "name": "T_b", "unit": "K", "bounds": [0, null], "description": "Battery temperature" }, { "name": "S", "unit": "dimensionless", "bounds": [0, 1], "description": "State of Health" }, { "name": "w", "unit": "dimensionless", "bounds": [0, 1], "description": "Radio tail activation level" } ], "inputs": [ { "name": "L", "unit": "dimensionless", "bounds": [0, 1], "description": "Screen brightness" }, { "name": "C", "unit": "dimensionless", "bounds": [0, 1], "description": "Processor load" }, { "name": "N", "unit": "dimensionless", "bounds": [0, 1], "description": "Network activity" }, { "name": "Ψ", "unit": "dimensionless", "bounds": [0, 1], "description": "Signal quality" }, { "name": "T_a", "unit": "K", "bounds": [null, null], "description": "Ambient temperature" } ], "parameters": [ { "name": "P_bg", "unit": "W", "description": "Background power" }, { "name": "P_scr0", "unit": "W", "description": "Screen baseline power" }, { "name": "k_L", "unit": "W", "description": "Screen scaling coefficient" }, { "name": "gamma", "unit": "dimensionless", "description": "Screen power exponent" }, { "name": "P_cpu0", "unit": "W", "description": "CPU baseline power" }, { "name": "k_C", "unit": "W", "description": "CPU scaling coefficient" }, { "name": "eta", "unit": "dimensionless", "description": "CPU power exponent" }, { "name": "P_net0", "unit": "W", "description": "Network baseline power" }, { "name": "k_N", "unit": "W", "description": "Network scaling coefficient" }, { "name": "epsilon", "unit": "dimensionless", "description": "Signal guard constant" }, { "name": "kappa", "unit": "dimensionless", "description": "Signal 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": "hA", "unit": "W/K", "description": "Convective heat transfer coefficient" }, { "name": "C_th", "unit": "J/K", "description": "Thermal capacitance" }, { "name": "E0", "unit": "V", "description": "Standard 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" }, { "name": "R_ref", "unit": "Ohm", "description": "Reference internal resistance" }, { "name": "E_a", "unit": "J/mol", "description": "Activation energy" }, { "name": "R_g", "unit": "J/(mol*K)", "description": "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 voltage" }, { "name": "z_min", "unit": "dimensionless", "description": "SOC singularity guard" }, { "name": "Q_eff_floor", "unit": "Ah", "description": "Minimum capacity floor" } ], "equations": [ "P_scr = P_scr0 + k_L * L^gamma", "P_cpu = P_cpu0 + k_C * C^eta", "P_net = P_net0 + k_N * N / (Ψ + epsilon)^kappa + k_tail * w", "P_tot = P_bg + P_scr + P_cpu + P_net", "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)", "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", "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", "sigma_N = min(1, N)", "tau_N = (sigma_N >= w) ? tau_up : tau_down", "dw/dt = (sigma_N - w) / tau_N" ], "guards": { "z_min": "z_eff = max(z, z_min)", "Q_eff_floor": "Q_eff = max(Q_calc, Q_eff_floor)", "clamp_rules": [ "z = clamp(z, 0, 1)", "S = clamp(S, 0, 1)", "w = clamp(w, 0, 1)" ] }, "events": { "gV": "V_term(t) - V_cut", "gz": "z(t)", "gDelta": "Delta(t)", "termination_logic": "Terminate at t* = min(t | gV(t) <= 0 OR gz(t) <= 0 OR gDelta(t) <= 0)", "termination_reasons": [ "V_CUTOFF", "SOC_ZERO", "DELTA_ZERO" ] }, "tte_definition": { "formula": "TTE = t* - t0", "interpolation": "t* = t_{n-1} + (t_n - t_{n-1}) * (0 - g(t_{n-1})) / (g(t_n) - g(t_{n-1}))", "tie_breaking": "Earliest t* across all event functions; if identical, priority: DELTA_ZERO > V_CUTOFF > SOC_ZERO" }, "numerics": { "method": "RK4_nested_CPL", "dt_symbol": "dt", "stage_recompute_current": true }, "validation": { "dimension_check": [ "P_tot [W]", "V_term [V]", "I [A]", "dz/dt [1/s]", "dT_b/dt [K/s]" ], "monotonicity_check": "If I >= 0, then dz/dt must be <= 0", "feasibility_check": "Delta must be >= 0; if Delta < 0 at any evaluation, trigger DELTA_ZERO event" } }