Symptom
test_zalmoxis_aragog_calliope_two_timesteps fails within its 2-timestep / 1e3 yr budget because the interior cannot cross the first liquidus phase boundary. In three full validation runs, the CVODE ΔΦ_global cap rootfn fires immediately at t=8.607e2 yr (Phi_global(start)=0.9878), after 54 rootfn evaluations, with the accepted step covering 0.00% of the 45 yr interval requested.
Mechanism
The CVODE rootfn _PhiCapRootFunction.evaluate() (aragog/src/aragog/solver/entropy_solver.py:547-577) returns g[0] as the minimum of up to three margins: the melt-fraction cap, the temperature cap, and the entropy cap. CVODE stops the solve as soon as any one margin reaches zero.
Near a phase boundary a cell's melt fraction reaches phi=1 and its derivative saturates, so the melt-fraction cap goes blind (comment at entropy_solver.py:524-530). When that happens, the temperature or entropy cap becomes the active margin instead, and the melt-fraction cap has no further effect on when the solve stops.
Diagnostic evidence
Three real validation runs grew only the melt-fraction cap, from its nominal value up to 8x (0.1 to 0.8), while the temperature and entropy caps stayed fixed. The stall time, evaluation count, and starting Phi_global were identical across all three runs (t=8.607e2 yr, 54 evals, Phi_global(start)=0.9878). Under a min() combination, an 8x change in one term with zero effect on the result means that term is not the active margin: the temperature or entropy cap is binding, not the melt-fraction cap.
Where a fix would act
Step acceptance in AragogRunner._solve_with_retry (src/proteus/interior_energetics/aragog.py:2268) accepts any terminal-event stop with dt_actual > 0, with no lower bound. A cell that advances by a near-zero fraction of the requested interval is accepted as a completed step rather than retried with a different strategy. A fix needs to act on this acceptance path, or grow the temperature and entropy caps jointly with the melt-fraction cap, not the melt-fraction cap alone.
Scope
This is pre-existing and predates #789; #789 does not introduce it and does not fix it. test_zalmoxis_aragog_calliope_two_timesteps is marked xfail(strict=False) pending this fix.
Symptom
test_zalmoxis_aragog_calliope_two_timestepsfails within its 2-timestep / 1e3 yr budget because the interior cannot cross the first liquidus phase boundary. In three full validation runs, the CVODEΔΦ_globalcap rootfn fires immediately at t=8.607e2 yr (Phi_global(start)=0.9878), after 54 rootfn evaluations, with the accepted step covering 0.00% of the 45 yr interval requested.Mechanism
The CVODE rootfn
_PhiCapRootFunction.evaluate()(aragog/src/aragog/solver/entropy_solver.py:547-577) returnsg[0]as the minimum of up to three margins: the melt-fraction cap, the temperature cap, and the entropy cap. CVODE stops the solve as soon as any one margin reaches zero.Near a phase boundary a cell's melt fraction reaches phi=1 and its derivative saturates, so the melt-fraction cap goes blind (comment at
entropy_solver.py:524-530). When that happens, the temperature or entropy cap becomes the active margin instead, and the melt-fraction cap has no further effect on when the solve stops.Diagnostic evidence
Three real validation runs grew only the melt-fraction cap, from its nominal value up to 8x (0.1 to 0.8), while the temperature and entropy caps stayed fixed. The stall time, evaluation count, and starting Phi_global were identical across all three runs (t=8.607e2 yr, 54 evals, Phi_global(start)=0.9878). Under a
min()combination, an 8x change in one term with zero effect on the result means that term is not the active margin: the temperature or entropy cap is binding, not the melt-fraction cap.Where a fix would act
Step acceptance in
AragogRunner._solve_with_retry(src/proteus/interior_energetics/aragog.py:2268) accepts any terminal-event stop withdt_actual > 0, with no lower bound. A cell that advances by a near-zero fraction of the requested interval is accepted as a completed step rather than retried with a different strategy. A fix needs to act on this acceptance path, or grow the temperature and entropy caps jointly with the melt-fraction cap, not the melt-fraction cap alone.Scope
This is pre-existing and predates #789; #789 does not introduce it and does not fix it.
test_zalmoxis_aragog_calliope_two_timestepsis markedxfail(strict=False)pending this fix.