Preserve bounded validation evidence and historical failures
This commit is contained in:
1 parent
cdbb9c42f6
commit
263f3b0c7a
239 files changed
+74191
No files matched your search
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"head": "6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0",
|
||||
"git_status": " M pyproject.toml\n M setup.py\n M src/CelerisLab/__init__.py\n M src/CelerisLab/body/__init__.py\n M src/CelerisLab/body/ddf_patch.py\n M src/CelerisLab/body/manager.py\n M src/CelerisLab/body/preprocess/flag_overlay.py\n M src/CelerisLab/common/__init__.py\n M src/CelerisLab/common/checkpoint.py\n M src/CelerisLab/config.py\n M src/CelerisLab/configs/CONFIG.md\n M src/CelerisLab/cuda/__init__.py\n M src/CelerisLab/cuda/compiler_v2.py\n M src/CelerisLab/cuda/context.py\n M src/CelerisLab/lbm/__init__.py\n M src/CelerisLab/lbm/curved_links.py\n M src/CelerisLab/lbm/field.py\n M src/CelerisLab/lbm/initializers.py\n M src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh\n M src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh\n M src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh\n M src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh\n M src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh\n M src/CelerisLab/lbm/kernels/config/config_grid.h\n M src/CelerisLab/lbm/kernels/config/config_method.h\n M src/CelerisLab/lbm/kernels/config/config_objects.h\n M src/CelerisLab/lbm/kernels/config/config_physics.h\n M src/CelerisLab/lbm/kernels/kernel_v2.cu\n M src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh\n M src/CelerisLab/lbm/kernels/operators/collision_trt.cuh\n M src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh\n M src/CelerisLab/lbm/kernels/step/aux_kernels.cu\n M src/CelerisLab/lbm/kernels/step/esopull_sync.cu\n M src/CelerisLab/lbm/kernels/step/init_flow.cu\n M src/CelerisLab/lbm/kernels/step/one_step_double.cu\n M src/CelerisLab/lbm/kernels/step/one_step_esopull.cu\n M src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh\n M src/CelerisLab/lbm/stepper.py\n M src/CelerisLab/simulation.py\n M tests/integration/test_body_sync_e2e.py\n M tests/integration/test_ddf_patch.py\n M tests/integration/test_sync_bodies_skeleton.py\n M tests/integration/test_unified_obs.py\n M tests/postproc/experiment.ipynb\n M tests/validation/run_kan99b_rotating_cylinder.py\n M tests/validation/run_sah04_st_matrix.py\n M tests/validation/test_sensor_accuracy.py\n?? docs/design/\n?? docs/multilevel_grid_architecture_analysis.md\n?? research/\n?? src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh\n?? src/CelerisLab/lbm/kernels/refinement.cu\n?? src/CelerisLab/lbm/refinement.py\n?? src/CelerisLab/lbm/refinement_stepper.py\n?? \"tests/audit/body\\345\\210\\240\\345\\207\\217\\345\\212\\237\\350\\203\\275.md\"\n?? tests/integration/_cases.py\n?? tests/integration/test_numerical_gpu.py\n?? tests/integration/test_runtime_contracts_gpu.py\n?? tests/integration/test_state_gpu.py\n?? tests/unit/cpp/\n?? tests/unit/test_build_contracts.py\n?? tests/unit/test_context_ownership.py\n?? tests/unit/test_initializers.py\n?? tests/unit/test_numerical_operators.py\n?? tests/unit/test_planar_velocity.py\n?? tests/unit/test_refinement.py\n?? tests/unit/test_reservoir.py\n?? tests/unit/test_simulation_lifecycle.py\n?? tests/unit/test_slot_velocity.py\n?? tests/unit/test_state_regressions.py\n?? tests/validation/analyze_j3_saved_frames.py\n?? tests/validation/diagnose_j3_lags.py\n?? tests/validation/multigrid/\n?? tests/validation/run_j1.py\n?? tests/validation/run_j2_slot.py\n?? tests/validation/run_j3_coverage.py\n?? tests/validation/run_j3_reservoir.py\n?? tests/validation/run_poiseuille.py\n",
|
||||
"before_copy_dir": "/tmp/celeris-example-baseline-fcv638hl",
|
||||
"hashes": {
|
||||
"tests/validation/multigrid/test_refinement_gpu.py": "3078ea8752e225330cfe89fe37ce24ece96fa05b96cfa185687909a09d721088",
|
||||
"tests/validation/multigrid/test_refinement_followup.py": "fa7ec6200416f8a31cf0b2db5299a6ea4a529da18f3e9121c8b855270746287d",
|
||||
"src/CelerisLab/lbm/refinement_stepper.py": "0e670ab38a1ce95839ceeef844b551427f61603ab873530905c745125052f5df",
|
||||
"src/CelerisLab/lbm/refinement.py": "554735c5613129eb29f339c6aeeb4f3a3bbc5aba67558be51fbf7c2fb6ac442a",
|
||||
"src/CelerisLab/lbm/kernels/refinement.cu": "e8e769b7c6a61190675eafee99369ce9d8f4836f6ec74bed2d45f9077cbb3407",
|
||||
"src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826",
|
||||
"tests/validation/multigrid/cpu_reference.py": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e",
|
||||
"research/refinement_step_20261013/gpu_failure_validation.txt": "d6ec00e0e8c69015565135a67fac6de47701e9eebc3cbacc379abf8166ac61be",
|
||||
"research/refinement_step_20261013/cpu_validation.json": "cf7200fc4b763f5a2133d8affeea306578a247179bb82ce2f5ae0d8e244c576b",
|
||||
"research/refinement_step_20261013/incremental.patch": "c3d2d813b64f8a2305f54153508d71b546d86af7be1005cff96e0ef8c91297bb",
|
||||
"research/refinement_step_20261013/baseline.json": "68bd37982acb433bea235a94f211c907be483e905742f98166235929f79ba95d",
|
||||
"research/refinement_step_20261013/manifest.json": "a60a40ffa9073a8047f3b9f5af3c1256179603641083c3a20dda6cfa6e050146",
|
||||
"research/refinement_step_20261013/README.txt": "922d6fc6c742203f69e174a12cac6b19e8ae15be74257134c08d72990b16d517",
|
||||
"research/refinement_step_20261013/gpu_validation.json": "2f0218854a2a307dd15a891a781fa3c2b7e865c201630a36ca180134b1ee6436",
|
||||
"research/refinement_step_20261013/gpu_validation.txt": "1714ee85e6235528bf29dac85bca1298a673bdb9bf0c9c364961bf364a83f0d2",
|
||||
"research/refinement_step_20261013/gpu_failure_validation.json": "5e7d58863659af3c29f10aac11ff43516fedd39a30a40e5ead62732ba80fcbd3",
|
||||
"research/refinement_followup_20261013/gpu_rectangle_before.json": "aeab9314117b7eaa0950566094d20ecb5a304cc55b85887b6281694d3a6b8660",
|
||||
"research/refinement_followup_20261013/gpu_before.json": "236cc69740cb40640cf4cd96cd94ff80644c2cf07c471b276092303edd3003e1",
|
||||
"research/refinement_followup_20261013/gpu_rectangle_before_no_launch_1791886104981638567.json": "831b08511b78e8e631a17a638212b1c511e6f3fdb86019d7a77cc0f44d4015d2",
|
||||
"research/refinement_followup_20261013/gpu_stdout.txt": "3147d3ab0b58ac9aa67c495491979ebb455db0fc2e89e7004facbd8c55c67b4e",
|
||||
"research/refinement_followup_20261013/cpu_results_attempt1.json": "a91976e3ff92f7fe458a4432dae31d6b751bee92450d9a07e1dd5ee1cf5e915a",
|
||||
"research/refinement_followup_20261013/incremental.patch": "b638544a02cbf7dd7acfcad545fcac50dc9640e193a9672f27916275c134253f",
|
||||
"research/refinement_followup_20261013/baseline.json": "77694a29bbea2e61eb69eb5fe37eca7a8d5e82114bd59c7ff23e89d3db53a019",
|
||||
"research/refinement_followup_20261013/gpu_seed1_before.json": "4dc6de02770a8e985f62d902ab9067cf5910084e4506ece059979640adb5575f",
|
||||
"research/refinement_followup_20261013/gpu_seed1_stdout.txt": "8453a1b7221085691b39439428e39aaf52215abbbe9b1f84fc54c4a695260a9e",
|
||||
"research/refinement_followup_20261013/cleanup.json": "ce1fb34fcbf2fadf7786234a8dd5dd9d0e520d9353a08b5df4c6777a35beed88",
|
||||
"research/refinement_followup_20261013/manifest.json": "5f4c3b56a9ff8dfb422c37e0777af90536e94585ae7573caa05410e3cea294f5",
|
||||
"research/refinement_followup_20261013/README.txt": "c553e889c6d66bb81d17d2691150cadf6fecdaa336de941281e7c85a6ff1eb12",
|
||||
"research/refinement_followup_20261013/cpu_stdout.txt": "f9bcee3a2b43599e99c2e3b3a250aa4d4f4db1a73d1bf7cf1db0ab1fa585c54b",
|
||||
"research/refinement_followup_20261013/gpu_before_no_launch.json": "396664d587d2e7791e972def03c7199845f7a162ab4626733fae1e54e1262da5",
|
||||
"research/refinement_followup_20261013/gpu_rectangle_results.json": "9a06af9ec07de80d049889f321b7ea5f03036f4e461af2a43cdfb76d02ee1d6a",
|
||||
"research/refinement_followup_20261013/gpu_rectangle_stdout.txt": "fea29f48685d84966b51d41b33e59bc01bef7d9dbc5e75b3d7c316de761f5bd5",
|
||||
"research/refinement_followup_20261013/gpu_seed1_results.json": "ac54f5071b6e6095437078d4f8ed1cbc851a4b727ce6336281c1f27472f3dbe4",
|
||||
"research/refinement_followup_20261013/run_gpu.py": "16b1520adbfee1651539f04dd694f5f02e9dc8ae4f4fc55d374a0ac06b50b4b8",
|
||||
"research/refinement_followup_20261013/cpu_results.json": "a1a57b35c0839a82a7b653a062e852edf693d2c318da77dc1cb79373661bc780",
|
||||
"research/refinement_followup_20261013/gpu_results.json": "be369bb072139b3fbfac4cbb3ab5eade7d2fb1ab67549ae2e4e0d0f48f640dfc",
|
||||
"research/refinement_followup_20261013/cpu_stdout_attempt1.txt": "6ac5f889a9f6b6ecfa8abb74e98b07deaadc71c7f5488112eca26e4ed255e7ba"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"utc": "2026-10-13T10:31:33.159924+00:00",
|
||||
"physical_device": 0,
|
||||
"uuid": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c",
|
||||
"gpus": "index, uuid, name, memory.total [MiB], memory.used [MiB], utilization.gpu [%]\n0, GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, Tesla V100-SXM2-16GB, 16384 MiB, 5 MiB, 0 %\n1, GPU-f1c9fd5a-e917-56e0-21fb-24035ba44a36, Tesla V100-SXM2-16GB, 16384 MiB, 5 MiB, 0 %\n2, GPU-b8c11c01-c91f-aa0b-abf6-dad35085cc76, Tesla V100-SXM2-16GB, 16384 MiB, 5 MiB, 0 %\n3, GPU-8b71b032-1b75-2891-935c-ce106a53034a, Tesla V100-SXM2-16GB, 16384 MiB, 5 MiB, 0 %\n",
|
||||
"compute_apps": "gpu_uuid, pid, process_name, used_gpu_memory [MiB]\n",
|
||||
"ram_available_bytes": 64107540480,
|
||||
"resource_policy": "2026-10-13 relaxed RAM: maintain headroom; reconstructible temporary files combined <=2000000000 bytes"
|
||||
}
|
||||
@@ -0,0 +1,177 @@
|
||||
diff --git a/tests/validation/multigrid/test_refinement_gpu.py b/tests/validation/multigrid/test_refinement_gpu.py
|
||||
--- a/tests/validation/multigrid/test_refinement_gpu.py
|
||||
+++ b/tests/validation/multigrid/test_refinement_gpu.py
|
||||
@@ -214,7 +214,6 @@
|
||||
np.testing.assert_allclose(got, expected, rtol=0, atol=POP_ATOL, equal_nan=True)
|
||||
print("normal-build rest: steps=1 PASS; source/kernel paths pinned", flush=True)
|
||||
rss = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1024
|
||||
- self.assertLess(rss, 256)
|
||||
print(f"host_peak_rss={rss:.3f} MiB", flush=True)
|
||||
|
||||
|
||||
diff --git a/tests/validation/multigrid/test_refinement_followup.py b/tests/validation/multigrid/test_refinement_followup.py
|
||||
--- a/tests/validation/multigrid/test_refinement_followup.py
|
||||
+++ b/tests/validation/multigrid/test_refinement_followup.py
|
||||
@@ -3,9 +3,8 @@
|
||||
Use the existing bounded runner/environment; no audit-build rerun. The scalar
|
||||
rectangle oracle covers one interval, not a second general-purpose reference.
|
||||
"""
|
||||
-from contextlib import contextmanager, nullcontext
|
||||
+from contextlib import nullcontext
|
||||
from dataclasses import replace
|
||||
-import json
|
||||
from pathlib import Path
|
||||
import resource
|
||||
from threading import RLock
|
||||
@@ -20,43 +19,6 @@
|
||||
from test_refinement_gpu import (ROOT, POP_ATOL, MOMENT_ATOL, ref, postcollision,
|
||||
totals, LBMConfig, CudaContext, compiler,
|
||||
PeriodicPatchStepper)
|
||||
-
|
||||
-
|
||||
-@contextmanager
|
||||
-def normal_backend(cfg, bounds):
|
||||
- """Compile before creating a CUDA context to keep combined RSS below 256MiB.
|
||||
-
|
||||
- The normal entry/flags are unchanged. Backend requests must match the exact
|
||||
- generated source digest; only redundant compilation is replaced by reuse.
|
||||
- Run each GPU case in a fresh process (driver mappings can outlive a context).
|
||||
- """
|
||||
- p = implementation.FixedPatch2D.from_config(cfg, bounds)
|
||||
- cuda.init()
|
||||
- cc = cuda.Device(0).compute_capability()
|
||||
- arch = f"sm_{cc[0]}{cc[1]}"
|
||||
- builds, prepared = [], {}
|
||||
- try:
|
||||
- for config in (replace(cfg), replace(cfg, nx=p.fine_shape[1], ny=p.fine_shape[0],
|
||||
- viscosity=2*cfg.viscosity)):
|
||||
- config.validate()
|
||||
- build = compiler.generate_config(config, n_objects=0)
|
||||
- builds.append(build)
|
||||
- digest = json.loads((Path(build)/".celeris-build").read_text())["source_sha256"]
|
||||
- prepared[digest] = compiler.compile_kernel(arch, source="refinement.cu", build_dir=build)
|
||||
-
|
||||
- def reuse(request_arch, *, source, build_dir):
|
||||
- assert request_arch == arch and source == "refinement.cu"
|
||||
- digest = json.loads((Path(build_dir)/".celeris-build").read_text())["source_sha256"]
|
||||
- return prepared[digest]
|
||||
-
|
||||
- with CudaContext(0) as context:
|
||||
- with patch.object(compiler, "compile_kernel", side_effect=reuse):
|
||||
- backend = PeriodicPatchStepper(cfg, bounds, context=context)
|
||||
- with backend:
|
||||
- yield backend
|
||||
- finally:
|
||||
- for build in builds:
|
||||
- compiler.cleanup_build_dir(build)
|
||||
|
||||
|
||||
def scalar_interval(coarse, fine, bounds):
|
||||
@@ -182,7 +144,6 @@
|
||||
|
||||
def tearDown(self):
|
||||
rss = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1024
|
||||
- self.assertLessEqual(rss, 256)
|
||||
print(f"host_peak_rss={rss:.3f} MiB", flush=True)
|
||||
|
||||
def test_nonequilibrium_seed1_eight_steps(self):
|
||||
@@ -193,7 +154,8 @@
|
||||
state = ref.State(*(a * (1 + 1e-3*rng.standard_normal(a.shape))
|
||||
for a in (initial.coarse_f, initial.fine_f)))
|
||||
max_pop = max_drift = max_moment = 0.0
|
||||
- with normal_backend(LBMConfig(nx=16, ny=16, viscosity=.1), (4, 4, 12, 12)) as backend:
|
||||
+ with CudaContext(0) as context, PeriodicPatchStepper(
|
||||
+ LBMConfig(nx=16, ny=16, viscosity=.1), (4, 4, 12, 12), context=context) as backend:
|
||||
backend.initialize(*postcollision(state, spec, maps))
|
||||
before = totals(backend.download(), maps)
|
||||
for step in range(1, 9):
|
||||
@@ -224,7 +186,7 @@
|
||||
fine_mask[4:-4, 4:-4] = True
|
||||
initial[1][:, ~fine_mask] = np.nan
|
||||
expected = scalar_interval(*[a.astype(np.float64) for a in initial], bounds)
|
||||
- with normal_backend(cfg, bounds) as backend:
|
||||
+ with CudaContext(0) as context, PeriodicPatchStepper(cfg, bounds, context=context) as backend:
|
||||
self.assertEqual(backend.patch.fine_shape, (14, 16))
|
||||
p = backend.patch
|
||||
allocated = 2 * 9 * (17*13+16*14) * 4 + sum(a.nbytes for a in
|
||||
diff --git a/examples/fixed_periodic_patch.py b/examples/fixed_periodic_patch.py
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/examples/fixed_periodic_patch.py
|
||||
@@ -0,0 +1,76 @@
|
||||
+"""Public API demo: small periodic shear, one fixed 2:1 patch, eight coarse steps.
|
||||
+
|
||||
+From this checkout, after checking the selected physical GPU is idle:
|
||||
+ PYTHONPATH="$PWD/src" CUDA_VISIBLE_DEVICES=0 python examples/fixed_periodic_patch.py
|
||||
+
|
||||
+This demonstrates initialization/stepping/leaf output, not interface accuracy.
|
||||
+There are no walls, objects, forces, checkpoint files or plots.
|
||||
+"""
|
||||
+from dataclasses import replace
|
||||
+from pathlib import Path
|
||||
+
|
||||
+import numpy as np
|
||||
+
|
||||
+import CelerisLab
|
||||
+from CelerisLab.config import load_lbm_config
|
||||
+from CelerisLab.cuda.context import CudaContext
|
||||
+from CelerisLab.lbm.equilibrium import compute_feq_d2q9, compute_macro_from_ddf
|
||||
+from CelerisLab.lbm.refinement import ACTIVE
|
||||
+from CelerisLab.lbm.refinement_stepper import PeriodicPatchStepper
|
||||
+
|
||||
+
|
||||
+def shear_equilibrium(shape, origin, dx, period):
|
||||
+ """Sample ux(y)=1e-3*sin(2*pi*y/period) at physical cell centers.
|
||||
+
|
||||
+ Centers are origin + dx*(index+.5); this shear is independent of x.
|
||||
+ Fine origin includes patch offset AND the four-cell halo, with dx=.5.
|
||||
+ Equilibrium is already postcollision G, so no initial collision is needed.
|
||||
+ """
|
||||
+ y = origin[1] + dx * (np.arange(shape[0]) + .5)
|
||||
+ ux = 1e-3 * np.sin(2*np.pi*y/period)
|
||||
+ rows = np.stack([compute_feq_d2q9(1.0, float(u), 0.0) for u in ux], axis=1)
|
||||
+ return np.repeat(rows[:, :, None], shape[1], axis=2)
|
||||
+
|
||||
+
|
||||
+def leaf_summary(coarse, fine, coarse_leaf, fine_leaf):
|
||||
+ """Use the same leaf masks/areas for initial and final mass."""
|
||||
+ c, f = coarse[:, coarse_leaf], fine[:, fine_leaf]
|
||||
+ mass = c.sum(dtype=np.float64) + .25*f.sum(dtype=np.float64)
|
||||
+ macros = np.array([compute_macro_from_ddf(v) for v in np.concatenate((c, f), axis=1).T])
|
||||
+ return mass, macros.min(axis=0), macros.max(axis=0)
|
||||
+
|
||||
+
|
||||
+def main():
|
||||
+ root = Path(__file__).resolve().parents[1]
|
||||
+ if Path(CelerisLab.__file__).resolve() != root / "src/CelerisLab/__init__.py":
|
||||
+ raise RuntimeError(f"Set PYTHONPATH to {root / 'src'}")
|
||||
+ cfg = replace(load_lbm_config(str(root / "src/CelerisLab/configs/config_lbm.json")),
|
||||
+ nx=16, ny=16, viscosity=.1, velocity=1e-3, rho=1.0,
|
||||
+ lattice_model="D2Q9", collision="SRT", streaming="double_buffer",
|
||||
+ store_precision="FP32", ddf_shifting=False, les_enabled=False)
|
||||
+ with CudaContext(0) as context, PeriodicPatchStepper(cfg, (4, 4, 12, 12), context=context) as run:
|
||||
+ p = run.patch
|
||||
+ coarse = shear_equilibrium(p.coarse_shape, (0, 0), 1.0, cfg.ny)
|
||||
+ fine = shear_equilibrium(p.fine_shape, p.fine_origin, .5, cfg.ny)
|
||||
+ coarse_leaf = np.ones(p.coarse_shape, dtype=bool)
|
||||
+ x0, y0, x1, y1 = p.bounds
|
||||
+ coarse_leaf[y0:y1, x0:x1] = False
|
||||
+ fine_leaf = p.fine_kind == ACTIVE
|
||||
+ coarse[:, ~coarse_leaf] = np.nan
|
||||
+ fine[:, ~fine_leaf] = np.nan
|
||||
+ run.initialize(coarse, fine)
|
||||
+ initial_mass, _, _ = leaf_summary(*run.download(), coarse_leaf, fine_leaf)
|
||||
+ run.step(8)
|
||||
+ coarse, fine = run.download() # Both levels synchronized, stored postcollision G.
|
||||
+ assert np.isnan(coarse[:, ~coarse_leaf]).all() and np.isnan(fine[:, ~fine_leaf]).all()
|
||||
+ assert np.isfinite(coarse[:, coarse_leaf]).all() and np.isfinite(fine[:, fine_leaf]).all()
|
||||
+ mass, low, high = leaf_summary(coarse, fine, coarse_leaf, fine_leaf)
|
||||
+ print(f"periodic patch API demo: synchronized coarse_steps={run.step_count}, fine_steps={2*run.step_count}")
|
||||
+ print(f"leaf mass: initial={initial_mass:.12g} final={mass:.12g} drift={mass-initial_mass:+.6e}")
|
||||
+ for name, lo, hi in zip(("rho", "ux", "uy"), low, high):
|
||||
+ print(f"leaf {name}: [{lo:.9g}, {hi:.9g}]")
|
||||
+ print("covered coarse / fine halo: NaN; functional demonstration only")
|
||||
+
|
||||
+
|
||||
+if __name__ == "__main__":
|
||||
+ main()
|
||||
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"baseline_files_checked": 37,
|
||||
"required_files_unchanged": 35,
|
||||
"changed_files": [
|
||||
"tests/validation/multigrid/test_refinement_gpu.py",
|
||||
"tests/validation/multigrid/test_refinement_followup.py"
|
||||
],
|
||||
"new_file": "examples/fixed_periodic_patch.py",
|
||||
"files": {
|
||||
"examples/fixed_periodic_patch.py": {
|
||||
"bytes": 3776,
|
||||
"sha256": "6732e440a47c237ea341703f2d80717903d34c68fd061bdc97189e5d877be46c"
|
||||
},
|
||||
"research/refinement_example_20261013/baseline.json": {
|
||||
"bytes": 8286,
|
||||
"sha256": "ae0af15ddb40709d1e348655a665264984a240ded1e28af816a8000d08e784be"
|
||||
},
|
||||
"research/refinement_example_20261013/before.json": {
|
||||
"bytes": 818,
|
||||
"sha256": "d95cd518f080eab92af5e53e1e9b6b6fad626eae51990e510d2d2f2ae9d0ec7b"
|
||||
},
|
||||
"research/refinement_example_20261013/incremental.patch": {
|
||||
"bytes": 8682,
|
||||
"sha256": "6acd05df6669ccdcf234ac1680c6e76c75a2587974adb6728f7edda6fd625b69"
|
||||
},
|
||||
"research/refinement_example_20261013/notes.txt": {
|
||||
"bytes": 1185,
|
||||
"sha256": "f111f8cba94b43d1127945fa41615037e1740efcfc529e802338dd8c4ff02795"
|
||||
},
|
||||
"research/refinement_example_20261013/results.json": {
|
||||
"bytes": 1118,
|
||||
"sha256": "8ab13bbc022f2a66898aa07ed94f43cb6716570e7a360a809b7fcd097316db7e"
|
||||
},
|
||||
"research/refinement_example_20261013/stdout.txt": {
|
||||
"bytes": 325,
|
||||
"sha256": "9c59fb315a5552cce4ceab171003e425bf64d747137c89bd86d8779a34adcbd1"
|
||||
},
|
||||
"tests/validation/multigrid/test_refinement_followup.py": {
|
||||
"bytes": 10660,
|
||||
"sha256": "d2df924dfd5267e732036c6df27bb8809f59f1d371da75f506c67aad5997f322"
|
||||
},
|
||||
"tests/validation/multigrid/test_refinement_gpu.py": {
|
||||
"bytes": 12460,
|
||||
"sha256": "0021a39b3a131347196845cff6507c90c387b46b772fe1319d634178c5e13354"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
Public API demonstration only: U=1e-3 equilibrium periodic shear, 16x16 coarse, fixed [4,12)^2 2:1 patch, tau .8/1.1, 8 coarse/16 fine steps. Existing equilibrium and macro helpers; correct cell-center/halo-offset sampling; leaf area weights 1/.25. No test oracle, plots, dumps, physical accuracy acceptance or production solver modifications.
|
||||
Removed obsolete RSS256 assertions and test-only precompilation shim; GPU tests now use the real production constructor/compiler/load path. Tests were syntax checked, not rerun. Example executed ONCE, exit0, through that same production path.
|
||||
New user resource policy applied: available RAM/VRAM headroom, combined rebuildable temporary files <=2GB; no fixed RSS cap. before.json records immediate physical GPU/RAM checks. results.json records command, settings, resources and source hash; stdout.txt is actual unedited output. Sampling is not an OS hard resource limit. Only own temporary directories removed.
|
||||
Read-only independent review found no example coordinate, phase or leaf-mass blocker. All historical validation records and existing production files preserved; no environment/system/dependency/DynamisLab changes, commit or push.
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"command": [
|
||||
"/usr/bin/prlimit",
|
||||
"--core=0",
|
||||
"--",
|
||||
"/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python",
|
||||
"-B",
|
||||
"/home/frank14f/CelerisLab/examples/fixed_periodic_patch.py"
|
||||
],
|
||||
"cwd": "/home/frank14f/CelerisLab",
|
||||
"environment": {
|
||||
"PYTHONPATH": "/home/frank14f/CelerisLab/src",
|
||||
"CUDA_VISIBLE_DEVICES": "0",
|
||||
"CUDA_CACHE_DISABLE": "1",
|
||||
"OPENBLAS_NUM_THREADS": "1",
|
||||
"PYTHONDONTWRITEBYTECODE": "1",
|
||||
"PYTHONNOUSERSITE": "1",
|
||||
"TMPDIR": "/tmp/celeris-example-run-95_6vilr"
|
||||
},
|
||||
"exit_code": 0,
|
||||
"elapsed_seconds": 2.402957883954514,
|
||||
"peak_sampled_group_rss_bytes": 280485888,
|
||||
"min_ram_available_bytes": 63806234624,
|
||||
"min_gpu_free_mib": 15826,
|
||||
"ram_reserve_bytes": 6410754048,
|
||||
"vram_reserve_mib": 1637,
|
||||
"peak_combined_temporary_bytes": 1589248,
|
||||
"temporary_budget_bytes": 2000000000,
|
||||
"termination_reason": null,
|
||||
"monitor": "RSS recorded, not capped; RAM/VRAM headroom and combined temp bytes sampled; not OS memory/disk hard limits",
|
||||
"source_sha256": "6732e440a47c237ea341703f2d80717903d34c68fd061bdc97189e5d877be46c",
|
||||
"stdout_bytes": 325
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
periodic patch API demo: synchronized coarse_steps=8, fine_steps=16
|
||||
leaf mass: initial=256.000002444 final=256.000005753 drift=+3.308989e-06
|
||||
leaf rho: [0.999951661, 1.00004828]
|
||||
leaf ux: [-0.000877841114, 0.000877885922]
|
||||
leaf uy: [-1.7034624e-05, 1.70215859e-05]
|
||||
covered coarse / fine halo: NaN; functional demonstration only
|
||||
Reference in new issue
Block a user