Retain unbordered residual and central-border diagnostics in summaries
This commit is contained in:
@@ -128,6 +128,11 @@ def build_rows(audits):
|
||||
"observer_seconds": case["observer_timings"]["observer_total"],
|
||||
"elapsed_seconds_including_observers": case["run"]["seconds"],
|
||||
"utc_minus_monotonic_seconds": case["run"]["utc_minus_monotonic_seconds"]}
|
||||
physical18 = case["physical"]["18"]["metrics"]
|
||||
# A bordered solve can meet its reported tolerance while the
|
||||
# unbordered equations still carry the auxiliary border action.
|
||||
for key in ("normalized_unbordered_residual", "central_border", "normalized_border_action"):
|
||||
row["final_" + key] = finite(physical18[key], "final " + key, nonnegative=key != "central_border")
|
||||
for q in (14, 18):
|
||||
physical = case["physical"][str(q)]["metrics"]
|
||||
for source, label in (("enthalpy_virial_error", "h_energy_virial"),
|
||||
@@ -305,6 +310,7 @@ class Tests(unittest.TestCase):
|
||||
measure = {"summary": {"30": fine}, "surface": {}, "negative_mass_q30_minus_q22": 0., "negative_volume_q30_minus_q22": 0.}
|
||||
q = {"eos_squared_integral": 4e-8, "eos_defined_everywhere_sampled": True, "volume": 1., "negative_enthalpy_samples": 0}
|
||||
metrics = {"enthalpy_virial_error": 2e-6, "enthalpy_force_virial_error": 3e-5,
|
||||
"normalized_unbordered_residual": .04, "central_border": -.125, "normalized_border_action": .03,
|
||||
"virial_error": None, "force_virial_error": None}
|
||||
case = {"artifact_passed": True, "kind": "coupled", "n": 1.5, "J": 0., "K": 1., "density_degree": 2,
|
||||
"state_size": 50, "block_sizes": {"value/density": 27},
|
||||
@@ -327,6 +333,9 @@ class Tests(unittest.TestCase):
|
||||
self.assertTrue(row["h_energy_virial_q18_within_1e5"])
|
||||
self.assertFalse(row["h_force_virial_q18_within_1e5"])
|
||||
self.assertIsNone(row["density_energy_virial_q18_within_1e5"])
|
||||
self.assertEqual(row["final_normalized_unbordered_residual"], .04)
|
||||
self.assertEqual(row["final_central_border"], -.125)
|
||||
self.assertEqual(row["final_normalized_border_action"], .03)
|
||||
|
||||
|
||||
def main():
|
||||
@@ -356,6 +365,7 @@ def main():
|
||||
write_csv(args.output / "coupled_outcomes.csv", coupled, ["case", "n", "J", "density_degree", "source_state_dofs", "density_dofs",
|
||||
"converged", "failure", "accepted_steps", "krylov_iterations", "newton_iteration_seconds", "linear_solve_seconds",
|
||||
"initial_residual", "final_residual", "final_over_initial_residual", "h_energy_virial_q18", "h_force_virial_q18",
|
||||
"final_normalized_unbordered_residual", "final_central_border", "final_normalized_border_action",
|
||||
"h_energy_virial_q14", "h_force_virial_q14", "negative_mass_over_abs_mass", "negative_volume_fraction",
|
||||
"negative_classification", "eos_l2_q30", "eos_rms_q30"])
|
||||
write_csv(args.output / "relative_to_Q2.csv", relative)
|
||||
@@ -369,6 +379,7 @@ def main():
|
||||
"Negative-mass denominator is the absolute measured density mass, not a substituted exact target mass.",
|
||||
"Uncertainty scales are reconstruction indicators, not rigorous bounds; zero observed negativity is not a global positivity certificate.",
|
||||
"Newton seconds sum reported nonlinear-iteration times, excluding observer and setup costs; total elapsed time is kept separately.",
|
||||
"Final unbordered residual, signed central border and normalized border action come from q18 physical diagnostics; bordered convergence does not imply that these vanish.",
|
||||
"Ratios to Q2 compare recorded endpoints and do not imply equal convergence or error tolerances were attained.",
|
||||
"Undefined values are null/blank; zero is kept exactly. No logarithmic plot floor is inserted.",
|
||||
"P(h) virial milestones do not establish pointwise density validity; density-based virials are retained separately."],
|
||||
|
||||
Reference in New Issue
Block a user