{
  "created_utc": "2026-11-11T09:49:37.006618+00:00",
  "protocol": {
    "L_m": 0.0002,
    "h0_m": 2e-06,
    "B_m": 0.001,
    "gamma_N_m": 0.035,
    "mu_Pa_s": 0.001002,
    "T_s": 0.001,
    "interface": "zero thickness gradient and border liquid pressure; half-cell Poiseuille discretization, NOT resolved transition resistance",
    "material": "illustrative inputs, not calibrated",
    "active": "fixed immobile interfaces, horizontal strips, finite uniform-pressure border",
    "absent": [
      "gravity",
      "surfactant/solute",
      "gas",
      "inertia",
      "moving geometry",
      "disjoining pressure",
      "rupture"
    ],
    "reference": "same simplified pressure-boundary PDE; not experimental validation"
  },
  "commit": "af72918e72c5db455311249cbfcea6f33b23cdb1",
  "branch": "p6-codex-development",
  "source_sha256": {
    "foam/include/vf/foam/FiniteBorderFilm.h": "a78f4bb3b8bc74dacae47bf1a5ae27d6b7d7d4f11b3ed8ba35a57ef3ef02b541",
    "foam/bench/finite_border_film.cpp": "fa0a89fc02e20ac36c23538e0e115f50b4f3e3f0862d5eae0a53d073a0589e56",
    "foam/tests/test_finite_border_film.cpp": "fe4adadc484165df9fbe0970cb5591580bcd6f505dbd241ef4a1bb10062a6dd7",
    "foam/scripts/run_finite_border_experiments.py": "558facda13c50e03338ec5ec9cdd48618b8d1d571808061b444e6c21d6febe35",
    "thin_film/include/vf/thinfilm/ThinFilm.h": "28db3d0cd8d8faa0d4722929e4f502708b2a915f5801dc351db2e100ea2a3a35",
    "thin_film/include/vf/thinfilm/Particles.h": "317af668d4614d943a2a87eff0c292784cf41ba5ecb5662ae92851e638b948d6",
    "foam/docs/finite_border_protocol.md": "e7b7dc22bebd70ece9055a4ad90e2d1a3771468fb923f8e3ba0cab373c497150",
    "foam/xmake.lua": "222960029ee33523cdb76726ef3f4a9a4ee320d2bf9b1d6872f1eef98b92f420"
  },
  "executable_sha256": "ede325754aab178c57d71255e4f76e1a9c9395f887304da4d2e0c796db8e210d",
  "threads": 2,
  "results": [
    {
      "name": "pilot40",
      "n": 40,
      "dt_s": 1e-06,
      "strips": 1,
      "r0_m": 5e-05,
      "mode": "finite",
      "steps": 1000,
      "duration_s": 0.001,
      "wall_s": 0.09942149999551475,
      "command": [
        "finite_border_film",
        "40",
        "1",
        "5e-05",
        "finite",
        "1e-06",
        "1000",
        "pilot40.csv",
        "pilot40-frames.csv"
      ],
      "max_relative_balance": 1.5543122344752192e-15,
      "max_strip_balance": 1.0097419586828945e-15,
      "max_energy_increase_J": 0.0,
      "minimum_h_m": 6.507516421288772e-07,
      "final_mean_h_m": 1.9307866040768787e-06,
      "initial_border_pressure_Pa": -700.0,
      "final_border_pressure_Pa": -688.2827894349514,
      "film_loss_fraction": 0.03460669796156102,
      "received_volume_m3": 1.3842679184624231e-14,
      "border_gain_m3": 1.3842679184623364e-14,
      "max_scaled_nonlinear_residual": 5.138274652765826e-15,
      "newton_iterations": 1101,
      "rejected_steps": 0,
      "csv_sha256": "1dd183da07ab5b73199a706e1ffee150ecfbec4c796083e8f017fb0f3c5830cb",
      "frames_sha256": "b5620813067d16297fe03eafc2c925b18b778f8f37681b5f795a01d613d6c48b"
    },
    {
      "name": "main80",
      "n": 80,
      "dt_s": 1e-06,
      "strips": 1,
      "r0_m": 5e-05,
      "mode": "finite",
      "steps": 1000,
      "duration_s": 0.001,
      "wall_s": 0.14611059986054897,
      "command": [
        "finite_border_film",
        "80",
        "1",
        "5e-05",
        "finite",
        "1e-06",
        "1000",
        "main80.csv",
        "main80-frames.csv"
      ],
      "max_relative_balance": 2.6645352591003757e-15,
      "max_strip_balance": 2.1457016622011553e-15,
      "max_energy_increase_J": 0.0,
      "minimum_h_m": 5.890824969048147e-07,
      "final_mean_h_m": 1.9343480155954566e-06,
      "initial_border_pressure_Pa": -700.0,
      "final_border_pressure_Pa": -688.8714051341032,
      "film_loss_fraction": 0.032825992202270116,
      "received_volume_m3": 1.313039688090878e-14,
      "border_gain_m3": 1.313039688090976e-14,
      "max_scaled_nonlinear_residual": 4.558761137682388e-14,
      "newton_iterations": 1116,
      "rejected_steps": 0,
      "csv_sha256": "4e91d694f139410b6a83dffdff7c8bdf621533014baf96c9c4bfc0896328dfc2",
      "frames_sha256": "41811f0b4bd5f9b362a2232fce12031cc0fb1d2e686a0d7b9667bd238e72effe"
    },
    {
      "name": "space160",
      "n": 160,
      "dt_s": 1e-06,
      "strips": 1,
      "r0_m": 5e-05,
      "mode": "finite",
      "steps": 1000,
      "duration_s": 0.001,
      "wall_s": 0.2222170999739319,
      "command": [
        "finite_border_film",
        "160",
        "1",
        "5e-05",
        "finite",
        "1e-06",
        "1000",
        "space160.csv",
        "space160-frames.csv"
      ],
      "max_relative_balance": 2.4424906541753444e-15,
      "max_strip_balance": 3.4078791105547797e-15,
      "max_energy_increase_J": 0.0,
      "minimum_h_m": 5.705566746177158e-07,
      "final_mean_h_m": 1.9353678199674755e-06,
      "initial_border_pressure_Pa": -700.0,
      "final_border_pressure_Pa": -689.0402325970181,
      "film_loss_fraction": 0.03231609001625979,
      "received_volume_m3": 1.292643600650478e-14,
      "border_gain_m3": 1.2926436006504896e-14,
      "max_scaled_nonlinear_residual": 5.291921957063794e-13,
      "newton_iterations": 1149,
      "rejected_steps": 0,
      "csv_sha256": "24fcfc4d4bb345d6ab9d5d7417f7c023d05d2cbf6bf16b0a413484d7bbd3abae",
      "frames_sha256": "6d69e1844c75c0727d5b9c943789ddf3faae844322f5a0ee7a03381d8a3d2f16"
    },
    {
      "name": "reference320",
      "n": 320,
      "dt_s": 2.5e-07,
      "strips": 1,
      "r0_m": 5e-05,
      "mode": "finite",
      "steps": 4000,
      "duration_s": 0.001,
      "wall_s": 1.0558892998378724,
      "command": [
        "finite_border_film",
        "320",
        "1",
        "5e-05",
        "finite",
        "2.5e-07",
        "4000",
        "reference320.csv",
        "reference320-frames.csv"
      ],
      "max_relative_balance": 4.9960036108132044e-15,
      "max_strip_balance": 7.446846945286307e-15,
      "max_energy_increase_J": 0.0,
      "minimum_h_m": 5.659655243080013e-07,
      "final_mean_h_m": 1.9356862152509217e-06,
      "initial_border_pressure_Pa": -700.0,
      "final_border_pressure_Pa": -689.0929680090784,
      "film_loss_fraction": 0.03215689237454478,
      "received_volume_m3": 1.2862756949815876e-14,
      "border_gain_m3": 1.2862756949814774e-14,
      "max_scaled_nonlinear_residual": 5.718589230624405e-12,
      "newton_iterations": 4099,
      "rejected_steps": 0,
      "csv_sha256": "70f0f64c8c82a959d7ec24bc190c92c59e5d2c9c3c1d31605e0013e178b74d2c",
      "frames_sha256": "5a8889f928752394f2107328000f9b84576c60c7181c1cef4572b9a063fac363"
    },
    {
      "name": "time-coarse",
      "n": 80,
      "dt_s": 2e-06,
      "strips": 1,
      "r0_m": 5e-05,
      "mode": "finite",
      "steps": 500,
      "duration_s": 0.001,
      "wall_s": 0.09386079991236329,
      "command": [
        "finite_border_film",
        "80",
        "1",
        "5e-05",
        "finite",
        "2e-06",
        "500",
        "time-coarse.csv",
        "time-coarse-frames.csv"
      ],
      "max_relative_balance": 8.881784197001252e-16,
      "max_strip_balance": 2.2719194070365175e-15,
      "max_energy_increase_J": 0.0,
      "minimum_h_m": 5.886858224675513e-07,
      "final_mean_h_m": 1.9342837896072034e-06,
      "initial_border_pressure_Pa": -700.0,
      "final_border_pressure_Pa": -688.8607767476387,
      "film_loss_fraction": 0.03285810519639687,
      "received_volume_m3": 1.3143242078559453e-14,
      "border_gain_m3": 1.3143242078559128e-14,
      "max_scaled_nonlinear_residual": 4.943540592345936e-14,
      "newton_iterations": 637,
      "rejected_steps": 0,
      "csv_sha256": "4f8cf311d883ebfdf12c75cd7d05688b8cd6bf8b4a73191822fb3bc0a356195a",
      "frames_sha256": "99e5d5fafc9ce9cf1f5627e3bf741f0d168a305103ba9127aeee7daadcd934d6"
    },
    {
      "name": "time-half",
      "n": 80,
      "dt_s": 5e-07,
      "strips": 1,
      "r0_m": 5e-05,
      "mode": "finite",
      "steps": 2000,
      "duration_s": 0.001,
      "wall_s": 0.17815009993501008,
      "command": [
        "finite_border_film",
        "80",
        "1",
        "5e-05",
        "finite",
        "5e-07",
        "2000",
        "time-half.csv",
        "time-half-frames.csv"
      ],
      "max_relative_balance": 2.886579864025407e-15,
      "max_strip_balance": 2.2719194070365175e-15,
      "max_energy_increase_J": 0.0,
      "minimum_h_m": 5.892808618963801e-07,
      "final_mean_h_m": 1.934380210750323e-06,
      "initial_border_pressure_Pa": -700.0,
      "final_border_pressure_Pa": -688.8767331087566,
      "film_loss_fraction": 0.032809894624836855,
      "received_volume_m3": 1.3123957849935284e-14,
      "border_gain_m3": 1.3123957849936043e-14,
      "max_scaled_nonlinear_residual": 4.091643473688733e-14,
      "newton_iterations": 2082,
      "rejected_steps": 0,
      "csv_sha256": "69535c344a3f937757acf29e0bce3c5070803877a4a517f30454ade0d2b50834",
      "frames_sha256": "003d2b7f3e3538d0b539212ee3440a848ef33f4a56812b0205240b6c7213bb50"
    },
    {
      "name": "fixed80",
      "n": 80,
      "dt_s": 1e-06,
      "strips": 1,
      "r0_m": 5e-05,
      "mode": "fixed",
      "steps": 1000,
      "duration_s": 0.001,
      "wall_s": 0.12004959979094565,
      "command": [
        "finite_border_film",
        "80",
        "1",
        "5e-05",
        "fixed",
        "1e-06",
        "1000",
        "fixed80.csv",
        "fixed80-frames.csv"
      ],
      "max_relative_balance": 2.6645352591003757e-15,
      "max_strip_balance": 2.2719194070365175e-15,
      "max_energy_increase_J": 0.0,
      "minimum_h_m": 5.833704614708713e-07,
      "final_mean_h_m": 1.9342800440659943e-06,
      "initial_border_pressure_Pa": -700.0,
      "final_border_pressure_Pa": -700.0,
      "film_loss_fraction": 0.03285997796700124,
      "received_volume_m3": 1.3143991186801124e-14,
      "border_gain_m3": 1.3143991186802113e-14,
      "max_scaled_nonlinear_residual": 1.1226913496087398e-16,
      "newton_iterations": 1000,
      "rejected_steps": 0,
      "csv_sha256": "5c77e45aa309efe7b6832d0e447146ceae48e0e4f7ade71da79b9385be43f243",
      "frames_sha256": "90c2f81a89cd6d79788db96e4822a25f8536ee030942d665dc7b6799454925e9"
    },
    {
      "name": "radius25",
      "n": 80,
      "dt_s": 1e-06,
      "strips": 1,
      "r0_m": 2.5e-05,
      "mode": "finite",
      "steps": 1000,
      "duration_s": 0.001,
      "wall_s": 0.1355938999913633,
      "command": [
        "finite_border_film",
        "80",
        "1",
        "2.5e-05",
        "finite",
        "1e-06",
        "1000",
        "radius25.csv",
        "radius25-frames.csv"
      ],
      "max_relative_balance": 2.220446049250313e-15,
      "max_strip_balance": 2.1457016622011553e-15,
      "max_energy_increase_J": 0.0,
      "minimum_h_m": 3.768864303405139e-07,
      "final_mean_h_m": 1.9351989228705307e-06,
      "initial_border_pressure_Pa": -1400.0,
      "final_border_pressure_Pa": -1317.8293747892394,
      "film_loss_fraction": 0.03240053856473313,
      "received_volume_m3": 1.2960215425893931e-14,
      "border_gain_m3": 1.2960215425894096e-14,
      "max_scaled_nonlinear_residual": 1.4281416794873023e-14,
      "newton_iterations": 1238,
      "rejected_steps": 0,
      "csv_sha256": "40ea3f428d859c8a07f3b4622bc9f5ad19b9bf63a6e988e6dfa3a0114045a13e",
      "frames_sha256": "01159575ccdd814224124c835e8ec6267009f637e8d667ead370fd176ce75137"
    },
    {
      "name": "radius100",
      "n": 80,
      "dt_s": 1e-06,
      "strips": 1,
      "r0_m": 0.0001,
      "mode": "finite",
      "steps": 1000,
      "duration_s": 0.001,
      "wall_s": 0.13177450001239777,
      "command": [
        "finite_border_film",
        "80",
        "1",
        "0.0001",
        "finite",
        "1e-06",
        "1000",
        "radius100.csv",
        "radius100-frames.csv"
      ],
      "max_relative_balance": 9.992007221626409e-16,
      "max_strip_balance": 2.2719194070365175e-15,
      "max_energy_increase_J": 0.0,
      "minimum_h_m": 8.978480231006351e-07,
      "final_mean_h_m": 1.9407898339531467e-06,
      "initial_border_pressure_Pa": -350.0,
      "final_border_pressure_Pa": -348.72188906064093,
      "film_loss_fraction": 0.029605083023425127,
      "received_volume_m3": 1.1842033209370625e-14,
      "border_gain_m3": 1.1842033209369777e-14,
      "max_scaled_nonlinear_residual": 1.7623012424361484e-13,
      "newton_iterations": 1010,
      "rejected_steps": 0,
      "csv_sha256": "5df810d4cec223b146875acfa91424145c63494bb86b9a3b03bbbb5dee319e64",
      "frames_sha256": "adef068c4b24cf050ad3cc0629224bf00e80cbb7cfdae51252ca9a69643fa3f4"
    },
    {
      "name": "shared-three",
      "n": 80,
      "dt_s": 1e-06,
      "strips": 3,
      "r0_m": 5e-05,
      "mode": "finite",
      "steps": 1000,
      "duration_s": 0.001,
      "wall_s": 0.3193959000054747,
      "command": [
        "finite_border_film",
        "80",
        "3",
        "5e-05",
        "finite",
        "1e-06",
        "1000",
        "shared-three.csv",
        "shared-three-frames.csv"
      ],
      "max_relative_balance": 3.552713678800501e-15,
      "max_strip_balance": 2.2719194070365175e-15,
      "max_energy_increase_J": 0.0,
      "minimum_h_m": 6.000786095613113e-07,
      "final_mean_h_m": 1.9344836650597105e-06,
      "initial_border_pressure_Pa": -700.0,
      "final_border_pressure_Pa": -668.1805073854187,
      "film_loss_fraction": 0.03275816747014304,
      "received_volume_m3": 3.9309800964173626e-14,
      "border_gain_m3": 3.930980096417336e-14,
      "max_scaled_nonlinear_residual": 7.579440547411664e-15,
      "newton_iterations": 1418,
      "rejected_steps": 0,
      "csv_sha256": "2ee0fca2542843ff75003a04e32d1e50f18dae91697866a6861124bbd6593e83",
      "frames_sha256": "3fa5e07ab961f7dab9bf599ef128c6a61d512d613bcbeb4bb89264432f0746b2"
    },
    {
      "name": "one-step",
      "n": 40,
      "dt_s": 1e-06,
      "strips": 1,
      "r0_m": 5e-05,
      "mode": "finite",
      "steps": 1,
      "duration_s": 1e-06,
      "wall_s": 0.01885049999691546,
      "command": [
        "finite_border_film",
        "40",
        "1",
        "5e-05",
        "finite",
        "1e-06",
        "1",
        "one-step.csv",
        "one-step-frames.csv"
      ],
      "max_relative_balance": 0.0,
      "max_strip_balance": 1.2621774483536181e-16,
      "max_energy_increase_J": 0.0,
      "minimum_h_m": 1.965175532261011e-06,
      "final_mean_h_m": 1.9990995734640268e-06,
      "initial_border_pressure_Pa": -700.0,
      "final_border_pressure_Pa": -699.8437035721829,
      "film_loss_fraction": 0.0004502132679871096,
      "received_volume_m3": 1.8008530719479562e-16,
      "border_gain_m3": 1.8008530719473902e-16,
      "max_scaled_nonlinear_residual": 1.0164395367051604e-16,
      "newton_iterations": 2,
      "rejected_steps": 0,
      "csv_sha256": "5ebd3d023e192f7b76d923f6889233991988404c3516683f56df8f06ba68fda7",
      "frames_sha256": "019e0bfd4f341b2f4e7df4508ece044176a27ba20a80df1ed236b2996a340009"
    }
  ],
  "independent_step": {
    "description": "independent dimensional SciPy Newton vs native scaled-volume step",
    "max_h_error_over_h0": 2.1175823681357508e-16,
    "relative_border_area_error": 2.5648298533559206e-16,
    "scaled_residual": 8.591178122080866e-17,
    "passed": true
  },
  "space_comparisons": [
    {
      "name": "pilot40",
      "n": 40,
      "max_saved_field_relative_L2": 0.005458628098576115,
      "final_field_relative_L2": 0.005458628098576115,
      "final_raw_min_relative_difference": 0.14980791970419535,
      "final_boundary_cell_vs_fine_average_relative_error": 0.031623854512168266
    },
    {
      "name": "main80",
      "n": 80,
      "max_saved_field_relative_L2": 0.001515567340172287,
      "final_field_relative_L2": 0.001515567340172287,
      "final_raw_min_relative_difference": 0.04084519569469922,
      "final_boundary_cell_vs_fine_average_relative_error": 0.013324524553997524
    },
    {
      "name": "space160",
      "n": 160,
      "max_saved_field_relative_L2": 0.00036644938337286197,
      "final_field_relative_L2": 0.00036644938337286197,
      "final_raw_min_relative_difference": 0.008112067100426243,
      "final_boundary_cell_vs_fine_average_relative_error": 0.004056672462431401
    }
  ],
  "time_comparisons": [
    {
      "name": "time-coarse",
      "max_saved_field_relative_L2_vs_half": 0.0004691645263209603,
      "final_field_relative_L2_vs_half": 0.0001259551526520106,
      "final_min_relative_difference_vs_half": 0.001009772194050021
    },
    {
      "name": "main80",
      "max_saved_field_relative_L2_vs_half": 0.00015573208951148008,
      "final_field_relative_L2_vs_half": 4.202382087757027e-05,
      "final_min_relative_difference_vs_half": 0.0003366221514932651
    }
  ],
  "feedback": {
    "finite_vs_fixed_received_volume_relative_change": -0.0010342601192546708,
    "pressure_magnitude_relative_change": -0.015897992665566907,
    "shared_three_max_relative_symmetry_error": 1.4823076576950256e-15
  },
  "gates": {
    "all_runs_positive": true,
    "all_total_volume_balance_le_1e-13": true,
    "all_strip_balance_le_1e-10": true,
    "all_energy_nonincrease_roundoff_1e-22_J": true,
    "all_border_transfers_close_1e-24_m3": true,
    "independent_dimensional_step": true,
    "shared_symmetry_le_1e-10": true,
    "main_saved_field_reference_le_1_percent": true
  },
  "wall_s": 2.6607727999798954,
  "limits": [
    "E04B simplified boundary-pressure verification only; E04 physical transition remains pending.",
    "No solute or surfactant closure, moving foam, coarsening or cascade is simulated.",
    "Radius scan changes capacity AND suction; it is not an isolated capacity experiment.",
    "Raw minimum values refer to different first-cell locations; cell-averaged comparisons also reported.",
    "Fixed-potential control includes bath work; its plotted energy is the grand-potential counterpart.",
    "Initial flat-film pressure is incompatible with imposed border pressure; startup boundary layer is resolved numerically."
  ]
}