diff --git a/research/fine_surface_20261014/baseline.json b/research/fine_surface_20261014/baseline.json new file mode 100644 index 0000000..71a4543 --- /dev/null +++ b/research/fine_surface_20261014/baseline.json @@ -0,0 +1,389 @@ +{ + "head": "6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0", + "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/objects.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?? examples/\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/integration/test_surface_actuation_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/unit/test_surface_actuation.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", + "copy_dir": "/tmp/celeris-fine-surface-baseline-z98oi6ps", + "hashes": { + "src/CelerisLab.egg-info/PKG-INFO": "0b9a8a4e8d60bc531473688723ddef0aab02c7ccc4997e31c9b6a6c35011ca77", + "src/CelerisLab.egg-info/top_level.txt": "cd51958ca03afabbaa9618c60b8280e486f8cc0b0359b839e10f886e7c3948f8", + "src/CelerisLab.egg-info/dependency_links.txt": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "src/CelerisLab.egg-info/requires.txt": "36e1404178e5ea590b2fc04e8ba4d748ec9a82e7693136ccf0dfd204fe265c04", + "src/CelerisLab.egg-info/SOURCES.txt": "f36b29c1b34c4bd6b2acc3ccdd21c24ee5077df7e2a20a652d9fae77eedb8e21", + "src/CelerisLab/simulation.py": "c9d903f53fe356d7af281bea07943de1a62494127fb69848d7053fd46f7dec3e", + "src/CelerisLab/config.py": "2f1bba7515f5bc08cb3a8d140bcafe7fa0689e01b3b06494697bb2956a71530e", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/cuda/compiler_v2.py": "c4cc3ec4445c8d75e6a253dd87963877117a722bc73b9d4811806fc6045d08c1", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/lbm/refinement_stepper.py": "ad57a6a3887b007488b4954b24ff06cd8cde2b12674bdafb97bfda1961ae1da4", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/curved_links.py": "00d9c29d660b41190f32dd737b12f60e10ce4214b6c9a6ab2a63438813faa594", + "src/CelerisLab/lbm/stepper.py": "d2ef351aa2de441ec123deb55ce35603064130222f5490b154d41756b755cd73", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/refinement.py": "554735c5613129eb29f339c6aeeb4f3a3bbc5aba67558be51fbf7c2fb6ac442a", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/refinement.cu": "025c59dc9c207a831e78e1635cb3f14fe60b64c021004a0d66e5d01fda8554b5", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/kernel_v2.ptx": "a599ee30ae66800f4d4220eb79dfed35ff32991661260f01ea58023ef780f0ca", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "7bccf7e7091c012d7a3d4874a881d4d46699021faedd83d125933fbdaa562711", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "e163257b9cbbcdd289bf2a76b5b147ed9512dd04825ddfc9518fb626c8cff00e", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "f9f8242b38e8e0cf8425b75e2b0215bc15363c62eaa0fb43c761b8e0931bfdc9", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/common/checkpoint.py": "b2f960aecd5ac27a3a7130b809ffad4709c44d522edef0359ab952654625410b", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/CONFIG.md": "41cafdbe525366c08aa9d0416ea026ccf0026ba7123b8a9b65f968a80d928e3a", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/body/objects.py": "d1cf7054cc8379a83c39acc66a7c88ae62fa004f110bb0c1def2ee57137401c5", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/manager.py": "6a40be708c71ef6f3b5f5f0aa9c92cfafc51f2ec2a958f99656cccb850986c16", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/body/__init__.py": "91d1155080b3ade83d13c84c39693046df122e4bed5ef583de2df1f9453c1b76", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_j1.py": "51b758a271ff358f931b3140a80082294a67e66c2fec0f8c19319e37f92aadc4", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_j2_slot.py": "b7d2d3aa06fcafc3ac62ed4a50892afbdb7f86e5720ce75a39ce317b6f571dad", + "tests/validation/run_j3_coverage.py": "329869519b7078e854d96241a7aad8ef93f35ac9be83f0be502c3a93523c3b13", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/analyze_j3_saved_frames.py": "438f67dac682b94c4950626f8de4fdcde48c3a4e9ecf8fdf1b0ada4b6e0e781a", + "tests/validation/diagnose_j3_lags.py": "286fcd65b3261667a847b9b26e213d0af92cf459faa6bbd774f78c8479ce31d7", + "tests/validation/run_j3_reservoir.py": "47535bc3569ce68c888d38978bc4f9077fd763a17829c20c081be52bb18a2903", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9", + "tests/validation/multigrid/test_cpu_reference.py": "ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca", + "tests/validation/multigrid/cpu_reference.py": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "tests/validation/multigrid/cpu_reference_v0.2.py": "b6adbad7da625ef6a6b97958ea9625030ed92676d0cada48e061c87bcf7ca8c9", + "tests/validation/multigrid/test_open_corner_negative_control.py": "59a6f8ca80cdd63cb7827fbebf9b4b555c3793f19dd6bca801544ec10b5cbe1b", + "tests/validation/multigrid/test_refinement_followup.py": "6643e26cd877bf0d0f030e974f00a1d1c0f0350cc76d1c8affed3e8ba2f4393b", + "tests/validation/multigrid/local_stress_observable_v1.py": "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456", + "tests/validation/multigrid/test_refinement_gpu.py": "0021a39b3a131347196845cff6507c90c387b46b772fe1319d634178c5e13354", + "tests/validation/multigrid/shear_diagnostic_v0_2.py": "a8b1cf2f7abd00efc4d068bbd27bb2317144a6ca4c545d9b2e0dcf421eadebc6", + "tests/validation/multigrid/test_tron_additions.py": "8e7a6a90b85e64c7326719e7b8bca2f6d34fb4c80690f0685f7e291ab93bd2a4", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt": "0577df5b3f5cb3c7b6e1ef2de71344f8fd3e6d959117487a06cbaf7f2afa3dea", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt": "28ddd1267ca91a772f5a6bfc65d949c9a4ea7dac5c9ba3a0bdb168492810b670", + "tests/validation/multigrid/shear_v0_2_evidence/run_once.py": "6698a2e040c56be949b809387d4518eb0ba82d34cc9d99640da4f8bf3c35c23f", + "tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json": "56fbd0259ff3d4dbd14ace52f64e249a435e9df91732b0e4027def2c344c2e6a", + "tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json": "c2d7ce8d16a0f47baff0788a153353dcf67088da974d9cd3d521b04ecd91ee05", + "tests/validation/multigrid/shear_v0_2_evidence/comparison.json": "41c00372099dd04b6d323785e9eaf4fec09da1753d3d150ffa230800f904142f", + "tests/validation/multigrid/shear_v0_2_evidence/baseline.json": "98a7853341ea732762c7506694e3a867a7259bf110e9e461ea84f741fd9ab829", + "tests/validation/multigrid/shear_v0_2_evidence/manifest.json": "e42aa19e91608164698bea42da88fbbfab8b0f87cc37b27c5baf165453a4fdb0", + "tests/validation/multigrid/shear_v0_2_evidence/README.txt": "4306a34b6896bd6e7a5c2ca71d68e18450359239d0c7ad7a67a4e83e7155959a", + "tests/validation/multigrid/shear_v0_2_evidence/joint_report.md": "1860b8082108c8b8a87998af90cd0b81dce1c04e9f6c67b41e0912f9fef6cc9c", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_horsea.txt": "882f2cfb1dbdf82cce63c011397e7c2e6307bbcfec42a3510648d328cd6ddcfe", + "tests/validation/multigrid/local_stress_v1_evidence/run_once.py": "e629800291ef65ffea8555f66ec80bf15200552540b2a493a677bfb53d0830b3", + "tests/validation/multigrid/local_stress_v1_evidence/source_manifest.json": "d2cf90b73458f493c665c9a281d06aef0c190cf0d143639fb77ab838c78f020c", + "tests/validation/multigrid/local_stress_v1_evidence/results_horsea.json": "f17b4644d19eb75d55deb7021ab679cb9e7922a2b46f1cacf8b6da6bfb9a2690", + "tests/validation/multigrid/local_stress_v1_evidence/comparison.json": "be236671a501c31c06f7e266f6e0c0c2a89aede321a483452050ff37bf84c84a", + "tests/validation/multigrid/local_stress_v1_evidence/baseline.json": "64f6541447afbd15b1b15d802ad6f1b5042aaf84e7d4d2414e4ed4c52cf70507", + "tests/validation/multigrid/local_stress_v1_evidence/manifest.json": "3a9fa8c7d691c1b8c24f05940eb724d30b890dd8ed636551068d2633d7db2f70", + "tests/validation/multigrid/local_stress_v1_evidence/README.txt": "4f62314876047ee437bb9ecbf84798d2a9f6e85f6a3aef260277b85bcdb35fae", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_local_stress_observable_v1.txt": "6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4", + "tests/validation/multigrid/local_stress_v1_evidence/TABLE_local_stress_observable_v1.md": "d8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt": "457f1d2173496554c87ca6e61df518c0b8f1e0a28cdfd94b94ebbb61bc459d70", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt": "73e4ef01138842981daaa534390f1463839e63833c11f4e8872f94f8eaadc717", + "tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json": "914389afc39752bcd4132aa21fc8d5cbcf0ca75b1efd6a49becab15c2fa3361b", + "tests/validation/multigrid/cpuref_0_3_evidence/baseline.json": "0daaccee41cabeb17a00e2405e2c7fd0b80d36f2d01778eb39c9fd22b13d2d47", + "tests/validation/multigrid/cpuref_0_3_evidence/manifest.json": "2850ecaf2e19d010ba35eb54162371d82cc1a092831e08a03b6adf75a614988b", + "tests/validation/multigrid/cpuref_0_3_evidence/README.txt": "1947ee0232b88b3cc2c506d0b0af5ba051ecc94aa8f7f09228ef3939cc95919b", + "tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md": "065947e15b2242bce7d3eb05a3acdbb59939c621dcd5d31540ad4a1bd4416818", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/unit/test_surface_actuation.py": "89be6f54c4eba6c2bdca0d287a5b9fa6db143de2bcd9a671d4fb8445921303ed", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_planar_velocity.py": "b656da0880b4234b1db805544edbe0d2473cbcc7c2c869c71d8251337f62a982", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_reservoir.py": "e718c78a53c3941aba7feb8ae4e8bb0b1726c1145de84febf91220c1917991c9", + "tests/unit/test_refinement.py": "90751142f920f1c5e988577a45afa94871a6617009cdc78323a87fc7795f4634", + "tests/unit/test_slot_velocity.py": "6a9494de9a32c350389ccbed58af48951f6b25a21a258537d2e8b73eb67cb11d", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/cpp/reservoir.cpp": "c3eacaf0271400eb45ad559b571a8f7faa2a809d5f1857ffeb5592addce2cd0c", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/slot_profile.cpp": "31ac58ccab175bf79fa59fc46d4c0842df18ab0a5e5916be84760d9da2b75788", + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/test_surface_actuation_gpu.py": "3c2b4dda70db1d6493ecd92bd9b0dad6d8b438cdf6dca46410018217f8beb4da", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C4_deceit_f1p5.json": "11dab8440d8c4f385061d2536403f4313c6f026b4e0b7672681327a9f4f37ebb", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C6_deceit_f2.json": "e0c4e8bcc55da5dc8de1e2fe88029aa3e67453734faa44451f5a6dfa9131557f", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C6_deceit_f2.png": "e0a66708ce2a29c4c6b854d2596b3ffca181dc6e35d99cc94e08af3e2d8c024e", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C3_deceit_multi.json": "24c8e433aab6d207dab67546c4079868c4244c2948c32c94cd08e4f331991807", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C0_no_ctrl.json": "cf3af733a08f081cc5f879e8da79d7c60104099f4452af5b2a4a96c0e6bd5889", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C5_deceit_multi_f1p5.json": "a4cb4ff4481b39b9ee61b1d7209416237a7fe86b22c5068d713ccec9c3f7afe4", + "tests/output/exp_ctrl_matrix_streak_ny300/manifest.json": "d8a20dacc92321d98354684976f771a9ca8989fc63ddcd78e15c7768c6617671", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C3_deceit_multi.png": "c6fed617cc6ffe6677157a9b58811d5f4613725eb98a5aec830fd07dc1aac38e", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C2_deceit.json": "7526a6b20a158461b85b1a64070b46c2b21be1e01c5ee025e6746fcf47ea3397", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C1_stealth.json": "63d34a0ab33e9fa8fe7311363efbd1b2875691f5b4958bb645b8c7ac38f1ad6b", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C0_no_ctrl.png": "0cfd7ce8f9d743bf22a7a694b4e5a3616557cb8f1db2f4ddf49cc4bef96efef2", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C4_deceit_f1p5.png": "4dcfc186928dcb83d28e9eb4cb2ecb4b163eb6f121d57036b4c05ab162be0951", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C1_stealth.png": "5e3cbbefda06fcef243d7d06d74a473972350cfa4ae88bdfdb349dce13943151", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C2_deceit.png": "22f1db77499bdbd1b3cd35f5b58b1a884dd94a86fdcfef07abd4157e6aaf8d19", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C5_deceit_multi_f1p5.png": "823e475cc901af3d6f4d0c56eb07822b3e73a2b9d0aa23e20e3741023fe90092", + "tests/output/kan99b_validation_esopull/summary_runs.json": "fe3294a953580204319fb1143434e15096d8455b6073100dfe0d5491b76af394", + "tests/output/kan99b_validation_esopull/summary_runs.csv": "1a44bb27ee0a7fe0270905248c37364834248cdc8710bd68142a6a79bbdad82b", + "tests/output/kan99b_validation_esopull/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "9fbc7d507c129ed85c68a9a313e3eb3431470d091bd7723e63f8afd8a3d2b737", + "tests/output/kan99b_validation_esopull/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "8faac43f42d6e0c70085c6e616bfff4df8de897e315fc0d2b4aa8bd635c3fa05", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C4_deceit_f1p5.json": "b613ae55fcfbd45a1a922d6d529e5274ba9d2987fdf5620fe866b889b931e48c", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C6_deceit_f2.json": "dbf54f9a183072547b22fa14334f0167e6eefb21c1208c4e8584bc196545a399", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C3_deceit_multi.json": "2100c6cc5c358a249804ce8f6f98531f3bc868e27af6d21a9d441b1b6a9e479e", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C0_no_ctrl.json": "a8b4697b7c0caeb958f80e282e32d673deac8c914008d64e6b38f7883eacc57e", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C6_deceit_f2.h5": "8d0c28566d2230b422691b738cc453705496bd150be038a576c0c0fba218fc1f", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C5_deceit_multi_f1p5.h5": "608767ca11d104fa4506b57204a0c8dbd739688224ebd924fe517ce9e21db823", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C1_stealth.h5": "a83c988cc8b1173a7b2f13b132ed7243e98304dccab2965aa16cf4d32f8df007", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C5_deceit_multi_f1p5.json": "6f6b9300782178e0ac9308a677bd9cb1565a383a78dff4cd52dea0bd464db31d", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C6_deceit_f2.png": "21bbe2dac1ab06ca1b172ec62d00daa7bcd65d99adac0ed03c5e30bed59e871a", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C5_deceit_multi_f1p5.png": "602a6586277699968b4cb167b134c8c406577038af088aa70baff682691398c4", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C1_stealth.png": "c1e1d04f266deac5fb2815a8283da80f9139ffaccbec2219d98544296bf3152c", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C4_deceit_f1p5.png": "96dee924e89b90091192a8d7b43321f109a5491511b8a83da77cfc611ae0d93b", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C2_deceit.h5": "aa5800a0cd594eeb7cf5449d6469d55e0c9033ced0ee0a3b5d59152e68c7e263", + "tests/output/exp_ctrl_matrix_vort_nx1500/manifest.json": "5d28f0f5428d7f0341e20d5d1f19c17bbc6f0f9b2a441d3c95f5422f3f2b4bd4", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C2_deceit.png": "1dcb6fb959f944d7ad89c4abaaef4d1fd4a77db8901804530e86fb336b883eb5", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C2_deceit.json": "b88ff5049aef59876b349d105f1c3467c17c9ba9022a48a77a6984f20da34345", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C1_stealth.json": "515689cbfaa30a9e39d9907939ee194a4836b644a5e9124586e6b7221d2b394b", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C3_deceit_multi.png": "d69694a1a1b2f2ea0adc7b74b7526504e2ad0b5d6317bac9b3159b2e7e88cf90", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C0_no_ctrl.h5": "3a858d6be0a946e1d26bbfa192c2f0ca3910c0f140b42575ec9d9529dd99155a", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C4_deceit_f1p5.h5": "660e4619ea530dcd18c3afb2e7fa22cafd9cdba1be7888e31ab5b76a0902d2fc", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C0_no_ctrl.png": "6d4d3934f1c8b20c2a5c742ae080a7143f0c139741966adf009a227c27e9bb1f", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C3_deceit_multi.h5": "1e72126f11b2995437cecb8cc0eeffb8807efbfa43d8f346f28711fea98ddc90", + "tests/output/kan99b_validation_ref/summary_runs.json": "449316c30585a8de9997538dead5d4e35a59bf00a2ac22d01b101ab600a4bc06", + "tests/output/kan99b_validation_ref/summary_runs.csv": "e8b9620f3772e5e421026103e456e6e844a91292f40affb96174c9dbde9b6e4e", + "tests/output/kan99b_validation_ref/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "4391f41d17ebeea1092f13b901923ced4ee2a1c5b346b79ef791d692847286b5", + "tests/output/kan99b_validation_ref/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "105c6eb21f1943d9d935246eab1602ff2016c415a139e24fee2793e88e006ead", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C4_deceit_f1p5.json": "0085a679a423621003eea81d4ac83bfe2edef2879eed7809d2a3675a212f791a", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C6_deceit_f2.json": "e820cf73f0e90bf93c34b24416e7692a6c2e51352ccf490fa6714d0812331ca2", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C3_deceit_multi.json": "571370c74ad9af589f3dc214669bff3d857efe6fc4fa13815b5d793d12b53770", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C0_no_ctrl.json": "ec5b89961033d8ebe0d66ce1ec7940dc2faf98130c38319bc9984ef654e60b50", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C6_deceit_f2.h5": "2792be74d8564fa29fd0636fc8493630fba2779c165b44330197095b3e296b18", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C5_deceit_multi_f1p5.h5": "2c64ee6c7a4ea2c42ed8f3d274402bec62de0e02ea0340e16022f0cdc92af724", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C1_stealth.h5": "100727d94fe6c2e46d7807eed0442555bdd1e26ec9b04b4c457171a2bbba3255", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C5_deceit_multi_f1p5.json": "f86166f121b4eeb6d74d8176c9265e7a3ccfe2540d040f554b6f96e6a6222c16", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C6_deceit_f2.png": "fef4de0e3ac8203742f35c16a02445b19c3f556b11f73abd5d8e3ca05ca33d78", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C5_deceit_multi_f1p5.png": "9136448e6d7565ca5af3666f9cf6e154342d8a3475076abfdbdd1ff9faec34f3", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C1_stealth.png": "544537a9c500a05937fd3be17c25e7d887461d9b83a15564f9ab7063208f40f6", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C4_deceit_f1p5.png": "51e7056db99dd653affbe913d52fa41df6ec0db921109384e3c679bda06b5a83", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C2_deceit.h5": "39d6c162085acae1612650da37d2314757715931e83a854e08bb01407d0f8efc", + "tests/output/exp_ctrl_matrix_vort_ny300/manifest.json": "05fbc2e7bbad4267a38e1094bbdd6bee6ad270412bdb5e92b0dfc9fa56969517", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C2_deceit.png": "07fc5817eba30371272b87ee2e023c0a1144077d1bef77efb2fd5dc284badcb7", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C2_deceit.json": "b1fcf76039c91a9080b830352dee2e95316d754b968cc27a8f68c51527661e76", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C1_stealth.json": "b78851637b9b7b93070524a2933cae1dab6d682f8894579b2849c64921e6c29e", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C3_deceit_multi.png": "2658f0747ed7287f7912fe15cc58a086e01ba284277cb98689bac01ecb6ec12b", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C0_no_ctrl.h5": "57f73f5f8dc4b32b156bc82300b1efd1e4eddadd9b8dc51cb7e6b41fa5c966bd", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C4_deceit_f1p5.h5": "2864b9dd086709ee8b8c3f262118a5130b0d40c86838f3ca0deab5bb898dafa8", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C0_no_ctrl.png": "2c7f3a8be2ee540afdfb66299e43a65583434bee84bde590124524a82868c900", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C3_deceit_multi.h5": "39e0d9b032dfff8cf057b410a98973729285e7d03e89f9a6a002aaf7de3d7519", + "tests/output/stealth_sweep_fix_check/summary_stealth_s150_w0.02709.json": "8b1032e13975bb05c6a810fde175c8da51bacdb3dc745fd11c1049ca63bbf136", + "tests/output/stealth_sweep_fix_check/summary_stealth_s050_w0.00903.json": "fa7da24d5dab9fd3a3c2dea6b50d0224c7a99cd9141796e137304a6040b1ac8a", + "tests/output/stealth_sweep_fix_check/streakline_stealth_s050_w0.00903.png": "640928f7eb159e7caea32036123f86c281723d083cca46839ba86bce8361ada7", + "tests/output/stealth_sweep_fix_check/state_stealth_s050_w0.00903.h5": "187ac365f9f7370c888c4c65570c47e42465b2fccd432056c176528d45cf0c2f", + "tests/output/stealth_sweep_fix_check/manifest.json": "83a3f12a942fb644e470bd07a72f24921f2147d7df429110268c5c96a9953d1a", + "tests/output/stealth_sweep_fix_check/state_stealth_s150_w0.02709.h5": "e057e9db26b2546c0704e2c959cc7d2aac91e6a49b4c7ee75a409597a5db8716", + "tests/output/stealth_sweep_fix_check/vorticity_stealth_s150_w0.02709.png": "d2d202088624cf30868228f9c913ee30e1b386aaa2c22b0ea89be43dedc0712d", + "tests/output/stealth_sweep_fix_check/streakline_stealth_s150_w0.02709.png": "0edc7caa9caaffb754490bf1f6ac7ad7180e45a991439a3f4f83ed949a082a1a", + "tests/output/stealth_sweep_fix_check/vorticity_stealth_s050_w0.00903.png": "4088359b17c46ed4d7c8401d244808fe67723273b1d16d0671b69f9478c68c1a", + "tests/output/final_validation_round/validation_summary_report.md": "881cb7052e5a555afc87168a37268ee66e8e3fba172533706e858d996fabc7b9", + "tests/output/final_validation_round/sah04_mixed/s2_d48.json": "83c6c01201d90aae5c49e73ebeca88d1c7ded6cc83c13f4892a9188e6289483f", + "tests/output/final_validation_round/sah04_mixed/s4_reg_d96.json": "b32f03e6b347fc709cea2ecd488df0f85849c733bf6a4b9cf65ea69401c93a1d", + "tests/output/final_validation_round/sah04_mixed/s1_d48.json": "120e8e878f5712dc89b7cf78c7f8d0e3368d34ad5ef7494977e083b188a54c18", + "tests/output/final_validation_round/sah04_mixed/s3_stablecfg.json": "b38a3d197a188e65c163d974113af18f332b3abed083e2654e998d9980f6be9f", + "tests/output/final_validation_round/sah04_mixed/vorticity/s3_mrt_laststep.png": "dc96fcd05d458684cfb40d4cb741172213083e2f2665e2bae7e1f0267bb3575d", + "tests/output/final_validation_round/sah04_mixed/vorticity/s1_mrt_laststep.png": "73a3580ba3c7fe6ffeee4676a9a51b5bf678d6fb523456a61e185598389ea1e1", + "tests/output/final_validation_round/sah04_mixed/vorticity/s4_mrt_laststep.png": "57f2a82761f2de1a9fc2b78ee86159ca542c966494b9c704deb451da857da778", + "tests/output/final_validation_round/sah04_mixed/vorticity/s2_mrt_laststep.png": "786f492b96ed932254b5452e2d06ff088727f2d88c7e7c7b47d386eddfe07862", + "tests/output/final_validation_round/kan99b/full_summary_runs.json": "8c4a11cbf555e08a66698439170b850c57d537d8e75e4dd75beb767bbf7e38cf", + "tests/output/final_validation_round/kan99b/summary_runs.csv": "3fa92fdd3114f0472de44bc03006af1d4b694dfc69b06704c1667cd3627b6dab", + "tests/output/final_validation_round/kan99b/force_csv/k5_baseline_domM_re160_a2p000_regularized_mrt.csv": "de05e9699146f2adffc9d7c9991f9e48396aacd142afc3c08b2b64727c83c69a", + "tests/output/final_validation_round/kan99b/force_csv/k3_baseline_domM_re60_a1p600_regularized_mrt.csv": "53cd0dc47328b7b370eced1130508655e6815a29b727bf1fe4e4e125e4918905", + "tests/output/final_validation_round/kan99b/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "4cac1ccfdb7451de3e26d921a6406cc55d1d4630e10ec0d7ec9350a4abd49404", + "tests/output/final_validation_round/kan99b/force_csv/k4_baseline_domM_re100_a2p000_regularized_mrt.csv": "392c98de52011ddb344a5761c4520e870f4e49bbba3e144e5a02818ba2f9250b", + "tests/output/final_validation_round/kan99b/force_csv/k1_baseline_domM_re100_a0p500_regularized_mrt.csv": "9e83c5175aec644c0b97c081e610deefa731b87aef04da6297abf662a71c0702", + "tests/output/final_validation_round/kan99b/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "55b071f278e153aa353aa2bef85f0bce35b910a7b08103032023fe3a28169b89", + "tests/output/final_validation_round/kan99b/vorticity/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.png": "b91b332e7deb787975d3f08fa3325facd4a972b536694fcda52e6c01943c42cb", + "tests/output/final_validation_round/kan99b/vorticity/k1_baseline_domM_re100_a0p500_regularized_mrt.png": "6e7c3f6567c0ff0d00d75da8373031f5ba2a17a624cb8c5d5d6ae4f8749c33c0", + "tests/output/final_validation_round/kan99b/vorticity/k5_baseline_domM_re160_a2p000_regularized_mrt.png": "c4d232df2e6f7466acca711191d976aa9411ec0ade81572b531463f42a7d633a", + "tests/output/final_validation_round/kan99b/vorticity/k3_baseline_domM_re60_a1p600_regularized_mrt.png": "b2314c60491d20933422e1697998555dec2436d39545c71f990e9906884685b2", + "tests/output/final_validation_round/kan99b/vorticity/k2_baseline_domM_re100_a1p000_regularized_mrt.png": "2b2797b8f53170d04d1a70d1cdf898f7e41b3a76b9f3c1f276dfec952520ab04", + "tests/output/final_validation_round/kan99b/vorticity/k4_baseline_domM_re100_a2p000_regularized_mrt.png": "8135f470404fe11ac97968fa580ee35232e90dcace3c6ad94de17ef7aace24d6", + "tests/output/kan99b_validation/summary_runs.json": "d7239aac64884202558741074f2d644ade9e2365d94d0b7556fba68dac94868d", + "tests/output/kan99b_validation/summary_runs.csv": "c44da69563d58b917291a9fd402d1f57055861bffab6f9e32d7db91297428d45", + "tests/output/kan99b_validation/force_csv/k5_baseline_domM_re160_a2p000_regularized_mrt.csv": "27b64460923d235d34b760f2a2371ad01611a70e38edb03d6fd6a2fe7a7de6e0", + "tests/output/kan99b_validation/force_csv/k3_baseline_domM_re60_a1p600_regularized_mrt.csv": "76ff52f4494b7ef7650c05968732a8caaba94d2b151234c02cf624f5b3a712ab", + "tests/output/kan99b_validation/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "28a83436ca8bdad38865ba21ce1bda679562a5ae1cfc6ee8fc6e86ff760ec66d", + "tests/output/kan99b_validation/force_csv/k4_baseline_domM_re100_a2p000_regularized_mrt.csv": "823ae04870fd951879024a18169ac5cba8db4b3201726f6a00f320f1958d04c6", + "tests/output/kan99b_validation/force_csv/k1_baseline_domM_re100_a0p500_regularized_mrt.csv": "a591daf2cdecd6ac3689fa2a2aba917b23053ad26e3ef1f635c81aecc451475f", + "tests/output/kan99b_validation/force_csv/k0_baseline_domM_re100_a0p000_regularized_mrt.csv": "e95c27c646c0c9baf8f455f876c115c8dbdb23cef9d9d550f455098bf0c03b55", + "tests/output/kan99b_validation/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "3c2ea79a0e27f561215febee2e165d24b3617a648bf908981c068ba59d549c51", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s125_w0.02257.png": "a892f18c74fe13efd839bfd5068097ca0ae07acebf6c06eed89e1b867e41fcb2", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s125_w0.02257.json": "7e542f59746429022ce1794854c6fb36e8ac658dd0aea3bc1140a45e83a3f1c9", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s100_w0.01806.json": "b76216e0fbee00ef754edbafe5790a99ce7d53638af629947ddd9615598e4c08", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s150_w0.02709.json": "42cb241d9cfb01308ce28e129756b6cb3fe2a8e9679518da84bcb8b607fe92ac", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s075_w0.01354.h5": "558be308dbf334832bc1d29419ba5be142969117a11b124864f6b221c8fee509", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s050_w0.00903.json": "53b579811a0b651ba7cc466c230c115b9f88486c6675e0465d0715d3377a75cd", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s075_w0.01354.png": "9f4a7d89b2471becaf31e84c14402441c5fd96fc7190cea5e8a9fdd06ee62002", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s050_w0.00903.png": "5f18f56b0ff2af3350216b65540a2bc664c569520624cfc6cc2439a3c5369560", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s100_w0.01806.h5": "30776f333959e0e9eb5ca96b269e6a8052c5b94941a4e3b36d8a6af8076920ce", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s075_w0.01354.png": "b5393474d99191e88dafea4144b6a8eccfbdf75107125ce4b05383b17007d06a", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s125_w0.02257.h5": "4ed9d8587f75ad4625ec5501fa99fb733cde037180ac53f92a210ffbb08375de", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s075_w0.01354.json": "ff1c1cc649e589b5425787493c2b0d04b6c39b43043b1968d65509cb0a426e82", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s050_w0.00903.h5": "4de51584b24095f8cf4480b8941593a5f913332f9396061ed077c9d49eb2ee11", + "tests/output/stealth_steady_sweep_nx1500/manifest.json": "0dfbb2c1b5bf9093fef169e4dc6319edb5c87a1e967e8d558613e2c64a2ca734", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s100_w0.01806.png": "60824cbdf21170cb4ffd8af0a49e8522c2d79cb2694690ab67995ee973265efa", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s150_w0.02709.h5": "b22d54a05cbd3138a1fe585a825246989fcff7c00f51aa9312a4185d963db933", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s125_w0.02257.png": "c1e1d04f266deac5fb2815a8283da80f9139ffaccbec2219d98544296bf3152c", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s150_w0.02709.png": "bcf098083a73798dc3906807218058cc571435a010234a5a350b585ba9915c78", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s150_w0.02709.png": "3bac21cc75a01429399cec308d6bf5fc8918917def1bf5d7fec1cb6003390a41", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s050_w0.00903.png": "a675f41df763f0a1ac0a06386315806b24f2571f5dabc8693fcd871a13ed22ba", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s100_w0.01806.png": "92515588596596cc1d691c643fa48cf828492c2eaed96355dcec58109de4b5aa", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C4_deceit_f1p5.json": "0393661f08b748428fc366eeecec3b34b9d9a013aa6b151a15b33c7e3c0e1818", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step080000.png": "bffef412087e426b614d8c05e59bd7580ee49bb77319279ddc4c1bf825678c49", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C6_deceit_f2.json": "de067f01ef5c11249d67bbe5e02db6f2b4c5590214de02609bca115edf8dee64", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2.png": "846badbae81b75f765d89e5a7c4f88aeb5d57f2387511e4f2f84c72a192ea9f2", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C3_deceit_multi.json": "eb21d1c69e51f01c1a6be1ce59fe86763089ea5aa667b8872d0186af035b24b2", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C0_no_ctrl.json": "780a0d329cb86990a17a088f49084410abb1fad24f659255918e5ddda6b3dabd", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step080000.png": "ff7836b8229d9a5dd3900f499fe3e7f0c73a61c7109b6e6e79b11a0fb459bb63", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step040000.png": "f2b56a7e30bcc363ed69fc19705403181ac5de90800eef03039a389a65869e30", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C5_deceit_multi_f1p5.json": "261b698723f19526a447679a2be8666c8d0cbf6df81b0c9de6d051960d77308b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step060000.png": "0697e0ae06a01154afdcf00330ba870bd8f36d21561a33846ad7ba63fb731179", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step040000.png": "1de3d7f54e91c5d5850f4358d1872e16fefb36d32a1b6293facb54524e32315c", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step100000.png": "91f0bf6ed3e854f7f83623a3f19bb12c83b4aac239e3eaa849fbe50e7baddff5", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step080000.png": "303c1d2d4c49b4a7495365c8cb2bcbfe9bdda7cbc0a7c7dd1f01e8aa62b3573b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step040000.png": "dd5945458a35d81b31a0e2f3a693a5023d6960474263e7dc86c22367a56cc13c", + "tests/output/exp_ctrl_matrix_streak_nx1500/manifest.json": "0d97efed02f775c25dd8a2d7439f310b715d142ff8d603c9da6ddab197570ce8", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi.png": "69022ef9175acf910374ec73848640548b85fc7beb7e6950843f52c10ed7d61b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step060000.png": "16ba30b8cca0d49e6b76be0bb4f0d14bbf276ca6ec47ebf56907c7534e15c4e0", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step100000.png": "8548b6dff635cf9c92e2baa119866277e3994366eb31aeb30641b03b3d80ee9f", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step060000.png": "56100f169c3e378b84bfc89c5477d2c142ca043d9f28eaa70bc5448c49c7f4d5", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C2_deceit.json": "587cd42d81b1325bbc766d9ca6c1fd3d076bf5a772efd45d056c2c4e3db742b6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step060000.png": "e43e95e7126de8cb857154353f161914c225f8c9f17eb44b1ff744249368a4d5", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step080000.png": "676d21ffc7180d34a6725a8bf49503ce59f48d65500450c3975d01e65162899e", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C1_stealth.json": "73040aeb7ef07c538d4687b101c599210e660202eb1c2c3e0894dfbde682d137", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step100000.png": "e22171ef86979c4398c45ada9cd0f5e4c4e5b034f271df5fa8ac9a762a8554cd", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step100000.png": "0d73042be73b0de8d0a591e56c01e3c802483aa22a97f27e0300cba82c708066", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step040000.png": "a6e95fd5c24052db20d5ece200edcfe5e261c00950ca964c89df9f7335579634", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl.png": "d74061347ac3505fad878e330f6cb04d23bdb13082bfa1afa2fda0872f80f388", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5.png": "3156400eb59fae0638556c2711345f12ca49d951ff09e6464a2271249409a6a7", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step100000.png": "d69e34c82da98b28eef7f1af29f5d11f400e90f628049f6f5f4a3a419a4a4340", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step040000.png": "ce1f372b517dd52fc3f3eb066145e04ab6841e43b67cb0f6bfbdb42a6738eca6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step100000.png": "07cce6c99dfa7b56dd4d3aa452873a676a5a00e9f046555fa9dda30f16dde488", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth.png": "a892f18c74fe13efd839bfd5068097ca0ae07acebf6c06eed89e1b867e41fcb2", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step060000.png": "80b63bd309ef11a3ebb2f1ef301b49cd8f09bcc25562097d382f859306c9fe6d", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit.png": "1edb30dc35e29ad991695353f4b84e0507792935ec75ae9a7904ebdc007a471a", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step060000.png": "93ab8e09e58a64c5dd2eedfdafd27cf4dcfe4e8fae1af64ac71eac509e6ffdaf", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step060000.png": "f773bdef1c8d718d01b6d6d7735182c04564dd8b5692b359e1dd2f721c774b1a", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step080000.png": "5570fe6a25c92e5c6aa9a5129aa1797ba8ee7418170c7a351f9e35b931a366c7", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step080000.png": "32d3e700286eb4b46b3bcf757669481affd6ff6b53792d730b5a21da92cc57d6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step100000.png": "5acfe36694bb4e628309ff8ae1e839ca0a1f684607165bbc2883436b85208bf4", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step040000.png": "2c6f2b8d61cc2aaa63631eb6c98d3de26dcef705fa6b66c823ce7b9eef50e00c", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5.png": "adbefd0021e2c981d026718de8c63594b9c8e5971901d1dc40835cb69d95b93e", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step080000.png": "ce8b18e4dd976ed590fcc44075f3fb058ca7b23e15a1624726c181c4dd0c11da", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step040000.png": "168d21ef24ae198fbfd642f8ca315faad4c7bff2e2c09e16ff7c97e7360ea883", + "tests/output/screening/screening_summary.csv": "3a23c4f2bd54ed5ee9bdb5b6dcdc58eed04519fcf1b4790e0abd1e6c5288fb96", + "tests/output/screening/screening_summary.json": "caf64530f152b6b8ccec82a3c7ba44fa0b3aeb0e0221ef6121857bf62c031ecd", + "tests/output/screening/B1/force_hist.csv": "854bfebe63fb2d140823fc5dbc434a70c317c6ab0bedbd5220cec45665b524c8", + "tests/output/screening/B1/summary.json": "35b4d958bc0fdd6ab6c9c0d1ed50e85d89b04f7be3e34632d6c3ea95b89acb47", + "tests/output/screening/custom/force_hist.csv": "06da0f67b564d5c114332ef3b39167b1ba222fc50045f95303c75c14755b51d5", + "tests/output/screening/custom/summary.json": "1701ed75e5e9ca16127f495ccff1d87de245d81df581e94114c8fca6fbbe77fd", + "tests/output/screening/MR1/force_hist.csv": "f70fbfa748fd0709e225523aaaa72b761db56df4f1d48f105384b94cbc44b31f", + "tests/output/screening/MR1/summary.json": "3d9a0fc19710820e3634ab2143b913b282beb159336567ab9ebf3de2092947bd", + "tests/output/screening/MR2/force_hist.csv": "c947b3c16b8e8f8f85a203cea8cd912bdfc07f96985c1c24a470b644170195ea", + "tests/output/screening/MR2/summary.json": "d2344e9e2517ec76c8b56bfbe3763dd465e24721856992401c57c414763481bb", + "tests/output/screening/MR3/force_hist.csv": "7df1536c83ee466b7195d9c521d3d3b1309acaf142f2855bba51fb279c7612e4", + "tests/output/screening/MR3/summary.json": "ad188eb1b271a6cd0fb4025b456eccac5450776f60db58466f804fc5a0e0ec61", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "examples/fixed_periodic_patch.py": "6732e440a47c237ea341703f2d80717903d34c68fd061bdc97189e5d877be46c", + "examples/fixed_patch_jet.py": "9d58ac3f32478603e8e798efcdaf6ea16e9cc92346eb4780a60e438d331abced" + } +} diff --git a/research/fine_surface_20261014/cpu_device_guard_cmd.txt b/research/fine_surface_20261014/cpu_device_guard_cmd.txt new file mode 100644 index 0000000..06e0f35 --- /dev/null +++ b/research/fine_surface_20261014/cpu_device_guard_cmd.txt @@ -0,0 +1 @@ +PYTHONPATH=/home/frank14f/CelerisLab/src CUDA_VISIBLE_DEVICES='' /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -m pytest tests/validation/multigrid/test_fine_surface_gpu.py::test_missing_surface_device_buffer_rejects_before_launch -q diff --git a/research/fine_surface_20261014/cpu_device_guard_exit.txt b/research/fine_surface_20261014/cpu_device_guard_exit.txt new file mode 100644 index 0000000..573541a --- /dev/null +++ b/research/fine_surface_20261014/cpu_device_guard_exit.txt @@ -0,0 +1 @@ +0 diff --git a/research/fine_surface_20261014/cpu_device_guard_stdout.txt b/research/fine_surface_20261014/cpu_device_guard_stdout.txt new file mode 100644 index 0000000..424d584 --- /dev/null +++ b/research/fine_surface_20261014/cpu_device_guard_stdout.txt @@ -0,0 +1,2 @@ +.. [100%] +2 passed in 0.09s diff --git a/research/fine_surface_20261014/cpu_existing_runs.json b/research/fine_surface_20261014/cpu_existing_runs.json new file mode 100644 index 0000000..3179536 --- /dev/null +++ b/research/fine_surface_20261014/cpu_existing_runs.json @@ -0,0 +1,30 @@ +[ + { + "name": "cpu_maps", + "command": [ + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-m", + "pytest", + "-q", + "-p", + "no:cacheprovider", + "tests/unit/test_refinement.py" + ], + "exit_code": 0, + "seconds": 1.8799934879643843 + }, + { + "name": "cpu_shared_kernel", + "command": [ + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-m", + "pytest", + "-q", + "-p", + "no:cacheprovider", + "tests/unit/test_numerical_operators.py::test_actual_semantic_and_auxiliary_kernels[0-0-0]" + ], + "exit_code": 0, + "seconds": 2.1572919980389997 + } +] diff --git a/research/fine_surface_20261014/cpu_final_run.json b/research/fine_surface_20261014/cpu_final_run.json new file mode 100644 index 0000000..523fadb --- /dev/null +++ b/research/fine_surface_20261014/cpu_final_run.json @@ -0,0 +1,14 @@ +{ + "command": [ + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-m", + "pytest", + "-q", + "-p", + "no:cacheprovider", + "tests/unit/test_fine_surface.py" + ], + "exit_code": 0, + "seconds": 1.947228622972034, + "note": "Final CPU recheck after preflight aperture inputs were aligned with packed FP32 lever arms. No kernel/math or uploaded-array changes." +} diff --git a/research/fine_surface_20261014/cpu_final_stdout.txt b/research/fine_surface_20261014/cpu_final_stdout.txt new file mode 100644 index 0000000..9cfe73d --- /dev/null +++ b/research/fine_surface_20261014/cpu_final_stdout.txt @@ -0,0 +1,2 @@ +............... [100%] +15 passed in 0.59s diff --git a/research/fine_surface_20261014/cpu_lifecycle_run.json b/research/fine_surface_20261014/cpu_lifecycle_run.json new file mode 100644 index 0000000..5b403b9 --- /dev/null +++ b/research/fine_surface_20261014/cpu_lifecycle_run.json @@ -0,0 +1,14 @@ +{ + "command": [ + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-m", + "pytest", + "-q", + "-p", + "no:cacheprovider", + "tests/validation/multigrid/test_refinement_followup.py::FaultGuardsCPU", + "tests/validation/multigrid/test_refinement_gpu.py::CoupledGPU::test_cleanup_attempts_every_allocation" + ], + "exit_code": 0, + "seconds": 1.620646678027697 +} diff --git a/research/fine_surface_20261014/cpu_lifecycle_stdout.txt b/research/fine_surface_20261014/cpu_lifecycle_stdout.txt new file mode 100644 index 0000000..3c5c49b --- /dev/null +++ b/research/fine_surface_20261014/cpu_lifecycle_stdout.txt @@ -0,0 +1,2 @@ +..... [100%] +5 passed, 5 subtests passed in 0.25s diff --git a/research/fine_surface_20261014/cpu_maps_stdout.txt b/research/fine_surface_20261014/cpu_maps_stdout.txt new file mode 100644 index 0000000..71dd87f --- /dev/null +++ b/research/fine_surface_20261014/cpu_maps_stdout.txt @@ -0,0 +1,2 @@ +......... [100%] +9 passed, 23 subtests passed in 0.12s diff --git a/research/fine_surface_20261014/cpu_preallocation_run.json b/research/fine_surface_20261014/cpu_preallocation_run.json new file mode 100644 index 0000000..fa6e96d --- /dev/null +++ b/research/fine_surface_20261014/cpu_preallocation_run.json @@ -0,0 +1,14 @@ +{ + "command": [ + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-m", + "pytest", + "-q", + "-p", + "no:cacheprovider", + "tests/validation/multigrid/test_fine_surface_gpu.py::test_cross_interface_donor_rejects_before_cuda" + ], + "exit_code": 0, + "seconds": 1.665132363094017, + "CUDA_VISIBLE_DEVICES": "" +} diff --git a/research/fine_surface_20261014/cpu_preallocation_stdout.txt b/research/fine_surface_20261014/cpu_preallocation_stdout.txt new file mode 100644 index 0000000..5d64357 --- /dev/null +++ b/research/fine_surface_20261014/cpu_preallocation_stdout.txt @@ -0,0 +1,2 @@ +. [100%] +1 passed in 0.09s diff --git a/research/fine_surface_20261014/cpu_shared_kernel_stdout.txt b/research/fine_surface_20261014/cpu_shared_kernel_stdout.txt new file mode 100644 index 0000000..8a0c046 --- /dev/null +++ b/research/fine_surface_20261014/cpu_shared_kernel_stdout.txt @@ -0,0 +1,2 @@ +. [100%] +1 passed in 0.63s diff --git a/research/fine_surface_20261014/cpu_surface_command.txt b/research/fine_surface_20261014/cpu_surface_command.txt new file mode 100644 index 0000000..2a5ff31 --- /dev/null +++ b/research/fine_surface_20261014/cpu_surface_command.txt @@ -0,0 +1 @@ +PYTHONPATH=src /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -m pytest tests/unit/test_fine_surface.py -q diff --git a/research/fine_surface_20261014/cpu_surface_exit.txt b/research/fine_surface_20261014/cpu_surface_exit.txt new file mode 100644 index 0000000..573541a --- /dev/null +++ b/research/fine_surface_20261014/cpu_surface_exit.txt @@ -0,0 +1 @@ +0 diff --git a/research/fine_surface_20261014/cpu_surface_projection_command.txt b/research/fine_surface_20261014/cpu_surface_projection_command.txt new file mode 100644 index 0000000..70b7f5c --- /dev/null +++ b/research/fine_surface_20261014/cpu_surface_projection_command.txt @@ -0,0 +1 @@ +PYTHONPATH=src /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -m pytest tests/unit/test_fine_surface.py -q -k 'projection_uses_cell_center or transfer_dependencies' diff --git a/research/fine_surface_20261014/cpu_surface_projection_exit.txt b/research/fine_surface_20261014/cpu_surface_projection_exit.txt new file mode 100644 index 0000000..573541a --- /dev/null +++ b/research/fine_surface_20261014/cpu_surface_projection_exit.txt @@ -0,0 +1 @@ +0 diff --git a/research/fine_surface_20261014/cpu_surface_projection_stdout.txt b/research/fine_surface_20261014/cpu_surface_projection_stdout.txt new file mode 100644 index 0000000..efd37a1 --- /dev/null +++ b/research/fine_surface_20261014/cpu_surface_projection_stdout.txt @@ -0,0 +1,2 @@ +... [100%] +3 passed, 12 deselected in 0.40s diff --git a/research/fine_surface_20261014/cpu_surface_stdout.txt b/research/fine_surface_20261014/cpu_surface_stdout.txt new file mode 100644 index 0000000..9cfe73d --- /dev/null +++ b/research/fine_surface_20261014/cpu_surface_stdout.txt @@ -0,0 +1,2 @@ +............... [100%] +15 passed in 0.59s diff --git a/research/fine_surface_20261014/gpu_preparation_run1.py b/research/fine_surface_20261014/gpu_preparation_run1.py new file mode 100644 index 0000000..ee586d0 --- /dev/null +++ b/research/fine_surface_20261014/gpu_preparation_run1.py @@ -0,0 +1,290 @@ +"""CPU preparation for one fixed D2Q9 2:1 patch and optional interior circles. + +Cell indices use y*nx+x; population slots use q*(nx*ny)+cell, matching +core/layout.cuh. Bounds are half-open (x0, y0, x1, y1) in coarse cells. +The four fine halo cells implement the pinned CPUREF volumetric geometry. +Base topology is independent of boundaries; prepare_fine_boundary checks them. +""" +from dataclasses import dataclass, replace +from numbers import Integral + +import numpy as np + +from ..config import LBMConfig +from .descriptors import D2Q9_EX, D2Q9_EY, FLUID, SOLID + +ACTIVE, INNER_GHOST, OUTER_GHOST = 0, 1, 2 +HALO = 4 + + +def _readonly(values, dtype): + array = np.ascontiguousarray(values, dtype=dtype) + array.setflags(write=False) + return array + + +@dataclass(frozen=True, eq=False) +class FixedPatch2D: + """Layer metadata and compact exchange tables, constructed by from_config. + + Shapes are (ny, nx), including the fine halo. ``fine_origin`` is its lower + cell edge in coarse physical units, with coarse dx=dt=1 and fine dx=dt=.5. + ``ghost_fine`` and ``ghost_coarse`` pair fine cells with coarse donors. + ``coalesce_coarse`` contains incoming population slots; each corresponding + row of ``coalesce_fine`` contains four fine slots in (dy, dx) row order. + Weights are all 1/4. Closed corner links are included even when the coarse + donor is uncovered. These tables contain no DDF data and allocate no GPU. + + This is preparation, not permission to advance these levels with OneStep: + its channel boundaries and fused collision do not implement patch coupling. + """ + coarse_shape: tuple[int, int] + bounds: tuple[int, int, int, int] + tau_coarse: float + tau_fine: float + fine_kind: np.ndarray + ghost_fine: np.ndarray + ghost_coarse: np.ndarray + coalesce_coarse: np.ndarray + coalesce_fine: np.ndarray + + @classmethod + def from_config(cls, cfg: LBMConfig, bounds) -> "FixedPatch2D": + """Prepare maps without changing cfg or allocating coarse-sized tables. + + The initial backend contract is D2Q9/SRT/FP32/unshifted/double_buffer, + without LES. Two coarse cells of margin keep all halo donors in bounds; + this does NOT certify that those donors are fluid or periodic. + """ + checked = replace(cfg) + checked.validate() + if (not checked.is_d2q9 or checked.collision != "SRT" + or checked.streaming != "double_buffer" + or checked.store_precision != "FP32" + or checked.ddf_shifting or checked.les_enabled): + raise ValueError("FixedPatch2D requires D2Q9/SRT/FP32/unshifted/double_buffer without LES") + bounds = tuple(bounds) + if len(bounds) != 4 or any(isinstance(v, (bool, np.bool_)) + or not isinstance(v, Integral) for v in bounds): + raise ValueError("bounds must be four integers: (x0, y0, x1, y1)") + x0, y0, x1, y1 = bounds = tuple(map(int, bounds)) + nx, ny = checked.nx, checked.ny + if not (2 <= x0 < x1 <= nx - 2 and 2 <= y0 < y1 <= ny - 2): + raise ValueError("patch must be nonempty with a two-coarse-cell margin") + fx, fy = 2 * (x1 - x0) + 2 * HALO, 2 * (y1 - y0) + 2 * HALO + if max(nx * ny, fx * fy) > np.iinfo(np.uint32).max: + raise ValueError("layer cell counts exceed uint32 indexing") + tau_c = 3.0 * checked.viscosity + 0.5 + tau_f = 6.0 * checked.viscosity + 0.5 + if not checked.omega_min <= 1.0 / tau_f <= checked.omega_max: + raise ValueError("fine relaxation rate lies outside configured omega guards") + + kind = np.full((fy, fx), OUTER_GHOST, dtype=np.uint8) + kind[2:-2, 2:-2] = INNER_GHOST + kind[HALO:-HALO, HALO:-HALO] = ACTIVE + gy, gx = np.nonzero(kind != ACTIVE) + ghost_fine = gy * fx + gx + ghost_coarse = (y0 + (gy - HALO) // 2) * nx + x0 + (gx - HALO) // 2 + + targets, sources = [], [] + # Only the outside ring can receive fine-to-coarse populations. + # Integer doubled midpoints include all eight diagonal corner passes. + for y in range(y0 - 1, y1 + 1): + xs = range(x0 - 1, x1 + 1) if y in (y0 - 1, y1) else (x0 - 1, x1) + for x in xs: + for q in range(1, 9): + mx, my = 2 * x + 1 - D2Q9_EX[q], 2 * y + 1 - D2Q9_EY[q] + if 2 * x0 <= mx <= 2 * x1 and 2 * y0 <= my <= 2 * y1: + targets.append(q * nx * ny + y * nx + x) + a, b = HALO + 2 * (x - x0), HALO + 2 * (y - y0) + sources.append([q * fx * fy + (b + dy) * fx + a + dx + for dy in (0, 1) for dx in (0, 1)]) + return cls((ny, nx), bounds, tau_c, tau_f, + _readonly(kind, np.uint8), + _readonly(ghost_fine, np.uint32), + _readonly(ghost_coarse, np.uint32), + _readonly(targets, np.uint64), + _readonly(sources, np.uint64).reshape(-1, 4)) + + @property + def fine_shape(self) -> tuple[int, int]: + return self.fine_kind.shape + + @property + def fine_origin(self) -> tuple[float, float]: + return self.bounds[0] - HALO / 2, self.bounds[1] - HALO / 2 + + @property + def table_bytes(self) -> int: + return sum(a.nbytes for a in (self.fine_kind, self.ghost_fine, + self.ghost_coarse, self.coalesce_coarse, + self.coalesce_fine)) + + def check_synchronization(self, coarse_steps: int, fine_steps: int, *, phase: str) -> None: + """Check a proposed backend handoff; does not convert or collide data. + + Production storage is g=C(f), while CPUREF returns arrival_f. A future + g-to-g coarse step must collide coarse cells once and fine cells twice; + fine halo ghosts never collide. Coalescence must precede coarse collision. + Converting reference f to g for comparison is an observation operation, + not an additional production collision. Counts here are completed steps. + """ + if phase != "postcollision_g": + raise ValueError("patch backend handoff requires postcollision_g") + for value in (coarse_steps, fine_steps): + if isinstance(value, (bool, np.bool_)) or not isinstance(value, Integral) or value < 0: + raise ValueError("step counts must be nonnegative integers") + if fine_steps != 2 * coarse_steps: + raise ValueError("levels are not synchronized: fine_steps must equal 2*coarse_steps") + + +@dataclass(frozen=True, eq=False) +class FineBoundary2D: + """Fixed local projection plus auditable, finite transfer dependency sets. + + transfer_reads rows are (hop, direction, cell), traced from coalescence at + hop 2 back to exploded G at hop 0. No previous coarse interval is traversed. + Cell footprints also include the whole explosion write/donor tables. + """ + objects: tuple + flags: np.ndarray + curved_host: tuple + boundary_cells: np.ndarray + transfer_fine_cells: np.ndarray + transfer_coarse_cells: np.ndarray + transfer_reads: np.ndarray + + +def _transfer_footprint(patch): + ny, nx = patch.fine_shape + cells = nx * ny + pending = [(2, *divmod(int(slot), cells)) for slot in patch.coalesce_fine.ravel()] + reads = set() + while pending: + hop, q, k = pending.pop() + if (hop, q, k) in reads: + continue + reads.add((hop, q, k)) + if hop == 0: + continue + y, x = divmod(k, nx) + kind = patch.fine_kind[y, x] + if kind == OUTER_GHOST: + raise ValueError("Transfer reads an invalid post-hop outer ghost") + # A collided output depends on all nine arrivals; ghosts only stream. + for direction in (range(9) if kind == ACTIVE else (q,)): + sx, sy = x - D2Q9_EX[direction], y - D2Q9_EY[direction] + if not (0 <= sx < nx and 0 <= sy < ny): + raise ValueError("Transfer dependency leaves the fine allocation") + pending.append((hop - 1, direction, sy * nx + sx)) + fine = set(map(int, patch.ghost_fine)) | {k for _, _, k in reads} + coarse = set(map(int, patch.ghost_coarse)) | set(map( + int, patch.coalesce_coarse % np.prod(patch.coarse_shape))) + return fine, coarse, _readonly(sorted(reads), np.int64) + + +def prepare_fine_boundary(cfg, patch, objects, *, wall_aware=False): + """Project fixed circles and reject boundary/transfer overlap before CUDA. + + Input centers/radii are in coarse physical coordinates (dx=dt=1). + SurfaceActuation retains its lattice-velocity meaning: input coarse units + are converted into independent fine-local objects with dx=dt=.5. + Original objects are not retained or mutated. No runtime geometry updates. + """ + if not objects: + return None + checked = replace(cfg) + checked.validate() + if (patch.coarse_shape != (cfg.ny, cfg.nx) or not checked.is_d2q9 + or checked.collision != "SRT" or checked.streaming != "double_buffer" + or checked.store_precision != "FP32" or checked.ddf_shifting or checked.les_enabled + or patch.tau_coarse != 3*checked.viscosity+.5): + raise ValueError("Fine boundary requires the matching fixed-patch configuration") + from ..body.geometry.circle import CircleGeometry + from ..body.objects import SimObject + from ..body.coupling.soa_packer import pack_cut_links_to_soa + + ny, nx = patch.fine_shape + fine_cfg = replace(cfg, nx=nx, ny=ny, viscosity=2 * cfg.viscosity) + flags = np.full(nx * ny, FLUID, np.uint16) + active = patch.fine_kind.ravel() == ACTIVE + local, links = [], [] + x0, y0, x1, y1 = patch.bounds + dx = dt = .5 + for bid, obj in enumerate(objects): + if (type(obj.geometry) is not CircleGeometry or obj.is_sensor or obj.is_force_region + or any(getattr(obj.state, name) != 0 for name in ("vx", "vy", "omega")) + or any(vars(obj.control).values())): + raise ValueError("Fine boundaries require stationary circles without other roles") + cx, cy = obj.geometry.center + radius = obj.geometry._radius + if (not np.isfinite([cx, cy, radius]).all() or radius <= 0 + or cx-radius < x0 or cx+radius > x1 or cy-radius < y0 or cy+radius > y1): + raise ValueError("Entire fine circle must lie inside the physical patch") + center = tuple((v-o)/dx-.5 for v, o in zip((cx, cy), patch.fine_origin)) + spec = obj.surface_actuation + if spec is not None: + spec = replace(spec, normal_velocity=spec.normal_velocity * dt / dx) + item = SimObject(bid, geometry=CircleGeometry(*center, radius/dx), + center=center, radius=radius/dx, surface_actuation=spec) + item.validate_surface_actuation(fine_cfg) + mask = item.get_flag_mask(nx, ny) + solid = (mask & SOLID) != 0 + if not solid.any() or np.any(solid & ~active) or np.any(flags[solid] & SOLID): + raise ValueError("Fine solids must be resolved, disjoint and entirely active") + flags[solid] = mask[solid] + local.append(item) + for item in local: + cut = item.geometry.build_cut_links(nx, ny, domain_flags=flags) + if not cut: + raise ValueError("Fine circle has no resolved cut links") + if item.surface_actuation is not None: + _, aperture = item.surface_actuation.project( + np.array([link.rx for link in cut]), np.array([link.ry for link in cut])) + if not aperture.any(): + raise ValueError("Surface aperture hits no resolved cut links") + for link in cut: + link.body_id = item.obj_id + links.extend(cut) + + boundary, writers, receivers = set(), set(), set() + for link in links: + r, q = link.fluid_idx, link.dir + y, x = divmod(r, nx) + sx, sy = x + D2Q9_EX[q], y + D2Q9_EY[q] + s = sy * nx + sx + if not (active[r] and flags[r] & FLUID and active[s] and flags[s] & SOLID): + raise ValueError("Cut-link receiver/source must be active fluid/solid") + writer = (s, q+1 if q % 2 else q-1) + if writer in writers: + raise ValueError("Duplicate fine boundary writer") + writers.add(writer) + receivers.add((r, q)) + boundary.update((r, s)) + if link.q < .5: + dx_, dy_ = x - D2Q9_EX[q], y - D2Q9_EY[q] + if not (0 <= dx_ < nx and 0 <= dy_ < ny and active[dy_*nx+dx_]): + raise ValueError("q<.5 donor crosses the fine active interface; fallback cannot hide it") + boundary.add(dy_*nx+dx_) + # Reverse coverage: every fluid pull across a solid neighbor needs a writer. + required = set() + for r in np.flatnonzero(active & ((flags & FLUID) != 0)): + for q in range(1, 9): + if flags[r + D2Q9_EX[q] + nx*D2Q9_EY[q]] & SOLID: + required.add((int(r), q)) + if required != receivers: + raise ValueError("Fine solid pull coverage does not match the cut links") + fine, coarse, reads = _transfer_footprint(patch) + if fine & (boundary | set(map(int, np.flatnonzero(flags & SOLID)))): + raise ValueError("Boundary stencil overlaps the two-hop transfer footprint") + for k in coarse: + y, x = divmod(k, cfg.nx) + if x0 <= x < x1 and y0 <= y < y1: + raise ValueError("Transfer coarse donor/target is not an uncovered bulk cell") + if wall_aware and (y <= 2 or y >= cfg.ny-3): + raise ValueError("Transfer footprint touches the coarse wall reconstruction stencil") + return FineBoundary2D(tuple(local), _readonly(flags, np.uint16), + tuple(_readonly(a, a.dtype) for a in pack_cut_links_to_soa(links)), + _readonly(sorted(boundary), np.uint32), + _readonly(sorted(fine), np.uint32), + _readonly(sorted(coarse), np.uint32), reads) diff --git a/research/fine_surface_20261014/gpu_run.json b/research/fine_surface_20261014/gpu_run.json new file mode 100644 index 0000000..15b8ba7 --- /dev/null +++ b/research/fine_surface_20261014/gpu_run.json @@ -0,0 +1,48 @@ +{ + "start_utc": "2026-10-14T05:08:55.958692+00:00", + "preflight_gpu": "0, GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, Tesla V100-SXM2-16GB, 5, 16140, 0\n1, GPU-f1c9fd5a-e917-56e0-21fb-24035ba44a36, Tesla V100-SXM2-16GB, 5, 16140, 0\n2, GPU-b8c11c01-c91f-aa0b-abf6-dad35085cc76, Tesla V100-SXM2-16GB, 5, 16140, 0\n3, GPU-8b71b032-1b75-2891-935c-ce106a53034a, Tesla V100-SXM2-16GB, 5, 16140, 0", + "preflight_apps": "", + "preflight_ram_bytes": 64091750400, + "physical_gpu_uuid": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c", + "command": [ + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-c", + "import CelerisLab,pytest; print('SOURCE', CelerisLab.__file__, flush=True); assert CelerisLab.__file__.startswith('/home/frank14f/CelerisLab/src/'); raise SystemExit(pytest.main(['-q', '-s', '-p', 'no:cacheprovider', 'tests/validation/multigrid/test_fine_surface_gpu.py', 'tests/validation/multigrid/test_refinement_followup.py::NormalBuildGPU::test_offcenter_rectangle_margin_two_one_step', 'tests/validation/multigrid/test_refinement_followup.py::NormalBuildGPU::test_slot_reservoir_eight_steps']))" + ], + "cwd": "/home/frank14f/CelerisLab", + "env": { + "PYTHONPATH": "/home/frank14f/CelerisLab/src", + "PYTHONNOUSERSITE": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "OPENBLAS_NUM_THREADS": "1", + "CUDA_VISIBLE_DEVICES": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c", + "CUDA_CACHE_DISABLE": "1", + "TMPDIR": "/tmp/celeris-fine-surface-gpu-e9g3hz7z" + }, + "preflight_temp_bytes": 1637890, + "limits": { + "wall_seconds": 120, + "temp_bytes": 2000000000, + "ram_reserve_bytes": 6409175040, + "vram_reserve_MiB": 1614 + }, + "note": "Sampled own process group; no fixed RSS/address-space cap.", + "exit_code": 1, + "elapsed_seconds": 25.39498820400331, + "peak_group_rss_bytes": 386883584, + "peak_temp_bytes": 3585985, + "min_ram_bytes": 63638339584, + "min_vram_free_MiB": 15826, + "termination_reason": null, + "scratch_removed": true, + "source_hashes_captured_during_run": { + "src/CelerisLab/lbm/kernels/refinement.cu": "129f3d91da93b4324f88a0da73a4da1e5390f72c14cce574ee63306712da9895", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "578a5b20a157241ee678547059abb1372dd5a589ad06bb2c15b987eb01ca1013", + "src/CelerisLab/lbm/kernels/step/curved_double.cu": "bfa7a1df1e939020314d49755045f7a85fe4a19cc1c68dbe62653c66c5e7c2b3", + "src/CelerisLab/lbm/refinement.py": "b3fe9e58118369adb1bdfc618fbfbd917d508a563beaf2555f656b59aeff4425", + "src/CelerisLab/lbm/refinement_stepper.py": "9178224089ee6584420b79f10cf1d91441645b668e8b6898641d19eac757687b", + "src/CelerisLab/lbm/stepper.py": "0dcb7cd7ae87e33e3dc67a38b6aa43042fbe673e37d9ad165342ee1d695933ce", + "tests/unit/test_fine_surface.py": "b232b55e75eef52480f06a35c401d72b6145892bb8b79d1d1b3cfed965b3506c", + "tests/validation/multigrid/test_fine_surface_gpu.py": "3dd0658f63a4e7a1c41eecf433842c872f8fecb391ea4b44d0b48947643d5189" + } +} diff --git a/research/fine_surface_20261014/gpu_stdout.txt b/research/fine_surface_20261014/gpu_stdout.txt new file mode 100644 index 0000000..c5216e0 --- /dev/null +++ b/research/fine_surface_20261014/gpu_stdout.txt @@ -0,0 +1,79 @@ +SOURCE /home/frank14f/CelerisLab/src/CelerisLab/__init__.py +speed=0.0 audit=True BFL=7.4505806e-09 ledger=[1.604948192834854e-05, -5.038455128669739e-07, -6.919726729393005e-07] budget=0.00221051117 boundary=[4.0978193283081055e-08, 0.0, 0.0] transfer=[0.0, 0.0, 0.0] drive_mass=+4.09781933e-08; counts=PASS +speed=None audit=False BFL=7.4505806e-09 ledger=[1.604948192834854e-05, -5.038455128669739e-07, -6.919726729393005e-07] budget=0.00221051117 boundary=[4.0978193283081055e-08, 0.0, 0.0] transfer=[0.0, 0.0, 0.0] drive_mass=+4.09781933e-08; counts=normal build +.speed=0.002 audit=True BFL=9.73073444e-09 ledger=[1.597730442881584e-05, -5.154870450496674e-07, -7.622875273227692e-07] budget=0.00221052543 boundary=[0.0071802823804318905, 0.003110995050519705, 0.0026390845887362957] transfer=[0.0, 0.0, 0.0] drive_mass=+0.00620033871; counts=PASS +.speed=-0.002 audit=True BFL=7.4505806e-09 ledger=[1.66366808116436e-05, -5.881302058696747e-07, -7.147900760173798e-07] budget=0.00221049693 boundary=[-0.007164992857724428, -0.0030983122996985912, -0.00262861093506217] transfer=[0.0, 0.0, 0.0] drive_mass=-0.00618575338; counts=PASS +.FF.normal rectangle 17x13 bounds=(2, 2, 6, 5) fine=16x14 steps=1: max_population=1.14050047e-07 device_arrays=35288; halo/stride PASS +host_peak_rss=279.887 MiB +.slot/reservoir steps=8 max_population=1.78241457e-07 max_BC_error=2.21654773e-07 discrete_leaf_mass_change=+0.0309633738 final_sum_rho_v_bottom=0.00426894613 top=0.000960694626; raw halos/corners/fine BC isolation PASS +host_peak_rss=279.887 MiB +. +=================================== FAILURES =================================== +_ test_missing_surface_device_buffer_rejects_before_launch[surface_velocity_gpu] _ + +missing = 'surface_velocity_gpu' + + @pytest.mark.parametrize("missing", ["surface_velocity_gpu", "link_exchange_gpu"]) + def test_missing_surface_device_buffer_rejects_before_launch(missing): + backend = implementation.FixedPatchStepper.__new__(implementation.FixedPatchStepper) + backend.fine_boundary = SimpleNamespace(objects=[object_spec(.002)]) + backend._fine_curved = SimpleNamespace(surface_velocity_gpu=object(), link_exchange_gpu=object()) + setattr(backend._fine_curved, missing, None) + backend._curved = Mock() + with pytest.raises(RuntimeError, match="Surface boundary device buffers are missing"): +> backend._apply_fine_boundary(object()) + +tests/validation/multigrid/test_fine_surface_gpu.py:289: +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + +self = +buffer = , kw = {} +cl = namespace(surface_velocity_gpu=None, link_exchange_gpu=) + + def _apply_fine_boundary(self, buffer, **kw): + """Stage solid source slots; exchange buffer holds this fine substep only.""" + cl = self._fine_curved + if cl is None: + if self.fine_boundary is not None: + raise RuntimeError("Fine boundary device buffers are missing") + return +> if self._curved is None or cl.fluid_idx_gpu is None: +E AttributeError: 'types.SimpleNamespace' object has no attribute 'fluid_idx_gpu' + +src/CelerisLab/lbm/refinement_stepper.py:195: AttributeError +_ test_missing_surface_device_buffer_rejects_before_launch[link_exchange_gpu] __ + +missing = 'link_exchange_gpu' + + @pytest.mark.parametrize("missing", ["surface_velocity_gpu", "link_exchange_gpu"]) + def test_missing_surface_device_buffer_rejects_before_launch(missing): + backend = implementation.FixedPatchStepper.__new__(implementation.FixedPatchStepper) + backend.fine_boundary = SimpleNamespace(objects=[object_spec(.002)]) + backend._fine_curved = SimpleNamespace(surface_velocity_gpu=object(), link_exchange_gpu=object()) + setattr(backend._fine_curved, missing, None) + backend._curved = Mock() + with pytest.raises(RuntimeError, match="Surface boundary device buffers are missing"): +> backend._apply_fine_boundary(object()) + +tests/validation/multigrid/test_fine_surface_gpu.py:289: +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + +self = +buffer = , kw = {} +cl = namespace(surface_velocity_gpu=, link_exchange_gpu=None) + + def _apply_fine_boundary(self, buffer, **kw): + """Stage solid source slots; exchange buffer holds this fine substep only.""" + cl = self._fine_curved + if cl is None: + if self.fine_boundary is not None: + raise RuntimeError("Fine boundary device buffers are missing") + return +> if self._curved is None or cl.fluid_idx_gpu is None: +E AttributeError: 'types.SimpleNamespace' object has no attribute 'fluid_idx_gpu' + +src/CelerisLab/lbm/refinement_stepper.py:195: AttributeError +=========================== short test summary info ============================ +FAILED tests/validation/multigrid/test_fine_surface_gpu.py::test_missing_surface_device_buffer_rejects_before_launch[surface_velocity_gpu] +FAILED tests/validation/multigrid/test_fine_surface_gpu.py::test_missing_surface_device_buffer_rejects_before_launch[link_exchange_gpu] +2 failed, 6 passed in 23.73s diff --git a/research/fine_surface_20261014/gpu_test_run1.py b/research/fine_surface_20261014/gpu_test_run1.py new file mode 100644 index 0000000..f30376a --- /dev/null +++ b/research/fine_surface_20261014/gpu_test_run1.py @@ -0,0 +1,316 @@ +"""Two coarse/four fine steps: isolated fine circle, no flux-accuracy claim. + +Run only through the bounded GPU runner after a fresh resource check. The test +hooks read actual kernel inputs/outputs; they never change the stepping order. +""" +import importlib.util +from contextlib import nullcontext +from pathlib import Path +from threading import RLock +from types import SimpleNamespace +from unittest.mock import Mock, patch + +import numpy as np +import pycuda.driver as cuda +import pytest + +import CelerisLab +from CelerisLab.body.geometry.circle import CircleGeometry +from CelerisLab.body.objects import SimObject +from CelerisLab.config import LBMConfig +from CelerisLab.cuda import compiler_v2 as compiler +from CelerisLab.cuda.context import CudaContext +from CelerisLab.lbm import refinement_stepper as implementation +from CelerisLab.lbm.descriptors import FLUID, SOLID + + +ROOT = Path(__file__).resolve().parents[3] +CX = np.array([0, 1, -1, 0, 0, 1, -1, 1, -1]) +CY = np.array([0, 0, 0, 1, -1, 1, -1, -1, 1]) +OPP = np.array([0, 2, 1, 4, 3, 6, 5, 8, 7]) +W = np.array([4/9]+[1/9]*4+[1/36]*4) +MOMENTS = np.stack((np.ones(9), CX, CY)) +GEOMETRY = ("fluid_idx", "dir", "q", "body_id", "rx", "ry", "rz", "fallback_class") +BOUNDS = (4, 4, 20, 20) + + +def read(pointer, shape, dtype=np.float32): + values = np.empty(shape, dtype) + cuda.memcpy_dtoh(values, pointer) + return values + + +def rest(shape): + return np.broadcast_to(W[:, None, None], (9, *shape)).astype(np.float32).copy() + + +def surface(speed): + return None if speed is None else dict(angle=.7, half_width=.85, normal_velocity=speed) + + +def object_spec(speed): + return SimObject(0, CircleGeometry(12.25, 12.25, 2.15), center=(12.25, 12.25), + radius=2.15, surface_actuation=surface(speed)) + + +def audit_compiler(original): + def compile_private(*args, **kwargs): + entry = Path(kwargs["build_dir"])/"fine_surface_audit.cu" + entry.write_text('#define CELERIS_REFINEMENT_AUDIT\n#include "refinement.cu"\n') + kwargs["source"] = entry.name + return original(*args, **kwargs) + return compile_private + + +def reflection_oracle(before, cl, speed, *, verify_projection=True): + """FP64 BFL from frozen spatial populations, independent arc projection.""" + flat = before.astype(float).reshape(9, -1) + radius = np.hypot(cl.rx.astype(float), cl.ry.astype(float)) + delta = (np.arctan2(cl.ry.astype(float), cl.rx.astype(float))-.7+np.pi) % (2*np.pi)-np.pi + amplitude = 0 if speed is None else speed + strength = amplitude*np.maximum(0, 1-(delta/.85)**2)**2 + velocity = strength[:, None]*np.column_stack((cl.rx, cl.ry))/radius[:, None] + if verify_projection and cl.surface_velocity is not None: + np.testing.assert_allclose(cl.surface_velocity, velocity, atol=3e-9, rtol=0) + incoming = [] + for i, (k, d, q, fallback) in enumerate(zip(cl.fluid_idx, cl.dir, cl.q, cl.fallback_class)): + k, d, q = int(k), int(d), float(q) + rho = flat[:, k].sum() + dot = CX[d]*velocity[i, 0]+CY[d]*velocity[i, 1] + if fallback: + value = flat[d, k]-6*W[d]*rho*dot + elif q < .5: + value = 2*q*flat[d, k]+(1-2*q)*flat[d, k-CX[d]-40*CY[d]]-6*W[d]*rho*dot + else: + value = flat[d, k]/(2*q)+(1-1/(2*q))*flat[OPP[d], k]-3*W[d]*rho*dot/q + incoming.append(value) + return np.array(incoming) + + +def fine_flux(before, staged, active, solid): + """Population ledger across the fine leaf boundary: solid versus halo. + + Internal fluid-to-fluid streaming cancels pairwise; solid and halo packets + are counted in their actual direction, before any collision. + """ + boundary, transfer = np.zeros(9), np.zeros(9) + magnitude = 0.0 + for d, (cx, cy) in enumerate(zip(CX, CY)): + incoming = active & ~np.roll(active, (cy, cx), (0, 1)) + outgoing = active & ~np.roll(active, (-cy, -cx), (0, 1)) + from_solid = np.roll(solid, (cy, cx), (0, 1)) + into_solid = np.roll(solid, (-cy, -cx), (0, 1)) + received = np.roll(staged[d], (cy, cx), (0, 1)).astype(float) + sent = before[d].astype(float) + for vector, inc, out in ((boundary, incoming & from_solid, outgoing & into_solid), + (transfer, incoming & ~from_solid, outgoing & ~into_solid)): + assert np.isfinite(received[inc]).all() and np.isfinite(sent[out]).all() + vector[d] = received[inc].sum()-sent[out].sum() + magnitude += np.abs(received[inc]).sum()+np.abs(sent[out]).sum() + return boundary, transfer, magnitude + + +def coarse_flux(before, fine, active): + """Derive every replacement from physical midpoints, not production tables.""" + x0, y0, x1, y1 = BOUNDS + incoming = np.stack([np.roll(before[d], (CY[d], CX[d]), (0, 1)) for d in range(9)]).astype(float) + magnitude = 0.0 + for y, x in np.argwhere(active): + for d in range(1, 9): + if x0 <= x+.5-CX[d]/2 <= x1 and y0 <= y+.5-CY[d]/2 <= y1: + a, b = 4+2*(x-x0), 4+2*(y-y0) + children = fine[d, b:b+2, a:a+2].astype(float) + assert children.shape == (2, 2) and np.isfinite(children).all() + incoming[d, y, x] = children.sum()/4 + magnitude += np.abs(children).sum()/4 + assert np.isfinite(incoming[:, active]).all() + # This retains the eight grazing-corner replacements of uncovered donors. + flux = (incoming[:, active]-before[:, active].astype(float)).sum(axis=1) + magnitude += np.abs(incoming[:, active]).sum()+np.abs(before[:, active]).sum(dtype=float) + return flux, magnitude + + +def run_patch(speed, *, audit=True): + cfg = LBMConfig(nx=24, ny=24, viscosity=.05, velocity=0, rho=1) + coarse_active = np.ones((24, 24), bool) + coarse_active[4:20, 4:20] = False + source = object_spec(speed) + state = vars(source.state).copy() + with CudaContext(0) as context: + build = (patch.object(compiler, "compile_kernel", audit_compiler(compiler.compile_kernel)) + if audit else nullcontext()) + with build: + backend = implementation.FixedPatchStepper(cfg, BOUNDS, context=context, fine_objects=[source]) + with backend, context.activate(): + c, f = backend._levels + cl = backend._fine_curved + geometry = {name: getattr(cl, name).copy() for name in GEOMETRY} + flags = backend.fine_boundary.flags.reshape(40, 40) + solid = (flags & SOLID) != 0 + active = np.zeros((40, 40), bool) + active[4:-4, 4:-4] = True + active &= (flags & FLUID) != 0 + active &= ~solid + local = backend.fine_boundary.objects[0] + assert local.center == (20., 20.) and local.radius == 4.3 + assert source.center == (12.25, 12.25) and source.radius == 2.15 + yy, xx = np.mgrid[:40, :40] + roi = active & ((xx-20)**2+(yy-20)**2 <= 9**2) + backend.initialize(rest((24, 24)), rest((40, 40))) + if audit: + for level in backend._levels: + for name in ("collision_counts", "explosion_counts", "incoming_counts"): + pointer, size = level.module.get_global(name) + cuda.memset_d8(pointer, 0, size) + initial = backend.download() + initial_pop = initial[0][:, coarse_active].sum(axis=1, dtype=float) + initial_pop += .25*initial[1][:, active].sum(axis=1, dtype=float) + boundary, fine_transfer, coarse_transfer = np.zeros(9), np.zeros(9), np.zeros(9) + budget_sum, reflection_error, drive_mass = 0., 0., 0. + traces = [] + original_curved, original_fine, original_coarse = backend._curved, f.kernel, c.kernel + + def curved(*args, **kwargs): + nonlocal boundary, fine_transfer, budget_sum, reflection_error, drive_mass + backend._stream.synchronize() + before = read(args[0], f.shape) + expected = reflection_oracle(before, cl, speed) + original_curved(*args, **kwargs) + backend._stream.synchronize() + staged = read(args[0], f.shape) + d, k = cl.dir.astype(int), cl.fluid_idx.astype(int) + values = staged.reshape(9, -1)[OPP[d], k+CX[d]+40*CY[d]] + passive = reflection_oracle(before, cl, None, verify_projection=False) + drive_mass += .25*float(np.sum(values-passive)) + error = float(np.max(np.abs(values-expected))) + reflection_error = max(reflection_error, error) + assert error <= 1e-7 + np.testing.assert_array_equal(staged[:, active], before[:, active]) + b, transfer, magnitude = fine_flux(before, staged, active, solid) + boundary += .25*b + fine_transfer += .25*transfer + budget_sum += .25*magnitude + + def fine(*args, **kwargs): + nonlocal budget_sum + backend._stream.synchronize() + staged = read(args[0], f.shape) + original_fine(*args, **kwargs) + backend._stream.synchronize() + advanced = read(args[1], f.shape) + assert np.isfinite(advanced[:, active]).all() + assert np.isnan(advanced[:, solid]).all() + # Include actual collision operands in the FP32 rounding budget. + budget_sum += .25*np.abs(staged[:, active]).sum(dtype=float) + traces.append(advanced[:, roi].copy()) + + def coarse(*args, **kwargs): + nonlocal coarse_transfer, budget_sum + backend._stream.synchronize() + before, fine_values = read(args[0], c.shape), read(args[2], f.shape) + transfer, magnitude = coarse_flux(before, fine_values, coarse_active) + coarse_transfer += transfer + budget_sum += magnitude + return original_coarse(*args, **kwargs) + + with patch.object(backend, "_curved", curved), patch.object(f, "kernel", fine), \ + patch.object(c, "kernel", coarse): + backend.step(2) + actual = backend.download() + population = actual[0][:, coarse_active].sum(axis=1, dtype=float) + population += .25*actual[1][:, active].sum(axis=1, dtype=float) + ledger = boundary+fine_transfer+coarse_transfer + error = MOMENTS@(population-initial_pop-ledger) + budget = 8*np.finfo(np.float32).eps*budget_sum + assert np.isfinite(budget_sum) and budget_sum > 0 + assert np.max(np.abs(error)) <= budget + if speed: + assert speed*drive_mass > 0 + assert len(traces) == 4 and backend.step_count == 2 + if audit: + for level, mask, count in ((c, coarse_active, 2), (f, active, 4)): + pointer, size = level.module.get_global("collision_counts") + counts = read(pointer, mask.shape, np.uint32) + assert size == counts.nbytes + np.testing.assert_array_equal(counts, count*mask) + for name, values in geometry.items(): + np.testing.assert_array_equal(getattr(cl, name), values) + assert vars(source.state) == state and source.geometry.center == source.center + print(f"speed={speed} audit={audit} BFL={reflection_error:.9g} ledger={error.tolist()} " + f"budget={budget:.9g} boundary={list(MOMENTS@boundary)} " + f"transfer={list(MOMENTS@(fine_transfer+coarse_transfer))} " + f"drive_mass={drive_mass:+.9g}; counts={'PASS' if audit else 'normal build'}", flush=True) + return traces, roi, actual + + +def uniform_reference(speed, roi): + # Reuse the existing explicit config helper without importing unrelated tests. + spec = importlib.util.spec_from_file_location("fine_surface_cases", ROOT/"tests/integration/_cases.py") + cases = importlib.util.module_from_spec(spec) + spec.loader.exec_module(cases) + with cases.make_sim(nx=48, ny=48, viscosity=.1, velocity=0, rho=1) as sim: + sim.add_body("circle", center=(24, 24), radius=4.3, surface_actuation=surface(speed)) + sim.initialize() + # Uniform 48^2 has the same dx=dt=.5 representation. Its distant channel + # boundaries cannot influence the circle ROI within these four hops. + traces = [] + for _ in range(4): + sim.run(1) + traces.append(sim.get_ddf().reshape(9, 48, 48)[:, 4:44, 4:44][:, roi].copy()) + return traces + + +@pytest.mark.parametrize("speed", [0., .002, -.002]) +def test_fine_surface_four_hops(speed): + assert Path(CelerisLab.__file__).resolve() == ROOT/"src/CelerisLab/__init__.py" + assert Path(compiler._KERNEL_DIR).resolve() == ROOT/"src/CelerisLab/lbm/kernels" + assert Path(implementation.__file__).resolve() == ROOT/"src/CelerisLab/lbm/refinement_stepper.py" + actual, roi, final = run_patch(speed) + reference = uniform_reference(speed, roi) + for got, wanted in zip(actual, reference): + np.testing.assert_allclose(got, wanted, atol=3e-6, rtol=0) + np.testing.assert_allclose(MOMENTS@got.astype(float), MOMENTS@wanted.astype(float), + atol=2e-5, rtol=0) + if speed == 0: + passive, passive_roi, passive_final = run_patch(None, audit=False) + np.testing.assert_array_equal(passive_roi, roi) + for got, wanted in zip(actual+list(final), passive+list(passive_final)): + np.testing.assert_array_equal(got, wanted) + + +@pytest.mark.parametrize("missing", ["surface_velocity_gpu", "link_exchange_gpu"]) +def test_missing_surface_device_buffer_rejects_before_launch(missing): + backend = implementation.FixedPatchStepper.__new__(implementation.FixedPatchStepper) + backend.fine_boundary = SimpleNamespace(objects=[object_spec(.002)]) + backend._fine_curved = SimpleNamespace(surface_velocity_gpu=object(), link_exchange_gpu=object()) + setattr(backend._fine_curved, missing, None) + backend._curved = Mock() + with pytest.raises(RuntimeError, match="Surface boundary device buffers are missing"): + backend._apply_fine_boundary(object()) + backend._curved.assert_not_called() + + +def test_close_frees_fine_boundary_after_stream_failure_once(): + backend = implementation.FixedPatchStepper.__new__(implementation.FixedPatchStepper) + backend.ctx = SimpleNamespace(activate=nullcontext) + backend._lock = RLock() + backend._status = "ready" + stream, soa, first, second = Mock(), Mock(), Mock(), Mock() + stream.synchronize.side_effect = RuntimeError("stream synchronization failed") + backend._stream = stream + backend._fine_curved = soa + backend._fine_flags = first + backend._curved = Mock() + backend._levels = [object(), object()] + backend._allocations = [first, second] + with pytest.raises(RuntimeError, match="stream synchronization failed"): + backend.close() + assert backend._status == "closed" + assert backend._levels == [] and backend._allocations == [] + assert backend._fine_curved is None and backend._fine_flags is None + assert backend._curved is None and backend._stream is None + backend.close() + stream.synchronize.assert_called_once_with() + soa.free.assert_called_once_with() + first.free.assert_called_once_with() + second.free.assert_called_once_with() diff --git a/research/fine_surface_20261014/incremental.diff b/research/fine_surface_20261014/incremental.diff new file mode 100644 index 0000000..318d92e --- /dev/null +++ b/research/fine_surface_20261014/incremental.diff @@ -0,0 +1,1099 @@ +--- a/src/CelerisLab/lbm/kernels/refinement.cu ++++ b/src/CelerisLab/lbm/kernels/refinement.cu +@@ -7,10 +7,17 @@ + #include "core/descriptors.cuh" + #include "core/layout.cuh" + #include "core/params.cuh" ++#include "core/flags.cuh" ++#include "core/obs.cuh" + #include "operators/macro.cuh" + #include "operators/collision_srt.cuh" + #include "streaming/pull_double_buffer.cuh" + #include "boundary/planar_velocity.cuh" ++#include "boundary/curved_boundary.cuh" ++ ++extern "C" { ++#include "step/curved_double.cu" ++} + + #if DIM != 2 || NQ != 9 || COLLISION_MODEL != 0 || STORE_PRECISION != 0 || USE_DDF_SHIFTING || USE_LES || STREAMING_MODEL != 0 + #error "Refinement requires unshifted FP32 D2Q9 SRT double buffers without LES" +@@ -48,14 +55,15 @@ + #endif + } + +-extern "C" __global__ void PatchFineStep(const float* in, float* out) { ++extern "C" __global__ void PatchFineStep(const float* in, float* out, const uint16_t* flags) { + unsigned int x, y; unsigned long k; + index_from_thread(x, y, k); + if (x >= NX || y >= NY) return; + float f[NQ]; + // Outer halo is invalid after EACH hop, including when reusing the buffer + // that held explosion data. Inner halo only streams; it never collides. +- if (x < 2 || y < 2 || x >= NX - 2 || y >= NY - 2) { ++ if (x < 2 || y < 2 || x >= NX - 2 || y >= NY - 2 ++ || (flags != nullptr && is_solid(flags[k]))) { + for (int q = 0; q < NQ; ++q) f[q] = NAN; + } else { + unsigned long j[NQ]; +--- a/src/CelerisLab/lbm/kernels/step/aux_kernels.cu ++++ b/src/CelerisLab/lbm/kernels/step/aux_kernels.cu +@@ -24,61 +24,7 @@ + #include "../streaming/esopull_semantic_helpers.cuh" + #include "../boundary/esopull_curved_helpers.cuh" + +-__device__ __forceinline__ float action_omega(const float* action, int body_id) +-{ +- if (action == nullptr || body_id < 0) return 0.0f; +- unsigned int base = (unsigned int)body_id * (unsigned int)OBS_BODY_SLOT_FLOATS; +- return action[base + (unsigned int)(OBS_BODY_SLOT_FLOATS - 1)]; +-} +- +-__global__ void CurvedBoundaryKernel( +- fpxx* fi, +- const unsigned int* cl_fluid_idx, +- const unsigned char* cl_dir, +- const float* cl_q, +- const float* cl_rx, +- const float* cl_ry, +- const float* cl_rz, +- const unsigned char* cl_fallback_class, +- const int* cl_body_id, +- const float* action, +- float* obs, +- unsigned int n_curved, +- const float* surface_velocity = nullptr, float* link_exchange = nullptr) +-{ +- unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; +- if (tid >= n_curved) return; +- +- const unsigned long k_f = (unsigned long)cl_fluid_idx[tid]; +- const unsigned int dir = (unsigned int)cl_dir[tid]; +- const float q = cl_q[tid]; +- const int bid = cl_body_id[tid]; +- const float rx = cl_rx[tid]; +- const float ry = cl_ry[tid]; +- const unsigned char fallback_class = cl_fallback_class[tid]; +- const float omega = action_omega(action, bid); +- +-#if DIM == 2 +- float Uw = -omega * ry; +- float Vw = omega * rx; +- if (surface_velocity != nullptr) { +- // Independent prescribed fluid velocity on fixed geometry. +- const float u = surface_velocity[2*tid], v = surface_velocity[2*tid+1]; +- if (u != 0.0f || v != 0.0f) { Uw += u; Vw += v; } +- } +- (void)cl_rz; +- apply_bouzidi_link(dir, q, k_f, fi, Uw, Vw, rx, ry, fallback_class, obs, bid, +- link_exchange == nullptr ? nullptr : link_exchange + 3*tid); +-#elif DIM == 3 +- const float rz = cl_rz[tid]; +- const float Uw = -omega * ry; +- const float Vw = omega * rx; +- const float Ww = 0.0f; +- apply_bouzidi_link(dir, q, k_f, fi, Uw, Vw, Ww, +- rx, ry, rz, fallback_class, obs, bid); +-#endif +-} +-// End of CurvedBoundaryKernel ++#include "curved_double.cu" + + // --------------------------------------------------------------------------- + // PrepareEsoPullCurvedKernel -- read-only curved prep for EsoPull +--- /dev/null ++++ b/src/CelerisLab/lbm/kernels/step/curved_double.cu +@@ -0,0 +1,61 @@ ++// Shared compact double-buffer curved boundary; caller supplies core/BFL headers. ++#ifndef CELERIS_CURVED_DOUBLE_CU ++#define CELERIS_CURVED_DOUBLE_CU ++ ++__device__ __forceinline__ float action_omega(const float* action, int body_id) ++{ ++ if (action == nullptr || body_id < 0) return 0.0f; ++ unsigned int base = (unsigned int)body_id * (unsigned int)OBS_BODY_SLOT_FLOATS; ++ return action[base + (unsigned int)(OBS_BODY_SLOT_FLOATS - 1)]; ++} ++ ++__global__ void CurvedBoundaryKernel( ++ fpxx* fi, ++ const unsigned int* cl_fluid_idx, ++ const unsigned char* cl_dir, ++ const float* cl_q, ++ const float* cl_rx, ++ const float* cl_ry, ++ const float* cl_rz, ++ const unsigned char* cl_fallback_class, ++ const int* cl_body_id, ++ const float* action, ++ float* obs, ++ unsigned int n_curved, ++ const float* surface_velocity = nullptr, float* link_exchange = nullptr) ++{ ++ unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; ++ if (tid >= n_curved) return; ++ ++ const unsigned long k_f = (unsigned long)cl_fluid_idx[tid]; ++ const unsigned int dir = (unsigned int)cl_dir[tid]; ++ const float q = cl_q[tid]; ++ const int bid = cl_body_id[tid]; ++ const float rx = cl_rx[tid]; ++ const float ry = cl_ry[tid]; ++ const unsigned char fallback_class = cl_fallback_class[tid]; ++ const float omega = action_omega(action, bid); ++ ++#if DIM == 2 ++ float Uw = -omega * ry; ++ float Vw = omega * rx; ++ if (surface_velocity != nullptr) { ++ // Independent prescribed fluid velocity on fixed geometry. ++ const float u = surface_velocity[2*tid], v = surface_velocity[2*tid+1]; ++ if (u != 0.0f || v != 0.0f) { Uw += u; Vw += v; } ++ } ++ (void)cl_rz; ++ apply_bouzidi_link(dir, q, k_f, fi, Uw, Vw, rx, ry, fallback_class, obs, bid, ++ link_exchange == nullptr ? nullptr : link_exchange + 3*tid); ++#elif DIM == 3 ++ const float rz = cl_rz[tid]; ++ const float Uw = -omega * ry; ++ const float Vw = omega * rx; ++ const float Ww = 0.0f; ++ apply_bouzidi_link(dir, q, k_f, fi, Uw, Vw, Ww, ++ rx, ry, rz, fallback_class, obs, bid); ++#endif ++} ++// End of CurvedBoundaryKernel ++ ++#endif +--- a/src/CelerisLab/lbm/refinement.py ++++ b/src/CelerisLab/lbm/refinement.py +@@ -1,9 +1,9 @@ +-"""CPU preparation for one fixed D2Q9 2:1 patch; no coupled stepper yet. ++"""CPU preparation for one fixed D2Q9 2:1 patch and optional interior circles. + + Cell indices use y*nx+x; population slots use q*(nx*ny)+cell, matching + core/layout.cuh. Bounds are half-open (x0, y0, x1, y1) in coarse cells. + The four fine halo cells implement the pinned CPUREF volumetric geometry. +-Topology does not encode physical boundary conditions or obstacle safety. ++Base topology is independent of boundaries; prepare_fine_boundary checks them. + """ + from dataclasses import dataclass, replace + from numbers import Integral +@@ -11,7 +11,7 @@ + import numpy as np + + from ..config import LBMConfig +-from .descriptors import D2Q9_EX, D2Q9_EY ++from .descriptors import D2Q9_EX, D2Q9_EY, FLUID, SOLID + + ACTIVE, INNER_GHOST, OUTER_GHOST = 0, 1, 2 + HALO = 4 +@@ -136,3 +136,157 @@ + raise ValueError("step counts must be nonnegative integers") + if fine_steps != 2 * coarse_steps: + raise ValueError("levels are not synchronized: fine_steps must equal 2*coarse_steps") ++ ++ ++@dataclass(frozen=True, eq=False) ++class FineBoundary2D: ++ """Fixed local projection plus auditable, finite transfer dependency sets. ++ ++ transfer_reads rows are (hop, direction, cell), traced from coalescence at ++ hop 2 back to exploded G at hop 0. No previous coarse interval is traversed. ++ Cell footprints also include the whole explosion write/donor tables. ++ """ ++ objects: tuple ++ flags: np.ndarray ++ curved_host: tuple ++ boundary_cells: np.ndarray ++ transfer_fine_cells: np.ndarray ++ transfer_coarse_cells: np.ndarray ++ transfer_reads: np.ndarray ++ ++ ++def _transfer_footprint(patch): ++ ny, nx = patch.fine_shape ++ cells = nx * ny ++ pending = [(2, *divmod(int(slot), cells)) for slot in patch.coalesce_fine.ravel()] ++ reads = set() ++ while pending: ++ hop, q, k = pending.pop() ++ if (hop, q, k) in reads: ++ continue ++ reads.add((hop, q, k)) ++ if hop == 0: ++ continue ++ y, x = divmod(k, nx) ++ kind = patch.fine_kind[y, x] ++ if kind == OUTER_GHOST: ++ raise ValueError("Transfer reads an invalid post-hop outer ghost") ++ # A collided output depends on all nine arrivals; ghosts only stream. ++ for direction in (range(9) if kind == ACTIVE else (q,)): ++ sx, sy = x - D2Q9_EX[direction], y - D2Q9_EY[direction] ++ if not (0 <= sx < nx and 0 <= sy < ny): ++ raise ValueError("Transfer dependency leaves the fine allocation") ++ pending.append((hop - 1, direction, sy * nx + sx)) ++ fine = set(map(int, patch.ghost_fine)) | {k for _, _, k in reads} ++ coarse = set(map(int, patch.ghost_coarse)) | set(map( ++ int, patch.coalesce_coarse % np.prod(patch.coarse_shape))) ++ return fine, coarse, _readonly(sorted(reads), np.int64) ++ ++ ++def prepare_fine_boundary(cfg, patch, objects, *, wall_aware=False): ++ """Project fixed circles and reject boundary/transfer overlap before CUDA. ++ ++ Input centers/radii are in coarse physical coordinates (dx=dt=1). ++ SurfaceActuation retains its lattice-velocity meaning: input coarse units ++ are converted into independent fine-local objects with dx=dt=.5. ++ Original objects are not retained or mutated. No runtime geometry updates. ++ """ ++ if not objects: ++ return None ++ checked = replace(cfg) ++ checked.validate() ++ if (patch.coarse_shape != (cfg.ny, cfg.nx) or not checked.is_d2q9 ++ or checked.collision != "SRT" or checked.streaming != "double_buffer" ++ or checked.store_precision != "FP32" or checked.ddf_shifting or checked.les_enabled ++ or patch.tau_coarse != 3*checked.viscosity+.5): ++ raise ValueError("Fine boundary requires the matching fixed-patch configuration") ++ from ..body.geometry.circle import CircleGeometry ++ from ..body.objects import SimObject ++ from ..body.coupling.soa_packer import pack_cut_links_to_soa ++ ++ ny, nx = patch.fine_shape ++ fine_cfg = replace(cfg, nx=nx, ny=ny, viscosity=2 * cfg.viscosity) ++ flags = np.full(nx * ny, FLUID, np.uint16) ++ active = patch.fine_kind.ravel() == ACTIVE ++ local, links = [], [] ++ x0, y0, x1, y1 = patch.bounds ++ dx = dt = .5 ++ for bid, obj in enumerate(objects): ++ if (type(obj.geometry) is not CircleGeometry or obj.is_sensor or obj.is_force_region ++ or any(getattr(obj.state, name) != 0 for name in ("vx", "vy", "omega")) ++ or any(vars(obj.control).values())): ++ raise ValueError("Fine boundaries require stationary circles without other roles") ++ cx, cy = obj.geometry.center ++ radius = obj.geometry._radius ++ if (not np.isfinite([cx, cy, radius]).all() or radius <= 0 ++ or cx-radius < x0 or cx+radius > x1 or cy-radius < y0 or cy+radius > y1): ++ raise ValueError("Entire fine circle must lie inside the physical patch") ++ center = tuple((v-o)/dx-.5 for v, o in zip((cx, cy), patch.fine_origin)) ++ spec = obj.surface_actuation ++ if spec is not None: ++ spec = replace(spec, normal_velocity=spec.normal_velocity * dt / dx) ++ item = SimObject(bid, geometry=CircleGeometry(*center, radius/dx), ++ center=center, radius=radius/dx, surface_actuation=spec) ++ item.validate_surface_actuation(fine_cfg) ++ mask = item.get_flag_mask(nx, ny) ++ solid = (mask & SOLID) != 0 ++ if not solid.any() or np.any(solid & ~active) or np.any(flags[solid] & SOLID): ++ raise ValueError("Fine solids must be resolved, disjoint and entirely active") ++ flags[solid] = mask[solid] ++ local.append(item) ++ for item in local: ++ cut = item.geometry.build_cut_links(nx, ny, domain_flags=flags) ++ if not cut: ++ raise ValueError("Fine circle has no resolved cut links") ++ if item.surface_actuation is not None: ++ _, aperture = item.surface_actuation.project( ++ np.array([link.rx for link in cut], np.float32), ++ np.array([link.ry for link in cut], np.float32)) ++ if not aperture.any(): ++ raise ValueError("Surface aperture hits no resolved cut links") ++ for link in cut: ++ link.body_id = item.obj_id ++ links.extend(cut) ++ ++ boundary, writers, receivers = set(), set(), set() ++ for link in links: ++ r, q = link.fluid_idx, link.dir ++ y, x = divmod(r, nx) ++ sx, sy = x + D2Q9_EX[q], y + D2Q9_EY[q] ++ s = sy * nx + sx ++ if not (active[r] and flags[r] & FLUID and active[s] and flags[s] & SOLID): ++ raise ValueError("Cut-link receiver/source must be active fluid/solid") ++ writer = (s, q+1 if q % 2 else q-1) ++ if writer in writers: ++ raise ValueError("Duplicate fine boundary writer") ++ writers.add(writer) ++ receivers.add((r, q)) ++ boundary.update((r, s)) ++ if link.q < .5: ++ dx_, dy_ = x - D2Q9_EX[q], y - D2Q9_EY[q] ++ if not (0 <= dx_ < nx and 0 <= dy_ < ny and active[dy_*nx+dx_]): ++ raise ValueError("q<.5 donor crosses the fine active interface; fallback cannot hide it") ++ boundary.add(dy_*nx+dx_) ++ # Reverse coverage: every fluid pull across a solid neighbor needs a writer. ++ required = set() ++ for r in np.flatnonzero(active & ((flags & FLUID) != 0)): ++ for q in range(1, 9): ++ if flags[r + D2Q9_EX[q] + nx*D2Q9_EY[q]] & SOLID: ++ required.add((int(r), q)) ++ if required != receivers: ++ raise ValueError("Fine solid pull coverage does not match the cut links") ++ fine, coarse, reads = _transfer_footprint(patch) ++ if fine & (boundary | set(map(int, np.flatnonzero(flags & SOLID)))): ++ raise ValueError("Boundary stencil overlaps the two-hop transfer footprint") ++ for k in coarse: ++ y, x = divmod(k, cfg.nx) ++ if x0 <= x < x1 and y0 <= y < y1: ++ raise ValueError("Transfer coarse donor/target is not an uncovered bulk cell") ++ # Coarse reconstruction targets y=1,ny-2 pull from y=0..2,ny-3..ny-1. ++ if wall_aware and (y <= 2 or y >= cfg.ny-3): ++ raise ValueError("Transfer footprint touches the coarse wall reconstruction stencil") ++ return FineBoundary2D(tuple(local), _readonly(flags, np.uint16), ++ tuple(_readonly(a, a.dtype) for a in pack_cut_links_to_soa(links)), ++ _readonly(sorted(boundary), np.uint32), ++ _readonly(sorted(fine), np.uint32), ++ _readonly(sorted(coarse), np.uint32), reads) +--- a/src/CelerisLab/lbm/refinement_stepper.py ++++ b/src/CelerisLab/lbm/refinement_stepper.py +@@ -1,5 +1,5 @@ + # CelerisLab/lbm/refinement_stepper.py +-"""Opt-in fixed patch backend; no Simulation/objects adapter. ++"""Opt-in fixed patch backend with optional stationary fine-interior circles. + + The caller owns the CudaContext and must close this backend before that context. + Only synchronized postcollision_g leaf populations are public. No checkpoint, +@@ -14,7 +14,8 @@ + import pycuda.driver as cuda + + from ..cuda import compiler_v2 as compiler +-from .refinement import ACTIVE, HALO, FixedPatch2D ++from .refinement import ACTIVE, HALO, FixedPatch2D, prepare_fine_boundary ++from .descriptors import SOLID + + + @dataclass +@@ -33,7 +34,11 @@ + ``coarse_boundary`` is ``periodic`` (default) or ``slot_reservoir``: + a bottom on-site slot and top fixed-density reservoir from ``cfg``. + Periodic mode does not apply the wall/slot boundary fields in ``cfg``. +- Physical walls remain coarse; fine halo donors must be ordinary fluid. ++ Outer walls remain coarse; fine halo donors must be ordinary fluid. ++ ``fine_objects`` accepts fixed circles in coarse physical coordinates; ++ velocities are in coarse lattice units (dx=dt=1). Independent local copies ++ are projected at fine cell centers. Their complete stencil must be active ++ and disjoint from the actual two-hop transfer footprint. + + ``initialize(coarse_g, fine_g)`` accepts physical Q-major (9,ny,nx) arrays + already in postcollision phase. It does not collide or build channel flags. +@@ -41,7 +46,7 @@ + On a device/launch failure the instance becomes unusable: close and recreate + it, rather than pretending the partially advanced fine buffer rolled back. + """ +- def __init__(self, cfg, bounds, *, context, coarse_boundary="periodic"): ++ def __init__(self, cfg, bounds, *, context, coarse_boundary="periodic", fine_objects=()): + if HALO != 4: + raise RuntimeError("refinement.cu requires a four-cell fine halo") + if coarse_boundary not in ("periodic", "slot_reservoir"): +@@ -55,6 +60,11 @@ + "velocity=0 and 2 <= wall_slot_width < nx") + if self.patch.bounds[1] < 4 or self.patch.bounds[3] > cfg.ny - 4: + raise ValueError("slot_reservoir requires y0 >= 4 and y1 <= ny-4") ++ self.fine_boundary = prepare_fine_boundary( ++ cfg, self.patch, tuple(fine_objects), wall_aware=self._wall_aware) ++ self._fine_leaf = self.patch.fine_kind == ACTIVE ++ if self.fine_boundary is not None: ++ self._fine_leaf &= (self.fine_boundary.flags.reshape(self.patch.fine_shape) & SOLID) == 0 + self.ctx = context + self._lock = RLock() + self._status = "new" +@@ -62,6 +72,7 @@ + self._allocations = [] + self._levels = [] + self._stream = None ++ self._fine_flags = self._fine_curved = self._curved = None + self._block = (cfg.threads_per_block, 1, 1) + fine_cfg = replace(cfg, nx=self.patch.fine_shape[1], ny=self.patch.fine_shape[0], + viscosity=2 * cfg.viscosity) +@@ -76,7 +87,9 @@ + config.validate() + if not np.isclose(config.omega, 1 / tau, rtol=1e-14, atol=0): + raise RuntimeError("level omega/tau mismatch") +- build = compiler.generate_config(config, n_objects=0) ++ n_objects = (len(self.fine_boundary.objects) ++ if name == "PatchFineStep" and self.fine_boundary is not None else 0) ++ build = compiler.generate_config(config, n_objects=n_objects) + try: + ptx = compiler.compile_kernel(self.ctx.sm_arch, source="refinement.cu", + build_dir=build) +@@ -86,7 +99,7 @@ + ptr, size = module.get_global("d_params") + if size != struct.calcsize("=ffffI"): + raise RuntimeError("LBMParams host/device layout mismatch") +- cuda.memcpy_htod(ptr, struct.pack("=ffffI", config.omega, 0, 0, 0, 0)) ++ cuda.memcpy_htod(ptr, struct.pack("=ffffI", config.omega, 0, 0, 0, n_objects)) + shape = (9, config.ny, config.nx) + size = int(np.prod(shape)) * 4 + self._levels.append(_Level(shape, module, self._allocate(size), +@@ -100,6 +113,16 @@ + self._targets = self._upload(p.coalesce_coarse[order]) + self._children = self._upload(p.coalesce_fine[order]) + self._explode = self._levels[1].module.get_function("PatchExplode") ++ if self.fine_boundary is not None: ++ from .curved_links import CurvedLinkSoA ++ boundary = self.fine_boundary ++ self._fine_flags = self._upload(boundary.flags) ++ # SoA owns its allocations; never also register them in _allocations. ++ self._fine_curved = CurvedLinkSoA() ++ self._fine_curved.assign_host(*boundary.curved_host) ++ self._fine_curved.assign_surface(boundary.objects, fine_cfg, boundary.flags) ++ self._fine_curved.upload() ++ self._curved = self._levels[1].module.get_function("CurvedBoundaryKernel") + except BaseException: + try: + self.close() +@@ -131,7 +154,7 @@ + coarse[:, y0:y1, x0:x1] = np.nan + if self._wall_aware: + coarse[:, (0, -1), :] = np.nan +- fine[:, self.patch.fine_kind != ACTIVE] = np.nan ++ fine[:, ~self._fine_leaf] = np.nan + + def initialize(self, coarse_g, fine_g): + """Upload an explicit G_0; invalid non-leaves are discarded.""" +@@ -146,7 +169,7 @@ + leaf[y0:y1, x0:x1] = False + if self._wall_aware: + leaf[[0, -1]] = False +- for array, mask in zip(arrays, (leaf, self.patch.fine_kind == ACTIVE)): ++ for array, mask in zip(arrays, (leaf, self._fine_leaf)): + if not np.isfinite(array[:, mask]).all() or (array[:, mask].sum(axis=0) <= 0).any(): + raise ValueError("Leaf populations must be finite with positive density") + self._mask_nonleaves(*arrays) +@@ -154,11 +177,32 @@ + for level, array in zip(self._levels, arrays): + cuda.memcpy_htod(level.current, array) + cuda.memcpy_htod(level.spare, array) ++ if self._fine_curved is not None and self._fine_curved.link_exchange_gpu is not None: ++ cuda.memset_d8(self._fine_curved.link_exchange_gpu, 0, self._fine_curved.count * 12) + self._step_count = 0 + self._status = "ready" + except BaseException: + self._status = "failed" + raise ++ ++ def _apply_fine_boundary(self, buffer, **kw): ++ """Stage solid source slots; exchange buffer holds this fine substep only.""" ++ cl = self._fine_curved ++ if cl is None: ++ if self.fine_boundary is not None: ++ raise RuntimeError("Fine boundary device buffers are missing") ++ return ++ if self._curved is None or cl.fluid_idx_gpu is None: ++ raise RuntimeError("Fine boundary device buffers are missing") ++ driven = any(obj.surface_actuation is not None for obj in self.fine_boundary.objects) ++ if driven and (cl.surface_velocity_gpu is None or cl.link_exchange_gpu is None): ++ raise RuntimeError("Surface boundary device buffers are missing") ++ self._curved(buffer, cl.fluid_idx_gpu, cl.dir_gpu, cl.q_gpu, ++ cl.rx_gpu, cl.ry_gpu, cl.rz_gpu, cl.fallback_class_gpu, cl.body_id_gpu, ++ np.uintp(0), np.uintp(0), np.uint32(cl.count), ++ cl.surface_velocity_gpu if cl.surface_velocity_gpu is not None else np.uintp(0), ++ cl.link_exchange_gpu if cl.link_exchange_gpu is not None else np.uintp(0), ++ grid=((cl.count + self._block[0] - 1) // self._block[0], 1), **kw) + + def step(self, n=1): + """Advance G→G: one explosion, two fine collisions, one coarse collision.""" +@@ -176,8 +220,13 @@ + np.uint32(len(p.ghost_fine)), np.uint64(np.prod(p.coarse_shape)), + grid=((len(p.ghost_fine) + self._block[0] - 1) // self._block[0], 1), + **kw) +- f.kernel(f.current, f.spare, grid=f.grid, **kw) +- f.kernel(f.spare, f.current, grid=f.grid, **kw) ++ flags = self._fine_flags if self._fine_flags is not None else np.uintp(0) ++ if self.fine_boundary is not None and self._fine_flags is None: ++ raise RuntimeError("Fine boundary flags are missing") ++ self._apply_fine_boundary(f.current, **kw) ++ f.kernel(f.current, f.spare, flags, grid=f.grid, **kw) ++ self._apply_fine_boundary(f.spare, **kw) ++ f.kernel(f.spare, f.current, flags, grid=f.grid, **kw) + c.kernel(c.current, c.spare, f.current, self._targets, self._children, + np.uint32(len(p.coalesce_coarse)), + *(np.uint32(v) for v in p.bounds), np.uint32(self._wall_aware), +@@ -220,6 +269,13 @@ + error = exc + self._levels.clear() + self._explode = None ++ if getattr(self, "_fine_curved", None) is not None: ++ try: ++ self._fine_curved.free() ++ except Exception as exc: ++ error = error or exc ++ self._fine_curved = None ++ self._curved = self._fine_flags = None + for pointer in self._allocations: + try: + pointer.free() +--- a/src/CelerisLab/lbm/stepper.py ++++ b/src/CelerisLab/lbm/stepper.py +@@ -147,13 +147,17 @@ + ) + else: + assert cl.fluid_idx_gpu is not None ++ if cl.surface_velocity is not None and ( ++ cl.surface_velocity_gpu is None or cl.link_exchange_gpu is None): ++ raise RuntimeError("Surface boundary device buffers are missing") + self.curved_fn( + f.ddf_gpu, + cl.fluid_idx_gpu, cl.dir_gpu, cl.q_gpu, + cl.rx_gpu, cl.ry_gpu, cl.rz_gpu, cl.fallback_class_gpu, cl.body_id_gpu, + action_gpu, obs_gpu, + np.uint32(f.n_curved), +- cl.surface_velocity_gpu or np.uintp(0), cl.link_exchange_gpu or np.uintp(0), ++ cl.surface_velocity_gpu if cl.surface_velocity_gpu is not None else np.uintp(0), ++ cl.link_exchange_gpu if cl.link_exchange_gpu is not None else np.uintp(0), + block=(tpb, 1, 1), grid=grid_c, + **launch_kw, + ) +--- /dev/null ++++ b/tests/unit/test_fine_surface.py +@@ -0,0 +1,215 @@ ++"""CPU-only fine circle projection and transfer/boundary isolation contracts.""" ++from dataclasses import asdict, replace ++ ++import numpy as np ++import pytest ++ ++from CelerisLab.body.geometry.circle import CircleGeometry ++from CelerisLab.body.objects import SimObject, SurfaceActuation ++from CelerisLab.config import LBMConfig ++from CelerisLab.lbm import refinement ++from CelerisLab.lbm.descriptors import D2Q9_EX, D2Q9_EY, FLUID, SOLID ++from CelerisLab.lbm.refinement import ACTIVE, INNER_GHOST, FixedPatch2D ++ ++ ++def setup_patch(): ++ cfg = LBMConfig(nx=24, ny=24, viscosity=.05) ++ cfg.validate() ++ return cfg, FixedPatch2D.from_config(cfg, (4, 4, 20, 20)) ++ ++ ++def circle(center=(12.25, 12.25), radius=2.15, speed=.002): ++ return SimObject(0, geometry=CircleGeometry(*center, radius), center=center, ++ radius=radius, surface_actuation=SurfaceActuation(.7, .85, speed)) ++ ++ ++@pytest.mark.parametrize('speed', [.002, -.002]) ++def test_fine_projection_uses_cell_center_bridge_and_preserves_source(speed): ++ cfg, patch = setup_patch() ++ source = circle(center=(12.25, 12.25 if speed > 0 else 11.75), speed=speed) ++ expected_center = (20., 20. if speed > 0 else 19.) ++ assert patch.fine_origin == (2., 2.) ++ before = (source.center, source.radius, source.geometry.center, ++ source.geometry._radius, asdict(source.state), asdict(source.surface_actuation), ++ vars(cfg).copy()) ++ plan = refinement.prepare_fine_boundary(cfg, patch, [source]) ++ local, = plan.objects ++ assert local is not source and local.geometry is not source.geometry ++ np.testing.assert_allclose(local.center, expected_center, rtol=0, atol=1e-14) ++ np.testing.assert_allclose(local.geometry.center, expected_center, rtol=0, atol=1e-14) ++ assert local.radius == pytest.approx(4.3) ++ assert local.geometry._radius == pytest.approx(4.3) ++ assert local.surface_actuation.normal_velocity == speed # dt/dx is unchanged. ++ assert (source.center, source.radius, source.geometry.center, ++ source.geometry._radius, asdict(source.state), asdict(source.surface_actuation), ++ vars(cfg).copy()) == before ++ _, _, _, _, rx, ry, _, _ = plan.curved_host ++ np.testing.assert_allclose(np.hypot(rx, ry), 4.3, rtol=0, atol=6e-7) ++ # These world points lie on the ORIGINAL physical circle, including the +.5. ++ world_x = patch.fine_origin[0]+.5*(local.center[0]+rx.astype(float)+.5) ++ world_y = patch.fine_origin[1]+.5*(local.center[1]+ry.astype(float)+.5) ++ np.testing.assert_allclose(np.hypot(world_x-source.center[0], world_y-source.center[1]), ++ source.radius, rtol=0, atol=3e-7) ++ ++ ++def test_fine_boundary_receivers_sources_and_reverse_coverage(): ++ cfg, patch = setup_patch() ++ plan = refinement.prepare_fine_boundary(cfg, patch, [circle()]) ++ ny, nx = patch.fine_shape ++ flags = plan.flags ++ assert flags.shape == (nx*ny,) and flags.dtype == np.uint16 ++ solid = (flags & SOLID) != 0 ++ assert solid.any() ++ assert np.all(patch.fine_kind.ravel()[solid] == ACTIVE) ++ receivers, directions, q, _, _, _, _, fallback = plan.curved_host ++ cx, cy = np.asarray(D2Q9_EX), np.asarray(D2Q9_EY) ++ sources = receivers.astype(np.int64)+cx[directions]+nx*cy[directions] ++ assert np.all((flags[receivers] & FLUID) != 0) ++ assert not np.any(flags[receivers] & SOLID) ++ assert np.all(solid[sources]) ++ assert np.all(patch.fine_kind.ravel()[receivers] == ACTIVE) ++ assert np.all(patch.fine_kind.ravel()[sources] == ACTIVE) ++ # A source population slot has a unique writer, not just a unique cell. ++ assert len(set(zip(sources.tolist(), directions.tolist()))) == len(receivers) ++ expected = set() ++ for cell in np.flatnonzero((patch.fine_kind.ravel() == ACTIVE) & ~solid): ++ y, x = divmod(int(cell), nx) ++ for direction in range(1, 9): ++ sx, sy = x+int(cx[direction]), y+int(cy[direction]) ++ if 0 <= sx < nx and 0 <= sy < ny and solid[sy*nx+sx]: ++ expected.add((int(cell), direction)) ++ assert set(zip(receivers.tolist(), directions.tolist())) == expected ++ donors = receivers[q < .5].astype(np.int64)-cx[directions[q < .5]]-nx*cy[directions[q < .5]] ++ assert np.all(patch.fine_kind.ravel()[donors] == ACTIVE) ++ assert not np.any(solid[donors]) ++ assert not fallback.any() ++ stencil = set(receivers.tolist()) | set(sources.tolist()) | set(donors.tolist()) ++ assert stencil == set(plan.boundary_cells.tolist()) ++ assert not set(plan.boundary_cells.tolist()) & set(plan.transfer_fine_cells.tolist()) ++ assert not set(np.flatnonzero(solid).tolist()) & set(plan.transfer_fine_cells.tolist()) ++ ++ ++def test_transfer_dependencies_follow_two_pulls_and_expand_active_collision(): ++ cfg, patch = setup_patch() ++ plan = refinement.prepare_fine_boundary(cfg, patch, [circle()]) ++ ny, nx = patch.fine_shape ++ cells = nx*ny ++ # Closed form for exactly two hops, independent of the production traversal: ++ # the final inner ghost only pulls; its predecessor may have collided. ++ offsets = np.asarray(D2Q9_EX)+nx*np.asarray(D2Q9_EY) ++ visited = set() ++ for slot in patch.coalesce_fine.ravel(): ++ direction, target = divmod(int(slot), cells) ++ assert patch.fine_kind.ravel()[target] == INNER_GHOST ++ middle = target-int(offsets[direction]) ++ visited.update(((2, direction, target), (1, direction, middle))) ++ if patch.fine_kind.ravel()[middle] == ACTIVE: ++ visited.update((0, q, middle-int(offsets[q])) for q in range(9)) ++ else: ++ assert patch.fine_kind.ravel()[middle] == INNER_GHOST ++ visited.add((0, direction, middle-int(offsets[direction]))) ++ actual = {tuple(map(int, row)) for row in plan.transfer_reads} ++ assert actual == visited ++ assert len(plan.transfer_reads) == len(visited) ++ expected_fine = set(patch.ghost_fine.tolist()) | {cell for _, _, cell in visited} ++ expected_coarse = set(patch.ghost_coarse.tolist()) | set( ++ (patch.coalesce_coarse % (cfg.nx*cfg.ny)).tolist()) ++ assert set(plan.transfer_fine_cells.tolist()) == expected_fine ++ assert set(plan.transfer_coarse_cells.tolist()) == expected_coarse ++ for coarse_slot, children in zip(patch.coalesce_coarse, patch.coalesce_fine): ++ coarse_q, coarse_cell = divmod(int(coarse_slot), cfg.nx*cfg.ny) ++ coarse_y, coarse_x = divmod(coarse_cell, cfg.nx) ++ fine_q, fine_cell = np.divmod(children, cells) ++ np.testing.assert_array_equal(fine_q, coarse_q) ++ fine_y, fine_x = np.divmod(fine_cell, nx) ++ physical_centers = np.column_stack(( ++ patch.fine_origin[0]+.5*(fine_x+.5), ++ patch.fine_origin[1]+.5*(fine_y+.5))) ++ np.testing.assert_array_equal(physical_centers.mean(axis=0), ++ (coarse_x+.5, coarse_y+.5)) ++ # This case must exercise the collision fan-in, not only ghost straight lines. ++ active_middle = [(q, cell) for stage, q, cell in visited ++ if stage == 1 and patch.fine_kind.ravel()[cell] == ACTIVE] ++ assert active_middle ++ _, sample = active_middle[0] ++ for incoming in range(9): ++ source = sample-int(D2Q9_EX[incoming])-nx*int(D2Q9_EY[incoming]) ++ assert (0, incoming, source) in actual ++ ++ ++def test_fine_plan_arrays_are_readonly_and_contiguous(): ++ cfg, patch = setup_patch() ++ plan = refinement.prepare_fine_boundary(cfg, patch, [circle()]) ++ assert len(plan.curved_host) == 8 ++ for array in (plan.flags, *plan.curved_host, plan.boundary_cells, ++ plan.transfer_fine_cells, plan.transfer_coarse_cells, plan.transfer_reads): ++ assert array.flags.c_contiguous and not array.flags.writeable ++ assert array.size ++ with pytest.raises(ValueError): ++ array.flat[0] = array.flat[0] ++ ++ ++def test_empty_objects_keep_existing_refinement_path(): ++ cfg, patch = setup_patch() ++ assert refinement.prepare_fine_boundary(cfg, patch, []) is None ++ ++ ++def test_fine_rejects_cross_level_low_q_donor_without_fallback(): ++ cfg, patch = setup_patch() ++ source = circle(center=(5.05, 12.25), radius=.7) ++ # In fine coordinates C=(5.6,20), R=1.4. Receiver (4,20), dir +x ++ # has q=.2, but its required reverse donor (3,20) is not active. ++ local = CircleGeometry(5.6, 20., 1.4) ++ links = local.build_cut_links(patch.fine_shape[1], patch.fine_shape[0]) ++ target, = [link for link in links if link.fluid_idx == 20*40+4 and link.dir == 1] ++ assert target.q == pytest.approx(.2) ++ assert patch.fine_kind[20, 3] != ACTIVE ++ with pytest.raises(ValueError): ++ refinement.prepare_fine_boundary(cfg, patch, [source]) ++ ++ ++def test_fine_rejects_active_stencil_that_still_touches_transfer(): ++ cfg, patch = setup_patch() ++ source = circle(center=(6.05, 12.25), radius=.7) ++ # Move the cross-level example two fine cells inward: all boundary reads ++ # are now active, but the q=.2 reverse donor is still a transfer dependency. ++ local = CircleGeometry(7.6, 20., 1.4) ++ nx = patch.fine_shape[1] ++ solid = (local.build_flag_mask(nx, patch.fine_shape[0]) & SOLID) != 0 ++ assert np.all(patch.fine_kind.ravel()[solid] == ACTIVE) ++ links = local.build_cut_links(nx, patch.fine_shape[0]) ++ stencil = set() ++ for link in links: ++ offset = int(D2Q9_EX[link.dir])+nx*int(D2Q9_EY[link.dir]) ++ stencil.update((link.fluid_idx, link.fluid_idx+offset)) ++ if link.q < .5: ++ stencil.add(link.fluid_idx-offset) ++ assert np.all(patch.fine_kind.ravel()[list(stencil)] == ACTIVE) ++ with pytest.raises(ValueError, match='transfer footprint'): ++ refinement.prepare_fine_boundary(cfg, patch, [source]) ++ ++ ++@pytest.mark.parametrize('change', [dict(nx=25), dict(collision='TRT'), dict(viscosity=.06)]) ++def test_fine_rejects_mismatched_patch_configuration(change): ++ cfg, patch = setup_patch() ++ with pytest.raises(ValueError, match='matching'): ++ refinement.prepare_fine_boundary(replace(cfg, **change), patch, [circle()]) ++ ++ ++def test_fine_rejects_nonzero_control_even_without_motion(): ++ cfg, patch = setup_patch() ++ obj = circle() ++ obj.control.ax = .001 ++ with pytest.raises(ValueError, match='stationary'): ++ refinement.prepare_fine_boundary(cfg, patch, [obj]) ++ ++ ++@pytest.mark.parametrize('objects', [ ++ [circle(center=(4.25, 12.25), radius=1.)], ++ [circle(center=(12.5, 12.5), radius=.05)], ++ [circle(), circle(center=(13., 12.25))], ++]) ++def test_fine_rejects_ghost_solids_unresolved_circle_and_overlap(objects): ++ cfg, patch = setup_patch() ++ with pytest.raises(ValueError): ++ refinement.prepare_fine_boundary(cfg, patch, objects) +--- /dev/null ++++ b/tests/validation/multigrid/test_fine_surface_gpu.py +@@ -0,0 +1,330 @@ ++"""Two coarse/four fine steps: isolated fine circle, no flux-accuracy claim. ++ ++Run only through the bounded GPU runner after a fresh resource check. The test ++hooks read actual kernel inputs/outputs; they never change the stepping order. ++""" ++import importlib.util ++from contextlib import nullcontext ++from pathlib import Path ++from threading import RLock ++from types import SimpleNamespace ++from unittest.mock import Mock, patch ++ ++import numpy as np ++import pycuda.driver as cuda ++import pytest ++ ++import CelerisLab ++from CelerisLab.body.geometry.circle import CircleGeometry ++from CelerisLab.body.objects import SimObject ++from CelerisLab.config import LBMConfig ++from CelerisLab.cuda import compiler_v2 as compiler ++from CelerisLab.cuda.context import CudaContext ++from CelerisLab.lbm import refinement_stepper as implementation ++from CelerisLab.lbm.descriptors import FLUID, SOLID ++ ++ ++ROOT = Path(__file__).resolve().parents[3] ++CX = np.array([0, 1, -1, 0, 0, 1, -1, 1, -1]) ++CY = np.array([0, 0, 0, 1, -1, 1, -1, -1, 1]) ++OPP = np.array([0, 2, 1, 4, 3, 6, 5, 8, 7]) ++W = np.array([4/9]+[1/9]*4+[1/36]*4) ++MOMENTS = np.stack((np.ones(9), CX, CY)) ++GEOMETRY = ("fluid_idx", "dir", "q", "body_id", "rx", "ry", "rz", "fallback_class") ++BOUNDS = (4, 4, 20, 20) ++ ++ ++def read(pointer, shape, dtype=np.float32): ++ values = np.empty(shape, dtype) ++ cuda.memcpy_dtoh(values, pointer) ++ return values ++ ++ ++def rest(shape): ++ return np.broadcast_to(W[:, None, None], (9, *shape)).astype(np.float32).copy() ++ ++ ++def surface(speed): ++ return None if speed is None else dict(angle=.7, half_width=.85, normal_velocity=speed) ++ ++ ++def object_spec(speed): ++ return SimObject(0, CircleGeometry(12.25, 12.25, 2.15), center=(12.25, 12.25), ++ radius=2.15, surface_actuation=surface(speed)) ++ ++ ++def audit_compiler(original): ++ def compile_private(*args, **kwargs): ++ entry = Path(kwargs["build_dir"])/"fine_surface_audit.cu" ++ entry.write_text('#define CELERIS_REFINEMENT_AUDIT\n#include "refinement.cu"\n') ++ kwargs["source"] = entry.name ++ return original(*args, **kwargs) ++ return compile_private ++ ++ ++def reflection_oracle(before, cl, speed, *, verify_projection=True): ++ """FP64 BFL from frozen spatial populations, independent arc projection.""" ++ flat = before.astype(float).reshape(9, -1) ++ radius = np.hypot(cl.rx.astype(float), cl.ry.astype(float)) ++ delta = (np.arctan2(cl.ry.astype(float), cl.rx.astype(float))-.7+np.pi) % (2*np.pi)-np.pi ++ amplitude = 0 if speed is None else speed ++ strength = amplitude*np.maximum(0, 1-(delta/.85)**2)**2 ++ velocity = strength[:, None]*np.column_stack((cl.rx, cl.ry))/radius[:, None] ++ if verify_projection and cl.surface_velocity is not None: ++ np.testing.assert_allclose(cl.surface_velocity, velocity, atol=3e-9, rtol=0) ++ incoming = [] ++ for i, (k, d, q, fallback) in enumerate(zip(cl.fluid_idx, cl.dir, cl.q, cl.fallback_class)): ++ k, d, q = int(k), int(d), float(q) ++ rho = flat[:, k].sum() ++ dot = CX[d]*velocity[i, 0]+CY[d]*velocity[i, 1] ++ if fallback: ++ value = flat[d, k]-6*W[d]*rho*dot ++ elif q < .5: ++ value = 2*q*flat[d, k]+(1-2*q)*flat[d, k-CX[d]-40*CY[d]]-6*W[d]*rho*dot ++ else: ++ value = flat[d, k]/(2*q)+(1-1/(2*q))*flat[OPP[d], k]-3*W[d]*rho*dot/q ++ incoming.append(value) ++ return np.array(incoming) ++ ++ ++def fine_flux(before, staged, active, solid): ++ """Population ledger across the fine leaf boundary: solid versus halo. ++ ++ Internal fluid-to-fluid streaming cancels pairwise; solid and halo packets ++ are counted in their actual direction, before any collision. ++ """ ++ boundary, transfer = np.zeros(9), np.zeros(9) ++ magnitude = 0.0 ++ for d, (cx, cy) in enumerate(zip(CX, CY)): ++ incoming = active & ~np.roll(active, (cy, cx), (0, 1)) ++ outgoing = active & ~np.roll(active, (-cy, -cx), (0, 1)) ++ from_solid = np.roll(solid, (cy, cx), (0, 1)) ++ into_solid = np.roll(solid, (-cy, -cx), (0, 1)) ++ received = np.roll(staged[d], (cy, cx), (0, 1)).astype(float) ++ sent = before[d].astype(float) ++ for vector, inc, out in ((boundary, incoming & from_solid, outgoing & into_solid), ++ (transfer, incoming & ~from_solid, outgoing & ~into_solid)): ++ assert np.isfinite(received[inc]).all() and np.isfinite(sent[out]).all() ++ vector[d] = received[inc].sum()-sent[out].sum() ++ magnitude += np.abs(received[inc]).sum()+np.abs(sent[out]).sum() ++ return boundary, transfer, magnitude ++ ++ ++def coarse_flux(before, fine, active): ++ """Derive every replacement from physical midpoints, not production tables.""" ++ x0, y0, x1, y1 = BOUNDS ++ incoming = np.stack([np.roll(before[d], (CY[d], CX[d]), (0, 1)) for d in range(9)]).astype(float) ++ magnitude = 0.0 ++ for y, x in np.argwhere(active): ++ for d in range(1, 9): ++ if x0 <= x+.5-CX[d]/2 <= x1 and y0 <= y+.5-CY[d]/2 <= y1: ++ a, b = 4+2*(x-x0), 4+2*(y-y0) ++ children = fine[d, b:b+2, a:a+2].astype(float) ++ assert children.shape == (2, 2) and np.isfinite(children).all() ++ incoming[d, y, x] = children.sum()/4 ++ magnitude += np.abs(children).sum()/4 ++ assert np.isfinite(incoming[:, active]).all() ++ # This retains the eight grazing-corner replacements of uncovered donors. ++ flux = (incoming[:, active]-before[:, active].astype(float)).sum(axis=1) ++ magnitude += np.abs(incoming[:, active]).sum()+np.abs(before[:, active]).sum(dtype=float) ++ return flux, magnitude ++ ++ ++def run_patch(speed, *, audit=True): ++ cfg = LBMConfig(nx=24, ny=24, viscosity=.05, velocity=0, rho=1) ++ coarse_active = np.ones((24, 24), bool) ++ coarse_active[4:20, 4:20] = False ++ source = object_spec(speed) ++ state = vars(source.state).copy() ++ with CudaContext(0) as context: ++ build = (patch.object(compiler, "compile_kernel", audit_compiler(compiler.compile_kernel)) ++ if audit else nullcontext()) ++ with build: ++ backend = implementation.FixedPatchStepper(cfg, BOUNDS, context=context, fine_objects=[source]) ++ with backend, context.activate(): ++ c, f = backend._levels ++ cl = backend._fine_curved ++ geometry = {name: getattr(cl, name).copy() for name in GEOMETRY} ++ flags = backend.fine_boundary.flags.reshape(40, 40) ++ solid = (flags & SOLID) != 0 ++ active = np.zeros((40, 40), bool) ++ active[4:-4, 4:-4] = True ++ active &= (flags & FLUID) != 0 ++ active &= ~solid ++ local = backend.fine_boundary.objects[0] ++ assert local.center == (20., 20.) and local.radius == 4.3 ++ assert source.center == (12.25, 12.25) and source.radius == 2.15 ++ yy, xx = np.mgrid[:40, :40] ++ roi = active & ((xx-20)**2+(yy-20)**2 <= 9**2) ++ backend.initialize(rest((24, 24)), rest((40, 40))) ++ if audit: ++ for level in backend._levels: ++ for name in ("collision_counts", "explosion_counts", "incoming_counts"): ++ pointer, size = level.module.get_global(name) ++ cuda.memset_d8(pointer, 0, size) ++ initial = backend.download() ++ initial_pop = initial[0][:, coarse_active].sum(axis=1, dtype=float) ++ initial_pop += .25*initial[1][:, active].sum(axis=1, dtype=float) ++ boundary, fine_transfer, coarse_transfer = np.zeros(9), np.zeros(9), np.zeros(9) ++ budget_sum, reflection_error, drive_mass = 0., 0., 0. ++ traces = [] ++ original_curved, original_fine, original_coarse = backend._curved, f.kernel, c.kernel ++ ++ def curved(*args, **kwargs): ++ nonlocal boundary, fine_transfer, budget_sum, reflection_error, drive_mass ++ backend._stream.synchronize() ++ before = read(args[0], f.shape) ++ expected = reflection_oracle(before, cl, speed) ++ original_curved(*args, **kwargs) ++ backend._stream.synchronize() ++ staged = read(args[0], f.shape) ++ d, k = cl.dir.astype(int), cl.fluid_idx.astype(int) ++ values = staged.reshape(9, -1)[OPP[d], k+CX[d]+40*CY[d]] ++ passive = reflection_oracle(before, cl, None, verify_projection=False) ++ drive_mass += .25*float(np.sum(values-passive)) ++ error = float(np.max(np.abs(values-expected))) ++ reflection_error = max(reflection_error, error) ++ assert error <= 1e-7 ++ np.testing.assert_array_equal(staged[:, active], before[:, active]) ++ b, transfer, magnitude = fine_flux(before, staged, active, solid) ++ boundary += .25*b ++ fine_transfer += .25*transfer ++ budget_sum += .25*magnitude ++ ++ def fine(*args, **kwargs): ++ nonlocal budget_sum ++ backend._stream.synchronize() ++ staged = read(args[0], f.shape) ++ original_fine(*args, **kwargs) ++ backend._stream.synchronize() ++ advanced = read(args[1], f.shape) ++ assert np.isfinite(advanced[:, active]).all() ++ assert np.isnan(advanced[:, solid]).all() ++ # Include actual collision operands in the FP32 rounding budget. ++ budget_sum += .25*np.abs(staged[:, active]).sum(dtype=float) ++ traces.append(advanced[:, roi].copy()) ++ ++ def coarse(*args, **kwargs): ++ nonlocal coarse_transfer, budget_sum ++ backend._stream.synchronize() ++ before, fine_values = read(args[0], c.shape), read(args[2], f.shape) ++ transfer, magnitude = coarse_flux(before, fine_values, coarse_active) ++ coarse_transfer += transfer ++ budget_sum += magnitude ++ return original_coarse(*args, **kwargs) ++ ++ with patch.object(backend, "_curved", curved), patch.object(f, "kernel", fine), \ ++ patch.object(c, "kernel", coarse): ++ backend.step(2) ++ actual = backend.download() ++ population = actual[0][:, coarse_active].sum(axis=1, dtype=float) ++ population += .25*actual[1][:, active].sum(axis=1, dtype=float) ++ ledger = boundary+fine_transfer+coarse_transfer ++ error = MOMENTS@(population-initial_pop-ledger) ++ budget = 8*np.finfo(np.float32).eps*budget_sum ++ assert np.isfinite(budget_sum) and budget_sum > 0 ++ assert np.max(np.abs(error)) <= budget ++ if speed: ++ assert speed*drive_mass > 0 ++ assert len(traces) == 4 and backend.step_count == 2 ++ if audit: ++ for level, mask, count in ((c, coarse_active, 2), (f, active, 4)): ++ pointer, size = level.module.get_global("collision_counts") ++ counts = read(pointer, mask.shape, np.uint32) ++ assert size == counts.nbytes ++ np.testing.assert_array_equal(counts, count*mask) ++ for name, values in geometry.items(): ++ np.testing.assert_array_equal(getattr(cl, name), values) ++ assert vars(source.state) == state and source.geometry.center == source.center ++ print(f"speed={speed} audit={audit} BFL={reflection_error:.9g} ledger={error.tolist()} " ++ f"budget={budget:.9g} boundary={list(MOMENTS@boundary)} " ++ f"transfer={list(MOMENTS@(fine_transfer+coarse_transfer))} " ++ f"drive_mass={drive_mass:+.9g}; counts={'PASS' if audit else 'normal build'}", flush=True) ++ return traces, roi, actual ++ ++ ++def uniform_reference(speed, roi): ++ # Reuse the existing explicit config helper without importing unrelated tests. ++ spec = importlib.util.spec_from_file_location("fine_surface_cases", ROOT/"tests/integration/_cases.py") ++ cases = importlib.util.module_from_spec(spec) ++ spec.loader.exec_module(cases) ++ with cases.make_sim(nx=48, ny=48, viscosity=.1, velocity=0, rho=1) as sim: ++ sim.add_body("circle", center=(24, 24), radius=4.3, surface_actuation=surface(speed)) ++ sim.initialize() ++ # Uniform 48^2 has the same dx=dt=.5 representation. Its distant channel ++ # boundaries cannot influence the circle ROI within these four hops. ++ traces = [] ++ for _ in range(4): ++ sim.run(1) ++ traces.append(sim.get_ddf().reshape(9, 48, 48)[:, 4:44, 4:44][:, roi].copy()) ++ return traces ++ ++ ++@pytest.mark.parametrize("speed", [0., .002, -.002]) ++def test_fine_surface_four_hops(speed): ++ assert Path(CelerisLab.__file__).resolve() == ROOT/"src/CelerisLab/__init__.py" ++ assert Path(compiler._KERNEL_DIR).resolve() == ROOT/"src/CelerisLab/lbm/kernels" ++ assert Path(implementation.__file__).resolve() == ROOT/"src/CelerisLab/lbm/refinement_stepper.py" ++ actual, roi, final = run_patch(speed) ++ reference = uniform_reference(speed, roi) ++ for got, wanted in zip(actual, reference): ++ np.testing.assert_allclose(got, wanted, atol=3e-6, rtol=0) ++ np.testing.assert_allclose(MOMENTS@got.astype(float), MOMENTS@wanted.astype(float), ++ atol=2e-5, rtol=0) ++ if speed == 0: ++ passive, passive_roi, passive_final = run_patch(None, audit=False) ++ np.testing.assert_array_equal(passive_roi, roi) ++ for got, wanted in zip(actual+list(final), passive+list(passive_final)): ++ np.testing.assert_array_equal(got, wanted) ++ ++ ++@pytest.mark.parametrize("missing", ["surface_velocity_gpu", "link_exchange_gpu"]) ++def test_missing_surface_device_buffer_rejects_before_launch(missing): ++ backend = implementation.FixedPatchStepper.__new__(implementation.FixedPatchStepper) ++ backend.fine_boundary = SimpleNamespace(objects=[object_spec(.002)]) ++ backend._fine_curved = SimpleNamespace(fluid_idx_gpu=object(), ++ surface_velocity_gpu=object(), link_exchange_gpu=object()) ++ setattr(backend._fine_curved, missing, None) ++ backend._curved = Mock() ++ with pytest.raises(RuntimeError, match="Surface boundary device buffers are missing"): ++ backend._apply_fine_boundary(object()) ++ backend._curved.assert_not_called() ++ ++ ++def test_close_frees_fine_boundary_after_stream_failure_once(): ++ backend = implementation.FixedPatchStepper.__new__(implementation.FixedPatchStepper) ++ backend.ctx = SimpleNamespace(activate=nullcontext) ++ backend._lock = RLock() ++ backend._status = "ready" ++ stream, soa, first, second = Mock(), Mock(), Mock(), Mock() ++ stream.synchronize.side_effect = RuntimeError("stream synchronization failed") ++ backend._stream = stream ++ backend._fine_curved = soa ++ backend._fine_flags = first ++ backend._curved = Mock() ++ backend._levels = [object(), object()] ++ backend._allocations = [first, second] ++ with pytest.raises(RuntimeError, match="stream synchronization failed"): ++ backend.close() ++ assert backend._status == "closed" ++ assert backend._levels == [] and backend._allocations == [] ++ assert backend._fine_curved is None and backend._fine_flags is None ++ assert backend._curved is None and backend._stream is None ++ backend.close() ++ stream.synchronize.assert_called_once_with() ++ soa.free.assert_called_once_with() ++ first.free.assert_called_once_with() ++ second.free.assert_called_once_with() ++ ++ ++def test_cross_interface_donor_rejects_before_cuda(): ++ cfg = LBMConfig(nx=24, ny=24, viscosity=.05) ++ source = SimObject(0, CircleGeometry(5.05, 12.25, .7), ++ center=(5.05, 12.25), radius=.7, surface_actuation=surface(.002)) ++ context = Mock() ++ context.activate.side_effect = AssertionError("must reject before CUDA activation") ++ with patch.object(cuda, "mem_alloc") as allocate: ++ with pytest.raises(ValueError, match="donor crosses"): ++ implementation.FixedPatchStepper(cfg, BOUNDS, context=context, fine_objects=[source]) ++ context.activate.assert_not_called() ++ allocate.assert_not_called() diff --git a/research/fine_surface_20261014/manifest.json b/research/fine_surface_20261014/manifest.json new file mode 100644 index 0000000..8281338 --- /dev/null +++ b/research/fine_surface_20261014/manifest.json @@ -0,0 +1,102 @@ +{ + "head": "6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0", + "changes": [ + { + "path": "src/CelerisLab/lbm/kernels/refinement.cu", + "added": 10, + "removed": 2, + "sha256": "129f3d91da93b4324f88a0da73a4da1e5390f72c14cce574ee63306712da9895", + "characters": 4482 + }, + { + "path": "src/CelerisLab/lbm/kernels/step/aux_kernels.cu", + "added": 1, + "removed": 55, + "sha256": "578a5b20a157241ee678547059abb1372dd5a589ad06bb2c15b987eb01ca1013", + "characters": 10982 + }, + { + "path": "src/CelerisLab/lbm/kernels/step/curved_double.cu", + "added": 61, + "removed": 0, + "sha256": "bfa7a1df1e939020314d49755045f7a85fe4a19cc1c68dbe62653c66c5e7c2b3", + "characters": 2153 + }, + { + "path": "src/CelerisLab/lbm/refinement.py", + "added": 157, + "removed": 3, + "sha256": "8935b070ec9e7020897919c15f43f7fa6293f02e2ff64a19a3e3d99bc444dbcc", + "characters": 14161 + }, + { + "path": "src/CelerisLab/lbm/refinement_stepper.py", + "added": 66, + "removed": 10, + "sha256": "9178224089ee6584420b79f10cf1d91441645b668e8b6898641d19eac757687b", + "characters": 14875 + }, + { + "path": "src/CelerisLab/lbm/stepper.py", + "added": 5, + "removed": 1, + "sha256": "0dcb7cd7ae87e33e3dc67a38b6aa43042fbe673e37d9ad165342ee1d695933ce", + "characters": 7724 + }, + { + "path": "tests/unit/test_fine_surface.py", + "added": 215, + "removed": 0, + "sha256": "b232b55e75eef52480f06a35c401d72b6145892bb8b79d1d1b3cfed965b3506c", + "characters": 10596 + }, + { + "path": "tests/validation/multigrid/test_fine_surface_gpu.py", + "added": 330, + "removed": 0, + "sha256": "d45ca48fc4e77d021fcc5461329b094ae11b257c036bb23634d326fbbedb7700", + "characters": 16204 + } + ], + "unchanged_baseline_files": 377, + "baseline_file_count": 382, + "post_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/objects.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?? examples/\n?? research/\n?? src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh\n?? src/CelerisLab/lbm/kernels/refinement.cu\n?? src/CelerisLab/lbm/kernels/step/curved_double.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/integration/test_surface_actuation_gpu.py\n?? tests/unit/cpp/\n?? tests/unit/test_build_contracts.py\n?? tests/unit/test_context_ownership.py\n?? tests/unit/test_fine_surface.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/unit/test_surface_actuation.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", + "patch_sha256": "9cf8b5cc4ea037c865762ba7069f0c1daabcb4383d4333167d279f8b7704e5b0", + "cleanup": { + "baseline_copy_dir": "/tmp/celeris-fine-surface-baseline-z98oi6ps", + "baseline_copy_bytes": 1581541, + "runner": "/tmp/celeris-fine-surface-gpu-run.py", + "baseline_copies_removed": true, + "runner_removed": true, + "gpu_scratch_removed": true + }, + "shared_kernel_exact_extraction": true, + "diff_reverse_check": "passed", + "evidence_hashes": { + "cpu_surface_projection_command.txt": "b1783e26e92737106a5614fff01452c8ea0364372d9bdbc44c7d15c19d9b13f5", + "cpu_surface_projection_exit.txt": "9a271f2a916b0b6ee6cecb2426f0b3206ef074578be55d9bc94f6f3fe3ab86aa", + "report.txt": "ad8af2be7239f8fe728ac7a8db340d4458e6ec1bbb30b14e614c1072dd9804ec", + "cpu_existing_runs.json": "523b3179b976c2198112c7b49c6c8a75cf7d3332663a8b8a0646c94a39abd1b4", + "gpu_run.json": "8c4b4d7c53e17c30ce4c7d2fb92466e0704f39966e89016dbf82d36cf96e35bf", + "gpu_stdout.txt": "02d1f6fea194d1185a49b7bcdde58642f1d6b9634fe55e4bcda2f020414eb35d", + "cpu_device_guard_cmd.txt": "43a0fb0e20c4adcf1930f145796378294558060d5fd5303402e0538674b68c0a", + "cpu_surface_command.txt": "2b8f2a3c9ddfd1e877efa2a50a935eeb937e2b3ea92515610cd334d80703d6ce", + "baseline.json": "dc9dfa88e69d2b7cf93b0c572961c0bc7849ea1608a0b14b1a6dca1429abf87c", + "cpu_lifecycle_stdout.txt": "af52542989b4a2bf597e020c12064e7083e136f15b938ed5382b616a16f70e38", + "cpu_surface_projection_stdout.txt": "96ea3e4ca948962b6eb92aaf215efb6c598a3c4b296f6fd26094df353ded5722", + "cpu_lifecycle_run.json": "2a3b09ad2f9c86e43892d643a510c9e936d6153e2ae1f6a9eab90c3067f0473d", + "cpu_shared_kernel_stdout.txt": "1ab9905d8b0f34f6d791ff7da4efa2de0f7f3e282a078758cc0496cc0230c0f0", + "cpu_device_guard_stdout.txt": "f4c61c0ac8f55c6c9a2d6c593731bf5f8c4a6c5bebbe514284fd4f899818f9e0", + "gpu_test_run1.py": "3dd0658f63a4e7a1c41eecf433842c872f8fecb391ea4b44d0b48947643d5189", + "gpu_preparation_run1.py": "b3fe9e58118369adb1bdfc618fbfbd917d508a563beaf2555f656b59aeff4425", + "cpu_surface_exit.txt": "9a271f2a916b0b6ee6cecb2426f0b3206ef074578be55d9bc94f6f3fe3ab86aa", + "cpu_surface_stdout.txt": "bdb786f2d289eaeab4e53d0fdccb998525c217efaa778496cf7a97ccca9e1597", + "cpu_preallocation_run.json": "363106050ba00d9a1c5c948c36926e8510ed7fdd75d28cfeca59f593fd0f1c50", + "cpu_final_stdout.txt": "bdb786f2d289eaeab4e53d0fdccb998525c217efaa778496cf7a97ccca9e1597", + "cpu_maps_stdout.txt": "7886fd4e2fa8a63e9cecf02bdf650e5447ba149704ac75f51da6964d8e77ba6b", + "cpu_device_guard_exit.txt": "9a271f2a916b0b6ee6cecb2426f0b3206ef074578be55d9bc94f6f3fe3ab86aa", + "cpu_preallocation_stdout.txt": "59907462a8d5fd93406cdf4c7d1eb2f7b7a96664ae85c4ec202693d419cd019e", + "incremental.diff": "9cf8b5cc4ea037c865762ba7069f0c1daabcb4383d4333167d279f8b7704e5b0", + "cpu_final_run.json": "020a9ef12904c2d18185613d68a58dd7ff9b1b22197ac1f95bba61f2f593eaac" + } +} diff --git a/research/fine_surface_20261014/report.txt b/research/fine_surface_20261014/report.txt new file mode 100644 index 0000000..6b9e512 --- /dev/null +++ b/research/fine_surface_20261014/report.txt @@ -0,0 +1,115 @@ +2026-10-14 — 固定加密区内静止圆表面吹吸:受限整合交付 + +状态:当前代码与验证完成,停在独立审查点。A 的单层静止圆功能保持;本次只 +把完整边界 stencil 位于 fine active 的圆接入 FixedPatchStepper。未增加 +checkpoint、forcing、运动刚体、喷嘴内部、墙穿接口、blockforest 或临时 ledger。 +所有 B 反例与既有证据保留。 + +入口与单位 +FixedPatchStepper(cfg, bounds, context=context, fine_objects=[obj])。 +obj 是现有 SimObject/CircleGeometry;中心/半径用 coarse 物理坐标,速度沿用 +coarse lattice 单位(当前 dx=dt=1)。构造独立 fine-local 副本,不修改调用方对象。 +C_local=(C_phys-origin)/dx-.5,R_local=R_phys/dx,U_local=U_phys*dt/dx。 +真实 hit 反变换为 origin+dx*(hit_local+.5),lever arm 乘 dx,角度/q 不变。 +维持 D2Q9/SRT/FP32/unshifted/double_buffer、无 LES/forcing 的原 backend 范围。 + +生产改动:5 个现有文件 + 1 个共享文件,+300/−71,净 +229 行。 +- refinement.py:FineBoundary2D、prepare_fine_boundary;纯 CPU 建图和拒绝检查。 +- refinement_stepper.py:固定 fine 对象、flags/SoA 管理、两个 BFL 子步、solid + 叶掩码、初始化与释放;不接完整 Simulation/ObjectManager。 +- aux_kernels.cu → step/curved_double.cu:原 action_omega/CurvedBoundaryKernel + 代码块逐字相同,只抽取共享位置并增加 include guard,已比对确认。 +- refinement.cu:包含共享 BFL,PatchFineStep 接 flags;solid 不 pull/collide, + 输出 NaN;所有 Python launch 传完整参数。 +- 原 lbm/stepper.py:allocation 显式 is not None;驱动缓冲缺失报错。 + +数据/所有权 +explosion → BFL(current) → fine pull+collision → BFL(spare) → fine pull+collision +→ coarse pull/coalescence+collision。active fluid 每 coarse 步碰撞两次;solid +与 ghost 不碰撞。BFL 只填当前输入的 solid source 反射槽,下一子步重新填充。 +下载仅发布流体叶节点,coarse covered、fine solid/ghost 均 NaN。 +flags/level/transfer arrays 归 stepper._allocations;SoA 的列及速度/交换缓冲只 +归 SoA,未重复登记。initialize 清空最新交换缓存。无对象不创建这些新缓冲。 +内部交换缓冲仅代表最后一个 fine 子步,未新增公共 coarse 累计诊断。 +测试账本分别读取四个 fine 子步的实际 population,按面积 1/4 求和;不是用 +latest 值冒称区间总量,也不是喷嘴总推力。 + +有限依赖规则 +plan.transfer_reads 保存 (hop, direction, cell),从实际 coalesce_fine 的 hop 2 +源槽反向两次 pull;遇 active collision 展开全部 9 个输入,hop 0 停止。 +transfer_fine_cells 加入全部 ghost_fine/explosion 写集;coarse 集合包含实际 +ghost_coarse donors 与 coalesce_coarse targets。ghost 可以合法参与运输; +outer ghost 的各阶段有效性仍按原 kernel 判断。 +逐条检查 r active fluid、s=r+c active solid、反射写槽唯一、q<.5 的 r−c +仍在 active;不可用 fallback 掩盖跨层 donor。同层真实 solid 阻挡的原 fallback +语义不改。逆查所有 active-fluid→solid 邻接,确保与 cut links 完全一致。 +整个 solid 集合及 r/s/donor stencil 均不得碰到上述 transfer footprint。 +coarse donors/targets 必须 uncovered bulk;slot 模式另外拒绝其真实壁面 +reconstruction pull stencil。无对象旧 slot 模式保持原规则。 + +CPU 结果(原始 command/stdout/exit 见同目录) +- 新建图/单位/边界覆盖/拒绝检查:15 passed,最终代码复测 15 passed,exit 0。 + 同行补充的非对角圆心、origin=(2,2)、四子格平均等于 coarse I+.5 也通过。 +- 旧 maps:9 passed、23 subtests;共享 actual CUDA-header CPU 回归:1 passed。 +- 旧生命周期/边界模式:5 passed、5 subtests。 +- 新缺失驱动缓冲拒绝:2 passed,exit 0;同步失败后释放且不重复释放:通过。 +- 指定 donor 反例通过构造器检查,context.activate/mem_alloc 均未调用:1 passed。 + +真实 GPU 结果与首次批次失败说明 +使用现有 pycuda_3_10、显式 PYTHONPATH=/home/frank14f/CelerisLab/src;stdout +首先打印并断言实际包来源。设备 0 UUID GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, +开始时占用 5 MiB、util=0、无计算进程;未用其他设备。 +运行批次真实 exit=1:5 项 GPU 检查和 1 项 CPU cleanup 检查通过,另 2 项 CPU +缺失缓冲夹具失败,因为夹具未提供新增前置检查所需的 fluid_idx_gpu 字段。 +仅补齐夹具后,定向 CPU 重测这 2 项 exit=0;原日志/exit=1 保留,未重跑 GPU。 + +5 项 GPU 检查: +1–3. speed=0,+.002,−.002 的批准小案例,各 2 coarse/4 fine 步。 + coarse24²,patch[4,20)²,fine40²,origin(2,2),dx=dt=.5;物理圆心 + (12.25,12.25)、R2.15 → local(20,20)、R4.3;angle.7/half_width.85; + nu_phys=.05,tau_c=.65/tau_f=.8,rho1/u0/G=feq。 + 三个驱动使用私有 audit build 验证 fine fluid 碰撞4次、coarse fluid2次, + solid/ghost0次。零驱动另与正常 production build 的 same-solid/no-actuation + 路径逐元素相等。参考采用正常 A build 的48²、dx=dt=.5、circle local(24,24), + 对齐真实物理位置与时间(4 fine步=物理时间2),不是跨分辨率逐元素比较。 +4. 旧无对象 periodic 非居中矩形 normal build:1 coarse步,最大人口误差 + 1.14050047e−7,通过。 +5. 旧无对象 slot/reservoir normal build:8 coarse步,最大人口误差 + 1.78241457e−7、最大BC误差2.21654773e−7,通过。 + +主要数值: + speed max |BFL误差| max |累计质量/动量账本残差| 预定FP32预算 + 0 7.4505806e−9 1.6049482e−5 0.00221051117 + +.002 9.7307344e−9 1.5977304e−5 0.00221052543 + −.002 7.4505806e−9 1.6636681e−5 0.00221049693 +BFL阈值1e−7;同细分辨率、未触接口的圆周ROI人口atol3e−6、局部矩2e−5均通过。 +账本预算为8*eps32*实际参与加权population绝对值总和,未放宽。喷吸附加质量 +分别约+0.00620033871/−0.00618575338,符号正确。该短例净transfer项为0; +仍逐项统计真实非零出入人口,但喷吸扰动尚未触达接口。 + +拒绝证据 +- physical C=(5.05,12.25),R=.7 → fine C=(5.6,20),R=1.4:r=(4,20),c=(1,0), + hit=(4.2,20),q≈.2,donor=(3,20)为ghost,构造在任何CUDA调用前拒绝。 +- physical C=(6.05,12.25),R=.7:全部直接r/s/donor都active,仍因与真实 + 两hop transfer footprint相交而拒绝。说明通过边界检查不能仅靠包围盒或边距。 + +资源与记录 +GPU批次外部耗时25.395s;进程组RSS峰值386883584 bytes,RAM最小空闲 +63638339584 bytes,VRAM最小空闲15826 MiB,相关临时空间采样峰值3585985 bytes。 +按实际余量保护,无固定RSS/AS上限;120s与2GB本次临时量约束未触发。监测是 +采样方式,不是OS硬资源隔离。编译临时目录已清理;不会清理其他任务或旧证据。 +baseline.json保存382个src/tests/examples文件哈希;其中377个保持不变。 +manifest.json和incremental.diff只描述本轮;共享kernel抽取相等与反向patch检查通过。 +GPU执行后仅将建图时的孔口预检输入改成与实际八列完全一致的FP32 lever arm, +避免极窄孔口在分配前后得到不同覆盖判断;最终CPU15项复测通过。GPU算子、上传 +数组生成方式、步序和测试数值部分未变。gpu_test_run1.py/gpu_preparation_run1.py +是按GPU运行中已记录的SHA256逐项核对后的执行版快照,保留首次运行的精确来源。 + +参考与边界 +直接复用A已接受BFL。ref/OpenLB/src/boundary/defineU2D.hh:74–79用于真实hit +速度投影对照,offBoundaryPostProcessors2D.hh:115–127用于两分支stencil对照; +OpenLB commit fb62326f260bf0c5ec2666fc5e055c0813ff50a9,仅算法对照、未复制代码。 +现有CPUREF-0.3与实际refinement kernel的ghost不碰撞、两hop/每层tau、incoming +替换后coarse碰撞保持不变,未移植任何B候选。 +不声称喷流穿粗细接口精度、长时稳定性、空间收敛或性能已验证。设备free()自身 +抛错时沿用既有close限制,不保证完整释放或重试;上下文激活失败可保留资源重试。 diff --git a/research/fine_surface_joint_20261014/baseline_00.json b/research/fine_surface_joint_20261014/baseline_00.json new file mode 100644 index 0000000..4ae101e --- /dev/null +++ b/research/fine_surface_joint_20261014/baseline_00.json @@ -0,0 +1,182 @@ +{ + "src/CelerisLab.egg-info/PKG-INFO": "0b9a8a4e8d60bc531473688723ddef0aab02c7ccc4997e31c9b6a6c35011ca77", + "src/CelerisLab.egg-info/top_level.txt": "cd51958ca03afabbaa9618c60b8280e486f8cc0b0359b839e10f886e7c3948f8", + "src/CelerisLab.egg-info/dependency_links.txt": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "src/CelerisLab.egg-info/requires.txt": "36e1404178e5ea590b2fc04e8ba4d748ec9a82e7693136ccf0dfd204fe265c04", + "src/CelerisLab.egg-info/SOURCES.txt": "f36b29c1b34c4bd6b2acc3ccdd21c24ee5077df7e2a20a652d9fae77eedb8e21", + "src/CelerisLab/simulation.py": "c9d903f53fe356d7af281bea07943de1a62494127fb69848d7053fd46f7dec3e", + "src/CelerisLab/config.py": "2f1bba7515f5bc08cb3a8d140bcafe7fa0689e01b3b06494697bb2956a71530e", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/cuda/compiler_v2.py": "c4cc3ec4445c8d75e6a253dd87963877117a722bc73b9d4811806fc6045d08c1", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/lbm/refinement_stepper.py": "9178224089ee6584420b79f10cf1d91441645b668e8b6898641d19eac757687b", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/curved_links.py": "00d9c29d660b41190f32dd737b12f60e10ce4214b6c9a6ab2a63438813faa594", + "src/CelerisLab/lbm/stepper.py": "0dcb7cd7ae87e33e3dc67a38b6aa43042fbe673e37d9ad165342ee1d695933ce", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/refinement.py": "8935b070ec9e7020897919c15f43f7fa6293f02e2ff64a19a3e3d99bc444dbcc", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/refinement.cu": "129f3d91da93b4324f88a0da73a4da1e5390f72c14cce574ee63306712da9895", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/kernel_v2.ptx": "a599ee30ae66800f4d4220eb79dfed35ff32991661260f01ea58023ef780f0ca", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "7bccf7e7091c012d7a3d4874a881d4d46699021faedd83d125933fbdaa562711", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/step/curved_double.cu": "bfa7a1df1e939020314d49755045f7a85fe4a19cc1c68dbe62653c66c5e7c2b3", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "578a5b20a157241ee678547059abb1372dd5a589ad06bb2c15b987eb01ca1013", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "f9f8242b38e8e0cf8425b75e2b0215bc15363c62eaa0fb43c761b8e0931bfdc9", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/common/checkpoint.py": "b2f960aecd5ac27a3a7130b809ffad4709c44d522edef0359ab952654625410b", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/CONFIG.md": "41cafdbe525366c08aa9d0416ea026ccf0026ba7123b8a9b65f968a80d928e3a", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/body/objects.py": "d1cf7054cc8379a83c39acc66a7c88ae62fa004f110bb0c1def2ee57137401c5", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/manager.py": "6a40be708c71ef6f3b5f5f0aa9c92cfafc51f2ec2a958f99656cccb850986c16", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/body/__init__.py": "91d1155080b3ade83d13c84c39693046df122e4bed5ef583de2df1f9453c1b76", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_j1.py": "51b758a271ff358f931b3140a80082294a67e66c2fec0f8c19319e37f92aadc4", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_j2_slot.py": "b7d2d3aa06fcafc3ac62ed4a50892afbdb7f86e5720ce75a39ce317b6f571dad", + "tests/validation/run_j3_coverage.py": "329869519b7078e854d96241a7aad8ef93f35ac9be83f0be502c3a93523c3b13", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/analyze_j3_saved_frames.py": "438f67dac682b94c4950626f8de4fdcde48c3a4e9ecf8fdf1b0ada4b6e0e781a", + "tests/validation/diagnose_j3_lags.py": "286fcd65b3261667a847b9b26e213d0af92cf459faa6bbd774f78c8479ce31d7", + "tests/validation/run_j3_reservoir.py": "47535bc3569ce68c888d38978bc4f9077fd763a17829c20c081be52bb18a2903", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9", + "tests/validation/multigrid/test_cpu_reference.py": "ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca", + "tests/validation/multigrid/cpu_reference.py": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "tests/validation/multigrid/test_fine_surface_gpu.py": "d45ca48fc4e77d021fcc5461329b094ae11b257c036bb23634d326fbbedb7700", + "tests/validation/multigrid/cpu_reference_v0.2.py": "b6adbad7da625ef6a6b97958ea9625030ed92676d0cada48e061c87bcf7ca8c9", + "tests/validation/multigrid/test_open_corner_negative_control.py": "59a6f8ca80cdd63cb7827fbebf9b4b555c3793f19dd6bca801544ec10b5cbe1b", + "tests/validation/multigrid/test_refinement_followup.py": "6643e26cd877bf0d0f030e974f00a1d1c0f0350cc76d1c8affed3e8ba2f4393b", + "tests/validation/multigrid/local_stress_observable_v1.py": "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456", + "tests/validation/multigrid/test_refinement_gpu.py": "0021a39b3a131347196845cff6507c90c387b46b772fe1319d634178c5e13354", + "tests/validation/multigrid/shear_diagnostic_v0_2.py": "a8b1cf2f7abd00efc4d068bbd27bb2317144a6ca4c545d9b2e0dcf421eadebc6", + "tests/validation/multigrid/test_tron_additions.py": "8e7a6a90b85e64c7326719e7b8bca2f6d34fb4c80690f0685f7e291ab93bd2a4", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt": "0577df5b3f5cb3c7b6e1ef2de71344f8fd3e6d959117487a06cbaf7f2afa3dea", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt": "28ddd1267ca91a772f5a6bfc65d949c9a4ea7dac5c9ba3a0bdb168492810b670", + "tests/validation/multigrid/shear_v0_2_evidence/run_once.py": "6698a2e040c56be949b809387d4518eb0ba82d34cc9d99640da4f8bf3c35c23f", + "tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json": "56fbd0259ff3d4dbd14ace52f64e249a435e9df91732b0e4027def2c344c2e6a", + "tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json": "c2d7ce8d16a0f47baff0788a153353dcf67088da974d9cd3d521b04ecd91ee05", + "tests/validation/multigrid/shear_v0_2_evidence/comparison.json": "41c00372099dd04b6d323785e9eaf4fec09da1753d3d150ffa230800f904142f", + "tests/validation/multigrid/shear_v0_2_evidence/baseline.json": "98a7853341ea732762c7506694e3a867a7259bf110e9e461ea84f741fd9ab829", + "tests/validation/multigrid/shear_v0_2_evidence/manifest.json": "e42aa19e91608164698bea42da88fbbfab8b0f87cc37b27c5baf165453a4fdb0", + "tests/validation/multigrid/shear_v0_2_evidence/README.txt": "4306a34b6896bd6e7a5c2ca71d68e18450359239d0c7ad7a67a4e83e7155959a", + "tests/validation/multigrid/shear_v0_2_evidence/joint_report.md": "1860b8082108c8b8a87998af90cd0b81dce1c04e9f6c67b41e0912f9fef6cc9c", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_horsea.txt": "882f2cfb1dbdf82cce63c011397e7c2e6307bbcfec42a3510648d328cd6ddcfe", + "tests/validation/multigrid/local_stress_v1_evidence/run_once.py": "e629800291ef65ffea8555f66ec80bf15200552540b2a493a677bfb53d0830b3", + "tests/validation/multigrid/local_stress_v1_evidence/source_manifest.json": "d2cf90b73458f493c665c9a281d06aef0c190cf0d143639fb77ab838c78f020c", + "tests/validation/multigrid/local_stress_v1_evidence/results_horsea.json": "f17b4644d19eb75d55deb7021ab679cb9e7922a2b46f1cacf8b6da6bfb9a2690", + "tests/validation/multigrid/local_stress_v1_evidence/comparison.json": "be236671a501c31c06f7e266f6e0c0c2a89aede321a483452050ff37bf84c84a", + "tests/validation/multigrid/local_stress_v1_evidence/baseline.json": "64f6541447afbd15b1b15d802ad6f1b5042aaf84e7d4d2414e4ed4c52cf70507", + "tests/validation/multigrid/local_stress_v1_evidence/manifest.json": "3a9fa8c7d691c1b8c24f05940eb724d30b890dd8ed636551068d2633d7db2f70", + "tests/validation/multigrid/local_stress_v1_evidence/README.txt": "4f62314876047ee437bb9ecbf84798d2a9f6e85f6a3aef260277b85bcdb35fae", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_local_stress_observable_v1.txt": "6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4", + "tests/validation/multigrid/local_stress_v1_evidence/TABLE_local_stress_observable_v1.md": "d8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt": "457f1d2173496554c87ca6e61df518c0b8f1e0a28cdfd94b94ebbb61bc459d70", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt": "73e4ef01138842981daaa534390f1463839e63833c11f4e8872f94f8eaadc717", + "tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json": "914389afc39752bcd4132aa21fc8d5cbcf0ca75b1efd6a49becab15c2fa3361b", + "tests/validation/multigrid/cpuref_0_3_evidence/baseline.json": "0daaccee41cabeb17a00e2405e2c7fd0b80d36f2d01778eb39c9fd22b13d2d47", + "tests/validation/multigrid/cpuref_0_3_evidence/manifest.json": "2850ecaf2e19d010ba35eb54162371d82cc1a092831e08a03b6adf75a614988b", + "tests/validation/multigrid/cpuref_0_3_evidence/README.txt": "1947ee0232b88b3cc2c506d0b0af5ba051ecc94aa8f7f09228ef3939cc95919b", + "tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md": "065947e15b2242bce7d3eb05a3acdbb59939c621dcd5d31540ad4a1bd4416818", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_fine_surface.py": "b232b55e75eef52480f06a35c401d72b6145892bb8b79d1d1b3cfed965b3506c", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/unit/test_surface_actuation.py": "89be6f54c4eba6c2bdca0d287a5b9fa6db143de2bcd9a671d4fb8445921303ed", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_planar_velocity.py": "b656da0880b4234b1db805544edbe0d2473cbcc7c2c869c71d8251337f62a982", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_reservoir.py": "e718c78a53c3941aba7feb8ae4e8bb0b1726c1145de84febf91220c1917991c9", + "tests/unit/test_refinement.py": "90751142f920f1c5e988577a45afa94871a6617009cdc78323a87fc7795f4634", + "tests/unit/test_slot_velocity.py": "6a9494de9a32c350389ccbed58af48951f6b25a21a258537d2e8b73eb67cb11d", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/cpp/reservoir.cpp": "c3eacaf0271400eb45ad559b571a8f7faa2a809d5f1857ffeb5592addce2cd0c", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/slot_profile.cpp": "31ac58ccab175bf79fa59fc46d4c0842df18ab0a5e5916be84760d9da2b75788" +} diff --git a/research/fine_surface_joint_20261014/baseline_01.json b/research/fine_surface_joint_20261014/baseline_01.json new file mode 100644 index 0000000..548cf7b --- /dev/null +++ b/research/fine_surface_joint_20261014/baseline_01.json @@ -0,0 +1,182 @@ +{ + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/test_surface_actuation_gpu.py": "3c2b4dda70db1d6493ecd92bd9b0dad6d8b438cdf6dca46410018217f8beb4da", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C4_deceit_f1p5.json": "11dab8440d8c4f385061d2536403f4313c6f026b4e0b7672681327a9f4f37ebb", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C6_deceit_f2.json": "e0c4e8bcc55da5dc8de1e2fe88029aa3e67453734faa44451f5a6dfa9131557f", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C6_deceit_f2.png": "e0a66708ce2a29c4c6b854d2596b3ffca181dc6e35d99cc94e08af3e2d8c024e", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C3_deceit_multi.json": "24c8e433aab6d207dab67546c4079868c4244c2948c32c94cd08e4f331991807", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C0_no_ctrl.json": "cf3af733a08f081cc5f879e8da79d7c60104099f4452af5b2a4a96c0e6bd5889", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C5_deceit_multi_f1p5.json": "a4cb4ff4481b39b9ee61b1d7209416237a7fe86b22c5068d713ccec9c3f7afe4", + "tests/output/exp_ctrl_matrix_streak_ny300/manifest.json": "d8a20dacc92321d98354684976f771a9ca8989fc63ddcd78e15c7768c6617671", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C3_deceit_multi.png": "c6fed617cc6ffe6677157a9b58811d5f4613725eb98a5aec830fd07dc1aac38e", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C2_deceit.json": "7526a6b20a158461b85b1a64070b46c2b21be1e01c5ee025e6746fcf47ea3397", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C1_stealth.json": "63d34a0ab33e9fa8fe7311363efbd1b2875691f5b4958bb645b8c7ac38f1ad6b", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C0_no_ctrl.png": "0cfd7ce8f9d743bf22a7a694b4e5a3616557cb8f1db2f4ddf49cc4bef96efef2", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C4_deceit_f1p5.png": "4dcfc186928dcb83d28e9eb4cb2ecb4b163eb6f121d57036b4c05ab162be0951", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C1_stealth.png": "5e3cbbefda06fcef243d7d06d74a473972350cfa4ae88bdfdb349dce13943151", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C2_deceit.png": "22f1db77499bdbd1b3cd35f5b58b1a884dd94a86fdcfef07abd4157e6aaf8d19", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C5_deceit_multi_f1p5.png": "823e475cc901af3d6f4d0c56eb07822b3e73a2b9d0aa23e20e3741023fe90092", + "tests/output/kan99b_validation_esopull/summary_runs.json": "fe3294a953580204319fb1143434e15096d8455b6073100dfe0d5491b76af394", + "tests/output/kan99b_validation_esopull/summary_runs.csv": "1a44bb27ee0a7fe0270905248c37364834248cdc8710bd68142a6a79bbdad82b", + "tests/output/kan99b_validation_esopull/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "9fbc7d507c129ed85c68a9a313e3eb3431470d091bd7723e63f8afd8a3d2b737", + "tests/output/kan99b_validation_esopull/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "8faac43f42d6e0c70085c6e616bfff4df8de897e315fc0d2b4aa8bd635c3fa05", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C4_deceit_f1p5.json": "b613ae55fcfbd45a1a922d6d529e5274ba9d2987fdf5620fe866b889b931e48c", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C6_deceit_f2.json": "dbf54f9a183072547b22fa14334f0167e6eefb21c1208c4e8584bc196545a399", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C3_deceit_multi.json": "2100c6cc5c358a249804ce8f6f98531f3bc868e27af6d21a9d441b1b6a9e479e", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C0_no_ctrl.json": "a8b4697b7c0caeb958f80e282e32d673deac8c914008d64e6b38f7883eacc57e", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C6_deceit_f2.h5": "8d0c28566d2230b422691b738cc453705496bd150be038a576c0c0fba218fc1f", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C5_deceit_multi_f1p5.h5": "608767ca11d104fa4506b57204a0c8dbd739688224ebd924fe517ce9e21db823", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C1_stealth.h5": "a83c988cc8b1173a7b2f13b132ed7243e98304dccab2965aa16cf4d32f8df007", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C5_deceit_multi_f1p5.json": "6f6b9300782178e0ac9308a677bd9cb1565a383a78dff4cd52dea0bd464db31d", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C6_deceit_f2.png": "21bbe2dac1ab06ca1b172ec62d00daa7bcd65d99adac0ed03c5e30bed59e871a", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C5_deceit_multi_f1p5.png": "602a6586277699968b4cb167b134c8c406577038af088aa70baff682691398c4", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C1_stealth.png": "c1e1d04f266deac5fb2815a8283da80f9139ffaccbec2219d98544296bf3152c", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C4_deceit_f1p5.png": "96dee924e89b90091192a8d7b43321f109a5491511b8a83da77cfc611ae0d93b", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C2_deceit.h5": "aa5800a0cd594eeb7cf5449d6469d55e0c9033ced0ee0a3b5d59152e68c7e263", + "tests/output/exp_ctrl_matrix_vort_nx1500/manifest.json": "5d28f0f5428d7f0341e20d5d1f19c17bbc6f0f9b2a441d3c95f5422f3f2b4bd4", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C2_deceit.png": "1dcb6fb959f944d7ad89c4abaaef4d1fd4a77db8901804530e86fb336b883eb5", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C2_deceit.json": "b88ff5049aef59876b349d105f1c3467c17c9ba9022a48a77a6984f20da34345", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C1_stealth.json": "515689cbfaa30a9e39d9907939ee194a4836b644a5e9124586e6b7221d2b394b", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C3_deceit_multi.png": "d69694a1a1b2f2ea0adc7b74b7526504e2ad0b5d6317bac9b3159b2e7e88cf90", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C0_no_ctrl.h5": "3a858d6be0a946e1d26bbfa192c2f0ca3910c0f140b42575ec9d9529dd99155a", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C4_deceit_f1p5.h5": "660e4619ea530dcd18c3afb2e7fa22cafd9cdba1be7888e31ab5b76a0902d2fc", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C0_no_ctrl.png": "6d4d3934f1c8b20c2a5c742ae080a7143f0c139741966adf009a227c27e9bb1f", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C3_deceit_multi.h5": "1e72126f11b2995437cecb8cc0eeffb8807efbfa43d8f346f28711fea98ddc90", + "tests/output/kan99b_validation_ref/summary_runs.json": "449316c30585a8de9997538dead5d4e35a59bf00a2ac22d01b101ab600a4bc06", + "tests/output/kan99b_validation_ref/summary_runs.csv": "e8b9620f3772e5e421026103e456e6e844a91292f40affb96174c9dbde9b6e4e", + "tests/output/kan99b_validation_ref/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "4391f41d17ebeea1092f13b901923ced4ee2a1c5b346b79ef791d692847286b5", + "tests/output/kan99b_validation_ref/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "105c6eb21f1943d9d935246eab1602ff2016c415a139e24fee2793e88e006ead", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C4_deceit_f1p5.json": "0085a679a423621003eea81d4ac83bfe2edef2879eed7809d2a3675a212f791a", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C6_deceit_f2.json": "e820cf73f0e90bf93c34b24416e7692a6c2e51352ccf490fa6714d0812331ca2", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C3_deceit_multi.json": "571370c74ad9af589f3dc214669bff3d857efe6fc4fa13815b5d793d12b53770", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C0_no_ctrl.json": "ec5b89961033d8ebe0d66ce1ec7940dc2faf98130c38319bc9984ef654e60b50", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C6_deceit_f2.h5": "2792be74d8564fa29fd0636fc8493630fba2779c165b44330197095b3e296b18", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C5_deceit_multi_f1p5.h5": "2c64ee6c7a4ea2c42ed8f3d274402bec62de0e02ea0340e16022f0cdc92af724", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C1_stealth.h5": "100727d94fe6c2e46d7807eed0442555bdd1e26ec9b04b4c457171a2bbba3255", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C5_deceit_multi_f1p5.json": "f86166f121b4eeb6d74d8176c9265e7a3ccfe2540d040f554b6f96e6a6222c16", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C6_deceit_f2.png": "fef4de0e3ac8203742f35c16a02445b19c3f556b11f73abd5d8e3ca05ca33d78", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C5_deceit_multi_f1p5.png": "9136448e6d7565ca5af3666f9cf6e154342d8a3475076abfdbdd1ff9faec34f3", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C1_stealth.png": "544537a9c500a05937fd3be17c25e7d887461d9b83a15564f9ab7063208f40f6", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C4_deceit_f1p5.png": "51e7056db99dd653affbe913d52fa41df6ec0db921109384e3c679bda06b5a83", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C2_deceit.h5": "39d6c162085acae1612650da37d2314757715931e83a854e08bb01407d0f8efc", + "tests/output/exp_ctrl_matrix_vort_ny300/manifest.json": "05fbc2e7bbad4267a38e1094bbdd6bee6ad270412bdb5e92b0dfc9fa56969517", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C2_deceit.png": "07fc5817eba30371272b87ee2e023c0a1144077d1bef77efb2fd5dc284badcb7", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C2_deceit.json": "b1fcf76039c91a9080b830352dee2e95316d754b968cc27a8f68c51527661e76", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C1_stealth.json": "b78851637b9b7b93070524a2933cae1dab6d682f8894579b2849c64921e6c29e", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C3_deceit_multi.png": "2658f0747ed7287f7912fe15cc58a086e01ba284277cb98689bac01ecb6ec12b", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C0_no_ctrl.h5": "57f73f5f8dc4b32b156bc82300b1efd1e4eddadd9b8dc51cb7e6b41fa5c966bd", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C4_deceit_f1p5.h5": "2864b9dd086709ee8b8c3f262118a5130b0d40c86838f3ca0deab5bb898dafa8", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C0_no_ctrl.png": "2c7f3a8be2ee540afdfb66299e43a65583434bee84bde590124524a82868c900", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C3_deceit_multi.h5": "39e0d9b032dfff8cf057b410a98973729285e7d03e89f9a6a002aaf7de3d7519", + "tests/output/stealth_sweep_fix_check/summary_stealth_s150_w0.02709.json": "8b1032e13975bb05c6a810fde175c8da51bacdb3dc745fd11c1049ca63bbf136", + "tests/output/stealth_sweep_fix_check/summary_stealth_s050_w0.00903.json": "fa7da24d5dab9fd3a3c2dea6b50d0224c7a99cd9141796e137304a6040b1ac8a", + "tests/output/stealth_sweep_fix_check/streakline_stealth_s050_w0.00903.png": "640928f7eb159e7caea32036123f86c281723d083cca46839ba86bce8361ada7", + "tests/output/stealth_sweep_fix_check/state_stealth_s050_w0.00903.h5": "187ac365f9f7370c888c4c65570c47e42465b2fccd432056c176528d45cf0c2f", + "tests/output/stealth_sweep_fix_check/manifest.json": "83a3f12a942fb644e470bd07a72f24921f2147d7df429110268c5c96a9953d1a", + "tests/output/stealth_sweep_fix_check/state_stealth_s150_w0.02709.h5": "e057e9db26b2546c0704e2c959cc7d2aac91e6a49b4c7ee75a409597a5db8716", + "tests/output/stealth_sweep_fix_check/vorticity_stealth_s150_w0.02709.png": "d2d202088624cf30868228f9c913ee30e1b386aaa2c22b0ea89be43dedc0712d", + "tests/output/stealth_sweep_fix_check/streakline_stealth_s150_w0.02709.png": "0edc7caa9caaffb754490bf1f6ac7ad7180e45a991439a3f4f83ed949a082a1a", + "tests/output/stealth_sweep_fix_check/vorticity_stealth_s050_w0.00903.png": "4088359b17c46ed4d7c8401d244808fe67723273b1d16d0671b69f9478c68c1a", + "tests/output/final_validation_round/validation_summary_report.md": "881cb7052e5a555afc87168a37268ee66e8e3fba172533706e858d996fabc7b9", + "tests/output/final_validation_round/sah04_mixed/s2_d48.json": "83c6c01201d90aae5c49e73ebeca88d1c7ded6cc83c13f4892a9188e6289483f", + "tests/output/final_validation_round/sah04_mixed/s4_reg_d96.json": "b32f03e6b347fc709cea2ecd488df0f85849c733bf6a4b9cf65ea69401c93a1d", + "tests/output/final_validation_round/sah04_mixed/s1_d48.json": "120e8e878f5712dc89b7cf78c7f8d0e3368d34ad5ef7494977e083b188a54c18", + "tests/output/final_validation_round/sah04_mixed/s3_stablecfg.json": "b38a3d197a188e65c163d974113af18f332b3abed083e2654e998d9980f6be9f", + "tests/output/final_validation_round/sah04_mixed/vorticity/s3_mrt_laststep.png": "dc96fcd05d458684cfb40d4cb741172213083e2f2665e2bae7e1f0267bb3575d", + "tests/output/final_validation_round/sah04_mixed/vorticity/s1_mrt_laststep.png": "73a3580ba3c7fe6ffeee4676a9a51b5bf678d6fb523456a61e185598389ea1e1", + "tests/output/final_validation_round/sah04_mixed/vorticity/s4_mrt_laststep.png": "57f2a82761f2de1a9fc2b78ee86159ca542c966494b9c704deb451da857da778", + "tests/output/final_validation_round/sah04_mixed/vorticity/s2_mrt_laststep.png": "786f492b96ed932254b5452e2d06ff088727f2d88c7e7c7b47d386eddfe07862", + "tests/output/final_validation_round/kan99b/full_summary_runs.json": "8c4a11cbf555e08a66698439170b850c57d537d8e75e4dd75beb767bbf7e38cf", + "tests/output/final_validation_round/kan99b/summary_runs.csv": "3fa92fdd3114f0472de44bc03006af1d4b694dfc69b06704c1667cd3627b6dab", + "tests/output/final_validation_round/kan99b/force_csv/k5_baseline_domM_re160_a2p000_regularized_mrt.csv": "de05e9699146f2adffc9d7c9991f9e48396aacd142afc3c08b2b64727c83c69a", + "tests/output/final_validation_round/kan99b/force_csv/k3_baseline_domM_re60_a1p600_regularized_mrt.csv": "53cd0dc47328b7b370eced1130508655e6815a29b727bf1fe4e4e125e4918905", + "tests/output/final_validation_round/kan99b/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "4cac1ccfdb7451de3e26d921a6406cc55d1d4630e10ec0d7ec9350a4abd49404", + "tests/output/final_validation_round/kan99b/force_csv/k4_baseline_domM_re100_a2p000_regularized_mrt.csv": "392c98de52011ddb344a5761c4520e870f4e49bbba3e144e5a02818ba2f9250b", + "tests/output/final_validation_round/kan99b/force_csv/k1_baseline_domM_re100_a0p500_regularized_mrt.csv": "9e83c5175aec644c0b97c081e610deefa731b87aef04da6297abf662a71c0702", + "tests/output/final_validation_round/kan99b/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "55b071f278e153aa353aa2bef85f0bce35b910a7b08103032023fe3a28169b89", + "tests/output/final_validation_round/kan99b/vorticity/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.png": "b91b332e7deb787975d3f08fa3325facd4a972b536694fcda52e6c01943c42cb", + "tests/output/final_validation_round/kan99b/vorticity/k1_baseline_domM_re100_a0p500_regularized_mrt.png": "6e7c3f6567c0ff0d00d75da8373031f5ba2a17a624cb8c5d5d6ae4f8749c33c0", + "tests/output/final_validation_round/kan99b/vorticity/k5_baseline_domM_re160_a2p000_regularized_mrt.png": "c4d232df2e6f7466acca711191d976aa9411ec0ade81572b531463f42a7d633a", + "tests/output/final_validation_round/kan99b/vorticity/k3_baseline_domM_re60_a1p600_regularized_mrt.png": "b2314c60491d20933422e1697998555dec2436d39545c71f990e9906884685b2", + "tests/output/final_validation_round/kan99b/vorticity/k2_baseline_domM_re100_a1p000_regularized_mrt.png": "2b2797b8f53170d04d1a70d1cdf898f7e41b3a76b9f3c1f276dfec952520ab04", + "tests/output/final_validation_round/kan99b/vorticity/k4_baseline_domM_re100_a2p000_regularized_mrt.png": "8135f470404fe11ac97968fa580ee35232e90dcace3c6ad94de17ef7aace24d6", + "tests/output/kan99b_validation/summary_runs.json": "d7239aac64884202558741074f2d644ade9e2365d94d0b7556fba68dac94868d", + "tests/output/kan99b_validation/summary_runs.csv": "c44da69563d58b917291a9fd402d1f57055861bffab6f9e32d7db91297428d45", + "tests/output/kan99b_validation/force_csv/k5_baseline_domM_re160_a2p000_regularized_mrt.csv": "27b64460923d235d34b760f2a2371ad01611a70e38edb03d6fd6a2fe7a7de6e0", + "tests/output/kan99b_validation/force_csv/k3_baseline_domM_re60_a1p600_regularized_mrt.csv": "76ff52f4494b7ef7650c05968732a8caaba94d2b151234c02cf624f5b3a712ab", + "tests/output/kan99b_validation/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "28a83436ca8bdad38865ba21ce1bda679562a5ae1cfc6ee8fc6e86ff760ec66d", + "tests/output/kan99b_validation/force_csv/k4_baseline_domM_re100_a2p000_regularized_mrt.csv": "823ae04870fd951879024a18169ac5cba8db4b3201726f6a00f320f1958d04c6", + "tests/output/kan99b_validation/force_csv/k1_baseline_domM_re100_a0p500_regularized_mrt.csv": "a591daf2cdecd6ac3689fa2a2aba917b23053ad26e3ef1f635c81aecc451475f", + "tests/output/kan99b_validation/force_csv/k0_baseline_domM_re100_a0p000_regularized_mrt.csv": "e95c27c646c0c9baf8f455f876c115c8dbdb23cef9d9d550f455098bf0c03b55", + "tests/output/kan99b_validation/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "3c2ea79a0e27f561215febee2e165d24b3617a648bf908981c068ba59d549c51", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s125_w0.02257.png": "a892f18c74fe13efd839bfd5068097ca0ae07acebf6c06eed89e1b867e41fcb2", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s125_w0.02257.json": "7e542f59746429022ce1794854c6fb36e8ac658dd0aea3bc1140a45e83a3f1c9", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s100_w0.01806.json": "b76216e0fbee00ef754edbafe5790a99ce7d53638af629947ddd9615598e4c08", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s150_w0.02709.json": "42cb241d9cfb01308ce28e129756b6cb3fe2a8e9679518da84bcb8b607fe92ac", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s075_w0.01354.h5": "558be308dbf334832bc1d29419ba5be142969117a11b124864f6b221c8fee509", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s050_w0.00903.json": "53b579811a0b651ba7cc466c230c115b9f88486c6675e0465d0715d3377a75cd", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s075_w0.01354.png": "9f4a7d89b2471becaf31e84c14402441c5fd96fc7190cea5e8a9fdd06ee62002", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s050_w0.00903.png": "5f18f56b0ff2af3350216b65540a2bc664c569520624cfc6cc2439a3c5369560", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s100_w0.01806.h5": "30776f333959e0e9eb5ca96b269e6a8052c5b94941a4e3b36d8a6af8076920ce", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s075_w0.01354.png": "b5393474d99191e88dafea4144b6a8eccfbdf75107125ce4b05383b17007d06a", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s125_w0.02257.h5": "4ed9d8587f75ad4625ec5501fa99fb733cde037180ac53f92a210ffbb08375de", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s075_w0.01354.json": "ff1c1cc649e589b5425787493c2b0d04b6c39b43043b1968d65509cb0a426e82", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s050_w0.00903.h5": "4de51584b24095f8cf4480b8941593a5f913332f9396061ed077c9d49eb2ee11", + "tests/output/stealth_steady_sweep_nx1500/manifest.json": "0dfbb2c1b5bf9093fef169e4dc6319edb5c87a1e967e8d558613e2c64a2ca734", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s100_w0.01806.png": "60824cbdf21170cb4ffd8af0a49e8522c2d79cb2694690ab67995ee973265efa", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s150_w0.02709.h5": "b22d54a05cbd3138a1fe585a825246989fcff7c00f51aa9312a4185d963db933", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s125_w0.02257.png": "c1e1d04f266deac5fb2815a8283da80f9139ffaccbec2219d98544296bf3152c", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s150_w0.02709.png": "bcf098083a73798dc3906807218058cc571435a010234a5a350b585ba9915c78", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s150_w0.02709.png": "3bac21cc75a01429399cec308d6bf5fc8918917def1bf5d7fec1cb6003390a41", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s050_w0.00903.png": "a675f41df763f0a1ac0a06386315806b24f2571f5dabc8693fcd871a13ed22ba", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s100_w0.01806.png": "92515588596596cc1d691c643fa48cf828492c2eaed96355dcec58109de4b5aa", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C4_deceit_f1p5.json": "0393661f08b748428fc366eeecec3b34b9d9a013aa6b151a15b33c7e3c0e1818", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step080000.png": "bffef412087e426b614d8c05e59bd7580ee49bb77319279ddc4c1bf825678c49", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C6_deceit_f2.json": "de067f01ef5c11249d67bbe5e02db6f2b4c5590214de02609bca115edf8dee64", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2.png": "846badbae81b75f765d89e5a7c4f88aeb5d57f2387511e4f2f84c72a192ea9f2", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C3_deceit_multi.json": "eb21d1c69e51f01c1a6be1ce59fe86763089ea5aa667b8872d0186af035b24b2", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C0_no_ctrl.json": "780a0d329cb86990a17a088f49084410abb1fad24f659255918e5ddda6b3dabd", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step080000.png": "ff7836b8229d9a5dd3900f499fe3e7f0c73a61c7109b6e6e79b11a0fb459bb63", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step040000.png": "f2b56a7e30bcc363ed69fc19705403181ac5de90800eef03039a389a65869e30", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C5_deceit_multi_f1p5.json": "261b698723f19526a447679a2be8666c8d0cbf6df81b0c9de6d051960d77308b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step060000.png": "0697e0ae06a01154afdcf00330ba870bd8f36d21561a33846ad7ba63fb731179", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step040000.png": "1de3d7f54e91c5d5850f4358d1872e16fefb36d32a1b6293facb54524e32315c", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step100000.png": "91f0bf6ed3e854f7f83623a3f19bb12c83b4aac239e3eaa849fbe50e7baddff5", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step080000.png": "303c1d2d4c49b4a7495365c8cb2bcbfe9bdda7cbc0a7c7dd1f01e8aa62b3573b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step040000.png": "dd5945458a35d81b31a0e2f3a693a5023d6960474263e7dc86c22367a56cc13c", + "tests/output/exp_ctrl_matrix_streak_nx1500/manifest.json": "0d97efed02f775c25dd8a2d7439f310b715d142ff8d603c9da6ddab197570ce8", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi.png": "69022ef9175acf910374ec73848640548b85fc7beb7e6950843f52c10ed7d61b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step060000.png": "16ba30b8cca0d49e6b76be0bb4f0d14bbf276ca6ec47ebf56907c7534e15c4e0", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step100000.png": "8548b6dff635cf9c92e2baa119866277e3994366eb31aeb30641b03b3d80ee9f", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step060000.png": "56100f169c3e378b84bfc89c5477d2c142ca043d9f28eaa70bc5448c49c7f4d5", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C2_deceit.json": "587cd42d81b1325bbc766d9ca6c1fd3d076bf5a772efd45d056c2c4e3db742b6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step060000.png": "e43e95e7126de8cb857154353f161914c225f8c9f17eb44b1ff744249368a4d5", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step080000.png": "676d21ffc7180d34a6725a8bf49503ce59f48d65500450c3975d01e65162899e", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C1_stealth.json": "73040aeb7ef07c538d4687b101c599210e660202eb1c2c3e0894dfbde682d137", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step100000.png": "e22171ef86979c4398c45ada9cd0f5e4c4e5b034f271df5fa8ac9a762a8554cd", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step100000.png": "0d73042be73b0de8d0a591e56c01e3c802483aa22a97f27e0300cba82c708066", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step040000.png": "a6e95fd5c24052db20d5ece200edcfe5e261c00950ca964c89df9f7335579634", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl.png": "d74061347ac3505fad878e330f6cb04d23bdb13082bfa1afa2fda0872f80f388", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5.png": "3156400eb59fae0638556c2711345f12ca49d951ff09e6464a2271249409a6a7", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step100000.png": "d69e34c82da98b28eef7f1af29f5d11f400e90f628049f6f5f4a3a419a4a4340", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step040000.png": "ce1f372b517dd52fc3f3eb066145e04ab6841e43b67cb0f6bfbdb42a6738eca6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step100000.png": "07cce6c99dfa7b56dd4d3aa452873a676a5a00e9f046555fa9dda30f16dde488", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth.png": "a892f18c74fe13efd839bfd5068097ca0ae07acebf6c06eed89e1b867e41fcb2", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step060000.png": "80b63bd309ef11a3ebb2f1ef301b49cd8f09bcc25562097d382f859306c9fe6d", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit.png": "1edb30dc35e29ad991695353f4b84e0507792935ec75ae9a7904ebdc007a471a", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step060000.png": "93ab8e09e58a64c5dd2eedfdafd27cf4dcfe4e8fae1af64ac71eac509e6ffdaf", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step060000.png": "f773bdef1c8d718d01b6d6d7735182c04564dd8b5692b359e1dd2f721c774b1a", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step080000.png": "5570fe6a25c92e5c6aa9a5129aa1797ba8ee7418170c7a351f9e35b931a366c7", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step080000.png": "32d3e700286eb4b46b3bcf757669481affd6ff6b53792d730b5a21da92cc57d6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step100000.png": "5acfe36694bb4e628309ff8ae1e839ca0a1f684607165bbc2883436b85208bf4", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step040000.png": "2c6f2b8d61cc2aaa63631eb6c98d3de26dcef705fa6b66c823ce7b9eef50e00c" +} diff --git a/research/fine_surface_joint_20261014/baseline_02.json b/research/fine_surface_joint_20261014/baseline_02.json new file mode 100644 index 0000000..e0421e7 --- /dev/null +++ b/research/fine_surface_joint_20261014/baseline_02.json @@ -0,0 +1,182 @@ +{ + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5.png": "adbefd0021e2c981d026718de8c63594b9c8e5971901d1dc40835cb69d95b93e", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step080000.png": "ce8b18e4dd976ed590fcc44075f3fb058ca7b23e15a1624726c181c4dd0c11da", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step040000.png": "168d21ef24ae198fbfd642f8ca315faad4c7bff2e2c09e16ff7c97e7360ea883", + "tests/output/screening/screening_summary.csv": "3a23c4f2bd54ed5ee9bdb5b6dcdc58eed04519fcf1b4790e0abd1e6c5288fb96", + "tests/output/screening/screening_summary.json": "caf64530f152b6b8ccec82a3c7ba44fa0b3aeb0e0221ef6121857bf62c031ecd", + "tests/output/screening/B1/force_hist.csv": "854bfebe63fb2d140823fc5dbc434a70c317c6ab0bedbd5220cec45665b524c8", + "tests/output/screening/B1/summary.json": "35b4d958bc0fdd6ab6c9c0d1ed50e85d89b04f7be3e34632d6c3ea95b89acb47", + "tests/output/screening/custom/force_hist.csv": "06da0f67b564d5c114332ef3b39167b1ba222fc50045f95303c75c14755b51d5", + "tests/output/screening/custom/summary.json": "1701ed75e5e9ca16127f495ccff1d87de245d81df581e94114c8fca6fbbe77fd", + "tests/output/screening/MR1/force_hist.csv": "f70fbfa748fd0709e225523aaaa72b761db56df4f1d48f105384b94cbc44b31f", + "tests/output/screening/MR1/summary.json": "3d9a0fc19710820e3634ab2143b913b282beb159336567ab9ebf3de2092947bd", + "tests/output/screening/MR2/force_hist.csv": "c947b3c16b8e8f8f85a203cea8cd912bdfc07f96985c1c24a470b644170195ea", + "tests/output/screening/MR2/summary.json": "d2344e9e2517ec76c8b56bfbe3763dd465e24721856992401c57c414763481bb", + "tests/output/screening/MR3/force_hist.csv": "7df1536c83ee466b7195d9c521d3d3b1309acaf142f2855bba51fb279c7612e4", + "tests/output/screening/MR3/summary.json": "ad188eb1b271a6cd0fb4025b456eccac5450776f60db58466f804fc5a0e0ec61", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "examples/fixed_periodic_patch.py": "6732e440a47c237ea341703f2d80717903d34c68fd061bdc97189e5d877be46c", + "examples/fixed_patch_jet.py": "9d58ac3f32478603e8e798efcdaf6ea16e9cc92346eb4780a60e438d331abced", + "research/j3-lag-2026-10-12/host-check.log": "b2b6d262934b3abf9e0f0bdbde14b339cb977f7bffe391c17b51b5d067862dda", + "research/j3-lag-2026-10-12/REVIEW.md": "f388b64b0cc0413dc9865afda90ed24de666dda0d6cdb821b4363ce1b73631b3", + "research/j3-lag-2026-10-12/trajectory.h5": "2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986", + "research/j3-lag-2026-10-12/baseline-status.txt": "e0b69879084f54afac1a3bc3701f1de9819068190c815ae84421f02f83cad9f7", + "research/j3-lag-2026-10-12/baseline.json": "5e9a920813fe3d775110af85af92970d5245a7040ace804445e432353b77e489", + "research/j3-lag-2026-10-12/gpu-diagnostic.log": "97956b517072b7c34e2e29e2a23f87eafb19b9eda786a4b8149e4a2eaed76ee9", + "research/j3-lag-2026-10-12/gpu-availability.log": "b227a519b8286849cfdf842573bd451803da048c6b27af9517f6b8964cd3aa39", + "research/j3-lag-2026-10-12/results.json": "00435ac7e402943e55e702fac1beb5af8cafe71967999658bcde2b29077b1fa8", + "research/j3-lag-2026-10-12/incremental.diff": "ebdf66c72daf17b926482f79a1a30bf0eb2d27fc930a7bb62e5449ebcf72fcc7", + "research/j3-lag-2026-10-12/end-21280.h5": "19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588", + "research/j3-lag-2026-10-12/start-20760.h5": "6c4cba5928c77566c2afc32231311a3986831c18fea766faadebb101243399e2", + "research/fine_surface_20261014/cpu_surface_projection_command.txt": "b1783e26e92737106a5614fff01452c8ea0364372d9bdbc44c7d15c19d9b13f5", + "research/fine_surface_20261014/cpu_surface_projection_exit.txt": "9a271f2a916b0b6ee6cecb2426f0b3206ef074578be55d9bc94f6f3fe3ab86aa", + "research/fine_surface_20261014/report.txt": "ad8af2be7239f8fe728ac7a8db340d4458e6ec1bbb30b14e614c1072dd9804ec", + "research/fine_surface_20261014/cpu_existing_runs.json": "523b3179b976c2198112c7b49c6c8a75cf7d3332663a8b8a0646c94a39abd1b4", + "research/fine_surface_20261014/gpu_run.json": "8c4b4d7c53e17c30ce4c7d2fb92466e0704f39966e89016dbf82d36cf96e35bf", + "research/fine_surface_20261014/gpu_stdout.txt": "02d1f6fea194d1185a49b7bcdde58642f1d6b9634fe55e4bcda2f020414eb35d", + "research/fine_surface_20261014/cpu_device_guard_cmd.txt": "43a0fb0e20c4adcf1930f145796378294558060d5fd5303402e0538674b68c0a", + "research/fine_surface_20261014/cpu_surface_command.txt": "2b8f2a3c9ddfd1e877efa2a50a935eeb937e2b3ea92515610cd334d80703d6ce", + "research/fine_surface_20261014/baseline.json": "dc9dfa88e69d2b7cf93b0c572961c0bc7849ea1608a0b14b1a6dca1429abf87c", + "research/fine_surface_20261014/cpu_lifecycle_stdout.txt": "af52542989b4a2bf597e020c12064e7083e136f15b938ed5382b616a16f70e38", + "research/fine_surface_20261014/cpu_surface_projection_stdout.txt": "96ea3e4ca948962b6eb92aaf215efb6c598a3c4b296f6fd26094df353ded5722", + "research/fine_surface_20261014/cpu_lifecycle_run.json": "2a3b09ad2f9c86e43892d643a510c9e936d6153e2ae1f6a9eab90c3067f0473d", + "research/fine_surface_20261014/cpu_shared_kernel_stdout.txt": "1ab9905d8b0f34f6d791ff7da4efa2de0f7f3e282a078758cc0496cc0230c0f0", + "research/fine_surface_20261014/manifest.json": "19747021257f2bc5fa012763521a1733c7303a07f319f013253ca2b9ebb3ad35", + "research/fine_surface_20261014/cpu_device_guard_stdout.txt": "f4c61c0ac8f55c6c9a2d6c593731bf5f8c4a6c5bebbe514284fd4f899818f9e0", + "research/fine_surface_20261014/gpu_test_run1.py": "3dd0658f63a4e7a1c41eecf433842c872f8fecb391ea4b44d0b48947643d5189", + "research/fine_surface_20261014/gpu_preparation_run1.py": "b3fe9e58118369adb1bdfc618fbfbd917d508a563beaf2555f656b59aeff4425", + "research/fine_surface_20261014/cpu_surface_exit.txt": "9a271f2a916b0b6ee6cecb2426f0b3206ef074578be55d9bc94f6f3fe3ab86aa", + "research/fine_surface_20261014/cpu_surface_stdout.txt": "bdb786f2d289eaeab4e53d0fdccb998525c217efaa778496cf7a97ccca9e1597", + "research/fine_surface_20261014/cpu_preallocation_run.json": "363106050ba00d9a1c5c948c36926e8510ed7fdd75d28cfeca59f593fd0f1c50", + "research/fine_surface_20261014/cpu_final_stdout.txt": "bdb786f2d289eaeab4e53d0fdccb998525c217efaa778496cf7a97ccca9e1597", + "research/fine_surface_20261014/cpu_maps_stdout.txt": "7886fd4e2fa8a63e9cecf02bdf650e5447ba149704ac75f51da6964d8e77ba6b", + "research/fine_surface_20261014/cpu_device_guard_exit.txt": "9a271f2a916b0b6ee6cecb2426f0b3206ef074578be55d9bc94f6f3fe3ab86aa", + "research/fine_surface_20261014/cpu_preallocation_stdout.txt": "59907462a8d5fd93406cdf4c7d1eb2f7b7a96664ae85c4ec202693d419cd019e", + "research/fine_surface_20261014/incremental.diff": "9cf8b5cc4ea037c865762ba7069f0c1daabcb4383d4333167d279f8b7704e5b0", + "research/fine_surface_20261014/cpu_final_run.json": "020a9ef12904c2d18185613d68a58dd7ff9b1b22197ac1f95bba61f2f593eaac", + "research/refinement_slot_20261013/incremental.patch": "2daca4c9751190df27e18ea79e46685a8fe3cbb6d42b34135b1219b8f53ea3fc", + "research/refinement_slot_20261013/baseline.json": "17b1a8cb7e8232979cd1fc9976cb6b78aa58a7005449526ec15cc0bfd45f8139", + "research/refinement_slot_20261013/manifest.json": "9f28f275533e8a1a761ec748152170b40845612058236ce331c47ae6c5d68713", + "research/refinement_slot_20261013/before.json": "482b02da26207ce32deb9368b6eb63f9de7b4ab670078c02f458f512fb182b53", + "research/refinement_slot_20261013/notes.txt": "8c70efe2acef9f179c453d297b27047b7632a2d55e0739fff4bccf74e0867511", + "research/refinement_slot_20261013/stdout.txt": "1cabbc8a87a2a237ffa649feac0b1b8e0ae8d769af8c298e600e249d2a525f58", + "research/refinement_slot_20261013/results.json": "6245de38106d7a7b0bfea0aa5100b9c9e393ab5436fc594ce0295b4526964b8f", + "research/refinement_slot_20261013/cpu_results.json": "2a891c1adcb3b25390ee7967e5171396aedb9cb4da5ae85f7444450d758671d5", + "research/refinement_slot_followup_20261013/planar_velocity.sha256": "326639a3e66b2b8dbd21ecd76b32a331f3194a82d1b5888219eee4a1782f6366", + "research/refinement_slot_followup_20261013/incremental.patch": "b734b4b540ece11a037a0f119a9846c39c09c8247d3cc89877880a27c3d082c4", + "research/refinement_slot_followup_20261013/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "research/refinement_slot_followup_20261013/baseline.json": "7ee505b7371a5258db7cb197c999be8859d14641915e3085f1969deb465880a4", + "research/refinement_slot_followup_20261013/manifest.json": "b11c1fb42abccc4b5638b974d1ea00b0687d8fad72b492eab3c8435bf485fd13", + "research/refinement_slot_followup_20261013/before.json": "809c4a6f330d4a29e92415fd0eb820f34dec38484e3560a8b9287b09553c2d87", + "research/refinement_slot_followup_20261013/notes.txt": "c04644a287aa936c9c6de0ca9d8bd83cee2d80aab9544ca284c9f7c029bfeff9", + "research/refinement_slot_followup_20261013/stdout.txt": "acb72f2b14e1abfe750330d84a38afe9bbe944bf028dde9700a291d5edff4be4", + "research/refinement_slot_followup_20261013/results.json": "dc38c3f5f88fac2ebf49be11df84e9f3da9d25504d400b6a506240a91735e4e1", + "research/refinement_prepare_20261013/incremental.patch": "df01345b8e2c33ebf6cdcbbb5104f02c4d7c239a6e6cafab1833228791bfa9a7", + "research/refinement_prepare_20261013/baseline.json": "5cc3c35faac9bb43a0017d83ddfca330d7da93f1e6407391da56b2e9df3b28b6", + "research/refinement_prepare_20261013/manifest.json": "5d479557cd01d61d8b652a3cf456fa57665bf624ce3b4a42c747523b74dec548", + "research/refinement_prepare_20261013/README.txt": "eee46f01add6ed7a5da76da76c98da628e13b930cfc49785399d7afbedbfd95f", + "research/refinement_prepare_20261013/validation.json": "945f4c3604ae0eae91c29741a39588207cfff3e05646e03a12d074a299956c2f", + "research/refinement_prepare_20261013/validation.txt": "5b5a8e9d455d37064c6709dcfd14e89ba66f51f09a11a9863b5cab67ac651d42", + "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", + "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/repair-2026-10-10/simplification-checks.log": "c9f15e870d02003480adf1a7f2fe4a9aca66c1934c4477619f05c8a4798ba85b", + "research/repair-2026-10-10/repair-state.md": "4d4aa1ec0c11a87d2c8380912e7ed74cf5c910ae42e5cc529effde36c9020969", + "research/repair-2026-10-10/TRON_HANDOFF.md": "f8aaa3d99cd133c2055d4adf396a0a57d14f6006aea19e87611bd1c2c1b53a88", + "research/repair-2026-10-10/final-gpu.log": "988bb97256d17b88c14f3793b15880d727ecb285abe62e7d2ae27a16729651c3", + "research/repair-2026-10-10/baseline-status.txt": "074088d793014e3b8154c58718058c7d300fb45595f5129fa957ef1e4cec38e2", + "research/repair-2026-10-10/repair-architecture.md": "49be42ff5c994017f3175e17efda14d84f0b68f8ecd239f66ccee38415b60c5a", + "research/repair-2026-10-10/classic-results.json": "a5d15305f516fd378b54cf9029102be58a83a55a7bad4b8e058fcfe0cc9898f4", + "research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff": "292b4bafe7a62d4fbbf7c165eb99929336edfcaa16b15f34f72ab71fcd928391", + "research/repair-2026-10-10/repair-numerical.md": "0272ebfa8c519aad161c520542cf53156574661609b91fd5ccad7955fdf2bd7b", + "research/repair-2026-10-10/provenance.json": "a81b7e32ecf7182c9617df1b39bbb063a05ef89290ad501bac4573cd5e8a6832", + "research/repair-2026-10-10/classic-signals.npz": "820c9a0b0713d7455f0a5839ac2cd5ee706086d1a26461225dcdb095673421e2", + "research/repair-2026-10-10/baseline-hashes.json": "d6a7d5f9ec5bceb0e7927d55603d9c5e70105982cd945723454659b19ab476e6", + "research/repair-2026-10-10/final-unit.log": "a892a39ecf88125558538cadce2cb5dc46d106b993b164e03da4ebb0eee68cef", + "research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "research/surface_actuation_20261014/report.txt": "128dd731124542be4ba50fe18d24ceb0a5b37f0329bcf32cdda4de3f1514b0c7", + "research/surface_actuation_20261014/gpu_run.json": "e06268a9acdb3c6ced30e58d684c427aeaaa427b7098da55e60f9a4854a8aa58", + "research/surface_actuation_20261014/gpu_stdout.txt": "bc882fe06353f12ab2b85bc5c9b7e6a23adf705d9e2ab6a529ca8afa49a5166a", + "research/surface_actuation_20261014/cpu_surface_command.txt": "7204f2326b37ce0b4bf05e806935974fb91246922f7e3760dbab0627d94f07ef", + "research/surface_actuation_20261014/baseline.json": "4456d6718db2ad3335c372368e3e1a0a384d78319855a0a9d4cdfca02f28a4c7", + "research/surface_actuation_20261014/cpu_initial.txt": "2c19cce736bac1da5ccacf06b0c71b0e1affcd385e1346d2ab9a0cab5567842a", + "research/surface_actuation_20261014/manifest.json": "9a4e768bd10e8609cd722af8f3904aed27df7debaf2389aa20692c67fe05050f", + "research/surface_actuation_20261014/cpu_surface_exit.txt": "9a271f2a916b0b6ee6cecb2426f0b3206ef074578be55d9bc94f6f3fe3ab86aa", + "research/surface_actuation_20261014/cpu_surface_stdout.txt": "8e47fbdb3f81736adfbb0df2621df4953cf20f2e49cf63a9518b32e6a524fc20", + "research/surface_actuation_20261014/incremental.diff": "9511a0f105edd655f08fbbb22b0330729ee6b610b15febfa38403c4ec506c88b", + "research/surface_actuation_20261014/cpu_checkpoint_stdout.txt": "d740f1038fb46c8c49a0677d9b0d3677ef461bc14cf58f92eb8bd9ad3b1c97f9", + "research/surface_actuation_20261014/cpu_checkpoint_run.json": "8970cd51e65172d47ed3dd16fd118923708dbb2309b213fb819a4c9e3f2e67d0", + "research/j1-2026-10-12/REVIEW.md": "13004a4f140acdcf59acb57e9e2dda1bb95763d30060f822a7c206c94b813a9f", + "research/j1-2026-10-12/gpu.log": "8659a78ea52bbf8eb923d46ea71636ce63cd322352d5c98a74f631e666dd8cfb", + "research/j1-2026-10-12/baseline-status.txt": "ac398360e05b746b89ae0c3acfe202b5122e650a3bb1ff234ab26f874a303e64", + "research/j1-2026-10-12/baseline.json": "ad7afdf7b3913d11c07343e971fe2f43c2d1a2b99e3d5904a6ba89e3bb0b24fb", + "research/j1-2026-10-12/checkpoint-gpu.log": "adfe3d77d2e6c6f6184dccc0267b4404b20a7709505d5ff5affed0ed4a618083", + "research/j1-2026-10-12/cpu.log": "60cac097f7c4f11401df2aacb43a248640555e7628d2829c4680c71db34e9640", + "research/j1-2026-10-12/gpu-validation.log": "d1e9f2aea17a85eddcd94b81c700738ce073214857b55c28abd1219ff1edbed7", + "research/j1-2026-10-12/results.json": "449f8a17dacac0fc6d2489c4b10bac330dbbbdb38fad3ce54f739ac8c6d48e85", + "research/j1-2026-10-12/incremental.diff": "a454c23da7b0011645949c0fbf64d0c41ecfdab5642b1b7c5119868005d3c721", + "research/j3-coverage-2026-10-12/restart-21280.h5": "3e89c12c16f91f76ca9acd909e0fa7d42df6fbb5e870b299aa08ca42bc3e3dc9", + "research/j3-coverage-2026-10-12/REVIEW.md": "7293f3f3442855c8521698605aab504e026915a7bf1e77f5a24710d89a812443", + "research/j3-coverage-2026-10-12/restart-reference-21296.h5": "7192f510dd7820675aa1de130f55514136fba782cf77f92545189918a7e0c328", + "research/j3-coverage-2026-10-12/negative-end-20760.h5": "bd0bd063579d625e358762b1fdde5ac11bfcf739646a847fb77a4a2031011b9b", + "research/j3-coverage-2026-10-12/baseline-status.txt": "31c949b11b20d7cd4202dba16882b5712aa1653da0cb2da2f0ebd69bf488040e", + "research/j3-coverage-2026-10-12/baseline.json": "d8844104f2665a25bfc417ee29becf89ab3955fac9105b5ddb12cfb1fe2a55b0", + "research/j3-coverage-2026-10-12/verification.json": "205986efd2b41635721b7fd20288be982348c765180102c7102750ba088f3a28", + "research/j3-coverage-2026-10-12/negative-budget-20744.h5": "c09d75fc4a2cff68039a0956bd9d32b79b9cd3a6b386c72b4db54c214b110cd8", + "research/j3-coverage-2026-10-12/gpu-validation.log": "505cd5a5db46d7984aefb2a614151c25c4ace0e7d2a52e02c3e4f9792fd8eb95", + "research/j3-coverage-2026-10-12/results.json": "02460981ad49c9cc13b4246abad1d8afd2599c61bfb545a6e32da9bbcd5c0db1", + "research/j3-coverage-2026-10-12/incremental.diff": "98aa7855d5d6b91b4509a924c8a5aabab4339ba29c7e7dc2d91262c48e3848ca", + "research/fixed_patch_jet_20261013/incremental.patch": "dd95a98f03b7ce06d024a1d1d1f454dd206ad10a573a8060f728bad71941d6e8", + "research/fixed_patch_jet_20261013/baseline.json": "d2a83d490ca545589a7a7fc0e3fd187f4801e22e5c8d2d18ddb519097d3281b9", + "research/fixed_patch_jet_20261013/manifest.json": "3efaf5af8d6a4f6c3460d8023466af611ff90bc9fc79c3e7db6f591d172d1182", + "research/fixed_patch_jet_20261013/before.json": "dd47f1e25a807a3eafef7d12429f034117f945a4ebfeb98eb1688d1752c3d30d", + "research/fixed_patch_jet_20261013/notes.txt": "155be36e201c9c8a043a87fc7a7d0064b703990b2aad86853767603fe38a256d", + "research/fixed_patch_jet_20261013/stdout.txt": "925abb3038095560d71a4e7733b38d93672397640cc88197c733a8a39e2f9f51", + "research/fixed_patch_jet_20261013/results.json": "fcd944b8dec61b399874b5386d6e00880f0dbc34d248ad371a6af8781fddaa93", + "research/fixed_patch_jet_20261013/fixed_patch_jet.py": "f27cd067fd7b9a7c6d7fab19fa471fe0617ee67889ae3931048557cc5659181b", + "research/fixed_patch_jet_20261013/output/summary.json": "a9a4ab5975684a386f05746f570ec4d7b1c5ee3be413400445122448f534eca3", + "research/fixed_patch_jet_20261013/output/velocity.png": "0f8ffc3a7b36ffefa5c0cd8550309fe89d9de72cd5476f354a27fac89cb39b0a", + "research/fixed_patch_jet_20261013/output/layout.png": "cfc354c0192a5a9727a8056ff6c5bc4571f916143853e4da2dc16da965e10173", + "research/audit-2026-10-09/numerical_semantics_results.json": "b95b065b594aa2911740dab216f87936c9bf7f7fa25acfda93b5738443564035", + "research/audit-2026-10-09/REVIEW.zh-CN.md": "2841fd3aa7a6baedbe1079d90915c8b05212b133824ed6abccaa1f09656eaefe", + "research/audit-2026-10-09/root-initializers-report.md": "ca448457c444949d5d0e1e10fa7121064510b77fc4c3512580900f0299219867", + "research/audit-2026-10-09/numerical-report.md": "970330b3a593f79f09866ce6ae82bc0ddd81226230d0a6ff06ae8ae756ee80da" +} diff --git a/research/fine_surface_joint_20261014/baseline_03.json b/research/fine_surface_joint_20261014/baseline_03.json new file mode 100644 index 0000000..da99b45 --- /dev/null +++ b/research/fine_surface_joint_20261014/baseline_03.json @@ -0,0 +1,72 @@ +{ + "research/audit-2026-10-09/numerical_collision_results.json": "51e5c263bb8cde82cedef2ccfdbf5ef657742a80218d7896b1ff877516e59693", + "research/audit-2026-10-09/architecture-cpu-results.json": "e1b809210005c8765b13fddbb5ed710d15f6fcbb4c5788a4064f3e88808433ef", + "research/audit-2026-10-09/numerical_compile_results.json": "c3b0ae02072a2ec408ada7513b542ec255f6855cb743a3ed7f91bd8f31504f44", + "research/audit-2026-10-09/state_results.json": "da9170df3e11231c73f20e5e79ed68e08966673d1dd52004ea6b6a279afc0dcd", + "research/audit-2026-10-09/architecture-report.md": "861079dc3f4ced9fdc41bfb22002d32e190c0d630d3ba2f138f9dc7a949b8371", + "research/audit-2026-10-09/state-report.md": "f8708807efc2e109810c5955f7c1884a932668c0b3cb2963c2df3b09f2a3d5c4", + "research/fixed_patch_jet_closure_20261013/incremental.patch": "18b30ecc0703bcb4cb6577255d12a5b0d95dfea99d02d761bbc1b5b231bba1d3", + "research/fixed_patch_jet_closure_20261013/baseline.json": "ccf88409836657aebbf091f06c41141c81d20169c2cac0fd8e2a16b40df36882", + "research/fixed_patch_jet_closure_20261013/manifest.json": "7a2a079be7b6146b3bc2f5494f98ca2f935805ca4c6aa1eb1b9067fdeb3ae3c5", + "research/fixed_patch_jet_closure_20261013/notes.txt": "bc3c939659ef0cbda506024d79b896707f4dc4af94bb088924e139f81a9e885f", + "research/fixed_patch_jet_closure_20261013/cpu_stdout.txt": "4e1f371a568eb1c2a7912cb5ea564c8c23f0106dbc41a68f179bbcafdff2cdff", + "research/fixed_patch_jet_closure_20261013/layout_uncropped.png": "0ef6709c02ed5beba5707e033d9f6f9795a9bbfe3d7fc23341fa7dab6e85288c", + "research/fixed_patch_jet_closure_20261013/cpu_results.json": "6bae91721db9051f18bbf89dacca40b80410f84f037e7732cb1af4eadc24aaf8", + "research/j3-offline-2026-10-12/REVIEW.md": "d9902c58498e73c29e054b23adb968f7e1e14421cba5c58d03bbc5a50159ae79", + "research/j3-offline-2026-10-12/lags.csv": "fbd9addd413f24c47f4411317e872265bb774e8e1724fe169412befa860ae94d", + "research/j3-offline-2026-10-12/localization.png": "a72907638e32b0ecfc2205bea438e7b408f40aad86217ce6ad9b4877840c9cfc", + "research/j3-offline-2026-10-12/results.json": "cdb857bea6f4e06ed15acf773505ce6d5147f8cb8ce0a53cc368ee267cde6361", + "research/j3-offline-2026-10-12/cpu-analysis.log": "bc02a9b197fc15ae1b503ca54655a7622d4361f9b45b7848ff9c387ea3665f11", + "research/j3-offline-2026-10-12/regions.csv": "3a8fc640b61d70e3b7f73d2bf8ac2bd3f720adf39a90dfda6180430e0489efae", + "research/fixed_patch_jet_records_20261013/incremental.patch": "63485fb4eee8e2e89b683961aee32a6ca00ef5e607a362efb3290f3a08809222", + "research/fixed_patch_jet_records_20261013/baseline.json": "d73ddb2a6629f03655aa05fae08bb4bbc9474c686af56dbe29c99d6491b7508e", + "research/fixed_patch_jet_records_20261013/manifest.json": "97a2fbf139985a19cb6c0e0818646571fa1bcfb23e36424998a64777db641592", + "research/fixed_patch_jet_records_20261013/before.json": "68ec7ef820d5f826b6e24c6afdef71c76bd22400393815321ac3a1905c437796", + "research/fixed_patch_jet_records_20261013/notes.txt": "6d55a6395833fa02883357752ab3d8ea43df516fbcb40e4006fb1756757b1e99", + "research/fixed_patch_jet_records_20261013/stdout.txt": "6e579eff0c1762ba31d8b1cee709e0cdba2e3f408432b71fe374b2d9f450665c", + "research/fixed_patch_jet_records_20261013/results.json": "7997ee1626ad0640a9d362499c8e0eeefe9d71913fef5f2280112d5bdc9b50d4", + "research/fixed_patch_jet_records_20261013/fixed_patch_jet.py": "7d6370fe6d8b723b1b3e1492e89fcc72562383c0dc030c25a254ac3fc899845a", + "research/fixed_patch_jet_records_20261013/output/summary.json": "a448c2e66a56ee48071315d6f73d0ec1afccc29d680ab3a40d51d1df62dd973a", + "research/fixed_patch_jet_records_20261013/output/velocity.png": "7c67c5f64a4bec94547c0ac7833e6d47eeaae9696904c1465a9d5d969008b79d", + "research/fixed_patch_jet_records_20261013/output/layout.png": "678ba19a51c112960ace2a4b8d9d94e43287d97c3a6ef892684630ab37b70255", + "research/j2-slot-2026-10-12/REVIEW.md": "10c4a94ffc32e0a2c4e0f6593b7cfc28479b5869f279f0b9d0b708fa3a47d1e6", + "research/j2-slot-2026-10-12/gpu-serialization-failure.log": "df804e53b35e7ddaad79a17842b4b5fd9d834e29ca2d56edb00e835848d09200", + "research/j2-slot-2026-10-12/baseline-status.txt": "812616e2d941efcf854e1b37d6e662dda1aaf2b69074fcc04017133e13b72166", + "research/j2-slot-2026-10-12/baseline.json": "e82a1844145fd0cbc585c581b29f80b56193f122cfe1dfa7578f26904a720285", + "research/j2-slot-2026-10-12/cli.log": "9482ad7101d501f27f92e204b2f3ae5c6d91bd887b525aa31cb4a2a188f3cb92", + "research/j2-slot-2026-10-12/cpu.log": "91aba5961006909fbbb860429a9d3cfc930112a0d74c7788bc51c0a5897b47e5", + "research/j2-slot-2026-10-12/gpu-validation.log": "223351b52c70fa4523289f3a1b3db435a11286379253280470900ffe397580a6", + "research/j2-slot-2026-10-12/results.json": "7d35ca7989aed5380e0a45de7f583972566fc516a051da63c53b35514e267494", + "research/j2-slot-2026-10-12/incremental.diff": "c9e391bc91438cd912c1ed5a419705d4388522f672c67a066cfc055e814e699f", + "research/design-2026-10-09/math-and-history.md": "64f8c82e4949d6f58b46faa09800958714859c36cad20bbeeae8b449ae7a6099", + "research/design-2026-10-09/math-checks.json": "94750381954317cde8d649db26beaed8ea945666572a05030ca2b4d97d384011", + "research/design-2026-10-09/Contracts.lean": "2442d9a778ef20e8af3fecf23be6fea6d73c6299ff744c9664b652bc5ee3f034", + "research/design-2026-10-09/jet-study.md": "a362142ef04a5ad5dbb4c9db9d221b1199dccec53780c8f2da49a15201cfe529", + "research/design-2026-10-09/PLAN.zh-CN.md": "0341dd7ee306a040340c8e5dedb07a109e931c27dbf3c994d072aa78e3b6bc67", + "research/design-2026-10-09/jet_closure_results.json": "12cf7d400a206f9f9ec9ea6ad251fe6bb0232e27bcbed22fbc1ead2c0fc7d249", + "research/design-2026-10-09/grid-study.md": "4435dc1275ec5e15b118becc6ac391f306195d1e5beaa58037b1aff3bb2465c7", + "research/design-2026-10-09/jet_closure_check.py": "fde45d0f8518740ef5c0bf0fe7635d6adaf9a2e789927dd4e68e991c138ddc30", + "research/design-2026-10-09/api-architecture-study.md": "d6fb45ec784f0e1db55fb9f34e137b9f551db0b9b39fd4f0ef247a78fc34eedf", + "research/design-2026-10-09/math_checks.py": "4254983a783fe4bad8888b3d7c243c87d991c7bbf242edb0f56f25cbaefee890", + "research/wall_seam_pulse_20261014/analyze.py": "2b174826ffaee96c147bd247ef5e322cb51d55ce506f330bac021afd012560f7", + "research/wall_seam_pulse_20261014/stdout.txt": "4a555ab2412d6b6974ba42f213fa394c6b438a3762981a135cbddfeff5598ae2", + "research/wall_seam_pulse_20261014/run.json": "4466aafbea16f9af46d70a5da4c8ce69ea7d5fcd256181f083cc728d1c35bfe9", + "research/wall_seam_pulse_20261014/interpretation.txt": "9785c6814a25cddbf5e74b4cb1ba421287c920d97a502425d6739667185a24c6", + "research/wall_seam_pulse_20261014/results.json": "29b7588e4cc86750d63567315fd430c9de20be5419bb45f8bca4a5259f6473aa", + "research/wall_seam_pulse_20261014/sources.csv": "765f6e8b7545304675688295153ee6c94deacfbfb52571c831021ca03f4bb98d", + "research/refinement_example_20261013/incremental.patch": "6acd05df6669ccdcf234ac1680c6e76c75a2587974adb6728f7edda6fd625b69", + "research/refinement_example_20261013/baseline.json": "ae0af15ddb40709d1e348655a665264984a240ded1e28af816a8000d08e784be", + "research/refinement_example_20261013/manifest.json": "6da85ac513065dcf49200bc0872bec38b6c7ba61f7d82036c2189cabe5ac29ce", + "research/refinement_example_20261013/before.json": "d95cd518f080eab92af5e53e1e9b6b6fad626eae51990e510d2d2f2ae9d0ec7b", + "research/refinement_example_20261013/notes.txt": "f111f8cba94b43d1127945fa41615037e1740efcfc529e802338dd8c4ff02795", + "research/refinement_example_20261013/stdout.txt": "9c59fb315a5552cce4ceab171003e425bf64d747137c89bd86d8779a34adcbd1", + "research/refinement_example_20261013/results.json": "8ab13bbc022f2a66898aa07ed94f43cb6716570e7a360a809b7fcd097316db7e", + "research/j3-reservoir-2026-10-12/gpu-availability-sandbox.log": "1d58470512e583a0acfabf6896ee5f31e5b493b8231aed54b864f64eb275b02c", + "research/j3-reservoir-2026-10-12/REVIEW.md": "1ea5f860728584ea6cbe40ba3994e40471102d8e2cf6d93e28fe47222cba0cab", + "research/j3-reservoir-2026-10-12/baseline-status.txt": "0ef1a8c9878c4053ebc1a7d4bace6d4ec38bf27ace167b4239ddbb1c6c897e20", + "research/j3-reservoir-2026-10-12/baseline.json": "847fefd1eae971985d34d04d89ee6d6f1c91f6940c54fe351d112faba7bc6838", + "research/j3-reservoir-2026-10-12/cpu.log": "b33f6c1a1b0ee67968c4cff85d491e46e30e0d6c796b552629714ab8b5dcead0", + "research/j3-reservoir-2026-10-12/gpu-validation.log": "ff04024db197e332f37c912a96413e3251fd0186947348ffbc33af6f4a899f2c", + "research/j3-reservoir-2026-10-12/results.json": "49685de7679a14860258abf1753aaa6d116ad709b868d907ddb40e74c9b845ea", + "research/j3-reservoir-2026-10-12/incremental.diff": "fae312831d71e46dd477a640b06ed927853a9e735d26bf9f5868927fa31cfa56" +} diff --git a/research/fine_surface_joint_20261014/blow_boundary.csv b/research/fine_surface_joint_20261014/blow_boundary.csv new file mode 100644 index 0000000..e13363b --- /dev/null +++ b/research/fine_surface_joint_20261014/blow_boundary.csv @@ -0,0 +1,49 @@ +step,substep,time,bfl_error,drive_mass,latest_body_impulse_x,latest_body_impulse_y,latest_body_angular_impulse,boundary_m,boundary_px,boundary_py,fine_transfer_m,fine_transfer_px,fine_transfer_py +1,1,0.5,3.7331066016221826e-09,0.0015482567250728607,-0.0010669911280274391,-0.0009111231192946434,-1.3296011179275702e-05,0.0015482567250728607,0.0010669846087694168,0.0009111212566494942,0.0,0.0,0.0 +1,2,1.0,7.450580596923828e-09,0.00155003224242226,-0.0005924226716160774,-0.0005089053884148598,-6.828160713734377e-06,0.0018995041027665138,0.0005924198776483536,0.0005089100450277328,-3.557652235031128e-07,0.0,0.0 +2,1,1.5,9.730734440438482e-09,0.0015509553987416245,-0.0007510213181376457,-0.0006337100639939308,-6.453869729639017e-06,0.0018004681915044785,0.0007510194554924965,0.0006337091326713562,-8.530914783477783e-07,-7.450580596923828e-09,-1.6763806343078613e-07 +2,2,2.0,7.450580596923828e-09,0.0015510943465718227,-0.0007005799561738968,-0.0005853474140167236,9.16537625561542e-06,0.0019320533610880375,0.0007005711086094379,0.0005853441543877125,-1.3401731848716736e-06,2.7939677238464355e-09,-9.313225746154785e-10 +3,1,2.5,8.252825436927402e-09,0.0015511169589478664,-0.0007204441353678703,-0.0006065750494599342,-1.9204094044988906e-06,0.0019155647605657578,0.0007204404100775719,0.0006065657362341881,-1.6577541828155518e-06,1.5832483768463135e-07,1.5832483768463135e-07 +3,2,3.0,9.915552157124807e-09,0.0015509250112041078,-0.0006797974929213524,-0.0005730642005801201,2.2820092603348385e-06,0.0019676131196320057,0.0006797960959374905,0.0005730544216930866,-1.982320100069046e-06,3.1152740120887756e-07,3.096647560596466e-07 +4,1,3.5,9.13659503609665e-09,0.0015507420136590903,-0.0006570117548108101,-0.0005553392693400383,-3.1137037854733762e-06,0.00195569870993495,0.0006570047698915005,0.0005553369410336018,-3.2121315598487854e-06,3.5297125577926636e-07,3.762543201446533e-07 +4,2,4.0,7.450580596923828e-09,0.0015504969629409936,-0.0006134528666734695,-0.0005185604095458984,-2.5563305094955524e-07,0.001978149637579918,0.0006134519353508949,0.0005185585469007492,-3.698747605085373e-06,-3.585591912269592e-08,1.909211277961731e-08 +5,1,4.5,7.450580596923828e-09,0.0015502991826538432,-0.0005827639251947403,-0.0004925131797790527,-2.496779667127136e-06,0.001968016382306814,0.0005827643908560276,0.0004925071261823177,-3.6563724279403687e-06,5.550682544708252e-07,2.4121254682540894e-07 +5,2,5.0,7.450580596923828e-09,0.0015500768212474217,-0.0005441568791866302,-0.00045982934534549713,-6.621178455512577e-07,0.0019786693155765533,0.0005441587418317795,0.00045982934534549713,-3.6312267184257507e-06,5.122274160385132e-07,2.2258609533309937e-07 +6,1,5.5,7.450580596923828e-09,0.001549918623869907,-0.0005141962319612503,-0.00043411366641521454,-1.9021591811663185e-06,0.0019702534191310406,0.000514195766299963,0.00043410947546362877,-2.8940849006175995e-06,5.164183676242828e-07,3.213062882423401e-08 +6,2,6.0,7.450580596923828e-09,0.0015497499199425297,-0.0004802681505680084,-0.0004054997116327286,-7.309877421146638e-07,0.0019760499708354473,0.0004802667535841465,0.00040551135316491127,-3.33273783326149e-06,-3.0687078833580017e-07,-2.1746382117271423e-07 +7,1,6.5,6.764444948625936e-09,0.0015496176481223653,-0.0004520462825894356,-0.0003813067451119423,-1.5892076227208562e-06,0.001969610806554556,0.00045204488560557365,0.00038131000474095345,-7.304362952709198e-06,-2.8349459171295166e-06,-1.5050172805786133e-06 +7,2,7.0,8.109305865700023e-09,0.0015494958415757888,-0.00042206887155771255,-0.0003560921177268028,-7.75549964804334e-07,0.0019731801003217697,0.0004220716655254364,0.00035608746111392975,-1.9578728824853897e-05,-1.0931398719549179e-05,-6.151851266622543e-06 +8,1,7.5,7.94549828708746e-09,0.0015493981799709084,-0.00039640720933675766,-0.000333922915160656,-1.3677983846660524e-06,0.001968265976756811,0.00039641233161091805,0.0003339252434670925,-5.536805838346481e-05,-2.580694854259491e-05,-1.5653669834136963e-05 +8,2,8.0,8.57936799381065e-09,0.0015493020071895578,-0.00037000514566898346,-0.00031171925365924835,-8.318499384873945e-07,0.0019705859012901783,0.00037001678720116615,0.0003117159940302372,-0.00011411821469664574,-6.15590251982212e-05,-3.886828199028969e-05 +9,1,8.5,8.998468456478115e-09,0.0015492362139466068,-0.0003468478098511696,-0.0002919333055615425,-1.3410125925261696e-06,0.0019667870365083218,0.0003468613140285015,0.0002919272519648075,-0.00023686187341809273,-9.644916281104088e-05,-6.473483517765999e-05 +9,2,9.0,1.0769307515201554e-08,0.0015491672233875443,-0.0003237603232264519,-0.00027247238904237747,-8.826204219714029e-07,0.0019684722647070885,0.0003237677738070488,0.0002724668011069298,-0.0003811251372098923,-0.00018009915947914124,-0.00012547895312309265 +10,1,9.5,6.5991891951000525e-09,0.001549105281009374,-0.00030333735048770905,-0.00025494955480098724,-1.3582019926516864e-06,0.0019654426723718643,0.0003033336251974106,0.000254947692155838,-0.0006271977908909321,-0.00022491207346320152,-0.00016344105824828148 +10,2,10.0,6.118484829897852e-09,0.001549051989981235,-0.0002833334729075432,-0.00023819785565137863,-9.026330124450865e-07,0.001966737676411867,0.0002833292819559574,0.0002382085658609867,-0.0008610719814896584,-0.0003546644002199173,-0.00026744231581687927 +11,1,10.5,6.552038911422642e-09,0.00154901751549866,-0.0002655861899256706,-0.0002231122925877571,-1.2630542108871268e-06,0.001964384224265814,0.00026558665558695793,0.00022311368957161903,-0.0011930274777114391,-0.00039019854739308357,-0.0003034067340195179 +11,2,11.0,9.802380018797408e-09,0.0015489874147144294,-0.00024848151952028275,-0.00020880158990621567,-9.786817930512726e-07,0.0019654412753880024,0.00024848291650414467,0.00020880764350295067,-0.001470054965466261,-0.0005364310927689075,-0.0004325839690864086 +12,1,11.5,1.0565094576975298e-08,0.0015489509835935602,-0.00023323949426412582,-0.0001959698274731636,-1.174757736199794e-06,0.0019635832868516445,0.00023323623463511467,0.000195962842553854,-0.0017936332151293755,-0.0005537522956728935,-0.0004546362906694412 +12,2,12.0,1.0153207108398732e-08,0.0015489143609847475,-0.00021865405142307281,-0.00018392689526081085,-9.567065110127615e-07,0.001964456867426634,0.00021865731105208397,0.0001839236356317997,-0.00204546470195055,-0.0006773108616471291,-0.0005757706239819527 +13,1,12.5,6.847925559938517e-09,0.0015489000506591615,-0.00020564347505569458,-0.00017303228378295898,-1.229019973680856e-06,0.0019629797898232937,0.0002056504599750042,0.00017301971092820168,-0.002280890941619873,-0.00067916139960289,-0.000582011416554451 +13,2,13.0,1.1770799335231175e-08,0.0015488750333560626,-0.0001933462917804718,-0.00016286037862300873,-9.379367493789204e-07,0.0019637630321085453,0.00019335513934493065,0.00016285711899399757,-0.002459546085447073,-0.0007534711621701717,-0.0006643435917794704 +14,1,13.5,8.936060558184522e-09,0.0015488612668431816,-0.00018239393830299377,-0.00015359185636043549,-1.2376870923702654e-06,0.001962530892342329,0.000182389747351408,0.00015358394011855125,-0.002583651803433895,-0.0007450981065630913,-0.0006575053557753563 +14,2,14.0,1.2725840020655355e-08,0.0015488343418273527,-0.0001720944419503212,-0.00014511216431856155,-8.9041709272486e-07,0.001963145099580288,0.00017209816724061966,0.00014511402696371078,-0.002680632285773754,-0.0007635904476046562,-0.0006860606372356415 +15,1,14.5,9.446215296082805e-09,0.0015488229734234565,-0.0001630391925573349,-0.00013743527233600616,-1.146773010329838e-06,0.001962078735232353,0.00016304105520248413,0.00013743527233600616,-0.0027179024182260036,-0.0007485975511372089,-0.000670840498059988 +15,2,15.0,9.313422921763959e-09,0.001548801691143042,-0.00015463586896657944,-0.00013038236647844315,-9.957984490327476e-07,0.0019625588320195675,0.0001546279527246952,0.0001303856261074543,-0.002754406537860632,-0.0007191230542957783,-0.000647230539470911 +16,1,15.5,7.756034481332108e-09,0.001548795055197433,-0.00014728587120771408,-0.00012414250522851944,-1.19767199602272e-06,0.001961618661880493,0.0001472746953368187,0.00012414157390594482,-0.0027457624673843384,-0.000701194629073143,-0.0006282757967710495 +16,2,16.0,4.9820187697502405e-09,0.0015487817877766277,-0.0001406259834766388,-0.00011855922639369965,-1.0063548837591085e-06,0.001962041947990656,0.0001406143419444561,0.00011856527999043465,-0.00275089917704463,-0.0006374767981469631,-0.0005653253756463528 +17,1,16.5,7.659630707479437e-09,0.0015487774975968425,-0.0001347297802567482,-0.00011365208774805069,-1.1021201878902431e-06,0.0019611907191574574,0.00013471907004714012,0.00011365814134478569,-0.0027269930578768253,-0.0006199139170348644,-0.0005475492216646671 +17,2,17.0,8.840773640939048e-09,0.001548763244042896,-0.00012935884296894073,-0.00010930560529232025,-1.016784981322516e-06,0.0019615269266068935,0.0001293686218559742,0.00010931165888905525,-0.002721673808991909,-0.0005361568182706833,-0.00046241283416748047 +18,1,17.5,1.2304882210378842e-08,0.0015487567261606326,-0.00012471340596675873,-0.000105343759059906,-1.0469923481526422e-06,0.001960811670869589,0.0001247120089828968,0.00010533956810832024,-0.0026941243559122086,-0.0005193613469600677,-0.00044766347855329514 +18,2,18.0,7.418095471223296e-09,0.0015487429170055658,-0.00012026354670524597,-0.00010176189243793488,-9.512738775585561e-07,0.001961167436093092,0.00012026121839880943,0.00010176049545407295,-0.0026859669014811516,-0.0004291580989956856,-0.00035731401294469833 +19,1,18.5,7.707569693593541e-09,0.0015487447557849957,-0.0001163184642791748,-9.842775762081146e-05,-1.1155910571991612e-06,0.001960610970854759,0.00011632218956947327,9.842775762081146e-05,-0.0026490092277526855,-0.00040957890450954437,-0.00034233927726745605 +19,2,19.0,9.897528907565345e-09,0.001548736220618044,-0.00011231936514377594,-9.525753557682037e-05,-8.746676823934152e-07,0.0019609862938523293,0.00011232960969209671,9.52649861574173e-05,-0.0026348931714892387,-0.0003248099237680435,-0.00026043038815259933 +20,1,19.5,7.458307527130614e-09,0.0015487257938516241,-0.00010872259736061096,-9.228847920894623e-05,-1.117876357703551e-06,0.001960530411452055,0.00010872026905417442,9.2280562967062e-05,-0.0025746123865246773,-0.000293082557618618,-0.0002375887706875801 +20,2,20.0,7.1616321761780455e-09,0.0015487109979796746,-0.00010512489825487137,-8.937250822782516e-05,-9.404776560861805e-07,0.0019608777947723866,0.00010512815788388252,8.937017992138863e-05,-0.002546322997659445,-0.00022387364879250526,-0.00017382996156811714 +21,1,20.5,1.2005225979994094e-08,0.0015487181439359362,-0.00010188575834035873,-8.659716695547104e-05,-1.0574914846017691e-06,0.0019605131819844246,0.00010188296437263489,8.659809827804565e-05,-0.002445746213197708,-0.00016940850764513016,-0.00013363640755414963 +21,2,21.0,7.5469843707765e-09,0.001548692199227755,-9.881984442472458e-05,-8.39056447148323e-05,-9.763081801894558e-07,0.0019607869908213615,9.881611913442612e-05,8.391123265028e-05,-0.0023945574648678303,-0.0001229965128004551,-9.305356070399284e-05 +22,1,21.5,6.037053218443944e-09,0.0015486938404374378,-9.613670408725739e-05,-8.161552250385284e-05,-1.0525385535364862e-06,0.00196036696434021,9.6137635409832e-05,8.160900324583054e-05,-0.002243565861135721,-3.6747660487890244e-05,-2.6164110749959946e-05 +22,2,22.0,9.586391680471706e-09,0.001548693360520578,-9.382795542478561e-05,-7.957685738801956e-05,-9.683724135900462e-07,0.001960549969226122,9.383400902152061e-05,7.956428453326225e-05,-0.0021634772419929504,-1.710653305053711e-05,-1.1105090379714966e-05 +23,1,22.5,9.489836569342991e-09,0.0015486823349255578,-9.185541421175003e-05,-7.787439972162247e-05,-1.0168454692704998e-06,0.0019601034000515938,9.18535515666008e-05,7.786881178617477e-05,-0.0019649858586490154,0.00010295165702700615,8.555082604289055e-05 +23,2,23.0,6.585969006267511e-09,0.0015486694330888832,-9.038113057613373e-05,-7.635168731212616e-05,-9.023735720870008e-07,0.0019602179527282715,9.038485586643219e-05,7.635634392499924e-05,-0.001856005284935236,9.549083188176155e-05,7.625715807080269e-05 +24,1,23.5,6.188236104098799e-09,0.0015486604639943502,-8.921325206756592e-05,-7.526762783527374e-05,-1.0200224049849993e-06,0.001959813293069601,8.920999243855476e-05,7.527368143200874e-05,-0.0016284165903925896,0.0002412758767604828,0.00019868742674589157 +24,2,24.0,9.620717680847157e-09,0.0015486650695279314,-8.823629468679428e-05,-7.427390664815903e-05,-9.335468453830487e-07,0.0019598701037466526,8.823955431580544e-05,7.426505908370018e-05,-0.0014977920800447464,0.0002111736685037613,0.00016872771084308624 diff --git a/research/fine_surface_joint_20261014/blow_collisions.csv b/research/fine_surface_joint_20261014/blow_collisions.csv new file mode 100644 index 0000000..5d5b395 --- /dev/null +++ b/research/fine_surface_joint_20261014/blow_collisions.csv @@ -0,0 +1,73 @@ +step,level,substep,max_error,max_ratio,regime,drift_m,drift_px,drift_py,ideal_defect_m,ideal_defect_px,ideal_defect_py,measured_rounding_m,measured_rounding_px,measured_rounding_py +1,fine,1,6.200234548003891e-08,0.28965071213188953,True,1.6061589121818542e-05,1.7695128917694092e-08,6.51925802230835e-09,-3.41740524767431e-16,1.214306433183765e-17,-8.673617379884035e-18,1.6061589122160283e-05,1.7695128905551027e-08,6.519258030981967e-09 +1,fine,2,9.592780092493314e-08,0.3574847775115332,True,-3.2549723982810974e-07,-1.3969838619232178e-09,-1.4435499906539917e-08,-5.4539706084710815e-15,1.3877787807814457e-17,3.469446951953614e-17,-3.2549723437413913e-07,-1.3969838758010056e-09,-1.4435499941234387e-08 +1,coarse,1,1.1080350609260492e-08,0.10456730670501622,True,-1.5292316675186157e-06,-1.30385160446167e-08,-1.5832483768463135e-07,-4.288236432614667e-15,-5.551115123125783e-17,1.3877787807814457e-17,-1.5292316632303793e-06,-1.3038515989105548e-08,-1.5832483769850914e-07 +2,fine,1,7.754918973645886e-08,0.34580397879479957,True,8.987262845039368e-07,-2.3283064365386963e-08,-1.9744038581848145e-07,-5.167741234934908e-15,-1.5612511283791264e-17,2.931682674400804e-16,8.98726289671678e-07,-2.328306434977445e-08,-1.974403861116497e-07 +2,fine,2,1.155261522001183e-07,0.321440603069343,True,2.284534275531769e-06,-2.8870999813079834e-08,8.66129994392395e-08,-1.1794384913166311e-14,-7.112366251504909e-17,2.203098814490545e-16,2.2845342873261537e-06,-2.887099974195617e-08,8.661299921892962e-08 +2,coarse,1,1.6365805183271576e-08,0.1544470929589978,True,-1.426786184310913e-06,-3.0919909477233887e-07,-3.0919909477233887e-07,-6.286637876939949e-15,-8.326672684688674e-17,-8.326672684688674e-17,-1.4267861780242752e-06,-3.0919909468907214e-07,-3.0919909468907214e-07 +3,fine,1,9.149310453704373e-08,0.3150717610922152,True,4.654750227928162e-06,1.0896474123001099e-07,6.146728992462158e-08,-1.1813466871402056e-14,1.1449174941446927e-16,2.1163626406917047e-16,4.6547502397416285e-06,1.0896474111551924e-07,6.146728971298532e-08 +3,fine,2,1.0172501863081607e-07,0.3828123813437159,True,7.561873644590378e-06,1.257285475730896e-08,5.168840289115906e-08,-1.7838161503469507e-14,8.673617379884035e-18,3.2786273695961654e-16,7.561873662428539e-06,1.2572854748635343e-08,5.168840256329632e-08 +3,coarse,1,1.0010523732173482e-07,0.2854567053212911,True,9.115785360336304e-06,3.3155083656311035e-07,3.203749656677246e-07,-3.837208328860697e-15,1.5334955527634975e-15,1.2420620087993939e-15,9.115785364173512e-06,3.315508350296148e-07,3.203749644256626e-07 +4,fine,1,1.1511500297434196e-07,0.3632811360585352,True,1.1234544217586517e-05,3.3155083656311035e-07,2.3469328880310059e-07,-2.0365653607967715e-14,2.5673907444456745e-16,2.393918396847994e-16,1.1234544237952171e-05,3.315508363063713e-07,2.3469328856370875e-07 +4,fine,2,1.323716875001324e-07,0.420721981505359,True,1.0875053703784943e-05,7.171183824539185e-08,5.4016709327697754e-08,-1.6948248360293405e-14,-6.83481049534862e-16,-4.0939474033052647e-16,1.0875053720733191e-05,7.17118389288729e-08,5.4016709737092494e-08 +4,coarse,1,1.2150177930436712e-07,0.37139422446265463,True,1.3064593076705933e-05,5.997717380523682e-07,5.62518835067749e-07,-1.2559397966072083e-14,-5.967448757360216e-16,-2.498001805406602e-16,1.306459308926533e-05,5.99771738649113e-07,5.625188353175492e-07 +5,fine,1,1.2583242237074188e-07,0.3554646638422362,True,9.815674275159836e-06,-2.789311110973358e-07,-3.608874976634979e-07,-1.565240992373873e-14,-1.9949319973733282e-16,-3.642919299551295e-17,9.815674290812246e-06,-2.789311108978426e-07,-3.6088749762706873e-07 +5,fine,2,1.2541811456046048e-07,0.3685724336736591,True,9.207520633935928e-06,-2.5192275643348694e-07,-4.0512531995773315e-08,-1.5307199952019346e-14,3.469446951953614e-17,4.3021142204224816e-16,9.207520649243128e-06,-2.519227564681814e-07,-4.051253242598474e-08 +5,coarse,1,1.2532259030528792e-07,0.38942307019337585,True,1.49458646774292e-05,9.723007678985596e-07,1.2628734111785889e-06,-1.6535384173010925e-14,1.5959455978986625e-16,6.175615574477433e-16,1.4945864693964583e-05,9.72300767738965e-07,1.2628734105610273e-06 +6,fine,1,1.0399005534456052e-07,0.4260869217553865,True,5.527399480342865e-06,-8.754432201385498e-08,-1.555308699607849e-07,-1.4764231504038605e-14,4.336808689942018e-17,3.86843335142828e-16,5.5273994951070965e-06,-8.754432205722307e-08,-1.5553087034762825e-07 +6,fine,2,1.295425238190262e-07,0.36331211716460343,True,5.567912012338638e-06,-2.6542693376541138e-08,-2.0908191800117493e-07,-1.4812803761365956e-14,-5.186823193170653e-16,1.734723475976807e-18,5.567912027151442e-06,-2.654269285785882e-08,-2.0908191800290965e-07 +6,coarse,1,1.0239773140519048e-07,0.43028837580529966,True,1.3461336493492126e-05,5.308538675308228e-07,4.2654573917388916e-07,-2.033095913844818e-14,2.0816681711721685e-16,1.2212453270876722e-15,1.3461336513823086e-05,5.308538673226559e-07,4.2654573795264383e-07 +7,fine,1,1.1958961998459472e-07,0.4029625240438387,True,5.150679498910904e-06,-5.3551048040390015e-08,-7.497146725654602e-08,-1.5931700403370996e-14,-5.204170427930421e-17,-1.700029006457271e-16,5.150679514842604e-06,-5.355104798834831e-08,-7.497146708654312e-08 +7,fine,2,1.265965450247819e-07,0.3851888208747954,True,3.789551556110382e-06,0.0,3.725290298461914e-09,-1.5173626244369132e-14,7.806255641895632e-17,3.903127820947816e-16,3.7895515712840083e-06,-7.806255641895632e-17,3.725289908149132e-09 +7,coarse,1,1.0902046165828239e-07,0.38161058826685446,True,1.2835487723350525e-05,8.326023817062378e-07,-2.6635825634002686e-07,-2.4501234374696423e-14,-5.48172618408671e-16,-2.5673907444456745e-16,1.283548774785176e-05,8.326023822544104e-07,-2.663582560832878e-07 +8,fine,1,1.2448945463372496e-07,0.3720247984466396,True,2.2617168724536896e-06,7.869675755500793e-08,3.259629011154175e-09,-1.5289852717259578e-14,7.28583859910259e-17,-2.636779683484747e-16,2.2617168877435423e-06,7.869675748214955e-08,3.259629274832143e-09 +8,fine,2,1.3473279458775522e-07,0.39946262369614577,True,2.4368055164813995e-06,7.031485438346863e-08,-1.5366822481155396e-08,-1.6287318715946242e-14,4.683753385137379e-17,-1.196959198423997e-16,2.4368055327687183e-06,7.03148543366311e-08,-1.5366822361459476e-08 +8,coarse,1,1.265961931951054e-07,0.38341345468786764,True,8.130446076393127e-06,7.506459951400757e-07,-5.830079317092896e-07,-2.2391810627908626e-14,-1.6861512186494565e-15,1.0408340855860843e-16,8.130446098784938e-06,7.506459968262269e-07,-5.83007931813373e-07 +9,fine,1,1.3222774730703435e-07,0.3900959817916434,True,2.078711986541748e-06,8.568167686462402e-08,6.239861249923706e-08,-1.5612511283791264e-14,-2.5326962749261384e-16,2.42861286636753e-16,2.0787120021542593e-06,8.568167711789365e-08,6.239861225637577e-08 +9,fine,2,1.2824470274619415e-07,0.4272642246416919,True,8.78702849149704e-07,9.266659617424011e-08,-1.3830140233039856e-07,-1.4988010832439613e-14,-1.6653345369377348e-16,-1.2836953722228372e-16,8.787028641377148e-07,9.266659634077357e-08,-1.3830140220202902e-07 +9,coarse,1,1.1335454486172125e-07,0.3876201969620664,True,5.185604095458984e-06,-2.384185791015625e-07,-6.07222318649292e-07,-2.583350200424661e-14,3.122502256758253e-16,7.632783294297951e-17,5.185604121292486e-06,-2.384185794138127e-07,-6.072223187256198e-07 +10,fine,1,1.2645846059200494e-07,0.3781818251482199,True,2.073124051094055e-06,6.426125764846802e-08,1.0151416063308716e-07,-1.6764367671839864e-14,2.949029909160572e-16,-2.1163626406917047e-16,2.073124067858423e-06,6.426125735356503e-08,1.0151416084472342e-07 +10,fine,2,1.3663077158554415e-07,0.43888780198316496,True,1.5008263289928436e-06,7.031485438346863e-08,1.9883736968040466e-07,-1.6273440928138427e-14,-1.4051260155412137e-16,6.071532165918825e-17,1.5008263452662846e-06,7.031485452398123e-08,1.9883736961968934e-07 +10,coarse,1,1.5257769281351585e-07,0.4176679708473079,True,4.520639777183533e-06,-5.904585123062134e-07,-3.166496753692627e-08,-2.443184543565735e-14,-4.649058915617843e-16,1.0408340855860843e-16,4.520639801615378e-06,-5.904585118413075e-07,-3.166496764100968e-08 +11,fine,1,1.4342478449336227e-07,0.40055388671598813,True,9.159557521343231e-07,1.4388933777809143e-07,1.103617250919342e-07,-1.6368850719317152e-14,-7.979727989493313e-17,-1.3877787807814457e-17,9.159557685031738e-07,1.438893378578887e-07,1.1036172510581199e-07 +11,fine,2,1.229973988214894e-07,0.44018383771634995,True,1.3504177331924438e-06,-2.7939677238464355e-08,-3.725290298461914e-09,-1.6167622796103842e-14,-1.942890293094024e-16,1.457167719820518e-16,1.3504177493600666e-06,-2.7939677044175326e-08,-3.725290444178686e-09 +11,coarse,1,1.0126133054289e-07,0.37920635013850246,True,2.175569534301758e-06,-1.341104507446289e-07,1.2665987014770508e-07,-2.38073449843057e-14,9.020562075079397e-17,5.759281940243e-16,2.175569558109103e-06,-1.3411045083483453e-07,1.2665986957177688e-07 +12,fine,1,1.2071681543268653e-07,0.4311470967916149,True,1.3746321201324463e-06,-2.1420419216156006e-08,1.4528632164001465e-07,-1.6273440928138427e-14,-2.237793284010081e-16,-4.0072112295064244e-16,1.3746321364058872e-06,-2.1420418992376677e-08,1.4528632204073577e-07 +12,fine,2,1.371591822341145e-07,0.44227593234711177,True,1.982320100069046e-06,9.73232090473175e-08,1.448206603527069e-07,-1.6818144099595145e-14,-2.96637714392034e-16,1.214306433183765e-17,1.98232011688719e-06,9.732320934395522e-08,1.4482066034056384e-07 +12,coarse,1,1.2813768046626706e-07,0.42388935775355246,True,3.3173710107803345e-06,-4.898756742477417e-07,-1.8067657947540283e-07,-2.7193525209412428e-14,-1.1171619185290638e-15,-4.649058915617843e-16,3.3173710379738597e-06,-4.898756731305798e-07,-1.8067657901049694e-07 +13,fine,1,1.3950153099351326e-07,0.4396993900025004,True,1.2670643627643585e-06,2.3050233721733093e-07,1.2153759598731995e-07,-1.662038562333379e-14,3.903127820947816e-16,9.194034422677078e-17,1.2670643793847441e-06,2.3050233682701815e-07,1.215375958953796e-07 +13,fine,2,1.2581214114959494e-07,0.4721292711508529,True,1.1995434761047363e-06,3.7159770727157593e-07,1.0710209608078003e-07,-1.5909148998183298e-14,-8.153200337090993e-17,9.540979117872439e-17,1.1995434920138853e-06,3.7159770735310793e-07,1.0710209598537024e-07 +13,coarse,1,1.2660152992616247e-07,0.45318197065007865,True,7.878988981246948e-07,-1.210719347000122e-07,3.334134817123413e-07,-2.346040028911034e-14,-4.2327252813834093e-16,2.706168622523819e-16,7.878989215850951e-07,-1.2107193427673968e-07,3.3341348144172445e-07 +14,fine,1,1.5054562552130335e-07,0.5104225030616341,True,6.658956408500671e-07,1.778826117515564e-07,-2.60770320892334e-08,-1.6335890973273592e-14,2.96637714392034e-16,3.86843335142828e-16,6.658956571859581e-07,1.7788261145491868e-07,-2.6077032476076734e-08 +14,fine,2,1.3530934717120857e-07,0.4009751179733903,True,1.2051314115524292e-06,-1.955777406692505e-08,1.6205012798309326e-07,-1.6099968580540747e-14,-1.5785983631388945e-16,8.500145032286355e-17,1.2051314276523978e-06,-1.9557773909065213e-08,1.620501278980918e-07 +14,coarse,1,1.3409460186686317e-07,0.39963893479139145,True,3.9692968130111694e-06,8.754432201385498e-08,2.9616057872772217e-07,-2.5528190672474693e-14,-6.245004513516506e-17,-6.314393452555578e-16,3.96929683853936e-06,8.754432207630503e-08,2.961605793591615e-07 +15,fine,1,1.2702620799665e-07,0.37981873927853255,True,1.000240445137024e-06,-3.166496753692627e-08,7.729977369308472e-08,-1.607568245187707e-14,-2.1337098754514727e-16,1.4051260155412137e-16,1.0002404612127064e-06,-3.166496732355528e-08,7.729977355257212e-08 +15,fine,2,1.1264902777252672e-07,0.42131603992753336,True,8.651986718177795e-07,-4.377216100692749e-08,-1.0151416063308716e-07,-1.5992415725030185e-14,4.336808689942018e-17,3.2959746043559335e-17,8.651986878101953e-07,-4.377216105029558e-08,-1.015141606660469e-07 +15,coarse,1,1.305862756817433e-07,0.5086178241462508,True,1.6335397958755493e-06,-6.146728992462158e-08,2.2165477275848389e-07,-2.533390164316529e-14,-4.85722573273506e-17,2.706168622523819e-16,1.633539821209451e-06,-6.146728987604932e-08,2.2165477248786702e-07 +16,fine,1,1.3092614292720128e-07,0.40502514569399495,True,9.629875421524048e-07,-9.685754776000977e-08,8.66129994392395e-08,-1.6838960781306866e-14,-9.194034422677078e-17,8.500145032286355e-17,9.629875589913656e-07,-9.685754766806942e-08,8.661299935423805e-08 +16,fine,2,1.3893401662468108e-07,0.39764517507033376,True,1.5990808606147766e-06,-8.009374141693115e-08,-5.3085386753082275e-08,-1.6518036938251157e-14,3.0531133177191805e-16,3.5735303605122226e-16,1.5990808771328135e-06,-8.009374172224248e-08,-5.308538711043531e-08 +16,coarse,1,1.2888908407227007e-07,0.4083972967001409,True,5.159527063369751e-06,-4.3213367462158203e-07,1.4901161193847656e-07,-2.6131874442114622e-14,7.216449660063518e-16,-3.885780586188048e-16,5.159527089501625e-06,-4.32133675343227e-07,1.4901161232705462e-07 +17,fine,1,1.249536419889452e-07,0.39288318869275274,True,1.12876296043396e-06,-1.7601996660232544e-07,-2.3283064365386963e-07,-1.7957857423311907e-14,-5.551115123125783e-16,1.3530843112619095e-16,1.1287629783918174e-06,-1.7601996604721393e-07,-2.3283064378917806e-07 +17,fine,2,1.3328934989065289e-07,0.46401164838116316,True,7.129274308681488e-07,-2.1373853087425232e-07,-2.6496127247810364e-07,-1.634803403760543e-14,-2.914335439641036e-16,9.71445146547012e-17,7.129274472161828e-07,-2.1373853058281878e-07,-2.6496127257524815e-07 +17,coarse,1,1.246264329513025e-07,0.4613853551985751,True,5.302950739860535e-06,-2.0675361156463623e-07,1.1362135410308838e-07,-2.8373137173076657e-14,7.7021722333370235e-16,-6.869504964868156e-16,5.302950768233672e-06,-2.0675361233485345e-07,1.1362135479003888e-07 +18,fine,1,1.5840482392448507e-07,0.48249679461224454,True,8.10716301202774e-07,-1.4016404747962952e-07,-2.6402994990348816e-07,-1.6878859421254333e-14,7.632783294297951e-17,2.0816681711721685e-17,8.107163180816335e-07,-1.4016404755595735e-07,-2.6402994992430484e-07 +18,fine,2,1.217794476371381e-07,0.4447119430321027,True,1.4016404747962952e-07,-2.8545036911964417e-07,-8.847564458847046e-09,-1.709223040879948e-14,-1.1275702593849246e-16,1.8214596497756474e-16,1.4016406457185993e-07,-2.8545036900688714e-07,-8.847564640993011e-09 +18,coarse,1,1.3857981828735433e-07,0.4519491616828685,True,5.850568413734436e-06,-1.2479722499847412e-07,-1.471489667892456e-07,-2.688821387764051e-14,-8.534839501805891e-16,9.08995101411847e-16,5.85056844062265e-06,-1.2479722414499017e-07,-1.471489676982407e-07 +19,fine,1,1.4433919059975153e-07,0.3821888438774327,True,1.9441358745098114e-06,-1.3969838619232178e-09,-2.7474015951156616e-08,-1.628905343942222e-14,-3.920475055707584e-16,2.42861286636753e-17,1.944135890798865e-06,-1.3969834698757122e-09,-2.7474015975442745e-08 +19,fine,2,1.4349667698532187e-07,0.4183999473130793,True,2.1490268409252167e-06,1.7834827303886414e-07,-7.869675755500793e-08,-1.678344963007561e-14,-5.204170427930421e-18,2.949029909160572e-17,2.1490268577086663e-06,1.783482730440683e-07,-7.869675758449823e-08 +19,coarse,1,1.264100825126846e-07,0.5347769553832019,True,5.165114998817444e-06,3.91155481338501e-08,1.1734664440155029e-07,-2.6804947150793623e-14,-4.2327252813834093e-16,-3.8163916471489756e-16,5.165115025622391e-06,3.9115548557122626e-08,1.1734664478318946e-07 +20,fine,1,1.1464598925758906e-07,0.39800949885565845,True,1.8593855202198029e-06,7.031485438346863e-08,-2.2817403078079224e-08,-1.695171780724536e-14,1.457167719820518e-16,-7.632783294297951e-17,1.8593855371715207e-06,7.031485423775186e-08,-2.281740300175139e-08 +20,fine,2,1.3166252321727967e-07,0.41581763506478076,True,2.2118911147117615e-06,9.313225746154785e-10,9.033828973770142e-08,-1.7095699855751434e-14,-3.7643499428696714e-16,2.0990154059319366e-16,2.2118911318074613e-06,9.313229510504728e-10,9.033828952779988e-08 +20,coarse,1,1.3024161815700097e-07,0.47356066681074566,True,4.023313522338867e-06,5.997717380523682e-07,-8.568167686462402e-08,-2.7228219678931964e-14,3.0531133177191805e-16,3.7470027081099033e-16,4.023313549567087e-06,5.997717377470568e-07,-8.56816772393243e-08 +21,fine,1,1.361732063775989e-07,0.4205892378883329,True,2.439599484205246e-06,1.4854595065116882e-07,-1.327134668827057e-07,-1.6781714906599632e-14,3.885780586188048e-16,8.673617379884035e-17,2.439599500986961e-06,1.4854595026259076e-07,-1.3271346696944186e-07 +21,fine,2,1.2473161092874108e-07,0.45376916235253945,True,2.2514723241329193e-06,3.5902485251426697e-07,1.9976869225502014e-07,-1.692396223162973e-14,6.938893903907228e-17,-1.457167719820518e-16,2.2514723410568815e-06,3.5902485244487803e-07,1.9976869240073691e-07 +21,coarse,1,1.5484813187249813e-07,0.561763881940829,True,3.507360816001892e-06,7.431954145431519e-07,6.202608346939087e-07,-2.6131874442114622e-14,-4.579669976578771e-16,1.5265566588595902e-16,3.5073608421337665e-06,7.431954150011189e-07,6.20260834541253e-07 +22,fine,1,1.1594882032284204e-07,0.46103443091228286,True,1.2228265404701233e-06,2.300366759300232e-07,1.9185245037078857e-07,-1.5529244556944377e-14,-3.469446951953614e-18,7.28583859910259e-17,1.2228265559993678e-06,2.3003667593349264e-07,1.918524502979302e-07 +22,fine,2,1.4032262196650436e-07,0.41123793671363457,True,2.0829029381275177e-06,1.317821443080902e-07,1.1594966053962708e-07,-1.6656814816329302e-14,-2.42861286636753e-17,2.7755575615628914e-17,2.0829029547843325e-06,1.3178214433237634e-07,1.159496605118715e-07 +22,coarse,1,1.4061314457247676e-07,0.5696050037738337,True,5.517154932022095e-06,1.6167759895324707e-06,1.0058283805847168e-06,-2.643718577388654e-14,-4.996003610813204e-16,-4.579669976578771e-16,5.5171549584592805e-06,1.616775990032071e-06,1.0058283810426838e-06 +23,fine,1,1.172129048265802e-07,0.43537551205849856,True,1.8416903913021088e-06,2.230517566204071e-07,2.1746382117271423e-07,-1.620752143605131e-14,-4.735795089416683e-16,1.9081958235744878e-17,1.8416904075096302e-06,2.2305175709398661e-07,2.1746382115363228e-07 +23,fine,2,1.2559042006365928e-07,0.4297035689234779,True,1.998152583837509e-06,7.031485438346863e-08,4.98257577419281e-08,-1.62231339473351e-14,3.0184188481996443e-16,-3.7816971776294395e-16,1.998152600060643e-06,7.031485408162674e-08,4.982575812009782e-08 +23,coarse,1,1.5135824793510722e-07,0.4407189177218073,True,1.2038275599479675e-05,1.3243407011032104e-06,7.692724466323853e-07,-2.7304547511874944e-14,1.4502288259166107e-15,-4.371503159461554e-16,1.2038275626784223e-05,1.3243406996529816e-06,7.692724470695356e-07 +24,fine,1,1.1879041472706575e-07,0.3912946498849803,True,1.0398216545581818e-06,1.62515789270401e-07,1.3737007975578308e-07,-1.705927066275592e-14,1.6306400674181987e-16,-9.020562075079397e-17,1.0398216716174524e-06,1.62515789107337e-07,1.373700798459887e-07 +24,fine,2,1.4235627243674998e-07,0.4195513876580241,True,1.6004778444766998e-06,1.3830140233039856e-07,1.7927959561347961e-07,-1.668977456237286e-14,-1.9949319973733282e-16,1.2663481374630692e-16,1.6004778611664744e-06,1.3830140252989176e-07,1.792795954868448e-07 +24,coarse,1,1.5865499780609582e-07,0.5231448442629695,True,9.544193744659424e-06,4.5821070671081543e-07,2.942979335784912e-07,-2.545880173343562e-14,3.8163916471489756e-16,-1.457167719820518e-16,9.544193770118226e-06,4.5821070632917626e-07,2.94297933724208e-07 diff --git a/research/fine_surface_joint_20261014/blow_ledger.csv b/research/fine_surface_joint_20261014/blow_ledger.csv new file mode 100644 index 0000000..b43bbfd --- /dev/null +++ b/research/fine_surface_joint_20261014/blow_ledger.csv @@ -0,0 +1,25 @@ +step,time,average_bound_ratio,leaf_m,leaf_px,leaf_py,delta_m,delta_px,delta_py,boundary_m,boundary_px,boundary_py,fine_transfer_m,fine_transfer_px,fine_transfer_py,coarse_transfer_m,coarse_transfer_px,coarse_transfer_py,raw_m,raw_px,raw_py,collision_drift_m,collision_drift_px,collision_drift_py,average_rounding_m,average_rounding_px,average_rounding_py,closure_m,closure_px,closure_py,cumulative_raw_m,cumulative_raw_px,cumulative_raw_py,cumulative_closure_m,cumulative_closure_px,cumulative_closure_py +1,1,0.28124994289828603,560.7534663206898,0.0016594058834016323,0.0014196881093084812,0.003462142776697874,0.0016594058834016323,0.0014196881093084812,0.0034477608278393745,0.0016594044864177704,0.001420031301677227,-3.557652235031128e-07,0.0,0.0,5.308538675308228e-07,-1.862645149230957e-09,-1.7695128917694092e-07,1.4206860214471817e-05,3.259629011154175e-09,-1.6624107956886292e-07,1.4206860214471817e-05,3.259629011154175e-09,-1.6624107956886292e-07,1.7508864402770996e-07,-1.862645149230957e-09,-1.7695128917694092e-07,0.0,0.0,0.0,1.4206860214471817e-05,3.259629011154175e-09,-1.6624107956886292e-07,0.0,0.0,0.0 +2,2,0.37499987985940486,560.7572004375979,0.003110479563474655,0.002638322301208973,0.0037341169081628323,0.0014510736800730228,0.0012186341919004917,0.003732521552592516,0.0014515905641019344,0.0012190532870590687,-2.193264663219452e-06,-4.6566128730773926e-09,-1.685693860054016e-07,2.032145857810974e-06,-1.5087425708770752e-07,1.695007085800171e-07,1.7564743757247925e-06,-3.6135315895080566e-07,-4.200264811515808e-07,1.7564743757247925e-06,-3.6135315895080566e-07,-4.200264811515808e-07,-1.6111880540847778e-07,-1.555308699607849e-07,9.313225746154785e-10,0.0,0.0,0.0,1.596333459019661e-05,-3.580935299396515e-07,-5.862675607204437e-07,0.0,0.0,0.0 +3,3,0.2812499146093721,560.7611049492843,0.004511175211519003,0.0038183839060366154,0.00390451168641448,0.0014006956480443478,0.0011800616048276424,0.0038831778801977634,0.0014002365060150623,0.0011796201579272747,-3.6400742828845978e-06,4.698522388935089e-07,4.6798959374427795e-07,3.641471266746521e-06,-4.637986421585083e-07,-4.600733518600464e-07,2.1332409232854843e-05,4.530884325504303e-07,4.3353065848350525e-07,2.1332409232854843e-05,4.530884325504303e-07,4.3353065848350525e-07,1.3969838619232178e-09,6.05359673500061e-09,7.916241884231567e-09,0.0,0.0,0.0,3.729574382305145e-05,9.499490261077881e-08,-1.5273690223693848e-07,0.0,0.0,0.0 +4,4,0.37499987985940486,560.7650738614611,0.005782689433544874,0.004893188830465078,0.003968912176787853,0.0012715142220258713,0.001074804924428463,0.003933848347514868,0.0012704567052423954,0.001073895487934351,-6.910879164934158e-06,3.1711533665657043e-07,3.9534643292427063e-07,6.800517439842224e-06,-2.6263296604156494e-07,-3.371387720108032e-07,3.517419099807739e-05,1.0030344128608704e-06,8.512288331985474e-07,3.517419099807739e-05,1.0030344128608704e-06,8.512288331985474e-07,-1.103617250919342e-07,5.448237061500549e-08,5.820766091346741e-08,0.0,0.0,0.0,7.246993482112885e-05,1.0980293154716492e-06,6.984919309616089e-07,0.0,0.0,0.0 +5,5,0.3749998295680158,560.7690546456724,0.006910111755132675,0.005846448242664337,0.003980784211307764,0.001127422321587801,0.0009532594121992588,0.0039466856978833675,0.001126923132687807,0.0009523364715278149,-7.287599146366119e-06,1.0672956705093384e-06,4.637986421585083e-07,7.417052984237671e-06,-1.0095536708831787e-06,-4.023313522338867e-07,3.396905958652496e-05,4.414469003677368e-07,8.614733815193176e-07,3.396905958652496e-05,4.414469003677368e-07,8.614733815193176e-07,1.2945383787155151e-07,5.774199962615967e-08,6.146728992462158e-08,0.0,0.0,0.0,0.00010643899440765381,1.539476215839386e-06,1.5599653124809265e-06,0.0,0.0,0.0 +6,6,0.46874973195382685,560.7730254461057,0.007904952857643366,0.006686040665954351,0.003970800433307886,0.0009948411025106907,0.0008395924232900143,0.003946303389966488,0.0009944625198841095,0.00083962082862854,-6.226822733879089e-06,2.0954757928848267e-07,-1.8533319234848022e-07,6.167218089103699e-06,-2.477318048477173e-07,9.499490261077881e-08,2.455664798617363e-05,4.1676685214042664e-07,6.193295121192932e-08,2.455664798617363e-05,4.1676685214042664e-07,6.193295121192932e-08,-5.960464477539063e-08,-3.818422555923462e-08,-9.033828973770142e-08,0.0,0.0,0.0,0.00013099564239382744,1.9562430679798126e-06,1.6218982636928558e-06,0.0,0.0,0.0 +7,7,0.4687496533735736,560.7769900038838,0.008779809810221195,0.007423080503940582,0.003964557778090239,0.0008748569525778294,0.0007370398379862309,0.003942790906876326,0.0008741165511310101,0.0007373974658548832,-2.6883091777563095e-05,-1.3766344636678696e-05,-7.656868547201157e-06,2.6874244213104248e-05,1.3727694749832153e-05,7.636845111846924e-06,2.177571877837181e-05,7.790513336658478e-07,-3.3760443329811096e-07,2.177571877837181e-05,7.790513336658478e-07,-3.3760443329811096e-07,-8.847564458847046e-09,-3.864988684654236e-08,-2.0023435354232788e-08,0.0,0.0,0.0,0.00015277136117219925,2.7352944016456604e-06,1.2842938303947449e-06,0.0,0.0,0.0 +8,8,0.4687496533735736,560.7809417177923,0.009547093417495489,0.00806809077039361,0.0039517139084637165,0.0007672836072742939,0.0006450102664530277,0.0039388518780469894,0.0007664291188120842,0.0006456412374973297,-0.00016948627308011055,-8.736597374081612e-05,-5.452195182442665e-05,0.0001695193350315094,8.732080459594727e-05,5.4486095905303955e-05,1.2828968465328217e-05,8.996576070785522e-07,-5.951151251792908e-07,1.2828968465328217e-05,8.996576070785522e-07,-5.951151251792908e-07,3.306195139884949e-08,-4.516914486885071e-08,-3.585591912269592e-08,0.0,0.0,0.0,0.00016560032963752747,3.6349520087242126e-06,6.891787052154541e-07,0.0,0.0,0.0 +9,9,0.4686406250816172,560.7848850805312,0.010217653587460518,0.008631827309727669,0.0039433627389371395,0.0006705601699650288,0.0005637365393340588,0.00393525930121541,0.0006706290878355503,0.0005643940530717373,-0.000617987010627985,-0.0002765483222901821,-0.00019021378830075264,0.0006179474294185638,0.00027653947472572327,0.00019023939967155457,8.143018931150436e-06,-6.007030606269836e-08,-6.831251084804535e-07,8.143018931150436e-06,-6.007030606269836e-08,-6.831251084804535e-07,-3.958120942115784e-08,-8.847564458847046e-09,2.561137080192566e-08,0.0,0.0,0.0,0.0001737433485686779,3.5748817026615143e-06,6.05359673500061e-09,0.0,0.0,0.0 +10,10,0.4685945715880829,560.7888254267164,0.010803885292261839,0.00912527134642005,0.00394034618511796,0.000586231704801321,0.0004934440366923809,0.0039321803487837315,0.000586662907153368,0.0004931562580168247,-0.0014882697723805904,-0.0005795764736831188,-0.00043088337406516075,0.0014883410185575485,0.0005796011537313461,0.00043090246617794037,8.094590157270432e-06,-4.5588240027427673e-07,2.6868656277656555e-07,8.094590157270432e-06,-4.5588240027427673e-07,2.6868656277656555e-07,7.12461769580841e-08,2.468004822731018e-08,1.909211277961731e-08,0.0,0.0,0.0,0.00018183793872594833,3.1189993023872375e-06,2.7474015951156616e-07,0.0,0.0,0.0 +11,11,0.37499977927664024,560.7927596913651,0.011317913420498371,0.009557455778121948,0.003934264648705721,0.0005140281282365322,0.0004321844317018986,0.003929825499653816,0.0005140695720911026,0.0004319213330745697,-0.0026630824431777,-0.0009266296401619911,-0.0007359907031059265,0.002663079649209976,0.0009266063570976257,0.0007360205054283142,4.441943019628525e-06,-1.816079020500183e-08,2.3329630494117737e-07,4.441943019628525e-06,-1.816079020500183e-08,2.3329630494117737e-07,-2.7939677238464355e-09,-2.3283064365386963e-08,2.9802322387695312e-08,0.0,0.0,0.0,0.00018627988174557686,3.1008385121822357e-06,5.080364644527435e-07,0.0,0.0,0.0 +12,12,0.46874663591177923,560.7966943499632,0.011769441422075033,0.009937478695064783,0.003934658598154783,0.00045152800157666206,0.00038002291694283485,0.003928040154278278,0.00045189354568719864,0.0003798864781856537,-0.0038390979170799255,-0.0012310631573200226,-0.0010304069146513939,0.0038390420377254486,0.0012311115860939026,0.0010304339230060577,6.674323230981827e-06,-4.139728844165802e-07,1.0943040251731873e-07,6.674323230981827e-06,-4.139728844165802e-07,1.0943040251731873e-07,-5.587935447692871e-08,4.842877388000488e-08,2.7008354663848877e-08,0.0,0.0,0.0,0.00019295420497655869,2.6868656277656555e-06,6.174668669700623e-07,0.0,0.0,0.0 +13,13,0.37499972898527817,560.8006243831478,0.01216893782839179,0.010273906867951155,0.0039300331845879555,0.0003994964063167572,0.0003364281728863716,0.003926742821931839,0.00039900559931993484,0.00033587682992219925,-0.004740437027066946,-0.0014326325617730618,-0.0012463550083339214,0.004740472882986069,0.0014326423406600952,0.0012463442981243134,3.2545067369937897e-06,4.810281097888947e-07,5.620531737804413e-07,3.2545067369937897e-06,4.810281097888947e-07,5.620531737804413e-07,3.585591912269592e-08,9.778887033462524e-09,-1.0710209608078003e-08,0.0,0.0,0.0,0.00019620871171355247,3.16789373755455e-06,1.1795200407505035e-06,0.0,0.0,0.0 +14,14,0.4687474688530803,560.8045558938757,0.012523647397756577,0.010573056526482105,0.003931510727852583,0.00035470956936478615,0.00029914965853095055,0.003925675991922617,0.00035448791459202766,0.00029869796708226204,-0.005264284089207649,-0.0015086885541677475,-0.0013435659930109978,0.0052642785012722015,0.0015086643397808075,0.0013435855507850647,5.840323865413666e-06,2.4586915969848633e-07,4.3213367462158203e-07,5.840323865413666e-06,2.4586915969848633e-07,4.3213367462158203e-07,-5.587935447692871e-09,-2.421438694000244e-08,1.955777406692505e-08,0.0,0.0,0.0,0.00020204903557896614,3.4137628972530365e-06,1.6116537153720856e-06,0.0,0.0,0.0 +15,15,0.4682317851482336,560.8084840090014,0.012841148767620325,0.010841074865311384,0.003928115125745535,0.00031750136986374855,0.00026801833882927895,0.003924637567251921,0.00031766900792717934,0.00026782089844346046,-0.005472308956086636,-0.0014677206054329872,-0.001318071037530899,0.005472287535667419,0.001467689871788025,0.001318071037530899,3.4989789128303528e-06,-1.3690441846847534e-07,1.9744038581848145e-07,3.4989789128303528e-06,-1.3690441846847534e-07,1.9744038581848145e-07,-2.1420419216156006e-08,-3.073364496231079e-08,0.0,0.0,0.0,0.0,0.0002055480144917965,3.276858478784561e-06,1.809094101190567e-06,0.0,0.0,0.0 +16,16,0.4687439328019107,560.8124153451063,0.013128423597663641,0.011083992663770914,0.0039313361048698425,0.0002872748300433159,0.00024291779845952988,0.003923660609871149,0.0002878890372812748,0.00024270685389637947,-0.005496661644428968,-0.0013386714272201061,-0.0011936011724174023,0.005496615543961525,0.0013386663049459457,0.001193629577755928,7.721595466136932e-06,-6.09084963798523e-07,1.825392246246338e-07,7.721595466136932e-06,-6.09084963798523e-07,1.825392246246338e-07,-4.6100467443466187e-08,-5.122274160385132e-09,2.8405338525772095e-08,0.0,0.0,0.0,0.00021326960995793343,2.667773514986038e-06,1.991633325815201e-06,0.0,0.0,0.0 +17,17,0.46873638940438433,560.8163452413864,0.013391933869570494,0.011306562926620245,0.003929896280169487,0.0002635102719068527,0.0002225702628493309,0.003922717645764351,0.0002640876919031143,0.00022296980023384094,-0.005448666866868734,-0.0011560707353055477,-0.0010099620558321476,0.005448700860142708,0.0011560898274183273,0.0010099466890096664,7.1446411311626434e-06,-5.96512109041214e-07,-3.841705620288849e-07,7.1446411311626434e-06,-5.96512109041214e-07,-3.841705620288849e-07,3.3993273973464966e-08,1.909211277961731e-08,-1.5366822481155396e-08,0.0,0.0,0.0,0.00022041425108909607,2.0712614059448242e-06,1.607462763786316e-06,0.0,0.0,0.0 +18,18,0.4687180348178792,560.8202739986591,0.013636329676955938,0.011513229925185442,0.003928757272660732,0.00024439580738544464,0.000206666998565197,0.003921979106962681,0.00024497322738170624,0.0002071000635623932,-0.00538009125739336,-0.0009485194459557533,-0.0008049774914979935,0.005380067974328995,0.0009484924376010895,0.0008049644529819489,6.80144876241684e-06,-5.504116415977478e-07,-4.200264811515808e-07,6.80144876241684e-06,-5.504116415977478e-07,-4.200264811515808e-07,-2.3283064365386963e-08,-2.7008354663848877e-08,-1.30385160446167e-08,0.0,0.0,0.0,0.0002272156998515129,1.5208497643470764e-06,1.1874362826347351e-06,0.0,0.0,0.0 +19,19,0.4687494647810733,560.8242048402317,0.013865197543054819,0.011706916149705648,0.003930841572582722,0.00022886786609888077,0.00019368622452020645,0.0039215972647070885,0.00022865179926156998,0.00019369274377822876,-0.005283902399241924,-0.0007343888282775879,-0.0006027696654200554,0.005283888429403305,0.0007343888282775879,0.0006027519702911377,9.258277714252472e-06,2.1606683731079102e-07,1.1175870895385742e-08,9.258277714252472e-06,2.1606683731079102e-07,1.1175870895385742e-08,-1.3969838619232178e-08,0.0,-1.7695128917694092e-08,0.0,0.0,0.0,0.00023647397756576538,1.7369166016578674e-06,1.1986121535301208e-06,0.0,0.0,0.0 +20,20,0.468749291904748,560.8281343518756,0.01407972676679492,0.011888547334820032,0.003929511643946171,0.00021452922374010086,0.0001816311851143837,0.0039214082062244415,0.00021384842693805695,0.00018165074288845062,-0.005120935384184122,-0.0005169562064111233,-0.00041141873225569725,0.005120944231748581,0.0005169659852981567,0.00041141733527183533,8.094590157270432e-06,6.710179150104523e-07,-1.816079020500183e-08,8.094590157270432e-06,6.710179150104523e-07,-1.816079020500183e-08,8.847564458847046e-09,9.778887033462524e-09,-1.3969838619232178e-09,0.0,0.0,0.0,0.0002445685677230358,2.4079345166683197e-06,1.180451363325119e-06,0.0,0.0,0.0 +21,21,0.4686316241476506,560.8320638332516,0.014281701296567917,0.012059765867888927,0.003929481375962496,0.0002019745297729969,0.00017121853306889534,0.003921300172805786,0.000200699083507061,0.00017050933092832565,-0.004840303678065538,-0.00029240502044558525,-0.00022668996825814247,0.004840286448597908,0.00029242970049381256,0.00022671185433864594,8.198432624340057e-06,1.2507662177085876e-06,6.873160600662231e-07,8.198432624340057e-06,1.2507662177085876e-06,6.873160600662231e-07,-1.7229467630386353e-08,2.468004822731018e-08,2.1886080503463745e-08,0.0,0.0,0.0,0.00025276700034737587,3.6587007343769073e-06,1.8677674233913422e-06,0.0,0.0,0.0 +22,22,0.46868277541627273,560.835993598681,0.014473678078502417,0.012222256977111101,0.0039297654293477535,0.00019197678193449974,0.0001624911092221737,0.003920916933566332,0.00018997164443135262,0.0001611732877790928,-0.004407043103128672,-5.385419353842735e-05,-3.726920112967491e-05,0.004407068714499474,5.3880736231803894e-05,3.727339208126068e-05,8.822884410619736e-06,1.978594809770584e-06,1.3136304914951324e-06,8.822884410619736e-06,1.978594809770584e-06,1.3136304914951324e-06,2.561137080192566e-08,2.6542693376541138e-08,4.190951585769653e-09,0.0,0.0,0.0,0.0002615898847579956,5.6372955441474915e-06,3.1813979148864746e-06,0.0,0.0,0.0 +23,23,0.4687343150126283,560.8399298018776,0.014657547231763601,0.01237749820575118,0.003936203196644783,0.0001838691532611847,0.0001552412286400795,0.003920321352779865,0.000182238407433033,0.000154225155711174,-0.0038209911435842514,0.0001984424889087677,0.00016180798411369324,0.00382099486887455,-0.00019842945039272308,-0.00016182847321033478,1.5878118574619293e-05,1.6177073121070862e-06,1.0365620255470276e-06,1.5878118574619293e-05,1.6177073121070862e-06,1.0365620255470276e-06,3.725290298461914e-09,1.30385160446167e-08,-2.0489096641540527e-08,0.0,0.0,0.0,0.0002774680033326149,7.255002856254578e-06,4.217959940433502e-06,0.0,0.0,0.0 +24,24,0.46876041911371336,560.8438616539352,0.014835720416158438,0.012527641374617815,0.0039318520575761795,0.00017817318439483643,0.00015014316886663437,0.003919683396816254,0.0001774495467543602,0.00014953874051570892,-0.003126208670437336,0.0004524495452642441,0.0003674151375889778,0.0031261928379535675,-0.00045248493552207947,-0.0003674216568470001,1.2184493243694305e-05,7.59027898311615e-07,6.109476089477539e-07,1.2184493243694305e-05,7.59027898311615e-07,6.109476089477539e-07,-1.5832483768463135e-08,-3.5390257835388184e-08,-6.51925802230835e-09,0.0,0.0,0.0,0.0002896524965763092,8.014030754566193e-06,4.828907549381256e-06,0.0,0.0,0.0 diff --git a/research/fine_surface_joint_20261014/blow_propagation.csv b/research/fine_surface_joint_20261014/blow_propagation.csv new file mode 100644 index 0000000..f06d80d --- /dev/null +++ b/research/fine_surface_joint_20261014/blow_propagation.csv @@ -0,0 +1,97 @@ +metric,time,signal,baseline,absolute,any_crossed,peak_crossed,x,y,q +coarse_interface_u,1,0.0,0.0,0.0,False,False,3.5,3.5, +coarse_interface_u,2,0.0,2.63417801721126e-09,2.63417801721126e-09,False,False,3.5,3.5, +coarse_interface_u,3,0.0,2.63417801721126e-09,2.63417801721126e-09,False,False,3.5,3.5, +coarse_interface_u,4,0.0,6.585443742795605e-08,6.585443742795605e-08,False,False,3.5,3.5, +coarse_interface_u,5,0.0,1.2644051067663912e-07,1.2644051067663912e-07,False,False,3.5,3.5, +coarse_interface_u,6,2.123413592043705e-07,1.4528626697542904e-07,3.5762762617979955e-07,False,False,20.5,12.5, +coarse_interface_u,7,4.0664670353703905e-06,2.0116559817931723e-07,4.267265792606936e-06,True,True,20.5,13.5, +coarse_interface_u,8,2.316397368189694e-05,1.5646213891164667e-07,2.3320343327342335e-05,True,True,20.5,13.5, +coarse_interface_u,9,6.795742008554701e-05,1.5646213891164667e-07,6.81138583592495e-05,True,True,20.5,13.5, +coarse_interface_u,10,0.00013453387391202865,9.750014426779573e-08,0.00013463070833560589,True,True,20.5,13.5, +coarse_interface_u,11,0.00020315493961354394,1.1795114315203827e-07,0.00020326776624343072,True,True,20.5,13.5, +coarse_interface_u,12,0.0002578325145358002,7.455233297611785e-08,0.00025790659921174714,True,True,20.5,14.5, +coarse_interface_u,13,0.0002848355625376438,3.83541997932092e-08,0.0002848672209318115,True,True,20.5,14.5, +coarse_interface_u,14,0.00028850325159438407,3.003423681142711e-08,0.00028847339892346693,True,True,20.5,15.5, +coarse_interface_u,15,0.0002790426599299092,6.516592454722021e-08,0.00027900289954439403,True,True,20.5,16.5, +coarse_interface_u,16,0.0002656231695763881,1.006517304071618e-07,0.0002656687325338991,True,True,20.5,17.5, +coarse_interface_u,17,0.00025167224259872663,9.86322156278415e-08,0.00025171418857411254,True,True,20.5,18.5, +coarse_interface_u,18,0.00023917435962541014,1.0286787296380317e-07,0.00023916330914968713,True,True,20.5,19.5, +coarse_interface_u,19,0.0002264648202014007,7.783088195871973e-08,0.00022649832134267317,True,True,20.5,20.5, +coarse_interface_u,20,0.00021450009842274482,8.503127640307697e-08,0.0002145262119900782,True,True,20.5,20.5, +coarse_interface_u,21,0.00019565444290966713,7.893743237430962e-08,0.00019572665753668725,True,True,20.5,20.5, +coarse_interface_u,22,0.00017530342242023255,5.2749351285234925e-08,0.0001753561669734725,True,True,20.5,20.5, +coarse_interface_u,23,0.00016284198169591366,8.178685339035058e-08,0.00016288798599953632,True,True,20.5,14.5, +coarse_interface_u,24,0.00016001299284349154,6.715860617082587e-08,0.00016005458983486885,True,True,20.5,14.5, +coarse_bulk_u,1,0.0,0.0,0.0,False,False,0.5,0.5, +coarse_bulk_u,2,0.0,0.0,0.0,False,False,0.5,0.5, +coarse_bulk_u,3,0.0,0.0,0.0,False,False,0.5,0.5, +coarse_bulk_u,4,0.0,0.0,0.0,False,False,0.5,0.5, +coarse_bulk_u,5,0.0,0.0,0.0,False,False,0.5,0.5, +coarse_bulk_u,6,0.0,0.0,0.0,False,False,0.5,0.5, +coarse_bulk_u,7,9.685747920378016e-08,2.12341462371735e-07,3.0919894157551517e-07,False,False,21.5,12.5, +coarse_bulk_u,8,1.885523449607647e-06,2.458690369633922e-07,2.131116250194691e-06,True,False,21.5,13.5, +coarse_bulk_u,9,1.1801222962468464e-05,1.564621179284487e-07,1.1957591962850096e-05,True,True,21.5,13.5, +coarse_bulk_u,10,3.7763148161723895e-05,1.0327184058071679e-07,3.786536052602384e-05,True,True,21.5,13.5, +coarse_bulk_u,11,8.290997527773004e-05,4.214683516511236e-08,8.293984645156337e-05,True,True,21.5,13.5, +coarse_bulk_u,12,0.00013975592467875463,5.890198697622995e-09,0.00013975397806857782,True,True,21.5,13.5, +coarse_bulk_u,13,0.00019498935130707817,4.806920811870088e-08,0.00019495727755690072,True,True,21.5,14.5, +coarse_bulk_u,14,0.00023699059195898703,3.215422633434082e-08,0.00023698211801486242,True,True,21.5,14.5, +coarse_bulk_u,15,0.000255587117158192,3.434546877545681e-08,0.0002555629409290573,True,True,21.5,14.5, +coarse_bulk_u,16,0.00025699080829703886,0.0,0.00025699080829703886,True,True,21.5,15.5, +coarse_bulk_u,17,0.00024815159847585574,6.606481633104396e-08,0.0002482080995082901,True,True,21.5,16.5, +coarse_bulk_u,18,0.00023639704637690832,6.929437569595666e-08,0.00023645799303108044,True,True,21.5,17.5, +coarse_bulk_u,19,0.00022522644482484474,1.0390817551817351e-07,0.00022530812767909556,True,True,21.5,19.5, +coarse_bulk_u,20,0.0002151574621150763,1.042082306083734e-07,0.00021524519922552202,True,True,22.5,18.5, +coarse_bulk_u,21,0.00020618043430475382,9.442706670805767e-08,0.00020625960942046836,True,True,21.5,20.5, +coarse_bulk_u,22,0.0001977039381507293,5.556802130737047e-08,0.00019775833634301496,True,True,22.5,20.5, +coarse_bulk_u,23,0.00018973381549205,4.4703464263670685e-08,0.00018970107840731907,True,True,22.5,21.5, +coarse_bulk_u,24,0.00018031585591623997,9.995996742145265e-08,0.0001802207328329628,True,True,22.5,22.5, +fine_band_neq,1,0.0,3.000928300994632e-09,3.000928300994632e-09,False,False,4.25,4.25, +fine_band_neq,2,0.0,4.501393077727123e-09,4.501393077727123e-09,False,False,4.25,4.25, +fine_band_neq,3,0.0,2.069606169774474e-08,2.069606169774474e-08,False,False,4.25,4.25, +fine_band_neq,4,0.0,4.1392115429639276e-09,4.1392115429639276e-09,False,False,4.25,4.25, +fine_band_neq,5,0.0,4.1392115429639276e-09,4.1392115429639276e-09,False,False,4.25,4.25, +fine_band_neq,6,3.8661114470928126e-07,9.934099098884985e-09,3.766770456103963e-07,True,True,19.75,13.25, +fine_band_neq,7,2.0898831959437203e-06,9.934099098884985e-09,2.0799490968448353e-06,True,True,19.75,13.25, +fine_band_neq,8,5.086951299526632e-06,9.934099098884985e-09,5.077017200427747e-06,True,True,19.75,13.75, +fine_band_neq,9,7.3187303596400355e-06,1.1589783133203468e-08,7.307140576506832e-06,True,True,19.75,14.25, +fine_band_neq,10,7.498180437826019e-06,9.106256526614231e-09,7.489074181299404e-06,True,True,19.75,15.25, +fine_band_neq,11,6.85740365241605e-06,5.794905943989903e-09,6.86319855836004e-06,True,True,19.75,17.25, +fine_band_neq,12,6.20376639004494e-06,6.622735776451449e-09,6.200455026694751e-06,True,True,19.75,18.25, +fine_band_neq,13,5.366229072267803e-06,4.139212333997833e-09,5.369540443278531e-06,True,True,19.75,19.25, +fine_band_neq,14,5.300103189165295e-06,4.967056432825245e-09,5.30507024559812e-06,True,True,19.75,19.75, +fine_band_neq,15,4.0156351262532475e-06,4.553132745832578e-09,4.018946498263176e-06,True,True,19.75,19.75, +fine_band_neq,16,3.7773208383384826e-06,6.622738135675377e-09,3.783943576474158e-06,True,True,19.75,16.75, +fine_band_neq,17,3.59763095919563e-06,6.622736969941201e-09,3.598458797438031e-06,True,True,19.75,17.75, +fine_band_neq,18,3.1864885083332517e-06,1.7384672978959514e-08,3.2038731813122112e-06,True,True,19.75,18.75, +fine_band_neq,19,3.2079558324737967e-06,9.934106745546067e-09,3.2054722903795962e-06,True,True,19.75,19.75, +fine_band_neq,20,3.2478981990546885e-06,8.278412177986638e-09,3.256176611232675e-06,True,True,19.75,19.75, +fine_band_neq,21,2.8408409309954585e-06,1.1589792486832451e-08,2.83256250521724e-06,True,True,19.75,19.75, +fine_band_neq,22,2.2599308021065134e-06,1.241763983306221e-09,2.2599308009962904e-06,True,True,19.75,19.75, +fine_band_neq,23,1.7067130013148635e-06,2.0696062086322797e-09,1.7075408424993554e-06,True,True,19.75,19.75, +fine_band_neq,24,1.7691307190870198e-06,7.864502313270627e-09,1.768302879068262e-06,True,True,4.25,8.25, +transfer_neq,1,0.0,1.5004641487625925e-09,1.5004641487625925e-09,False,False,3.5,3.5,6 +transfer_neq,2,0.0,3.000928290586291e-09,3.000928290586291e-09,False,False,3.5,3.5,6 +transfer_neq,3,0.0,3.000928290586291e-09,3.000928290586291e-09,False,False,3.5,3.5,6 +transfer_neq,4,0.0,6.881438113781613e-09,6.881438113781613e-09,False,False,3.5,3.5,6 +transfer_neq,5,0.0,6.467520081987477e-09,6.467520081987477e-09,False,False,3.5,3.5,6 +transfer_neq,6,4.801482146599145e-08,1.7384695072397705e-08,3.063012639359375e-08,False,False,20.5,12.5,1 +transfer_neq,7,9.917490157301811e-07,1.4901174696935193e-08,9.76847841033246e-07,True,True,20.5,13.5,1 +transfer_neq,8,5.3319513640959215e-06,7.450589978308386e-09,5.324500774117613e-06,True,True,20.5,13.5,1 +transfer_neq,9,1.3926900000016396e-05,4.967061900673642e-09,1.3921932938115722e-05,True,True,20.5,13.5,1 +transfer_neq,10,2.2683459353481372e-05,7.0366557441969846e-09,2.269049600922557e-05,True,True,20.5,13.5,1 +transfer_neq,11,2.6366830318105827e-05,8.692339972804497e-09,2.6375522658078632e-05,True,True,20.5,14.5,1 +transfer_neq,12,2.307753771932375e-05,1.0761948318616099e-08,2.3088299667642365e-05,True,True,20.5,14.5,1 +transfer_neq,13,1.804053278801898e-05,6.6227364148296886e-09,1.804715552443381e-05,True,True,16.5,20.5,3 +transfer_neq,14,1.3273871487681776e-05,3.725288785783043e-09,1.327759677646756e-05,True,True,17.5,20.5,3 +transfer_neq,15,1.109810416584367e-05,1.7074248230553035e-09,1.1096396741020614e-05,True,True,20.5,20.5,5 +transfer_neq,16,1.0547037354428218e-05,3.777030622292843e-09,1.0550814385050511e-05,True,True,20.5,20.5,5 +transfer_neq,17,7.76073680465103e-06,1.5522043823879006e-09,7.762289009033418e-06,True,True,20.5,20.5,5 +transfer_neq,18,6.477044739522375e-06,2.4835230261199825e-09,6.479528262548495e-06,True,True,16.5,3.5,4 +transfer_neq,19,6.888961226400592e-06,4.553130164564045e-09,6.893514356565156e-06,True,True,16.5,3.5,4 +transfer_neq,20,8.081834403372845e-06,1.6556842147297246e-09,8.080178719158115e-06,True,True,3.5,15.5,2 +transfer_neq,21,9.19306995308955e-06,4.553133203799575e-09,9.19762308629335e-06,True,True,3.5,15.5,2 +transfer_neq,22,9.90222802181584e-06,1.241762831449833e-09,9.90346978464729e-06,True,True,3.5,15.5,2 +transfer_neq,23,9.820215213826589e-06,3.725291089495819e-09,9.823940504916084e-06,True,True,3.5,16.5,2 +transfer_neq,24,9.034586770997888e-06,6.208816516473092e-09,9.028377954481415e-06,True,True,3.5,17.5,2 diff --git a/research/fine_surface_joint_20261014/blow_signals.npz b/research/fine_surface_joint_20261014/blow_signals.npz new file mode 100644 index 0000000..528adf7 Binary files /dev/null and b/research/fine_surface_joint_20261014/blow_signals.npz differ diff --git a/research/fine_surface_joint_20261014/blow_summary.json b/research/fine_surface_joint_20261014/blow_summary.json new file mode 100644 index 0000000..32285ac --- /dev/null +++ b/research/fine_surface_joint_20261014/blow_summary.json @@ -0,0 +1,170 @@ +{ + "speed": 0.002, + "initial_leaf": [ + 560.7500041779131, + 0.0, + 0.0 + ], + "final_leaf": [ + 560.8438616539352, + 0.014835720416158438, + 0.012527641374617815 + ], + "raw_residual": [ + 0.0002896524965763092, + 8.014030754566193e-06, + 4.828907549381256e-06 + ], + "exact_average_residual": [ + 0.00028958916664123535, + 7.874332368373871e-06, + 4.7245994210243225e-06 + ], + "cumulative": { + "boundary": [ + 0.09356788685545325, + 0.014827846083790064, + 0.01252291677519679 + ], + "fine_transfer": [ + -0.0672332551330328, + -0.01191190630197525, + -0.010114157572388649 + ], + "coarse_transfer": [ + 0.06723319180309772, + 0.011911766603589058, + 0.010114053264260292 + ], + "rounding": [ + 0.0002896524965763092, + 8.014030754566193e-06, + 4.828907549381256e-06 + ], + "average": [ + -6.332993507385254e-08, + -1.3969838619232178e-07, + -1.043081283569336e-07 + ] + }, + "checks": { + "validity": true, + "geometry_unchanged": true, + "boundary_count": 48, + "collision_count": 72, + "local_collision": true, + "local_regime": true, + "bfl": true, + "transfer_rounding": true, + "interval_closure": true, + "cumulative_closure": true, + "propagation": true, + "drive_sign": true + }, + "max_collision_ratio": 0.5696050037738337, + "max_collision_error": 1.5865499780609582e-07, + "max_bfl_error": 1.2725840020655355e-08, + "max_interval_closure": 0.0, + "drive_mass": 0.07436401406617413, + "propagation": { + "coarse_interface_u": { + "threshold": 1e-06, + "baseline_factor": 10, + "first_arrival": { + "time": 7, + "signal": 4.0664670353703905e-06, + "baseline": 2.0116559817931723e-07, + "absolute": 4.267265792606936e-06, + "x": 20.5, + "y": 13.5 + }, + "peak": { + "metric": "coarse_interface_u", + "time": 14, + "signal": 0.00028850325159438407, + "baseline": 3.003423681142711e-08, + "absolute": 0.00028847339892346693, + "any_crossed": true, + "peak_crossed": true, + "x": 20.5, + "y": 15.5 + } + }, + "coarse_bulk_u": { + "threshold": 1e-06, + "baseline_factor": 10, + "first_arrival": { + "time": 8, + "signal": 1.1069172403255332e-06, + "baseline": 1.005827957173589e-07, + "absolute": 1.2074577299858699e-06, + "x": 13.5, + "y": 21.5 + }, + "peak": { + "metric": "coarse_bulk_u", + "time": 16, + "signal": 0.00025699080829703886, + "baseline": 0.0, + "absolute": 0.00025699080829703886, + "any_crossed": true, + "peak_crossed": true, + "x": 21.5, + "y": 15.5 + } + }, + "fine_band_neq": { + "threshold": 1e-07, + "baseline_factor": 10, + "first_arrival": { + "time": 6, + "signal": 3.8661114470928126e-07, + "baseline": 9.934099098884985e-09, + "absolute": 3.766770456103963e-07, + "x": 19.75, + "y": 13.25 + }, + "peak": { + "metric": "fine_band_neq", + "time": 10, + "signal": 7.498180437826019e-06, + "baseline": 9.106256526614231e-09, + "absolute": 7.489074181299404e-06, + "any_crossed": true, + "peak_crossed": true, + "x": 19.75, + "y": 15.25 + } + }, + "transfer_neq": { + "threshold": 1e-07, + "baseline_factor": 10, + "first_arrival": { + "time": 7, + "signal": 9.917490157301811e-07, + "baseline": 1.4901174696935193e-08, + "absolute": 9.76847841033246e-07, + "q": 1, + "x": 20.5, + "y": 13.5 + }, + "peak": { + "metric": "transfer_neq", + "time": 11, + "signal": 2.6366830318105827e-05, + "baseline": 8.692339972804497e-09, + "absolute": 2.6375522658078632e-05, + "any_crossed": true, + "peak_crossed": true, + "q": 1, + "x": 20.5, + "y": 14.5 + } + } + }, + "raw_minus_zero": [ + 6.053410470485687e-05, + 2.1085143089294434e-06, + 9.126961231231689e-07 + ] +} diff --git a/research/fine_surface_joint_20261014/command.txt b/research/fine_surface_joint_20261014/command.txt new file mode 100644 index 0000000..510ecb2 --- /dev/null +++ b/research/fine_surface_joint_20261014/command.txt @@ -0,0 +1,2 @@ +/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python /home/frank14f/CelerisLab/research/fine_surface_joint_20261014/runner.py +Child command, explicit environment, fresh resource preflight and actual exit are stored in gpu_run.json. diff --git a/research/fine_surface_joint_20261014/criteria.txt b/research/fine_surface_joint_20261014/criteria.txt new file mode 100644 index 0000000..dd36e76 --- /dev/null +++ b/research/fine_surface_joint_20261014/criteria.txt @@ -0,0 +1,110 @@ +FROZEN BEFORE GPU — bounded fine-surface/interface validation, 2026-10-14 + +Scope: exactly three independent trajectories speed=0,+.002,-.002, each24 +coarse/48fine steps, same physical time[0,24]. No other GPU tests, extensions, +parameter sweeps or time extensions. Read-only hook instrumentation of normal +production build, no audit macro and no stepping/formula changes. + +Geometry: periodic24x24 coarse domain; patch edge bounds[4,20)x[4,20); +fine40x40 including4halo; origin edge(2,2); fine dx=dt=.5; coarse dx=dt=1. +Circle physical center(12.25,12.25),radius2.15 => fine integer center(20,20),R4.3. +Stationary solid; surface angle.7rad,half_width.85rad,C1 amplitude0,+/-.002. +nu_coarse=.05,tau_coarse=.65,tau_fine=.8; unforcedD2Q9SRT,FP32,unshiftedDB. +Initial rho1,u0,Q-major postcollision equilibrium, same FP32 initial populations. +All initial sources and device omega are checked. Actual package path must be +/home/frank14f/CelerisLab/src. The preserved old tests are not changed or run. + +Validity at every fine/coarse hop and publication: +All valid fluid leaves finite, density(.9,1.1) and |u|<.05 in local collision +oracle validity regime. Fine solids and outermost2halo after each fine hopNaN; +inner ghost exactly stream-only including legitimate directionalNaNs. +Published fine ghost/solid and coarse coveredNaN. Geometry and flags unchanged. + +Propagation definitions (strict >; horizons and masks never adjusted): +- Fine band: fine active fluid nodes with any D2Q9 nonrest neighbor outside + geometric active patch, excluding solid boundaries. +- Coarse interface: uncovered receiver cells of actual coalescence map. +- Coarse bulk: ALL uncovered coarse fluid except that interface receiver set. +- Transfer neq: actual replaced q component of the full reconstructed coarse + incoming vector minus FP64feq(rho,u) of that same incoming vector, BEFORE + coarse collision. Do not form full macros from partly valid ghost children. +- Fine band neq: postcollision g minus FP64 equilibrium from its own macros. +- Velocities: FP64 moments of published postcollision g / rho. +- Physical coordinate coarse(I+.5,J+.5);fine(2+.5*(i+.5),2+.5*(j+.5)). + Interface transfer and publication sampled at integer physical t=1..24. + Boundary substeps at t=n-.5,n; no claim of sub-integer arrival resolution. +- At each same point/q,time,phase compare driven and ZERO trajectory: + velocity norm difference>1e-6 AND >10*zero velocity norm; + neq absolute difference>1e-7 AND >10*abs(zero neq). + Fine-band criterion uses maxq at each node for BOTH signal/baseline; this + conservatively requires excess over the largest zero neq at that node. +- For BOTH signs, all4 metrics (fine-band neq, actual-transfer neq, + coarse-interface velocity, coarse-bulk velocity) must cross by24 or FAIL. + Record each first qualified sample and global peak's time,physicallocation, + baseline,absolutevalue,signal; per-step maxima and qualifying flag retained. + These are aligned signal witnesses, not necessarily the same node/direction. + This tests startup distribution/macroscopic propagation, possibly acoustic; + not established jet advection, physical accuracy or shear-only transmission. + +Ledger (M maps9populations to mass,px,py; area weights coarse1,fine1/4): +L_n=M(sum coarse leaves+1/4 sum fine fluid leaves), FP64 accumulation. +Each of48fine hops individually captures pre-BFL and staged BFL populations. +B_h=1/4 M(actual solid-to-fluid arrivals minus fluid-to-solid departures). +F_h=1/4 M(actual ghost-to-fluid arrivals minus fluid-to-ghost departures). +B_n=B_h1+B_h2; F_n=F_h1+F_h2. No using latest buffer as two-hop sum. +C_n=M(actual reconstructed coarse incoming minus previous coarse leaves), +including periodic native streaming, all replacement links and8grazingcorners. +Coarse incoming constructed from independent physical midpoint map; compare +all target/source slots to actual tables. avg32=.25*((a+b)+c+d) inFP32. +RAW_n=L_n-L_(n-1)-B_n-F_n-C_n; cumulative raw uses same initial/final leaves. +Report RAW and driven-minus-zero RAW FIRST, never call them corrected to zero. + +Source-based rounding decomposition and separate fixed checks: +1. Each fine/coarse collision: reconstruct actual FP32 input using pure pull + and avg32 where applicable. Independently evaluate FP64 SRT at the actual + device FP32omega, verifying omega against tau and force=0. + Every q,node must obey |GPUout-SRT64(input)| <= 8*eps32*|input_q|. + This fixed local, near-rest acceptance bound reflects short FP32 rho/macro/ + feq/FMA path and fast-math compilation; it is not a general roundoff theorem. + Report max absolute error and max normalized ratio, and fail if ratio>1. + Cround = weighted sum M(GPUout-input) measured LOCALLY, independently of L + or RAW. Record FP64 ideal moment defect and measured GPUout-ideal separately. + Arbitrary collision error cannot be excused solely by global closure. +2. Transfer Tround=M(avg32-avg64exact), computed independently from actual4 + children. Require each slot <=gamma3*sum|children|/4, u=eps32/2, + gamma3=3u/(1-3u); exact power-of-two scaling in this normal positive regime. + avg32 already in C_n, so DO NOT subtract Tround a second time. + Also report RAW_exact_average=RAW+Tround to expose this source explicitly. +3. BFL local oracle abs error<=1e-7, actual active cells unchanged. +4. |RAW_n-Cround_n|<=1e-10 componentwise per interval; + |sum RAW-sum Cround|<=1e-9 cumulative. These are FP64 bookkeeping bounds, + NOT a physical-conservation/accuracy test. No broad eps*whole-domain + accumulated budget used to label raw conservation as passing. +5. Both driven cases' cumulative actual-minus-passive-oracle boundary mass + has same sign as specified normal speed. BFL passive evaluated on same + actual populations; not another trajectory and not a conservation fix. + +Saved data: pertrajectory24ledger rows,72local collision rows,48fine boundary +rows; small compressed diagnostic signals for reproducible zero comparisons; +no full-field populations. Per-step link_exchange_GPU also saved separately: +latest fine Fx,Fy scaled1/4; torque scaled1/8 for physical lever length. These +body momentum diagnostics differ from fluid mass exchange and are NOT thrust +or exchange rate. A fine-hop fluid exchange rate is B_h/.5; the coarse interval +rate is (B_h1+B_h2)/1, numerically equal to interval sum only because dt_c=1. +Do not equate B_h2/latest with two-hop interval sum. + +No post-result tolerance/formula/window changes, retries or added steps to +chase PASS. Preserve errors with real stdout/exit. Report precise unmet checks. +Resource guards: fresh physicalGPU0UUID/apps/VRAM/RAM, onlyGPU0ifidle; no +other task interference; 180secondwalltimeout; current available RAM reserve +max(4GiB,10%),VRAM reserve max(512MiB,10%), own temporary+evidence<=2GB. +Sample own process group RSS, no fixed address-space/RSS cap; remove only owned +scratch. Every text artifact<=40000characters. Hash criteria/script/source at +freeze then verify before launch; preserve all previous dirty/evidence. + +Reference trace: accepted local tests/test_fine_surface_gpu.py BFL/flux hooks; +refinement.cu actual two fine hops and coalesce order; macro.cuh and +collision_srt.cuh actual FP32 collision path; compiler_v2.py --use_fast_math. +Previously accepted OpenLB defineU2D.hh74-79/offBoundaryPostProcessors2D.hh115-127 +remain BFL hit/stencil reference; no new CFD formula or borrowed code. +Production change limited to one coordinate-frame documentation sentence. diff --git a/research/fine_surface_joint_20261014/frozen.json b/research/fine_surface_joint_20261014/frozen.json new file mode 100644 index 0000000..b5a3324 --- /dev/null +++ b/research/fine_surface_joint_20261014/frozen.json @@ -0,0 +1,105 @@ +{ + "frozen_utc": "2026-10-14T05:55:03.221284+00:00", + "hashes": { + "src/CelerisLab.egg-info/PKG-INFO": "0b9a8a4e8d60bc531473688723ddef0aab02c7ccc4997e31c9b6a6c35011ca77", + "src/CelerisLab.egg-info/top_level.txt": "cd51958ca03afabbaa9618c60b8280e486f8cc0b0359b839e10f886e7c3948f8", + "src/CelerisLab.egg-info/dependency_links.txt": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "src/CelerisLab.egg-info/requires.txt": "36e1404178e5ea590b2fc04e8ba4d748ec9a82e7693136ccf0dfd204fe265c04", + "src/CelerisLab.egg-info/SOURCES.txt": "f36b29c1b34c4bd6b2acc3ccdd21c24ee5077df7e2a20a652d9fae77eedb8e21", + "src/CelerisLab/simulation.py": "c9d903f53fe356d7af281bea07943de1a62494127fb69848d7053fd46f7dec3e", + "src/CelerisLab/config.py": "2f1bba7515f5bc08cb3a8d140bcafe7fa0689e01b3b06494697bb2956a71530e", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/cuda/compiler_v2.py": "c4cc3ec4445c8d75e6a253dd87963877117a722bc73b9d4811806fc6045d08c1", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/lbm/refinement_stepper.py": "6aad7f66e4288e293b30b2f9712202447686f263fab41150f5d919cc64328d06", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/curved_links.py": "00d9c29d660b41190f32dd737b12f60e10ce4214b6c9a6ab2a63438813faa594", + "src/CelerisLab/lbm/stepper.py": "0dcb7cd7ae87e33e3dc67a38b6aa43042fbe673e37d9ad165342ee1d695933ce", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/refinement.py": "8935b070ec9e7020897919c15f43f7fa6293f02e2ff64a19a3e3d99bc444dbcc", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/refinement.cu": "129f3d91da93b4324f88a0da73a4da1e5390f72c14cce574ee63306712da9895", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/kernel_v2.ptx": "a599ee30ae66800f4d4220eb79dfed35ff32991661260f01ea58023ef780f0ca", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "7bccf7e7091c012d7a3d4874a881d4d46699021faedd83d125933fbdaa562711", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/step/curved_double.cu": "bfa7a1df1e939020314d49755045f7a85fe4a19cc1c68dbe62653c66c5e7c2b3", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "578a5b20a157241ee678547059abb1372dd5a589ad06bb2c15b987eb01ca1013", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "f9f8242b38e8e0cf8425b75e2b0215bc15363c62eaa0fb43c761b8e0931bfdc9", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/common/checkpoint.py": "b2f960aecd5ac27a3a7130b809ffad4709c44d522edef0359ab952654625410b", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/CONFIG.md": "41cafdbe525366c08aa9d0416ea026ccf0026ba7123b8a9b65f968a80d928e3a", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/body/objects.py": "d1cf7054cc8379a83c39acc66a7c88ae62fa004f110bb0c1def2ee57137401c5", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/manager.py": "6a40be708c71ef6f3b5f5f0aa9c92cfafc51f2ec2a958f99656cccb850986c16", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/body/__init__.py": "91d1155080b3ade83d13c84c39693046df122e4bed5ef583de2df1f9453c1b76", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "tests/validation/multigrid/test_fine_surface_gpu.py": "d45ca48fc4e77d021fcc5461329b094ae11b257c036bb23634d326fbbedb7700", + "research/fine_surface_joint_20261014/validate.py": "346f1223daa7ce1fb376be5e921fec5ad77c3a10992806d54ececdf199e7c3ea", + "research/fine_surface_joint_20261014/runner.py": "2e52a6fd8306c07415c82d9275e17d58e0597ebd9f1f45b3be81dcdb005d4737", + "research/fine_surface_joint_20261014/criteria.txt": "d80d6f1218b3db449ea9115fa701b9173bc866929e634e2a3b17278b65f0c256" + } +} diff --git a/research/fine_surface_joint_20261014/gpu_run.json b/research/fine_surface_joint_20261014/gpu_run.json new file mode 100644 index 0000000..67ac478 --- /dev/null +++ b/research/fine_surface_joint_20261014/gpu_run.json @@ -0,0 +1,39 @@ +{ + "start_utc": "2026-10-14T05:55:16.773509+00:00", + "command": [ + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "/home/frank14f/CelerisLab/research/fine_surface_joint_20261014/validate.py" + ], + "cwd": "/home/frank14f/CelerisLab", + "physical_gpu_uuid": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c", + "note": "Sampled guards, not an OS hard isolation; no fixed RSS/AS cap.", + "preflight_gpu": "0, GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, Tesla V100-SXM2-16GB, 5, 16140, 0\n1, GPU-f1c9fd5a-e917-56e0-21fb-24035ba44a36, Tesla V100-SXM2-16GB, 5, 16140, 0\n2, GPU-b8c11c01-c91f-aa0b-abf6-dad35085cc76, Tesla V100-SXM2-16GB, 5, 16140, 0\n3, GPU-8b71b032-1b75-2891-935c-ce106a53034a, Tesla V100-SXM2-16GB, 5, 16140, 0\n", + "preflight_apps": "", + "preflight_ram_bytes": 64120958976, + "limits": { + "wall_seconds": 180, + "temp_bytes": 2000000000, + "ram_reserve_bytes": 6412095897, + "vram_reserve_MiB": 1614 + }, + "env": { + "PYTHONPATH": "/home/frank14f/CelerisLab/src", + "PYTHONNOUSERSITE": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "OPENBLAS_NUM_THREADS": "1", + "CUDA_VISIBLE_DEVICES": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c", + "CUDA_CACHE_DISABLE": "1", + "TMPDIR": "/tmp/celeris-joint24-5efo3_mj" + }, + "frozen_sha256": "68fdac18ac1b4371c2a7856456c7cc5b6f360c5dde52d282c44a68237d74028d", + "peak_group_rss_bytes": 297836544, + "peak_temp_bytes": 2081386, + "min_ram_bytes": 63740788736, + "min_vram_free_MiB": 15826, + "termination_reason": null, + "postflight_gpu": "0, GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, Tesla V100-SXM2-16GB, 5, 16140, 0\n1, GPU-f1c9fd5a-e917-56e0-21fb-24035ba44a36, Tesla V100-SXM2-16GB, 5, 16140, 0\n2, GPU-b8c11c01-c91f-aa0b-abf6-dad35085cc76, Tesla V100-SXM2-16GB, 5, 16140, 0\n3, GPU-8b71b032-1b75-2891-935c-ce106a53034a, Tesla V100-SXM2-16GB, 5, 16140, 0\n", + "postflight_apps": "", + "exit_code": 0, + "elapsed_seconds": 9.595732301007956, + "scratch_removed": true +} diff --git a/research/fine_surface_joint_20261014/incremental.diff b/research/fine_surface_joint_20261014/incremental.diff new file mode 100644 index 0000000..e03c132 --- /dev/null +++ b/research/fine_surface_joint_20261014/incremental.diff @@ -0,0 +1,10 @@ +--- a/src/CelerisLab/lbm/refinement_stepper.py ++++ b/src/CelerisLab/lbm/refinement_stepper.py +@@ -39,6 +39,7 @@ + velocities are in coarse lattice units (dx=dt=1). Independent local copies + are projected at fine cell centers. Their complete stencil must be active + and disjoint from the actual two-hop transfer footprint. ++ These use the edge/cell-center frame (coarse centers I+.5), whereas ordinary Simulation objects use the integer-node frame. + + ``initialize(coarse_g, fine_g)`` accepts physical Q-major (9,ny,nx) arrays + already in postcollision phase. It does not collide or build channel flags. diff --git a/research/fine_surface_joint_20261014/integrity.json b/research/fine_surface_joint_20261014/integrity.json new file mode 100644 index 0000000..a8b6e4b --- /dev/null +++ b/research/fine_surface_joint_20261014/integrity.json @@ -0,0 +1,38 @@ +{ + "baseline_files": 610, + "changed_previous_files": [ + "src/CelerisLab/lbm/refinement_stepper.py" + ], + "incremental_lines_added": 1, + "incremental_lines_deleted": 0, + "frozen_hashes_unchanged": true, + "frozen_file_count": 100, + "rows": { + "zero": { + "ledger": 24, + "collisions": 72, + "boundary": 48 + }, + "blow": { + "ledger": 24, + "collisions": 72, + "boundary": 48 + }, + "suction": { + "ledger": 24, + "collisions": 72, + "boundary": 48 + } + }, + "regions": { + "coarse_interface": 68, + "coarse_bulk": 252, + "fine_band": 124, + "transfer_slots": 196 + }, + "all_text_files_within_40000_chars": true, + "scratch_removed": true, + "temporary_before_copy_removed": true, + "review_complete": true, + "total_evidence_bytes_before_manifest": 936489 +} diff --git a/research/fine_surface_joint_20261014/manifest.json b/research/fine_surface_joint_20261014/manifest.json new file mode 100644 index 0000000..d2af502 --- /dev/null +++ b/research/fine_surface_joint_20261014/manifest.json @@ -0,0 +1,138 @@ +{ + "baseline_00.json": { + "bytes": 21302, + "sha256": "24564bba03c0d0563a04a8ef41c2c66f272c2e23d3992694e032c436b3272985" + }, + "baseline_01.json": { + "bytes": 26191, + "sha256": "1aa54afbe77b4db806ed852aa9166c6b098de8271318f33c1aec9dbca73fee00" + }, + "baseline_02.json": { + "bytes": 22440, + "sha256": "4ad20625dd7be154983bd5e834b7d9c22a9bf103fbb821198d081efab9723229" + }, + "baseline_03.json": { + "bytes": 8584, + "sha256": "c0296688fdb2e19634d4c82b389d3bfb5cc1c442e465fc35139cc5b1d6d47944" + }, + "blow_boundary.csv": { + "bytes": 12536, + "sha256": "136c42ab6daab369f813681a55546da96b9280d918178a4b7ff03d0fd5847c72" + }, + "blow_collisions.csv": { + "bytes": 19145, + "sha256": "229245407e1eb436867a6110b7b7487effeaa8dd73540d05f25288c01f5e8670" + }, + "blow_ledger.csv": { + "bytes": 15977, + "sha256": "89d9a88147b9c609d15e06c98f279daf27060cc914acd53910e74e2b46108977" + }, + "blow_propagation.csv": { + "bytes": 9714, + "sha256": "4c452e4bffaec594f8b9e17dc992a9106541d5b0d283e0a2725cdc040808b257" + }, + "blow_signals.npz": { + "bytes": 221114, + "sha256": "a78440514365bdb6c2af5424f729d856446adf14c2728da471606e24e5f8ce9a" + }, + "blow_summary.json": { + "bytes": 4113, + "sha256": "e5b574ba02848b88487bfaa64e934b4d07c598658f4012a71f014ea6d883c351" + }, + "command.txt": { + "bytes": 232, + "sha256": "99d80134c654c9eca51ba107b49bc077dfe83c7ac6f40b85378ec0b308c260a7" + }, + "criteria.txt": { + "bytes": 7480, + "sha256": "d80d6f1218b3db449ea9115fa701b9173bc866929e634e2a3b17278b65f0c256" + }, + "frozen.json": { + "bytes": 11972, + "sha256": "68fdac18ac1b4371c2a7856456c7cc5b6f360c5dde52d282c44a68237d74028d" + }, + "gpu_run.json": { + "bytes": 1955, + "sha256": "ff90cf37cf7e198cea3a26bc00a2fd905b3eb07e6dbc5028ee58c299977b8de7" + }, + "incremental.diff": { + "bytes": 625, + "sha256": "b5e3f04adf67ccc9ac79dd2e33d7871ce3247e168783df355b1224bd2c8a0941" + }, + "integrity.json": { + "bytes": 826, + "sha256": "1fb4e8332dee509528b2d18edcbf733d2d8e632c9635039def62c662b7b031e0" + }, + "regions.json": { + "bytes": 27525, + "sha256": "f31c6d6723a10df5dbb14bff7758bdf321b1cc5a395cf0b6a169ff5f44d3c54d" + }, + "report.txt": { + "bytes": 8207, + "sha256": "8a5643409f9d1796406d190fa533a2a0058acf2b3765d83606311ee385504fae" + }, + "result.json": { + "bytes": 11442, + "sha256": "846fb625d15270a906cbcfd65df4202768929ff391507856a0fe31981d611cba" + }, + "review.txt": { + "bytes": 2117, + "sha256": "d2e40a8eabe9b88e514a79eff6374a3abfe5f4db2e9a98f9a483dcbaa6464a4c" + }, + "runner.py": { + "bytes": 5847, + "sha256": "2e52a6fd8306c07415c82d9275e17d58e0597ebd9f1f45b3be81dcdb005d4737" + }, + "stdout.txt": { + "bytes": 19940, + "sha256": "81c8de698c6e141e734545df8dee063edc51829f339afb2bd15b1efa21482deb" + }, + "suction_boundary.csv": { + "bytes": 12505, + "sha256": "7a92dd8bc5e94a0262d7b06e01c03a2c2b3f808bc611e4e27820671a5bda6d32" + }, + "suction_collisions.csv": { + "bytes": 19173, + "sha256": "46d0dfaad18cb6bd988169c5a91f15bc6e7ba77e8444965361b8393fd7f86c9b" + }, + "suction_ledger.csv": { + "bytes": 16208, + "sha256": "12c8118a4ef769565e1f89476d0860dc4b4f96bc1bcad995ed083eaa53e36085" + }, + "suction_propagation.csv": { + "bytes": 9720, + "sha256": "2991ef8dbad2fa52b8382e24974782ea533ee233ad1833e1e3bdd78c3fdd4992" + }, + "suction_signals.npz": { + "bytes": 220058, + "sha256": "44f593b3c0129b575fae00ea1bc0fdb14961a4bdf9491c7db0325acc4c682f8c" + }, + "suction_summary.json": { + "bytes": 4126, + "sha256": "e2aa6da27b04a5432508c5ed440179a5075dedbd52c38478596f3248f3e8b53b" + }, + "validate.py": { + "bytes": 19576, + "sha256": "346f1223daa7ce1fb376be5e921fec5ad77c3a10992806d54ececdf199e7c3ea" + }, + "zero_boundary.csv": { + "bytes": 11491, + "sha256": "f9785fcb1bb68064675beb6240a78e23c34f5123219eb91bbe748211c5cb1f38" + }, + "zero_collisions.csv": { + "bytes": 18915, + "sha256": "2496ccaeb9a1cf3cfed81ba412d9017b7eb9e375176551abe41572b9f09931cc" + }, + "zero_ledger.csv": { + "bytes": 16051, + "sha256": "b86d46933a0193dcd7e681982406cc91f89e56d55ac57be0afa514b492e827db" + }, + "zero_signals.npz": { + "bytes": 127958, + "sha256": "71a833a056f7370dc929d9c0d321dc0f83b2fd8b2894d14403f2f16d372297a0" + }, + "zero_summary.json": { + "bytes": 1508, + "sha256": "facbe3d1568f80643ed7af3ebe93f076f9a3e0f7b1b90cb33e4b2fb27f6c25e9" + } +} diff --git a/research/fine_surface_joint_20261014/regions.json b/research/fine_surface_joint_20261014/regions.json new file mode 100644 index 0000000..7bba269 --- /dev/null +++ b/research/fine_surface_joint_20261014/regions.json @@ -0,0 +1,2766 @@ +{ + "coarse_interface": [ + [ + 3.5, + 3.5 + ], + [ + 4.5, + 3.5 + ], + [ + 5.5, + 3.5 + ], + [ + 6.5, + 3.5 + ], + [ + 7.5, + 3.5 + ], + [ + 8.5, + 3.5 + ], + [ + 9.5, + 3.5 + ], + [ + 10.5, + 3.5 + ], + [ + 11.5, + 3.5 + ], + [ + 12.5, + 3.5 + ], + [ + 13.5, + 3.5 + ], + [ + 14.5, + 3.5 + ], + [ + 15.5, + 3.5 + ], + [ + 16.5, + 3.5 + ], + [ + 17.5, + 3.5 + ], + [ + 18.5, + 3.5 + ], + [ + 19.5, + 3.5 + ], + [ + 20.5, + 3.5 + ], + [ + 3.5, + 4.5 + ], + [ + 20.5, + 4.5 + ], + [ + 3.5, + 5.5 + ], + [ + 20.5, + 5.5 + ], + [ + 3.5, + 6.5 + ], + [ + 20.5, + 6.5 + ], + [ + 3.5, + 7.5 + ], + [ + 20.5, + 7.5 + ], + [ + 3.5, + 8.5 + ], + [ + 20.5, + 8.5 + ], + [ + 3.5, + 9.5 + ], + [ + 20.5, + 9.5 + ], + [ + 3.5, + 10.5 + ], + [ + 20.5, + 10.5 + ], + [ + 3.5, + 11.5 + ], + [ + 20.5, + 11.5 + ], + [ + 3.5, + 12.5 + ], + [ + 20.5, + 12.5 + ], + [ + 3.5, + 13.5 + ], + [ + 20.5, + 13.5 + ], + [ + 3.5, + 14.5 + ], + [ + 20.5, + 14.5 + ], + [ + 3.5, + 15.5 + ], + [ + 20.5, + 15.5 + ], + [ + 3.5, + 16.5 + ], + [ + 20.5, + 16.5 + ], + [ + 3.5, + 17.5 + ], + [ + 20.5, + 17.5 + ], + [ + 3.5, + 18.5 + ], + [ + 20.5, + 18.5 + ], + [ + 3.5, + 19.5 + ], + [ + 20.5, + 19.5 + ], + [ + 3.5, + 20.5 + ], + [ + 4.5, + 20.5 + ], + [ + 5.5, + 20.5 + ], + [ + 6.5, + 20.5 + ], + [ + 7.5, + 20.5 + ], + [ + 8.5, + 20.5 + ], + [ + 9.5, + 20.5 + ], + [ + 10.5, + 20.5 + ], + [ + 11.5, + 20.5 + ], + [ + 12.5, + 20.5 + ], + [ + 13.5, + 20.5 + ], + [ + 14.5, + 20.5 + ], + [ + 15.5, + 20.5 + ], + [ + 16.5, + 20.5 + ], + [ + 17.5, + 20.5 + ], + [ + 18.5, + 20.5 + ], + [ + 19.5, + 20.5 + ], + [ + 20.5, + 20.5 + ] + ], + "coarse_bulk": [ + [ + 0.5, + 0.5 + ], + [ + 1.5, + 0.5 + ], + [ + 2.5, + 0.5 + ], + [ + 3.5, + 0.5 + ], + [ + 4.5, + 0.5 + ], + [ + 5.5, + 0.5 + ], + [ + 6.5, + 0.5 + ], + [ + 7.5, + 0.5 + ], + [ + 8.5, + 0.5 + ], + [ + 9.5, + 0.5 + ], + [ + 10.5, + 0.5 + ], + [ + 11.5, + 0.5 + ], + [ + 12.5, + 0.5 + ], + [ + 13.5, + 0.5 + ], + [ + 14.5, + 0.5 + ], + [ + 15.5, + 0.5 + ], + [ + 16.5, + 0.5 + ], + [ + 17.5, + 0.5 + ], + [ + 18.5, + 0.5 + ], + [ + 19.5, + 0.5 + ], + [ + 20.5, + 0.5 + ], + [ + 21.5, + 0.5 + ], + [ + 22.5, + 0.5 + ], + [ + 23.5, + 0.5 + ], + [ + 0.5, + 1.5 + ], + [ + 1.5, + 1.5 + ], + [ + 2.5, + 1.5 + ], + [ + 3.5, + 1.5 + ], + [ + 4.5, + 1.5 + ], + [ + 5.5, + 1.5 + ], + [ + 6.5, + 1.5 + ], + [ + 7.5, + 1.5 + ], + [ + 8.5, + 1.5 + ], + [ + 9.5, + 1.5 + ], + [ + 10.5, + 1.5 + ], + [ + 11.5, + 1.5 + ], + [ + 12.5, + 1.5 + ], + [ + 13.5, + 1.5 + ], + [ + 14.5, + 1.5 + ], + [ + 15.5, + 1.5 + ], + [ + 16.5, + 1.5 + ], + [ + 17.5, + 1.5 + ], + [ + 18.5, + 1.5 + ], + [ + 19.5, + 1.5 + ], + [ + 20.5, + 1.5 + ], + [ + 21.5, + 1.5 + ], + [ + 22.5, + 1.5 + ], + [ + 23.5, + 1.5 + ], + [ + 0.5, + 2.5 + ], + [ + 1.5, + 2.5 + ], + [ + 2.5, + 2.5 + ], + [ + 3.5, + 2.5 + ], + [ + 4.5, + 2.5 + ], + [ + 5.5, + 2.5 + ], + [ + 6.5, + 2.5 + ], + [ + 7.5, + 2.5 + ], + [ + 8.5, + 2.5 + ], + [ + 9.5, + 2.5 + ], + [ + 10.5, + 2.5 + ], + [ + 11.5, + 2.5 + ], + [ + 12.5, + 2.5 + ], + [ + 13.5, + 2.5 + ], + [ + 14.5, + 2.5 + ], + [ + 15.5, + 2.5 + ], + [ + 16.5, + 2.5 + ], + [ + 17.5, + 2.5 + ], + [ + 18.5, + 2.5 + ], + [ + 19.5, + 2.5 + ], + [ + 20.5, + 2.5 + ], + [ + 21.5, + 2.5 + ], + [ + 22.5, + 2.5 + ], + [ + 23.5, + 2.5 + ], + [ + 0.5, + 3.5 + ], + [ + 1.5, + 3.5 + ], + [ + 2.5, + 3.5 + ], + [ + 21.5, + 3.5 + ], + [ + 22.5, + 3.5 + ], + [ + 23.5, + 3.5 + ], + [ + 0.5, + 4.5 + ], + [ + 1.5, + 4.5 + ], + [ + 2.5, + 4.5 + ], + [ + 21.5, + 4.5 + ], + [ + 22.5, + 4.5 + ], + [ + 23.5, + 4.5 + ], + [ + 0.5, + 5.5 + ], + [ + 1.5, + 5.5 + ], + [ + 2.5, + 5.5 + ], + [ + 21.5, + 5.5 + ], + [ + 22.5, + 5.5 + ], + [ + 23.5, + 5.5 + ], + [ + 0.5, + 6.5 + ], + [ + 1.5, + 6.5 + ], + [ + 2.5, + 6.5 + ], + [ + 21.5, + 6.5 + ], + [ + 22.5, + 6.5 + ], + [ + 23.5, + 6.5 + ], + [ + 0.5, + 7.5 + ], + [ + 1.5, + 7.5 + ], + [ + 2.5, + 7.5 + ], + [ + 21.5, + 7.5 + ], + [ + 22.5, + 7.5 + ], + [ + 23.5, + 7.5 + ], + [ + 0.5, + 8.5 + ], + [ + 1.5, + 8.5 + ], + [ + 2.5, + 8.5 + ], + [ + 21.5, + 8.5 + ], + [ + 22.5, + 8.5 + ], + [ + 23.5, + 8.5 + ], + [ + 0.5, + 9.5 + ], + [ + 1.5, + 9.5 + ], + [ + 2.5, + 9.5 + ], + [ + 21.5, + 9.5 + ], + [ + 22.5, + 9.5 + ], + [ + 23.5, + 9.5 + ], + [ + 0.5, + 10.5 + ], + [ + 1.5, + 10.5 + ], + [ + 2.5, + 10.5 + ], + [ + 21.5, + 10.5 + ], + [ + 22.5, + 10.5 + ], + [ + 23.5, + 10.5 + ], + [ + 0.5, + 11.5 + ], + [ + 1.5, + 11.5 + ], + [ + 2.5, + 11.5 + ], + [ + 21.5, + 11.5 + ], + [ + 22.5, + 11.5 + ], + [ + 23.5, + 11.5 + ], + [ + 0.5, + 12.5 + ], + [ + 1.5, + 12.5 + ], + [ + 2.5, + 12.5 + ], + [ + 21.5, + 12.5 + ], + [ + 22.5, + 12.5 + ], + [ + 23.5, + 12.5 + ], + [ + 0.5, + 13.5 + ], + [ + 1.5, + 13.5 + ], + [ + 2.5, + 13.5 + ], + [ + 21.5, + 13.5 + ], + [ + 22.5, + 13.5 + ], + [ + 23.5, + 13.5 + ], + [ + 0.5, + 14.5 + ], + [ + 1.5, + 14.5 + ], + [ + 2.5, + 14.5 + ], + [ + 21.5, + 14.5 + ], + [ + 22.5, + 14.5 + ], + [ + 23.5, + 14.5 + ], + [ + 0.5, + 15.5 + ], + [ + 1.5, + 15.5 + ], + [ + 2.5, + 15.5 + ], + [ + 21.5, + 15.5 + ], + [ + 22.5, + 15.5 + ], + [ + 23.5, + 15.5 + ], + [ + 0.5, + 16.5 + ], + [ + 1.5, + 16.5 + ], + [ + 2.5, + 16.5 + ], + [ + 21.5, + 16.5 + ], + [ + 22.5, + 16.5 + ], + [ + 23.5, + 16.5 + ], + [ + 0.5, + 17.5 + ], + [ + 1.5, + 17.5 + ], + [ + 2.5, + 17.5 + ], + [ + 21.5, + 17.5 + ], + [ + 22.5, + 17.5 + ], + [ + 23.5, + 17.5 + ], + [ + 0.5, + 18.5 + ], + [ + 1.5, + 18.5 + ], + [ + 2.5, + 18.5 + ], + [ + 21.5, + 18.5 + ], + [ + 22.5, + 18.5 + ], + [ + 23.5, + 18.5 + ], + [ + 0.5, + 19.5 + ], + [ + 1.5, + 19.5 + ], + [ + 2.5, + 19.5 + ], + [ + 21.5, + 19.5 + ], + [ + 22.5, + 19.5 + ], + [ + 23.5, + 19.5 + ], + [ + 0.5, + 20.5 + ], + [ + 1.5, + 20.5 + ], + [ + 2.5, + 20.5 + ], + [ + 21.5, + 20.5 + ], + [ + 22.5, + 20.5 + ], + [ + 23.5, + 20.5 + ], + [ + 0.5, + 21.5 + ], + [ + 1.5, + 21.5 + ], + [ + 2.5, + 21.5 + ], + [ + 3.5, + 21.5 + ], + [ + 4.5, + 21.5 + ], + [ + 5.5, + 21.5 + ], + [ + 6.5, + 21.5 + ], + [ + 7.5, + 21.5 + ], + [ + 8.5, + 21.5 + ], + [ + 9.5, + 21.5 + ], + [ + 10.5, + 21.5 + ], + [ + 11.5, + 21.5 + ], + [ + 12.5, + 21.5 + ], + [ + 13.5, + 21.5 + ], + [ + 14.5, + 21.5 + ], + [ + 15.5, + 21.5 + ], + [ + 16.5, + 21.5 + ], + [ + 17.5, + 21.5 + ], + [ + 18.5, + 21.5 + ], + [ + 19.5, + 21.5 + ], + [ + 20.5, + 21.5 + ], + [ + 21.5, + 21.5 + ], + [ + 22.5, + 21.5 + ], + [ + 23.5, + 21.5 + ], + [ + 0.5, + 22.5 + ], + [ + 1.5, + 22.5 + ], + [ + 2.5, + 22.5 + ], + [ + 3.5, + 22.5 + ], + [ + 4.5, + 22.5 + ], + [ + 5.5, + 22.5 + ], + [ + 6.5, + 22.5 + ], + [ + 7.5, + 22.5 + ], + [ + 8.5, + 22.5 + ], + [ + 9.5, + 22.5 + ], + [ + 10.5, + 22.5 + ], + [ + 11.5, + 22.5 + ], + [ + 12.5, + 22.5 + ], + [ + 13.5, + 22.5 + ], + [ + 14.5, + 22.5 + ], + [ + 15.5, + 22.5 + ], + [ + 16.5, + 22.5 + ], + [ + 17.5, + 22.5 + ], + [ + 18.5, + 22.5 + ], + [ + 19.5, + 22.5 + ], + [ + 20.5, + 22.5 + ], + [ + 21.5, + 22.5 + ], + [ + 22.5, + 22.5 + ], + [ + 23.5, + 22.5 + ], + [ + 0.5, + 23.5 + ], + [ + 1.5, + 23.5 + ], + [ + 2.5, + 23.5 + ], + [ + 3.5, + 23.5 + ], + [ + 4.5, + 23.5 + ], + [ + 5.5, + 23.5 + ], + [ + 6.5, + 23.5 + ], + [ + 7.5, + 23.5 + ], + [ + 8.5, + 23.5 + ], + [ + 9.5, + 23.5 + ], + [ + 10.5, + 23.5 + ], + [ + 11.5, + 23.5 + ], + [ + 12.5, + 23.5 + ], + [ + 13.5, + 23.5 + ], + [ + 14.5, + 23.5 + ], + [ + 15.5, + 23.5 + ], + [ + 16.5, + 23.5 + ], + [ + 17.5, + 23.5 + ], + [ + 18.5, + 23.5 + ], + [ + 19.5, + 23.5 + ], + [ + 20.5, + 23.5 + ], + [ + 21.5, + 23.5 + ], + [ + 22.5, + 23.5 + ], + [ + 23.5, + 23.5 + ] + ], + "fine_band": [ + [ + 4.25, + 4.25 + ], + [ + 4.75, + 4.25 + ], + [ + 5.25, + 4.25 + ], + [ + 5.75, + 4.25 + ], + [ + 6.25, + 4.25 + ], + [ + 6.75, + 4.25 + ], + [ + 7.25, + 4.25 + ], + [ + 7.75, + 4.25 + ], + [ + 8.25, + 4.25 + ], + [ + 8.75, + 4.25 + ], + [ + 9.25, + 4.25 + ], + [ + 9.75, + 4.25 + ], + [ + 10.25, + 4.25 + ], + [ + 10.75, + 4.25 + ], + [ + 11.25, + 4.25 + ], + [ + 11.75, + 4.25 + ], + [ + 12.25, + 4.25 + ], + [ + 12.75, + 4.25 + ], + [ + 13.25, + 4.25 + ], + [ + 13.75, + 4.25 + ], + [ + 14.25, + 4.25 + ], + [ + 14.75, + 4.25 + ], + [ + 15.25, + 4.25 + ], + [ + 15.75, + 4.25 + ], + [ + 16.25, + 4.25 + ], + [ + 16.75, + 4.25 + ], + [ + 17.25, + 4.25 + ], + [ + 17.75, + 4.25 + ], + [ + 18.25, + 4.25 + ], + [ + 18.75, + 4.25 + ], + [ + 19.25, + 4.25 + ], + [ + 19.75, + 4.25 + ], + [ + 4.25, + 4.75 + ], + [ + 19.75, + 4.75 + ], + [ + 4.25, + 5.25 + ], + [ + 19.75, + 5.25 + ], + [ + 4.25, + 5.75 + ], + [ + 19.75, + 5.75 + ], + [ + 4.25, + 6.25 + ], + [ + 19.75, + 6.25 + ], + [ + 4.25, + 6.75 + ], + [ + 19.75, + 6.75 + ], + [ + 4.25, + 7.25 + ], + [ + 19.75, + 7.25 + ], + [ + 4.25, + 7.75 + ], + [ + 19.75, + 7.75 + ], + [ + 4.25, + 8.25 + ], + [ + 19.75, + 8.25 + ], + [ + 4.25, + 8.75 + ], + [ + 19.75, + 8.75 + ], + [ + 4.25, + 9.25 + ], + [ + 19.75, + 9.25 + ], + [ + 4.25, + 9.75 + ], + [ + 19.75, + 9.75 + ], + [ + 4.25, + 10.25 + ], + [ + 19.75, + 10.25 + ], + [ + 4.25, + 10.75 + ], + [ + 19.75, + 10.75 + ], + [ + 4.25, + 11.25 + ], + [ + 19.75, + 11.25 + ], + [ + 4.25, + 11.75 + ], + [ + 19.75, + 11.75 + ], + [ + 4.25, + 12.25 + ], + [ + 19.75, + 12.25 + ], + [ + 4.25, + 12.75 + ], + [ + 19.75, + 12.75 + ], + [ + 4.25, + 13.25 + ], + [ + 19.75, + 13.25 + ], + [ + 4.25, + 13.75 + ], + [ + 19.75, + 13.75 + ], + [ + 4.25, + 14.25 + ], + [ + 19.75, + 14.25 + ], + [ + 4.25, + 14.75 + ], + [ + 19.75, + 14.75 + ], + [ + 4.25, + 15.25 + ], + [ + 19.75, + 15.25 + ], + [ + 4.25, + 15.75 + ], + [ + 19.75, + 15.75 + ], + [ + 4.25, + 16.25 + ], + [ + 19.75, + 16.25 + ], + [ + 4.25, + 16.75 + ], + [ + 19.75, + 16.75 + ], + [ + 4.25, + 17.25 + ], + [ + 19.75, + 17.25 + ], + [ + 4.25, + 17.75 + ], + [ + 19.75, + 17.75 + ], + [ + 4.25, + 18.25 + ], + [ + 19.75, + 18.25 + ], + [ + 4.25, + 18.75 + ], + [ + 19.75, + 18.75 + ], + [ + 4.25, + 19.25 + ], + [ + 19.75, + 19.25 + ], + [ + 4.25, + 19.75 + ], + [ + 4.75, + 19.75 + ], + [ + 5.25, + 19.75 + ], + [ + 5.75, + 19.75 + ], + [ + 6.25, + 19.75 + ], + [ + 6.75, + 19.75 + ], + [ + 7.25, + 19.75 + ], + [ + 7.75, + 19.75 + ], + [ + 8.25, + 19.75 + ], + [ + 8.75, + 19.75 + ], + [ + 9.25, + 19.75 + ], + [ + 9.75, + 19.75 + ], + [ + 10.25, + 19.75 + ], + [ + 10.75, + 19.75 + ], + [ + 11.25, + 19.75 + ], + [ + 11.75, + 19.75 + ], + [ + 12.25, + 19.75 + ], + [ + 12.75, + 19.75 + ], + [ + 13.25, + 19.75 + ], + [ + 13.75, + 19.75 + ], + [ + 14.25, + 19.75 + ], + [ + 14.75, + 19.75 + ], + [ + 15.25, + 19.75 + ], + [ + 15.75, + 19.75 + ], + [ + 16.25, + 19.75 + ], + [ + 16.75, + 19.75 + ], + [ + 17.25, + 19.75 + ], + [ + 17.75, + 19.75 + ], + [ + 18.25, + 19.75 + ], + [ + 18.75, + 19.75 + ], + [ + 19.25, + 19.75 + ], + [ + 19.75, + 19.75 + ] + ], + "transfer_slots": [ + { + "q": 6, + "x": 3.5, + "y": 3.5 + }, + { + "q": 4, + "x": 4.5, + "y": 3.5 + }, + { + "q": 6, + "x": 4.5, + "y": 3.5 + }, + { + "q": 7, + "x": 4.5, + "y": 3.5 + }, + { + "q": 4, + "x": 5.5, + "y": 3.5 + }, + { + "q": 6, + "x": 5.5, + "y": 3.5 + }, + { + "q": 7, + "x": 5.5, + "y": 3.5 + }, + { + "q": 4, + "x": 6.5, + "y": 3.5 + }, + { + "q": 6, + "x": 6.5, + "y": 3.5 + }, + { + "q": 7, + "x": 6.5, + "y": 3.5 + }, + { + "q": 4, + "x": 7.5, + "y": 3.5 + }, + { + "q": 6, + "x": 7.5, + "y": 3.5 + }, + { + "q": 7, + "x": 7.5, + "y": 3.5 + }, + { + "q": 4, + "x": 8.5, + "y": 3.5 + }, + { + "q": 6, + "x": 8.5, + "y": 3.5 + }, + { + "q": 7, + "x": 8.5, + "y": 3.5 + }, + { + "q": 4, + "x": 9.5, + "y": 3.5 + }, + { + "q": 6, + "x": 9.5, + "y": 3.5 + }, + { + "q": 7, + "x": 9.5, + "y": 3.5 + }, + { + "q": 4, + "x": 10.5, + "y": 3.5 + }, + { + "q": 6, + "x": 10.5, + "y": 3.5 + }, + { + "q": 7, + "x": 10.5, + "y": 3.5 + }, + { + "q": 4, + "x": 11.5, + "y": 3.5 + }, + { + "q": 6, + "x": 11.5, + "y": 3.5 + }, + { + "q": 7, + "x": 11.5, + "y": 3.5 + }, + { + "q": 4, + "x": 12.5, + "y": 3.5 + }, + { + "q": 6, + "x": 12.5, + "y": 3.5 + }, + { + "q": 7, + "x": 12.5, + "y": 3.5 + }, + { + "q": 4, + "x": 13.5, + "y": 3.5 + }, + { + "q": 6, + "x": 13.5, + "y": 3.5 + }, + { + "q": 7, + "x": 13.5, + "y": 3.5 + }, + { + "q": 4, + "x": 14.5, + "y": 3.5 + }, + { + "q": 6, + "x": 14.5, + "y": 3.5 + }, + { + "q": 7, + "x": 14.5, + "y": 3.5 + }, + { + "q": 4, + "x": 15.5, + "y": 3.5 + }, + { + "q": 6, + "x": 15.5, + "y": 3.5 + }, + { + "q": 7, + "x": 15.5, + "y": 3.5 + }, + { + "q": 4, + "x": 16.5, + "y": 3.5 + }, + { + "q": 6, + "x": 16.5, + "y": 3.5 + }, + { + "q": 7, + "x": 16.5, + "y": 3.5 + }, + { + "q": 4, + "x": 17.5, + "y": 3.5 + }, + { + "q": 6, + "x": 17.5, + "y": 3.5 + }, + { + "q": 7, + "x": 17.5, + "y": 3.5 + }, + { + "q": 4, + "x": 18.5, + "y": 3.5 + }, + { + "q": 6, + "x": 18.5, + "y": 3.5 + }, + { + "q": 7, + "x": 18.5, + "y": 3.5 + }, + { + "q": 4, + "x": 19.5, + "y": 3.5 + }, + { + "q": 6, + "x": 19.5, + "y": 3.5 + }, + { + "q": 7, + "x": 19.5, + "y": 3.5 + }, + { + "q": 7, + "x": 20.5, + "y": 3.5 + }, + { + "q": 2, + "x": 3.5, + "y": 4.5 + }, + { + "q": 6, + "x": 3.5, + "y": 4.5 + }, + { + "q": 8, + "x": 3.5, + "y": 4.5 + }, + { + "q": 1, + "x": 20.5, + "y": 4.5 + }, + { + "q": 5, + "x": 20.5, + "y": 4.5 + }, + { + "q": 7, + "x": 20.5, + "y": 4.5 + }, + { + "q": 2, + "x": 3.5, + "y": 5.5 + }, + { + "q": 6, + "x": 3.5, + "y": 5.5 + }, + { + "q": 8, + "x": 3.5, + "y": 5.5 + }, + { + "q": 1, + "x": 20.5, + "y": 5.5 + }, + { + "q": 5, + "x": 20.5, + "y": 5.5 + }, + { + "q": 7, + "x": 20.5, + "y": 5.5 + }, + { + "q": 2, + "x": 3.5, + "y": 6.5 + }, + { + "q": 6, + "x": 3.5, + "y": 6.5 + }, + { + "q": 8, + "x": 3.5, + "y": 6.5 + }, + { + "q": 1, + "x": 20.5, + "y": 6.5 + }, + { + "q": 5, + "x": 20.5, + "y": 6.5 + }, + { + "q": 7, + "x": 20.5, + "y": 6.5 + }, + { + "q": 2, + "x": 3.5, + "y": 7.5 + }, + { + "q": 6, + "x": 3.5, + "y": 7.5 + }, + { + "q": 8, + "x": 3.5, + "y": 7.5 + }, + { + "q": 1, + "x": 20.5, + "y": 7.5 + }, + { + "q": 5, + "x": 20.5, + "y": 7.5 + }, + { + "q": 7, + "x": 20.5, + "y": 7.5 + }, + { + "q": 2, + "x": 3.5, + "y": 8.5 + }, + { + "q": 6, + "x": 3.5, + "y": 8.5 + }, + { + "q": 8, + "x": 3.5, + "y": 8.5 + }, + { + "q": 1, + "x": 20.5, + "y": 8.5 + }, + { + "q": 5, + "x": 20.5, + "y": 8.5 + }, + { + "q": 7, + "x": 20.5, + "y": 8.5 + }, + { + "q": 2, + "x": 3.5, + "y": 9.5 + }, + { + "q": 6, + "x": 3.5, + "y": 9.5 + }, + { + "q": 8, + "x": 3.5, + "y": 9.5 + }, + { + "q": 1, + "x": 20.5, + "y": 9.5 + }, + { + "q": 5, + "x": 20.5, + "y": 9.5 + }, + { + "q": 7, + "x": 20.5, + "y": 9.5 + }, + { + "q": 2, + "x": 3.5, + "y": 10.5 + }, + { + "q": 6, + "x": 3.5, + "y": 10.5 + }, + { + "q": 8, + "x": 3.5, + "y": 10.5 + }, + { + "q": 1, + "x": 20.5, + "y": 10.5 + }, + { + "q": 5, + "x": 20.5, + "y": 10.5 + }, + { + "q": 7, + "x": 20.5, + "y": 10.5 + }, + { + "q": 2, + "x": 3.5, + "y": 11.5 + }, + { + "q": 6, + "x": 3.5, + "y": 11.5 + }, + { + "q": 8, + "x": 3.5, + "y": 11.5 + }, + { + "q": 1, + "x": 20.5, + "y": 11.5 + }, + { + "q": 5, + "x": 20.5, + "y": 11.5 + }, + { + "q": 7, + "x": 20.5, + "y": 11.5 + }, + { + "q": 2, + "x": 3.5, + "y": 12.5 + }, + { + "q": 6, + "x": 3.5, + "y": 12.5 + }, + { + "q": 8, + "x": 3.5, + "y": 12.5 + }, + { + "q": 1, + "x": 20.5, + "y": 12.5 + }, + { + "q": 5, + "x": 20.5, + "y": 12.5 + }, + { + "q": 7, + "x": 20.5, + "y": 12.5 + }, + { + "q": 2, + "x": 3.5, + "y": 13.5 + }, + { + "q": 6, + "x": 3.5, + "y": 13.5 + }, + { + "q": 8, + "x": 3.5, + "y": 13.5 + }, + { + "q": 1, + "x": 20.5, + "y": 13.5 + }, + { + "q": 5, + "x": 20.5, + "y": 13.5 + }, + { + "q": 7, + "x": 20.5, + "y": 13.5 + }, + { + "q": 2, + "x": 3.5, + "y": 14.5 + }, + { + "q": 6, + "x": 3.5, + "y": 14.5 + }, + { + "q": 8, + "x": 3.5, + "y": 14.5 + }, + { + "q": 1, + "x": 20.5, + "y": 14.5 + }, + { + "q": 5, + "x": 20.5, + "y": 14.5 + }, + { + "q": 7, + "x": 20.5, + "y": 14.5 + }, + { + "q": 2, + "x": 3.5, + "y": 15.5 + }, + { + "q": 6, + "x": 3.5, + "y": 15.5 + }, + { + "q": 8, + "x": 3.5, + "y": 15.5 + }, + { + "q": 1, + "x": 20.5, + "y": 15.5 + }, + { + "q": 5, + "x": 20.5, + "y": 15.5 + }, + { + "q": 7, + "x": 20.5, + "y": 15.5 + }, + { + "q": 2, + "x": 3.5, + "y": 16.5 + }, + { + "q": 6, + "x": 3.5, + "y": 16.5 + }, + { + "q": 8, + "x": 3.5, + "y": 16.5 + }, + { + "q": 1, + "x": 20.5, + "y": 16.5 + }, + { + "q": 5, + "x": 20.5, + "y": 16.5 + }, + { + "q": 7, + "x": 20.5, + "y": 16.5 + }, + { + "q": 2, + "x": 3.5, + "y": 17.5 + }, + { + "q": 6, + "x": 3.5, + "y": 17.5 + }, + { + "q": 8, + "x": 3.5, + "y": 17.5 + }, + { + "q": 1, + "x": 20.5, + "y": 17.5 + }, + { + "q": 5, + "x": 20.5, + "y": 17.5 + }, + { + "q": 7, + "x": 20.5, + "y": 17.5 + }, + { + "q": 2, + "x": 3.5, + "y": 18.5 + }, + { + "q": 6, + "x": 3.5, + "y": 18.5 + }, + { + "q": 8, + "x": 3.5, + "y": 18.5 + }, + { + "q": 1, + "x": 20.5, + "y": 18.5 + }, + { + "q": 5, + "x": 20.5, + "y": 18.5 + }, + { + "q": 7, + "x": 20.5, + "y": 18.5 + }, + { + "q": 2, + "x": 3.5, + "y": 19.5 + }, + { + "q": 6, + "x": 3.5, + "y": 19.5 + }, + { + "q": 8, + "x": 3.5, + "y": 19.5 + }, + { + "q": 1, + "x": 20.5, + "y": 19.5 + }, + { + "q": 5, + "x": 20.5, + "y": 19.5 + }, + { + "q": 7, + "x": 20.5, + "y": 19.5 + }, + { + "q": 8, + "x": 3.5, + "y": 20.5 + }, + { + "q": 3, + "x": 4.5, + "y": 20.5 + }, + { + "q": 5, + "x": 4.5, + "y": 20.5 + }, + { + "q": 8, + "x": 4.5, + "y": 20.5 + }, + { + "q": 3, + "x": 5.5, + "y": 20.5 + }, + { + "q": 5, + "x": 5.5, + "y": 20.5 + }, + { + "q": 8, + "x": 5.5, + "y": 20.5 + }, + { + "q": 3, + "x": 6.5, + "y": 20.5 + }, + { + "q": 5, + "x": 6.5, + "y": 20.5 + }, + { + "q": 8, + "x": 6.5, + "y": 20.5 + }, + { + "q": 3, + "x": 7.5, + "y": 20.5 + }, + { + "q": 5, + "x": 7.5, + "y": 20.5 + }, + { + "q": 8, + "x": 7.5, + "y": 20.5 + }, + { + "q": 3, + "x": 8.5, + "y": 20.5 + }, + { + "q": 5, + "x": 8.5, + "y": 20.5 + }, + { + "q": 8, + "x": 8.5, + "y": 20.5 + }, + { + "q": 3, + "x": 9.5, + "y": 20.5 + }, + { + "q": 5, + "x": 9.5, + "y": 20.5 + }, + { + "q": 8, + "x": 9.5, + "y": 20.5 + }, + { + "q": 3, + "x": 10.5, + "y": 20.5 + }, + { + "q": 5, + "x": 10.5, + "y": 20.5 + }, + { + "q": 8, + "x": 10.5, + "y": 20.5 + }, + { + "q": 3, + "x": 11.5, + "y": 20.5 + }, + { + "q": 5, + "x": 11.5, + "y": 20.5 + }, + { + "q": 8, + "x": 11.5, + "y": 20.5 + }, + { + "q": 3, + "x": 12.5, + "y": 20.5 + }, + { + "q": 5, + "x": 12.5, + "y": 20.5 + }, + { + "q": 8, + "x": 12.5, + "y": 20.5 + }, + { + "q": 3, + "x": 13.5, + "y": 20.5 + }, + { + "q": 5, + "x": 13.5, + "y": 20.5 + }, + { + "q": 8, + "x": 13.5, + "y": 20.5 + }, + { + "q": 3, + "x": 14.5, + "y": 20.5 + }, + { + "q": 5, + "x": 14.5, + "y": 20.5 + }, + { + "q": 8, + "x": 14.5, + "y": 20.5 + }, + { + "q": 3, + "x": 15.5, + "y": 20.5 + }, + { + "q": 5, + "x": 15.5, + "y": 20.5 + }, + { + "q": 8, + "x": 15.5, + "y": 20.5 + }, + { + "q": 3, + "x": 16.5, + "y": 20.5 + }, + { + "q": 5, + "x": 16.5, + "y": 20.5 + }, + { + "q": 8, + "x": 16.5, + "y": 20.5 + }, + { + "q": 3, + "x": 17.5, + "y": 20.5 + }, + { + "q": 5, + "x": 17.5, + "y": 20.5 + }, + { + "q": 8, + "x": 17.5, + "y": 20.5 + }, + { + "q": 3, + "x": 18.5, + "y": 20.5 + }, + { + "q": 5, + "x": 18.5, + "y": 20.5 + }, + { + "q": 8, + "x": 18.5, + "y": 20.5 + }, + { + "q": 3, + "x": 19.5, + "y": 20.5 + }, + { + "q": 5, + "x": 19.5, + "y": 20.5 + }, + { + "q": 8, + "x": 19.5, + "y": 20.5 + }, + { + "q": 5, + "x": 20.5, + "y": 20.5 + } + ] +} diff --git a/research/fine_surface_joint_20261014/report.txt b/research/fine_surface_joint_20261014/report.txt new file mode 100644 index 0000000..d7571e0 --- /dev/null +++ b/research/fine_surface_joint_20261014/report.txt @@ -0,0 +1,110 @@ +2026-10-14 — fine surface + fixed patch:24粗步短联合验证 + +结果:仅运行0、+.002、-.002三条同时间轨迹,各24coarse/48fine、物理时间24; +唯一GPU批次exit0,全部预设局部算子、有效性、记账与传播检查通过,已停止。 +这不是严格守恒、物理精度、成熟喷流、空间收敛或长期稳定性认证。 + +先报告未修正累计收支残差(质量、Px、Py;实际FP32 transfer账本): + 零驱动 +2.2911839187e-4 +5.9055164456e-6 +3.9162114263e-6 + 正吹 +2.8965249658e-4 +8.0140307546e-6 +4.8289075494e-6 + 负吸 +3.3393828198e-4 +2.1932646632e-7 +2.6496127248e-7 +相对零驱动的原始残差差值(不是修正后的守恒量): + 正吹 +6.0534104705e-5 +2.1085143089e-6 +9.1269612312e-7 + 负吸 +1.0481989011e-4 -5.6861899793e-6 -3.6512501538e-6 +零驱动本身有FP32累计漂移,不能把bitwise非零视为传播,也不能把舍入后闭合0 +说成原始残差为0。正吹/负吸的原始质量残差分别约占实际边界净质量交换的 +0.310%/0.357%;扣同时间零驱动基线后的差值分别约占0.0647%/0.1122%。 +这里只报告比例,没有事后以这些比例新增通过判据。 + +传播证据(两驱动同样的首次达标时间和物理坐标;时间以整数粗步采样): +量 首次t/位置 正吹差值 负吸差值 +fine接口内侧post-G neq 6 /(19.75,13.25) 3.86611e-7 3.73349e-7 +真实transfer arrival neq 7 /(20.5,13.5),q1 9.91749e-7 1.00666e-6 +coarse接收圈post-G速度 7 /(20.5,13.5) 4.06647e-6 4.09198e-6 +接收圈之外coarse bulk速度 8 /(13.5,21.5) 1.10692e-6 1.01799e-6 +对应零驱动基线依次9.93410e-9、1.49012e-8、2.01166e-7、1.00583e-7。 +预先固定速度差>1e-6,neq差>1e-7,且均>同位置/时间/阶段基线10倍;两符号均满足。 +负吸bulk首次点的绝对速度9.17512e-7,差值1.01799e-6;判据本来就针对差值, +未把它改写为绝对速度超过1e-6。随后峰值处绝对速度和差值均明显非零。 + +峰值(相对零驱动,全部位于预设采样窗口内): +量 峰值t/位置 正吹 负吸 +fine接口内侧neq 10 /(19.75,15.25) 7.49818e-6 7.38603e-6 +真实transfer neq 11 /(20.5,14.5),q1 2.63668e-5 2.62411e-5 +coarse接收圈速度 14 /(20.5,15.5) 2.88503e-4 2.87819e-4 +接收圈之外bulk速度 16 /(21.5,15.5) 2.56991e-4 2.56441e-4 +这里证明喷吸启动扰动实际到达并通过接口,可能含压力/声学传播。不同指标的 +首次点是各自固定区域的检测见证,不冒称同一个流体质点的轨迹。24粗步内不能 +判断成熟射流或纯剪切扰动的跨接口精度。区域及实际传递方向保存在regions.json; +每步指标、first/peak、同点基线和绝对值均有CSV/JSON;小型NPZ供离线复核。 + +逐步收支与舍入: +每条轨迹24行复合叶节点质量/动量账本;48行真实fine边界交换(每区间2行、 +每次面积权重1/4);72行局部collision诊断(每区间fine2次、coarse1次)。 +实际fluid boundary、fine transfer和coarse transfer分别统计,未用最新一帧 +link_exchange代替两子步累计。最新body impulse另列,仅为该子步的动量交换; +fine rate=该子步交换/.5,coarse rate=两子步之和/1,不冒充总推力。 + +24区间累计(质量、Px、Py): +正吹B = (+.0935678868555, +.0148278460838, +.0125229167752) +正吹F = (-.0672332551330, -.0119119063020, -.0101141575724) +正吹C = (+.0672331918031, +.0119117666036, +.0101140532643) +负吸B = (-.0934597565793, -.0147664458491, -.0124674369581) +负吸F = (+.0670307464898, +.0118954917416, +.0100988540798) +负吸C = (-.0670307874680, -.0118956044316, -.0100990422070) +其中B为solid边界净交换,F为fine叶/halo交换,C为coarse真实incoming收支。 +正吹/负吸同实际population上相对passive BFL oracle的累计附加质量分别 ++.0743640140662、-.0742686590511,符号正确;这不是额外轨迹或守恒修正。 + +每个碰撞逐q/节点独立FP64 SRT参考:使用实际读回FP32omega并核对tau/force; +固定近静止判据|GPUout-SRT64(actual_input)|<=8*eps32*|input_q|。 +三轨迹最大归一化误差分别.463942、.569605、.528511,全部<1; +最大绝对误差分别1.29143e-7、1.58655e-7、1.64771e-7。 +它是本例的固定局部容差,考虑实际fast-math/FMA路径,不是一般舍入定理。 +每次局部M(output-input)独立测得的累计漂移与原始账本残差吻合;逐区间和累计 +剩余闭合误差在FP64计账中恰为0,满足预设1e-10/1e-9。这个零是记账分解验证, +不是离散方案的精确物理守恒结论,也未以全域大容差掩盖raw残差。 + +coalescence的顺序FP32四子格平均与精确FP64均值之差独立由实际children计算, +所有槽通过固定gamma3局部界限;实际transfer账本已经包含它,没有重复扣除。 +累计平均舍入(质量、Px、Py): + 零驱动 (-5.7183206081e-7, -1.8812716007e-7, -2.8312206268e-7) + 正吹 (-6.3329935074e-8, -1.3969838619e-7, -1.0430812836e-7) + 负吸 (-4.0978193283e-8, -1.1269003153e-7, -1.8812716007e-7) +采用精确平均记账的原始残差亦保存在各summary的exact_average_residual中。 +BFL最大局部误差三轨迹均<=1.27259e-8,低于冻结1e-7。 +未从末态差反推任何收支项,也未看到结果后改公式、阈值、窗口或步数。 + +有效性:每细步active流体有限、solid与最外2层halo为NaN;inner ghost按真实 +逐方向stream-only(包含合法NaN)核对。每粗步发布fine全部非叶和coarse covered +均NaN;leaf finite、局部密度/速度范围达标;几何/flags/源对象不变。 +coarse320叶节点,其中68接口接收节点、252外部bulk;fine963流体叶, +124接口内侧节点;实际coalescence196方向槽,包括原有8个grazing-corner槽。 + +执行和范围: +冻结2026-10-14 05:55:03 UTC,GPU启动05:55:16 UTC,实际耗时9.596s,exit0。 +GPU0 UUID GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c,预检5MiB/util0/无计算进程。 +包来源严格为/home/frank14f/CelerisLab/src;现有pycuda_3_10环境;未安装依赖。 +峰值进程组RSS297836544bytes,最少可用RAM63740788736bytes,最少可用VRAM +15826MiB,本轮临时与证据采样峰值2081386bytes,远小于2GB;无保护触发。 +采样保护不是OS硬隔离;独占scratch已删除,GPU退出后5MiB且无计算进程。 + +生产增量只有refinement_stepper.py一行文档,+1/-0,明确fine_objects采用 +edge/cell-center坐标(coarse中心I+.5),普通Simulation使用integer-node坐标。 +完整610文件基线比对仅这一文件改变;既有dirty、旧审查和运行证据全部保留; +100个冻结脚本/源码哈希复核一致;不改生产公式、helper、网格或推进时序; +无提交/推送、无DynamisLab修改、无额外GPU矩阵。默认旧测试未改未重跑。 + +证据导航: +criteria.txt + frozen.json:运行前完整判据、时间戳、SHA256;不可事后改写。 +command.txt + runner.py + gpu_run.json + stdout.txt:确切命令、环境、预检、退出。 +validate.py:本次独立验证脚本,复用已接受test_fine_surface_gpu.py的只读钩子。 +zero/blow/suction_{ledger,collisions,boundary}.csv:必要逐步量与分解。 +blow/suction_propagation.csv、*_summary.json、*_signals.npz:信号与对齐基线。 +result.json:固定判据结果;regions.json:坐标/方向;integrity.json:范围完整性。 +incremental.diff:唯一生产增量;baseline_*.json:保留旧文件的哈希基线。 +代码/数值只读agent交叉复核见review.txt。所有最终文本每份<=40000字符。 + +限制:以上仅短时离散联合一致性和启动扰动跨接口证据。原始FP32漂移仍存在, +未在本轮修正;不证明物理精度、空间收敛、稳态、长时稳定、性能或通用AMR。 +此步已完成并停止,没有延伸B墙穿接口候选、checkpoint或其他特性。 diff --git a/research/fine_surface_joint_20261014/result.json b/research/fine_surface_joint_20261014/result.json new file mode 100644 index 0000000..9580c26 --- /dev/null +++ b/research/fine_surface_joint_20261014/result.json @@ -0,0 +1,412 @@ +{ + "passed": true, + "runs": { + "zero": { + "speed": 0.0, + "initial_leaf": [ + 560.7500041779131, + 0.0, + 0.0 + ], + "final_leaf": [ + 560.7502328557894, + 4.124827682971954e-06, + 3.1795352697372437e-06 + ], + "raw_residual": [ + 0.00022911839187145233, + 5.905516445636749e-06, + 3.916211426258087e-06 + ], + "exact_average_residual": [ + 0.00022854655981063843, + 5.717389285564423e-06, + 3.6330893635749817e-06 + ], + "cumulative": { + "boundary": [ + 1.3131648302078247e-07, + -1.5925616025924683e-06, + -4.5355409383773804e-07 + ], + "fine_transfer": [ + -9.47713851928711e-05, + 3.1068921089172363e-06, + -2.084299921989441e-06 + ], + "coarse_transfer": [ + 9.419955313205719e-05, + -3.295019268989563e-06, + 1.8011778593063354e-06 + ], + "rounding": [ + 0.00022911839187145233, + 5.905516445636749e-06, + 3.916211426258087e-06 + ], + "average": [ + -5.718320608139038e-07, + -1.8812716007232666e-07, + -2.8312206268310547e-07 + ] + }, + "checks": { + "validity": true, + "geometry_unchanged": true, + "boundary_count": 48, + "collision_count": 72, + "local_collision": true, + "local_regime": true, + "bfl": true, + "transfer_rounding": true, + "interval_closure": true, + "cumulative_closure": true + }, + "max_collision_ratio": 0.46394191845799526, + "max_collision_error": 1.2914339875269576e-07, + "max_bfl_error": 1.0332863675799331e-08, + "max_interval_closure": 0.0, + "drive_mass": 3.733417470608985e-07 + }, + "blow": { + "speed": 0.002, + "initial_leaf": [ + 560.7500041779131, + 0.0, + 0.0 + ], + "final_leaf": [ + 560.8438616539352, + 0.014835720416158438, + 0.012527641374617815 + ], + "raw_residual": [ + 0.0002896524965763092, + 8.014030754566193e-06, + 4.828907549381256e-06 + ], + "exact_average_residual": [ + 0.00028958916664123535, + 7.874332368373871e-06, + 4.7245994210243225e-06 + ], + "cumulative": { + "boundary": [ + 0.09356788685545325, + 0.014827846083790064, + 0.01252291677519679 + ], + "fine_transfer": [ + -0.0672332551330328, + -0.01191190630197525, + -0.010114157572388649 + ], + "coarse_transfer": [ + 0.06723319180309772, + 0.011911766603589058, + 0.010114053264260292 + ], + "rounding": [ + 0.0002896524965763092, + 8.014030754566193e-06, + 4.828907549381256e-06 + ], + "average": [ + -6.332993507385254e-08, + -1.3969838619232178e-07, + -1.043081283569336e-07 + ] + }, + "checks": { + "validity": true, + "geometry_unchanged": true, + "boundary_count": 48, + "collision_count": 72, + "local_collision": true, + "local_regime": true, + "bfl": true, + "transfer_rounding": true, + "interval_closure": true, + "cumulative_closure": true, + "propagation": true, + "drive_sign": true + }, + "max_collision_ratio": 0.5696050037738337, + "max_collision_error": 1.5865499780609582e-07, + "max_bfl_error": 1.2725840020655355e-08, + "max_interval_closure": 0.0, + "drive_mass": 0.07436401406617413, + "propagation": { + "coarse_interface_u": { + "threshold": 1e-06, + "baseline_factor": 10, + "first_arrival": { + "time": 7, + "signal": 4.0664670353703905e-06, + "baseline": 2.0116559817931723e-07, + "absolute": 4.267265792606936e-06, + "x": 20.5, + "y": 13.5 + }, + "peak": { + "metric": "coarse_interface_u", + "time": 14, + "signal": 0.00028850325159438407, + "baseline": 3.003423681142711e-08, + "absolute": 0.00028847339892346693, + "any_crossed": true, + "peak_crossed": true, + "x": 20.5, + "y": 15.5 + } + }, + "coarse_bulk_u": { + "threshold": 1e-06, + "baseline_factor": 10, + "first_arrival": { + "time": 8, + "signal": 1.1069172403255332e-06, + "baseline": 1.005827957173589e-07, + "absolute": 1.2074577299858699e-06, + "x": 13.5, + "y": 21.5 + }, + "peak": { + "metric": "coarse_bulk_u", + "time": 16, + "signal": 0.00025699080829703886, + "baseline": 0.0, + "absolute": 0.00025699080829703886, + "any_crossed": true, + "peak_crossed": true, + "x": 21.5, + "y": 15.5 + } + }, + "fine_band_neq": { + "threshold": 1e-07, + "baseline_factor": 10, + "first_arrival": { + "time": 6, + "signal": 3.8661114470928126e-07, + "baseline": 9.934099098884985e-09, + "absolute": 3.766770456103963e-07, + "x": 19.75, + "y": 13.25 + }, + "peak": { + "metric": "fine_band_neq", + "time": 10, + "signal": 7.498180437826019e-06, + "baseline": 9.106256526614231e-09, + "absolute": 7.489074181299404e-06, + "any_crossed": true, + "peak_crossed": true, + "x": 19.75, + "y": 15.25 + } + }, + "transfer_neq": { + "threshold": 1e-07, + "baseline_factor": 10, + "first_arrival": { + "time": 7, + "signal": 9.917490157301811e-07, + "baseline": 1.4901174696935193e-08, + "absolute": 9.76847841033246e-07, + "q": 1, + "x": 20.5, + "y": 13.5 + }, + "peak": { + "metric": "transfer_neq", + "time": 11, + "signal": 2.6366830318105827e-05, + "baseline": 8.692339972804497e-09, + "absolute": 2.6375522658078632e-05, + "any_crossed": true, + "peak_crossed": true, + "q": 1, + "x": 20.5, + "y": 14.5 + } + } + }, + "raw_minus_zero": [ + 6.053410470485687e-05, + 2.1085143089294434e-06, + 9.126961231231689e-07 + ] + }, + "suction": { + "speed": -0.002, + "initial_leaf": [ + 560.7500041779131, + 0.0, + 0.0 + ], + "final_leaf": [ + 560.6568783186376, + -0.014766339212656021, + -0.012467360123991966 + ], + "raw_residual": [ + 0.00033393828198313713, + 2.193264663219452e-07, + 2.6496127247810364e-07 + ], + "exact_average_residual": [ + 0.00033389730378985405, + 1.0663643479347229e-07, + 7.683411240577698e-08 + ], + "cumulative": { + "boundary": [ + -0.0934597565792501, + -0.014766445849090815, + -0.012467436958104372 + ], + "fine_transfer": [ + 0.06703074648976326, + 0.011895491741597652, + 0.010098854079842567 + ], + "coarse_transfer": [ + -0.06703078746795654, + -0.011895604431629181, + -0.01009904220700264 + ], + "rounding": [ + 0.00033393828198313713, + 2.193264663219452e-07, + 2.6496127247810364e-07 + ], + "average": [ + -4.0978193283081055e-08, + -1.126900315284729e-07, + -1.8812716007232666e-07 + ] + }, + "checks": { + "validity": true, + "geometry_unchanged": true, + "boundary_count": 48, + "collision_count": 72, + "local_collision": true, + "local_regime": true, + "bfl": true, + "transfer_rounding": true, + "interval_closure": true, + "cumulative_closure": true, + "propagation": true, + "drive_sign": true + }, + "max_collision_ratio": 0.5285112236646456, + "max_collision_error": 1.6477090769573266e-07, + "max_bfl_error": 1.2498588997100768e-08, + "max_interval_closure": 0.0, + "drive_mass": -0.07426865905109248, + "propagation": { + "coarse_interface_u": { + "threshold": 1e-06, + "baseline_factor": 10, + "first_arrival": { + "time": 7, + "signal": 4.091979903802207e-06, + "baseline": 2.0116559817931723e-07, + "absolute": 3.8910894220610345e-06, + "x": 20.5, + "y": 13.5 + }, + "peak": { + "metric": "coarse_interface_u", + "time": 14, + "signal": 0.0002878189146376881, + "baseline": 3.003423681142711e-08, + "absolute": 0.0002878487673732557, + "any_crossed": true, + "peak_crossed": true, + "x": 20.5, + "y": 15.5 + } + }, + "coarse_bulk_u": { + "threshold": 1e-06, + "baseline_factor": 10, + "first_arrival": { + "time": 8, + "signal": 1.0179867624062477e-06, + "baseline": 1.005827957173589e-07, + "absolute": 9.175116276483961e-07, + "x": 13.5, + "y": 21.5 + }, + "peak": { + "metric": "coarse_bulk_u", + "time": 16, + "signal": 0.00025644070267233306, + "baseline": 0.0, + "absolute": 0.00025644070267233306, + "any_crossed": true, + "peak_crossed": true, + "x": 21.5, + "y": 15.5 + } + }, + "fine_band_neq": { + "threshold": 1e-07, + "baseline_factor": 10, + "first_arrival": { + "time": 6, + "signal": 3.733491271140643e-07, + "baseline": 9.934099098884985e-09, + "absolute": 3.832832262129493e-07, + "x": 19.75, + "y": 13.25 + }, + "peak": { + "metric": "fine_band_neq", + "time": 10, + "signal": 7.386030289713297e-06, + "baseline": 9.106256526614231e-09, + "absolute": 7.395136546239911e-06, + "any_crossed": true, + "peak_crossed": true, + "x": 19.75, + "y": 15.25 + } + }, + "transfer_neq": { + "threshold": 1e-07, + "baseline_factor": 10, + "first_arrival": { + "time": 7, + "signal": 1.0066612778220074e-06, + "baseline": 1.4901174696935193e-08, + "absolute": 1.0215624525189426e-06, + "q": 1, + "x": 20.5, + "y": 13.5 + }, + "peak": { + "metric": "transfer_neq", + "time": 11, + "signal": 2.6241128339946074e-05, + "baseline": 8.692339972804497e-09, + "absolute": 2.623243599997327e-05, + "any_crossed": true, + "peak_crossed": true, + "q": 1, + "x": 20.5, + "y": 14.5 + } + } + }, + "raw_minus_zero": [ + 0.0001048198901116848, + -5.686189979314804e-06, + -3.6512501537799835e-06 + ] + } + } +} diff --git a/research/fine_surface_joint_20261014/review.txt b/research/fine_surface_joint_20261014/review.txt new file mode 100644 index 0000000..bbe1d8a --- /dev/null +++ b/research/fine_surface_joint_20261014/review.txt @@ -0,0 +1,36 @@ +Read-only agent review, 2026-10-14 + +/root/architecture — pre-run: +No blocking issue in hooked kernel arguments/order, masks or area weighting. +Caught CSV signal-location ambiguity and exchange-unit ambiguity before freeze: +fixed any_crossed versus peak_crossed; renamed latest_body_impulse_x/y and +latest_body_angular_impulse. No production behavior changes. + +/root/numerical — pre-run: +Avoid rho/u at partly valid halo children; transfer neq is defined at full +coarse incoming vector, actual replaced q. No double-counting average rounding. +Require independent local SRT oracle before describing measured local drift as +rounding. Freeze pointwise baseline comparisons; startup propagation may be +acoustic, not established jet advection. Suggestions incorporated before GPU. + +/root/architecture — post-run: +All frozen hashes match current sources; frozen.json digest matches gpu_run. +Freeze05:55:03 precedes launch05:55:16UTC, real exit0. Each trajectory has correct +ordered24ledger/72collision/48boundary rows; result/summary/final ledger agree. +Independently reconstructed all4metrics' per-time any_crossed/peak_crossed, +first-arrival and peaks/locations from saved signals.npz; all agree. +All text artifacts inspected within40000characters. No material gap. + +/root/numerical — post-run: +Independently summed all3ledger/collision CSVs: all components of locally +measured collision drift exactly reproduce raw global residual. Each interval +fine_transfer+coarse_transfer-average_rounding is0. Largest FP64ideal moment +defect about2.94e-14. Maximum independent local oracle normalized error.569605 +is below fixed1. Thus ledger closure is not the sole acceptance gate. +No blocking issue. Raw mass residuals2.29118e-4/2.89652e-4/3.33938e-4 remain; +identifying their FP32 source does not physically repair them or establish +strict conservation. First6/7/8 are integer sampling threshold witnesses, +not accurate propagation-speed or mature-jet/accuracy claims. + +Agents performed read-only inspection/offline data parsing, no file edits, +no GPU launch and no old regression runs. Root is the sole editor/launcher. diff --git a/research/fine_surface_joint_20261014/runner.py b/research/fine_surface_joint_20261014/runner.py new file mode 100644 index 0000000..812973a --- /dev/null +++ b/research/fine_surface_joint_20261014/runner.py @@ -0,0 +1,130 @@ +"""One launch, fresh resource guards, only owned scratch/process-group cleanup.""" +import hashlib +import json +import os +from pathlib import Path +import shutil +import signal +import subprocess +import tempfile +import time +from datetime import datetime, timezone + +ROOT = Path('/home/frank14f/CelerisLab') +OUT = Path(__file__).resolve().parent +PYTHON = '/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python' +UUID = 'GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c' + + +def command(args): + return subprocess.check_output(args, text=True, timeout=10) + + +def gpu(): + return command(['nvidia-smi', '--query-gpu=index,uuid,name,memory.used,memory.free,utilization.gpu', '--format=csv,noheader,nounits']) + + +def apps(): + return command(['nvidia-smi', '--query-compute-apps=gpu_uuid,pid,process_name,used_memory', '--format=csv,noheader,nounits']) + + +def ram(): + for line in Path('/proc/meminfo').read_text().splitlines(): + if line.startswith('MemAvailable:'): + return int(line.split()[1])*1024 + raise RuntimeError('MemAvailable unavailable') + + +def disk(paths): + return sum(p.stat().st_size for root in paths for p in root.rglob('*') if p.is_file()) + + +def group_rss(pgid): + total = 0 + for proc in Path('/proc').iterdir(): + if not proc.name.isdigit(): + continue + try: + fields = (proc/'stat').read_text().rsplit(') ', 1)[1].split() + if int(fields[2]) == pgid: + for line in (proc/'status').read_text().splitlines(): + if line.startswith('VmRSS:'): + total += int(line.split()[1])*1024 + except (OSError, ValueError, IndexError): + pass + return total + + +def main(): + assert not (OUT/'gpu_run.json').exists(), 'Do not repeat an existing launch' + data = dict(start_utc=datetime.now(timezone.utc).isoformat(), command=[PYTHON, str(OUT/'validate.py')], + cwd=str(ROOT), physical_gpu_uuid=UUID, note='Sampled guards, not an OS hard isolation; no fixed RSS/AS cap.') + scratch = None + process = None + started = time.monotonic() + code = 1 + try: + frozen = json.loads((OUT/'frozen.json').read_text()) + for path, digest in frozen['hashes'].items(): + assert hashlib.sha256((ROOT/path).read_bytes()).hexdigest() == digest, path + data['preflight_gpu'], data['preflight_apps'], data['preflight_ram_bytes'] = gpu(), apps(), ram() + fields = next(line.split(', ') for line in data['preflight_gpu'].splitlines() if UUID in line) + used, free, util = map(int, fields[-3:]) + assert fields[0] == '0' and used <= 16 and free >= 2048 and util == 0 + assert UUID not in data['preflight_apps'] and data['preflight_ram_bytes'] >= 4*1024**3 + limits = dict(wall_seconds=180, temp_bytes=2_000_000_000, + ram_reserve_bytes=max(4*1024**3, data['preflight_ram_bytes']//10), + vram_reserve_MiB=max(512, free//10)) + data['limits'] = limits + scratch = Path(tempfile.mkdtemp(prefix='celeris-joint24-')) + env = dict(PYTHONPATH=str(ROOT/'src'), PYTHONNOUSERSITE='1', PYTHONDONTWRITEBYTECODE='1', + OPENBLAS_NUM_THREADS='1', CUDA_VISIBLE_DEVICES=UUID, + CUDA_CACHE_DISABLE='1', TMPDIR=str(scratch)) + data['env'] = env + data['frozen_sha256'] = hashlib.sha256((OUT/'frozen.json').read_bytes()).hexdigest() + data['peak_group_rss_bytes'] = 0 + data['peak_temp_bytes'] = disk([OUT,scratch]) + data['min_ram_bytes'] = data['preflight_ram_bytes'] + data['min_vram_free_MiB'] = free + data['termination_reason'] = None + with (OUT/'stdout.txt').open('w') as output: + process = subprocess.Popen(data['command'], cwd=ROOT, env={**os.environ, **env}, + stdout=output, stderr=subprocess.STDOUT, start_new_session=True) + while process.poll() is None: + available, occupied = ram(), disk([OUT,scratch]) + free = int(next(line.split(', ')[-2] for line in gpu().splitlines() if UUID in line)) + data['peak_group_rss_bytes'] = max(data['peak_group_rss_bytes'], group_rss(process.pid)) + data['peak_temp_bytes'] = max(data['peak_temp_bytes'], occupied) + data['min_ram_bytes'] = min(data['min_ram_bytes'], available) + data['min_vram_free_MiB'] = min(data['min_vram_free_MiB'], free) + if (time.monotonic()-started > limits['wall_seconds'] or occupied > limits['temp_bytes'] + or available < limits['ram_reserve_bytes'] or free < limits['vram_reserve_MiB']): + data['termination_reason'] = 'Time/disk/RAM/VRAM guard triggered' + os.killpg(process.pid, signal.SIGTERM) + try: + process.wait(timeout=5) + except subprocess.TimeoutExpired: + os.killpg(process.pid, signal.SIGKILL) + break + time.sleep(.5) + code = process.wait(timeout=10) + data['postflight_gpu'], data['postflight_apps'] = gpu(), apps() + except BaseException as error: + data['runner_error'] = repr(error) + if process is not None and process.poll() is None: + os.killpg(process.pid, signal.SIGKILL) + process.wait(timeout=10) + raise + finally: + data['exit_code'] = code + data['elapsed_seconds'] = time.monotonic()-started + if scratch is not None: + shutil.rmtree(scratch) + data['scratch_removed'] = scratch is None or not scratch.exists() + (OUT/'gpu_run.json').write_text(json.dumps(data, indent=2)+'\n') + print(json.dumps(data, indent=2), flush=True) + raise SystemExit(code) + + +if __name__ == '__main__': + main() diff --git a/research/fine_surface_joint_20261014/stdout.txt b/research/fine_surface_joint_20261014/stdout.txt new file mode 100644 index 0000000..c9218e2 --- /dev/null +++ b/research/fine_surface_joint_20261014/stdout.txt @@ -0,0 +1,74 @@ +SOURCE /home/frank14f/CelerisLab/src/CelerisLab/__init__.py CRITERIA 2026-10-14T05:55:03.221284+00:00 +zero 1 raw [1.4269724488258362e-05, -1.30385160446167e-08, -1.5832483768463135e-07] cumulative_raw [1.4269724488258362e-05, -1.30385160446167e-08, -1.5832483768463135e-07] +zero 2 raw [1.7657876014709473e-06, -3.334134817123413e-07, -3.5762786865234375e-07] cumulative_raw [1.603551208972931e-05, -3.46451997756958e-07, -5.159527063369751e-07] +zero 3 raw [2.110656350851059e-05, 5.42961061000824e-07, 4.796311259269714e-07] cumulative_raw [3.71420755982399e-05, 1.9650906324386597e-07, -3.632158041000366e-08] +zero 4 raw [3.33874486386776e-05, 1.2745149433612823e-06, 1.1301599442958832e-06] cumulative_raw [7.05295242369175e-05, 1.4710240066051483e-06, 1.0938383638858795e-06] +zero 5 raw [3.5628676414489746e-05, 9.30391252040863e-07, 1.3243407011032104e-06] cumulative_raw [0.00010615820065140724, 2.4014152586460114e-06, 2.41817906498909e-06] +zero 6 raw [3.106147050857544e-05, 6.770715117454529e-07, 1.6111880540847778e-07] cumulative_raw [0.00013721967115998268, 3.0784867703914642e-06, 2.5792978703975677e-06] +zero 7 raw [2.9325950890779495e-05, 1.1133961379528046e-06, -1.9231811165809631e-07] cumulative_raw [0.00016654562205076218, 4.191882908344269e-06, 2.3869797587394714e-06] +zero 8 raw [2.0114239305257797e-05, 6.58910721540451e-07, -5.136243999004364e-07] cumulative_raw [0.00018665986135601997, 4.85079362988472e-06, 1.873355358839035e-06] +zero 9 raw [1.0494142770767212e-05, -1.434236764907837e-07, -6.081536412239075e-07] cumulative_raw [0.00019715400412678719, 4.707369953393936e-06, 1.2652017176151276e-06] +zero 10 raw [9.361188858747482e-06, -4.23286110162735e-07, 3.674067556858063e-07] cumulative_raw [0.00020651519298553467, 4.284083843231201e-06, 1.6326084733009338e-06] +zero 11 raw [1.484062522649765e-06, -1.9138678908348083e-07, 4.5029446482658386e-07] cumulative_raw [0.00020799925550818443, 4.09269705414772e-06, 2.0829029381275177e-06] +zero 12 raw [1.8295831978321075e-06, -3.227032721042633e-07, 2.8265640139579773e-07] cumulative_raw [0.00020982883870601654, 3.769993782043457e-06, 2.3655593395233154e-06] +zero 13 raw [-6.798654794692993e-08, 1.3783574104309082e-07, 2.812594175338745e-07] cumulative_raw [0.0002097608521580696, 3.907829523086548e-06, 2.64681875705719e-06] +zero 14 raw [2.5443732738494873e-06, 5.224719643592834e-07, 4.12575900554657e-07] cumulative_raw [0.0002123052254319191, 4.430301487445831e-06, 3.059394657611847e-06] +zero 15 raw [5.94649463891983e-07, 4.0745362639427185e-07, 4.66126948595047e-07] cumulative_raw [0.00021289987489581108, 4.837755113840103e-06, 3.525521606206894e-06] +zero 16 raw [3.9958395063877106e-06, 5.443580448627472e-07, 4.6798959374427795e-07] cumulative_raw [0.0002168957144021988, 5.38211315870285e-06, 3.993511199951172e-06] +zero 17 raw [4.050321877002716e-06, 3.688037395477295e-07, 3.632158041000366e-07] cumulative_raw [0.0002209460362792015, 5.75091689825058e-06, 4.3567270040512085e-06] +zero 18 raw [1.6936101019382477e-06, -5.122274160385132e-09, 2.621673047542572e-07] cumulative_raw [0.00022263964638113976, 5.745794624090195e-06, 4.618894308805466e-06] +zero 19 raw [9.485520422458649e-07, 2.3515895009040833e-07, -5.2619725465774536e-08] cumulative_raw [0.00022358819842338562, 5.980953574180603e-06, 4.566274583339691e-06] +zero 20 raw [2.483837306499481e-06, -1.3783574104309082e-07, -3.948807716369629e-07] cumulative_raw [0.0002260720357298851, 5.843117833137512e-06, 4.171393811702728e-06] +zero 21 raw [2.3888424038887024e-06, -1.4994293451309204e-07, 7.35744833946228e-08] cumulative_raw [0.0002284608781337738, 5.69317489862442e-06, 4.244968295097351e-06] +zero 22 raw [1.9418075680732727e-07, -1.5040859580039978e-07, -4.3259933590888977e-07] cumulative_raw [0.00022865505889058113, 5.54276630282402e-06, 3.8123689591884613e-06] +zero 23 raw [2.3739412426948547e-06, 1.8440186977386475e-07, -1.0058283805847168e-07] cumulative_raw [0.00023102900013327599, 5.727168172597885e-06, 3.7117861211299896e-06] +zero 24 raw [-1.910608261823654e-06, 1.7834827303886414e-07, 2.0442530512809753e-07] cumulative_raw [0.00022911839187145233, 5.905516445636749e-06, 3.916211426258087e-06] +blow 1 raw [1.4206860214471817e-05, 3.259629011154175e-09, -1.6624107956886292e-07] cumulative_raw [1.4206860214471817e-05, 3.259629011154175e-09, -1.6624107956886292e-07] +blow 2 raw [1.7564743757247925e-06, -3.6135315895080566e-07, -4.200264811515808e-07] cumulative_raw [1.596333459019661e-05, -3.580935299396515e-07, -5.862675607204437e-07] +blow 3 raw [2.1332409232854843e-05, 4.530884325504303e-07, 4.3353065848350525e-07] cumulative_raw [3.729574382305145e-05, 9.499490261077881e-08, -1.5273690223693848e-07] +blow 4 raw [3.517419099807739e-05, 1.0030344128608704e-06, 8.512288331985474e-07] cumulative_raw [7.246993482112885e-05, 1.0980293154716492e-06, 6.984919309616089e-07] +blow 5 raw [3.396905958652496e-05, 4.414469003677368e-07, 8.614733815193176e-07] cumulative_raw [0.00010643899440765381, 1.539476215839386e-06, 1.5599653124809265e-06] +blow 6 raw [2.455664798617363e-05, 4.1676685214042664e-07, 6.193295121192932e-08] cumulative_raw [0.00013099564239382744, 1.9562430679798126e-06, 1.6218982636928558e-06] +blow 7 raw [2.177571877837181e-05, 7.790513336658478e-07, -3.3760443329811096e-07] cumulative_raw [0.00015277136117219925, 2.7352944016456604e-06, 1.2842938303947449e-06] +blow 8 raw [1.2828968465328217e-05, 8.996576070785522e-07, -5.951151251792908e-07] cumulative_raw [0.00016560032963752747, 3.6349520087242126e-06, 6.891787052154541e-07] +blow 9 raw [8.143018931150436e-06, -6.007030606269836e-08, -6.831251084804535e-07] cumulative_raw [0.0001737433485686779, 3.5748817026615143e-06, 6.05359673500061e-09] +blow 10 raw [8.094590157270432e-06, -4.5588240027427673e-07, 2.6868656277656555e-07] cumulative_raw [0.00018183793872594833, 3.1189993023872375e-06, 2.7474015951156616e-07] +blow 11 raw [4.441943019628525e-06, -1.816079020500183e-08, 2.3329630494117737e-07] cumulative_raw [0.00018627988174557686, 3.1008385121822357e-06, 5.080364644527435e-07] +blow 12 raw [6.674323230981827e-06, -4.139728844165802e-07, 1.0943040251731873e-07] cumulative_raw [0.00019295420497655869, 2.6868656277656555e-06, 6.174668669700623e-07] +blow 13 raw [3.2545067369937897e-06, 4.810281097888947e-07, 5.620531737804413e-07] cumulative_raw [0.00019620871171355247, 3.16789373755455e-06, 1.1795200407505035e-06] +blow 14 raw [5.840323865413666e-06, 2.4586915969848633e-07, 4.3213367462158203e-07] cumulative_raw [0.00020204903557896614, 3.4137628972530365e-06, 1.6116537153720856e-06] +blow 15 raw [3.4989789128303528e-06, -1.3690441846847534e-07, 1.9744038581848145e-07] cumulative_raw [0.0002055480144917965, 3.276858478784561e-06, 1.809094101190567e-06] +blow 16 raw [7.721595466136932e-06, -6.09084963798523e-07, 1.825392246246338e-07] cumulative_raw [0.00021326960995793343, 2.667773514986038e-06, 1.991633325815201e-06] +blow 17 raw [7.1446411311626434e-06, -5.96512109041214e-07, -3.841705620288849e-07] cumulative_raw [0.00022041425108909607, 2.0712614059448242e-06, 1.607462763786316e-06] +blow 18 raw [6.80144876241684e-06, -5.504116415977478e-07, -4.200264811515808e-07] cumulative_raw [0.0002272156998515129, 1.5208497643470764e-06, 1.1874362826347351e-06] +blow 19 raw [9.258277714252472e-06, 2.1606683731079102e-07, 1.1175870895385742e-08] cumulative_raw [0.00023647397756576538, 1.7369166016578674e-06, 1.1986121535301208e-06] +blow 20 raw [8.094590157270432e-06, 6.710179150104523e-07, -1.816079020500183e-08] cumulative_raw [0.0002445685677230358, 2.4079345166683197e-06, 1.180451363325119e-06] +blow 21 raw [8.198432624340057e-06, 1.2507662177085876e-06, 6.873160600662231e-07] cumulative_raw [0.00025276700034737587, 3.6587007343769073e-06, 1.8677674233913422e-06] +blow 22 raw [8.822884410619736e-06, 1.978594809770584e-06, 1.3136304914951324e-06] cumulative_raw [0.0002615898847579956, 5.6372955441474915e-06, 3.1813979148864746e-06] +blow 23 raw [1.5878118574619293e-05, 1.6177073121070862e-06, 1.0365620255470276e-06] cumulative_raw [0.0002774680033326149, 7.255002856254578e-06, 4.217959940433502e-06] +blow 24 raw [1.2184493243694305e-05, 7.59027898311615e-07, 6.109476089477539e-07] cumulative_raw [0.0002896524965763092, 8.014030754566193e-06, 4.828907549381256e-06] +suction 1 raw [1.4393124729394913e-05, -4.516914486885071e-08, -1.587904989719391e-07] cumulative_raw [1.4393124729394913e-05, -4.516914486885071e-08, -1.587904989719391e-07] +suction 2 raw [2.2295862436294556e-06, -3.855675458908081e-07, -3.7997961044311523e-07] cumulative_raw [1.6622710973024368e-05, -4.307366907596588e-07, -5.387701094150543e-07] +suction 3 raw [2.245372161269188e-05, 5.573965609073639e-07, 4.1583552956581116e-07] cumulative_raw [3.907643258571625e-05, 1.2665987014770508e-07, -1.2293457984924316e-07] +suction 4 raw [3.50000336766243e-05, 1.1008232831954956e-06, 9.220093488693237e-07] cumulative_raw [7.407646626234055e-05, 1.2274831533432007e-06, 7.990747690200806e-07] +suction 5 raw [3.477558493614197e-05, 4.079192876815796e-07, 8.763745427131653e-07] cumulative_raw [0.00010885205119848251, 1.6354024410247803e-06, 1.6754493117332458e-06] +suction 6 raw [2.6892870664596558e-05, 4.9639493227005e-07, 3.129243850708008e-07] cumulative_raw [0.00013574492186307907, 2.1317973732948303e-06, 1.9883736968040466e-06] +suction 7 raw [2.290075644850731e-05, 7.67875462770462e-07, -2.7334317564964294e-07] cumulative_raw [0.00015864567831158638, 2.8996728360652924e-06, 1.7150305211544037e-06] +suction 8 raw [1.7298851162195206e-05, 5.350448191165924e-07, -6.384216248989105e-07] cumulative_raw [0.00017594452947378159, 3.4347176551818848e-06, 1.0766088962554932e-06] +suction 9 raw [1.0765623301267624e-05, -4.884786903858185e-07, -7.119961082935333e-07] cumulative_raw [0.0001867101527750492, 2.9462389647960663e-06, 3.6461278796195984e-07] +suction 10 raw [1.1249445378780365e-05, -3.1944364309310913e-07, -5.587935447692871e-08] cumulative_raw [0.00019795959815382957, 2.626795321702957e-06, 3.0873343348503113e-07] +suction 11 raw [4.750210791826248e-06, 1.7741695046424866e-07, 1.1781230568885803e-07] cumulative_raw [0.00020270980894565582, 2.804212272167206e-06, 4.2654573917388916e-07] +suction 12 raw [9.55536961555481e-06, 2.0582228899002075e-07, 2.3096799850463867e-07] cumulative_raw [0.00021226517856121063, 3.0100345611572266e-06, 6.575137376785278e-07] +suction 13 raw [5.227979272603989e-06, -2.612359821796417e-07, 1.3830140233039856e-07] cumulative_raw [0.00021749315783381462, 2.748798578977585e-06, 7.958151400089264e-07] +suction 14 raw [7.559079676866531e-06, 1.9045546650886536e-07, -3.958120942115784e-08] cumulative_raw [0.00022505223751068115, 2.93925404548645e-06, 7.562339305877686e-07] +suction 15 raw [9.032431989908218e-06, 9.452924132347107e-08, 1.5133991837501526e-07] cumulative_raw [0.00023408466950058937, 3.0337832868099213e-06, 9.075738489627838e-07] +suction 16 raw [7.634051144123077e-06, 5.690380930900574e-07, 1.5832483768463135e-07] cumulative_raw [0.00024171872064471245, 3.6028213798999786e-06, 1.0658986866474152e-06] +suction 17 raw [1.00662000477314e-05, 8.973293006420135e-07, 7.557682693004608e-07] cumulative_raw [0.00025178492069244385, 4.500150680541992e-06, 1.821666955947876e-06] +suction 18 raw [1.0185874998569489e-05, 4.6193599700927734e-07, 2.8219074010849e-07] cumulative_raw [0.00026197079569101334, 4.9620866775512695e-06, 2.103857696056366e-06] +suction 19 raw [1.1193566024303436e-05, 1.1734664440155029e-07, 6.249174475669861e-07] cumulative_raw [0.00027316436171531677, 5.07943332195282e-06, 2.728775143623352e-06] +suction 20 raw [1.0485295206308365e-05, -3.543682396411896e-07, -2.230517566204071e-07] cumulative_raw [0.00028364965692162514, 4.72506508231163e-06, 2.505723387002945e-06] +suction 21 raw [1.1485535651445389e-05, -1.1255033314228058e-06, -5.471520125865936e-07] cumulative_raw [0.0002951351925730705, 3.5995617508888245e-06, 1.9585713744163513e-06] +suction 22 raw [9.597279131412506e-06, -1.80024653673172e-06, -1.0225921869277954e-06] cumulative_raw [0.00030473247170448303, 1.7993152141571045e-06, 9.359791874885559e-07] +suction 23 raw [1.4128629118204117e-05, -1.010950654745102e-06, -6.859190762042999e-07] cumulative_raw [0.00031886110082268715, 7.883645594120026e-07, 2.50060111284256e-07] +suction 24 raw [1.5077181160449982e-05, -5.690380930900574e-07, 1.4901161193847656e-08] cumulative_raw [0.00033393828198313713, 2.193264663219452e-07, 2.6496127247810364e-07] +RESULT {"passed": true, "summaries": {"zero": {"speed": 0.0, "initial_leaf": [560.7500041779131, 0.0, 0.0], "final_leaf": [560.7502328557894, 4.124827682971954e-06, 3.1795352697372437e-06], "raw_residual": [0.00022911839187145233, 5.905516445636749e-06, 3.916211426258087e-06], "exact_average_residual": [0.00022854655981063843, 5.717389285564423e-06, 3.6330893635749817e-06], "cumulative": {"boundary": [1.3131648302078247e-07, -1.5925616025924683e-06, -4.5355409383773804e-07], "fine_transfer": [-9.47713851928711e-05, 3.1068921089172363e-06, -2.084299921989441e-06], "coarse_transfer": [9.419955313205719e-05, -3.295019268989563e-06, 1.8011778593063354e-06], "rounding": [0.00022911839187145233, 5.905516445636749e-06, 3.916211426258087e-06], "average": [-5.718320608139038e-07, -1.8812716007232666e-07, -2.8312206268310547e-07]}, "checks": {"validity": true, "geometry_unchanged": true, "boundary_count": 48, "collision_count": 72, "local_collision": true, "local_regime": true, "bfl": true, "transfer_rounding": true, "interval_closure": true, "cumulative_closure": true}, "max_collision_ratio": 0.46394191845799526, "max_collision_error": 1.2914339875269576e-07, "max_bfl_error": 1.0332863675799331e-08, "max_interval_closure": 0.0, "drive_mass": 3.733417470608985e-07}, "blow": {"speed": 0.002, "initial_leaf": [560.7500041779131, 0.0, 0.0], "final_leaf": [560.8438616539352, 0.014835720416158438, 0.012527641374617815], "raw_residual": [0.0002896524965763092, 8.014030754566193e-06, 4.828907549381256e-06], "exact_average_residual": [0.00028958916664123535, 7.874332368373871e-06, 4.7245994210243225e-06], "cumulative": {"boundary": [0.09356788685545325, 0.014827846083790064, 0.01252291677519679], "fine_transfer": [-0.0672332551330328, -0.01191190630197525, -0.010114157572388649], "coarse_transfer": [0.06723319180309772, 0.011911766603589058, 0.010114053264260292], "rounding": [0.0002896524965763092, 8.014030754566193e-06, 4.828907549381256e-06], "average": [-6.332993507385254e-08, -1.3969838619232178e-07, -1.043081283569336e-07]}, "checks": {"validity": true, "geometry_unchanged": true, "boundary_count": 48, "collision_count": 72, "local_collision": true, "local_regime": true, "bfl": true, "transfer_rounding": true, "interval_closure": true, "cumulative_closure": true, "propagation": true, "drive_sign": true}, "max_collision_ratio": 0.5696050037738337, "max_collision_error": 1.5865499780609582e-07, "max_bfl_error": 1.2725840020655355e-08, "max_interval_closure": 0.0, "drive_mass": 0.07436401406617413, "propagation": {"coarse_interface_u": {"threshold": 1e-06, "baseline_factor": 10, "first_arrival": {"time": 7, "signal": 4.0664670353703905e-06, "baseline": 2.0116559817931723e-07, "absolute": 4.267265792606936e-06, "x": 20.5, "y": 13.5}, "peak": {"metric": "coarse_interface_u", "time": 14, "signal": 0.00028850325159438407, "baseline": 3.003423681142711e-08, "absolute": 0.00028847339892346693, "any_crossed": true, "peak_crossed": true, "x": 20.5, "y": 15.5}}, "coarse_bulk_u": {"threshold": 1e-06, "baseline_factor": 10, "first_arrival": {"time": 8, "signal": 1.1069172403255332e-06, "baseline": 1.005827957173589e-07, "absolute": 1.2074577299858699e-06, "x": 13.5, "y": 21.5}, "peak": {"metric": "coarse_bulk_u", "time": 16, "signal": 0.00025699080829703886, "baseline": 0.0, "absolute": 0.00025699080829703886, "any_crossed": true, "peak_crossed": true, "x": 21.5, "y": 15.5}}, "fine_band_neq": {"threshold": 1e-07, "baseline_factor": 10, "first_arrival": {"time": 6, "signal": 3.8661114470928126e-07, "baseline": 9.934099098884985e-09, "absolute": 3.766770456103963e-07, "x": 19.75, "y": 13.25}, "peak": {"metric": "fine_band_neq", "time": 10, "signal": 7.498180437826019e-06, "baseline": 9.106256526614231e-09, "absolute": 7.489074181299404e-06, "any_crossed": true, "peak_crossed": true, "x": 19.75, "y": 15.25}}, "transfer_neq": {"threshold": 1e-07, "baseline_factor": 10, "first_arrival": {"time": 7, "signal": 9.917490157301811e-07, "baseline": 1.4901174696935193e-08, "absolute": 9.76847841033246e-07, "q": 1, "x": 20.5, "y": 13.5}, "peak": {"metric": "transfer_neq", "time": 11, "signal": 2.6366830318105827e-05, "baseline": 8.692339972804497e-09, "absolute": 2.6375522658078632e-05, "any_crossed": true, "peak_crossed": true, "q": 1, "x": 20.5, "y": 14.5}}}, "raw_minus_zero": [6.053410470485687e-05, 2.1085143089294434e-06, 9.126961231231689e-07]}, "suction": {"speed": -0.002, "initial_leaf": [560.7500041779131, 0.0, 0.0], "final_leaf": [560.6568783186376, -0.014766339212656021, -0.012467360123991966], "raw_residual": [0.00033393828198313713, 2.193264663219452e-07, 2.6496127247810364e-07], "exact_average_residual": [0.00033389730378985405, 1.0663643479347229e-07, 7.683411240577698e-08], "cumulative": {"boundary": [-0.0934597565792501, -0.014766445849090815, -0.012467436958104372], "fine_transfer": [0.06703074648976326, 0.011895491741597652, 0.010098854079842567], "coarse_transfer": [-0.06703078746795654, -0.011895604431629181, -0.01009904220700264], "rounding": [0.00033393828198313713, 2.193264663219452e-07, 2.6496127247810364e-07], "average": [-4.0978193283081055e-08, -1.126900315284729e-07, -1.8812716007232666e-07]}, "checks": {"validity": true, "geometry_unchanged": true, "boundary_count": 48, "collision_count": 72, "local_collision": true, "local_regime": true, "bfl": true, "transfer_rounding": true, "interval_closure": true, "cumulative_closure": true, "propagation": true, "drive_sign": true}, "max_collision_ratio": 0.5285112236646456, "max_collision_error": 1.6477090769573266e-07, "max_bfl_error": 1.2498588997100768e-08, "max_interval_closure": 0.0, "drive_mass": -0.07426865905109248, "propagation": {"coarse_interface_u": {"threshold": 1e-06, "baseline_factor": 10, "first_arrival": {"time": 7, "signal": 4.091979903802207e-06, "baseline": 2.0116559817931723e-07, "absolute": 3.8910894220610345e-06, "x": 20.5, "y": 13.5}, "peak": {"metric": "coarse_interface_u", "time": 14, "signal": 0.0002878189146376881, "baseline": 3.003423681142711e-08, "absolute": 0.0002878487673732557, "any_crossed": true, "peak_crossed": true, "x": 20.5, "y": 15.5}}, "coarse_bulk_u": {"threshold": 1e-06, "baseline_factor": 10, "first_arrival": {"time": 8, "signal": 1.0179867624062477e-06, "baseline": 1.005827957173589e-07, "absolute": 9.175116276483961e-07, "x": 13.5, "y": 21.5}, "peak": {"metric": "coarse_bulk_u", "time": 16, "signal": 0.00025644070267233306, "baseline": 0.0, "absolute": 0.00025644070267233306, "any_crossed": true, "peak_crossed": true, "x": 21.5, "y": 15.5}}, "fine_band_neq": {"threshold": 1e-07, "baseline_factor": 10, "first_arrival": {"time": 6, "signal": 3.733491271140643e-07, "baseline": 9.934099098884985e-09, "absolute": 3.832832262129493e-07, "x": 19.75, "y": 13.25}, "peak": {"metric": "fine_band_neq", "time": 10, "signal": 7.386030289713297e-06, "baseline": 9.106256526614231e-09, "absolute": 7.395136546239911e-06, "any_crossed": true, "peak_crossed": true, "x": 19.75, "y": 15.25}}, "transfer_neq": {"threshold": 1e-07, "baseline_factor": 10, "first_arrival": {"time": 7, "signal": 1.0066612778220074e-06, "baseline": 1.4901174696935193e-08, "absolute": 1.0215624525189426e-06, "q": 1, "x": 20.5, "y": 13.5}, "peak": {"metric": "transfer_neq", "time": 11, "signal": 2.6241128339946074e-05, "baseline": 8.692339972804497e-09, "absolute": 2.623243599997327e-05, "any_crossed": true, "peak_crossed": true, "q": 1, "x": 20.5, "y": 14.5}}}, "raw_minus_zero": [0.0001048198901116848, -5.686189979314804e-06, -3.6512501537799835e-06]}}} diff --git a/research/fine_surface_joint_20261014/suction_boundary.csv b/research/fine_surface_joint_20261014/suction_boundary.csv new file mode 100644 index 0000000..b870be0 --- /dev/null +++ b/research/fine_surface_joint_20261014/suction_boundary.csv @@ -0,0 +1,49 @@ +step,substep,time,bfl_error,drive_mass,latest_body_impulse_x,latest_body_impulse_y,latest_body_angular_impulse,boundary_m,boundary_px,boundary_py,fine_transfer_m,fine_transfer_px,fine_transfer_py +1,1,0.5,3.7331066016221826e-09,-0.0015482641756534576,0.0010669892653822899,0.0009111212566494942,1.329833948571224e-05,-0.0015482641756534576,-0.0010669846087694168,-0.0009111212566494942,0.0,0.0,0.0 +1,2,1.0,7.450580596923828e-09,-0.001546488821844781,0.0005881106480956078,0.0005055302754044533,7.090981909652072e-06,-0.0018966365605592728,-0.000588112510740757,-0.0005055312067270279,-3.557652235031128e-07,0.0,0.0 +2,1,1.5,7.450580596923828e-09,-0.0015455698188904868,0.0007474450394511223,0.000630686990916729,6.323601846380811e-06,-0.0017942930571734905,-0.0007474464364349842,-0.0006306902505457401,-8.530914783477783e-07,-7.450580596923828e-09,-1.6763806343078613e-07 +2,2,2.0,7.450580596923828e-09,-0.0015454305605910922,0.0006957640871405602,0.0005812598392367363,-9.326976928458741e-06,-0.0019257990643382072,-0.0006957687437534332,-0.0005812682211399078,-1.3401731848716736e-06,2.7939677238464355e-09,-9.313225746154785e-10 +3,1,2.5,7.450580596923828e-09,-0.0015454182331193405,0.0007162690162658691,0.0006032083183526993,2.0262676536653146e-06,-0.0019086366519331932,-0.0007162792608141899,-0.0006032129749655724,-1.6577541828155518e-06,1.5832483768463135e-07,1.5832483768463135e-07 +3,2,3.0,8.221284986120736e-09,-0.0015455955498631406,0.000675516203045845,0.0005694478750228882,-2.283530538660372e-06,-0.0019611637108027935,-0.0006755241192877293,-0.0005694576539099216,-1.982320100069046e-06,3.1152740120887756e-07,3.096647560596466e-07 +4,1,3.5,7.450580596923828e-09,-0.0015457821940822736,0.0006534429267048836,0.000552385114133358,3.1464089307320364e-06,-0.001949384342879057,-0.0006534415297210217,-0.000552391167730093,-3.2121315598487854e-06,3.5297125577926636e-07,3.762543201446533e-07 +4,2,4.0,7.450580596923828e-09,-0.0015460265831878312,0.0006101150065660477,0.0005156379193067551,2.1656969761973954e-07,-0.001972564961761236,-0.000610120128840208,-0.0005156439729034901,-3.698747605085373e-06,-3.585591912269592e-08,1.909211277961731e-08 +5,1,4.5,7.450580596923828e-09,-0.0015462236236817618,0.0005800491198897362,0.0004902100190520287,2.4401852956046355e-06,-0.0019627874717116356,-0.0005800472572445869,-0.0004902174696326256,-3.6563724279403687e-06,5.550682544708252e-07,2.4121254682540894e-07 +5,2,5.0,8.17224322935406e-09,-0.001546429669342637,0.0005416562780737877,0.00045779068022966385,6.411905253411732e-07,-0.0019741454161703587,-0.0005416539497673512,-0.000457793939858675,-3.6312267184257507e-06,5.122274160385132e-07,2.2258609533309937e-07 +6,1,5.5,7.450580596923828e-09,-0.0015465991853560995,0.0005121780559420586,0.00043242890387773514,1.926527342988038e-06,-0.001966074574738741,-0.0005121775902807713,-0.000432425644248724,-2.8940849006175995e-06,5.164183676242828e-07,3.213062882423401e-08 +6,2,6.0,1.0613033563089402e-08,-0.001546759810737387,0.00047842320054769516,0.00040392857044935226,7.323118594859679e-07,-0.001972377300262451,-0.0004784250631928444,-0.00040392763912677765,-2.0721927285194397e-06,6.435438990592957e-07,9.12696123123169e-08 +7,1,6.5,7.450580596923828e-09,-0.0015468885373133533,0.00045062508434057236,0.0003800736740231514,1.5839877249845813e-06,-0.0019662114791572094,-0.0004506339319050312,-0.00038006948307156563,2.334360033273697e-06,3.114808350801468e-06,1.4849938452243805e-06 +7,2,7.0,8.999190503899968e-09,-0.0015470132347384351,0.00042080413550138474,0.0003548497334122658,8.012649583832854e-07,-0.0019701728597283363,-0.0004208004102110863,-0.00035485532134771347,1.5432480722665787e-05,1.1287163943052292e-05,5.935784429311752e-06 +8,1,7.5,1.0738867337045654e-08,-0.0015471137993936443,0.0003952737897634506,0.00033300556242465973,1.388882160391347e-06,-0.0019654585048556328,-0.0003952831029891968,-0.0003329990431666374,5.064625293016434e-05,2.6551075279712677e-05,1.5786848962306976e-05 +8,2,8.0,7.94032639639397e-09,-0.0015472117748432483,0.00036898814141750336,0.00031079165637493134,8.204820101109789e-07,-0.0019681239500641823,-0.0003689778968691826,-0.0003107842057943344,0.00010942388325929642,6.19497150182724e-05,3.8951635360717773e-05 +9,1,8.5,8.976009713279609e-09,-0.0015472804270270975,0.00034602265805006027,0.0002911807969212532,1.3696224959725e-06,-0.001964463386684656,-0.0003460417501628399,-0.00029119057580828667,0.0002314508892595768,9.650783613324165e-05,6.443960592150688e-05 +9,2,9.0,1.0052167986884797e-08,-0.001547337366734857,0.00032305438071489334,0.0002718055620789528,8.737507810607781e-07,-0.00196637911722064,-0.00032305577769875526,-0.0002718069590628147,0.0003751874901354313,0.00017973734065890312,0.00012484891340136528 +10,1,9.5,7.4023787099974925e-09,-0.001547404346943595,0.00030282605439424515,0.0002545500174164772,1.3337265093449346e-06,-0.0019635148346424103,-0.00030282698571681976,-0.00025455933064222336,0.0006195390596985817,0.00022383593022823334,0.000162455253303051 +10,2,10.0,6.968939966767174e-09,-0.001547448671976346,0.0002828845754265785,0.00023786630481481552,9.501839344228102e-07,-0.001965020317584276,-0.00028289156034588814,-0.00023785652592778206,0.0008522137068212032,0.00035300618037581444,0.0002658138982951641 +11,1,10.5,1.0530962046839676e-08,-0.0015474870615136364,0.00026516150683164597,0.00022298935800790787,1.3016631345008634e-06,-0.0019626920111477375,-0.00026516104117035866,-0.00022298330441117287,0.0011819470673799515,0.0003880225121974945,0.00030118972063064575 +11,2,11.0,7.354702624695619e-09,-0.0015475354224584415,0.0002481304109096527,0.00020870380103588104,8.941672690054858e-07,-0.0019638948142528534,-0.00024813972413539886,-0.00020870286971330643,0.00145752914249897,0.0005337242037057877,0.00042963773012161255 +12,1,11.5,8.767222503536232e-09,-0.001547562607513273,0.00023286882787942886,0.00019576307386159897,1.1601679523742803e-06,-0.001962078735232353,-0.0002328716218471527,-0.00019576400518417358,0.0017802291549742222,0.0005506309680640697,0.00045162299647927284 +12,2,12.0,9.096382980189333e-09,-0.0015476002059964218,0.00021828524768352509,0.00018361210823059082,8.859918445569548e-07,-0.0019631017930805683,-0.00021829502657055855,-0.00018362188711762428,0.002031440380960703,0.0006739604286849499,0.000572004821151495 +13,1,12.5,6.5197561377461355e-09,-0.0015476129016728998,0.00020523089915513992,0.00017269793897867203,1.2139267550059785e-06,-0.0019616251811385155,-0.00020523276180028915,-0.00017269421368837357,0.0022674263454973698,0.00067532854154706,0.0005780183710157871 +13,2,13.0,5.146194359539891e-09,-0.0015476392796307777,0.00019292067736387253,0.00016248133033514023,9.107929975771256e-07,-0.0019624661654233932,-0.0001929309219121933,-0.0001624850556254387,0.002446614671498537,0.0007499088533222675,0.0006604096852242947 +14,1,13.5,8.330306375259333e-09,-0.0015476535128897996,0.0001819990575313568,0.00015316344797611237,1.1346972110803932e-06,-0.0019612740725278854,-0.0001819925382733345,-0.00015317555516958237,0.0025721797719597816,0.0007412796840071678,0.0006537484005093575 +14,2,14.0,8.454041688921166e-09,-0.0015476762461938956,0.00017176009714603424,0.00014458410441875458,9.925571977653647e-07,-0.0019619660452008247,-0.00017175264656543732,-0.0001445794478058815,0.0026705721393227577,0.000760519877076149,0.0006827609613537788 +15,1,14.5,8.024249306681774e-09,-0.0015476863880568553,0.0001627029851078987,0.00013693515211343765,1.1326488877916319e-06,-0.0019609066657721996,-0.00016270345076918602,-0.00013692351058125496,0.0027098902501165867,0.0007453667931258678,0.0006675352342426777 +15,2,15.0,8.5509712643983e-09,-0.0015477023138736976,0.00015427079051733017,0.0001298980787396431,1.0080659256228586e-06,-0.0019614454358816147,-0.00015425775200128555,-0.00012989435344934464,0.0027480190619826317,0.0007168371230363846,0.0006446875631809235 +16,1,15.5,1.2498588997100768e-08,-0.0015477122014419843,0.0001468295231461525,0.000123598612844944,1.1824087963185903e-06,-0.001960494089871645,-0.00014683278277516365,-0.000123604666441679,0.002740874420851469,0.0006989189423620701,0.000626422930508852 +16,2,16.0,9.256705402194143e-09,-0.0015477301148594871,0.00014006812125444412,0.00011796411126852036,9.308136234009723e-07,-0.0019609369337558746,-0.00014007184654474258,-0.00011796131730079651,0.002747458405792713,0.0006359582766890526,0.0005640769377350807 +17,1,16.5,9.86708736938624e-09,-0.0015477351078586202,0.00013425014913082123,0.00011301040649414062,1.1052945718681428e-06,-0.001960096415132284,-0.0001342552714049816,-0.0001130090095102787,0.002724500373005867,0.0006184643134474754,0.0005468325689435005 +17,2,17.0,8.028477438415393e-09,-0.0015477600973967448,0.00012889597564935684,0.00010859500616788864,9.277017700703993e-07,-0.001960489433258772,-0.0001288936473429203,-0.00010859174653887749,0.0027201655320823193,0.0005353703163564205,0.00046224379912018776 +18,1,17.5,7.699842763386755e-09,-0.0015477556081742207,0.00012428779155015945,0.00010465551167726517,1.036442421664674e-06,-0.00195977371186018,-0.0001242849975824356,-0.00010466109961271286,0.0026930058375000954,0.0005191462114453316,0.0004479791969060898 +18,2,18.0,7.779478172764698e-09,-0.0015477652772308585,0.00011980719864368439,0.00010108202695846558,9.591615347526172e-07,-0.001960138790309429,-0.00011981278657913208,-0.0001010717824101448,0.0026853615418076515,0.00042929593473672867,0.0003578970208764076 +19,1,18.5,1.0115823734224705e-08,-0.0015477747316547663,0.00011577177792787552,9.778235107660294e-05,1.1382919499203226e-06,-0.001959627028554678,-0.00011577224358916283,-9.777536615729332e-05,0.002648819237947464,0.0004100445657968521,0.0003434009850025177 +19,2,19.0,9.594118610678493e-09,-0.0015477738185972504,0.00011185649782419205,9.45916399359703e-05,8.908682038732962e-07,-0.0019600135274231434,-0.0001118597574532032,-9.458651766180992e-05,0.0026350892148911953,0.0003254576586186886,0.00026165833696722984 +20,1,19.5,8.744199350707582e-09,-0.0015477812550560438,0.00010816752910614014,9.154155850410461e-05,1.0807081907149296e-06,-0.001959587913006544,-0.0001081652007997036,-9.154481813311577e-05,0.0025749970227479935,0.0002942616119980812,0.00023942533880472183 +20,2,20.0,7.241793387180451e-09,-0.0015478027222764852,0.00010451860725879669,8.863583207130432e-05,9.283607647070369e-07,-0.0019599981606006622,-0.00010452233254909515,-8.862745016813278e-05,0.002547156997025013,0.00022500474005937576,0.0001754332333803177 +21,1,20.5,9.080666218963529e-09,-0.0015478099147822168,0.00010123103857040405,8.586794137954712e-05,1.0566826715852073e-06,-0.0019596004858613014,-0.00010123662650585175,-8.586607873439789e-05,0.0024467245675623417,0.0001708432100713253,0.0001354874111711979 +21,2,21.0,8.309436028142159e-09,-0.001547811782321707,9.799562394618988e-05,8.317828178405762e-05,9.359370445327642e-07,-0.0019598989747464657,-9.798770770430565e-05,-8.317967876791954e-05,0.0023957067169249058,0.0001242239959537983,9.476905688643456e-05 +22,1,21.5,8.807171658631319e-09,-0.0015478071837582907,9.528174996376038e-05,8.07885080575943e-05,1.0299947542646848e-06,-0.001959493849426508,-9.528035297989845e-05,-8.077593520283699e-05,0.0022453111596405506,3.82973812520504e-05,2.8362032026052475e-05 +22,2,22.0,7.708700941466695e-09,-0.0015478350620986127,9.280815720558167e-05,7.856637239456177e-05,9.84289633354507e-07,-0.0019597294740378857,-9.280489757657051e-05,-7.857801392674446e-05,0.0021656760945916176,1.8442049622535706e-05,1.2994743883609772e-05 +23,1,22.5,5.829010607527607e-09,-0.0015478298144738873,9.077228605747223e-05,7.675401866436005e-05,1.0561968476485717e-06,-0.0019593103788793087,-9.077740833163261e-05,-7.675448432564735e-05,0.001967994961887598,-0.00010093534365296364,-8.322251960635185e-05 +23,2,23.0,1.00678847481106e-08,-0.0015478396129139588,8.917506784200668e-05,7.518846541643143e-05,9.189075473869934e-07,-0.001959436573088169,-8.916761726140976e-05,-7.51987099647522e-05,0.0018595317378640175,-9.398628026247025e-05,-7.435213774442673e-05 +24,1,23.5,9.096645881001564e-09,-0.0015478476094394076,8.79606232047081e-05,7.397029548883438e-05,9.397743796490943e-07,-0.0019590607844293118,-8.79545696079731e-05,-7.396889850497246e-05,0.0016328254714608192,-0.00023874826729297638,-0.00019633769989013672 +24,2,24.0,8.815424390462567e-09,-0.001547844811637395,8.694268763065338e-05,7.304549217224121e-05,9.335749210359623e-07,-0.001959147397428751,-8.693570271134377e-05,-7.305433973670006e-05,0.0015028249472379684,-0.0002091461792588234,-0.00016683153808116913 diff --git a/research/fine_surface_joint_20261014/suction_collisions.csv b/research/fine_surface_joint_20261014/suction_collisions.csv new file mode 100644 index 0000000..2de48c0 --- /dev/null +++ b/research/fine_surface_joint_20261014/suction_collisions.csv @@ -0,0 +1,73 @@ +step,level,substep,max_error,max_ratio,regime,drift_m,drift_px,drift_py,ideal_defect_m,ideal_defect_px,ideal_defect_py,measured_rounding_m,measured_rounding_px,measured_rounding_py +1,fine,1,8.229037262719174e-08,0.3569820693406681,True,1.626182347536087e-05,-3.3527612686157227e-08,-1.7695128917694092e-08,-3.0010716134398763e-16,-1.214306433183765e-17,-1.734723475976807e-18,1.6261823475660978e-05,-3.352761267401416e-08,-1.7695128915959368e-08 +1,fine,2,5.173531247848473e-08,0.2677766155245442,True,-3.394670784473419e-07,1.3969838619232178e-09,1.7229467630386353e-08,-5.745404152435185e-15,-1.0408340855860843e-17,5.898059818321144e-17,-3.3946707270193777e-07,1.3969838723315586e-09,1.7229467571405754e-08 +1,coarse,1,1.1080350609260492e-08,0.10456730670501622,True,-1.5292316675186157e-06,-1.30385160446167e-08,-1.5832483768463135e-07,-4.288236432614667e-15,-5.551115123125783e-17,1.3877787807814457e-17,-1.5292316632303793e-06,-1.3038515989105548e-08,-1.5832483769850914e-07 +2,fine,1,9.892327201832529e-08,0.29769478490638285,True,9.881332516670227e-07,-3.3527612686157227e-08,-1.993030309677124e-07,-5.195496810550537e-15,-2.949029909160572e-17,2.1337098754514727e-16,9.881332568625195e-07,-3.352761265666693e-08,-1.993030311810834e-07 +2,fine,2,8.832159215099722e-08,0.3121116042355555,True,2.668239176273346e-06,-4.284083843231201e-08,1.2852251529693604e-07,-1.1539380562197721e-14,-1.457167719820518e-16,2.2898349882893854e-16,2.6682391878127265e-06,-4.284083828659524e-08,1.2852251506795254e-07 +2,coarse,1,1.6365805183271576e-08,0.1544470929589978,True,-1.426786184310913e-06,-3.0919909477233887e-07,-3.0919909477233887e-07,-6.286637876939949e-15,-8.326672684688674e-17,-8.326672684688674e-17,-1.4267861780242752e-06,-3.0919909468907214e-07,-3.0919909468907214e-07 +3,fine,1,8.23703105723439e-08,0.31152334896616624,True,4.902016371488571e-06,1.5227124094963074e-07,1.280568540096283e-07,-1.1922754450388595e-14,9.540979117872439e-17,3.452099717193846e-16,4.902016383411326e-06,1.5227124085422095e-07,1.2805685366441832e-07 +3,fine,2,1.0607572520360264e-07,0.3828123813437159,True,8.435919880867004e-06,7.35744833946228e-08,-3.259629011154175e-08,-1.7525911277793682e-14,9.540979117872439e-17,3.5561831257524545e-16,8.435919898392916e-06,7.357448329921301e-08,-3.259629046716006e-08 +3,coarse,1,1.0010523732173482e-07,0.2854567053212911,True,9.115785360336304e-06,3.3155083656311035e-07,3.203749656677246e-07,-3.837208328860697e-15,1.5334955527634975e-15,1.2420620087993939e-15,9.115785364173512e-06,3.315508350296148e-07,3.203749644256626e-07 +4,fine,1,9.437402781475868e-08,0.3632811360585352,True,1.0774470865726471e-05,2.8405338525772095e-07,3.0174851417541504e-07,-2.0582494042464816e-14,2.411265631607762e-16,2.7929047963226594e-16,1.0774470886308965e-05,2.840533850165944e-07,3.0174851389612456e-07 +4,fine,2,1.411709008580786e-07,0.4323516759917293,True,1.1160969734191895e-05,2.169981598854065e-07,5.774199962615967e-08,-1.6453852169640015e-14,-5.533767888366015e-16,-4.2847669856627135e-16,1.1160969750645747e-05,2.1699816043878328e-07,5.7742000054636367e-08 +4,coarse,1,1.2150177930436712e-07,0.37139422446265463,True,1.3064593076705933e-05,5.997717380523682e-07,5.62518835067749e-07,-1.2559397966072083e-14,-5.967448757360216e-16,-2.498001805406602e-16,1.306459308926533e-05,5.99771738649113e-07,5.625188353175492e-07 +5,fine,1,1.2376571800754022e-07,0.4335945297787668,True,1.0852236300706863e-05,-3.022141754627228e-07,-3.1618401408195496e-07,-1.5610776560315287e-14,5.377642775528102e-17,-3.625572064791527e-16,1.085223631631764e-05,-3.022141755164992e-07,-3.1618401371939775e-07 +5,fine,2,1.2417755734794866e-07,0.3644862055932074,True,8.977483958005905e-06,-2.621673047542572e-07,-7.031485438346863e-08,-1.519617764955683e-14,-1.8041124150158794e-16,8.430756093247282e-16,8.977483973202083e-06,-2.6216730457384596e-07,-7.031485522654424e-08 +5,coarse,1,1.2532259030528792e-07,0.38942307019337585,True,1.49458646774292e-05,9.723007678985596e-07,1.2628734111785889e-06,-1.6535384173010925e-14,1.5959455978986625e-16,6.175615574477433e-16,1.4945864693964583e-05,9.72300767738965e-07,1.2628734105610273e-06 +6,fine,1,9.483337493065847e-08,0.32226540864225656,True,6.834045052528381e-06,4.284083843231201e-08,-1.0244548320770264e-07,-1.4689638394571602e-14,1.1102230246251565e-16,2.914335439641036e-16,6.83404506721802e-06,4.284083832128971e-08,-1.0244548349913618e-07 +6,fine,2,1.1486422213380365e-07,0.36328113343919116,True,6.2193721532821655e-06,-4.190951585769653e-08,-1.30385160446167e-08,-1.437044927499187e-14,1.7694179454963432e-16,-1.0408340855860843e-17,6.219372167652615e-06,-4.190951603463833e-08,-1.3038516034208358e-08 +6,coarse,1,1.0239773140519048e-07,0.43028837580529966,True,1.383945345878601e-05,4.954636096954346e-07,4.284083843231201e-07,-2.0011770018868447e-14,3.191891195797325e-16,1.0269562977782698e-15,1.383945347879778e-05,4.954636093762455e-07,4.284083832961638e-07 +7,fine,1,1.1381071352012384e-07,0.39830750519457453,True,5.2102841436862946e-06,-2.0023435354232788e-08,-1.0477378964424133e-07,-1.6167622796103842e-14,9.020562075079397e-17,0.0,5.210284159853917e-06,-2.002343544443841e-08,-1.0477378964424133e-07 +7,fine,2,1.1557639800763297e-07,0.4252975630997776,True,4.476867616176605e-06,-1.2479722499847412e-07,4.0046870708465576e-08,-1.4878723253453074e-14,8.673617379884035e-18,4.388850394221322e-16,4.4768676310553285e-06,-1.2479722500714774e-07,4.004687026958054e-08 +7,coarse,1,1.0902046165828239e-07,0.38161058826685446,True,1.321360468864441e-05,9.126961231231689e-07,-2.086162567138672e-07,-2.4445723223465166e-14,-5.898059818321144e-16,-3.122502256758253e-16,1.3213604713090132e-05,9.126961237129749e-07,-2.0861625640161696e-07 +8,fine,1,1.2369974378145798e-07,0.3659033398608433,True,4.209578037261963e-06,-1.2479722499847412e-07,-2.421438694000244e-08,-1.5269036035547856e-14,-1.4224732503009818e-16,-7.28583859910259e-17,4.209578052530999e-06,-1.247972248562268e-07,-2.4214386867144055e-08 +8,fine,2,1.3039186863572638e-07,0.3566417233064843,True,4.0014274418354034e-06,5.075708031654358e-08,-1.6298145055770874e-08,-1.6002824065886045e-14,-2.949029909160572e-17,-2.5153490401663703e-16,4.0014274578382275e-06,5.075708034603388e-08,-1.629814480423597e-08 +8,coarse,1,1.265961931951054e-07,0.38341345468786764,True,9.08784568309784e-06,6.09084963798523e-07,-5.979090929031372e-07,-2.2336299476677368e-14,-1.4224732503009818e-15,2.0816681711721685e-17,9.087845705434139e-06,6.090849652209962e-07,-5.979090929239539e-07 +9,fine,1,1.1700286717264419e-07,0.42325024900493485,True,2.2551976144313812e-06,-1.150183379650116e-07,-3.026798367500305e-08,-1.5406079190150024e-14,6.418476861114186e-17,2.6194324487249787e-16,2.2551976298374604e-06,-1.1501833802919637e-07,-3.0267983936946297e-08 +9,fine,2,1.05960657470483e-07,0.3591277749177671,True,3.159046173095703e-06,-5.8673322200775146e-08,-1.471489667892456e-07,-1.5987211554602254e-14,-6.245004513516506e-17,-2.0816681711721685e-17,3.1590461890829147e-06,-5.86733221383251e-08,-1.4714896676842892e-07 +9,coarse,1,1.1063907701114317e-07,0.4156431955412631,True,5.3513795137405396e-06,-3.1478703022003174e-07,-5.345791578292847e-07,-2.5042468099201187e-14,1.0408340855860843e-16,-2.2898349882893854e-16,5.351379538783008e-06,-3.1478703032411515e-07,-5.345791576003012e-07 +10,fine,1,1.6477090769573266e-07,0.3991506368171169,True,2.605374902486801e-06,1.2619420886039734e-07,6.007030606269836e-08,-1.5024440025435126e-14,-3.2786273695961654e-16,-2.8622937353617317e-16,2.605374917511241e-06,1.2619420918826008e-07,6.007030634892774e-08 +10,fine,2,1.233670676725751e-07,0.3467327260376902,True,2.4153850972652435e-06,-1.5133991837501526e-07,-1.19674950838089e-07,-1.5607307113363333e-14,-1.9949319973733282e-16,4.631711680858075e-16,2.4153851128725506e-06,-1.5133991817552206e-07,-1.1967495130126016e-07 +10,coarse,1,1.3984166169489498e-07,0.4038458162128909,True,6.22868537902832e-06,-2.942979335784912e-07,3.725290298461914e-09,-2.3592239273284576e-14,-4.163336342344337e-16,1.1657341758564144e-15,6.22868540262056e-06,-2.942979331621576e-07,3.725289132727738e-09 +11,fine,1,1.1264907540109448e-07,0.37435057774799535,True,1.6032718122005463e-06,4.190951585769653e-09,2.9336661100387573e-08,-1.5607307113363333e-14,2.723515857283587e-16,-1.0234868508263162e-16,1.6032718278078534e-06,4.190951313418068e-09,2.9336661202736258e-08 +11,fine,2,1.3385929209519531e-07,0.4296446436631812,True,1.1781230568885803e-06,2.3469328880310059e-07,1.126900315284729e-07,-1.665854953980528e-14,2.0296264668928643e-16,3.2959746043559335e-17,1.1781230735471299e-06,2.3469328860013794e-07,1.1269003149551315e-07 +11,coarse,1,1.2484760447684096e-07,0.3737977990108256,True,1.9688159227371216e-06,-6.146728992462158e-08,-2.421438694000244e-08,-2.295386103412511e-14,-1.5265566588595902e-16,-9.575673587391975e-16,1.9688159456909826e-06,-6.146728977196592e-08,-2.4214385982435083e-08 +12,fine,1,1.1342225503252479e-07,0.3929712248585018,True,2.9103830456733704e-06,1.1827796697616577e-07,1.6670674085617065e-07,-1.6981208106336965e-14,2.5153490401663703e-16,1.0234868508263162e-16,2.9103830626545785e-06,1.1827796672463087e-07,1.6670674075382197e-07 +12,fine,2,1.2337913590787508e-07,0.3632480304781915,True,2.22865492105484e-06,7.450580596923828e-09,1.3690441846847534e-07,-1.7019372022808454e-14,-1.9081958235744878e-17,1.6479873021779667e-16,2.228654938074212e-06,7.450580616005786e-09,1.369044183036766e-07 +12,coarse,1,1.0392955884785948e-07,0.34435036745116887,True,4.416331648826599e-06,8.009374141693115e-08,-7.264316082000732e-08,-2.665923037881157e-14,1.942890293094024e-16,3.3306690738754696e-16,4.4163316754858295e-06,8.009374122264212e-08,-7.264316115307423e-08 +13,fine,1,1.120637568297056e-07,0.3794727716066827,True,1.1702068150043488e-06,-1.4016404747962952e-07,-1.0477378964424133e-07,-1.6571813366006438e-14,8.153200337090993e-17,-1.0928757898653885e-16,1.1702068315761621e-06,-1.4016404756116152e-07,-1.0477378953495375e-07 +13,fine,2,1.1608141914365433e-07,0.3684207409368108,True,1.93621963262558e-06,-2.1979212760925293e-07,-7.543712854385376e-08,-1.696733031852915e-14,1.5612511283791264e-17,4.0072112295064244e-16,1.93621964959291e-06,-2.1979212762486544e-07,-7.543712894457488e-08 +13,coarse,1,1.1553440504297185e-07,0.413461159221051,True,2.12155282497406e-06,9.872019290924072e-08,3.1851232051849365e-07,-2.4966140266258208e-14,1.0685896612017132e-15,3.885780586188048e-16,2.1215528499402003e-06,9.872019184065106e-08,3.185123201299156e-07 +14,fine,1,1.3012184874039434e-07,0.4470057319678252,True,2.093147486448288e-06,-2.7474015951156616e-08,1.816079020500183e-08,-1.6941309466389498e-14,2.0469737016526324e-16,-2.393918396847994e-16,2.0931475033895974e-06,-2.7474016155853986e-08,1.816079044439367e-08 +14,fine,2,1.161938236737825e-07,0.43455223301865037,True,2.180226147174835e-06,1.6577541828155518e-07,3.166496753692627e-08,-1.662038562333379e-14,-3.139849491518021e-16,-5.724587470723463e-17,2.180226163795221e-06,1.6577541859554012e-07,3.1664967594172144e-08 +14,coarse,1,1.171716388359556e-07,0.34014613609932465,True,3.285706043243408e-06,5.21540641784668e-08,-8.940696716308594e-08,-2.5222879340702775e-14,2.0122792321330962e-16,-3.95516952522712e-16,3.2857060684662875e-06,5.2154063977238874e-08,-8.940696676756898e-08 +15,fine,1,1.188765739179587e-07,0.3778719310571328,True,2.386048436164856e-06,1.0989606380462646e-07,4.190951585769653e-08,-1.6297727056802103e-14,3.0010716134398763e-16,5.0306980803327406e-17,2.386048452462583e-06,1.098960635045193e-07,4.190951580738955e-08 +15,fine,2,1.2815464434101642e-07,0.3887039950605819,True,2.2151507437229156e-06,5.3551048040390015e-08,1.5599653124809265e-07,-1.6632528687665626e-14,-3.469446951953614e-17,-2.220446049250313e-16,2.2151507603554443e-06,5.3551048075084484e-08,1.5599653147013726e-07 +15,coarse,1,1.132467172260121e-07,0.3798076391349909,True,4.431232810020447e-06,-6.891787052154541e-08,-4.6566128730773926e-08,-2.4917568008930857e-14,5.898059818321144e-16,7.008282842946301e-16,4.431232834938015e-06,-6.891787111135139e-08,-4.656612943160221e-08 +16,fine,1,1.1449205894464853e-07,0.4232816528057199,True,1.267995685338974e-06,7.962808012962341e-08,8.89413058757782e-08,-1.7224069392973718e-14,1.9255430583342559e-16,2.3071822230491534e-16,1.2679957025630434e-06,7.962807993706911e-08,8.894130564505998e-08 +16,fine,2,1.1465035798519096e-07,0.38660659294745114,True,1.61072239279747e-06,2.0070001482963562e-07,8.242204785346985e-08,-1.688579831515824e-14,2.0816681711721685e-16,-3.95516952522712e-16,1.6107224096832684e-06,2.007000146214688e-07,8.24220482489868e-08 +16,coarse,1,1.026492656430733e-07,0.39551928594354874,True,4.755333065986633e-06,2.8870999813079834e-07,-1.30385160446167e-08,-2.5340840537069198e-14,8.465450562766819e-16,-1.4988010832439613e-15,4.755333091327474e-06,2.887099972842533e-07,-1.3038514545815616e-08 +17,fine,1,1.4306400941688224e-07,0.3804206132029011,True,2.477318048477173e-06,2.952292561531067e-07,2.1420419216156006e-07,-1.6018436577169837e-14,1.1102230246251565e-16,-2.498001805406602e-16,2.4773180644956094e-06,2.952292560420844e-07,2.1420419241136024e-07 +17,fine,2,1.206053866775747e-07,0.40931703720753354,True,2.6957131922245026e-06,3.655441105365753e-07,1.7834827303886414e-07,-1.704365815147213e-14,3.382710778154774e-16,-1.43982048506075e-16,2.6957132092681607e-06,3.6554411019830424e-07,1.7834827318284618e-07 +17,coarse,1,1.3320810943184824e-07,0.4098554436464823,True,4.893168807029724e-06,2.3655593395233154e-07,3.632158041000366e-07,-2.93723378952393e-14,-4.649058915617843e-16,4.2327252813834093e-16,4.893168836402062e-06,2.3655593441723743e-07,3.632158036767641e-07 +18,fine,1,1.1518374609664761e-07,0.37525164303996766,True,3.0049122869968414e-06,2.92900949716568e-07,2.4633482098579407e-07,-1.704365815147213e-14,-1.474514954580286e-16,5.724587470723463e-17,3.0049123040404996e-06,2.929009498640195e-07,2.463348209285482e-07 +18,fine,2,1.5383020013359783e-07,0.4339170567027524,True,2.28220596909523e-06,3.2549723982810974e-07,2.48197466135025e-07,-1.700029006457271e-14,-1.214306433183765e-16,-3.122502256758253e-16,2.28220598609552e-06,3.254972399495404e-07,2.4819746644727525e-07 +18,coarse,1,1.4574858631100085e-07,0.42004802685791165,True,4.898756742477417e-06,-1.564621925354004e-07,-2.123415470123291e-07,-2.679106936298581e-14,1.457167719820518e-16,-4.85722573273506e-17,4.898756769268486e-06,-1.5646219268111716e-07,-2.1234154696375684e-07 +19,fine,1,1.1289196333308382e-07,0.4426868958150174,True,2.4051405489444733e-06,3.8230791687965393e-07,4.23286110162735e-07,-1.7246620798161416e-14,-5.447031714567174e-16,-2.42861286636753e-16,2.405140566191094e-06,3.823079174243571e-07,4.2328611040559627e-07 +19,fine,2,1.3318459290978524e-07,0.4458767766498759,True,2.4051405489444733e-06,-1.3504177331924438e-08,-1.6298145055770874e-08,-1.6679366221517e-14,-1.8561541192951836e-16,4.683753385137379e-17,2.4051405656238395e-06,-1.3504177146309027e-08,-1.6298145102608408e-08 +19,coarse,1,1.3627775263813646e-07,0.37598585924709055,True,6.38328492641449e-06,-2.514570951461792e-07,2.1792948246002197e-07,-2.724209746673978e-14,-7.91033905045424e-16,-1.3877787807814457e-17,6.383284953656587e-06,-2.514570943551453e-07,2.1792948247389976e-07 +20,fine,1,1.2067538701643343e-07,0.397654453667931,True,3.3676624298095703e-06,-7.636845111846924e-08,8.195638656616211e-08,-1.6471199404399783e-14,1.0581813203458523e-16,7.806255641895632e-17,3.3676624462807697e-06,-7.636845122428737e-08,8.195638648809955e-08 +20,fine,2,1.1349498318935503e-07,0.4276325956343959,True,3.5767443478107452e-06,-7.869675755500793e-08,6.565824151039124e-08,-1.5959455978986625e-14,9.020562075079397e-17,5.898059818321144e-17,3.5767443637702012e-06,-7.869675764521356e-08,6.565824145141064e-08 +20,coarse,1,1.5850306378517587e-07,0.5285112236646456,True,3.5408884286880493e-06,-1.993030309677124e-07,-3.7066638469696045e-07,-2.525757381022231e-14,7.91033905045424e-16,-2.3592239273284576e-16,3.540888453945623e-06,-1.993030317587463e-07,-3.7066638446103806e-07 +21,fine,1,1.2747028055315468e-07,0.3807671146447972,True,3.180466592311859e-06,-9.872019290924072e-08,-4.377216100692749e-08,-1.619537837171947e-14,5.204170427930421e-17,-1.4224732503009818e-16,3.1804666085072375e-06,-9.872019296128243e-08,-4.3772160864680165e-08 +21,fine,2,1.1436689684174439e-07,0.41457208617159613,True,2.8158538043498993e-06,-4.516914486885071e-08,3.119930624961853e-08,-1.622833811776303e-14,-2.0296264668928643e-16,-1.7867651802561113e-16,2.8158538205782374e-06,-4.516914466588806e-08,3.119930642829505e-08 +21,coarse,1,1.3219836714206679e-07,0.4111722561110483,True,5.48921525478363e-06,-9.816139936447144e-07,-5.345791578292847e-07,-2.7602919949742954e-14,4.0245584642661925e-16,2.7755575615628914e-16,5.48921528238655e-06,-9.816139940471702e-07,-5.345791581068404e-07 +22,fine,1,1.247986221031283e-07,0.4025936491208882,True,2.5955960154533386e-06,-1.1734664440155029e-07,7.636845111846924e-08,-1.670712179713263e-14,2.0643209364124004e-16,-1.196959198423997e-16,2.5955960321604604e-06,-1.1734664460798239e-07,7.636845123816516e-08 +22,fine,2,1.2467687349193568e-07,0.4026463456064581,True,2.169981598854065e-06,-2.0023435354232788e-07,-2.5331974029541016e-07,-1.5954251808558695e-14,4.336808689942018e-17,8.847089727481716e-17,2.1699816148083167e-06,-2.0023435358569597e-07,-2.5331974038388105e-07 +22,coarse,1,1.303169513411362e-07,0.4534581358023719,True,4.8317015171051025e-06,-1.4826655387878418e-06,-8.456408977508545e-07,-2.6728619317850644e-14,-9.71445146547012e-17,-4.163336342344337e-16,4.831701543833722e-06,-1.4826655386906973e-06,-8.456408973345209e-07 +23,fine,1,1.1580148451262318e-07,0.3892248238329876,True,2.83215194940567e-06,-4.284083843231201e-08,-1.3317912817001343e-07,-1.7317744460676465e-14,2.2551405187698492e-17,-3.9898639947466563e-17,2.8321519667234146e-06,-4.284083845486342e-08,-1.331791281301148e-07 +23,fine,2,1.4772394407724931e-07,0.44883956143532583,True,2.432148903608322e-06,-1.0570511221885681e-07,-3.306195139884949e-08,-1.628211454551831e-14,4.85722573273506e-17,1.1796119636642288e-16,2.4321489198904367e-06,-1.0570511226742907e-07,-3.3061951516810684e-08 +23,coarse,1,1.4415727089822639e-07,0.46236304392819116,True,8.864328265190125e-06,-8.624047040939331e-07,-5.19677996635437e-07,-2.839395385478838e-14,-3.7470027081099033e-16,-1.0269562977782698e-15,8.864328293584078e-06,-8.624047037192328e-07,-5.196779956084807e-07 +24,fine,1,1.1816075007331506e-07,0.40334771123509106,True,2.196524292230606e-06,-5.2619725465774536e-08,-1.327134668827057e-07,-1.619537837171947e-14,3.400058012914542e-16,7.979727989493313e-17,2.1965243084259845e-06,-5.261972580578034e-08,-1.3271346696250297e-07 +24,fine,2,1.2605529897680157e-07,0.4651221485857391,True,2.941582351922989e-06,-2.2584572434425354e-07,6.05359673500061e-09,-1.802204219192305e-14,-2.5153490401663703e-16,2.3418766925686896e-16,2.941582369945031e-06,-2.2584572409271864e-07,6.053596500812941e-09 +24,coarse,1,1.573361411155716e-07,0.43294013951653565,True,9.939074516296387e-06,-2.905726432800293e-07,1.4156103134155273e-07,-2.768618667658984e-14,-1.6653345369377348e-16,1.1102230246251565e-15,9.939074543982573e-06,-2.9057264311349584e-07,1.415610302313297e-07 diff --git a/research/fine_surface_joint_20261014/suction_ledger.csv b/research/fine_surface_joint_20261014/suction_ledger.csv new file mode 100644 index 0000000..92cf1f4 --- /dev/null +++ b/research/fine_surface_joint_20261014/suction_ledger.csv @@ -0,0 +1,25 @@ +step,time,average_bound_ratio,leaf_m,leaf_px,leaf_py,delta_m,delta_px,delta_py,boundary_m,boundary_px,boundary_py,fine_transfer_m,fine_transfer_px,fine_transfer_py,coarse_transfer_m,coarse_transfer_px,coarse_transfer_py,raw_m,raw_px,raw_py,collision_drift_m,collision_drift_px,collision_drift_py,average_rounding_m,average_rounding_px,average_rounding_py,closure_m,closure_px,closure_py,cumulative_raw_m,cumulative_raw_px,cumulative_raw_py,cumulative_closure_m,cumulative_closure_px,cumulative_closure_py +1,1,0.28124994289828603,560.7465738453902,-0.0016551441513001919,-0.001416988205164671,-0.003430332522839308,-0.0016551441513001919,-0.001416988205164671,-0.0034449007362127304,-0.0016550971195101738,-0.001416652463376522,-3.557652235031128e-07,0.0,0.0,5.308538675308228e-07,-1.862645149230957e-09,-1.7695128917694092e-07,1.4393124729394913e-05,-4.516914486885071e-08,-1.587904989719391e-07,1.4393124729394913e-05,-4.516914486885071e-08,-1.587904989719391e-07,1.7508864402770996e-07,-1.862645149230957e-09,-1.7695128917694092e-07,0.0,0.0,0.0,1.4393124729394913e-05,-4.516914486885071e-08,-1.587904989719391e-07,0.0,0.0,0.0 +2,2,0.37499987985940486,560.7428558217362,-0.003098900429904461,-0.0026293257251381874,-0.003718023654073477,-0.001443756278604269,-0.0012123375199735165,-0.0037200921215116978,-0.0014432151801884174,-0.001211958471685648,-2.193264663219452e-06,-4.6566128730773926e-09,-1.685693860054016e-07,2.032145857810974e-06,-1.5087425708770752e-07,1.695007085800171e-07,2.2295862436294556e-06,-3.855675458908081e-07,-3.7997961044311523e-07,2.2295862436294556e-06,-3.855675458908081e-07,-3.7997961044311523e-07,-1.6111880540847778e-07,-1.555308699607849e-07,9.313225746154785e-10,0.0,0.0,0.0,1.6622710973024368e-05,-4.307366907596588e-07,-5.387701094150543e-07,0.0,0.0,0.0 +3,3,0.2812499146093721,560.739008476492,-0.004490140359848738,-0.0038015726022422314,-0.003847345244139433,-0.0013912399299442768,-0.001172246877104044,-0.0038698003627359867,-0.0013918033801019192,-0.001172670628875494,-3.6400742828845978e-06,4.698522388935089e-07,4.6798959374427795e-07,3.641471266746521e-06,-4.637986421585083e-07,-4.600733518600464e-07,2.245372161269188e-05,5.573965609073639e-07,4.1583552956581116e-07,2.245372161269188e-05,5.573965609073639e-07,4.1583552956581116e-07,1.3969838619232178e-09,6.05359673500061e-09,7.916241884231567e-09,0.0,0.0,0.0,3.907643258571625e-05,1.2665987014770508e-07,-1.2293457984924316e-07,0.0,0.0,0.0 +4,4,0.37499987985940486,560.7351214168593,-0.005752546712756157,-0.004868627525866032,-0.0038870596326887608,-0.0012624063529074192,-0.0010670549236238003,-0.003921949304640293,-0.0012635616585612297,-0.001068035140633583,-6.910879164934158e-06,3.1711533665657043e-07,3.9534643292427063e-07,6.800517439842224e-06,-2.6263296604156494e-07,-3.371387720108032e-07,3.50000336766243e-05,1.1008232831954956e-06,9.220093488693237e-07,3.50000336766243e-05,1.1008232831954956e-06,9.220093488693237e-07,-1.103617250919342e-07,5.448237061500549e-08,5.820766091346741e-08,0.0,0.0,0.0,7.407646626234055e-05,1.2274831533432007e-06,7.990747690200806e-07,0.0,0.0,0.0 +5,5,0.3749998295680158,560.7312193890102,-0.006873782258480787,-0.0058157010935246944,-0.0039020278491079807,-0.0011212355457246304,-0.0009470735676586628,-0.003936932887881994,-0.001121701207011938,-0.0009480114094913006,-7.287599146366119e-06,1.0672956705093384e-06,4.637986421585083e-07,7.417052984237671e-06,-1.0095536708831787e-06,-4.023313522338867e-07,3.477558493614197e-05,4.079192876815796e-07,8.763745427131653e-07,3.477558493614197e-05,4.079192876815796e-07,8.763745427131653e-07,1.2945383787155151e-07,5.774199962615967e-08,6.146728992462158e-08,0.0,0.0,0.0,0.00010885205119848251,1.6354024410247803e-06,1.6754493117332458e-06,0.0,0.0,0.0 +6,6,0.46874973195382685,560.7273077829741,-0.007863933686167002,-0.0066518173553049564,-0.003911606036126614,-0.0009901514276862144,-0.000836116261780262,-0.003938451875001192,-0.0009906026534736156,-0.0008363532833755016,-4.966277629137039e-06,1.1599622666835785e-06,1.234002411365509e-07,4.9192458391189575e-06,-1.2051314115524292e-06,-1.993030309677124e-07,2.6892870664596558e-05,4.9639493227005e-07,3.129243850708008e-07,2.6892870664596558e-05,4.9639493227005e-07,3.129243850708008e-07,-4.7031790018081665e-08,-4.516914486885071e-08,-7.59027898311615e-08,0.0,0.0,0.0,0.00013574492186307907,2.1317973732948303e-06,1.9883736968040466e-06,0.0,0.0,0.0 +7,7,0.4687521208060999,560.7233943245374,-0.008734654169529676,-0.0073870024643838406,-0.003913458436727524,-0.0008707204833626747,-0.0007351851090788841,-0.003936384338885546,-0.0008714343421161175,-0.0007349248044192791,1.7766840755939484e-05,1.440197229385376e-05,7.420778274536133e-06,-1.7741695046424866e-05,-1.4455989003181458e-05,-7.407739758491516e-06,2.290075644850731e-05,7.67875462770462e-07,-2.7334317564964294e-07,2.290075644850731e-05,7.67875462770462e-07,-2.7334317564964294e-07,2.514570951461792e-08,-5.4016709327697754e-08,1.30385160446167e-08,0.0,0.0,0.0,0.00015864567831158638,2.8996728360652924e-06,1.7150305211544037e-06,0.0,0.0,0.0 +8,8,0.4687808518052075,560.7194780893624,-0.009498408995568752,-0.008031456731259823,-0.00391623517498374,-0.0007637548260390759,-0.0006444542668759823,-0.003933582454919815,-0.0007642609998583794,-0.0006437832489609718,0.00016007013618946075,8.850079029798508e-05,5.473848432302475e-05,-0.00016002170741558075,-8.852966129779816e-05,-5.477108061313629e-05,1.7298851162195206e-05,5.350448191165924e-07,-6.384216248989105e-07,1.7298851162195206e-05,5.350448191165924e-07,-6.384216248989105e-07,4.842877388000488e-08,-2.8870999813079834e-08,-3.259629011154175e-08,0.0,0.0,0.0,0.00017594452947378159,3.4347176551818848e-06,1.0766088962554932e-06,0.0,0.0,0.0 +9,9,0.46888398548910104,560.7155580227263,-0.010167959611862898,-0.008595113176852465,-0.003920066636055708,-0.0006695506162941456,-0.0005636564455926418,-0.003930842503905296,-0.0006690975278615952,-0.0005629975348711014,0.0006066383793950081,0.0002762451767921448,0.00018928851932287216,-0.0006066281348466873,-0.0002762097865343094,-0.00018923543393611908,1.0765623301267624e-05,-4.884786903858185e-07,-7.119961082935333e-07,1.0765623301267624e-05,-4.884786903858185e-07,-7.119961082935333e-07,1.0244548320770264e-08,3.5390257835388184e-08,5.3085386753082275e-08,0.0,0.0,0.0,0.0001867101527750492,2.9462389647960663e-06,3.6461278796195984e-07,0.0,0.0,0.0 +10,10,0.46903176896324594,560.7116407523863,-0.01075396640226245,-0.009087595622986555,-0.003917270340025425,-0.0005860067903995514,-0.0004924824461340904,-0.0039285351522266865,-0.0005857185460627079,-0.0004924158565700054,0.001471752766519785,0.0005768421106040478,0.0004282691515982151,-0.0014717373996973038,-0.0005768109112977982,-0.0004282798618078232,1.1249445378780365e-05,-3.1944364309310913e-07,-5.587935447692871e-08,1.1249445378780365e-05,-3.1944364309310913e-07,-5.587935447692871e-08,1.5366822481155396e-08,3.119930624961853e-08,-1.0710209608078003e-08,0.0,0.0,0.0,0.00019795959815382957,2.626795321702957e-06,3.0873343348503113e-07,0.0,0.0,0.0 +11,11,0.4691126134417028,560.7077189418487,-0.011267102789133787,-0.009519137907773256,-0.003921810537576675,-0.0005131363868713379,-0.0004315422847867012,-0.003926586825400591,-0.0005133007653057575,-0.0004316861741244793,0.0026394762098789215,0.0009217467159032822,0.0007308274507522583,-0.0026394501328468323,-0.0009217597544193268,-0.0007308013737201691,4.750210791826248e-06,1.7741695046424866e-07,1.1781230568885803e-07,4.750210791826248e-06,1.7741695046424866e-07,1.1781230568885803e-07,2.60770320892334e-08,-1.30385160446167e-08,2.60770320892334e-08,0.0,0.0,0.0,0.00020270980894565582,2.804212272167206e-06,4.2654573917388916e-07,0.0,0.0,0.0 +12,12,0.46901560970475215,560.7038032673299,-0.011718058958649635,-0.009898302145302296,-0.003915674518793821,-0.00045095616951584816,-0.0003791642375290394,-0.0039251805283129215,-0.00045116664841771126,-0.00037938589230179787,0.003811669535934925,0.0012245913967490196,0.0010236278176307678,-0.0038117188960313797,-0.0012245867401361465,-0.001023637130856514,9.55536961555481e-06,2.0582228899002075e-07,2.3096799850463867e-07,9.55536961555481e-06,2.0582228899002075e-07,2.3096799850463867e-07,-4.936009645462036e-08,4.6566128730773926e-09,-9.313225746154785e-09,0.0,0.0,0.0,0.00021226517856121063,3.0100345611572266e-06,6.575137376785278e-07,0.0,0.0,0.0 +13,13,0.46940153309401067,560.6998843806796,-0.012116494122892618,-0.010233358014374971,-0.00391888665035367,-0.00039843516424298286,-0.0003350558690726757,-0.003924091346561909,-0.00039816368371248245,-0.00033517926931381226,0.004714041016995907,0.0014252373948693275,0.0012384280562400818,-0.004714064300060272,-0.0014252476394176483,-0.0012384429574012756,5.227979272603989e-06,-2.612359821796417e-07,1.3830140233039856e-07,5.227979272603989e-06,-2.612359821796417e-07,1.3830140233039856e-07,-2.3283064365386963e-08,-1.0244548320770264e-08,-1.4901161193847656e-08,0.0,0.0,0.0,0.00021749315783381462,2.748798578977585e-06,7.958151400089264e-07,0.0,0.0,0.0 +14,14,0.37547977019595935,560.695968686603,-0.012470003217458725,-0.010531187988817692,-0.003915694076567888,-0.0003535090945661068,-0.0002978299744427204,-0.00392324011772871,-0.0003537451848387718,-0.00029775500297546387,0.005242751911282539,0.0015017995610833168,0.0013365093618631363,-0.005242764949798584,-0.0015017539262771606,-0.0013365447521209717,7.559079676866531e-06,1.9045546650886536e-07,-3.958120942115784e-08,7.559079676866531e-06,1.9045546650886536e-07,-3.958120942115784e-08,-1.30385160446167e-08,4.563480615615845e-08,-3.5390257835388184e-08,0.0,0.0,0.0,0.00022505223751068115,2.93925404548645e-06,7.562339305877686e-07,0.0,0.0,0.0 +15,15,0.46931915536962354,560.6920553292148,-0.012786881532520056,-0.010797811206430197,-0.003913357388228178,-0.0003168783150613308,-0.00026662321761250496,-0.003922352101653814,-0.00031696120277047157,-0.0002668178640305996,0.005457909312099218,0.0014622039161622524,0.0013122227974236012,-0.00545794703066349,-0.0014622155576944351,-0.0013121794909238815,9.032431989908218e-06,9.452924132347107e-08,1.5133991837501526e-07,9.032431989908218e-06,9.452924132347107e-08,1.5133991837501526e-07,-3.771856427192688e-08,-1.1641532182693481e-08,4.330649971961975e-08,0.0,0.0,0.0,0.00023408466950058937,3.0337832868099213e-06,9.075738489627838e-07,0.0,0.0,0.0 +16,16,0.4688354158197654,560.6881414898671,-0.013073210138827562,-0.011039237957447767,-0.0039138393476605415,-0.00028632860630750656,-0.0002414267510175705,-0.00392143102362752,-0.00028690462931990623,-0.0002415659837424755,0.005488332826644182,0.0013348772190511227,0.0011904998682439327,-0.005488375201821327,-0.001334870234131813,-0.0011905189603567123,7.634051144123077e-06,5.690380930900574e-07,1.5832483768463135e-07,7.634051144123077e-06,5.690380930900574e-07,1.5832483768463135e-07,-4.237517714500427e-08,6.984919309616089e-09,-1.909211277961731e-08,0.0,0.0,0.0,0.00024171872064471245,3.6028213798999786e-06,1.0658986866474152e-06,0.0,0.0,0.0 +17,17,0.4688642199257324,560.6842309772037,-0.013335466850548983,-0.011260137427598238,-0.003910512663424015,-0.0002622567117214203,-0.00022089947015047073,-0.003920585848391056,-0.0002631489187479019,-0.0002216007560491562,0.005444665905088186,0.001153834629803896,0.0010090763680636883,-0.005444658920168877,-0.0011538397520780563,-0.0010091308504343033,1.00662000477314e-05,8.973293006420135e-07,7.557682693004608e-07,1.00662000477314e-05,8.973293006420135e-07,7.557682693004608e-07,6.984919309616089e-09,-5.122274160385132e-09,-5.448237061500549e-08,0.0,0.0,0.0,0.00025178492069244385,4.500150680541992e-06,1.821666955947876e-06,0.0,0.0,0.0 +18,18,0.46904972325243455,560.6803212598898,-0.013579126913100481,-0.01146557042375207,-0.003909717313945293,-0.0002436600625514984,-0.00020543299615383148,-0.003919912502169609,-0.0002440977841615677,-0.00020573288202285767,0.005378367379307747,0.0009484421461820602,0.0008058762177824974,-0.005378358066082001,-0.0009484663605690002,-0.0008058585226535797,1.0185874998569489e-05,4.6193599700927734e-07,2.8219074010849e-07,1.0185874998569489e-05,4.6193599700927734e-07,2.8219074010849e-07,9.313225746154785e-09,-2.421438694000244e-08,1.7695128917694092e-08,0.0,0.0,0.0,0.00026197079569101334,4.9620866775512695e-06,2.103857696056366e-06,0.0,0.0,0.0 +19,19,0.4690241690953882,560.6764128012583,-0.013806662522256374,-0.01165736373513937,-0.003908458631485701,-0.00022753560915589333,-0.0001917933113873005,-0.003919640555977821,-0.00022763200104236603,-0.00019236188381910324,0.005283908452838659,0.0007355022244155407,0.0006050593219697475,-0.005283920094370842,-0.0007355231791734695,-0.0006051156669855118,1.1193566024303436e-05,1.1734664440155029e-07,6.249174475669861e-07,1.1193566024303436e-05,1.1734664440155029e-07,6.249174475669861e-07,-1.1641532182693481e-08,-2.0954757928848267e-08,-5.634501576423645e-08,0.0,0.0,0.0,0.00027316436171531677,5.07943332195282e-06,2.728775143623352e-06,0.0,0.0,0.0 +20,20,0.4691149902535097,560.6725037032738,-0.014019680209457874,-0.01183774508535862,-0.003909097984433174,-0.00021301768720149994,-0.00018038135021924973,-0.003919586073607206,-0.00021268753334879875,-0.00018017226830124855,0.0051221540197730064,0.000519266352057457,0.0004148585721850395,-0.005122151225805283,-0.000519242137670517,-0.0004148446023464203,1.0485295206308365e-05,-3.543682396411896e-07,-2.230517566204071e-07,1.0485295206308365e-05,-3.543682396411896e-07,-2.230517566204071e-07,2.7939677238464355e-09,2.421438694000244e-08,1.3969838619232178e-08,0.0,0.0,0.0,0.00028364965692162514,4.72506508231163e-06,2.505723387002945e-06,0.0,0.0,0.0 +21,21,0.46903467995095127,560.6685956828296,-0.01421999093145132,-0.01200737152248621,-0.003908020444214344,-0.00020031072199344635,-0.00016962643712759018,-0.003919499460607767,-0.0001992243342101574,-0.00016904575750231743,0.0048424312844872475,0.0002950672060251236,0.00023025646805763245,-0.00484243780374527,-0.00029502809047698975,-0.0002302899956703186,1.1485535651445389e-05,-1.1255033314228058e-06,-5.471520125865936e-07,1.1485535651445389e-05,-1.1255033314228058e-06,-5.471520125865936e-07,-6.51925802230835e-09,3.91155481338501e-08,-3.3527612686157227e-08,0.0,0.0,0.0,0.0002951351925730705,3.5995617508888245e-06,1.9585713744163513e-06,0.0,0.0,0.0 +22,22,0.4690269226422474,560.6646860563196,-0.014409893658012152,-0.01216775132343173,-0.003909626509994268,-0.00018990272656083107,-0.0001603798009455204,-0.003919223323464394,-0.00018808525055646896,-0.00015935394912958145,0.004410987254232168,5.6739430874586105e-05,4.135677590966225e-05,-0.0044109877198934555,-5.675666034221649e-05,-4.13600355386734e-05,9.597279131412506e-06,-1.80024653673172e-06,-1.0225921869277954e-06,9.597279131412506e-06,-1.80024653673172e-06,-1.0225921869277954e-06,-4.656612873077393e-10,-1.7229467630386353e-08,-3.259629011154175e-09,0.0,0.0,0.0,0.00030473247170448303,1.7993152141571045e-06,9.359791874885559e-07,0.0,0.0,0.0 +23,23,0.46895167590501197,560.6607814244926,-0.014590884558856487,-0.012320364825427532,-0.0039046318270266056,-0.00018099090084433556,-0.00015261350199580193,-0.003918746951967478,-0.00017994502559304237,-0.00015195319429039955,0.0038275266997516155,-0.00019492162391543388,-0.00015757465735077858,-0.0038275402039289474,0.0001948866993188858,0.0001576002687215805,1.4128629118204117e-05,-1.010950654745102e-06,-6.859190762042999e-07,1.4128629118204117e-05,-1.010950654745102e-06,-6.859190762042999e-07,-1.3504177331924438e-08,-3.4924596548080444e-08,2.561137080192566e-08,0.0,0.0,0.0,0.00031886110082268715,7.883645594120026e-07,2.50060111284256e-07,0.0,0.0,0.0 +24,24,0.46890732263511536,560.6568783186376,-0.014766339212656021,-0.012467360123991966,-0.003903105854988098,-0.00017545465379953384,-0.00014699529856443405,-0.003918208181858063,-0.00017489027231931686,-0.00014702323824167252,0.0031356504186987877,-0.0004478944465517998,-0.00036316923797130585,-0.003135625272989273,0.00044789910316467285,0.00036318227648735046,1.5077181160449982e-05,-5.690380930900574e-07,1.4901161193847656e-08,1.5077181160449982e-05,-5.690380930900574e-07,1.4901161193847656e-08,2.514570951461792e-08,4.6566128730773926e-09,1.30385160446167e-08,0.0,0.0,0.0,0.00033393828198313713,2.193264663219452e-07,2.6496127247810364e-07,0.0,0.0,0.0 diff --git a/research/fine_surface_joint_20261014/suction_propagation.csv b/research/fine_surface_joint_20261014/suction_propagation.csv new file mode 100644 index 0000000..f017bcc --- /dev/null +++ b/research/fine_surface_joint_20261014/suction_propagation.csv @@ -0,0 +1,97 @@ +metric,time,signal,baseline,absolute,any_crossed,peak_crossed,x,y,q +coarse_interface_u,1,0.0,0.0,0.0,False,False,3.5,3.5, +coarse_interface_u,2,0.0,2.63417801721126e-09,2.63417801721126e-09,False,False,3.5,3.5, +coarse_interface_u,3,0.0,2.63417801721126e-09,2.63417801721126e-09,False,False,3.5,3.5, +coarse_interface_u,4,0.0,6.585443742795605e-08,6.585443742795605e-08,False,False,3.5,3.5, +coarse_interface_u,5,0.0,1.2644051067663912e-07,1.2644051067663912e-07,False,False,3.5,3.5, +coarse_interface_u,6,1.9186142054314123e-07,1.4528626697542904e-07,4.660334981743319e-08,False,False,20.5,12.5, +coarse_interface_u,7,4.091979903802207e-06,2.0116559817931723e-07,3.8910894220610345e-06,True,True,20.5,13.5, +coarse_interface_u,8,2.311182477441854e-05,1.5646213891164667e-07,2.2955448242208372e-05,True,True,20.5,13.5, +coarse_interface_u,9,6.767647549251264e-05,1.5646213891164667e-07,6.752003656156048e-05,True,True,20.5,13.5, +coarse_interface_u,10,0.0001337150378395613,9.750014426779573e-08,0.00013361820089187484,True,True,20.5,13.5, +coarse_interface_u,11,0.00020218710417179174,1.1795114315203827e-07,0.00020207424859213912,True,True,20.5,13.5, +coarse_interface_u,12,0.0002568344215192973,7.455233297611785e-08,0.00025676033381921514,True,True,20.5,14.5, +coarse_interface_u,13,0.00028408902792915417,3.83541997932092e-08,0.00028405737088288245,True,True,20.5,14.5, +coarse_interface_u,14,0.0002878189146376881,3.003423681142711e-08,0.0002878487673732557,True,True,20.5,15.5, +coarse_interface_u,15,0.00027841070597653145,6.516592454722021e-08,0.0002784504724796873,True,True,20.5,16.5, +coarse_interface_u,16,0.0002652060129478788,1.006517304071618e-07,0.00026516043242156813,True,True,20.5,17.5, +coarse_interface_u,17,0.0002512614305767982,9.86322156278415e-08,0.00025121946497710793,True,True,20.5,18.5, +coarse_interface_u,18,0.00023870047136388868,1.0286787296380317e-07,0.00023871152377663379,True,True,20.5,19.5, +coarse_interface_u,19,0.00022600944747549703,7.783088195871973e-08,0.00022597593519089906,True,True,20.5,20.5, +coarse_interface_u,20,0.00021431184774763036,8.503127640307697e-08,0.00021428571329826077,True,True,20.5,20.5, +coarse_interface_u,21,0.00019575956040664123,7.893743237430962e-08,0.00019568735051647606,True,True,20.5,20.5, +coarse_interface_u,22,0.00017544769865184928,5.2749351285234925e-08,0.00017539495458202247,True,True,20.5,20.5, +coarse_interface_u,23,0.00016267972853265252,8.178685339035058e-08,0.00016263380071292468,True,True,20.5,14.5, +coarse_interface_u,24,0.00015978262119523088,6.715860617082587e-08,0.00015974108955029212,True,True,20.5,14.5, +coarse_bulk_u,1,0.0,0.0,0.0,False,False,0.5,0.5, +coarse_bulk_u,2,0.0,0.0,0.0,False,False,0.5,0.5, +coarse_bulk_u,3,0.0,0.0,0.0,False,False,0.5,0.5, +coarse_bulk_u,4,0.0,0.0,0.0,False,False,0.5,0.5, +coarse_bulk_u,5,0.0,0.0,0.0,False,False,0.5,0.5, +coarse_bulk_u,6,0.0,0.0,0.0,False,False,0.5,0.5, +coarse_bulk_u,7,7.82310665831233e-08,2.12341462371735e-07,1.341103957886117e-07,False,False,21.5,13.5, +coarse_bulk_u,8,1.9454402095498935e-06,2.458690369633922e-07,1.6999616130940679e-06,True,False,21.5,13.5, +coarse_bulk_u,9,1.177304052098705e-05,1.564621179284487e-07,1.1616666785920634e-05,True,True,21.5,13.5, +coarse_bulk_u,10,3.768468268046806e-05,1.0327184058071679e-07,3.758247372213889e-05,True,True,21.5,13.5, +coarse_bulk_u,11,8.249500148168606e-05,4.214683516511236e-08,8.24651319357052e-05,True,True,21.5,13.5, +coarse_bulk_u,12,0.00013911632875122394,5.890198697622995e-09,0.00013911827376976638,True,True,21.5,13.5, +coarse_bulk_u,13,0.0001940498057077554,4.806920811870088e-08,0.00019408186753519264,True,True,21.5,14.5, +coarse_bulk_u,14,0.00023606781230746572,3.215422633434082e-08,0.0002360762872001673,True,True,21.5,14.5, +coarse_bulk_u,15,0.0002548619441637075,3.434546877545681e-08,0.0002548861189892584,True,True,21.5,14.5, +coarse_bulk_u,16,0.00025644070267233306,0.0,0.00025644070267233306,True,True,21.5,15.5, +coarse_bulk_u,17,0.00024779621047094693,6.606481633104396e-08,0.00024773971117601724,True,True,21.5,16.5, +coarse_bulk_u,18,0.00023605776538134437,6.929437569595666e-08,0.00023599681787995022,True,True,21.5,17.5, +coarse_bulk_u,19,0.00022483643371073512,1.0390817551817351e-07,0.00022475474112598463,True,True,21.5,19.5, +coarse_bulk_u,20,0.00021493179783986402,1.042082306083734e-07,0.0002148440172340466,True,True,22.5,18.5, +coarse_bulk_u,21,0.00020607683833491475,9.442706670805767e-08,0.00020599766123702618,True,True,21.5,20.5, +coarse_bulk_u,22,0.0001975946374450119,5.556802130737047e-08,0.0001975402371312418,True,True,22.5,20.5, +coarse_bulk_u,23,0.00018932913257368715,4.4703464263670685e-08,0.00018936187038743642,True,True,22.5,21.5, +coarse_bulk_u,24,0.000179693129058515,9.995996742145265e-08,0.00017978823062286703,True,True,22.5,22.5, +fine_band_neq,1,0.0,3.000928300994632e-09,3.000928300994632e-09,False,False,4.25,4.25, +fine_band_neq,2,0.0,4.501393077727123e-09,4.501393077727123e-09,False,False,4.25,4.25, +fine_band_neq,3,0.0,2.069606169774474e-08,2.069606169774474e-08,False,False,4.25,4.25, +fine_band_neq,4,0.0,4.1392115429639276e-09,4.1392115429639276e-09,False,False,4.25,4.25, +fine_band_neq,5,0.0,4.1392115429639276e-09,4.1392115429639276e-09,False,False,4.25,4.25, +fine_band_neq,6,3.733491271140643e-07,9.934099098884985e-09,3.832832262129493e-07,True,True,19.75,13.25, +fine_band_neq,7,2.0319504568933056e-06,9.934099098884985e-09,2.0418845559921905e-06,True,True,19.75,13.25, +fine_band_neq,8,5.038458095685261e-06,9.934099098884985e-09,5.048392194784146e-06,True,True,19.75,13.75, +fine_band_neq,9,7.299560118911863e-06,1.1589783133203468e-08,7.3111499020450665e-06,True,True,19.75,14.25, +fine_band_neq,10,7.386030289713297e-06,9.106256526614231e-09,7.395136546239911e-06,True,True,19.75,15.25, +fine_band_neq,11,6.856089636353424e-06,5.794905943989903e-09,6.850294730409434e-06,True,True,19.75,17.25, +fine_band_neq,12,6.198413803892855e-06,6.622735776451449e-09,6.201725167243044e-06,True,True,19.75,18.25, +fine_band_neq,13,5.319780258750129e-06,4.139212333997833e-09,5.316468887739401e-06,True,True,19.75,19.25, +fine_band_neq,14,5.283330124894459e-06,4.967056432825245e-09,5.278363068461633e-06,True,True,19.75,19.75, +fine_band_neq,15,3.967651562297725e-06,4.553132745832578e-09,3.964340190287796e-06,True,True,19.75,19.75, +fine_band_neq,16,3.7551803555024854e-06,6.622738135675377e-09,3.74855761736681e-06,True,True,19.75,16.75, +fine_band_neq,17,3.5764174459163023e-06,6.622736969941201e-09,3.5755896076739013e-06,True,True,19.75,17.75, +fine_band_neq,18,3.230913338148067e-06,1.7384672978959514e-08,3.2135286651691075e-06,True,True,19.75,18.75, +fine_band_neq,19,3.160623228692927e-06,9.934106745546067e-09,3.1631067707871274e-06,True,True,19.75,19.75, +fine_band_neq,20,3.2258282446351316e-06,8.278412177986638e-09,3.217549832457145e-06,True,True,19.75,19.75, +fine_band_neq,21,2.8042083782819915e-06,1.1589792486832451e-08,2.8124868040602102e-06,True,True,19.75,19.75, +fine_band_neq,22,2.2509872253939633e-06,1.241763983306221e-09,2.2509872265041864e-06,True,True,19.75,19.75, +fine_band_neq,23,1.7420757160158118e-06,2.0696062086322797e-09,1.7412478748313198e-06,True,True,19.75,19.75, +fine_band_neq,24,1.7765396425617475e-06,7.864502313270627e-09,1.7773674825805053e-06,True,True,4.25,8.25, +transfer_neq,1,0.0,1.5004641487625925e-09,1.5004641487625925e-09,False,False,3.5,3.5,6 +transfer_neq,2,0.0,3.000928290586291e-09,3.000928290586291e-09,False,False,3.5,3.5,6 +transfer_neq,3,0.0,3.000928290586291e-09,3.000928290586291e-09,False,False,3.5,3.5,6 +transfer_neq,4,0.0,6.881438113781613e-09,6.881438113781613e-09,False,False,3.5,3.5,6 +transfer_neq,5,0.0,6.467520081987477e-09,6.467520081987477e-09,False,False,3.5,3.5,6 +transfer_neq,6,4.1392107713589255e-08,1.7384695072397705e-08,5.877680278598696e-08,False,False,20.5,12.5,1 +transfer_neq,7,1.0066612778220074e-06,1.4901174696935193e-08,1.0215624525189426e-06,True,True,20.5,13.5,1 +transfer_neq,8,5.309127742339492e-06,7.450589978308386e-09,5.316578332317801e-06,True,True,20.5,13.5,1 +transfer_neq,9,1.3828140735375194e-05,4.967061900673642e-09,1.3833107797275868e-05,True,True,20.5,13.5,1 +transfer_neq,10,2.2517463971680196e-05,7.0366557441969846e-09,2.2510427315936e-05,True,True,20.5,13.5,1 +transfer_neq,11,2.6241128339946074e-05,8.692339972804497e-09,2.623243599997327e-05,True,True,20.5,14.5,1 +transfer_neq,12,2.301816285713021e-05,1.0761948318616099e-08,2.3007400908811593e-05,True,True,20.5,14.5,1 +transfer_neq,13,1.7994855878653016e-05,6.6227364148296886e-09,1.7988233142238186e-05,True,True,16.5,20.5,3 +transfer_neq,14,1.325129952600701e-05,3.725288785783043e-09,1.3247574237221227e-05,True,True,17.5,20.5,3 +transfer_neq,15,1.102909472382868e-05,1.7074248230553035e-09,1.1030802148651736e-05,True,True,20.5,20.5,5 +transfer_neq,16,1.0516298765687881e-05,3.777030622292843e-09,1.0512521735065589e-05,True,True,20.5,20.5,5 +transfer_neq,17,7.773419831963446e-06,1.5522043823879006e-09,7.771867627581058e-06,True,True,20.5,20.5,5 +transfer_neq,18,6.4455684595787766e-06,2.4835230261199825e-09,6.4430849365526566e-06,True,True,16.5,3.5,4 +transfer_neq,19,6.882601883972939e-06,4.553130164564045e-09,6.8780487538083745e-06,True,True,16.5,3.5,4 +transfer_neq,20,8.06233390339417e-06,1.6556842147297246e-09,8.0639895876089e-06,True,True,3.5,15.5,2 +transfer_neq,21,9.1730277525931e-06,4.553133203799575e-09,9.1684746193893e-06,True,True,3.5,15.5,2 +transfer_neq,22,9.87202560678857e-06,1.241762831449833e-09,9.87078384395712e-06,True,True,3.5,15.5,2 +transfer_neq,23,9.794260003304078e-06,3.725291089495819e-09,9.790534712214582e-06,True,True,3.5,16.5,2 +transfer_neq,24,8.98628849999028e-06,6.208816516473092e-09,8.992497316506753e-06,True,True,3.5,17.5,2 diff --git a/research/fine_surface_joint_20261014/suction_signals.npz b/research/fine_surface_joint_20261014/suction_signals.npz new file mode 100644 index 0000000..66d06cf Binary files /dev/null and b/research/fine_surface_joint_20261014/suction_signals.npz differ diff --git a/research/fine_surface_joint_20261014/suction_summary.json b/research/fine_surface_joint_20261014/suction_summary.json new file mode 100644 index 0000000..d70a1d3 --- /dev/null +++ b/research/fine_surface_joint_20261014/suction_summary.json @@ -0,0 +1,170 @@ +{ + "speed": -0.002, + "initial_leaf": [ + 560.7500041779131, + 0.0, + 0.0 + ], + "final_leaf": [ + 560.6568783186376, + -0.014766339212656021, + -0.012467360123991966 + ], + "raw_residual": [ + 0.00033393828198313713, + 2.193264663219452e-07, + 2.6496127247810364e-07 + ], + "exact_average_residual": [ + 0.00033389730378985405, + 1.0663643479347229e-07, + 7.683411240577698e-08 + ], + "cumulative": { + "boundary": [ + -0.0934597565792501, + -0.014766445849090815, + -0.012467436958104372 + ], + "fine_transfer": [ + 0.06703074648976326, + 0.011895491741597652, + 0.010098854079842567 + ], + "coarse_transfer": [ + -0.06703078746795654, + -0.011895604431629181, + -0.01009904220700264 + ], + "rounding": [ + 0.00033393828198313713, + 2.193264663219452e-07, + 2.6496127247810364e-07 + ], + "average": [ + -4.0978193283081055e-08, + -1.126900315284729e-07, + -1.8812716007232666e-07 + ] + }, + "checks": { + "validity": true, + "geometry_unchanged": true, + "boundary_count": 48, + "collision_count": 72, + "local_collision": true, + "local_regime": true, + "bfl": true, + "transfer_rounding": true, + "interval_closure": true, + "cumulative_closure": true, + "propagation": true, + "drive_sign": true + }, + "max_collision_ratio": 0.5285112236646456, + "max_collision_error": 1.6477090769573266e-07, + "max_bfl_error": 1.2498588997100768e-08, + "max_interval_closure": 0.0, + "drive_mass": -0.07426865905109248, + "propagation": { + "coarse_interface_u": { + "threshold": 1e-06, + "baseline_factor": 10, + "first_arrival": { + "time": 7, + "signal": 4.091979903802207e-06, + "baseline": 2.0116559817931723e-07, + "absolute": 3.8910894220610345e-06, + "x": 20.5, + "y": 13.5 + }, + "peak": { + "metric": "coarse_interface_u", + "time": 14, + "signal": 0.0002878189146376881, + "baseline": 3.003423681142711e-08, + "absolute": 0.0002878487673732557, + "any_crossed": true, + "peak_crossed": true, + "x": 20.5, + "y": 15.5 + } + }, + "coarse_bulk_u": { + "threshold": 1e-06, + "baseline_factor": 10, + "first_arrival": { + "time": 8, + "signal": 1.0179867624062477e-06, + "baseline": 1.005827957173589e-07, + "absolute": 9.175116276483961e-07, + "x": 13.5, + "y": 21.5 + }, + "peak": { + "metric": "coarse_bulk_u", + "time": 16, + "signal": 0.00025644070267233306, + "baseline": 0.0, + "absolute": 0.00025644070267233306, + "any_crossed": true, + "peak_crossed": true, + "x": 21.5, + "y": 15.5 + } + }, + "fine_band_neq": { + "threshold": 1e-07, + "baseline_factor": 10, + "first_arrival": { + "time": 6, + "signal": 3.733491271140643e-07, + "baseline": 9.934099098884985e-09, + "absolute": 3.832832262129493e-07, + "x": 19.75, + "y": 13.25 + }, + "peak": { + "metric": "fine_band_neq", + "time": 10, + "signal": 7.386030289713297e-06, + "baseline": 9.106256526614231e-09, + "absolute": 7.395136546239911e-06, + "any_crossed": true, + "peak_crossed": true, + "x": 19.75, + "y": 15.25 + } + }, + "transfer_neq": { + "threshold": 1e-07, + "baseline_factor": 10, + "first_arrival": { + "time": 7, + "signal": 1.0066612778220074e-06, + "baseline": 1.4901174696935193e-08, + "absolute": 1.0215624525189426e-06, + "q": 1, + "x": 20.5, + "y": 13.5 + }, + "peak": { + "metric": "transfer_neq", + "time": 11, + "signal": 2.6241128339946074e-05, + "baseline": 8.692339972804497e-09, + "absolute": 2.623243599997327e-05, + "any_crossed": true, + "peak_crossed": true, + "q": 1, + "x": 20.5, + "y": 14.5 + } + } + }, + "raw_minus_zero": [ + 0.0001048198901116848, + -5.686189979314804e-06, + -3.6512501537799835e-06 + ] +} diff --git a/research/fine_surface_joint_20261014/validate.py b/research/fine_surface_joint_20261014/validate.py new file mode 100644 index 0000000..37441fe --- /dev/null +++ b/research/fine_surface_joint_20261014/validate.py @@ -0,0 +1,347 @@ +"""Isolated, pre-registered 24-interval validation; never imported by pytest.""" +import csv +import hashlib +import importlib.util +import json +import struct +from pathlib import Path +from unittest.mock import patch + +import numpy as np + +ROOT = Path('/home/frank14f/CelerisLab') +OUT = Path(__file__).resolve().parent +spec = importlib.util.spec_from_file_location('accepted_hooks', ROOT/'tests/validation/multigrid/test_fine_surface_gpu.py') +h = importlib.util.module_from_spec(spec) +spec.loader.exec_module(h) +EPS = np.finfo(np.float32).eps +M = h.MOMENTS + + +def save(name, obj): + text = json.dumps(obj, indent=2, allow_nan=False)+'\n' + assert len(text) <= 40000, (name, len(text)) + (OUT/name).write_text(text) + + +def table(name, rows): + with (OUT/name).open('w') as file: + writer = csv.DictWriter(file, fieldnames=list(rows[0])) + writer.writeheader() + writer.writerows(rows) + assert (OUT/name).stat().st_size <= 40000 + + +def vec(row, prefix, values): + row.update({prefix+'_'+axis: float(value) for axis, value in zip(('m', 'px', 'py'), values)}) + + +def equilibrium(values): + a = values.astype(float) + rho = a.sum(axis=0) + u = M[1:]@a/rho + cu = h.CX[:, None]*u[0]+h.CY[:, None]*u[1] + eq = h.W[:, None]*rho*(1+3*cu+4.5*cu*cu-1.5*(u*u).sum(axis=0)) + return eq, u, rho + + +def pull(a): + return np.stack([np.roll(a[q], (h.CY[q], h.CX[q]), (0, 1)) for q in range(9)]) + + +def collision(incoming, output, omega, area): + """Local observed drift; no access to global initial/final states or ledger.""" + a, b = incoming.astype(float), output.astype(float) + eq, u, rho = equilibrium(a) + ideal = (1-omega)*a+omega*eq + tolerance = 8*EPS*abs(a) + error = abs(b-ideal) + # Independent local FP64 oracle plus a measured (not inferred) drift. + return dict(drift=area*(M@(b-a).sum(axis=1)), + ideal_defect=area*(M@(ideal-a).sum(axis=1)), + measured_rounding=area*(M@(b-ideal).sum(axis=1)), + max_error=float(error.max()), max_ratio=float((error/tolerance).max()), + regime=bool(np.isfinite(b).all() and np.all(a>0) and np.all(b>0) and np.all((rho>.9)&(rho<1.1)) + and np.max(np.linalg.norm(u, axis=0))<.05)) + + +def coarse_arrivals(before, fine, active, p): + """Independent midpoint map; FP32 addition order checked against actual map.""" + got = pull(before) + ideal = got.astype(float) + targets, sources = [], [] + for y, x in np.argwhere(active): + for q in range(1, 9): + if 4 <= x+.5-h.CX[q]/2 <= 20 and 4 <= y+.5-h.CY[q]/2 <= 20: + a, b = 4+2*(x-4), 4+2*(y-4) + children = fine[q, b:b+2, a:a+2].ravel() + assert len(children) == 4 and np.isfinite(children).all() + got[q, y, x] = np.float32(.25)*(((children[0]+children[1])+children[2])+children[3]) + ideal[q, y, x] = children.astype(float).sum()/4 + targets.append(q*576+y*24+x) + sources.append([q*1600+(b+dy)*40+a+dx for dy in (0, 1) for dx in (0, 1)]) + order = np.argsort(targets) + porder = np.argsort(p.coalesce_coarse) + np.testing.assert_array_equal(np.array(targets)[order], p.coalesce_coarse[porder]) + np.testing.assert_array_equal(np.array(sources)[order], p.coalesce_fine[porder]) + assert np.isfinite(got[:, active]).all() + flux = (got[:, active].astype(float)-before[:, active]).sum(axis=1) + rounding = (got[:, active].astype(float)-ideal[:, active]).sum(axis=1) + children = fine.ravel()[p.coalesce_fine] + bound = 3*(EPS/2)/(1-3*(EPS/2))*np.abs(children.astype(float)).sum(axis=1)/4 + differences = abs(got.ravel()[p.coalesce_coarse]-ideal.ravel()[p.coalesce_coarse]) + return got, M@flux, M@rounding, float(np.max(differences/bound)) + + +def observation(values, mask): + eq, u, _ = equilibrium(values[:, mask]) + return u, values[:, mask].astype(float)-eq + + +def run(speed, label): + cfg = h.LBMConfig(nx=24, ny=24, viscosity=.05, velocity=0, rho=1) + cmask = np.ones((24, 24), bool) + cmask[4:20, 4:20] = False + source = h.object_spec(speed) + state = vars(source.state).copy() + ledger_rows, collision_rows, boundary_rows = [], [], [] + trace = [] + with h.CudaContext(0) as context: + with h.implementation.FixedPatchStepper(cfg, h.BOUNDS, context=context, fine_objects=[source]) as backend, context.activate(): + c, f = backend._levels + cl, p = backend._fine_curved, backend.patch + geometry = {name: getattr(cl, name).copy() for name in h.GEOMETRY} + flags = backend.fine_boundary.flags.copy().reshape(40, 40) + solid = (flags & h.SOLID) != 0 + active = backend._fine_leaf.copy() + fine_mesh = p.fine_kind == 0 + band = active & np.logical_or.reduce([~np.roll(fine_mesh, (cy, cx), (0, 1)) + for cx, cy in zip(h.CX[1:], h.CY[1:])]) + interface = np.zeros(576, bool) + interface[p.coalesce_coarse % 576] = True + interface = interface.reshape(24, 24) + bulk = cmask & ~interface + if speed == 0: + def coords(mask, dx, origin): + yx = np.argwhere(mask) + return ((yx[:, ::-1]+.5)*dx+np.array(origin)).tolist() + save('regions.json', dict(coarse_interface=coords(interface, 1, (0, 0)), + coarse_bulk=coords(bulk, 1, (0, 0)), fine_band=coords(band, .5, (2, 2)), + transfer_slots=[dict(q=int(slot//576), x=float(slot%24+.5), + y=float((slot%576)//24+.5)) for slot in p.coalesce_coarse])) + backend.initialize(h.rest((24, 24)), h.rest((40, 40))) + initial = backend.download() + initial_m = M@(initial[0][:, cmask].sum(axis=1, dtype=float) + +.25*initial[1][:, active].sum(axis=1, dtype=float)) + previous = initial_m.copy() + totals = {name: np.zeros(3) for name in ('boundary', 'fine_transfer', 'coarse_transfer', 'rounding', 'average')} + interval = None + orig_b, orig_f, orig_c = backend._curved, f.kernel, c.kernel + omegas = [] + for level, tau in ((c, p.tau_coarse), (f, p.tau_fine)): + pointer, size = level.module.get_global('d_params') + assert size == 20 + omega, fx, fy, fz, count = struct.unpack('=ffffI', h.read(pointer, (size,), np.uint8).tobytes()) + assert omega == float(np.float32(1/tau)) and (fx, fy, fz) == (0., 0., 0.) + omegas.append(omega) + omega_c, omega_f = omegas + + def curved(*args, **kwargs): + backend._stream.synchronize() + before = h.read(args[0], f.shape) + expected = h.reflection_oracle(before, cl, speed) + passive = h.reflection_oracle(before, cl, None, verify_projection=False) + orig_b(*args, **kwargs) + backend._stream.synchronize() + staged = h.read(args[0], f.shape) + d, k = cl.dir.astype(int), cl.fluid_idx.astype(int) + values = staged.reshape(9, -1)[h.OPP[d], k+h.CX[d]+40*h.CY[d]] + np.testing.assert_array_equal(staged[:, active], before[:, active]) + b, tr, _ = h.fine_flux(before, staged, active, solid) + exchange = h.read(cl.link_exchange_gpu, (cl.count, 3)).astype(float).sum(axis=0) + row = dict(step=interval['step'], substep=len(interval['boundary'])+1, + time=interval['step']-1+.5*(len(interval['boundary'])+1), + bfl_error=float(abs(values-expected).max()), + drive_mass=.25*float((values-passive).sum()), + latest_body_impulse_x=float(.25*exchange[0]), latest_body_impulse_y=float(.25*exchange[1]), + latest_body_angular_impulse=float(.125*exchange[2])) + vec(row, 'boundary', .25*(M@b)) + vec(row, 'fine_transfer', .25*(M@tr)) + interval['boundary'].append(.25*(M@b)) + interval['fine_transfer'].append(.25*(M@tr)) + boundary_rows.append(row) + + def fine(*args, **kwargs): + backend._stream.synchronize() + staged = h.read(args[0], f.shape) + incoming = pull(staged)[:, active] + orig_f(*args, **kwargs) + backend._stream.synchronize() + after = h.read(args[1], f.shape) + assert np.isfinite(after[:, active]).all() and np.isnan(after[:, solid]).all() + outer = np.ones((40, 40), bool) + outer[2:-2, 2:-2] = False + assert np.isnan(after[:, outer]).all() + # Inner ghost is stream-only: compare including legitimate NaNs. + ghost = ~fine_mesh & ~outer + np.testing.assert_array_equal(after[:, ghost], pull(staged)[:, ghost]) + stat = collision(incoming, after[:, active], omega_f, .25) + interval['collision'].append(stat) + row = dict(step=interval['step'], level='fine', substep=len(interval['collision']), + max_error=stat['max_error'], max_ratio=stat['max_ratio'], regime=stat['regime']) + for key in ('drift', 'ideal_defect', 'measured_rounding'): + vec(row, key, stat[key]) + collision_rows.append(row) + + def coarse(*args, **kwargs): + backend._stream.synchronize() + before, fine = h.read(args[0], c.shape), h.read(args[2], f.shape) + incoming, flux, avg, ratio = coarse_arrivals(before, fine, cmask, p) + interval['coarse_transfer'], interval['average'] = flux, avg + interval['average_ratio'] = ratio + eq, _, _ = equilibrium(incoming[:, cmask]) + neq = np.full(c.shape, np.nan) + neq[:, cmask] = incoming[:, cmask].astype(float)-eq + interval['transfer_neq'] = neq.ravel()[p.coalesce_coarse].copy() + orig_c(*args, **kwargs) + backend._stream.synchronize() + after = h.read(args[1], c.shape) + assert np.isfinite(after[:, cmask]).all() and np.isnan(after[:, ~cmask]).all() + stat = collision(incoming[:, cmask], after[:, cmask], omega_c, 1.) + interval['collision'].append(stat) + row = dict(step=interval['step'], level='coarse', substep=1, + max_error=stat['max_error'], max_ratio=stat['max_ratio'], regime=stat['regime']) + for key in ('drift', 'ideal_defect', 'measured_rounding'): + vec(row, key, stat[key]) + collision_rows.append(row) + + with patch.object(backend, '_curved', curved), patch.object(f, 'kernel', fine), patch.object(c, 'kernel', coarse): + for n in range(1, 25): + interval = dict(step=n, boundary=[], fine_transfer=[], collision=[]) + backend.step(1) + coarse_g, fine_g = backend.download() + assert np.isfinite(coarse_g[:, cmask]).all() and np.isnan(coarse_g[:, ~cmask]).all() + assert np.isfinite(fine_g[:, active]).all() and np.isnan(fine_g[:, ~active]).all() + assert len(interval['boundary']) == 2 and len(interval['collision']) == 3 + current = M@(coarse_g[:, cmask].sum(axis=1, dtype=float) + +.25*fine_g[:, active].sum(axis=1, dtype=float)) + b = sum(interval['boundary']) + ft = sum(interval['fine_transfer']) + ct = interval['coarse_transfer'] + drift = sum(s['drift'] for s in interval['collision']) + raw = current-previous-b-ft-ct + row = dict(step=n, time=n, average_bound_ratio=interval['average_ratio']) + for key, value in (('leaf', current), ('delta', current-previous), ('boundary', b), + ('fine_transfer', ft), ('coarse_transfer', ct), ('raw', raw), + ('collision_drift', drift), ('average_rounding', interval['average']), + ('closure', raw-drift)): + vec(row, key, value) + for key, val in (('boundary', b), ('fine_transfer', ft), ('coarse_transfer', ct), + ('rounding', drift), ('average', interval['average'])): + totals[key] += val + cumulative = current-initial_m-totals['boundary']-totals['fine_transfer']-totals['coarse_transfer'] + vec(row, 'cumulative_raw', cumulative) + vec(row, 'cumulative_closure', cumulative-totals['rounding']) + ledger_rows.append(row) + iu, ine = observation(coarse_g, interface) + bu, _ = observation(coarse_g, bulk) + fu, fne = observation(fine_g, band) + trace.append(dict(coarse_interface_u=iu, coarse_bulk_u=bu, + fine_band_neq=fne, transfer_neq=interval['transfer_neq'])) + previous = current + print(label, n, 'raw', raw.tolist(), 'cumulative_raw', cumulative.tolist(), flush=True) + assert backend.step_count == 24 and len(boundary_rows) == 48 and len(collision_rows) == 72 + for name, val in geometry.items(): + np.testing.assert_array_equal(getattr(cl, name), val) + np.testing.assert_array_equal(flags.ravel(), backend.fine_boundary.flags) + assert vars(source.state) == state and source.geometry.center == source.center + table(label+'_ledger.csv', ledger_rows) + table(label+'_collisions.csv', collision_rows) + table(label+'_boundary.csv', boundary_rows) + # Small compressed diagnostic arrays, not full-field population snapshots. + np.savez_compressed(OUT/(label+'_signals.npz'), **{key: np.stack([t[key] for t in trace]) for key in trace[0]}) + final = ledger_rows[-1] + checks = dict(validity=True, geometry_unchanged=True, boundary_count=len(boundary_rows), + collision_count=len(collision_rows), + local_collision=max(r['max_ratio'] for r in collision_rows)<=1, + local_regime=all(r['regime'] for r in collision_rows), + bfl=max(r['bfl_error'] for r in boundary_rows)<=1e-7, + transfer_rounding=max(r['average_bound_ratio'] for r in ledger_rows)<=1, + interval_closure=max(abs(r['closure_'+k]) for r in ledger_rows for k in ('m','px','py'))<=1e-10, + cumulative_closure=max(abs(r['cumulative_closure_'+k]) for r in ledger_rows for k in ('m','px','py'))<=1e-9) + return trace, dict(speed=speed, initial_leaf=initial_m.tolist(), final_leaf=previous.tolist(), + raw_residual=[final['cumulative_raw_'+k] for k in ('m','px','py')], + exact_average_residual=(np.array([final['cumulative_raw_'+k] for k in ('m','px','py')])+totals['average']).tolist(), + cumulative={k: v.tolist() for k,v in totals.items()}, checks=checks, + max_collision_ratio=max(r['max_ratio'] for r in collision_rows), + max_collision_error=max(r['max_error'] for r in collision_rows), + max_bfl_error=max(r['bfl_error'] for r in boundary_rows), + max_interval_closure=max(abs(r['closure_'+k]) for r in ledger_rows for k in ('m','px','py')), + drive_mass=sum(r['drive_mass'] for r in boundary_rows)) + + +def compare(driven, zero, label): + regions = json.loads((OUT/'regions.json').read_text()) + summaries, rows = {}, [] + for key in driven[0]: + velocity = key.endswith('_u') + floor = 1e-6 if velocity else 1e-7 + first, peak = None, None + for n, (d, z) in enumerate(zip(driven, zero), 1): + difference = d[key]-z[key] + if velocity: + signal = np.linalg.norm(difference, axis=0) + base = np.linalg.norm(z[key], axis=0) + absolute = np.linalg.norm(d[key], axis=0) + elif difference.ndim == 2: + signal, base, absolute = abs(difference).max(axis=0), abs(z[key]).max(axis=0), abs(d[key]).max(axis=0) + else: + signal, base, absolute = abs(difference), abs(z[key]), abs(d[key]) + eligible = (signal>floor)&(signal>10*base) + idx = int(np.argmax(signal)) + def location(i): + region = key.removesuffix('_u').removesuffix('_neq') + if key == 'transfer_neq': + return regions['transfer_slots'][i] + return dict(zip(('x','y'), regions[region][i])) + record = dict(metric=key, time=n, signal=float(signal[idx]), baseline=float(base[idx]), + absolute=float(absolute[idx]), any_crossed=bool(eligible.any()), peak_crossed=bool(eligible[idx]), **location(idx)) + rows.append(record) + if peak is None or record['signal']>peak['signal']: + peak = record.copy() + if first is None and eligible.any(): + i = int(np.argmax(np.where(eligible, signal, -1))) + first = dict(time=n, signal=float(signal[i]), baseline=float(base[i]), absolute=float(absolute[i]), **location(i)) + summaries[key] = dict(threshold=floor, baseline_factor=10, first_arrival=first, peak=peak) + # q is present only for transfer populations; normalize CSV columns. + for row in rows: + row.setdefault('q', '') + table(label+'_propagation.csv', rows) + return summaries + + +def main(): + assert Path(h.CelerisLab.__file__).resolve() == ROOT/'src/CelerisLab/__init__.py' + assert Path(h.compiler._KERNEL_DIR).resolve() == ROOT/'src/CelerisLab/lbm/kernels' + frozen = json.loads((OUT/'frozen.json').read_text()) + for path, digest in frozen['hashes'].items(): + assert hashlib.sha256((ROOT/path).read_bytes()).hexdigest() == digest, path + print('SOURCE', h.CelerisLab.__file__, 'CRITERIA', frozen['frozen_utc'], flush=True) + traces, summaries = {}, {} + for label, speed in (('zero', 0.), ('blow', .002), ('suction', -.002)): + traces[label], summaries[label] = run(speed, label) + save(label+'_summary.json', summaries[label]) + for label in ('blow','suction'): + summaries[label]['propagation'] = compare(traces[label], traces['zero'], label) + summaries[label]['raw_minus_zero'] = (np.array(summaries[label]['raw_residual'])-summaries['zero']['raw_residual']).tolist() + summaries[label]['checks']['propagation'] = all(s['first_arrival'] is not None for s in summaries[label]['propagation'].values()) + summaries[label]['checks']['drive_sign'] = summaries[label]['speed']*summaries[label]['drive_mass']>0 + save(label+'_summary.json', summaries[label]) + passed = all(all(v for k,v in s['checks'].items() if k not in ('boundary_count','collision_count')) for s in summaries.values()) + save('result.json', dict(passed=passed, runs=summaries)) + print('RESULT', json.dumps(dict(passed=passed, summaries=summaries)), flush=True) + raise SystemExit(0 if passed else 1) + + +if __name__ == '__main__': + main() diff --git a/research/fine_surface_joint_20261014/zero_boundary.csv b/research/fine_surface_joint_20261014/zero_boundary.csv new file mode 100644 index 0000000..65c92e4 --- /dev/null +++ b/research/fine_surface_joint_20261014/zero_boundary.csv @@ -0,0 +1,49 @@ +step,substep,time,bfl_error,drive_mass,latest_body_impulse_x,latest_body_impulse_y,latest_body_angular_impulse,boundary_m,boundary_px,boundary_py,fine_transfer_m,fine_transfer_px,fine_transfer_py +1,1,0.5,1.862645149230957e-09,-3.725290298461914e-09,0.0,0.0,0.0,-3.725290298461914e-09,0.0,0.0,0.0,0.0,0.0 +1,2,1.0,7.450580596923828e-09,1.4901161193847656e-08,0.0,0.0,0.0,1.4901161193847656e-08,0.0,0.0,-3.557652235031128e-07,0.0,0.0 +2,1,1.5,7.450580596923828e-09,1.4901161193847656e-08,0.0,0.0,0.0,1.4901161193847656e-08,0.0,0.0,-8.530914783477783e-07,-7.450580596923828e-09,-1.6763806343078613e-07 +2,2,2.0,7.450580596923828e-09,1.4901161193847656e-08,0.0,0.0,0.0,1.4901161193847656e-08,0.0,0.0,-1.3401731848716736e-06,2.7939677238464355e-09,-9.313225746154785e-10 +3,1,2.5,7.450580596923828e-09,1.4901161193847656e-08,0.0,0.0,0.0,1.4901161193847656e-08,0.0,0.0,-1.6577541828155518e-06,1.5832483768463135e-07,1.5832483768463135e-07 +3,2,3.0,7.450580596923828e-09,1.4901161193847656e-08,0.0,0.0,0.0,1.4901161193847656e-08,0.0,0.0,-1.982320100069046e-06,3.1152740120887756e-07,3.096647560596466e-07 +4,1,3.5,7.450580596923828e-09,1.4901161193847656e-08,0.0,0.0,0.0,1.4901161193847656e-08,0.0,0.0,-3.2121315598487854e-06,3.5297125577926636e-07,3.762543201446533e-07 +4,2,4.0,7.450580596923828e-09,1.4901161193847656e-08,0.0,0.0,0.0,1.4901161193847656e-08,0.0,0.0,-3.698747605085373e-06,-3.585591912269592e-08,1.909211277961731e-08 +5,1,4.5,7.450580596923828e-09,1.4901161193847656e-08,0.0,0.0,0.0,1.4901161193847656e-08,0.0,0.0,-3.6563724279403687e-06,5.550682544708252e-07,2.4121254682540894e-07 +5,2,5.0,7.450580596923828e-09,1.4901161193847656e-08,0.0,0.0,0.0,1.4901161193847656e-08,0.0,0.0,-3.6312267184257507e-06,5.122274160385132e-07,2.2258609533309937e-07 +6,1,5.5,7.450580596923828e-09,1.4901161193847656e-08,0.0,0.0,0.0,1.4901161193847656e-08,0.0,0.0,-2.8940849006175995e-06,5.164183676242828e-07,3.213062882423401e-08 +6,2,6.0,7.450580596923828e-09,1.4901161193847656e-08,0.0,0.0,0.0,1.4901161193847656e-08,0.0,0.0,-2.759043127298355e-06,1.4202669262886047e-07,-9.173527359962463e-08 +7,1,6.5,7.450580596923828e-09,1.2056459275378018e-08,2.60770320892334e-08,2.60770320892334e-08,0.0,2.2351741790771484e-08,-2.9802322387695312e-08,-2.9802322387695312e-08,-2.505723387002945e-06,1.41095370054245e-07,1.909211277961731e-08 +7,2,7.0,3.3177493669045433e-09,8.59302214106794e-09,6.146728992462158e-08,3.5390257835388184e-08,0.0,5.634501576423645e-08,-6.565824151039124e-08,-3.119930624961853e-08,-2.1560117602348328e-06,9.872019290924072e-08,-7.171183824539185e-08 +8,1,7.5,3.3720288783456454e-09,5.322996345785702e-09,-1.1175870895385742e-08,-3.725290298461914e-09,-1.3969838619232178e-09,7.031485438346863e-08,1.1641532182693481e-08,1.0710209608078003e-08,-2.4740584194660187e-06,2.6496127247810364e-07,1.103617250919342e-07 +8,2,8.0,5.7645661577510054e-09,9.257705106853475e-09,8.568167686462402e-08,6.891787052154541e-08,5.587935447692871e-09,6.658956408500671e-08,-8.242204785346985e-08,-6.100162863731384e-08,-2.444721758365631e-06,1.7601996660232544e-07,1.5832483768463135e-08 +9,1,8.5,5.7645661577510054e-09,1.0978071169134851e-08,1.1548399925231934e-07,1.043081283569336e-07,2.3094196555106805e-09,3.166496753692627e-08,-1.1082738637924194e-07,-1.0710209608078003e-07,-2.629123628139496e-06,1.7415732145309448e-07,-9.313225746154785e-08 +9,2,9.0,6.9608347974536855e-09,7.898425626214067e-09,1.3131648302078247e-07,1.648440957069397e-07,6.947145747560057e-09,3.119930624961853e-08,-1.19674950838089e-07,-1.578591763973236e-07,-2.517830580472946e-06,1.7741695046424866e-07,-1.0477378964424133e-07 +10,1,9.5,8.157103437156366e-09,1.1035995113421737e-08,9.592622518539429e-08,1.387670636177063e-07,-4.134291242685606e-09,-5.3085386753082275e-08,-9.499490261077881e-08,-1.4062970876693726e-07,-2.5741755962371826e-06,4.377216100692749e-08,-2.1420419216156006e-08 +10,2,10.0,9.843117876329188e-09,-2.3864622283528703e-09,-5.587935447692871e-09,1.601874828338623e-07,-2.2389515352827516e-08,-5.820766091346741e-08,4.656612873077393e-10,-1.5692785382270813e-07,-2.477318048477173e-06,1.1362135410308838e-07,-4.6566128730773926e-08 +11,1,10.5,5.7645661577510054e-09,8.417366170396234e-09,3.073364496231079e-08,1.4062970876693726e-07,5.2116290616410765e-08,-5.541369318962097e-08,-2.2817403078079224e-08,-1.4295801520347595e-07,-2.542976289987564e-06,-1.0943040251731873e-07,-1.3923272490501404e-07 +11,2,11.0,8.646849236626508e-09,4.201981729581861e-09,2.0489096641540527e-08,6.51925802230835e-08,2.9745662044611265e-08,-1.3969838619232178e-08,-2.0489096641540527e-08,-7.264316082000732e-08,-2.610962837934494e-06,2.561137080192566e-08,-1.2153759598731995e-07 +12,1,11.5,7.450580596923828e-09,6.251696621321912e-09,-2.3283064365386963e-08,2.514570951461792e-08,-8.029562570399662e-09,-2.9802322387695312e-08,2.7939677238464355e-08,-2.7939677238464355e-08,-2.630986273288727e-06,-2.60770320892334e-08,-1.0337680578231812e-07 +12,2,12.0,5.7645661577510054e-09,2.728442157970412e-09,1.3969838619232178e-08,4.377216100692749e-08,3.1274215439580644e-09,-6.51925802230835e-09,-1.1175870895385742e-08,-4.377216100692749e-08,-2.6319175958633423e-06,1.4901161193847656e-08,-1.4528632164001465e-07 +13,1,12.5,5.7645661577510054e-09,-9.308885346587248e-11,-1.5832483768463135e-08,-1.3969838619232178e-08,-5.176395001527112e-08,-2.1420419216156006e-08,2.2351741790771484e-08,7.450580596923828e-09,-2.5229528546333313e-06,-1.30385160446167e-07,-1.94646418094635e-07 +13,2,13.0,5.7645661577510054e-09,2.221090411418103e-09,-8.381903171539307e-09,6.51925802230835e-09,-8.495223857707401e-09,-1.862645149230957e-09,8.381903171539307e-09,-1.3969838619232178e-08,-2.4405308067798615e-06,-7.12461769580841e-08,-1.8673017621040344e-07 +14,1,13.5,5.7645661577510054e-09,2.3050655134637665e-09,-1.0244548320770264e-08,1.7695128917694092e-08,-5.172617645321509e-08,-1.4435499906539917e-08,7.916241884231567e-09,-1.4435499906539917e-08,-2.2603198885917664e-06,-1.4062970876693726e-07,-2.561137080192566e-07 +14,2,14.0,5.7645661577510054e-09,-1.3810677766332158e-09,4.6566128730773926e-09,1.955777406692505e-08,-2.4717821789366212e-08,-1.5832483768463135e-08,-9.313225746154785e-09,-1.955777406692505e-08,-2.158805727958679e-06,-5.587935447692871e-08,-2.654269337654114e-07 +15,1,14.5,5.7645661577510054e-09,3.710991161934296e-09,-2.514570951461792e-08,1.955777406692505e-08,-3.6359353972059694e-08,-2.3748725652694702e-08,2.7474015951156616e-08,-1.3504177331924438e-08,-2.0223669707775116e-06,-1.7834827303886414e-07,-2.752058207988739e-07 +15,2,15.0,5.7645661577510054e-09,5.327543748170904e-09,1.3969838619232178e-08,1.5832483768463135e-08,1.7229467630386353e-08,1.0710209608078003e-08,-1.257285475730896e-08,-1.7229467630386353e-08,-1.909211277961731e-06,-5.8673322200775146e-08,-2.812594175338745e-07 +16,1,15.5,5.7645661577510054e-09,4.6057723086800895e-10,-2.7008354663848877e-08,-2.1420419216156006e-08,-3.447782204180072e-08,-2.2351741790771484e-08,2.7939677238464355e-08,2.7008354663848877e-08,-1.9264407455921173e-06,-1.3737007975578308e-07,-4.237517714500427e-08 +16,2,16.0,6.254311957221148e-09,5.437245712697214e-09,-9.313225746154785e-10,-1.3969838619232178e-08,1.6260371493714842e-08,4.190951585769653e-09,3.259629011154175e-09,1.3504177331924438e-08,-1.8654391169548035e-06,-1.0617077350616455e-07,-1.7136335372924805e-07 +17,1,16.5,9.13659503609665e-09,3.3756476485596876e-09,-4.0046870708465576e-08,-3.632158041000366e-08,-2.366079998594728e-09,-1.0710209608078003e-08,3.864988684654236e-08,4.0512531995773315e-08,-1.7364509403705597e-06,-2.062879502773285e-07,-3.864988684654236e-08 +17,2,17.0,6.254311957221148e-09,-1.3075458155445419e-09,-2.7939677238464355e-09,-5.681067705154419e-08,-2.5630257582953675e-08,-1.1641532182693481e-08,5.122274160385132e-09,4.7963112592697144e-08,-1.6386620700359344e-06,-1.2153759598731995e-07,-9.73232090473175e-08 +18,1,17.5,6.254311957221148e-09,6.7173146229421166e-09,1.862645149230957e-09,-1.862645149230957e-08,2.366079998594728e-09,-1.1641532182693481e-08,-5.122274160385132e-09,2.3748725652694702e-08,-1.4598481357097626e-06,-5.2619725465774536e-08,5.541369318962097e-08 +18,2,18.0,7.94032639639397e-09,6.865774111568246e-09,8.754432201385498e-08,-1.30385160446167e-08,-1.534793570012738e-08,7.450580596923828e-09,-8.754432201385498e-08,8.381903171539307e-09,-1.3792887330055237e-06,-5.587935447692871e-08,-2.0489096641540527e-08 +19,1,18.5,9.13659503609665e-09,1.0526447616343582e-08,7.636845111846924e-08,-5.587935447692871e-09,1.5908030892575198e-08,-6.51925802230835e-09,-7.82310962677002e-08,3.725290298461914e-09,-1.307111233472824e-06,1.909211277961731e-08,5.122274160385132e-09 +19,2,19.0,6.254311957221148e-09,9.55982605143485e-09,1.2479722499847412e-07,-1.1175870895385742e-08,-3.2520742987429685e-08,0.0,-1.2200325727462769e-07,9.313225746154785e-09,-1.2475065886974335e-06,-3.213062882423401e-08,-3.119930624961853e-08 +20,1,19.5,7.450580596923828e-09,8.078089798642385e-09,9.499490261077881e-08,-1.4901161193847656e-08,2.2911836983219303e-08,-9.778887033462524e-09,-9.639188647270203e-08,1.7229467630386353e-08,-1.2731179594993591e-06,8.568167686462402e-08,5.4016709327697754e-08 +20,2,20.0,9.13659503609665e-09,6.598118141264153e-09,8.288770914077759e-08,-4.563480615615845e-08,2.065907767079267e-08,4.656612873077393e-10,-8.800998330116272e-08,4.6100467443466187e-08,-1.1995434761047363e-06,8.195638656616211e-08,-2.60770320892334e-08 +21,1,20.5,9.13659503609665e-09,3.7482895407295325e-09,7.729977369308472e-08,-4.7497451305389404e-08,-1.2497307633196897e-08,-1.5832483768463135e-08,-7.729977369308472e-08,4.0046870708465576e-08,-1.3262033462524414e-06,1.471489667892456e-07,-4.563480615615845e-08 +21,2,21.0,9.13659503609665e-09,9.180836884128962e-09,9.313225746154785e-08,-3.91155481338501e-08,-1.5700276301267024e-08,1.6298145055770874e-08,-8.987262845039368e-08,3.585591912269592e-08,-1.3378448784351349e-06,1.1781230568885803e-07,-7.310882210731506e-08 +22,1,21.5,9.13659503609665e-09,5.584703916330924e-09,1.0058283805847168e-07,-2.7939677238464355e-08,-3.1589420412814206e-08,-1.1175870895385742e-08,-1.0244548320770264e-07,2.60770320892334e-08,-1.443084329366684e-06,1.317821443080902e-07,-1.7276033759117126e-07 +22,2,22.0,9.13659503609665e-09,1.0796289612313714e-08,9.592622518539429e-08,-5.3085386753082275e-08,-1.7493244630628624e-09,1.1641532182693481e-08,-9.266659617424011e-08,5.541369318962097e-08,-1.4277175068855286e-06,1.1641532182693481e-07,-1.6298145055770874e-07 +23,1,22.5,9.13659503609665e-09,5.392017251963643e-09,1.0803341865539551e-07,-3.5390257835388184e-08,-2.3635404966526607e-08,6.05359673500061e-09,-1.1315569281578064e-07,3.585591912269592e-08,-1.3522803783416748e-06,4.6566128730773926e-08,-1.1920928955078125e-07 +23,2,23.0,1.0332863675799331e-08,9.153846265187726e-09,1.1175870895385742e-07,-4.470348358154297e-08,-2.7845243333324277e-08,1.30385160446167e-08,-1.1082738637924194e-07,4.7497451305389404e-08,-1.2884847819805145e-06,3.026798367500305e-08,-7.310882210731506e-08 +24,1,23.5,7.450580596923828e-09,3.828949286105443e-09,5.3085386753082275e-08,-3.632158041000366e-08,-3.0305757237059083e-08,4.190951585769653e-09,-5.820766091346741e-08,3.958120942115784e-08,-1.028645783662796e-06,6.193295121192932e-08,-4.7031790018081665e-08 +24,2,24.0,7.450580596923828e-09,1.2711602917839238e-08,5.8673322200775146e-08,-6.612390279769897e-08,-6.552603404319512e-08,1.257285475730896e-08,-7.217749953269958e-08,6.100162863731384e-08,-9.830109775066376e-07,1.257285475730896e-08,-1.5366822481155396e-08 diff --git a/research/fine_surface_joint_20261014/zero_collisions.csv b/research/fine_surface_joint_20261014/zero_collisions.csv new file mode 100644 index 0000000..027cb8f --- /dev/null +++ b/research/fine_surface_joint_20261014/zero_collisions.csv @@ -0,0 +1,73 @@ +step,level,substep,max_error,max_ratio,regime,drift_m,drift_px,drift_py,ideal_defect_m,ideal_defect_px,ideal_defect_py,measured_rounding_m,measured_rounding_px,measured_rounding_py +1,fine,1,3.083712529772242e-08,0.08007812434516381,True,1.6147270798683167e-05,0.0,0.0,-8.326672684688674e-17,0.0,0.0,1.6147270798766433e-05,0.0,0.0 +1,fine,2,1.1382831566209006e-08,0.09960937460709829,True,-3.4831464290618896e-07,0.0,0.0,-5.169475958410885e-15,0.0,0.0,-3.48314637736713e-07,0.0,0.0 +1,coarse,1,1.1080350609260492e-08,0.10456730670501622,True,-1.5292316675186157e-06,-1.30385160446167e-08,-1.5832483768463135e-07,-4.288236432614667e-15,-5.551115123125783e-17,1.3877787807814457e-17,-1.5292316632303793e-06,-1.3038515989105548e-08,-1.5832483769850914e-07 +2,fine,1,3.2078889655728915e-08,0.1679687748837782,True,8.158385753631592e-07,-1.30385160446167e-08,-1.7508864402770996e-07,-4.496403249731884e-15,-1.734723475976807e-17,2.740863092043355e-16,8.158385798595624e-07,-1.3038516027269464e-08,-1.7508864430179627e-07 +2,fine,2,6.788307005400895e-08,0.19140625209547577,True,2.376735210418701e-06,-1.1175870895385742e-08,1.2665987014770508e-07,-1.0479464518375892e-14,-4.336808689942018e-17,2.7582103268031233e-16,2.3767352208981657e-06,-1.1175870852017655e-08,1.2665986987188405e-07 +2,coarse,1,1.6365805183271576e-08,0.1544470929589978,True,-1.426786184310913e-06,-3.0919909477233887e-07,-3.0919909477233887e-07,-6.286637876939949e-15,-8.326672684688674e-17,-8.326672684688674e-17,-1.4267861780242752e-06,-3.0919909468907214e-07,-3.0919909468907214e-07 +3,fine,1,8.23703105723439e-08,0.31152334896616624,True,4.382804036140442e-06,1.6111880540847778e-07,1.3690441846847534e-07,-1.0234868508263162e-14,6.245004513516506e-17,3.2612801348363973e-16,4.38280404637531e-06,1.6111880534602774e-07,1.3690441814234733e-07 +3,fine,2,7.843806204554937e-08,0.3828123813437159,True,7.607974112033844e-06,5.029141902923584e-08,2.2351741790771484e-08,-1.5149340115705456e-14,1.5612511283791264e-17,2.654126918244515e-16,7.607974127183184e-06,5.029141901362333e-08,2.2351741525358793e-08 +3,coarse,1,1.0010523732173482e-07,0.2854567053212911,True,9.115785360336304e-06,3.3155083656311035e-07,3.203749656677246e-07,-3.837208328860697e-15,1.5334955527634975e-15,1.2420620087993939e-15,9.115785364173512e-06,3.315508350296148e-07,3.203749644256626e-07 +4,fine,1,9.437402781475868e-08,0.3632811360585352,True,1.0219402611255646e-05,3.771856427192688e-07,3.67872416973114e-07,-1.84297022087776e-14,4.371503159461554e-16,5.238864897449957e-16,1.0219402629685348e-05,3.771856422821185e-07,3.678724164492275e-07 +4,fine,2,9.851323801157719e-08,0.3388670872446077,True,1.0103452950716019e-05,2.975575625896454e-07,1.9976869225502014e-07,-1.6042722705833512e-14,-1.7694179454963432e-16,6.938893903907228e-18,1.0103452966758741e-05,2.975575627665872e-07,1.9976869224808125e-07 +4,coarse,1,1.2150177930436712e-07,0.37139422446265463,True,1.3064593076705933e-05,5.997717380523682e-07,5.62518835067749e-07,-1.2559397966072083e-14,-5.967448757360216e-16,-2.498001805406602e-16,1.306459308926533e-05,5.99771738649113e-07,5.625188353175492e-07 +5,fine,1,9.851323801157719e-08,0.3144530263816977,True,1.0738149285316467e-05,-4.190951585769653e-08,-1.1548399925231934e-07,-1.6018436577169837e-14,4.891920202254596e-16,5.30825383648903e-16,1.0738149301334904e-05,-4.1909516346888553e-08,-1.1548399978314472e-07 +5,fine,2,9.540882917047355e-08,0.32177729440809383,True,9.94466245174408e-06,0.0,1.7695128917694092e-07,-1.7361112547575885e-14,4.198030811863873e-16,1.0477729794899915e-15,9.944662469105192e-06,-4.198030811863873e-16,1.7695128812916794e-07 +5,coarse,1,1.2532259030528792e-07,0.38942307019337585,True,1.49458646774292e-05,9.723007678985596e-07,1.2628734111785889e-06,-1.6535384173010925e-14,1.5959455978986625e-16,6.175615574477433e-16,1.4945864693964583e-05,9.72300767738965e-07,1.2628734105610273e-06 +6,fine,1,9.023481550851642e-08,0.2998045916974925,True,9.546522051095963e-06,1.0104849934577942e-07,-6.007030606269836e-08,-1.5754758608821362e-14,-1.3530843112619095e-16,3.469446951953614e-16,9.546522066850721e-06,1.0104849948108785e-07,-6.007030640964306e-08 +6,fine,2,9.023481550851642e-08,0.29199211258675606,True,8.22870060801506e-06,8.614733815193176e-08,-1.6065314412117004e-07,-1.482668154917377e-14,1.3010426069826053e-16,-8.847089727481716e-17,8.228700622841742e-06,8.61473380218275e-08,-1.6065314403269915e-07 +6,coarse,1,1.0239773140519048e-07,0.43028837580529966,True,1.3286247849464417e-05,4.898756742477417e-07,3.818422555923462e-07,-1.9283186158958188e-14,-3.469446951953614e-17,8.673617379884035e-16,1.3286247868747603e-05,4.898756742824362e-07,3.8184225472498445e-07 +7,fine,1,9.023481550851642e-08,0.29199211258675606,True,8.461065590381622e-06,9.96515154838562e-08,1.862645149230957e-08,-1.6153745008296028e-14,4.649058915617843e-16,-1.97758476261356e-16,8.461065606535367e-06,9.965151501895031e-08,1.8626451690068047e-08 +7,fine,2,9.023481550851642e-08,0.29199211258675606,True,7.561873644590378e-06,7.497146725654602e-08,4.237517714500427e-08,-1.456647302777725e-14,8.153200337090993e-17,5.741934705483231e-16,7.561873659156851e-06,7.497146717501402e-08,4.23751765708108e-08 +7,coarse,1,1.0902046165828239e-07,0.38161058826685446,True,1.3303011655807495e-05,9.387731552124023e-07,-2.5331974029541016e-07,-2.4202861936828413e-14,-8.326672684688674e-17,-2.3592239273284576e-16,1.3303011680010357e-05,9.387731552956691e-07,-2.5331974005948776e-07 +8,fine,1,9.023481550851642e-08,0.29199211258675606,True,6.217043846845627e-06,7.12461769580841e-08,1.5040859580039978e-07,-1.42785089307651e-14,6.765421556309548e-17,1.9081958235744878e-17,6.217043861124136e-06,7.124617689042989e-08,1.5040859578131782e-07 +8,fine,2,9.023481550851642e-08,0.31249989522621113,True,6.183981895446777e-06,1.5832483768463135e-08,1.210719347000122e-08,-1.374594882364022e-14,2.914335439641036e-16,-2.0816681711721685e-17,6.183981909192726e-06,1.583248347702959e-08,1.2107193490817902e-08 +8,coarse,1,1.265961931951054e-07,0.38341345468786764,True,7.713213562965393e-06,5.718320608139038e-07,-6.761401891708374e-07,-2.1399548799649892e-14,-1.4432899320127035e-15,3.885780586188048e-16,7.713213584364942e-06,5.718320622571937e-07,-6.761401895594155e-07 +9,fine,1,7.678237223807116e-08,0.32031244446989565,True,5.04031777381897e-06,9.685754776000977e-08,-1.434236764907837e-07,-1.3928094788617784e-14,-1.0581813203458523e-16,2.6020852139652106e-17,5.0403177877470645e-06,9.68575478658279e-08,-1.4342367651680454e-07 +9,fine,2,7.823108461035844e-08,0.2934569717253952,True,4.06801700592041e-06,3.5390257835388184e-08,-1.7695128917694092e-08,-1.4047790708460184e-14,-9.367506770274758e-17,1.9081958235744878e-16,4.068017019968201e-06,3.539025792906325e-08,-1.7695129108513674e-08 +9,coarse,1,1.0774685821335339e-07,0.3876201969620664,True,1.385807991027832e-06,-2.7567148208618164e-07,-4.470348358154297e-07,-2.468858451010192e-14,1.249000902703301e-16,-5.967448757360216e-16,1.3858080157164165e-06,-2.7567148221108173e-07,-4.470348352186848e-07 +10,fine,1,7.885198249901748e-08,0.3164059705161431,True,3.97535040974617e-06,2.0954757928848267e-08,3.306195139884949e-08,-1.408248517797972e-14,1.0408340855860843e-17,1.3183898417423734e-16,3.975350423828655e-06,2.0954757918439926e-08,3.30619512670105e-08 +10,fine,2,6.684825892833146e-08,0.33007805480156616,True,3.22144478559494e-06,2.7939677238464355e-09,1.3969838619232178e-08,-1.3690437672408962e-14,2.220446049250313e-16,1.942890293094024e-16,3.221444799285378e-06,2.7939675018018306e-09,1.3969838424943148e-08 +10,coarse,1,9.857692329084955e-08,0.4038458162128909,True,2.164393663406372e-06,-4.470348358154297e-07,3.203749656677246e-07,-2.49592013723543e-14,-3.5388358909926865e-16,8.257283745649602e-16,2.1643936883655734e-06,-4.470348354615461e-07,3.2037496484199623e-07 +11,fine,1,7.202226570690584e-08,0.2885741439022296,True,2.462416887283325e-06,7.264316082000732e-08,3.259629011154175e-08,-1.4660148095479997e-14,-2.0990154059319366e-16,-2.203098814490545e-16,2.4624169019434733e-06,7.264316102990886e-08,3.259629033185163e-08 +11,fine,2,7.864501860854745e-08,0.26904281257170715,True,2.048444002866745e-06,2.3283064365386963e-09,6.938353180885315e-08,-1.4498818812214154e-14,-1.5265566588595902e-16,-4.198030811863873e-16,2.048444017365564e-06,2.328306589194362e-09,6.938353222865623e-08 +11,coarse,1,1.2914339875269576e-07,0.3858170203504229,True,-3.026798367500305e-06,-2.6635825634002686e-07,3.4831464290618896e-07,-1.938033067361289e-14,-2.0816681711721685e-17,-2.2898349882893854e-16,-3.0267983481199745e-06,-2.663582563192102e-07,3.4831464313517246e-07 +12,fine,1,6.72621854880262e-08,0.2617186813731729,True,2.3399479687213898e-06,3.771856427192688e-08,4.7031790018081665e-08,-1.3525638942191165e-14,-4.683753385137379e-17,3.9898639947466563e-17,2.3399479822470287e-06,3.7718564318764414e-08,4.7031789978183025e-08 +12,fine,2,6.829698973032095e-08,0.310546814493141,True,1.689419150352478e-06,8.847564458847046e-08,1.1082738637924194e-07,-1.4262896419481308e-14,-6.938893903907228e-18,-1.491862189340054e-16,1.6894191646153744e-06,8.847564459540935e-08,1.1082738652842816e-07 +12,coarse,1,1.0137883943439618e-07,0.3215142032133043,True,-2.1997839212417603e-06,-4.4889748096466064e-07,1.2479722499847412e-07,-2.423061751244404e-14,-1.5265566588595902e-16,-3.0531133177191805e-16,-2.1997838970111427e-06,-4.48897480812005e-07,1.2479722530378545e-07 +13,fine,1,7.243620325780853e-08,0.2641600946299196,True,2.107582986354828e-06,1.1827796697616577e-07,1.685693860054016e-07,-1.5241280459932227e-14,3.8163916471489756e-17,-7.979727989493313e-17,2.1075830015961083e-06,1.1827796693800186e-07,1.685693860851989e-07 +13,fine,2,6.581346223555329e-08,0.3027343282446967,True,2.037733793258667e-06,1.387670636177063e-07,7.171183824539185e-08,-1.5482407023093003e-14,-6.418476861114186e-17,2.2724877535296173e-16,2.037733808741074e-06,1.3876706368189107e-07,7.171183801814307e-08 +13,coarse,1,8.762392122996232e-08,0.40144193790160176,True,-4.213303327560425e-06,-1.1920928955078125e-07,4.0978193283081055e-08,-2.413347299778934e-14,1.249000902703301e-16,-4.718447854656915e-16,-4.213303303426952e-06,-1.1920928967568134e-07,4.097819375492584e-08 +14,fine,1,6.41577777571456e-08,0.3027343237918107,True,2.5937333703041077e-06,2.3562461137771606e-07,1.5087425708770752e-07,-1.5074747006238454e-14,3.469446951953614e-17,-2.7755575615628914e-17,2.5937333853788547e-06,2.356246113430216e-07,1.508742571154631e-07 +14,fine,2,8.133550555289304e-08,0.27001943973665604,True,2.884306013584137e-06,1.3597309589385986e-07,1.3690441846847534e-07,-1.4148404670066839e-14,-1.8388068845354155e-16,-1.3530843112619095e-16,2.8843060277325416e-06,1.3597309607774055e-07,1.3690441860378377e-07 +14,coarse,1,9.602967243615979e-08,0.3371390787341595,True,-2.9336661100387573e-06,1.5087425708770752e-07,1.2479722499847412e-07,-2.4147350785597155e-14,7.494005416219807e-16,-1.942890293094024e-16,-2.9336660858914065e-06,1.5087425633830698e-07,1.2479722519276315e-07 +15,fine,1,6.68482650345581e-08,0.3076171427746889,True,2.0759180188179016e-06,3.3527612686157227e-08,3.3527612686157227e-08,-1.462545362596046e-14,2.654126918244515e-16,-3.694961003830599e-16,2.0759180334433552e-06,3.3527612420744535e-08,3.352761305565333e-08 +15,fine,2,7.512668886988649e-08,0.28124994080281324,True,2.1229498088359833e-06,1.2246891856193542e-07,1.4388933777809143e-07,-1.3600232051658168e-14,-2.6020852139652106e-16,-4.0245584642661925e-16,2.1229498224362153e-06,1.2246891882214395e-07,1.4388933818054728e-07 +15,coarse,1,1.0723740850870911e-07,0.41406218567886527,True,-3.604218363761902e-06,2.514570951461792e-07,2.8870999813079834e-07,-2.2641610808449286e-14,2.2898349882893854e-16,-2.8449465006019636e-16,-3.604218341120291e-06,2.514570949171957e-07,2.88709998415293e-07 +16,fine,1,7.098747656364424e-08,0.32714839408436125,True,2.566725015640259e-06,9.033828973770142e-08,6.426125764846802e-08,-1.4136261605735001e-14,5.724587470723463e-17,3.7296554733501353e-16,2.5667250297765204e-06,9.033828968045554e-08,6.426125727550247e-08 +16,fine,2,6.767610849500727e-08,0.28320307876856565,True,2.248678356409073e-06,1.969747245311737e-07,2.3748725652694702e-08,-1.4096362965787534e-14,-1.7694179454963432e-16,-2.6020852139652106e-16,2.248678370505436e-06,1.969747247081155e-07,2.3748725912903224e-08 +16,coarse,1,1.1131294752608767e-07,0.344951775990682,True,-8.195638656616211e-07,2.5704503059387207e-07,3.7997961044311523e-07,-2.4764912343044898e-14,-8.673617379884035e-16,7.632783294297951e-17,-8.195638408967088e-07,2.570450314612338e-07,3.799796103667874e-07 +17,fine,1,6.063944912870767e-08,0.2998044890847571,True,2.319924533367157e-06,9.406358003616333e-08,6.798654794692993e-08,-1.590221010427939e-14,1.1622647289044608e-16,-2.237793284010081e-16,2.319924549269367e-06,9.406357991993686e-08,6.798654817070926e-08 +17,fine,2,8.506079685055568e-08,0.3017577892533187,True,2.0246952772140503e-06,1.4808028936386108e-07,4.190951585769653e-08,-1.4058199049316045e-14,-9.367506770274758e-17,-2.463307335887066e-16,2.0246952912722493e-06,1.4808028945753615e-07,4.190951610402727e-08 +17,coarse,1,8.329367096049367e-08,0.37439878535241283,True,-2.942979335784912e-07,1.2665987014770508e-07,2.5331974029541016e-07,-2.1892210266827306e-14,4.926614671774132e-16,9.020562075079397e-17,-2.9429791168628094e-07,1.266598696550436e-07,2.5331974020520454e-07 +18,fine,1,6.995265811049478e-08,0.2617189776211021,True,1.6298145055770874e-06,5.494803190231323e-08,-3.5390257835388184e-08,-1.580506558962469e-14,-1.8561541192951836e-16,5.204170427930421e-18,1.629814521382153e-06,5.4948032087928644e-08,-3.5390257840592354e-08 +18,fine,2,6.477865954757078e-08,0.30517565195263086,True,1.5725381672382355e-06,4.423782229423523e-08,-3.771856427192688e-08,-1.470698562933137e-14,1.5612511283791264e-16,-1.7694179454963432e-16,1.572538181945221e-06,4.4237822138110117e-08,-3.7718564094985085e-08 +18,coarse,1,1.1793568432949542e-07,0.4212736354253594,True,-1.5087425708770752e-06,-1.043081283569336e-07,3.3527612686157227e-07,-2.4147350785597155e-14,2.0816681711721685e-16,3.608224830031759e-16,-1.5087425467297244e-06,-1.0430812856510041e-07,3.352761265007498e-07 +19,fine,1,6.871091096094517e-08,0.31933573148866196,True,1.2880191206932068e-06,1.7043203115463257e-07,-9.12696123123169e-08,-1.4236875567341656e-14,2.0990154059319366e-16,2.8622937353617317e-16,1.2880191349300824e-06,1.7043203094473103e-07,-9.126961259854627e-08 +19,fine,2,7.491972742190711e-08,0.24023424324702233,True,1.1730007827281952e-06,-2.468004822731018e-08,-1.327134668827057e-07,-1.3513495877859327e-14,-1.0061396160665481e-16,-8.673617379884035e-17,1.173000796241691e-06,-2.468004812669622e-08,-1.3271346679596951e-07 +19,coarse,1,9.475610251996613e-08,0.35516793189978335,True,-1.5124678611755371e-06,8.940696716308594e-08,1.7136335372924805e-07,-2.3293866835416566e-14,1.3183898417423734e-16,7.147060721024445e-16,-1.5124678378816703e-06,8.940696703124695e-08,1.7136335301454197e-07 +20,fine,1,7.098746790390464e-08,0.2802732595156336,True,1.6228295862674713e-06,4.423782229423523e-08,-2.277083694934845e-07,-1.5477202852665073e-14,1.8735013540549517e-16,2.7755575615628914e-17,1.6228296017446742e-06,4.4237822106885094e-08,-2.2770836952124007e-07 +20,fine,2,8.112854432695826e-08,0.32421854647703796,True,1.5408731997013092e-06,6.05359673500061e-09,-2.2863969206809998e-07,-1.490300938211675e-14,3.2439329000766293e-16,-1.0234868508263162e-16,1.5408732146043186e-06,6.05359641060732e-09,-2.286396919657513e-07 +20,coarse,1,9.781275722708926e-08,0.4218746642002769,True,-6.798654794692993e-07,-1.8812716007232666e-07,6.146728992462158e-08,-2.1871393585115584e-14,-1.1102230246251565e-16,9.43689570931383e-16,-6.798654575979057e-07,-1.8812715996130436e-07,6.146728898093201e-08 +21,fine,1,7.30570710594236e-08,0.2949216850976223,True,1.6815029084682465e-06,4.237517714500427e-08,-1.2712553143501282e-07,-1.4618514732056553e-14,8.500145032286355e-17,3.625572064791527e-16,1.6815029230867612e-06,4.237517706000282e-08,-1.2712553179757002e-07 +21,fine,2,6.68482604826437e-08,0.2656249015126583,True,1.530628651380539e-06,6.472691893577576e-08,-1.0104849934577942e-07,-1.4838824613505608e-14,-3.2612801348363973e-16,4.85722573273506e-17,1.5306286662193636e-06,6.472691926190377e-08,-1.0104849939435168e-07 +21,coarse,1,1.1487904549856154e-07,0.3810092874429201,True,-8.23289155960083e-07,-2.5704503059387207e-07,3.0174851417541504e-07,-2.7519653222896068e-14,-1.3877787807814457e-16,-8.326672684688674e-16,-8.232891284404298e-07,-2.570450304550942e-07,3.017485150080823e-07 +22,fine,1,6.788306161631397e-08,0.30419906371761746,True,1.2782402336597443e-06,1.816079020500183e-08,-2.416782081127167e-07,-1.4958520533348008e-14,-1.1275702593849246e-16,-8.153200337090993e-17,1.2782402486182648e-06,1.8160790317758857e-08,-2.4167820803118467e-07 +22,fine,2,7.098746757083774e-08,0.3193357487763267,True,1.34296715259552e-06,4.190951585769653e-08,-1.3690441846847534e-07,-1.436524510456394e-14,2.2551405187698492e-17,-4.0419056990259605e-16,1.3429671669607651e-06,4.190951583514513e-08,-1.3690441806428477e-07 +22,coarse,1,9.781274745712665e-08,0.4098554174530562,True,-2.427026629447937e-06,-2.1047890186309814e-07,-5.4016709327697754e-08,-2.54379850517239e-14,4.0245584642661925e-16,4.3021142204224816e-16,-2.427026604009952e-06,-2.10478902265554e-07,-5.4016709757909176e-08 +23,fine,1,8.754431335411539e-08,0.26367162956761353,True,1.911073923110962e-06,9.96515154838562e-08,-1.434236764907837e-07,-1.4030443473700416e-14,-3.3306690738754696e-16,-3.434752482434078e-16,1.9110739371414054e-06,9.965151581692311e-08,-1.4342367614730844e-07 +23,fine,2,7.491972731088481e-08,0.29589836062223757,True,9.583309292793274e-07,1.4808028936386108e-07,-8.381903171539307e-08,-1.40391170910803e-14,-1.5439038936193583e-16,3.2959746043559335e-17,9.583309433184445e-07,1.4808028951825147e-07,-8.381903174835281e-08 +23,coarse,1,9.883161822266118e-08,0.46394191845799526,True,-4.954636096954346e-07,-6.332993507385254e-08,1.2665987014770508e-07,-2.6922908347160046e-14,2.220446049250313e-16,1.942890293094024e-16,-4.954635827725262e-07,-6.332993529589714e-08,1.2665986995341605e-07 +24,fine,1,7.098748533440613e-08,0.34619121759181026,True,1.4575198292732239e-06,1.043081283569336e-07,-1.0058283805847168e-07,-1.4247283908197517e-14,8.153200337090993e-17,1.474514954580286e-16,1.4575198435205078e-06,1.0430812827540159e-07,-1.0058283820592318e-07 +24,fine,2,7.823108527649225e-08,0.30419908362462666,True,6.756745278835297e-07,2.0256265997886658e-07,-4.7031790018081665e-08,-1.4353102040232102e-14,-2.8449465006019636e-16,-1.8041124150158794e-16,6.756745422366317e-07,2.0256266026336123e-07,-4.7031789837670424e-08 +24,coarse,1,1.0749213752436759e-07,0.3774035044304019,True,-4.043802618980408e-06,-1.2852251529693604e-07,3.520399332046509e-07,-2.2246093855926574e-14,4.85722573273506e-16,1.3877787807814457e-17,-4.043802596734314e-06,-1.285225157826586e-07,3.520399331907731e-07 diff --git a/research/fine_surface_joint_20261014/zero_ledger.csv b/research/fine_surface_joint_20261014/zero_ledger.csv new file mode 100644 index 0000000..34a99bb --- /dev/null +++ b/research/fine_surface_joint_20261014/zero_ledger.csv @@ -0,0 +1,25 @@ +step,time,average_bound_ratio,leaf_m,leaf_px,leaf_py,delta_m,delta_px,delta_py,boundary_m,boundary_px,boundary_py,fine_transfer_m,fine_transfer_px,fine_transfer_py,coarse_transfer_m,coarse_transfer_px,coarse_transfer_py,raw_m,raw_px,raw_py,collision_drift_m,collision_drift_px,collision_drift_py,average_rounding_m,average_rounding_px,average_rounding_py,closure_m,closure_px,closure_py,cumulative_raw_m,cumulative_raw_px,cumulative_raw_py,cumulative_closure_m,cumulative_closure_px,cumulative_closure_py +1,1,0.28124994289828603,560.7500186339021,-1.4901161193847656e-08,-3.3527612686157227e-07,1.4455989003181458e-05,-1.4901161193847656e-08,-3.3527612686157227e-07,1.1175870895385742e-08,0.0,0.0,-3.557652235031128e-07,0.0,0.0,5.308538675308228e-07,-1.862645149230957e-09,-1.7695128917694092e-07,1.4269724488258362e-05,-1.30385160446167e-08,-1.5832483768463135e-07,1.4269724488258362e-05,-1.30385160446167e-08,-1.5832483768463135e-07,1.7508864402770996e-07,-1.862645149230957e-09,-1.7695128917694092e-07,0.0,0.0,0.0,1.4269724488258362e-05,-1.30385160446167e-08,-1.5832483768463135e-07,0.0,0.0,0.0 +2,2,0.37499987985940486,560.7500202683732,-5.038455128669739e-07,-6.919726729393005e-07,1.6344711184501648e-06,-4.889443516731262e-07,-3.5669654607772827e-07,2.9802322387695312e-08,0.0,0.0,-2.193264663219452e-06,-4.6566128730773926e-09,-1.685693860054016e-07,2.032145857810974e-06,-1.5087425708770752e-07,1.695007085800171e-07,1.7657876014709473e-06,-3.334134817123413e-07,-3.5762786865234375e-07,1.7657876014709473e-06,-3.334134817123413e-07,-3.5762786865234375e-07,-1.6111880540847778e-07,-1.555308699607849e-07,9.313225746154785e-10,0.0,0.0,0.0,1.603551208972931e-05,-3.46451997756958e-07,-5.159527063369751e-07,0.0,0.0,0.0 +3,3,0.2812499146093721,560.750041406136,4.516914486885071e-08,-2.0442530512809753e-07,2.1137762814760208e-05,5.490146577358246e-07,4.87547367811203e-07,2.9802322387695312e-08,0.0,0.0,-3.6400742828845978e-06,4.698522388935089e-07,4.6798959374427795e-07,3.641471266746521e-06,-4.637986421585083e-07,-4.600733518600464e-07,2.110656350851059e-05,5.42961061000824e-07,4.796311259269714e-07,2.110656350851059e-05,5.42961061000824e-07,4.796311259269714e-07,1.3969838619232178e-09,6.05359673500061e-09,7.916241884231567e-09,0.0,0.0,0.0,3.71420755982399e-05,1.9650906324386597e-07,-3.632158041000366e-08,0.0,0.0,0.0 +4,4,0.37499987985940486,560.7500747130252,1.3741664588451385e-06,9.83942300081253e-07,3.330688923597336e-05,1.3289973139762878e-06,1.1883676052093506e-06,2.9802322387695312e-08,0.0,0.0,-6.910879164934158e-06,3.1711533665657043e-07,3.9534643292427063e-07,6.800517439842224e-06,-2.6263296604156494e-07,-3.371387720108032e-07,3.33874486386776e-05,1.2745149433612823e-06,1.1301599442958832e-06,3.33874486386776e-05,1.2745149433612823e-06,1.1301599442958832e-06,-1.103617250919342e-07,5.448237061500549e-08,5.820766091346741e-08,0.0,0.0,0.0,7.05295242369175e-05,1.4710240066051483e-06,1.0938383638858795e-06,0.0,0.0,0.0 +5,5,0.3749998295680158,560.7501105009578,2.3622997105121613e-06,2.369750291109085e-06,3.578793257474899e-05,9.881332516670227e-07,1.385807991027832e-06,2.9802322387695312e-08,0.0,0.0,-7.287599146366119e-06,1.0672956705093384e-06,4.637986421585083e-07,7.417052984237671e-06,-1.0095536708831787e-06,-4.023313522338867e-07,3.5628676414489746e-05,9.30391252040863e-07,1.3243407011032104e-06,3.5628676414489746e-05,9.30391252040863e-07,1.3243407011032104e-06,1.2945383787155151e-07,5.774199962615967e-08,6.146728992462158e-08,0.0,0.0,0.0,0.00010615820065140724,2.4014152586460114e-06,2.41817906498909e-06,0.0,0.0,0.0 +6,6,0.46874973195382685,560.7501414637081,2.941582351922989e-06,2.4265609681606293e-06,3.09627503156662e-05,5.792826414108276e-07,5.681067705154419e-08,2.9802322387695312e-08,0.0,0.0,-5.653128027915955e-06,6.584450602531433e-07,-5.960464477539063e-08,5.5246055126190186e-06,-7.562339305877686e-07,-4.470348358154297e-08,3.106147050857544e-05,6.770715117454529e-07,1.6111880540847778e-07,3.106147050857544e-05,6.770715117454529e-07,1.6111880540847778e-07,-1.2852251529693604e-07,-9.778887033462524e-08,-1.043081283569336e-07,0.0,0.0,0.0,0.00013721967115998268,3.0784867703914642e-06,2.5792978703975677e-06,0.0,0.0,0.0 +7,7,0.4687496533735736,560.7501708613709,3.914348781108856e-06,2.1560117602348328e-06,2.9397662729024887e-05,9.727664291858673e-07,-2.705492079257965e-07,7.869675755500793e-08,-9.546056389808655e-08,-6.100162863731384e-08,-4.661735147237778e-06,2.398155629634857e-07,-5.2619725465774536e-08,4.654750227928162e-06,-2.849847078323364e-07,3.5390257835388184e-08,2.9325950890779495e-05,1.1133961379528046e-06,-1.9231811165809631e-07,2.9325950890779495e-05,1.1133961379528046e-06,-1.9231811165809631e-07,-6.984919309616089e-09,-4.516914486885071e-08,-1.7229467630386353e-08,0.0,0.0,0.0,0.00016654562205076218,4.191882908344269e-06,2.3869797587394714e-06,0.0,0.0,0.0 +8,8,0.4687496533735736,560.7501910906285,4.438683390617371e-06,1.5152618288993835e-06,2.022925764322281e-05,5.243346095085144e-07,-6.407499313354492e-07,1.3690441846847534e-07,-7.078051567077637e-08,-5.029141902923584e-08,-4.91878017783165e-06,4.409812390804291e-07,1.2619420886039734e-07,4.896894097328186e-06,-5.047768354415894e-07,-2.0302832126617432e-07,2.0114239305257797e-05,6.58910721540451e-07,-5.136243999004364e-07,2.0114239305257797e-05,6.58910721540451e-07,-5.136243999004364e-07,-2.1886080503463745e-08,-6.379559636116028e-08,-7.683411240577698e-08,0.0,0.0,0.0,0.00018665986135601997,4.85079362988472e-06,1.873355358839035e-06,0.0,0.0,0.0 +9,9,0.37499998044222344,560.7502015968785,4.073604941368103e-06,6.379559636116028e-07,1.0506249964237213e-05,-3.650784492492676e-07,-8.773058652877808e-07,6.28642737865448e-08,-2.3050233721733093e-07,-2.6496127247810364e-07,-5.146954208612442e-06,3.5157427191734314e-07,-1.9790604710578918e-07,5.0961971282958984e-06,-3.427267074584961e-07,1.9371509552001953e-07,1.0494142770767212e-05,-1.434236764907837e-07,-6.081536412239075e-07,1.0494142770767212e-05,-1.434236764907837e-07,-6.081536412239075e-07,-5.075708031654358e-08,8.847564458847046e-09,-4.190951585769653e-09,0.0,0.0,0.0,0.00019715400412678719,4.707369953393936e-06,1.2652017176151276e-06,0.0,0.0,0.0 +10,10,0.4687496533735736,560.7502107927576,3.5660341382026672e-06,6.789341568946838e-07,9.195879101753235e-06,-5.075708031654358e-07,4.0978193283081055e-08,-1.1129304766654968e-07,-9.452924132347107e-08,-2.975575625896454e-07,-5.0514936447143555e-06,1.5739351511001587e-07,-6.798654794692993e-08,4.997476935386658e-06,-1.471489667892456e-07,3.91155481338501e-08,9.361188858747482e-06,-4.23286110162735e-07,3.674067556858063e-07,9.361188858747482e-06,-4.23286110162735e-07,3.674067556858063e-07,-5.4016709327697754e-08,1.0244548320770264e-08,-2.8870999813079834e-08,0.0,0.0,0.0,0.00020651519298553467,4.284083843231201e-06,1.6326084733009338e-06,0.0,0.0,0.0 +11,11,0.37499977927664024,560.7502121757716,3.314577043056488e-06,8.987262845039368e-07,1.3830140233039856e-06,-2.514570951461792e-07,2.1979212760925293e-07,-6.938353180885315e-08,-4.330649971961975e-08,-2.1560117602348328e-07,-5.153939127922058e-06,-8.381903171539307e-08,-2.60770320892334e-07,5.122274160385132e-06,6.705522537231445e-08,2.4586915969848633e-07,1.484062522649765e-06,-1.9138678908348083e-07,4.5029446482658386e-07,1.484062522649765e-06,-1.9138678908348083e-07,4.5029446482658386e-07,-3.166496753692627e-08,-1.6763806343078613e-08,-1.4901161193847656e-08,0.0,0.0,0.0,0.00020799925550818443,4.09269705414772e-06,2.0829029381275177e-06,0.0,0.0,0.0 +12,12,0.4687496533735736,560.750213930849,3.0328519642353058e-06,1.119915395975113e-06,1.7550773918628693e-06,-2.8172507882118225e-07,2.2118911147117615e-07,-3.632158041000366e-08,1.6763806343078613e-08,-7.171183824539185e-08,-5.262903869152069e-06,-1.1175870895385742e-08,-2.4866312742233276e-07,5.2247196435928345e-06,3.5390257835388184e-08,2.5890767574310303e-07,1.8295831978321075e-06,-3.227032721042633e-07,2.8265640139579773e-07,1.8295831978321075e-06,-3.227032721042633e-07,2.8265640139579773e-07,-3.818422555923462e-08,2.421438694000244e-08,1.0244548320770264e-08,0.0,0.0,0.0,0.00020982883870601654,3.769993782043457e-06,2.3655593395233154e-06,0.0,0.0,0.0 +13,13,0.37499977927664024,560.7502138046548,3.2046809792518616e-06,1.4081597328186035e-06,-1.2619420886039734e-07,1.7182901501655579e-07,2.882443368434906e-07,-2.3283064365386963e-08,3.073364496231079e-08,-6.51925802230835e-09,-4.963483661413193e-06,-2.016313374042511e-07,-3.8137659430503845e-07,4.928559064865112e-06,2.0489096641540527e-07,3.948807716369629e-07,-6.798654794692993e-08,1.3783574104309082e-07,2.812594175338745e-07,-6.798654794692993e-08,1.3783574104309082e-07,2.812594175338745e-07,-3.4924596548080444e-08,3.259629011154175e-09,1.3504177331924438e-08,0.0,0.0,0.0,0.0002097608521580696,3.907829523086548e-06,2.64681875705719e-06,0.0,0.0,0.0 +14,14,0.46874959050938997,560.7502162489109,3.7285499274730682e-06,1.762527972459793e-06,2.4442560970783234e-06,5.238689482212067e-07,3.543682396411896e-07,-3.026798367500305e-08,-1.3969838619232178e-09,-3.3993273973464966e-08,-4.4191256165504456e-06,-1.9650906324386597e-07,-5.21540641784668e-07,4.349276423454285e-06,1.993030309677124e-07,4.973262548446655e-07,2.5443732738494873e-06,5.224719643592834e-07,4.12575900554657e-07,2.5443732738494873e-06,5.224719643592834e-07,4.12575900554657e-07,-6.984919309616089e-08,2.7939677238464355e-09,-2.421438694000244e-08,0.0,0.0,0.0,0.0002123052254319191,4.430301487445831e-06,3.059394657611847e-06,0.0,0.0,0.0 +15,15,0.4687496533735736,560.7502168049105,4.124362021684647e-06,2.1760351955890656e-06,5.559995770454407e-07,3.9581209421157837e-07,4.1350722312927246e-07,-1.30385160446167e-08,1.4901161193847656e-08,-3.073364496231079e-08,-3.9315782487392426e-06,-2.3702159523963928e-07,-5.564652383327484e-07,3.905966877937317e-06,2.1047890186309814e-07,5.345791578292847e-07,5.94649463891983e-07,4.0745362639427185e-07,4.66126948595047e-07,5.94649463891983e-07,4.0745362639427185e-07,4.66126948595047e-07,-2.561137080192566e-08,-2.6542693376541138e-08,-2.1886080503463745e-08,0.0,0.0,0.0,0.00021289987489581108,4.837755113840103e-06,3.525521606206894e-06,0.0,0.0,0.0 +16,16,0.46874959050938997,560.7502207290381,4.730187356472015e-06,2.6812776923179626e-06,3.924127668142319e-06,6.058253347873688e-07,5.052424967288971e-07,-1.816079020500183e-08,3.119930624961853e-08,4.0512531995773315e-08,-3.7918798625469208e-06,-2.4354085326194763e-07,-2.1373853087425232e-07,3.7383288145065308e-06,2.738088369369507e-07,2.1047890186309814e-07,3.9958395063877106e-06,5.443580448627472e-07,4.6798959374427795e-07,3.9958395063877106e-06,5.443580448627472e-07,4.6798959374427795e-07,-5.3551048040390015e-08,3.026798367500305e-08,-3.259629011154175e-09,0.0,0.0,0.0,0.0002168957144021988,5.38211315870285e-06,3.993511199951172e-06,0.0,0.0,0.0 +17,17,0.4687496533735736,560.7502247327939,5.152076482772827e-06,3.11434268951416e-06,4.003755748271942e-06,4.2188912630081177e-07,4.330649971961975e-07,-2.2351741790771484e-08,4.377216100692749e-08,8.847564458847046e-08,-3.375113010406494e-06,-3.2782554626464844e-07,-1.3597309589385986e-07,3.3508986234664917e-06,3.371387720108032e-07,1.1734664440155029e-07,4.050321877002716e-06,3.688037395477295e-07,3.632158041000366e-07,4.050321877002716e-06,3.688037395477295e-07,3.632158041000366e-07,-2.421438694000244e-08,9.313225746154785e-09,-1.862645149230957e-08,0.0,0.0,0.0,0.0002209460362792015,5.75091689825058e-06,4.3567270040512085e-06,0.0,0.0,0.0 +18,18,0.37499977927664024,560.7502263993956,5.057547241449356e-06,3.395136445760727e-06,1.6666017472743988e-06,-9.452924132347107e-08,2.8079375624656677e-07,-4.190951585769653e-09,-9.266659617424011e-08,3.213062882423401e-08,-2.8391368687152863e-06,-1.0849907994270325e-07,3.4924596548080444e-08,2.816319465637207e-06,1.1175870895385742e-07,-4.842877388000488e-08,1.6936101019382477e-06,-5.122274160385132e-09,2.621673047542572e-07,1.6936101019382477e-06,-5.122274160385132e-09,2.621673047542572e-07,-2.2817403078079224e-08,3.259629011154175e-09,-1.3504177331924438e-08,0.0,0.0,0.0,0.00022263964638113976,5.745794624090195e-06,4.618894308805466e-06,0.0,0.0,0.0 +19,19,0.4687496533735736,560.7502272753045,5.105510354042053e-06,3.3779069781303406e-06,8.759088814258575e-07,4.7963112592697144e-08,-1.7229467630386353e-08,-6.51925802230835e-09,-2.0023435354232788e-07,1.30385160446167e-08,-2.5546178221702576e-06,-1.30385160446167e-08,-2.60770320892334e-08,2.4884939193725586e-06,2.60770320892334e-08,4.842877388000488e-08,9.485520422458649e-07,2.3515895009040833e-07,-5.2619725465774536e-08,9.485520422458649e-07,2.3515895009040833e-07,-5.2619725465774536e-08,-6.612390279769897e-08,1.30385160446167e-08,2.2351741790771484e-08,0.0,0.0,0.0,0.00022358819842338562,5.980953574180603e-06,4.566274583339691e-06,0.0,0.0,0.0 +20,20,0.37499977927664024,560.7502297507599,4.798173904418945e-06,3.063119947910309e-06,2.475455403327942e-06,-3.073364496231079e-07,-3.1478703022003174e-07,-9.313225746154785e-09,-1.8440186977386475e-07,6.332993507385254e-08,-2.4726614356040955e-06,1.6763806343078613e-07,2.7939677238464355e-08,2.473592758178711e-06,-1.5273690223693848e-07,-1.1175870895385742e-08,2.483837306499481e-06,-1.3783574104309082e-07,-3.948807716369629e-07,2.483837306499481e-06,-1.3783574104309082e-07,-3.948807716369629e-07,9.313225746154785e-10,1.4901161193847656e-08,1.6763806343078613e-08,0.0,0.0,0.0,0.0002260720357298851,5.843117833137512e-06,4.171393811702728e-06,0.0,0.0,0.0 +21,21,0.46874973195382685,560.7502321340144,4.494562745094299e-06,3.1962990760803223e-06,2.3832544684410095e-06,-3.03611159324646e-07,1.3317912817001343e-07,4.656612873077393e-10,-1.671724021434784e-07,7.59027898311615e-08,-2.6640482246875763e-06,2.6496127247810364e-07,-1.1874362826347351e-07,2.6579946279525757e-06,-2.514570951461792e-07,1.0244548320770264e-07,2.3888424038887024e-06,-1.4994293451309204e-07,7.35744833946228e-08,2.3888424038887024e-06,-1.4994293451309204e-07,7.35744833946228e-08,-6.05359673500061e-09,1.3504177331924438e-08,-1.6298145055770874e-08,0.0,0.0,0.0,0.0002284608781337738,5.69317489862442e-06,4.244968295097351e-06,0.0,0.0,0.0 +22,22,0.37499977927664024,560.7502323002554,4.1215680539608e-06,2.848450094461441e-06,1.6624107956886292e-07,-3.7299469113349915e-07,-3.478489816188812e-07,4.656612873077393e-10,-1.9511207938194275e-07,8.149072527885437e-08,-2.8708018362522125e-06,2.48197466135025e-07,-3.3574178814888e-07,2.8423964977264404e-06,-2.7567148208618164e-07,3.390014171600342e-07,1.9418075680732727e-07,-1.5040859580039978e-07,-4.3259933590888977e-07,1.9418075680732727e-07,-1.5040859580039978e-07,-4.3259933590888977e-07,-2.8405338525772095e-08,-2.7474015951156616e-08,3.259629011154175e-09,0.0,0.0,0.0,0.00022865505889058113,5.54276630282402e-06,3.8123689591884613e-06,0.0,0.0,0.0 +23,23,0.46874973195382685,560.7502347086556,4.095491021871567e-06,2.866145223379135e-06,2.4084001779556274e-06,-2.60770320892334e-08,1.7695128917694092e-08,1.909211277961731e-08,-2.2398307919502258e-07,8.335337042808533e-08,-2.6407651603221893e-06,7.683411240577698e-08,-1.9231811165809631e-07,2.6561319828033447e-06,-6.332993507385254e-08,2.2724270820617676e-07,2.3739412426948547e-06,1.8440186977386475e-07,-1.0058283805847168e-07,2.3739412426948547e-06,1.8440186977386475e-07,-1.0058283805847168e-07,1.5366822481155396e-08,1.3504177331924438e-08,3.4924596548080444e-08,0.0,0.0,0.0,0.00023102900013327599,5.727168172597885e-06,3.7117861211299896e-06,0.0,0.0,0.0 +24,24,0.46874973195382685,560.7502328557894,4.124827682971954e-06,3.1795352697372437e-06,-1.8528662621974945e-06,2.9336661100387573e-08,3.133900463581085e-07,1.6763806343078613e-08,-1.30385160446167e-07,1.0058283805847168e-07,-2.0116567611694336e-06,7.450580596923828e-08,-6.239861249923706e-08,2.0526349544525146e-06,-9.313225746154785e-08,7.078051567077637e-08,-1.910608261823654e-06,1.7834827303886414e-07,2.0442530512809753e-07,-1.910608261823654e-06,1.7834827303886414e-07,2.0442530512809753e-07,4.0978193283081055e-08,-1.862645149230957e-08,8.381903171539307e-09,0.0,0.0,0.0,0.00022911839187145233,5.905516445636749e-06,3.916211426258087e-06,0.0,0.0,0.0 diff --git a/research/fine_surface_joint_20261014/zero_signals.npz b/research/fine_surface_joint_20261014/zero_signals.npz new file mode 100644 index 0000000..a966f09 Binary files /dev/null and b/research/fine_surface_joint_20261014/zero_signals.npz differ diff --git a/research/fine_surface_joint_20261014/zero_summary.json b/research/fine_surface_joint_20261014/zero_summary.json new file mode 100644 index 0000000..6e033f9 --- /dev/null +++ b/research/fine_surface_joint_20261014/zero_summary.json @@ -0,0 +1,67 @@ +{ + "speed": 0.0, + "initial_leaf": [ + 560.7500041779131, + 0.0, + 0.0 + ], + "final_leaf": [ + 560.7502328557894, + 4.124827682971954e-06, + 3.1795352697372437e-06 + ], + "raw_residual": [ + 0.00022911839187145233, + 5.905516445636749e-06, + 3.916211426258087e-06 + ], + "exact_average_residual": [ + 0.00022854655981063843, + 5.717389285564423e-06, + 3.6330893635749817e-06 + ], + "cumulative": { + "boundary": [ + 1.3131648302078247e-07, + -1.5925616025924683e-06, + -4.5355409383773804e-07 + ], + "fine_transfer": [ + -9.47713851928711e-05, + 3.1068921089172363e-06, + -2.084299921989441e-06 + ], + "coarse_transfer": [ + 9.419955313205719e-05, + -3.295019268989563e-06, + 1.8011778593063354e-06 + ], + "rounding": [ + 0.00022911839187145233, + 5.905516445636749e-06, + 3.916211426258087e-06 + ], + "average": [ + -5.718320608139038e-07, + -1.8812716007232666e-07, + -2.8312206268310547e-07 + ] + }, + "checks": { + "validity": true, + "geometry_unchanged": true, + "boundary_count": 48, + "collision_count": 72, + "local_collision": true, + "local_regime": true, + "bfl": true, + "transfer_rounding": true, + "interval_closure": true, + "cumulative_closure": true + }, + "max_collision_ratio": 0.46394191845799526, + "max_collision_error": 1.2914339875269576e-07, + "max_bfl_error": 1.0332863675799331e-08, + "max_interval_closure": 0.0, + "drive_mass": 3.733417470608985e-07 +} diff --git a/research/fixed_patch_jet_20261013/baseline.json b/research/fixed_patch_jet_20261013/baseline.json new file mode 100644 index 0000000..91ad9c4 --- /dev/null +++ b/research/fixed_patch_jet_20261013/baseline.json @@ -0,0 +1,536 @@ +{ + "hashes": { + "src/CelerisLab.egg-info/PKG-INFO": "0b9a8a4e8d60bc531473688723ddef0aab02c7ccc4997e31c9b6a6c35011ca77", + "src/CelerisLab.egg-info/top_level.txt": "cd51958ca03afabbaa9618c60b8280e486f8cc0b0359b839e10f886e7c3948f8", + "src/CelerisLab.egg-info/dependency_links.txt": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "src/CelerisLab.egg-info/requires.txt": "36e1404178e5ea590b2fc04e8ba4d748ec9a82e7693136ccf0dfd204fe265c04", + "src/CelerisLab.egg-info/SOURCES.txt": "f36b29c1b34c4bd6b2acc3ccdd21c24ee5077df7e2a20a652d9fae77eedb8e21", + "src/CelerisLab/simulation.py": "34d69e71844f553790c5a2bed0f8fbfb912a9498e95b500d1ef2ad41cae3b424", + "src/CelerisLab/config.py": "2f1bba7515f5bc08cb3a8d140bcafe7fa0689e01b3b06494697bb2956a71530e", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/cuda/compiler_v2.py": "c4cc3ec4445c8d75e6a253dd87963877117a722bc73b9d4811806fc6045d08c1", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/lbm/refinement_stepper.py": "ad57a6a3887b007488b4954b24ff06cd8cde2b12674bdafb97bfda1961ae1da4", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/refinement.py": "554735c5613129eb29f339c6aeeb4f3a3bbc5aba67558be51fbf7c2fb6ac442a", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/refinement.cu": "025c59dc9c207a831e78e1635cb3f14fe60b64c021004a0d66e5d01fda8554b5", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/kernel_v2.ptx": "a599ee30ae66800f4d4220eb79dfed35ff32991661260f01ea58023ef780f0ca", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "f9f8242b38e8e0cf8425b75e2b0215bc15363c62eaa0fb43c761b8e0931bfdc9", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/common/checkpoint.py": "5b7caf3896167a3f37c539b58837de6eb3f8085fa7bf5f821a09666cc16d43a4", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/CONFIG.md": "41cafdbe525366c08aa9d0416ea026ccf0026ba7123b8a9b65f968a80d928e3a", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_j1.py": "51b758a271ff358f931b3140a80082294a67e66c2fec0f8c19319e37f92aadc4", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_j2_slot.py": "b7d2d3aa06fcafc3ac62ed4a50892afbdb7f86e5720ce75a39ce317b6f571dad", + "tests/validation/run_j3_coverage.py": "329869519b7078e854d96241a7aad8ef93f35ac9be83f0be502c3a93523c3b13", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/analyze_j3_saved_frames.py": "438f67dac682b94c4950626f8de4fdcde48c3a4e9ecf8fdf1b0ada4b6e0e781a", + "tests/validation/diagnose_j3_lags.py": "286fcd65b3261667a847b9b26e213d0af92cf459faa6bbd774f78c8479ce31d7", + "tests/validation/run_j3_reservoir.py": "47535bc3569ce68c888d38978bc4f9077fd763a17829c20c081be52bb18a2903", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9", + "tests/validation/multigrid/test_cpu_reference.py": "ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca", + "tests/validation/multigrid/cpu_reference.py": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "tests/validation/multigrid/cpu_reference_v0.2.py": "b6adbad7da625ef6a6b97958ea9625030ed92676d0cada48e061c87bcf7ca8c9", + "tests/validation/multigrid/test_open_corner_negative_control.py": "59a6f8ca80cdd63cb7827fbebf9b4b555c3793f19dd6bca801544ec10b5cbe1b", + "tests/validation/multigrid/test_refinement_followup.py": "6643e26cd877bf0d0f030e974f00a1d1c0f0350cc76d1c8affed3e8ba2f4393b", + "tests/validation/multigrid/local_stress_observable_v1.py": "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456", + "tests/validation/multigrid/test_refinement_gpu.py": "0021a39b3a131347196845cff6507c90c387b46b772fe1319d634178c5e13354", + "tests/validation/multigrid/shear_diagnostic_v0_2.py": "a8b1cf2f7abd00efc4d068bbd27bb2317144a6ca4c545d9b2e0dcf421eadebc6", + "tests/validation/multigrid/test_tron_additions.py": "8e7a6a90b85e64c7326719e7b8bca2f6d34fb4c80690f0685f7e291ab93bd2a4", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt": "0577df5b3f5cb3c7b6e1ef2de71344f8fd3e6d959117487a06cbaf7f2afa3dea", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt": "28ddd1267ca91a772f5a6bfc65d949c9a4ea7dac5c9ba3a0bdb168492810b670", + "tests/validation/multigrid/shear_v0_2_evidence/run_once.py": "6698a2e040c56be949b809387d4518eb0ba82d34cc9d99640da4f8bf3c35c23f", + "tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json": "56fbd0259ff3d4dbd14ace52f64e249a435e9df91732b0e4027def2c344c2e6a", + "tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json": "c2d7ce8d16a0f47baff0788a153353dcf67088da974d9cd3d521b04ecd91ee05", + "tests/validation/multigrid/shear_v0_2_evidence/comparison.json": "41c00372099dd04b6d323785e9eaf4fec09da1753d3d150ffa230800f904142f", + "tests/validation/multigrid/shear_v0_2_evidence/baseline.json": "98a7853341ea732762c7506694e3a867a7259bf110e9e461ea84f741fd9ab829", + "tests/validation/multigrid/shear_v0_2_evidence/manifest.json": "e42aa19e91608164698bea42da88fbbfab8b0f87cc37b27c5baf165453a4fdb0", + "tests/validation/multigrid/shear_v0_2_evidence/README.txt": "4306a34b6896bd6e7a5c2ca71d68e18450359239d0c7ad7a67a4e83e7155959a", + "tests/validation/multigrid/shear_v0_2_evidence/joint_report.md": "1860b8082108c8b8a87998af90cd0b81dce1c04e9f6c67b41e0912f9fef6cc9c", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_horsea.txt": "882f2cfb1dbdf82cce63c011397e7c2e6307bbcfec42a3510648d328cd6ddcfe", + "tests/validation/multigrid/local_stress_v1_evidence/run_once.py": "e629800291ef65ffea8555f66ec80bf15200552540b2a493a677bfb53d0830b3", + "tests/validation/multigrid/local_stress_v1_evidence/source_manifest.json": "d2cf90b73458f493c665c9a281d06aef0c190cf0d143639fb77ab838c78f020c", + "tests/validation/multigrid/local_stress_v1_evidence/results_horsea.json": "f17b4644d19eb75d55deb7021ab679cb9e7922a2b46f1cacf8b6da6bfb9a2690", + "tests/validation/multigrid/local_stress_v1_evidence/comparison.json": "be236671a501c31c06f7e266f6e0c0c2a89aede321a483452050ff37bf84c84a", + "tests/validation/multigrid/local_stress_v1_evidence/baseline.json": "64f6541447afbd15b1b15d802ad6f1b5042aaf84e7d4d2414e4ed4c52cf70507", + "tests/validation/multigrid/local_stress_v1_evidence/manifest.json": "3a9fa8c7d691c1b8c24f05940eb724d30b890dd8ed636551068d2633d7db2f70", + "tests/validation/multigrid/local_stress_v1_evidence/README.txt": "4f62314876047ee437bb9ecbf84798d2a9f6e85f6a3aef260277b85bcdb35fae", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_local_stress_observable_v1.txt": "6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4", + "tests/validation/multigrid/local_stress_v1_evidence/TABLE_local_stress_observable_v1.md": "d8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt": "457f1d2173496554c87ca6e61df518c0b8f1e0a28cdfd94b94ebbb61bc459d70", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt": "73e4ef01138842981daaa534390f1463839e63833c11f4e8872f94f8eaadc717", + "tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json": "914389afc39752bcd4132aa21fc8d5cbcf0ca75b1efd6a49becab15c2fa3361b", + "tests/validation/multigrid/cpuref_0_3_evidence/baseline.json": "0daaccee41cabeb17a00e2405e2c7fd0b80d36f2d01778eb39c9fd22b13d2d47", + "tests/validation/multigrid/cpuref_0_3_evidence/manifest.json": "2850ecaf2e19d010ba35eb54162371d82cc1a092831e08a03b6adf75a614988b", + "tests/validation/multigrid/cpuref_0_3_evidence/README.txt": "1947ee0232b88b3cc2c506d0b0af5ba051ecc94aa8f7f09228ef3939cc95919b", + "tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md": "065947e15b2242bce7d3eb05a3acdbb59939c621dcd5d31540ad4a1bd4416818", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_planar_velocity.py": "b656da0880b4234b1db805544edbe0d2473cbcc7c2c869c71d8251337f62a982", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_reservoir.py": "e718c78a53c3941aba7feb8ae4e8bb0b1726c1145de84febf91220c1917991c9", + "tests/unit/test_refinement.py": "90751142f920f1c5e988577a45afa94871a6617009cdc78323a87fc7795f4634", + "tests/unit/test_slot_velocity.py": "6a9494de9a32c350389ccbed58af48951f6b25a21a258537d2e8b73eb67cb11d", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/cpp/reservoir.cpp": "c3eacaf0271400eb45ad559b571a8f7faa2a809d5f1857ffeb5592addce2cd0c", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/slot_profile.cpp": "31ac58ccab175bf79fa59fc46d4c0842df18ab0a5e5916be84760d9da2b75788", + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C4_deceit_f1p5.json": "11dab8440d8c4f385061d2536403f4313c6f026b4e0b7672681327a9f4f37ebb", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C6_deceit_f2.json": "e0c4e8bcc55da5dc8de1e2fe88029aa3e67453734faa44451f5a6dfa9131557f", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C6_deceit_f2.png": "e0a66708ce2a29c4c6b854d2596b3ffca181dc6e35d99cc94e08af3e2d8c024e", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C3_deceit_multi.json": "24c8e433aab6d207dab67546c4079868c4244c2948c32c94cd08e4f331991807", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C0_no_ctrl.json": "cf3af733a08f081cc5f879e8da79d7c60104099f4452af5b2a4a96c0e6bd5889", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C5_deceit_multi_f1p5.json": "a4cb4ff4481b39b9ee61b1d7209416237a7fe86b22c5068d713ccec9c3f7afe4", + "tests/output/exp_ctrl_matrix_streak_ny300/manifest.json": "d8a20dacc92321d98354684976f771a9ca8989fc63ddcd78e15c7768c6617671", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C3_deceit_multi.png": "c6fed617cc6ffe6677157a9b58811d5f4613725eb98a5aec830fd07dc1aac38e", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C2_deceit.json": "7526a6b20a158461b85b1a64070b46c2b21be1e01c5ee025e6746fcf47ea3397", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C1_stealth.json": "63d34a0ab33e9fa8fe7311363efbd1b2875691f5b4958bb645b8c7ac38f1ad6b", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C0_no_ctrl.png": "0cfd7ce8f9d743bf22a7a694b4e5a3616557cb8f1db2f4ddf49cc4bef96efef2", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C4_deceit_f1p5.png": "4dcfc186928dcb83d28e9eb4cb2ecb4b163eb6f121d57036b4c05ab162be0951", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C1_stealth.png": "5e3cbbefda06fcef243d7d06d74a473972350cfa4ae88bdfdb349dce13943151", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C2_deceit.png": "22f1db77499bdbd1b3cd35f5b58b1a884dd94a86fdcfef07abd4157e6aaf8d19", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C5_deceit_multi_f1p5.png": "823e475cc901af3d6f4d0c56eb07822b3e73a2b9d0aa23e20e3741023fe90092", + "tests/output/kan99b_validation_esopull/summary_runs.json": "fe3294a953580204319fb1143434e15096d8455b6073100dfe0d5491b76af394", + "tests/output/kan99b_validation_esopull/summary_runs.csv": "1a44bb27ee0a7fe0270905248c37364834248cdc8710bd68142a6a79bbdad82b", + "tests/output/kan99b_validation_esopull/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "9fbc7d507c129ed85c68a9a313e3eb3431470d091bd7723e63f8afd8a3d2b737", + "tests/output/kan99b_validation_esopull/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "8faac43f42d6e0c70085c6e616bfff4df8de897e315fc0d2b4aa8bd635c3fa05", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C4_deceit_f1p5.json": "b613ae55fcfbd45a1a922d6d529e5274ba9d2987fdf5620fe866b889b931e48c", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C6_deceit_f2.json": "dbf54f9a183072547b22fa14334f0167e6eefb21c1208c4e8584bc196545a399", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C3_deceit_multi.json": "2100c6cc5c358a249804ce8f6f98531f3bc868e27af6d21a9d441b1b6a9e479e", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C0_no_ctrl.json": "a8b4697b7c0caeb958f80e282e32d673deac8c914008d64e6b38f7883eacc57e", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C6_deceit_f2.h5": "8d0c28566d2230b422691b738cc453705496bd150be038a576c0c0fba218fc1f", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C5_deceit_multi_f1p5.h5": "608767ca11d104fa4506b57204a0c8dbd739688224ebd924fe517ce9e21db823", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C1_stealth.h5": "a83c988cc8b1173a7b2f13b132ed7243e98304dccab2965aa16cf4d32f8df007", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C5_deceit_multi_f1p5.json": "6f6b9300782178e0ac9308a677bd9cb1565a383a78dff4cd52dea0bd464db31d", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C6_deceit_f2.png": "21bbe2dac1ab06ca1b172ec62d00daa7bcd65d99adac0ed03c5e30bed59e871a", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C5_deceit_multi_f1p5.png": "602a6586277699968b4cb167b134c8c406577038af088aa70baff682691398c4", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C1_stealth.png": "c1e1d04f266deac5fb2815a8283da80f9139ffaccbec2219d98544296bf3152c", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C4_deceit_f1p5.png": "96dee924e89b90091192a8d7b43321f109a5491511b8a83da77cfc611ae0d93b", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C2_deceit.h5": "aa5800a0cd594eeb7cf5449d6469d55e0c9033ced0ee0a3b5d59152e68c7e263", + "tests/output/exp_ctrl_matrix_vort_nx1500/manifest.json": "5d28f0f5428d7f0341e20d5d1f19c17bbc6f0f9b2a441d3c95f5422f3f2b4bd4", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C2_deceit.png": "1dcb6fb959f944d7ad89c4abaaef4d1fd4a77db8901804530e86fb336b883eb5", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C2_deceit.json": "b88ff5049aef59876b349d105f1c3467c17c9ba9022a48a77a6984f20da34345", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C1_stealth.json": "515689cbfaa30a9e39d9907939ee194a4836b644a5e9124586e6b7221d2b394b", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C3_deceit_multi.png": "d69694a1a1b2f2ea0adc7b74b7526504e2ad0b5d6317bac9b3159b2e7e88cf90", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C0_no_ctrl.h5": "3a858d6be0a946e1d26bbfa192c2f0ca3910c0f140b42575ec9d9529dd99155a", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C4_deceit_f1p5.h5": "660e4619ea530dcd18c3afb2e7fa22cafd9cdba1be7888e31ab5b76a0902d2fc", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C0_no_ctrl.png": "6d4d3934f1c8b20c2a5c742ae080a7143f0c139741966adf009a227c27e9bb1f", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C3_deceit_multi.h5": "1e72126f11b2995437cecb8cc0eeffb8807efbfa43d8f346f28711fea98ddc90", + "tests/output/kan99b_validation_ref/summary_runs.json": "449316c30585a8de9997538dead5d4e35a59bf00a2ac22d01b101ab600a4bc06", + "tests/output/kan99b_validation_ref/summary_runs.csv": "e8b9620f3772e5e421026103e456e6e844a91292f40affb96174c9dbde9b6e4e", + "tests/output/kan99b_validation_ref/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "4391f41d17ebeea1092f13b901923ced4ee2a1c5b346b79ef791d692847286b5", + "tests/output/kan99b_validation_ref/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "105c6eb21f1943d9d935246eab1602ff2016c415a139e24fee2793e88e006ead", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C4_deceit_f1p5.json": "0085a679a423621003eea81d4ac83bfe2edef2879eed7809d2a3675a212f791a", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C6_deceit_f2.json": "e820cf73f0e90bf93c34b24416e7692a6c2e51352ccf490fa6714d0812331ca2", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C3_deceit_multi.json": "571370c74ad9af589f3dc214669bff3d857efe6fc4fa13815b5d793d12b53770", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C0_no_ctrl.json": "ec5b89961033d8ebe0d66ce1ec7940dc2faf98130c38319bc9984ef654e60b50", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C6_deceit_f2.h5": "2792be74d8564fa29fd0636fc8493630fba2779c165b44330197095b3e296b18", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C5_deceit_multi_f1p5.h5": "2c64ee6c7a4ea2c42ed8f3d274402bec62de0e02ea0340e16022f0cdc92af724", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C1_stealth.h5": "100727d94fe6c2e46d7807eed0442555bdd1e26ec9b04b4c457171a2bbba3255", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C5_deceit_multi_f1p5.json": "f86166f121b4eeb6d74d8176c9265e7a3ccfe2540d040f554b6f96e6a6222c16", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C6_deceit_f2.png": "fef4de0e3ac8203742f35c16a02445b19c3f556b11f73abd5d8e3ca05ca33d78", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C5_deceit_multi_f1p5.png": "9136448e6d7565ca5af3666f9cf6e154342d8a3475076abfdbdd1ff9faec34f3", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C1_stealth.png": "544537a9c500a05937fd3be17c25e7d887461d9b83a15564f9ab7063208f40f6", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C4_deceit_f1p5.png": "51e7056db99dd653affbe913d52fa41df6ec0db921109384e3c679bda06b5a83", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C2_deceit.h5": "39d6c162085acae1612650da37d2314757715931e83a854e08bb01407d0f8efc", + "tests/output/exp_ctrl_matrix_vort_ny300/manifest.json": "05fbc2e7bbad4267a38e1094bbdd6bee6ad270412bdb5e92b0dfc9fa56969517", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C2_deceit.png": "07fc5817eba30371272b87ee2e023c0a1144077d1bef77efb2fd5dc284badcb7", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C2_deceit.json": "b1fcf76039c91a9080b830352dee2e95316d754b968cc27a8f68c51527661e76", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C1_stealth.json": "b78851637b9b7b93070524a2933cae1dab6d682f8894579b2849c64921e6c29e", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C3_deceit_multi.png": "2658f0747ed7287f7912fe15cc58a086e01ba284277cb98689bac01ecb6ec12b", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C0_no_ctrl.h5": "57f73f5f8dc4b32b156bc82300b1efd1e4eddadd9b8dc51cb7e6b41fa5c966bd", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C4_deceit_f1p5.h5": "2864b9dd086709ee8b8c3f262118a5130b0d40c86838f3ca0deab5bb898dafa8", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C0_no_ctrl.png": "2c7f3a8be2ee540afdfb66299e43a65583434bee84bde590124524a82868c900", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C3_deceit_multi.h5": "39e0d9b032dfff8cf057b410a98973729285e7d03e89f9a6a002aaf7de3d7519", + "tests/output/stealth_sweep_fix_check/summary_stealth_s150_w0.02709.json": "8b1032e13975bb05c6a810fde175c8da51bacdb3dc745fd11c1049ca63bbf136", + "tests/output/stealth_sweep_fix_check/summary_stealth_s050_w0.00903.json": "fa7da24d5dab9fd3a3c2dea6b50d0224c7a99cd9141796e137304a6040b1ac8a", + "tests/output/stealth_sweep_fix_check/streakline_stealth_s050_w0.00903.png": "640928f7eb159e7caea32036123f86c281723d083cca46839ba86bce8361ada7", + "tests/output/stealth_sweep_fix_check/state_stealth_s050_w0.00903.h5": "187ac365f9f7370c888c4c65570c47e42465b2fccd432056c176528d45cf0c2f", + "tests/output/stealth_sweep_fix_check/manifest.json": "83a3f12a942fb644e470bd07a72f24921f2147d7df429110268c5c96a9953d1a", + "tests/output/stealth_sweep_fix_check/state_stealth_s150_w0.02709.h5": "e057e9db26b2546c0704e2c959cc7d2aac91e6a49b4c7ee75a409597a5db8716", + "tests/output/stealth_sweep_fix_check/vorticity_stealth_s150_w0.02709.png": "d2d202088624cf30868228f9c913ee30e1b386aaa2c22b0ea89be43dedc0712d", + "tests/output/stealth_sweep_fix_check/streakline_stealth_s150_w0.02709.png": "0edc7caa9caaffb754490bf1f6ac7ad7180e45a991439a3f4f83ed949a082a1a", + "tests/output/stealth_sweep_fix_check/vorticity_stealth_s050_w0.00903.png": "4088359b17c46ed4d7c8401d244808fe67723273b1d16d0671b69f9478c68c1a", + "tests/output/final_validation_round/validation_summary_report.md": "881cb7052e5a555afc87168a37268ee66e8e3fba172533706e858d996fabc7b9", + "tests/output/final_validation_round/sah04_mixed/s2_d48.json": "83c6c01201d90aae5c49e73ebeca88d1c7ded6cc83c13f4892a9188e6289483f", + "tests/output/final_validation_round/sah04_mixed/s4_reg_d96.json": "b32f03e6b347fc709cea2ecd488df0f85849c733bf6a4b9cf65ea69401c93a1d", + "tests/output/final_validation_round/sah04_mixed/s1_d48.json": "120e8e878f5712dc89b7cf78c7f8d0e3368d34ad5ef7494977e083b188a54c18", + "tests/output/final_validation_round/sah04_mixed/s3_stablecfg.json": "b38a3d197a188e65c163d974113af18f332b3abed083e2654e998d9980f6be9f", + "tests/output/final_validation_round/sah04_mixed/vorticity/s3_mrt_laststep.png": "dc96fcd05d458684cfb40d4cb741172213083e2f2665e2bae7e1f0267bb3575d", + "tests/output/final_validation_round/sah04_mixed/vorticity/s1_mrt_laststep.png": "73a3580ba3c7fe6ffeee4676a9a51b5bf678d6fb523456a61e185598389ea1e1", + "tests/output/final_validation_round/sah04_mixed/vorticity/s4_mrt_laststep.png": "57f2a82761f2de1a9fc2b78ee86159ca542c966494b9c704deb451da857da778", + "tests/output/final_validation_round/sah04_mixed/vorticity/s2_mrt_laststep.png": "786f492b96ed932254b5452e2d06ff088727f2d88c7e7c7b47d386eddfe07862", + "tests/output/final_validation_round/kan99b/full_summary_runs.json": "8c4a11cbf555e08a66698439170b850c57d537d8e75e4dd75beb767bbf7e38cf", + "tests/output/final_validation_round/kan99b/summary_runs.csv": "3fa92fdd3114f0472de44bc03006af1d4b694dfc69b06704c1667cd3627b6dab", + "tests/output/final_validation_round/kan99b/force_csv/k5_baseline_domM_re160_a2p000_regularized_mrt.csv": "de05e9699146f2adffc9d7c9991f9e48396aacd142afc3c08b2b64727c83c69a", + "tests/output/final_validation_round/kan99b/force_csv/k3_baseline_domM_re60_a1p600_regularized_mrt.csv": "53cd0dc47328b7b370eced1130508655e6815a29b727bf1fe4e4e125e4918905", + "tests/output/final_validation_round/kan99b/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "4cac1ccfdb7451de3e26d921a6406cc55d1d4630e10ec0d7ec9350a4abd49404", + "tests/output/final_validation_round/kan99b/force_csv/k4_baseline_domM_re100_a2p000_regularized_mrt.csv": "392c98de52011ddb344a5761c4520e870f4e49bbba3e144e5a02818ba2f9250b", + "tests/output/final_validation_round/kan99b/force_csv/k1_baseline_domM_re100_a0p500_regularized_mrt.csv": "9e83c5175aec644c0b97c081e610deefa731b87aef04da6297abf662a71c0702", + "tests/output/final_validation_round/kan99b/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "55b071f278e153aa353aa2bef85f0bce35b910a7b08103032023fe3a28169b89", + "tests/output/final_validation_round/kan99b/vorticity/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.png": "b91b332e7deb787975d3f08fa3325facd4a972b536694fcda52e6c01943c42cb", + "tests/output/final_validation_round/kan99b/vorticity/k1_baseline_domM_re100_a0p500_regularized_mrt.png": "6e7c3f6567c0ff0d00d75da8373031f5ba2a17a624cb8c5d5d6ae4f8749c33c0", + "tests/output/final_validation_round/kan99b/vorticity/k5_baseline_domM_re160_a2p000_regularized_mrt.png": "c4d232df2e6f7466acca711191d976aa9411ec0ade81572b531463f42a7d633a", + "tests/output/final_validation_round/kan99b/vorticity/k3_baseline_domM_re60_a1p600_regularized_mrt.png": "b2314c60491d20933422e1697998555dec2436d39545c71f990e9906884685b2", + "tests/output/final_validation_round/kan99b/vorticity/k2_baseline_domM_re100_a1p000_regularized_mrt.png": "2b2797b8f53170d04d1a70d1cdf898f7e41b3a76b9f3c1f276dfec952520ab04", + "tests/output/final_validation_round/kan99b/vorticity/k4_baseline_domM_re100_a2p000_regularized_mrt.png": "8135f470404fe11ac97968fa580ee35232e90dcace3c6ad94de17ef7aace24d6", + "tests/output/kan99b_validation/summary_runs.json": "d7239aac64884202558741074f2d644ade9e2365d94d0b7556fba68dac94868d", + "tests/output/kan99b_validation/summary_runs.csv": "c44da69563d58b917291a9fd402d1f57055861bffab6f9e32d7db91297428d45", + "tests/output/kan99b_validation/force_csv/k5_baseline_domM_re160_a2p000_regularized_mrt.csv": "27b64460923d235d34b760f2a2371ad01611a70e38edb03d6fd6a2fe7a7de6e0", + "tests/output/kan99b_validation/force_csv/k3_baseline_domM_re60_a1p600_regularized_mrt.csv": "76ff52f4494b7ef7650c05968732a8caaba94d2b151234c02cf624f5b3a712ab", + "tests/output/kan99b_validation/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "28a83436ca8bdad38865ba21ce1bda679562a5ae1cfc6ee8fc6e86ff760ec66d", + "tests/output/kan99b_validation/force_csv/k4_baseline_domM_re100_a2p000_regularized_mrt.csv": "823ae04870fd951879024a18169ac5cba8db4b3201726f6a00f320f1958d04c6", + "tests/output/kan99b_validation/force_csv/k1_baseline_domM_re100_a0p500_regularized_mrt.csv": "a591daf2cdecd6ac3689fa2a2aba917b23053ad26e3ef1f635c81aecc451475f", + "tests/output/kan99b_validation/force_csv/k0_baseline_domM_re100_a0p000_regularized_mrt.csv": "e95c27c646c0c9baf8f455f876c115c8dbdb23cef9d9d550f455098bf0c03b55", + "tests/output/kan99b_validation/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "3c2ea79a0e27f561215febee2e165d24b3617a648bf908981c068ba59d549c51", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s125_w0.02257.png": "a892f18c74fe13efd839bfd5068097ca0ae07acebf6c06eed89e1b867e41fcb2", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s125_w0.02257.json": "7e542f59746429022ce1794854c6fb36e8ac658dd0aea3bc1140a45e83a3f1c9", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s100_w0.01806.json": "b76216e0fbee00ef754edbafe5790a99ce7d53638af629947ddd9615598e4c08", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s150_w0.02709.json": "42cb241d9cfb01308ce28e129756b6cb3fe2a8e9679518da84bcb8b607fe92ac", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s075_w0.01354.h5": "558be308dbf334832bc1d29419ba5be142969117a11b124864f6b221c8fee509", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s050_w0.00903.json": "53b579811a0b651ba7cc466c230c115b9f88486c6675e0465d0715d3377a75cd", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s075_w0.01354.png": "9f4a7d89b2471becaf31e84c14402441c5fd96fc7190cea5e8a9fdd06ee62002", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s050_w0.00903.png": "5f18f56b0ff2af3350216b65540a2bc664c569520624cfc6cc2439a3c5369560", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s100_w0.01806.h5": "30776f333959e0e9eb5ca96b269e6a8052c5b94941a4e3b36d8a6af8076920ce", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s075_w0.01354.png": "b5393474d99191e88dafea4144b6a8eccfbdf75107125ce4b05383b17007d06a", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s125_w0.02257.h5": "4ed9d8587f75ad4625ec5501fa99fb733cde037180ac53f92a210ffbb08375de", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s075_w0.01354.json": "ff1c1cc649e589b5425787493c2b0d04b6c39b43043b1968d65509cb0a426e82", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s050_w0.00903.h5": "4de51584b24095f8cf4480b8941593a5f913332f9396061ed077c9d49eb2ee11", + "tests/output/stealth_steady_sweep_nx1500/manifest.json": "0dfbb2c1b5bf9093fef169e4dc6319edb5c87a1e967e8d558613e2c64a2ca734", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s100_w0.01806.png": "60824cbdf21170cb4ffd8af0a49e8522c2d79cb2694690ab67995ee973265efa", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s150_w0.02709.h5": "b22d54a05cbd3138a1fe585a825246989fcff7c00f51aa9312a4185d963db933", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s125_w0.02257.png": "c1e1d04f266deac5fb2815a8283da80f9139ffaccbec2219d98544296bf3152c", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s150_w0.02709.png": "bcf098083a73798dc3906807218058cc571435a010234a5a350b585ba9915c78", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s150_w0.02709.png": "3bac21cc75a01429399cec308d6bf5fc8918917def1bf5d7fec1cb6003390a41", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s050_w0.00903.png": "a675f41df763f0a1ac0a06386315806b24f2571f5dabc8693fcd871a13ed22ba", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s100_w0.01806.png": "92515588596596cc1d691c643fa48cf828492c2eaed96355dcec58109de4b5aa", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C4_deceit_f1p5.json": "0393661f08b748428fc366eeecec3b34b9d9a013aa6b151a15b33c7e3c0e1818", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step080000.png": "bffef412087e426b614d8c05e59bd7580ee49bb77319279ddc4c1bf825678c49", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C6_deceit_f2.json": "de067f01ef5c11249d67bbe5e02db6f2b4c5590214de02609bca115edf8dee64", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2.png": "846badbae81b75f765d89e5a7c4f88aeb5d57f2387511e4f2f84c72a192ea9f2", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C3_deceit_multi.json": "eb21d1c69e51f01c1a6be1ce59fe86763089ea5aa667b8872d0186af035b24b2", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C0_no_ctrl.json": "780a0d329cb86990a17a088f49084410abb1fad24f659255918e5ddda6b3dabd", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step080000.png": "ff7836b8229d9a5dd3900f499fe3e7f0c73a61c7109b6e6e79b11a0fb459bb63", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step040000.png": "f2b56a7e30bcc363ed69fc19705403181ac5de90800eef03039a389a65869e30", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C5_deceit_multi_f1p5.json": "261b698723f19526a447679a2be8666c8d0cbf6df81b0c9de6d051960d77308b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step060000.png": "0697e0ae06a01154afdcf00330ba870bd8f36d21561a33846ad7ba63fb731179", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step040000.png": "1de3d7f54e91c5d5850f4358d1872e16fefb36d32a1b6293facb54524e32315c", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step100000.png": "91f0bf6ed3e854f7f83623a3f19bb12c83b4aac239e3eaa849fbe50e7baddff5", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step080000.png": "303c1d2d4c49b4a7495365c8cb2bcbfe9bdda7cbc0a7c7dd1f01e8aa62b3573b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step040000.png": "dd5945458a35d81b31a0e2f3a693a5023d6960474263e7dc86c22367a56cc13c", + "tests/output/exp_ctrl_matrix_streak_nx1500/manifest.json": "0d97efed02f775c25dd8a2d7439f310b715d142ff8d603c9da6ddab197570ce8", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi.png": "69022ef9175acf910374ec73848640548b85fc7beb7e6950843f52c10ed7d61b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step060000.png": "16ba30b8cca0d49e6b76be0bb4f0d14bbf276ca6ec47ebf56907c7534e15c4e0", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step100000.png": "8548b6dff635cf9c92e2baa119866277e3994366eb31aeb30641b03b3d80ee9f", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step060000.png": "56100f169c3e378b84bfc89c5477d2c142ca043d9f28eaa70bc5448c49c7f4d5", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C2_deceit.json": "587cd42d81b1325bbc766d9ca6c1fd3d076bf5a772efd45d056c2c4e3db742b6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step060000.png": "e43e95e7126de8cb857154353f161914c225f8c9f17eb44b1ff744249368a4d5", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step080000.png": "676d21ffc7180d34a6725a8bf49503ce59f48d65500450c3975d01e65162899e", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C1_stealth.json": "73040aeb7ef07c538d4687b101c599210e660202eb1c2c3e0894dfbde682d137", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step100000.png": "e22171ef86979c4398c45ada9cd0f5e4c4e5b034f271df5fa8ac9a762a8554cd", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step100000.png": "0d73042be73b0de8d0a591e56c01e3c802483aa22a97f27e0300cba82c708066", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step040000.png": "a6e95fd5c24052db20d5ece200edcfe5e261c00950ca964c89df9f7335579634", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl.png": "d74061347ac3505fad878e330f6cb04d23bdb13082bfa1afa2fda0872f80f388", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5.png": "3156400eb59fae0638556c2711345f12ca49d951ff09e6464a2271249409a6a7", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step100000.png": "d69e34c82da98b28eef7f1af29f5d11f400e90f628049f6f5f4a3a419a4a4340", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step040000.png": "ce1f372b517dd52fc3f3eb066145e04ab6841e43b67cb0f6bfbdb42a6738eca6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step100000.png": "07cce6c99dfa7b56dd4d3aa452873a676a5a00e9f046555fa9dda30f16dde488", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth.png": "a892f18c74fe13efd839bfd5068097ca0ae07acebf6c06eed89e1b867e41fcb2", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step060000.png": "80b63bd309ef11a3ebb2f1ef301b49cd8f09bcc25562097d382f859306c9fe6d", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit.png": "1edb30dc35e29ad991695353f4b84e0507792935ec75ae9a7904ebdc007a471a", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step060000.png": "93ab8e09e58a64c5dd2eedfdafd27cf4dcfe4e8fae1af64ac71eac509e6ffdaf", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step060000.png": "f773bdef1c8d718d01b6d6d7735182c04564dd8b5692b359e1dd2f721c774b1a", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step080000.png": "5570fe6a25c92e5c6aa9a5129aa1797ba8ee7418170c7a351f9e35b931a366c7", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step080000.png": "32d3e700286eb4b46b3bcf757669481affd6ff6b53792d730b5a21da92cc57d6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step100000.png": "5acfe36694bb4e628309ff8ae1e839ca0a1f684607165bbc2883436b85208bf4", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step040000.png": "2c6f2b8d61cc2aaa63631eb6c98d3de26dcef705fa6b66c823ce7b9eef50e00c", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5.png": "adbefd0021e2c981d026718de8c63594b9c8e5971901d1dc40835cb69d95b93e", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step080000.png": "ce8b18e4dd976ed590fcc44075f3fb058ca7b23e15a1624726c181c4dd0c11da", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step040000.png": "168d21ef24ae198fbfd642f8ca315faad4c7bff2e2c09e16ff7c97e7360ea883", + "tests/output/screening/screening_summary.csv": "3a23c4f2bd54ed5ee9bdb5b6dcdc58eed04519fcf1b4790e0abd1e6c5288fb96", + "tests/output/screening/screening_summary.json": "caf64530f152b6b8ccec82a3c7ba44fa0b3aeb0e0221ef6121857bf62c031ecd", + "tests/output/screening/B1/force_hist.csv": "854bfebe63fb2d140823fc5dbc434a70c317c6ab0bedbd5220cec45665b524c8", + "tests/output/screening/B1/summary.json": "35b4d958bc0fdd6ab6c9c0d1ed50e85d89b04f7be3e34632d6c3ea95b89acb47", + "tests/output/screening/custom/force_hist.csv": "06da0f67b564d5c114332ef3b39167b1ba222fc50045f95303c75c14755b51d5", + "tests/output/screening/custom/summary.json": "1701ed75e5e9ca16127f495ccff1d87de245d81df581e94114c8fca6fbbe77fd", + "tests/output/screening/MR1/force_hist.csv": "f70fbfa748fd0709e225523aaaa72b761db56df4f1d48f105384b94cbc44b31f", + "tests/output/screening/MR1/summary.json": "3d9a0fc19710820e3634ab2143b913b282beb159336567ab9ebf3de2092947bd", + "tests/output/screening/MR2/force_hist.csv": "c947b3c16b8e8f8f85a203cea8cd912bdfc07f96985c1c24a470b644170195ea", + "tests/output/screening/MR2/summary.json": "d2344e9e2517ec76c8b56bfbe3763dd465e24721856992401c57c414763481bb", + "tests/output/screening/MR3/force_hist.csv": "7df1536c83ee466b7195d9c521d3d3b1309acaf142f2855bba51fb279c7612e4", + "tests/output/screening/MR3/summary.json": "ad188eb1b271a6cd0fb4025b456eccac5450776f60db58466f804fc5a0e0ec61", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "examples/fixed_periodic_patch.py": "6732e440a47c237ea341703f2d80717903d34c68fd061bdc97189e5d877be46c", + "research/j3-lag-2026-10-12/host-check.log": "b2b6d262934b3abf9e0f0bdbde14b339cb977f7bffe391c17b51b5d067862dda", + "research/j3-lag-2026-10-12/REVIEW.md": "f388b64b0cc0413dc9865afda90ed24de666dda0d6cdb821b4363ce1b73631b3", + "research/j3-lag-2026-10-12/trajectory.h5": "2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986", + "research/j3-lag-2026-10-12/baseline-status.txt": "e0b69879084f54afac1a3bc3701f1de9819068190c815ae84421f02f83cad9f7", + "research/j3-lag-2026-10-12/baseline.json": "5e9a920813fe3d775110af85af92970d5245a7040ace804445e432353b77e489", + "research/j3-lag-2026-10-12/gpu-diagnostic.log": "97956b517072b7c34e2e29e2a23f87eafb19b9eda786a4b8149e4a2eaed76ee9", + "research/j3-lag-2026-10-12/gpu-availability.log": "b227a519b8286849cfdf842573bd451803da048c6b27af9517f6b8964cd3aa39", + "research/j3-lag-2026-10-12/results.json": "00435ac7e402943e55e702fac1beb5af8cafe71967999658bcde2b29077b1fa8", + "research/j3-lag-2026-10-12/incremental.diff": "ebdf66c72daf17b926482f79a1a30bf0eb2d27fc930a7bb62e5449ebcf72fcc7", + "research/j3-lag-2026-10-12/end-21280.h5": "19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588", + "research/j3-lag-2026-10-12/start-20760.h5": "6c4cba5928c77566c2afc32231311a3986831c18fea766faadebb101243399e2", + "research/refinement_slot_20261013/incremental.patch": "2daca4c9751190df27e18ea79e46685a8fe3cbb6d42b34135b1219b8f53ea3fc", + "research/refinement_slot_20261013/baseline.json": "17b1a8cb7e8232979cd1fc9976cb6b78aa58a7005449526ec15cc0bfd45f8139", + "research/refinement_slot_20261013/manifest.json": "9f28f275533e8a1a761ec748152170b40845612058236ce331c47ae6c5d68713", + "research/refinement_slot_20261013/before.json": "482b02da26207ce32deb9368b6eb63f9de7b4ab670078c02f458f512fb182b53", + "research/refinement_slot_20261013/notes.txt": "8c70efe2acef9f179c453d297b27047b7632a2d55e0739fff4bccf74e0867511", + "research/refinement_slot_20261013/stdout.txt": "1cabbc8a87a2a237ffa649feac0b1b8e0ae8d769af8c298e600e249d2a525f58", + "research/refinement_slot_20261013/results.json": "6245de38106d7a7b0bfea0aa5100b9c9e393ab5436fc594ce0295b4526964b8f", + "research/refinement_slot_20261013/cpu_results.json": "2a891c1adcb3b25390ee7967e5171396aedb9cb4da5ae85f7444450d758671d5", + "research/refinement_slot_followup_20261013/planar_velocity.sha256": "326639a3e66b2b8dbd21ecd76b32a331f3194a82d1b5888219eee4a1782f6366", + "research/refinement_slot_followup_20261013/incremental.patch": "b734b4b540ece11a037a0f119a9846c39c09c8247d3cc89877880a27c3d082c4", + "research/refinement_slot_followup_20261013/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "research/refinement_slot_followup_20261013/baseline.json": "7ee505b7371a5258db7cb197c999be8859d14641915e3085f1969deb465880a4", + "research/refinement_slot_followup_20261013/manifest.json": "b11c1fb42abccc4b5638b974d1ea00b0687d8fad72b492eab3c8435bf485fd13", + "research/refinement_slot_followup_20261013/before.json": "809c4a6f330d4a29e92415fd0eb820f34dec38484e3560a8b9287b09553c2d87", + "research/refinement_slot_followup_20261013/notes.txt": "c04644a287aa936c9c6de0ca9d8bd83cee2d80aab9544ca284c9f7c029bfeff9", + "research/refinement_slot_followup_20261013/stdout.txt": "acb72f2b14e1abfe750330d84a38afe9bbe944bf028dde9700a291d5edff4be4", + "research/refinement_slot_followup_20261013/results.json": "dc38c3f5f88fac2ebf49be11df84e9f3da9d25504d400b6a506240a91735e4e1", + "research/refinement_prepare_20261013/incremental.patch": "df01345b8e2c33ebf6cdcbbb5104f02c4d7c239a6e6cafab1833228791bfa9a7", + "research/refinement_prepare_20261013/baseline.json": "5cc3c35faac9bb43a0017d83ddfca330d7da93f1e6407391da56b2e9df3b28b6", + "research/refinement_prepare_20261013/manifest.json": "5d479557cd01d61d8b652a3cf456fa57665bf624ce3b4a42c747523b74dec548", + "research/refinement_prepare_20261013/README.txt": "eee46f01add6ed7a5da76da76c98da628e13b930cfc49785399d7afbedbfd95f", + "research/refinement_prepare_20261013/validation.json": "945f4c3604ae0eae91c29741a39588207cfff3e05646e03a12d074a299956c2f", + "research/refinement_prepare_20261013/validation.txt": "5b5a8e9d455d37064c6709dcfd14e89ba66f51f09a11a9863b5cab67ac651d42", + "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", + "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/repair-2026-10-10/simplification-checks.log": "c9f15e870d02003480adf1a7f2fe4a9aca66c1934c4477619f05c8a4798ba85b", + "research/repair-2026-10-10/repair-state.md": "4d4aa1ec0c11a87d2c8380912e7ed74cf5c910ae42e5cc529effde36c9020969", + "research/repair-2026-10-10/TRON_HANDOFF.md": "f8aaa3d99cd133c2055d4adf396a0a57d14f6006aea19e87611bd1c2c1b53a88", + "research/repair-2026-10-10/final-gpu.log": "988bb97256d17b88c14f3793b15880d727ecb285abe62e7d2ae27a16729651c3", + "research/repair-2026-10-10/baseline-status.txt": "074088d793014e3b8154c58718058c7d300fb45595f5129fa957ef1e4cec38e2", + "research/repair-2026-10-10/repair-architecture.md": "49be42ff5c994017f3175e17efda14d84f0b68f8ecd239f66ccee38415b60c5a", + "research/repair-2026-10-10/classic-results.json": "a5d15305f516fd378b54cf9029102be58a83a55a7bad4b8e058fcfe0cc9898f4", + "research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff": "292b4bafe7a62d4fbbf7c165eb99929336edfcaa16b15f34f72ab71fcd928391", + "research/repair-2026-10-10/repair-numerical.md": "0272ebfa8c519aad161c520542cf53156574661609b91fd5ccad7955fdf2bd7b", + "research/repair-2026-10-10/provenance.json": "a81b7e32ecf7182c9617df1b39bbb063a05ef89290ad501bac4573cd5e8a6832", + "research/repair-2026-10-10/classic-signals.npz": "820c9a0b0713d7455f0a5839ac2cd5ee706086d1a26461225dcdb095673421e2", + "research/repair-2026-10-10/baseline-hashes.json": "d6a7d5f9ec5bceb0e7927d55603d9c5e70105982cd945723454659b19ab476e6", + "research/repair-2026-10-10/final-unit.log": "a892a39ecf88125558538cadce2cb5dc46d106b993b164e03da4ebb0eee68cef", + "research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "research/j1-2026-10-12/REVIEW.md": "13004a4f140acdcf59acb57e9e2dda1bb95763d30060f822a7c206c94b813a9f", + "research/j1-2026-10-12/gpu.log": "8659a78ea52bbf8eb923d46ea71636ce63cd322352d5c98a74f631e666dd8cfb", + "research/j1-2026-10-12/baseline-status.txt": "ac398360e05b746b89ae0c3acfe202b5122e650a3bb1ff234ab26f874a303e64", + "research/j1-2026-10-12/baseline.json": "ad7afdf7b3913d11c07343e971fe2f43c2d1a2b99e3d5904a6ba89e3bb0b24fb", + "research/j1-2026-10-12/checkpoint-gpu.log": "adfe3d77d2e6c6f6184dccc0267b4404b20a7709505d5ff5affed0ed4a618083", + "research/j1-2026-10-12/cpu.log": "60cac097f7c4f11401df2aacb43a248640555e7628d2829c4680c71db34e9640", + "research/j1-2026-10-12/gpu-validation.log": "d1e9f2aea17a85eddcd94b81c700738ce073214857b55c28abd1219ff1edbed7", + "research/j1-2026-10-12/results.json": "449f8a17dacac0fc6d2489c4b10bac330dbbbdb38fad3ce54f739ac8c6d48e85", + "research/j1-2026-10-12/incremental.diff": "a454c23da7b0011645949c0fbf64d0c41ecfdab5642b1b7c5119868005d3c721", + "research/j3-coverage-2026-10-12/restart-21280.h5": "3e89c12c16f91f76ca9acd909e0fa7d42df6fbb5e870b299aa08ca42bc3e3dc9", + "research/j3-coverage-2026-10-12/REVIEW.md": "7293f3f3442855c8521698605aab504e026915a7bf1e77f5a24710d89a812443", + "research/j3-coverage-2026-10-12/restart-reference-21296.h5": "7192f510dd7820675aa1de130f55514136fba782cf77f92545189918a7e0c328", + "research/j3-coverage-2026-10-12/negative-end-20760.h5": "bd0bd063579d625e358762b1fdde5ac11bfcf739646a847fb77a4a2031011b9b", + "research/j3-coverage-2026-10-12/baseline-status.txt": "31c949b11b20d7cd4202dba16882b5712aa1653da0cb2da2f0ebd69bf488040e", + "research/j3-coverage-2026-10-12/baseline.json": "d8844104f2665a25bfc417ee29becf89ab3955fac9105b5ddb12cfb1fe2a55b0", + "research/j3-coverage-2026-10-12/verification.json": "205986efd2b41635721b7fd20288be982348c765180102c7102750ba088f3a28", + "research/j3-coverage-2026-10-12/negative-budget-20744.h5": "c09d75fc4a2cff68039a0956bd9d32b79b9cd3a6b386c72b4db54c214b110cd8", + "research/j3-coverage-2026-10-12/gpu-validation.log": "505cd5a5db46d7984aefb2a614151c25c4ace0e7d2a52e02c3e4f9792fd8eb95", + "research/j3-coverage-2026-10-12/results.json": "02460981ad49c9cc13b4246abad1d8afd2599c61bfb545a6e32da9bbcd5c0db1", + "research/j3-coverage-2026-10-12/incremental.diff": "98aa7855d5d6b91b4509a924c8a5aabab4339ba29c7e7dc2d91262c48e3848ca", + "research/audit-2026-10-09/numerical_semantics_results.json": "b95b065b594aa2911740dab216f87936c9bf7f7fa25acfda93b5738443564035", + "research/audit-2026-10-09/REVIEW.zh-CN.md": "2841fd3aa7a6baedbe1079d90915c8b05212b133824ed6abccaa1f09656eaefe", + "research/audit-2026-10-09/root-initializers-report.md": "ca448457c444949d5d0e1e10fa7121064510b77fc4c3512580900f0299219867", + "research/audit-2026-10-09/numerical-report.md": "970330b3a593f79f09866ce6ae82bc0ddd81226230d0a6ff06ae8ae756ee80da", + "research/audit-2026-10-09/numerical_collision_results.json": "51e5c263bb8cde82cedef2ccfdbf5ef657742a80218d7896b1ff877516e59693", + "research/audit-2026-10-09/architecture-cpu-results.json": "e1b809210005c8765b13fddbb5ed710d15f6fcbb4c5788a4064f3e88808433ef", + "research/audit-2026-10-09/numerical_compile_results.json": "c3b0ae02072a2ec408ada7513b542ec255f6855cb743a3ed7f91bd8f31504f44", + "research/audit-2026-10-09/state_results.json": "da9170df3e11231c73f20e5e79ed68e08966673d1dd52004ea6b6a279afc0dcd", + "research/audit-2026-10-09/architecture-report.md": "861079dc3f4ced9fdc41bfb22002d32e190c0d630d3ba2f138f9dc7a949b8371", + "research/audit-2026-10-09/state-report.md": "f8708807efc2e109810c5955f7c1884a932668c0b3cb2963c2df3b09f2a3d5c4", + "research/j3-offline-2026-10-12/REVIEW.md": "d9902c58498e73c29e054b23adb968f7e1e14421cba5c58d03bbc5a50159ae79", + "research/j3-offline-2026-10-12/lags.csv": "fbd9addd413f24c47f4411317e872265bb774e8e1724fe169412befa860ae94d", + "research/j3-offline-2026-10-12/localization.png": "a72907638e32b0ecfc2205bea438e7b408f40aad86217ce6ad9b4877840c9cfc", + "research/j3-offline-2026-10-12/results.json": "cdb857bea6f4e06ed15acf773505ce6d5147f8cb8ce0a53cc368ee267cde6361", + "research/j3-offline-2026-10-12/cpu-analysis.log": "bc02a9b197fc15ae1b503ca54655a7622d4361f9b45b7848ff9c387ea3665f11", + "research/j3-offline-2026-10-12/regions.csv": "3a8fc640b61d70e3b7f73d2bf8ac2bd3f720adf39a90dfda6180430e0489efae", + "research/j2-slot-2026-10-12/REVIEW.md": "10c4a94ffc32e0a2c4e0f6593b7cfc28479b5869f279f0b9d0b708fa3a47d1e6", + "research/j2-slot-2026-10-12/gpu-serialization-failure.log": "df804e53b35e7ddaad79a17842b4b5fd9d834e29ca2d56edb00e835848d09200", + "research/j2-slot-2026-10-12/baseline-status.txt": "812616e2d941efcf854e1b37d6e662dda1aaf2b69074fcc04017133e13b72166", + "research/j2-slot-2026-10-12/baseline.json": "e82a1844145fd0cbc585c581b29f80b56193f122cfe1dfa7578f26904a720285", + "research/j2-slot-2026-10-12/cli.log": "9482ad7101d501f27f92e204b2f3ae5c6d91bd887b525aa31cb4a2a188f3cb92", + "research/j2-slot-2026-10-12/cpu.log": "91aba5961006909fbbb860429a9d3cfc930112a0d74c7788bc51c0a5897b47e5", + "research/j2-slot-2026-10-12/gpu-validation.log": "223351b52c70fa4523289f3a1b3db435a11286379253280470900ffe397580a6", + "research/j2-slot-2026-10-12/results.json": "7d35ca7989aed5380e0a45de7f583972566fc516a051da63c53b35514e267494", + "research/j2-slot-2026-10-12/incremental.diff": "c9e391bc91438cd912c1ed5a419705d4388522f672c67a066cfc055e814e699f", + "research/design-2026-10-09/math-and-history.md": "64f8c82e4949d6f58b46faa09800958714859c36cad20bbeeae8b449ae7a6099", + "research/design-2026-10-09/math-checks.json": "94750381954317cde8d649db26beaed8ea945666572a05030ca2b4d97d384011", + "research/design-2026-10-09/Contracts.lean": "2442d9a778ef20e8af3fecf23be6fea6d73c6299ff744c9664b652bc5ee3f034", + "research/design-2026-10-09/jet-study.md": "a362142ef04a5ad5dbb4c9db9d221b1199dccec53780c8f2da49a15201cfe529", + "research/design-2026-10-09/PLAN.zh-CN.md": "0341dd7ee306a040340c8e5dedb07a109e931c27dbf3c994d072aa78e3b6bc67", + "research/design-2026-10-09/jet_closure_results.json": "12cf7d400a206f9f9ec9ea6ad251fe6bb0232e27bcbed22fbc1ead2c0fc7d249", + "research/design-2026-10-09/grid-study.md": "4435dc1275ec5e15b118becc6ac391f306195d1e5beaa58037b1aff3bb2465c7", + "research/design-2026-10-09/jet_closure_check.py": "fde45d0f8518740ef5c0bf0fe7635d6adaf9a2e789927dd4e68e991c138ddc30", + "research/design-2026-10-09/api-architecture-study.md": "d6fb45ec784f0e1db55fb9f34e137b9f551db0b9b39fd4f0ef247a78fc34eedf", + "research/design-2026-10-09/math_checks.py": "4254983a783fe4bad8888b3d7c243c87d991c7bbf242edb0f56f25cbaefee890", + "research/refinement_example_20261013/incremental.patch": "6acd05df6669ccdcf234ac1680c6e76c75a2587974adb6728f7edda6fd625b69", + "research/refinement_example_20261013/baseline.json": "ae0af15ddb40709d1e348655a665264984a240ded1e28af816a8000d08e784be", + "research/refinement_example_20261013/manifest.json": "6da85ac513065dcf49200bc0872bec38b6c7ba61f7d82036c2189cabe5ac29ce", + "research/refinement_example_20261013/before.json": "d95cd518f080eab92af5e53e1e9b6b6fad626eae51990e510d2d2f2ae9d0ec7b", + "research/refinement_example_20261013/notes.txt": "f111f8cba94b43d1127945fa41615037e1740efcfc529e802338dd8c4ff02795", + "research/refinement_example_20261013/stdout.txt": "9c59fb315a5552cce4ceab171003e425bf64d747137c89bd86d8779a34adcbd1", + "research/refinement_example_20261013/results.json": "8ab13bbc022f2a66898aa07ed94f43cb6716570e7a360a809b7fcd097316db7e", + "research/j3-reservoir-2026-10-12/gpu-availability-sandbox.log": "1d58470512e583a0acfabf6896ee5f31e5b493b8231aed54b864f64eb275b02c", + "research/j3-reservoir-2026-10-12/REVIEW.md": "1ea5f860728584ea6cbe40ba3994e40471102d8e2cf6d93e28fe47222cba0cab", + "research/j3-reservoir-2026-10-12/baseline-status.txt": "0ef1a8c9878c4053ebc1a7d4bace6d4ec38bf27ace167b4239ddbb1c6c897e20", + "research/j3-reservoir-2026-10-12/baseline.json": "847fefd1eae971985d34d04d89ee6d6f1c91f6940c54fe351d112faba7bc6838", + "research/j3-reservoir-2026-10-12/cpu.log": "b33f6c1a1b0ee67968c4cff85d491e46e30e0d6c796b552629714ab8b5dcead0", + "research/j3-reservoir-2026-10-12/gpu-validation.log": "ff04024db197e332f37c912a96413e3251fd0186947348ffbc33af6f4a899f2c", + "research/j3-reservoir-2026-10-12/results.json": "49685de7679a14860258abf1753aaa6d116ad709b868d907ddb40e74c9b845ea", + "research/j3-reservoir-2026-10-12/incremental.diff": "fae312831d71e46dd477a640b06ed927853a9e735d26bf9f5868927fa31cfa56" + }, + "new_source": "examples/fixed_patch_jet.py" +} diff --git a/research/fixed_patch_jet_20261013/before.json b/research/fixed_patch_jet_20261013/before.json new file mode 100644 index 0000000..06e1b62 --- /dev/null +++ b/research/fixed_patch_jet_20261013/before.json @@ -0,0 +1,8 @@ +{ + "utc": "2026-10-13T11:37:44.074597+00:00", + "physical_device": 0, + "uuid": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c", + "gpus": "index, uuid, name, memory.used [MiB], memory.free [MiB], utilization.gpu [%]\n0, GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, Tesla V100-SXM2-16GB, 5 MiB, 16140 MiB, 0 %\n1, GPU-f1c9fd5a-e917-56e0-21fb-24035ba44a36, Tesla V100-SXM2-16GB, 5 MiB, 16140 MiB, 0 %\n2, GPU-b8c11c01-c91f-aa0b-abf6-dad35085cc76, Tesla V100-SXM2-16GB, 5 MiB, 16140 MiB, 0 %\n3, GPU-8b71b032-1b75-2891-935c-ce106a53034a, Tesla V100-SXM2-16GB, 5 MiB, 16140 MiB, 0 %\n", + "compute_apps": "gpu_uuid, pid, process_name, used_gpu_memory [MiB]\n", + "ram_available_bytes": 64097140736 +} diff --git a/research/fixed_patch_jet_20261013/fixed_patch_jet.py b/research/fixed_patch_jet_20261013/fixed_patch_jet.py new file mode 100644 index 0000000..6fbdcd9 --- /dev/null +++ b/research/fixed_patch_jet_20261013/fixed_patch_jet.py @@ -0,0 +1,179 @@ +"""Low-Re startup flow in an x-periodic confined domain; nozzle remains coarse. + +From this checkout, after checking the selected physical GPU is idle: + PYTHONPATH="$PWD/src" CUDA_VISIBLE_DEVICES=0 python examples/fixed_patch_jet.py --output /tmp/patch-jet + +The fixed-amplitude start includes acoustic transients, not a developed jet. +Only native leaf cells are plotted. No interpolation, restart or flow oracle. +""" +import argparse +from dataclasses import replace +import json +import os +from pathlib import Path +import tempfile +import time + +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 FixedPatchStepper + +BOUNDS, AMPLITUDE, WIDTH = (16, 4, 32, 28), .02, 12 +TIMES, MAX_MACH, MAX_SECONDS = (0, 300, 1200), .1, 120 + + +def measure(arrays, masks, centers, initial_mass): + fields = [] + for array, mask in zip(arrays, masks): + if not np.isfinite(array[:, mask]).all(): + raise RuntimeError("Nonfinite leaf populations") + field = np.full((*mask.shape, 3), np.nan) + field[mask] = [compute_macro_from_ddf(f) for f in array[:, mask].T] + fields.append(field) + leaves = np.concatenate([f[m] for f, m in zip(fields, masks)]) + speed = np.hypot(leaves[:, 1], leaves[:, 2]) + mass = sum(area*a[:, m].sum(dtype=np.float64) + for area, a, m in zip((1, .25), arrays, masks)) + record = dict(finite=bool(np.isfinite(leaves).all()), rho_min=float(leaves[:, 0].min()), + rho_max=float(leaves[:, 0].max()), speed_max=float(speed.max()), + measured_Ma=float(speed.max()*np.sqrt(3)), + density_deviation=float(np.abs(leaves[:, 0]-1).max()), + discrete_leaf_mass=float(mass), mass_change=float(mass-initial_mass)) + if not record['finite'] or record['rho_min'] <= 0 or record['measured_Ma'] > MAX_MACH: + raise RuntimeError(f"Finite/positive-density/Ma<={MAX_MACH} guard failed: {record}") + walls = fields[0][[1, -2]] + record['macro_sum_rho_v_bottom_top'] = (walls[:, :, 0]*walls[:, :, 2]).sum(axis=1).tolist() + record['centerline'] = [] + for level, y in ((0, 3.5), (1, 8.25), (1, 16.25), (0, 32.5)): + xs, ys = centers[level] + columns = np.argsort(np.abs(xs-24))[:2] + row = int(np.flatnonzero(ys == y)[0]) + values = fields[level][row, columns].mean(axis=0) + record['centerline'].append(dict(level=level, x=24, y=y, + sampled_x=sorted(xs[columns].tolist()), rule='arithmetic mean of two neighboring native columns', + rho_ux_uy=values.tolist())) + return fields, record + + +def draw(out, snapshots, masks, centers): + import matplotlib + matplotlib.use('Agg') + import matplotlib.pyplot as plt + from matplotlib.collections import PolyCollection + + def decorate(ax): + ax.set(xlim=(0, 48), ylim=(1.5, 46.5), aspect='equal', xlabel='X', ylabel='Y') + ax.plot([16, 32, 32, 16, 16], [4, 4, 28, 28, 4], color='tab:red', lw=1) + ax.axhline(1.5, color='black', lw=1) + ax.axhline(46.5, color='black', lw=1, ls='--') + ax.plot([18, 30], [1.5, 1.5], color='tab:orange', lw=4, clip_on=False) + + fig, ax = plt.subplots(figsize=(6, 6), constrained_layout=True) + for mask, (xs, ys), dx in zip(masks, centers, (1, .5)): + yy, xx = np.meshgrid(ys, xs, indexing='ij') + cells = np.stack((xx[mask], yy[mask]), axis=-1) + vertices = cells[:, None, :] + dx*np.array([[-.5, -.5], [.5, -.5], [.5, .5], [-.5, .5]]) + ax.add_collection(PolyCollection(vertices, facecolors='none', edgecolors='0.55', linewidths=.3)) + decorate(ax) + ax.set_title('Native leaf grid: coarse dx=1, fine dx=0.5\nRed: internal patch; orange: coarse slot; dashed: reservoir') + fig.savefig(out/'layout.png', dpi=150) + plt.close(fig) + vmax = max(1., *(np.nanmax(np.hypot(f[..., 1], f[..., 2]))/AMPLITUDE + for fields in snapshots for f in fields)) + fig, axes = plt.subplots(1, 3, figsize=(12, 4.8), constrained_layout=True) + for ax, step, fields in zip(axes, TIMES, snapshots): + for field, mask, (xs, ys), dx in zip(fields, masks, centers, (1, .5)): + speed = np.ma.masked_where(~mask, np.hypot(field[..., 1], field[..., 2])/AMPLITUDE) + image = ax.pcolormesh(np.r_[xs-dx/2, xs[-1]+dx/2], + np.r_[ys-dx/2, ys[-1]+dx/2], speed, + shading='flat', cmap='viridis', vmin=0, vmax=vmax, rasterized=True) + stride = int(4/dx) + yy, xx = np.meshgrid(ys, xs, indexing='ij') + selection = np.zeros_like(mask) + selection[::stride, ::stride] = mask[::stride, ::stride] + ax.quiver(xx[selection], yy[selection], field[..., 1][selection], field[..., 2][selection], + angles='xy', scale_units='xy', scale=AMPLITUDE/3, width=.005, color='white') + decorate(ax) + ax.set_title(f'coarse t={step}, fine steps={2*step}') + fig.colorbar(image, ax=axes, label='speed / imposed amplitude') + fig.suptitle('Low-Re startup flow in an x-periodic confined domain\nFixed-amplitude start includes acoustic transients; not steady/developed') + fig.savefig(out/'velocity.png', dpi=150) + plt.close(fig) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--output', type=Path, required=True) + out = parser.parse_args().output.resolve() + root = Path(__file__).resolve().parents[1] + if Path(CelerisLab.__file__).resolve() != root/'src/CelerisLab/__init__.py': + raise RuntimeError(f'Set PYTHONPATH to {root / "src"}') + out.mkdir(parents=True, exist_ok=False) + cfg = replace(load_lbm_config(str(root/'src/CelerisLab/configs/config_lbm.json')), + nx=48, ny=48, viscosity=.1, velocity=0., rho=1., wall_slot_width=WIDTH, + wall_normal_velocity=AMPLITUDE, y_wall_bc='on_site_velocity', top_wall_bc='reservoir', + lattice_model='D2Q9', collision='SRT', streaming='double_buffer', + store_precision='FP32', ddf_shifting=False, les_enabled=False) + report = dict(config=dict(nx=48, ny=48, bounds=BOUNDS, W=WIDTH, A=AMPLITUDE, nu=.1, + rho=1, tau_coarse=.8, tau_fine=1.1, coarse_boundary='slot_reservoir'), + guards=dict(check_every=50, positive_density=True, finite=True, + max_Mach=MAX_MACH, max_seconds=MAX_SECONDS), + notes='Node mass uses areas 1 and 1/4, not an exact physical volume integral. ' + 'Boundary rho*v is a macro measurement, not a closed population budget.', + samples=[], status='running', last_synchronized_coarse_step=0) + start, run = time.monotonic(), None + try: + with CudaContext(0) as context, FixedPatchStepper(cfg, BOUNDS, context=context, + coarse_boundary='slot_reservoir') as run: + p = run.patch + masks = [np.ones(p.coarse_shape, bool), p.fine_kind == ACTIVE] + masks[0][[0, -1]] = False + masks[0][4:28, 16:32] = False + centers = [(origin[0]+dx*(np.arange(shape[1])+.5), + origin[1]+dx*(np.arange(shape[0])+.5)) + for shape, origin, dx in ((p.coarse_shape, (0, 0), 1), + (p.fine_shape, p.fine_origin, .5))] + initial = [np.broadcast_to(compute_feq_d2q9(1., 0., 0.)[:, None, None], (9, *m.shape)).copy() + for m in masks] + for x in range(cfg.nx): + v = AMPLITUDE*max(0., 1-((2*x-(cfg.nx-1))/WIDTH)**2)**2 + initial[0][:, 1, x] = compute_feq_d2q9(1., 0., v) + run.initialize(*initial) + mass0 = sum(area*a[:, m].sum(dtype=np.float64) + for area, a, m in zip((1, .25), initial, masks)) + snapshots = [] + for step in range(0, TIMES[-1]+1, 50): + if time.monotonic()-start > MAX_SECONDS: + raise TimeoutError('120 second demonstration limit reached') + if step: + run.step(50) + report['last_synchronized_coarse_step'] = run.step_count + fields, sample = measure(run.download(), masks, centers, mass0) + print(f'step={step} rho=[{sample["rho_min"]:.7g},{sample["rho_max"]:.7g}] ' + f'Ma={sample["measured_Ma"]:.7g}', flush=True) + if step in TIMES: + sample.update(coarse_steps=step, fine_steps=2*step) + report['samples'].append(sample) + snapshots.append(fields) + with tempfile.TemporaryDirectory(prefix='.plot-', dir=out) as cache: + os.environ['MPLCONFIGDIR'] = cache + draw(out, snapshots, masks, centers) + report['status'] = 'complete' + except BaseException as exc: + report.update(status='failed', error=f'{type(exc).__name__}: {exc}', + last_synchronized_coarse_step=run.step_count if run is not None else 0) + raise + finally: + report['elapsed_seconds'] = time.monotonic()-start + (out/'summary.json').write_text(json.dumps(report, indent=2)+'\n') + print(f'{report["status"]}: last synchronized coarse step ' + f'{report["last_synchronized_coarse_step"]}; output={out}', flush=True) + + +if __name__ == '__main__': + main() diff --git a/research/fixed_patch_jet_20261013/incremental.patch b/research/fixed_patch_jet_20261013/incremental.patch new file mode 100644 index 0000000..b43129d --- /dev/null +++ b/research/fixed_patch_jet_20261013/incremental.patch @@ -0,0 +1,182 @@ +--- /dev/null ++++ b/examples/fixed_patch_jet.py +@@ -0,0 +1,179 @@ ++"""Low-Re startup flow in an x-periodic confined domain; nozzle remains coarse. ++ ++From this checkout, after checking the selected physical GPU is idle: ++ PYTHONPATH="$PWD/src" CUDA_VISIBLE_DEVICES=0 python examples/fixed_patch_jet.py --output /tmp/patch-jet ++ ++The fixed-amplitude start includes acoustic transients, not a developed jet. ++Only native leaf cells are plotted. No interpolation, restart or flow oracle. ++""" ++import argparse ++from dataclasses import replace ++import json ++import os ++from pathlib import Path ++import tempfile ++import time ++ ++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 FixedPatchStepper ++ ++BOUNDS, AMPLITUDE, WIDTH = (16, 4, 32, 28), .02, 12 ++TIMES, MAX_MACH, MAX_SECONDS = (0, 300, 1200), .1, 120 ++ ++ ++def measure(arrays, masks, centers, initial_mass): ++ fields = [] ++ for array, mask in zip(arrays, masks): ++ if not np.isfinite(array[:, mask]).all(): ++ raise RuntimeError("Nonfinite leaf populations") ++ field = np.full((*mask.shape, 3), np.nan) ++ field[mask] = [compute_macro_from_ddf(f) for f in array[:, mask].T] ++ fields.append(field) ++ leaves = np.concatenate([f[m] for f, m in zip(fields, masks)]) ++ speed = np.hypot(leaves[:, 1], leaves[:, 2]) ++ mass = sum(area*a[:, m].sum(dtype=np.float64) ++ for area, a, m in zip((1, .25), arrays, masks)) ++ record = dict(finite=bool(np.isfinite(leaves).all()), rho_min=float(leaves[:, 0].min()), ++ rho_max=float(leaves[:, 0].max()), speed_max=float(speed.max()), ++ measured_Ma=float(speed.max()*np.sqrt(3)), ++ density_deviation=float(np.abs(leaves[:, 0]-1).max()), ++ discrete_leaf_mass=float(mass), mass_change=float(mass-initial_mass)) ++ if not record['finite'] or record['rho_min'] <= 0 or record['measured_Ma'] > MAX_MACH: ++ raise RuntimeError(f"Finite/positive-density/Ma<={MAX_MACH} guard failed: {record}") ++ walls = fields[0][[1, -2]] ++ record['macro_sum_rho_v_bottom_top'] = (walls[:, :, 0]*walls[:, :, 2]).sum(axis=1).tolist() ++ record['centerline'] = [] ++ for level, y in ((0, 3.5), (1, 8.25), (1, 16.25), (0, 32.5)): ++ xs, ys = centers[level] ++ columns = np.argsort(np.abs(xs-24))[:2] ++ row = int(np.flatnonzero(ys == y)[0]) ++ values = fields[level][row, columns].mean(axis=0) ++ record['centerline'].append(dict(level=level, x=24, y=y, ++ sampled_x=sorted(xs[columns].tolist()), rule='arithmetic mean of two neighboring native columns', ++ rho_ux_uy=values.tolist())) ++ return fields, record ++ ++ ++def draw(out, snapshots, masks, centers): ++ import matplotlib ++ matplotlib.use('Agg') ++ import matplotlib.pyplot as plt ++ from matplotlib.collections import PolyCollection ++ ++ def decorate(ax): ++ ax.set(xlim=(0, 48), ylim=(1.5, 46.5), aspect='equal', xlabel='X', ylabel='Y') ++ ax.plot([16, 32, 32, 16, 16], [4, 4, 28, 28, 4], color='tab:red', lw=1) ++ ax.axhline(1.5, color='black', lw=1) ++ ax.axhline(46.5, color='black', lw=1, ls='--') ++ ax.plot([18, 30], [1.5, 1.5], color='tab:orange', lw=4, clip_on=False) ++ ++ fig, ax = plt.subplots(figsize=(6, 6), constrained_layout=True) ++ for mask, (xs, ys), dx in zip(masks, centers, (1, .5)): ++ yy, xx = np.meshgrid(ys, xs, indexing='ij') ++ cells = np.stack((xx[mask], yy[mask]), axis=-1) ++ vertices = cells[:, None, :] + dx*np.array([[-.5, -.5], [.5, -.5], [.5, .5], [-.5, .5]]) ++ ax.add_collection(PolyCollection(vertices, facecolors='none', edgecolors='0.55', linewidths=.3)) ++ decorate(ax) ++ ax.set_title('Native leaf grid: coarse dx=1, fine dx=0.5\nRed: internal patch; orange: coarse slot; dashed: reservoir') ++ fig.savefig(out/'layout.png', dpi=150) ++ plt.close(fig) ++ vmax = max(1., *(np.nanmax(np.hypot(f[..., 1], f[..., 2]))/AMPLITUDE ++ for fields in snapshots for f in fields)) ++ fig, axes = plt.subplots(1, 3, figsize=(12, 4.8), constrained_layout=True) ++ for ax, step, fields in zip(axes, TIMES, snapshots): ++ for field, mask, (xs, ys), dx in zip(fields, masks, centers, (1, .5)): ++ speed = np.ma.masked_where(~mask, np.hypot(field[..., 1], field[..., 2])/AMPLITUDE) ++ image = ax.pcolormesh(np.r_[xs-dx/2, xs[-1]+dx/2], ++ np.r_[ys-dx/2, ys[-1]+dx/2], speed, ++ shading='flat', cmap='viridis', vmin=0, vmax=vmax, rasterized=True) ++ stride = int(4/dx) ++ yy, xx = np.meshgrid(ys, xs, indexing='ij') ++ selection = np.zeros_like(mask) ++ selection[::stride, ::stride] = mask[::stride, ::stride] ++ ax.quiver(xx[selection], yy[selection], field[..., 1][selection], field[..., 2][selection], ++ angles='xy', scale_units='xy', scale=AMPLITUDE/3, width=.005, color='white') ++ decorate(ax) ++ ax.set_title(f'coarse t={step}, fine steps={2*step}') ++ fig.colorbar(image, ax=axes, label='speed / imposed amplitude') ++ fig.suptitle('Low-Re startup flow in an x-periodic confined domain\nFixed-amplitude start includes acoustic transients; not steady/developed') ++ fig.savefig(out/'velocity.png', dpi=150) ++ plt.close(fig) ++ ++ ++def main(): ++ parser = argparse.ArgumentParser(description=__doc__) ++ parser.add_argument('--output', type=Path, required=True) ++ out = parser.parse_args().output.resolve() ++ root = Path(__file__).resolve().parents[1] ++ if Path(CelerisLab.__file__).resolve() != root/'src/CelerisLab/__init__.py': ++ raise RuntimeError(f'Set PYTHONPATH to {root / "src"}') ++ out.mkdir(parents=True, exist_ok=False) ++ cfg = replace(load_lbm_config(str(root/'src/CelerisLab/configs/config_lbm.json')), ++ nx=48, ny=48, viscosity=.1, velocity=0., rho=1., wall_slot_width=WIDTH, ++ wall_normal_velocity=AMPLITUDE, y_wall_bc='on_site_velocity', top_wall_bc='reservoir', ++ lattice_model='D2Q9', collision='SRT', streaming='double_buffer', ++ store_precision='FP32', ddf_shifting=False, les_enabled=False) ++ report = dict(config=dict(nx=48, ny=48, bounds=BOUNDS, W=WIDTH, A=AMPLITUDE, nu=.1, ++ rho=1, tau_coarse=.8, tau_fine=1.1, coarse_boundary='slot_reservoir'), ++ guards=dict(check_every=50, positive_density=True, finite=True, ++ max_Mach=MAX_MACH, max_seconds=MAX_SECONDS), ++ notes='Node mass uses areas 1 and 1/4, not an exact physical volume integral. ' ++ 'Boundary rho*v is a macro measurement, not a closed population budget.', ++ samples=[], status='running', last_synchronized_coarse_step=0) ++ start, run = time.monotonic(), None ++ try: ++ with CudaContext(0) as context, FixedPatchStepper(cfg, BOUNDS, context=context, ++ coarse_boundary='slot_reservoir') as run: ++ p = run.patch ++ masks = [np.ones(p.coarse_shape, bool), p.fine_kind == ACTIVE] ++ masks[0][[0, -1]] = False ++ masks[0][4:28, 16:32] = False ++ centers = [(origin[0]+dx*(np.arange(shape[1])+.5), ++ origin[1]+dx*(np.arange(shape[0])+.5)) ++ for shape, origin, dx in ((p.coarse_shape, (0, 0), 1), ++ (p.fine_shape, p.fine_origin, .5))] ++ initial = [np.broadcast_to(compute_feq_d2q9(1., 0., 0.)[:, None, None], (9, *m.shape)).copy() ++ for m in masks] ++ for x in range(cfg.nx): ++ v = AMPLITUDE*max(0., 1-((2*x-(cfg.nx-1))/WIDTH)**2)**2 ++ initial[0][:, 1, x] = compute_feq_d2q9(1., 0., v) ++ run.initialize(*initial) ++ mass0 = sum(area*a[:, m].sum(dtype=np.float64) ++ for area, a, m in zip((1, .25), initial, masks)) ++ snapshots = [] ++ for step in range(0, TIMES[-1]+1, 50): ++ if time.monotonic()-start > MAX_SECONDS: ++ raise TimeoutError('120 second demonstration limit reached') ++ if step: ++ run.step(50) ++ report['last_synchronized_coarse_step'] = run.step_count ++ fields, sample = measure(run.download(), masks, centers, mass0) ++ print(f'step={step} rho=[{sample["rho_min"]:.7g},{sample["rho_max"]:.7g}] ' ++ f'Ma={sample["measured_Ma"]:.7g}', flush=True) ++ if step in TIMES: ++ sample.update(coarse_steps=step, fine_steps=2*step) ++ report['samples'].append(sample) ++ snapshots.append(fields) ++ with tempfile.TemporaryDirectory(prefix='.plot-', dir=out) as cache: ++ os.environ['MPLCONFIGDIR'] = cache ++ draw(out, snapshots, masks, centers) ++ report['status'] = 'complete' ++ except BaseException as exc: ++ report.update(status='failed', error=f'{type(exc).__name__}: {exc}', ++ last_synchronized_coarse_step=run.step_count if run is not None else 0) ++ raise ++ finally: ++ report['elapsed_seconds'] = time.monotonic()-start ++ (out/'summary.json').write_text(json.dumps(report, indent=2)+'\n') ++ print(f'{report["status"]}: last synchronized coarse step ' ++ f'{report["last_synchronized_coarse_step"]}; output={out}', flush=True) ++ ++ ++if __name__ == '__main__': ++ main() diff --git a/research/fixed_patch_jet_20261013/manifest.json b/research/fixed_patch_jet_20261013/manifest.json new file mode 100644 index 0000000..08daa02 --- /dev/null +++ b/research/fixed_patch_jet_20261013/manifest.json @@ -0,0 +1,53 @@ +{ + "baseline_files_checked": 531, + "all_baseline_files_unchanged": true, + "new_source": "examples/fixed_patch_jet.py", + "added_lines": 179, + "actual_runs": 1, + "exit_code": 0, + "guard_checks": 25, + "max_Mach_from_printed_checks": 0.03416159, + "output_bytes": 159016, + "files": { + "examples/fixed_patch_jet.py": { + "bytes": 9646, + "sha256": "f27cd067fd7b9a7c6d7fab19fa471fe0617ee67889ae3931048557cc5659181b" + }, + "research/fixed_patch_jet_20261013/incremental.patch": { + "bytes": 9891, + "sha256": "dd95a98f03b7ce06d024a1d1d1f454dd206ad10a573a8060f728bad71941d6e8" + }, + "research/fixed_patch_jet_20261013/baseline.json": { + "bytes": 69721, + "sha256": "d2a83d490ca545589a7a7fc0e3fd187f4801e22e5c8d2d18ddb519097d3281b9" + }, + "research/fixed_patch_jet_20261013/before.json": { + "bytes": 690, + "sha256": "dd47f1e25a807a3eafef7d12429f034117f945a4ebfeb98eb1688d1752c3d30d" + }, + "research/fixed_patch_jet_20261013/notes.txt": { + "bytes": 2214, + "sha256": "155be36e201c9c8a043a87fc7a7d0064b703990b2aad86853767603fe38a256d" + }, + "research/fixed_patch_jet_20261013/stdout.txt": { + "bytes": 1272, + "sha256": "925abb3038095560d71a4e7733b38d93672397640cc88197c733a8a39e2f9f51" + }, + "research/fixed_patch_jet_20261013/results.json": { + "bytes": 1100, + "sha256": "fcd944b8dec61b399874b5386d6e00880f0dbc34d248ad371a6af8781fddaa93" + }, + "research/fixed_patch_jet_20261013/output/summary.json": { + "bytes": 6446, + "sha256": "a9a4ab5975684a386f05746f570ec4d7b1c5ee3be413400445122448f534eca3" + }, + "research/fixed_patch_jet_20261013/output/velocity.png": { + "bytes": 108248, + "sha256": "0f8ffc3a7b36ffefa5c0cd8550309fe89d9de72cd5476f354a27fac89cb39b0a" + }, + "research/fixed_patch_jet_20261013/output/layout.png": { + "bytes": 44322, + "sha256": "cfc354c0192a5a9727a8056ff6c5bc4571f916143853e4da2dc16da965e10173" + } + } +} diff --git a/research/fixed_patch_jet_20261013/notes.txt b/research/fixed_patch_jet_20261013/notes.txt new file mode 100644 index 0000000..50070fe --- /dev/null +++ b/research/fixed_patch_jet_20261013/notes.txt @@ -0,0 +1,7 @@ +Added only examples/fixed_patch_jet.py (179 lines). Existing backend, BC helper, tests, prior sources/evidence unchanged against this round baseline. No dependencies/environment/system edits, DynamisLab access, commit or push. +Public API only: configuration loader + replace, equilibrium/macroscopic helpers, CudaContext, FixedPatchStepper(slot_reservoir). Native coarse/fine leaves, physical centers, on-site clipping Y=[1.5,46.5], no interpolation or oracle. Layout and three synchronized velocity panels inspected after run. Centerline values average two explicitly recorded neighboring native columns. +One real production compile/run, no retry or parameter/tolerance changes: 1200 coarse /2400 fine steps, 25 successful checks including initial state, exit0. Predeclared checks every50 steps: all leaf populations/macros finite, density positive, measured Ma<=0.1. External120s resource watchdog. stdout.txt is directly redirected merged stdout/stderr, unmodified. +Runtime resource results in results.json: elapsed7.101054s, peak sampled process-group RSS280051712 bytes, minimum available RAM63756603392 bytes, minimum GPU0 free15826MiB; peak combined task temporary/current output/prior refinement evidence1929396 bytes, below2GB. Monitoring is sampled, not an OS hard memory/disk limit; no256MiB RSS cap. Private compilation scratch and Matplotlib cache cleaned; temporary runner removed. +Snapshots0/300/1200 are low-Re startup flow in an x-periodic confined domain. Fixed-amplitude startup includes acoustic transients; no steady/developed jet, vortex/head detector, uniform-coarse comparison or accuracy/conservation certification. +Final rho range[0.99340069294,1.00000023842], measured Ma0.03416155101. Node mass2208.00001640618 ->2202.30112983007 (delta -5.69888657611); final macro boundary sums bottom0.12769020163, top0.03066523932. These node-weighted quantities are not an exact physical volume integral or a demonstrated population-budget closure. No mass-conservation assertion. +Read-only delegate reviewed geometry, wall clipping, probes and safety. One reduction-order issue was corrected before the only run: initial/current node mass both sum populations in FP64. No post-run source changes. diff --git a/research/fixed_patch_jet_20261013/results.json b/research/fixed_patch_jet_20261013/results.json new file mode 100644 index 0000000..d959a6a --- /dev/null +++ b/research/fixed_patch_jet_20261013/results.json @@ -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_patch_jet.py", + "--output", + "/home/frank14f/CelerisLab/research/fixed_patch_jet_20261013/output" + ], + "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-jet-run-zdq8n25a" + }, + "exit_code": 0, + "elapsed_seconds": 7.101054363010917, + "peak_sampled_group_rss_bytes": 280051712, + "min_ram_available_bytes": 63756603392, + "min_gpu_free_mib": 15826, + "ram_reserve_bytes": 6409714073, + "vram_reserve_mib": 1614, + "peak_combined_temporary_and_refinement_evidence_bytes": 1929396, + "temporary_budget_bytes": 2000000000, + "termination_reason": null, + "monitor": "Own process group RSS recorded, not capped; live RAM/VRAM and temp sampled, not OS hard limits" +} diff --git a/research/fixed_patch_jet_20261013/stdout.txt b/research/fixed_patch_jet_20261013/stdout.txt new file mode 100644 index 0000000..eccdc0f --- /dev/null +++ b/research/fixed_patch_jet_20261013/stdout.txt @@ -0,0 +1,26 @@ +step=0 rho=[0.9999999,1] Ma=0.03416157 +step=50 rho=[0.9999995,1.009438] Ma=0.03416151 +step=100 rho=[0.9984777,1.010592] Ma=0.03416153 +step=150 rho=[0.9973579,1.003838] Ma=0.03416153 +step=200 rho=[0.9933594,1.000131] Ma=0.03416159 +step=250 rho=[0.9925539,1] Ma=0.03416156 +step=300 rho=[0.9937773,1.000459] Ma=0.03416155 +step=350 rho=[0.9999761,1.009384] Ma=0.03416157 +step=400 rho=[0.9999998,1.007331] Ma=0.03416151 +step=450 rho=[0.9997285,1.006167] Ma=0.03416155 +step=500 rho=[0.9933134,1.000157] Ma=0.03416156 +step=550 rho=[0.9927858,1] Ma=0.03416158 +step=600 rho=[0.9945809,1.000122] Ma=0.03416153 +step=650 rho=[0.9999998,1.006541] Ma=0.0341615 +step=700 rho=[0.9999998,1.007461] Ma=0.03416157 +step=750 rho=[0.9999998,1.007199] Ma=0.03416156 +step=800 rho=[0.9945453,1.000039] Ma=0.03416156 +step=850 rho=[0.9931565,1] Ma=0.03416155 +step=900 rho=[0.9935648,1] Ma=0.03416153 +step=950 rho=[0.9997682,1.005144] Ma=0.03416155 +step=1000 rho=[0.9999998,1.007829] Ma=0.03416158 +step=1050 rho=[0.9999998,1.007131] Ma=0.03416152 +step=1100 rho=[0.9964147,1.001809] Ma=0.03416152 +step=1150 rho=[0.9931713,1] Ma=0.03416154 +step=1200 rho=[0.9934007,1] Ma=0.03416155 +complete: last synchronized coarse step 1200; output=/home/frank14f/CelerisLab/research/fixed_patch_jet_20261013/output diff --git a/research/fixed_patch_jet_closure_20261013/baseline.json b/research/fixed_patch_jet_closure_20261013/baseline.json new file mode 100644 index 0000000..8a157af --- /dev/null +++ b/research/fixed_patch_jet_closure_20261013/baseline.json @@ -0,0 +1,559 @@ +{ + "hashes": { + "src/CelerisLab.egg-info/PKG-INFO": "0b9a8a4e8d60bc531473688723ddef0aab02c7ccc4997e31c9b6a6c35011ca77", + "src/CelerisLab.egg-info/top_level.txt": "cd51958ca03afabbaa9618c60b8280e486f8cc0b0359b839e10f886e7c3948f8", + "src/CelerisLab.egg-info/dependency_links.txt": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "src/CelerisLab.egg-info/requires.txt": "36e1404178e5ea590b2fc04e8ba4d748ec9a82e7693136ccf0dfd204fe265c04", + "src/CelerisLab.egg-info/SOURCES.txt": "f36b29c1b34c4bd6b2acc3ccdd21c24ee5077df7e2a20a652d9fae77eedb8e21", + "src/CelerisLab/simulation.py": "34d69e71844f553790c5a2bed0f8fbfb912a9498e95b500d1ef2ad41cae3b424", + "src/CelerisLab/config.py": "2f1bba7515f5bc08cb3a8d140bcafe7fa0689e01b3b06494697bb2956a71530e", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/cuda/compiler_v2.py": "c4cc3ec4445c8d75e6a253dd87963877117a722bc73b9d4811806fc6045d08c1", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/lbm/refinement_stepper.py": "ad57a6a3887b007488b4954b24ff06cd8cde2b12674bdafb97bfda1961ae1da4", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/refinement.py": "554735c5613129eb29f339c6aeeb4f3a3bbc5aba67558be51fbf7c2fb6ac442a", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/refinement.cu": "025c59dc9c207a831e78e1635cb3f14fe60b64c021004a0d66e5d01fda8554b5", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/kernel_v2.ptx": "a599ee30ae66800f4d4220eb79dfed35ff32991661260f01ea58023ef780f0ca", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "f9f8242b38e8e0cf8425b75e2b0215bc15363c62eaa0fb43c761b8e0931bfdc9", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/common/checkpoint.py": "5b7caf3896167a3f37c539b58837de6eb3f8085fa7bf5f821a09666cc16d43a4", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/CONFIG.md": "41cafdbe525366c08aa9d0416ea026ccf0026ba7123b8a9b65f968a80d928e3a", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_j1.py": "51b758a271ff358f931b3140a80082294a67e66c2fec0f8c19319e37f92aadc4", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_j2_slot.py": "b7d2d3aa06fcafc3ac62ed4a50892afbdb7f86e5720ce75a39ce317b6f571dad", + "tests/validation/run_j3_coverage.py": "329869519b7078e854d96241a7aad8ef93f35ac9be83f0be502c3a93523c3b13", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/analyze_j3_saved_frames.py": "438f67dac682b94c4950626f8de4fdcde48c3a4e9ecf8fdf1b0ada4b6e0e781a", + "tests/validation/diagnose_j3_lags.py": "286fcd65b3261667a847b9b26e213d0af92cf459faa6bbd774f78c8479ce31d7", + "tests/validation/run_j3_reservoir.py": "47535bc3569ce68c888d38978bc4f9077fd763a17829c20c081be52bb18a2903", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9", + "tests/validation/multigrid/test_cpu_reference.py": "ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca", + "tests/validation/multigrid/cpu_reference.py": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "tests/validation/multigrid/cpu_reference_v0.2.py": "b6adbad7da625ef6a6b97958ea9625030ed92676d0cada48e061c87bcf7ca8c9", + "tests/validation/multigrid/test_open_corner_negative_control.py": "59a6f8ca80cdd63cb7827fbebf9b4b555c3793f19dd6bca801544ec10b5cbe1b", + "tests/validation/multigrid/test_refinement_followup.py": "6643e26cd877bf0d0f030e974f00a1d1c0f0350cc76d1c8affed3e8ba2f4393b", + "tests/validation/multigrid/local_stress_observable_v1.py": "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456", + "tests/validation/multigrid/test_refinement_gpu.py": "0021a39b3a131347196845cff6507c90c387b46b772fe1319d634178c5e13354", + "tests/validation/multigrid/shear_diagnostic_v0_2.py": "a8b1cf2f7abd00efc4d068bbd27bb2317144a6ca4c545d9b2e0dcf421eadebc6", + "tests/validation/multigrid/test_tron_additions.py": "8e7a6a90b85e64c7326719e7b8bca2f6d34fb4c80690f0685f7e291ab93bd2a4", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt": "0577df5b3f5cb3c7b6e1ef2de71344f8fd3e6d959117487a06cbaf7f2afa3dea", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt": "28ddd1267ca91a772f5a6bfc65d949c9a4ea7dac5c9ba3a0bdb168492810b670", + "tests/validation/multigrid/shear_v0_2_evidence/run_once.py": "6698a2e040c56be949b809387d4518eb0ba82d34cc9d99640da4f8bf3c35c23f", + "tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json": "56fbd0259ff3d4dbd14ace52f64e249a435e9df91732b0e4027def2c344c2e6a", + "tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json": "c2d7ce8d16a0f47baff0788a153353dcf67088da974d9cd3d521b04ecd91ee05", + "tests/validation/multigrid/shear_v0_2_evidence/comparison.json": "41c00372099dd04b6d323785e9eaf4fec09da1753d3d150ffa230800f904142f", + "tests/validation/multigrid/shear_v0_2_evidence/baseline.json": "98a7853341ea732762c7506694e3a867a7259bf110e9e461ea84f741fd9ab829", + "tests/validation/multigrid/shear_v0_2_evidence/manifest.json": "e42aa19e91608164698bea42da88fbbfab8b0f87cc37b27c5baf165453a4fdb0", + "tests/validation/multigrid/shear_v0_2_evidence/README.txt": "4306a34b6896bd6e7a5c2ca71d68e18450359239d0c7ad7a67a4e83e7155959a", + "tests/validation/multigrid/shear_v0_2_evidence/joint_report.md": "1860b8082108c8b8a87998af90cd0b81dce1c04e9f6c67b41e0912f9fef6cc9c", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_horsea.txt": "882f2cfb1dbdf82cce63c011397e7c2e6307bbcfec42a3510648d328cd6ddcfe", + "tests/validation/multigrid/local_stress_v1_evidence/run_once.py": "e629800291ef65ffea8555f66ec80bf15200552540b2a493a677bfb53d0830b3", + "tests/validation/multigrid/local_stress_v1_evidence/source_manifest.json": "d2cf90b73458f493c665c9a281d06aef0c190cf0d143639fb77ab838c78f020c", + "tests/validation/multigrid/local_stress_v1_evidence/results_horsea.json": "f17b4644d19eb75d55deb7021ab679cb9e7922a2b46f1cacf8b6da6bfb9a2690", + "tests/validation/multigrid/local_stress_v1_evidence/comparison.json": "be236671a501c31c06f7e266f6e0c0c2a89aede321a483452050ff37bf84c84a", + "tests/validation/multigrid/local_stress_v1_evidence/baseline.json": "64f6541447afbd15b1b15d802ad6f1b5042aaf84e7d4d2414e4ed4c52cf70507", + "tests/validation/multigrid/local_stress_v1_evidence/manifest.json": "3a9fa8c7d691c1b8c24f05940eb724d30b890dd8ed636551068d2633d7db2f70", + "tests/validation/multigrid/local_stress_v1_evidence/README.txt": "4f62314876047ee437bb9ecbf84798d2a9f6e85f6a3aef260277b85bcdb35fae", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_local_stress_observable_v1.txt": "6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4", + "tests/validation/multigrid/local_stress_v1_evidence/TABLE_local_stress_observable_v1.md": "d8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt": "457f1d2173496554c87ca6e61df518c0b8f1e0a28cdfd94b94ebbb61bc459d70", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt": "73e4ef01138842981daaa534390f1463839e63833c11f4e8872f94f8eaadc717", + "tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json": "914389afc39752bcd4132aa21fc8d5cbcf0ca75b1efd6a49becab15c2fa3361b", + "tests/validation/multigrid/cpuref_0_3_evidence/baseline.json": "0daaccee41cabeb17a00e2405e2c7fd0b80d36f2d01778eb39c9fd22b13d2d47", + "tests/validation/multigrid/cpuref_0_3_evidence/manifest.json": "2850ecaf2e19d010ba35eb54162371d82cc1a092831e08a03b6adf75a614988b", + "tests/validation/multigrid/cpuref_0_3_evidence/README.txt": "1947ee0232b88b3cc2c506d0b0af5ba051ecc94aa8f7f09228ef3939cc95919b", + "tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md": "065947e15b2242bce7d3eb05a3acdbb59939c621dcd5d31540ad4a1bd4416818", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_planar_velocity.py": "b656da0880b4234b1db805544edbe0d2473cbcc7c2c869c71d8251337f62a982", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_reservoir.py": "e718c78a53c3941aba7feb8ae4e8bb0b1726c1145de84febf91220c1917991c9", + "tests/unit/test_refinement.py": "90751142f920f1c5e988577a45afa94871a6617009cdc78323a87fc7795f4634", + "tests/unit/test_slot_velocity.py": "6a9494de9a32c350389ccbed58af48951f6b25a21a258537d2e8b73eb67cb11d", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/cpp/reservoir.cpp": "c3eacaf0271400eb45ad559b571a8f7faa2a809d5f1857ffeb5592addce2cd0c", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/slot_profile.cpp": "31ac58ccab175bf79fa59fc46d4c0842df18ab0a5e5916be84760d9da2b75788", + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C4_deceit_f1p5.json": "11dab8440d8c4f385061d2536403f4313c6f026b4e0b7672681327a9f4f37ebb", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C6_deceit_f2.json": "e0c4e8bcc55da5dc8de1e2fe88029aa3e67453734faa44451f5a6dfa9131557f", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C6_deceit_f2.png": "e0a66708ce2a29c4c6b854d2596b3ffca181dc6e35d99cc94e08af3e2d8c024e", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C3_deceit_multi.json": "24c8e433aab6d207dab67546c4079868c4244c2948c32c94cd08e4f331991807", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C0_no_ctrl.json": "cf3af733a08f081cc5f879e8da79d7c60104099f4452af5b2a4a96c0e6bd5889", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C5_deceit_multi_f1p5.json": "a4cb4ff4481b39b9ee61b1d7209416237a7fe86b22c5068d713ccec9c3f7afe4", + "tests/output/exp_ctrl_matrix_streak_ny300/manifest.json": "d8a20dacc92321d98354684976f771a9ca8989fc63ddcd78e15c7768c6617671", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C3_deceit_multi.png": "c6fed617cc6ffe6677157a9b58811d5f4613725eb98a5aec830fd07dc1aac38e", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C2_deceit.json": "7526a6b20a158461b85b1a64070b46c2b21be1e01c5ee025e6746fcf47ea3397", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C1_stealth.json": "63d34a0ab33e9fa8fe7311363efbd1b2875691f5b4958bb645b8c7ac38f1ad6b", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C0_no_ctrl.png": "0cfd7ce8f9d743bf22a7a694b4e5a3616557cb8f1db2f4ddf49cc4bef96efef2", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C4_deceit_f1p5.png": "4dcfc186928dcb83d28e9eb4cb2ecb4b163eb6f121d57036b4c05ab162be0951", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C1_stealth.png": "5e3cbbefda06fcef243d7d06d74a473972350cfa4ae88bdfdb349dce13943151", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C2_deceit.png": "22f1db77499bdbd1b3cd35f5b58b1a884dd94a86fdcfef07abd4157e6aaf8d19", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C5_deceit_multi_f1p5.png": "823e475cc901af3d6f4d0c56eb07822b3e73a2b9d0aa23e20e3741023fe90092", + "tests/output/kan99b_validation_esopull/summary_runs.json": "fe3294a953580204319fb1143434e15096d8455b6073100dfe0d5491b76af394", + "tests/output/kan99b_validation_esopull/summary_runs.csv": "1a44bb27ee0a7fe0270905248c37364834248cdc8710bd68142a6a79bbdad82b", + "tests/output/kan99b_validation_esopull/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "9fbc7d507c129ed85c68a9a313e3eb3431470d091bd7723e63f8afd8a3d2b737", + "tests/output/kan99b_validation_esopull/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "8faac43f42d6e0c70085c6e616bfff4df8de897e315fc0d2b4aa8bd635c3fa05", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C4_deceit_f1p5.json": "b613ae55fcfbd45a1a922d6d529e5274ba9d2987fdf5620fe866b889b931e48c", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C6_deceit_f2.json": "dbf54f9a183072547b22fa14334f0167e6eefb21c1208c4e8584bc196545a399", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C3_deceit_multi.json": "2100c6cc5c358a249804ce8f6f98531f3bc868e27af6d21a9d441b1b6a9e479e", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C0_no_ctrl.json": "a8b4697b7c0caeb958f80e282e32d673deac8c914008d64e6b38f7883eacc57e", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C6_deceit_f2.h5": "8d0c28566d2230b422691b738cc453705496bd150be038a576c0c0fba218fc1f", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C5_deceit_multi_f1p5.h5": "608767ca11d104fa4506b57204a0c8dbd739688224ebd924fe517ce9e21db823", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C1_stealth.h5": "a83c988cc8b1173a7b2f13b132ed7243e98304dccab2965aa16cf4d32f8df007", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C5_deceit_multi_f1p5.json": "6f6b9300782178e0ac9308a677bd9cb1565a383a78dff4cd52dea0bd464db31d", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C6_deceit_f2.png": "21bbe2dac1ab06ca1b172ec62d00daa7bcd65d99adac0ed03c5e30bed59e871a", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C5_deceit_multi_f1p5.png": "602a6586277699968b4cb167b134c8c406577038af088aa70baff682691398c4", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C1_stealth.png": "c1e1d04f266deac5fb2815a8283da80f9139ffaccbec2219d98544296bf3152c", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C4_deceit_f1p5.png": "96dee924e89b90091192a8d7b43321f109a5491511b8a83da77cfc611ae0d93b", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C2_deceit.h5": "aa5800a0cd594eeb7cf5449d6469d55e0c9033ced0ee0a3b5d59152e68c7e263", + "tests/output/exp_ctrl_matrix_vort_nx1500/manifest.json": "5d28f0f5428d7f0341e20d5d1f19c17bbc6f0f9b2a441d3c95f5422f3f2b4bd4", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C2_deceit.png": "1dcb6fb959f944d7ad89c4abaaef4d1fd4a77db8901804530e86fb336b883eb5", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C2_deceit.json": "b88ff5049aef59876b349d105f1c3467c17c9ba9022a48a77a6984f20da34345", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C1_stealth.json": "515689cbfaa30a9e39d9907939ee194a4836b644a5e9124586e6b7221d2b394b", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C3_deceit_multi.png": "d69694a1a1b2f2ea0adc7b74b7526504e2ad0b5d6317bac9b3159b2e7e88cf90", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C0_no_ctrl.h5": "3a858d6be0a946e1d26bbfa192c2f0ca3910c0f140b42575ec9d9529dd99155a", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C4_deceit_f1p5.h5": "660e4619ea530dcd18c3afb2e7fa22cafd9cdba1be7888e31ab5b76a0902d2fc", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C0_no_ctrl.png": "6d4d3934f1c8b20c2a5c742ae080a7143f0c139741966adf009a227c27e9bb1f", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C3_deceit_multi.h5": "1e72126f11b2995437cecb8cc0eeffb8807efbfa43d8f346f28711fea98ddc90", + "tests/output/kan99b_validation_ref/summary_runs.json": "449316c30585a8de9997538dead5d4e35a59bf00a2ac22d01b101ab600a4bc06", + "tests/output/kan99b_validation_ref/summary_runs.csv": "e8b9620f3772e5e421026103e456e6e844a91292f40affb96174c9dbde9b6e4e", + "tests/output/kan99b_validation_ref/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "4391f41d17ebeea1092f13b901923ced4ee2a1c5b346b79ef791d692847286b5", + "tests/output/kan99b_validation_ref/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "105c6eb21f1943d9d935246eab1602ff2016c415a139e24fee2793e88e006ead", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C4_deceit_f1p5.json": "0085a679a423621003eea81d4ac83bfe2edef2879eed7809d2a3675a212f791a", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C6_deceit_f2.json": "e820cf73f0e90bf93c34b24416e7692a6c2e51352ccf490fa6714d0812331ca2", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C3_deceit_multi.json": "571370c74ad9af589f3dc214669bff3d857efe6fc4fa13815b5d793d12b53770", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C0_no_ctrl.json": "ec5b89961033d8ebe0d66ce1ec7940dc2faf98130c38319bc9984ef654e60b50", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C6_deceit_f2.h5": "2792be74d8564fa29fd0636fc8493630fba2779c165b44330197095b3e296b18", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C5_deceit_multi_f1p5.h5": "2c64ee6c7a4ea2c42ed8f3d274402bec62de0e02ea0340e16022f0cdc92af724", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C1_stealth.h5": "100727d94fe6c2e46d7807eed0442555bdd1e26ec9b04b4c457171a2bbba3255", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C5_deceit_multi_f1p5.json": "f86166f121b4eeb6d74d8176c9265e7a3ccfe2540d040f554b6f96e6a6222c16", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C6_deceit_f2.png": "fef4de0e3ac8203742f35c16a02445b19c3f556b11f73abd5d8e3ca05ca33d78", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C5_deceit_multi_f1p5.png": "9136448e6d7565ca5af3666f9cf6e154342d8a3475076abfdbdd1ff9faec34f3", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C1_stealth.png": "544537a9c500a05937fd3be17c25e7d887461d9b83a15564f9ab7063208f40f6", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C4_deceit_f1p5.png": "51e7056db99dd653affbe913d52fa41df6ec0db921109384e3c679bda06b5a83", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C2_deceit.h5": "39d6c162085acae1612650da37d2314757715931e83a854e08bb01407d0f8efc", + "tests/output/exp_ctrl_matrix_vort_ny300/manifest.json": "05fbc2e7bbad4267a38e1094bbdd6bee6ad270412bdb5e92b0dfc9fa56969517", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C2_deceit.png": "07fc5817eba30371272b87ee2e023c0a1144077d1bef77efb2fd5dc284badcb7", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C2_deceit.json": "b1fcf76039c91a9080b830352dee2e95316d754b968cc27a8f68c51527661e76", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C1_stealth.json": "b78851637b9b7b93070524a2933cae1dab6d682f8894579b2849c64921e6c29e", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C3_deceit_multi.png": "2658f0747ed7287f7912fe15cc58a086e01ba284277cb98689bac01ecb6ec12b", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C0_no_ctrl.h5": "57f73f5f8dc4b32b156bc82300b1efd1e4eddadd9b8dc51cb7e6b41fa5c966bd", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C4_deceit_f1p5.h5": "2864b9dd086709ee8b8c3f262118a5130b0d40c86838f3ca0deab5bb898dafa8", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C0_no_ctrl.png": "2c7f3a8be2ee540afdfb66299e43a65583434bee84bde590124524a82868c900", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C3_deceit_multi.h5": "39e0d9b032dfff8cf057b410a98973729285e7d03e89f9a6a002aaf7de3d7519", + "tests/output/stealth_sweep_fix_check/summary_stealth_s150_w0.02709.json": "8b1032e13975bb05c6a810fde175c8da51bacdb3dc745fd11c1049ca63bbf136", + "tests/output/stealth_sweep_fix_check/summary_stealth_s050_w0.00903.json": "fa7da24d5dab9fd3a3c2dea6b50d0224c7a99cd9141796e137304a6040b1ac8a", + "tests/output/stealth_sweep_fix_check/streakline_stealth_s050_w0.00903.png": "640928f7eb159e7caea32036123f86c281723d083cca46839ba86bce8361ada7", + "tests/output/stealth_sweep_fix_check/state_stealth_s050_w0.00903.h5": "187ac365f9f7370c888c4c65570c47e42465b2fccd432056c176528d45cf0c2f", + "tests/output/stealth_sweep_fix_check/manifest.json": "83a3f12a942fb644e470bd07a72f24921f2147d7df429110268c5c96a9953d1a", + "tests/output/stealth_sweep_fix_check/state_stealth_s150_w0.02709.h5": "e057e9db26b2546c0704e2c959cc7d2aac91e6a49b4c7ee75a409597a5db8716", + "tests/output/stealth_sweep_fix_check/vorticity_stealth_s150_w0.02709.png": "d2d202088624cf30868228f9c913ee30e1b386aaa2c22b0ea89be43dedc0712d", + "tests/output/stealth_sweep_fix_check/streakline_stealth_s150_w0.02709.png": "0edc7caa9caaffb754490bf1f6ac7ad7180e45a991439a3f4f83ed949a082a1a", + "tests/output/stealth_sweep_fix_check/vorticity_stealth_s050_w0.00903.png": "4088359b17c46ed4d7c8401d244808fe67723273b1d16d0671b69f9478c68c1a", + "tests/output/final_validation_round/validation_summary_report.md": "881cb7052e5a555afc87168a37268ee66e8e3fba172533706e858d996fabc7b9", + "tests/output/final_validation_round/sah04_mixed/s2_d48.json": "83c6c01201d90aae5c49e73ebeca88d1c7ded6cc83c13f4892a9188e6289483f", + "tests/output/final_validation_round/sah04_mixed/s4_reg_d96.json": "b32f03e6b347fc709cea2ecd488df0f85849c733bf6a4b9cf65ea69401c93a1d", + "tests/output/final_validation_round/sah04_mixed/s1_d48.json": "120e8e878f5712dc89b7cf78c7f8d0e3368d34ad5ef7494977e083b188a54c18", + "tests/output/final_validation_round/sah04_mixed/s3_stablecfg.json": "b38a3d197a188e65c163d974113af18f332b3abed083e2654e998d9980f6be9f", + "tests/output/final_validation_round/sah04_mixed/vorticity/s3_mrt_laststep.png": "dc96fcd05d458684cfb40d4cb741172213083e2f2665e2bae7e1f0267bb3575d", + "tests/output/final_validation_round/sah04_mixed/vorticity/s1_mrt_laststep.png": "73a3580ba3c7fe6ffeee4676a9a51b5bf678d6fb523456a61e185598389ea1e1", + "tests/output/final_validation_round/sah04_mixed/vorticity/s4_mrt_laststep.png": "57f2a82761f2de1a9fc2b78ee86159ca542c966494b9c704deb451da857da778", + "tests/output/final_validation_round/sah04_mixed/vorticity/s2_mrt_laststep.png": "786f492b96ed932254b5452e2d06ff088727f2d88c7e7c7b47d386eddfe07862", + "tests/output/final_validation_round/kan99b/full_summary_runs.json": "8c4a11cbf555e08a66698439170b850c57d537d8e75e4dd75beb767bbf7e38cf", + "tests/output/final_validation_round/kan99b/summary_runs.csv": "3fa92fdd3114f0472de44bc03006af1d4b694dfc69b06704c1667cd3627b6dab", + "tests/output/final_validation_round/kan99b/force_csv/k5_baseline_domM_re160_a2p000_regularized_mrt.csv": "de05e9699146f2adffc9d7c9991f9e48396aacd142afc3c08b2b64727c83c69a", + "tests/output/final_validation_round/kan99b/force_csv/k3_baseline_domM_re60_a1p600_regularized_mrt.csv": "53cd0dc47328b7b370eced1130508655e6815a29b727bf1fe4e4e125e4918905", + "tests/output/final_validation_round/kan99b/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "4cac1ccfdb7451de3e26d921a6406cc55d1d4630e10ec0d7ec9350a4abd49404", + "tests/output/final_validation_round/kan99b/force_csv/k4_baseline_domM_re100_a2p000_regularized_mrt.csv": "392c98de52011ddb344a5761c4520e870f4e49bbba3e144e5a02818ba2f9250b", + "tests/output/final_validation_round/kan99b/force_csv/k1_baseline_domM_re100_a0p500_regularized_mrt.csv": "9e83c5175aec644c0b97c081e610deefa731b87aef04da6297abf662a71c0702", + "tests/output/final_validation_round/kan99b/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "55b071f278e153aa353aa2bef85f0bce35b910a7b08103032023fe3a28169b89", + "tests/output/final_validation_round/kan99b/vorticity/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.png": "b91b332e7deb787975d3f08fa3325facd4a972b536694fcda52e6c01943c42cb", + "tests/output/final_validation_round/kan99b/vorticity/k1_baseline_domM_re100_a0p500_regularized_mrt.png": "6e7c3f6567c0ff0d00d75da8373031f5ba2a17a624cb8c5d5d6ae4f8749c33c0", + "tests/output/final_validation_round/kan99b/vorticity/k5_baseline_domM_re160_a2p000_regularized_mrt.png": "c4d232df2e6f7466acca711191d976aa9411ec0ade81572b531463f42a7d633a", + "tests/output/final_validation_round/kan99b/vorticity/k3_baseline_domM_re60_a1p600_regularized_mrt.png": "b2314c60491d20933422e1697998555dec2436d39545c71f990e9906884685b2", + "tests/output/final_validation_round/kan99b/vorticity/k2_baseline_domM_re100_a1p000_regularized_mrt.png": "2b2797b8f53170d04d1a70d1cdf898f7e41b3a76b9f3c1f276dfec952520ab04", + "tests/output/final_validation_round/kan99b/vorticity/k4_baseline_domM_re100_a2p000_regularized_mrt.png": "8135f470404fe11ac97968fa580ee35232e90dcace3c6ad94de17ef7aace24d6", + "tests/output/kan99b_validation/summary_runs.json": "d7239aac64884202558741074f2d644ade9e2365d94d0b7556fba68dac94868d", + "tests/output/kan99b_validation/summary_runs.csv": "c44da69563d58b917291a9fd402d1f57055861bffab6f9e32d7db91297428d45", + "tests/output/kan99b_validation/force_csv/k5_baseline_domM_re160_a2p000_regularized_mrt.csv": "27b64460923d235d34b760f2a2371ad01611a70e38edb03d6fd6a2fe7a7de6e0", + "tests/output/kan99b_validation/force_csv/k3_baseline_domM_re60_a1p600_regularized_mrt.csv": "76ff52f4494b7ef7650c05968732a8caaba94d2b151234c02cf624f5b3a712ab", + "tests/output/kan99b_validation/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "28a83436ca8bdad38865ba21ce1bda679562a5ae1cfc6ee8fc6e86ff760ec66d", + "tests/output/kan99b_validation/force_csv/k4_baseline_domM_re100_a2p000_regularized_mrt.csv": "823ae04870fd951879024a18169ac5cba8db4b3201726f6a00f320f1958d04c6", + "tests/output/kan99b_validation/force_csv/k1_baseline_domM_re100_a0p500_regularized_mrt.csv": "a591daf2cdecd6ac3689fa2a2aba917b23053ad26e3ef1f635c81aecc451475f", + "tests/output/kan99b_validation/force_csv/k0_baseline_domM_re100_a0p000_regularized_mrt.csv": "e95c27c646c0c9baf8f455f876c115c8dbdb23cef9d9d550f455098bf0c03b55", + "tests/output/kan99b_validation/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "3c2ea79a0e27f561215febee2e165d24b3617a648bf908981c068ba59d549c51", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s125_w0.02257.png": "a892f18c74fe13efd839bfd5068097ca0ae07acebf6c06eed89e1b867e41fcb2", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s125_w0.02257.json": "7e542f59746429022ce1794854c6fb36e8ac658dd0aea3bc1140a45e83a3f1c9", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s100_w0.01806.json": "b76216e0fbee00ef754edbafe5790a99ce7d53638af629947ddd9615598e4c08", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s150_w0.02709.json": "42cb241d9cfb01308ce28e129756b6cb3fe2a8e9679518da84bcb8b607fe92ac", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s075_w0.01354.h5": "558be308dbf334832bc1d29419ba5be142969117a11b124864f6b221c8fee509", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s050_w0.00903.json": "53b579811a0b651ba7cc466c230c115b9f88486c6675e0465d0715d3377a75cd", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s075_w0.01354.png": "9f4a7d89b2471becaf31e84c14402441c5fd96fc7190cea5e8a9fdd06ee62002", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s050_w0.00903.png": "5f18f56b0ff2af3350216b65540a2bc664c569520624cfc6cc2439a3c5369560", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s100_w0.01806.h5": "30776f333959e0e9eb5ca96b269e6a8052c5b94941a4e3b36d8a6af8076920ce", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s075_w0.01354.png": "b5393474d99191e88dafea4144b6a8eccfbdf75107125ce4b05383b17007d06a", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s125_w0.02257.h5": "4ed9d8587f75ad4625ec5501fa99fb733cde037180ac53f92a210ffbb08375de", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s075_w0.01354.json": "ff1c1cc649e589b5425787493c2b0d04b6c39b43043b1968d65509cb0a426e82", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s050_w0.00903.h5": "4de51584b24095f8cf4480b8941593a5f913332f9396061ed077c9d49eb2ee11", + "tests/output/stealth_steady_sweep_nx1500/manifest.json": "0dfbb2c1b5bf9093fef169e4dc6319edb5c87a1e967e8d558613e2c64a2ca734", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s100_w0.01806.png": "60824cbdf21170cb4ffd8af0a49e8522c2d79cb2694690ab67995ee973265efa", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s150_w0.02709.h5": "b22d54a05cbd3138a1fe585a825246989fcff7c00f51aa9312a4185d963db933", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s125_w0.02257.png": "c1e1d04f266deac5fb2815a8283da80f9139ffaccbec2219d98544296bf3152c", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s150_w0.02709.png": "bcf098083a73798dc3906807218058cc571435a010234a5a350b585ba9915c78", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s150_w0.02709.png": "3bac21cc75a01429399cec308d6bf5fc8918917def1bf5d7fec1cb6003390a41", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s050_w0.00903.png": "a675f41df763f0a1ac0a06386315806b24f2571f5dabc8693fcd871a13ed22ba", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s100_w0.01806.png": "92515588596596cc1d691c643fa48cf828492c2eaed96355dcec58109de4b5aa", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C4_deceit_f1p5.json": "0393661f08b748428fc366eeecec3b34b9d9a013aa6b151a15b33c7e3c0e1818", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step080000.png": "bffef412087e426b614d8c05e59bd7580ee49bb77319279ddc4c1bf825678c49", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C6_deceit_f2.json": "de067f01ef5c11249d67bbe5e02db6f2b4c5590214de02609bca115edf8dee64", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2.png": "846badbae81b75f765d89e5a7c4f88aeb5d57f2387511e4f2f84c72a192ea9f2", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C3_deceit_multi.json": "eb21d1c69e51f01c1a6be1ce59fe86763089ea5aa667b8872d0186af035b24b2", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C0_no_ctrl.json": "780a0d329cb86990a17a088f49084410abb1fad24f659255918e5ddda6b3dabd", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step080000.png": "ff7836b8229d9a5dd3900f499fe3e7f0c73a61c7109b6e6e79b11a0fb459bb63", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step040000.png": "f2b56a7e30bcc363ed69fc19705403181ac5de90800eef03039a389a65869e30", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C5_deceit_multi_f1p5.json": "261b698723f19526a447679a2be8666c8d0cbf6df81b0c9de6d051960d77308b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step060000.png": "0697e0ae06a01154afdcf00330ba870bd8f36d21561a33846ad7ba63fb731179", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step040000.png": "1de3d7f54e91c5d5850f4358d1872e16fefb36d32a1b6293facb54524e32315c", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step100000.png": "91f0bf6ed3e854f7f83623a3f19bb12c83b4aac239e3eaa849fbe50e7baddff5", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step080000.png": "303c1d2d4c49b4a7495365c8cb2bcbfe9bdda7cbc0a7c7dd1f01e8aa62b3573b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step040000.png": "dd5945458a35d81b31a0e2f3a693a5023d6960474263e7dc86c22367a56cc13c", + "tests/output/exp_ctrl_matrix_streak_nx1500/manifest.json": "0d97efed02f775c25dd8a2d7439f310b715d142ff8d603c9da6ddab197570ce8", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi.png": "69022ef9175acf910374ec73848640548b85fc7beb7e6950843f52c10ed7d61b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step060000.png": "16ba30b8cca0d49e6b76be0bb4f0d14bbf276ca6ec47ebf56907c7534e15c4e0", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step100000.png": "8548b6dff635cf9c92e2baa119866277e3994366eb31aeb30641b03b3d80ee9f", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step060000.png": "56100f169c3e378b84bfc89c5477d2c142ca043d9f28eaa70bc5448c49c7f4d5", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C2_deceit.json": "587cd42d81b1325bbc766d9ca6c1fd3d076bf5a772efd45d056c2c4e3db742b6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step060000.png": "e43e95e7126de8cb857154353f161914c225f8c9f17eb44b1ff744249368a4d5", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step080000.png": "676d21ffc7180d34a6725a8bf49503ce59f48d65500450c3975d01e65162899e", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C1_stealth.json": "73040aeb7ef07c538d4687b101c599210e660202eb1c2c3e0894dfbde682d137", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step100000.png": "e22171ef86979c4398c45ada9cd0f5e4c4e5b034f271df5fa8ac9a762a8554cd", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step100000.png": "0d73042be73b0de8d0a591e56c01e3c802483aa22a97f27e0300cba82c708066", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step040000.png": "a6e95fd5c24052db20d5ece200edcfe5e261c00950ca964c89df9f7335579634", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl.png": "d74061347ac3505fad878e330f6cb04d23bdb13082bfa1afa2fda0872f80f388", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5.png": "3156400eb59fae0638556c2711345f12ca49d951ff09e6464a2271249409a6a7", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step100000.png": "d69e34c82da98b28eef7f1af29f5d11f400e90f628049f6f5f4a3a419a4a4340", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step040000.png": "ce1f372b517dd52fc3f3eb066145e04ab6841e43b67cb0f6bfbdb42a6738eca6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step100000.png": "07cce6c99dfa7b56dd4d3aa452873a676a5a00e9f046555fa9dda30f16dde488", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth.png": "a892f18c74fe13efd839bfd5068097ca0ae07acebf6c06eed89e1b867e41fcb2", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step060000.png": "80b63bd309ef11a3ebb2f1ef301b49cd8f09bcc25562097d382f859306c9fe6d", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit.png": "1edb30dc35e29ad991695353f4b84e0507792935ec75ae9a7904ebdc007a471a", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step060000.png": "93ab8e09e58a64c5dd2eedfdafd27cf4dcfe4e8fae1af64ac71eac509e6ffdaf", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step060000.png": "f773bdef1c8d718d01b6d6d7735182c04564dd8b5692b359e1dd2f721c774b1a", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step080000.png": "5570fe6a25c92e5c6aa9a5129aa1797ba8ee7418170c7a351f9e35b931a366c7", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step080000.png": "32d3e700286eb4b46b3bcf757669481affd6ff6b53792d730b5a21da92cc57d6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step100000.png": "5acfe36694bb4e628309ff8ae1e839ca0a1f684607165bbc2883436b85208bf4", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step040000.png": "2c6f2b8d61cc2aaa63631eb6c98d3de26dcef705fa6b66c823ce7b9eef50e00c", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5.png": "adbefd0021e2c981d026718de8c63594b9c8e5971901d1dc40835cb69d95b93e", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step080000.png": "ce8b18e4dd976ed590fcc44075f3fb058ca7b23e15a1624726c181c4dd0c11da", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step040000.png": "168d21ef24ae198fbfd642f8ca315faad4c7bff2e2c09e16ff7c97e7360ea883", + "tests/output/screening/screening_summary.csv": "3a23c4f2bd54ed5ee9bdb5b6dcdc58eed04519fcf1b4790e0abd1e6c5288fb96", + "tests/output/screening/screening_summary.json": "caf64530f152b6b8ccec82a3c7ba44fa0b3aeb0e0221ef6121857bf62c031ecd", + "tests/output/screening/B1/force_hist.csv": "854bfebe63fb2d140823fc5dbc434a70c317c6ab0bedbd5220cec45665b524c8", + "tests/output/screening/B1/summary.json": "35b4d958bc0fdd6ab6c9c0d1ed50e85d89b04f7be3e34632d6c3ea95b89acb47", + "tests/output/screening/custom/force_hist.csv": "06da0f67b564d5c114332ef3b39167b1ba222fc50045f95303c75c14755b51d5", + "tests/output/screening/custom/summary.json": "1701ed75e5e9ca16127f495ccff1d87de245d81df581e94114c8fca6fbbe77fd", + "tests/output/screening/MR1/force_hist.csv": "f70fbfa748fd0709e225523aaaa72b761db56df4f1d48f105384b94cbc44b31f", + "tests/output/screening/MR1/summary.json": "3d9a0fc19710820e3634ab2143b913b282beb159336567ab9ebf3de2092947bd", + "tests/output/screening/MR2/force_hist.csv": "c947b3c16b8e8f8f85a203cea8cd912bdfc07f96985c1c24a470b644170195ea", + "tests/output/screening/MR2/summary.json": "d2344e9e2517ec76c8b56bfbe3763dd465e24721856992401c57c414763481bb", + "tests/output/screening/MR3/force_hist.csv": "7df1536c83ee466b7195d9c521d3d3b1309acaf142f2855bba51fb279c7612e4", + "tests/output/screening/MR3/summary.json": "ad188eb1b271a6cd0fb4025b456eccac5450776f60db58466f804fc5a0e0ec61", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "examples/fixed_periodic_patch.py": "6732e440a47c237ea341703f2d80717903d34c68fd061bdc97189e5d877be46c", + "examples/fixed_patch_jet.py": "7d6370fe6d8b723b1b3e1492e89fcc72562383c0dc030c25a254ac3fc899845a", + "research/j3-lag-2026-10-12/host-check.log": "b2b6d262934b3abf9e0f0bdbde14b339cb977f7bffe391c17b51b5d067862dda", + "research/j3-lag-2026-10-12/REVIEW.md": "f388b64b0cc0413dc9865afda90ed24de666dda0d6cdb821b4363ce1b73631b3", + "research/j3-lag-2026-10-12/trajectory.h5": "2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986", + "research/j3-lag-2026-10-12/baseline-status.txt": "e0b69879084f54afac1a3bc3701f1de9819068190c815ae84421f02f83cad9f7", + "research/j3-lag-2026-10-12/baseline.json": "5e9a920813fe3d775110af85af92970d5245a7040ace804445e432353b77e489", + "research/j3-lag-2026-10-12/gpu-diagnostic.log": "97956b517072b7c34e2e29e2a23f87eafb19b9eda786a4b8149e4a2eaed76ee9", + "research/j3-lag-2026-10-12/gpu-availability.log": "b227a519b8286849cfdf842573bd451803da048c6b27af9517f6b8964cd3aa39", + "research/j3-lag-2026-10-12/results.json": "00435ac7e402943e55e702fac1beb5af8cafe71967999658bcde2b29077b1fa8", + "research/j3-lag-2026-10-12/incremental.diff": "ebdf66c72daf17b926482f79a1a30bf0eb2d27fc930a7bb62e5449ebcf72fcc7", + "research/j3-lag-2026-10-12/end-21280.h5": "19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588", + "research/j3-lag-2026-10-12/start-20760.h5": "6c4cba5928c77566c2afc32231311a3986831c18fea766faadebb101243399e2", + "research/refinement_slot_20261013/incremental.patch": "2daca4c9751190df27e18ea79e46685a8fe3cbb6d42b34135b1219b8f53ea3fc", + "research/refinement_slot_20261013/baseline.json": "17b1a8cb7e8232979cd1fc9976cb6b78aa58a7005449526ec15cc0bfd45f8139", + "research/refinement_slot_20261013/manifest.json": "9f28f275533e8a1a761ec748152170b40845612058236ce331c47ae6c5d68713", + "research/refinement_slot_20261013/before.json": "482b02da26207ce32deb9368b6eb63f9de7b4ab670078c02f458f512fb182b53", + "research/refinement_slot_20261013/notes.txt": "8c70efe2acef9f179c453d297b27047b7632a2d55e0739fff4bccf74e0867511", + "research/refinement_slot_20261013/stdout.txt": "1cabbc8a87a2a237ffa649feac0b1b8e0ae8d769af8c298e600e249d2a525f58", + "research/refinement_slot_20261013/results.json": "6245de38106d7a7b0bfea0aa5100b9c9e393ab5436fc594ce0295b4526964b8f", + "research/refinement_slot_20261013/cpu_results.json": "2a891c1adcb3b25390ee7967e5171396aedb9cb4da5ae85f7444450d758671d5", + "research/refinement_slot_followup_20261013/planar_velocity.sha256": "326639a3e66b2b8dbd21ecd76b32a331f3194a82d1b5888219eee4a1782f6366", + "research/refinement_slot_followup_20261013/incremental.patch": "b734b4b540ece11a037a0f119a9846c39c09c8247d3cc89877880a27c3d082c4", + "research/refinement_slot_followup_20261013/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "research/refinement_slot_followup_20261013/baseline.json": "7ee505b7371a5258db7cb197c999be8859d14641915e3085f1969deb465880a4", + "research/refinement_slot_followup_20261013/manifest.json": "b11c1fb42abccc4b5638b974d1ea00b0687d8fad72b492eab3c8435bf485fd13", + "research/refinement_slot_followup_20261013/before.json": "809c4a6f330d4a29e92415fd0eb820f34dec38484e3560a8b9287b09553c2d87", + "research/refinement_slot_followup_20261013/notes.txt": "c04644a287aa936c9c6de0ca9d8bd83cee2d80aab9544ca284c9f7c029bfeff9", + "research/refinement_slot_followup_20261013/stdout.txt": "acb72f2b14e1abfe750330d84a38afe9bbe944bf028dde9700a291d5edff4be4", + "research/refinement_slot_followup_20261013/results.json": "dc38c3f5f88fac2ebf49be11df84e9f3da9d25504d400b6a506240a91735e4e1", + "research/refinement_prepare_20261013/incremental.patch": "df01345b8e2c33ebf6cdcbbb5104f02c4d7c239a6e6cafab1833228791bfa9a7", + "research/refinement_prepare_20261013/baseline.json": "5cc3c35faac9bb43a0017d83ddfca330d7da93f1e6407391da56b2e9df3b28b6", + "research/refinement_prepare_20261013/manifest.json": "5d479557cd01d61d8b652a3cf456fa57665bf624ce3b4a42c747523b74dec548", + "research/refinement_prepare_20261013/README.txt": "eee46f01add6ed7a5da76da76c98da628e13b930cfc49785399d7afbedbfd95f", + "research/refinement_prepare_20261013/validation.json": "945f4c3604ae0eae91c29741a39588207cfff3e05646e03a12d074a299956c2f", + "research/refinement_prepare_20261013/validation.txt": "5b5a8e9d455d37064c6709dcfd14e89ba66f51f09a11a9863b5cab67ac651d42", + "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", + "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/repair-2026-10-10/simplification-checks.log": "c9f15e870d02003480adf1a7f2fe4a9aca66c1934c4477619f05c8a4798ba85b", + "research/repair-2026-10-10/repair-state.md": "4d4aa1ec0c11a87d2c8380912e7ed74cf5c910ae42e5cc529effde36c9020969", + "research/repair-2026-10-10/TRON_HANDOFF.md": "f8aaa3d99cd133c2055d4adf396a0a57d14f6006aea19e87611bd1c2c1b53a88", + "research/repair-2026-10-10/final-gpu.log": "988bb97256d17b88c14f3793b15880d727ecb285abe62e7d2ae27a16729651c3", + "research/repair-2026-10-10/baseline-status.txt": "074088d793014e3b8154c58718058c7d300fb45595f5129fa957ef1e4cec38e2", + "research/repair-2026-10-10/repair-architecture.md": "49be42ff5c994017f3175e17efda14d84f0b68f8ecd239f66ccee38415b60c5a", + "research/repair-2026-10-10/classic-results.json": "a5d15305f516fd378b54cf9029102be58a83a55a7bad4b8e058fcfe0cc9898f4", + "research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff": "292b4bafe7a62d4fbbf7c165eb99929336edfcaa16b15f34f72ab71fcd928391", + "research/repair-2026-10-10/repair-numerical.md": "0272ebfa8c519aad161c520542cf53156574661609b91fd5ccad7955fdf2bd7b", + "research/repair-2026-10-10/provenance.json": "a81b7e32ecf7182c9617df1b39bbb063a05ef89290ad501bac4573cd5e8a6832", + "research/repair-2026-10-10/classic-signals.npz": "820c9a0b0713d7455f0a5839ac2cd5ee706086d1a26461225dcdb095673421e2", + "research/repair-2026-10-10/baseline-hashes.json": "d6a7d5f9ec5bceb0e7927d55603d9c5e70105982cd945723454659b19ab476e6", + "research/repair-2026-10-10/final-unit.log": "a892a39ecf88125558538cadce2cb5dc46d106b993b164e03da4ebb0eee68cef", + "research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "research/j1-2026-10-12/REVIEW.md": "13004a4f140acdcf59acb57e9e2dda1bb95763d30060f822a7c206c94b813a9f", + "research/j1-2026-10-12/gpu.log": "8659a78ea52bbf8eb923d46ea71636ce63cd322352d5c98a74f631e666dd8cfb", + "research/j1-2026-10-12/baseline-status.txt": "ac398360e05b746b89ae0c3acfe202b5122e650a3bb1ff234ab26f874a303e64", + "research/j1-2026-10-12/baseline.json": "ad7afdf7b3913d11c07343e971fe2f43c2d1a2b99e3d5904a6ba89e3bb0b24fb", + "research/j1-2026-10-12/checkpoint-gpu.log": "adfe3d77d2e6c6f6184dccc0267b4404b20a7709505d5ff5affed0ed4a618083", + "research/j1-2026-10-12/cpu.log": "60cac097f7c4f11401df2aacb43a248640555e7628d2829c4680c71db34e9640", + "research/j1-2026-10-12/gpu-validation.log": "d1e9f2aea17a85eddcd94b81c700738ce073214857b55c28abd1219ff1edbed7", + "research/j1-2026-10-12/results.json": "449f8a17dacac0fc6d2489c4b10bac330dbbbdb38fad3ce54f739ac8c6d48e85", + "research/j1-2026-10-12/incremental.diff": "a454c23da7b0011645949c0fbf64d0c41ecfdab5642b1b7c5119868005d3c721", + "research/j3-coverage-2026-10-12/restart-21280.h5": "3e89c12c16f91f76ca9acd909e0fa7d42df6fbb5e870b299aa08ca42bc3e3dc9", + "research/j3-coverage-2026-10-12/REVIEW.md": "7293f3f3442855c8521698605aab504e026915a7bf1e77f5a24710d89a812443", + "research/j3-coverage-2026-10-12/restart-reference-21296.h5": "7192f510dd7820675aa1de130f55514136fba782cf77f92545189918a7e0c328", + "research/j3-coverage-2026-10-12/negative-end-20760.h5": "bd0bd063579d625e358762b1fdde5ac11bfcf739646a847fb77a4a2031011b9b", + "research/j3-coverage-2026-10-12/baseline-status.txt": "31c949b11b20d7cd4202dba16882b5712aa1653da0cb2da2f0ebd69bf488040e", + "research/j3-coverage-2026-10-12/baseline.json": "d8844104f2665a25bfc417ee29becf89ab3955fac9105b5ddb12cfb1fe2a55b0", + "research/j3-coverage-2026-10-12/verification.json": "205986efd2b41635721b7fd20288be982348c765180102c7102750ba088f3a28", + "research/j3-coverage-2026-10-12/negative-budget-20744.h5": "c09d75fc4a2cff68039a0956bd9d32b79b9cd3a6b386c72b4db54c214b110cd8", + "research/j3-coverage-2026-10-12/gpu-validation.log": "505cd5a5db46d7984aefb2a614151c25c4ace0e7d2a52e02c3e4f9792fd8eb95", + "research/j3-coverage-2026-10-12/results.json": "02460981ad49c9cc13b4246abad1d8afd2599c61bfb545a6e32da9bbcd5c0db1", + "research/j3-coverage-2026-10-12/incremental.diff": "98aa7855d5d6b91b4509a924c8a5aabab4339ba29c7e7dc2d91262c48e3848ca", + "research/fixed_patch_jet_20261013/incremental.patch": "dd95a98f03b7ce06d024a1d1d1f454dd206ad10a573a8060f728bad71941d6e8", + "research/fixed_patch_jet_20261013/baseline.json": "d2a83d490ca545589a7a7fc0e3fd187f4801e22e5c8d2d18ddb519097d3281b9", + "research/fixed_patch_jet_20261013/manifest.json": "3efaf5af8d6a4f6c3460d8023466af611ff90bc9fc79c3e7db6f591d172d1182", + "research/fixed_patch_jet_20261013/before.json": "dd47f1e25a807a3eafef7d12429f034117f945a4ebfeb98eb1688d1752c3d30d", + "research/fixed_patch_jet_20261013/notes.txt": "155be36e201c9c8a043a87fc7a7d0064b703990b2aad86853767603fe38a256d", + "research/fixed_patch_jet_20261013/stdout.txt": "925abb3038095560d71a4e7733b38d93672397640cc88197c733a8a39e2f9f51", + "research/fixed_patch_jet_20261013/results.json": "fcd944b8dec61b399874b5386d6e00880f0dbc34d248ad371a6af8781fddaa93", + "research/fixed_patch_jet_20261013/fixed_patch_jet.py": "f27cd067fd7b9a7c6d7fab19fa471fe0617ee67889ae3931048557cc5659181b", + "research/fixed_patch_jet_20261013/output/summary.json": "a9a4ab5975684a386f05746f570ec4d7b1c5ee3be413400445122448f534eca3", + "research/fixed_patch_jet_20261013/output/velocity.png": "0f8ffc3a7b36ffefa5c0cd8550309fe89d9de72cd5476f354a27fac89cb39b0a", + "research/fixed_patch_jet_20261013/output/layout.png": "cfc354c0192a5a9727a8056ff6c5bc4571f916143853e4da2dc16da965e10173", + "research/audit-2026-10-09/numerical_semantics_results.json": "b95b065b594aa2911740dab216f87936c9bf7f7fa25acfda93b5738443564035", + "research/audit-2026-10-09/REVIEW.zh-CN.md": "2841fd3aa7a6baedbe1079d90915c8b05212b133824ed6abccaa1f09656eaefe", + "research/audit-2026-10-09/root-initializers-report.md": "ca448457c444949d5d0e1e10fa7121064510b77fc4c3512580900f0299219867", + "research/audit-2026-10-09/numerical-report.md": "970330b3a593f79f09866ce6ae82bc0ddd81226230d0a6ff06ae8ae756ee80da", + "research/audit-2026-10-09/numerical_collision_results.json": "51e5c263bb8cde82cedef2ccfdbf5ef657742a80218d7896b1ff877516e59693", + "research/audit-2026-10-09/architecture-cpu-results.json": "e1b809210005c8765b13fddbb5ed710d15f6fcbb4c5788a4064f3e88808433ef", + "research/audit-2026-10-09/numerical_compile_results.json": "c3b0ae02072a2ec408ada7513b542ec255f6855cb743a3ed7f91bd8f31504f44", + "research/audit-2026-10-09/state_results.json": "da9170df3e11231c73f20e5e79ed68e08966673d1dd52004ea6b6a279afc0dcd", + "research/audit-2026-10-09/architecture-report.md": "861079dc3f4ced9fdc41bfb22002d32e190c0d630d3ba2f138f9dc7a949b8371", + "research/audit-2026-10-09/state-report.md": "f8708807efc2e109810c5955f7c1884a932668c0b3cb2963c2df3b09f2a3d5c4", + "research/j3-offline-2026-10-12/REVIEW.md": "d9902c58498e73c29e054b23adb968f7e1e14421cba5c58d03bbc5a50159ae79", + "research/j3-offline-2026-10-12/lags.csv": "fbd9addd413f24c47f4411317e872265bb774e8e1724fe169412befa860ae94d", + "research/j3-offline-2026-10-12/localization.png": "a72907638e32b0ecfc2205bea438e7b408f40aad86217ce6ad9b4877840c9cfc", + "research/j3-offline-2026-10-12/results.json": "cdb857bea6f4e06ed15acf773505ce6d5147f8cb8ce0a53cc368ee267cde6361", + "research/j3-offline-2026-10-12/cpu-analysis.log": "bc02a9b197fc15ae1b503ca54655a7622d4361f9b45b7848ff9c387ea3665f11", + "research/j3-offline-2026-10-12/regions.csv": "3a8fc640b61d70e3b7f73d2bf8ac2bd3f720adf39a90dfda6180430e0489efae", + "research/fixed_patch_jet_records_20261013/incremental.patch": "63485fb4eee8e2e89b683961aee32a6ca00ef5e607a362efb3290f3a08809222", + "research/fixed_patch_jet_records_20261013/baseline.json": "d73ddb2a6629f03655aa05fae08bb4bbc9474c686af56dbe29c99d6491b7508e", + "research/fixed_patch_jet_records_20261013/manifest.json": "97a2fbf139985a19cb6c0e0818646571fa1bcfb23e36424998a64777db641592", + "research/fixed_patch_jet_records_20261013/before.json": "68ec7ef820d5f826b6e24c6afdef71c76bd22400393815321ac3a1905c437796", + "research/fixed_patch_jet_records_20261013/notes.txt": "6d55a6395833fa02883357752ab3d8ea43df516fbcb40e4006fb1756757b1e99", + "research/fixed_patch_jet_records_20261013/stdout.txt": "6e579eff0c1762ba31d8b1cee709e0cdba2e3f408432b71fe374b2d9f450665c", + "research/fixed_patch_jet_records_20261013/results.json": "7997ee1626ad0640a9d362499c8e0eeefe9d71913fef5f2280112d5bdc9b50d4", + "research/fixed_patch_jet_records_20261013/fixed_patch_jet.py": "7d6370fe6d8b723b1b3e1492e89fcc72562383c0dc030c25a254ac3fc899845a", + "research/fixed_patch_jet_records_20261013/output/summary.json": "a448c2e66a56ee48071315d6f73d0ec1afccc29d680ab3a40d51d1df62dd973a", + "research/fixed_patch_jet_records_20261013/output/velocity.png": "7c67c5f64a4bec94547c0ac7833e6d47eeaae9696904c1465a9d5d969008b79d", + "research/fixed_patch_jet_records_20261013/output/layout.png": "678ba19a51c112960ace2a4b8d9d94e43287d97c3a6ef892684630ab37b70255", + "research/j2-slot-2026-10-12/REVIEW.md": "10c4a94ffc32e0a2c4e0f6593b7cfc28479b5869f279f0b9d0b708fa3a47d1e6", + "research/j2-slot-2026-10-12/gpu-serialization-failure.log": "df804e53b35e7ddaad79a17842b4b5fd9d834e29ca2d56edb00e835848d09200", + "research/j2-slot-2026-10-12/baseline-status.txt": "812616e2d941efcf854e1b37d6e662dda1aaf2b69074fcc04017133e13b72166", + "research/j2-slot-2026-10-12/baseline.json": "e82a1844145fd0cbc585c581b29f80b56193f122cfe1dfa7578f26904a720285", + "research/j2-slot-2026-10-12/cli.log": "9482ad7101d501f27f92e204b2f3ae5c6d91bd887b525aa31cb4a2a188f3cb92", + "research/j2-slot-2026-10-12/cpu.log": "91aba5961006909fbbb860429a9d3cfc930112a0d74c7788bc51c0a5897b47e5", + "research/j2-slot-2026-10-12/gpu-validation.log": "223351b52c70fa4523289f3a1b3db435a11286379253280470900ffe397580a6", + "research/j2-slot-2026-10-12/results.json": "7d35ca7989aed5380e0a45de7f583972566fc516a051da63c53b35514e267494", + "research/j2-slot-2026-10-12/incremental.diff": "c9e391bc91438cd912c1ed5a419705d4388522f672c67a066cfc055e814e699f", + "research/design-2026-10-09/math-and-history.md": "64f8c82e4949d6f58b46faa09800958714859c36cad20bbeeae8b449ae7a6099", + "research/design-2026-10-09/math-checks.json": "94750381954317cde8d649db26beaed8ea945666572a05030ca2b4d97d384011", + "research/design-2026-10-09/Contracts.lean": "2442d9a778ef20e8af3fecf23be6fea6d73c6299ff744c9664b652bc5ee3f034", + "research/design-2026-10-09/jet-study.md": "a362142ef04a5ad5dbb4c9db9d221b1199dccec53780c8f2da49a15201cfe529", + "research/design-2026-10-09/PLAN.zh-CN.md": "0341dd7ee306a040340c8e5dedb07a109e931c27dbf3c994d072aa78e3b6bc67", + "research/design-2026-10-09/jet_closure_results.json": "12cf7d400a206f9f9ec9ea6ad251fe6bb0232e27bcbed22fbc1ead2c0fc7d249", + "research/design-2026-10-09/grid-study.md": "4435dc1275ec5e15b118becc6ac391f306195d1e5beaa58037b1aff3bb2465c7", + "research/design-2026-10-09/jet_closure_check.py": "fde45d0f8518740ef5c0bf0fe7635d6adaf9a2e789927dd4e68e991c138ddc30", + "research/design-2026-10-09/api-architecture-study.md": "d6fb45ec784f0e1db55fb9f34e137b9f551db0b9b39fd4f0ef247a78fc34eedf", + "research/design-2026-10-09/math_checks.py": "4254983a783fe4bad8888b3d7c243c87d991c7bbf242edb0f56f25cbaefee890", + "research/refinement_example_20261013/incremental.patch": "6acd05df6669ccdcf234ac1680c6e76c75a2587974adb6728f7edda6fd625b69", + "research/refinement_example_20261013/baseline.json": "ae0af15ddb40709d1e348655a665264984a240ded1e28af816a8000d08e784be", + "research/refinement_example_20261013/manifest.json": "6da85ac513065dcf49200bc0872bec38b6c7ba61f7d82036c2189cabe5ac29ce", + "research/refinement_example_20261013/before.json": "d95cd518f080eab92af5e53e1e9b6b6fad626eae51990e510d2d2f2ae9d0ec7b", + "research/refinement_example_20261013/notes.txt": "f111f8cba94b43d1127945fa41615037e1740efcfc529e802338dd8c4ff02795", + "research/refinement_example_20261013/stdout.txt": "9c59fb315a5552cce4ceab171003e425bf64d747137c89bd86d8779a34adcbd1", + "research/refinement_example_20261013/results.json": "8ab13bbc022f2a66898aa07ed94f43cb6716570e7a360a809b7fcd097316db7e", + "research/j3-reservoir-2026-10-12/gpu-availability-sandbox.log": "1d58470512e583a0acfabf6896ee5f31e5b493b8231aed54b864f64eb275b02c", + "research/j3-reservoir-2026-10-12/REVIEW.md": "1ea5f860728584ea6cbe40ba3994e40471102d8e2cf6d93e28fe47222cba0cab", + "research/j3-reservoir-2026-10-12/baseline-status.txt": "0ef1a8c9878c4053ebc1a7d4bace6d4ec38bf27ace167b4239ddbb1c6c897e20", + "research/j3-reservoir-2026-10-12/baseline.json": "847fefd1eae971985d34d04d89ee6d6f1c91f6940c54fe351d112faba7bc6838", + "research/j3-reservoir-2026-10-12/cpu.log": "b33f6c1a1b0ee67968c4cff85d491e46e30e0d6c796b552629714ab8b5dcead0", + "research/j3-reservoir-2026-10-12/gpu-validation.log": "ff04024db197e332f37c912a96413e3251fd0186947348ffbc33af6f4a899f2c", + "research/j3-reservoir-2026-10-12/results.json": "49685de7679a14860258abf1753aaa6d116ad709b868d907ddb40e74c9b845ea", + "research/j3-reservoir-2026-10-12/incremental.diff": "fae312831d71e46dd477a640b06ed927853a9e735d26bf9f5868927fa31cfa56" + }, + "prior_source_snapshot": "research/fixed_patch_jet_records_20261013/fixed_patch_jet.py" +} diff --git a/research/fixed_patch_jet_closure_20261013/cpu_results.json b/research/fixed_patch_jet_closure_20261013/cpu_results.json new file mode 100644 index 0000000..8e4a1c0 --- /dev/null +++ b/research/fixed_patch_jet_closure_20261013/cpu_results.json @@ -0,0 +1,17 @@ +{ + "operation": "CPU-only geometry redraw, no CUDA context or solver", + "input_summary": "/home/frank14f/CelerisLab/research/fixed_patch_jet_records_20261013/output/summary.json", + "elapsed_seconds": 1.8603430899675004, + "peak_self_rss_bytes": 76394496, + "ram_available_before_bytes": 64069128192, + "ram_available_after_bytes": 64015175680, + "sampled_related_evidence_and_temporary_bytes": 1219264, + "temporary_budget_bytes": 2000000000, + "private_plot_cache_cleaned": true, + "disk_monitor": "sampled before/after redraw, not OS hard guarantee", + "leaf_counts": [ + 1824, + 1536 + ], + "CFD_runs_this_round": 0 +} diff --git a/research/fixed_patch_jet_closure_20261013/cpu_stdout.txt b/research/fixed_patch_jet_closure_20261013/cpu_stdout.txt new file mode 100644 index 0000000..d800b78 --- /dev/null +++ b/research/fixed_patch_jet_closure_20261013/cpu_stdout.txt @@ -0,0 +1 @@ +{"operation": "CPU-only geometry redraw, no CUDA context or solver", "input_summary": "/home/frank14f/CelerisLab/research/fixed_patch_jet_records_20261013/output/summary.json", "elapsed_seconds": 1.8603430899675004, "peak_self_rss_bytes": 76394496, "ram_available_before_bytes": 64069128192, "ram_available_after_bytes": 64015175680, "sampled_related_evidence_and_temporary_bytes": 1219264, "temporary_budget_bytes": 2000000000, "private_plot_cache_cleaned": true, "disk_monitor": "sampled before/after redraw, not OS hard guarantee", "leaf_counts": [1824, 1536], "CFD_runs_this_round": 0} diff --git a/research/fixed_patch_jet_closure_20261013/incremental.patch b/research/fixed_patch_jet_closure_20261013/incremental.patch new file mode 100644 index 0000000..a9a486c --- /dev/null +++ b/research/fixed_patch_jet_closure_20261013/incremental.patch @@ -0,0 +1,58 @@ +--- a/examples/fixed_patch_jet.py ++++ b/examples/fixed_patch_jet.py +@@ -8,6 +8,10 @@ + Scale estimates use the continuous peak A=.02, not inlet mean speed: W/A=600, + H/A=2250, W**2/nu=1440, H**2/nu=20250, where H=NY-3=45 between on-site planes. + An acoustic crossing (~78 steps) does not imply that transients have disappeared. ++Mach is sampled over all leaves every 50 steps and is usually inlet dominated; ++the discrete inlet peak is slightly below continuous A. This is not an accuracy test. ++The 120s checks are cooperative, not an exact interruption deadline. main elapsed ++includes construction, advancement and plotting; it is not pure CFD timing. + """ + import argparse + from dataclasses import replace +@@ -87,7 +91,7 @@ + ax.set_title('Native leaf grid: coarse dx=1, fine dx=0.5\n' + 'Red: internal patch; orange: coarse slot; dashed: reservoir\n' + 'Flow may cross patch sides; patch does not contain all startup flow', fontsize=10) +- fig.savefig(out/'layout.png', dpi=150) ++ fig.savefig(out/'layout.png', dpi=150, bbox_inches='tight', pad_inches=.15) + plt.close(fig) + vmax = max(1., *(np.nanmax(np.hypot(f[..., 1], f[..., 2]))/AMPLITUDE + for fields in snapshots for f in fields)) +@@ -130,7 +134,8 @@ + report = dict(config=dict(nx=48, ny=48, bounds=BOUNDS, W=WIDTH, A=AMPLITUDE, nu=.1, + rho=1, tau_coarse=.8, tau_fine=1.1, coarse_boundary='slot_reservoir'), + guards=dict(check_every=50, positive_density=True, finite=True, +- max_Mach=MAX_MACH, max_seconds=MAX_SECONDS), ++ max_Mach=MAX_MACH, max_seconds=MAX_SECONDS, ++ timing='cooperative checks, not an exact interruption deadline'), + scale_estimates=dict(velocity_basis='continuous peak A, not inlet mean', H=cfg.ny-3, + W_over_A=WIDTH/AMPLITUDE, H_over_A=(cfg.ny-3)/AMPLITUDE, + W_squared_over_nu=WIDTH**2/cfg.viscosity, +@@ -168,6 +173,8 @@ + if step: + run.step(50) + report['last_synchronized_coarse_step'] = run.step_count ++ if time.monotonic()-start > MAX_SECONDS: ++ raise TimeoutError('120 second demonstration limit reached after chunk') + fields, sample = measure(run.download(), masks, centers, mass0) + sample.update(t=step, coarse_steps=step, fine_steps=2*step) + report['samples'].append(sample) +@@ -177,6 +184,8 @@ + with tempfile.TemporaryDirectory(prefix='.plot-', dir=out) as cache: + os.environ['MPLCONFIGDIR'] = cache + draw(out, snapshots, masks, centers) ++ if time.monotonic()-start > MAX_SECONDS: ++ raise TimeoutError('120 second demonstration limit reached after plotting') + report['status'] = 'complete' + except BaseException as exc: + report.update(status='failed', error=f'{type(exc).__name__}: {exc}', +@@ -184,6 +193,7 @@ + raise + finally: + report['elapsed_seconds'] = time.monotonic()-start ++ report['elapsed_scope'] = 'main construction, advancement and plotting; not pure CFD time' + (out/'summary.json').write_text(json.dumps(report, indent=2)+'\n') + print(f'{report["status"]}: last synchronized coarse step ' + f'{report["last_synchronized_coarse_step"]}; output={out}', flush=True) diff --git a/research/fixed_patch_jet_closure_20261013/layout_uncropped.png b/research/fixed_patch_jet_closure_20261013/layout_uncropped.png new file mode 100644 index 0000000..0cf1cfa Binary files /dev/null and b/research/fixed_patch_jet_closure_20261013/layout_uncropped.png differ diff --git a/research/fixed_patch_jet_closure_20261013/manifest.json b/research/fixed_patch_jet_closure_20261013/manifest.json new file mode 100644 index 0000000..31cf0c7 --- /dev/null +++ b/research/fixed_patch_jet_closure_20261013/manifest.json @@ -0,0 +1,55 @@ +{ + "CFD_runs_this_round": 0, + "CFD_runs_total": 2, + "cpu_redraw_exit_code": 0, + "baseline_files_checked": 554, + "unchanged_baseline_files": 553, + "changed_files": [ + "examples/fixed_patch_jet.py" + ], + "static_checks": [ + "AST/compile", + "measure AST unchanged", + "BOUNDS/TIMES/constants unchanged", + "cfg AST unchanged" + ], + "current_entry_CFD_run": false, + "diff": { + "added": 12, + "removed": 2 + }, + "files": { + "examples/fixed_patch_jet.py": { + "bytes": 11491, + "sha256": "9d58ac3f32478603e8e798efcdaf6ea16e9cc92346eb4780a60e438d331abced" + }, + "research/fixed_patch_jet_records_20261013/fixed_patch_jet.py": { + "bytes": 10650, + "sha256": "7d6370fe6d8b723b1b3e1492e89fcc72562383c0dc030c25a254ac3fc899845a" + }, + "research/fixed_patch_jet_closure_20261013/incremental.patch": { + "bytes": 3490, + "sha256": "18b30ecc0703bcb4cb6577255d12a5b0d95dfea99d02d761bbc1b5b231bba1d3" + }, + "research/fixed_patch_jet_closure_20261013/baseline.json": { + "bytes": 72692, + "sha256": "ccf88409836657aebbf091f06c41141c81d20169c2cac0fd8e2a16b40df36882" + }, + "research/fixed_patch_jet_closure_20261013/notes.txt": { + "bytes": 3023, + "sha256": "bc3c939659ef0cbda506024d79b896707f4dc4af94bb088924e139f81a9e885f" + }, + "research/fixed_patch_jet_closure_20261013/cpu_stdout.txt": { + "bytes": 590, + "sha256": "4e1f371a568eb1c2a7912cb5ea564c8c23f0106dbc41a68f179bbcafdff2cdff" + }, + "research/fixed_patch_jet_closure_20261013/layout_uncropped.png": { + "bytes": 51785, + "sha256": "0ef6709c02ed5beba5707e033d9f6f9795a9bbfe3d7fc23341fa7dab6e85288c" + }, + "research/fixed_patch_jet_closure_20261013/cpu_results.json": { + "bytes": 628, + "sha256": "6bae91721db9051f18bbf89dacca40b80410f84f037e7732cb1af4eadc24aaf8" + } + } +} diff --git a/research/fixed_patch_jet_closure_20261013/notes.txt b/research/fixed_patch_jet_closure_20261013/notes.txt new file mode 100644 index 0000000..0f7e7bd --- /dev/null +++ b/research/fixed_patch_jet_closure_20261013/notes.txt @@ -0,0 +1,15 @@ +本轮无 CFD 运行,案例累计仍为2次。第一次与第二次实际运行源码已分别逐字保存于 research/fixed_patch_jet_20261013/fixed_patch_jet.py 和 research/fixed_patch_jet_records_20261013/fixed_patch_jet.py;原PNG/stdout/summary/results/manifest全部不变。当前examples入口只增加说明、布局边距和协作式计时检查,未重新运行CFD;既有数据来自第二次源码快照。 + +25组记录每50粗步采样,node mass约在2199.806433至2216.155705间振荡,Q_out也有约300步的变化周期。H=NY-3=45、c_s=1/sqrt(3),闭开声学估计4H/c_s=311.769步,与观测尺度相符。这是基于边界条件与现有记录的合理解释,不是已证明的因果或唯一模态。末态相对初值-5.698886576是两个时刻的节点质量状态差,不能单凭它推断长期或单调累积损失。50步macro sum(rho*vy)采样不证明population预算闭合;节点面积1与1/4的账本不是精确物理体积分。 + +采样最大Mach0.034161593来自每50步全leaf测量,由施加的入口离散峰值主导;连续峰值A=.02,而最近slot节点的解析速度约.019723187,略低于A。它不是逐步全程峰值,也不是精度验证。时间尺度使用连续峰值A(非入口平均速度):W/A600、H/A2250、W²/nu1440、H²/nu20250;声学穿越约77.94步不意味着瞬态消失。0/300/1200中的两个发展快照不代表充分发展,流动可能越过patch两侧,喷口仍由coarse解析。 + +第二次脚本main elapsed=6.24919704697秒,包含构造、推进、绘图,不是纯CFD耗时;外部进程elapsed=6.70286765601秒。120秒限制是协作式检查:现有chunk前检查之外,当前入口补上chunk结束后和绘图结束、status=complete之前的检查。它不能在进行中的操作内精确中断;外部watchdog亦为采样监控,两者都不是120秒整点停止的OS硬保证。 + +新layout_uncropped.png只读取第二次summary实际nx/ny/bounds/W与公共CPU FixedPatch2D几何生成原生leaf网格;coarse1824、fine1536,Y裁剪[1.5,46.5],无CUDA上下文或求解器。绘图耗时1.860343秒,进程峰值RSS76394496字节,采样临时及相关证据1219264字节(<2GB),私有绘图缓存与临时脚本已清理。原velocity图保留,没有从PNG/probe重建速度场。 + +静态核验:AST与compile通过,measure函数AST、BOUNDS/TIMES及其关联常量、cfg构造AST与第二次源码一致;本轮基线除examples/fixed_patch_jet.py外均未变。没有环境/依赖/系统/DynamisLab修改,没有提交或推送。 + +以后获授权复现当前入口时使用新的输出目录(本轮未执行此命令): +PYTHONPATH=/home/frank14f/CelerisLab/src CUDA_VISIBLE_DEVICES=0 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python /home/frank14f/CelerisLab/examples/fixed_patch_jet.py --output /tmp/celeris-fixed-patch-jet-new +运行前仍须预检实际物理GPU占用/UUID/显存/RAM,并使用外部采样watchdog;命令本身不提供外部watchdog。 diff --git a/research/fixed_patch_jet_records_20261013/baseline.json b/research/fixed_patch_jet_records_20261013/baseline.json new file mode 100644 index 0000000..a8e967f --- /dev/null +++ b/research/fixed_patch_jet_records_20261013/baseline.json @@ -0,0 +1,548 @@ +{ + "hashes": { + "src/CelerisLab.egg-info/PKG-INFO": "0b9a8a4e8d60bc531473688723ddef0aab02c7ccc4997e31c9b6a6c35011ca77", + "src/CelerisLab.egg-info/top_level.txt": "cd51958ca03afabbaa9618c60b8280e486f8cc0b0359b839e10f886e7c3948f8", + "src/CelerisLab.egg-info/dependency_links.txt": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "src/CelerisLab.egg-info/requires.txt": "36e1404178e5ea590b2fc04e8ba4d748ec9a82e7693136ccf0dfd204fe265c04", + "src/CelerisLab.egg-info/SOURCES.txt": "f36b29c1b34c4bd6b2acc3ccdd21c24ee5077df7e2a20a652d9fae77eedb8e21", + "src/CelerisLab/simulation.py": "34d69e71844f553790c5a2bed0f8fbfb912a9498e95b500d1ef2ad41cae3b424", + "src/CelerisLab/config.py": "2f1bba7515f5bc08cb3a8d140bcafe7fa0689e01b3b06494697bb2956a71530e", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/cuda/compiler_v2.py": "c4cc3ec4445c8d75e6a253dd87963877117a722bc73b9d4811806fc6045d08c1", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/lbm/refinement_stepper.py": "ad57a6a3887b007488b4954b24ff06cd8cde2b12674bdafb97bfda1961ae1da4", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/refinement.py": "554735c5613129eb29f339c6aeeb4f3a3bbc5aba67558be51fbf7c2fb6ac442a", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/refinement.cu": "025c59dc9c207a831e78e1635cb3f14fe60b64c021004a0d66e5d01fda8554b5", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/kernel_v2.ptx": "a599ee30ae66800f4d4220eb79dfed35ff32991661260f01ea58023ef780f0ca", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "f9f8242b38e8e0cf8425b75e2b0215bc15363c62eaa0fb43c761b8e0931bfdc9", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/common/checkpoint.py": "5b7caf3896167a3f37c539b58837de6eb3f8085fa7bf5f821a09666cc16d43a4", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/CONFIG.md": "41cafdbe525366c08aa9d0416ea026ccf0026ba7123b8a9b65f968a80d928e3a", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_j1.py": "51b758a271ff358f931b3140a80082294a67e66c2fec0f8c19319e37f92aadc4", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_j2_slot.py": "b7d2d3aa06fcafc3ac62ed4a50892afbdb7f86e5720ce75a39ce317b6f571dad", + "tests/validation/run_j3_coverage.py": "329869519b7078e854d96241a7aad8ef93f35ac9be83f0be502c3a93523c3b13", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/analyze_j3_saved_frames.py": "438f67dac682b94c4950626f8de4fdcde48c3a4e9ecf8fdf1b0ada4b6e0e781a", + "tests/validation/diagnose_j3_lags.py": "286fcd65b3261667a847b9b26e213d0af92cf459faa6bbd774f78c8479ce31d7", + "tests/validation/run_j3_reservoir.py": "47535bc3569ce68c888d38978bc4f9077fd763a17829c20c081be52bb18a2903", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9", + "tests/validation/multigrid/test_cpu_reference.py": "ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca", + "tests/validation/multigrid/cpu_reference.py": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "tests/validation/multigrid/cpu_reference_v0.2.py": "b6adbad7da625ef6a6b97958ea9625030ed92676d0cada48e061c87bcf7ca8c9", + "tests/validation/multigrid/test_open_corner_negative_control.py": "59a6f8ca80cdd63cb7827fbebf9b4b555c3793f19dd6bca801544ec10b5cbe1b", + "tests/validation/multigrid/test_refinement_followup.py": "6643e26cd877bf0d0f030e974f00a1d1c0f0350cc76d1c8affed3e8ba2f4393b", + "tests/validation/multigrid/local_stress_observable_v1.py": "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456", + "tests/validation/multigrid/test_refinement_gpu.py": "0021a39b3a131347196845cff6507c90c387b46b772fe1319d634178c5e13354", + "tests/validation/multigrid/shear_diagnostic_v0_2.py": "a8b1cf2f7abd00efc4d068bbd27bb2317144a6ca4c545d9b2e0dcf421eadebc6", + "tests/validation/multigrid/test_tron_additions.py": "8e7a6a90b85e64c7326719e7b8bca2f6d34fb4c80690f0685f7e291ab93bd2a4", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt": "0577df5b3f5cb3c7b6e1ef2de71344f8fd3e6d959117487a06cbaf7f2afa3dea", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt": "28ddd1267ca91a772f5a6bfc65d949c9a4ea7dac5c9ba3a0bdb168492810b670", + "tests/validation/multigrid/shear_v0_2_evidence/run_once.py": "6698a2e040c56be949b809387d4518eb0ba82d34cc9d99640da4f8bf3c35c23f", + "tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json": "56fbd0259ff3d4dbd14ace52f64e249a435e9df91732b0e4027def2c344c2e6a", + "tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json": "c2d7ce8d16a0f47baff0788a153353dcf67088da974d9cd3d521b04ecd91ee05", + "tests/validation/multigrid/shear_v0_2_evidence/comparison.json": "41c00372099dd04b6d323785e9eaf4fec09da1753d3d150ffa230800f904142f", + "tests/validation/multigrid/shear_v0_2_evidence/baseline.json": "98a7853341ea732762c7506694e3a867a7259bf110e9e461ea84f741fd9ab829", + "tests/validation/multigrid/shear_v0_2_evidence/manifest.json": "e42aa19e91608164698bea42da88fbbfab8b0f87cc37b27c5baf165453a4fdb0", + "tests/validation/multigrid/shear_v0_2_evidence/README.txt": "4306a34b6896bd6e7a5c2ca71d68e18450359239d0c7ad7a67a4e83e7155959a", + "tests/validation/multigrid/shear_v0_2_evidence/joint_report.md": "1860b8082108c8b8a87998af90cd0b81dce1c04e9f6c67b41e0912f9fef6cc9c", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_horsea.txt": "882f2cfb1dbdf82cce63c011397e7c2e6307bbcfec42a3510648d328cd6ddcfe", + "tests/validation/multigrid/local_stress_v1_evidence/run_once.py": "e629800291ef65ffea8555f66ec80bf15200552540b2a493a677bfb53d0830b3", + "tests/validation/multigrid/local_stress_v1_evidence/source_manifest.json": "d2cf90b73458f493c665c9a281d06aef0c190cf0d143639fb77ab838c78f020c", + "tests/validation/multigrid/local_stress_v1_evidence/results_horsea.json": "f17b4644d19eb75d55deb7021ab679cb9e7922a2b46f1cacf8b6da6bfb9a2690", + "tests/validation/multigrid/local_stress_v1_evidence/comparison.json": "be236671a501c31c06f7e266f6e0c0c2a89aede321a483452050ff37bf84c84a", + "tests/validation/multigrid/local_stress_v1_evidence/baseline.json": "64f6541447afbd15b1b15d802ad6f1b5042aaf84e7d4d2414e4ed4c52cf70507", + "tests/validation/multigrid/local_stress_v1_evidence/manifest.json": "3a9fa8c7d691c1b8c24f05940eb724d30b890dd8ed636551068d2633d7db2f70", + "tests/validation/multigrid/local_stress_v1_evidence/README.txt": "4f62314876047ee437bb9ecbf84798d2a9f6e85f6a3aef260277b85bcdb35fae", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_local_stress_observable_v1.txt": "6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4", + "tests/validation/multigrid/local_stress_v1_evidence/TABLE_local_stress_observable_v1.md": "d8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt": "457f1d2173496554c87ca6e61df518c0b8f1e0a28cdfd94b94ebbb61bc459d70", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt": "73e4ef01138842981daaa534390f1463839e63833c11f4e8872f94f8eaadc717", + "tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json": "914389afc39752bcd4132aa21fc8d5cbcf0ca75b1efd6a49becab15c2fa3361b", + "tests/validation/multigrid/cpuref_0_3_evidence/baseline.json": "0daaccee41cabeb17a00e2405e2c7fd0b80d36f2d01778eb39c9fd22b13d2d47", + "tests/validation/multigrid/cpuref_0_3_evidence/manifest.json": "2850ecaf2e19d010ba35eb54162371d82cc1a092831e08a03b6adf75a614988b", + "tests/validation/multigrid/cpuref_0_3_evidence/README.txt": "1947ee0232b88b3cc2c506d0b0af5ba051ecc94aa8f7f09228ef3939cc95919b", + "tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md": "065947e15b2242bce7d3eb05a3acdbb59939c621dcd5d31540ad4a1bd4416818", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_planar_velocity.py": "b656da0880b4234b1db805544edbe0d2473cbcc7c2c869c71d8251337f62a982", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_reservoir.py": "e718c78a53c3941aba7feb8ae4e8bb0b1726c1145de84febf91220c1917991c9", + "tests/unit/test_refinement.py": "90751142f920f1c5e988577a45afa94871a6617009cdc78323a87fc7795f4634", + "tests/unit/test_slot_velocity.py": "6a9494de9a32c350389ccbed58af48951f6b25a21a258537d2e8b73eb67cb11d", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/cpp/reservoir.cpp": "c3eacaf0271400eb45ad559b571a8f7faa2a809d5f1857ffeb5592addce2cd0c", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/slot_profile.cpp": "31ac58ccab175bf79fa59fc46d4c0842df18ab0a5e5916be84760d9da2b75788", + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C4_deceit_f1p5.json": "11dab8440d8c4f385061d2536403f4313c6f026b4e0b7672681327a9f4f37ebb", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C6_deceit_f2.json": "e0c4e8bcc55da5dc8de1e2fe88029aa3e67453734faa44451f5a6dfa9131557f", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C6_deceit_f2.png": "e0a66708ce2a29c4c6b854d2596b3ffca181dc6e35d99cc94e08af3e2d8c024e", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C3_deceit_multi.json": "24c8e433aab6d207dab67546c4079868c4244c2948c32c94cd08e4f331991807", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C0_no_ctrl.json": "cf3af733a08f081cc5f879e8da79d7c60104099f4452af5b2a4a96c0e6bd5889", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C5_deceit_multi_f1p5.json": "a4cb4ff4481b39b9ee61b1d7209416237a7fe86b22c5068d713ccec9c3f7afe4", + "tests/output/exp_ctrl_matrix_streak_ny300/manifest.json": "d8a20dacc92321d98354684976f771a9ca8989fc63ddcd78e15c7768c6617671", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C3_deceit_multi.png": "c6fed617cc6ffe6677157a9b58811d5f4613725eb98a5aec830fd07dc1aac38e", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C2_deceit.json": "7526a6b20a158461b85b1a64070b46c2b21be1e01c5ee025e6746fcf47ea3397", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C1_stealth.json": "63d34a0ab33e9fa8fe7311363efbd1b2875691f5b4958bb645b8c7ac38f1ad6b", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C0_no_ctrl.png": "0cfd7ce8f9d743bf22a7a694b4e5a3616557cb8f1db2f4ddf49cc4bef96efef2", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C4_deceit_f1p5.png": "4dcfc186928dcb83d28e9eb4cb2ecb4b163eb6f121d57036b4c05ab162be0951", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C1_stealth.png": "5e3cbbefda06fcef243d7d06d74a473972350cfa4ae88bdfdb349dce13943151", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C2_deceit.png": "22f1db77499bdbd1b3cd35f5b58b1a884dd94a86fdcfef07abd4157e6aaf8d19", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C5_deceit_multi_f1p5.png": "823e475cc901af3d6f4d0c56eb07822b3e73a2b9d0aa23e20e3741023fe90092", + "tests/output/kan99b_validation_esopull/summary_runs.json": "fe3294a953580204319fb1143434e15096d8455b6073100dfe0d5491b76af394", + "tests/output/kan99b_validation_esopull/summary_runs.csv": "1a44bb27ee0a7fe0270905248c37364834248cdc8710bd68142a6a79bbdad82b", + "tests/output/kan99b_validation_esopull/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "9fbc7d507c129ed85c68a9a313e3eb3431470d091bd7723e63f8afd8a3d2b737", + "tests/output/kan99b_validation_esopull/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "8faac43f42d6e0c70085c6e616bfff4df8de897e315fc0d2b4aa8bd635c3fa05", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C4_deceit_f1p5.json": "b613ae55fcfbd45a1a922d6d529e5274ba9d2987fdf5620fe866b889b931e48c", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C6_deceit_f2.json": "dbf54f9a183072547b22fa14334f0167e6eefb21c1208c4e8584bc196545a399", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C3_deceit_multi.json": "2100c6cc5c358a249804ce8f6f98531f3bc868e27af6d21a9d441b1b6a9e479e", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C0_no_ctrl.json": "a8b4697b7c0caeb958f80e282e32d673deac8c914008d64e6b38f7883eacc57e", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C6_deceit_f2.h5": "8d0c28566d2230b422691b738cc453705496bd150be038a576c0c0fba218fc1f", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C5_deceit_multi_f1p5.h5": "608767ca11d104fa4506b57204a0c8dbd739688224ebd924fe517ce9e21db823", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C1_stealth.h5": "a83c988cc8b1173a7b2f13b132ed7243e98304dccab2965aa16cf4d32f8df007", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C5_deceit_multi_f1p5.json": "6f6b9300782178e0ac9308a677bd9cb1565a383a78dff4cd52dea0bd464db31d", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C6_deceit_f2.png": "21bbe2dac1ab06ca1b172ec62d00daa7bcd65d99adac0ed03c5e30bed59e871a", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C5_deceit_multi_f1p5.png": "602a6586277699968b4cb167b134c8c406577038af088aa70baff682691398c4", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C1_stealth.png": "c1e1d04f266deac5fb2815a8283da80f9139ffaccbec2219d98544296bf3152c", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C4_deceit_f1p5.png": "96dee924e89b90091192a8d7b43321f109a5491511b8a83da77cfc611ae0d93b", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C2_deceit.h5": "aa5800a0cd594eeb7cf5449d6469d55e0c9033ced0ee0a3b5d59152e68c7e263", + "tests/output/exp_ctrl_matrix_vort_nx1500/manifest.json": "5d28f0f5428d7f0341e20d5d1f19c17bbc6f0f9b2a441d3c95f5422f3f2b4bd4", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C2_deceit.png": "1dcb6fb959f944d7ad89c4abaaef4d1fd4a77db8901804530e86fb336b883eb5", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C2_deceit.json": "b88ff5049aef59876b349d105f1c3467c17c9ba9022a48a77a6984f20da34345", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C1_stealth.json": "515689cbfaa30a9e39d9907939ee194a4836b644a5e9124586e6b7221d2b394b", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C3_deceit_multi.png": "d69694a1a1b2f2ea0adc7b74b7526504e2ad0b5d6317bac9b3159b2e7e88cf90", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C0_no_ctrl.h5": "3a858d6be0a946e1d26bbfa192c2f0ca3910c0f140b42575ec9d9529dd99155a", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C4_deceit_f1p5.h5": "660e4619ea530dcd18c3afb2e7fa22cafd9cdba1be7888e31ab5b76a0902d2fc", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C0_no_ctrl.png": "6d4d3934f1c8b20c2a5c742ae080a7143f0c139741966adf009a227c27e9bb1f", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C3_deceit_multi.h5": "1e72126f11b2995437cecb8cc0eeffb8807efbfa43d8f346f28711fea98ddc90", + "tests/output/kan99b_validation_ref/summary_runs.json": "449316c30585a8de9997538dead5d4e35a59bf00a2ac22d01b101ab600a4bc06", + "tests/output/kan99b_validation_ref/summary_runs.csv": "e8b9620f3772e5e421026103e456e6e844a91292f40affb96174c9dbde9b6e4e", + "tests/output/kan99b_validation_ref/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "4391f41d17ebeea1092f13b901923ced4ee2a1c5b346b79ef791d692847286b5", + "tests/output/kan99b_validation_ref/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "105c6eb21f1943d9d935246eab1602ff2016c415a139e24fee2793e88e006ead", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C4_deceit_f1p5.json": "0085a679a423621003eea81d4ac83bfe2edef2879eed7809d2a3675a212f791a", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C6_deceit_f2.json": "e820cf73f0e90bf93c34b24416e7692a6c2e51352ccf490fa6714d0812331ca2", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C3_deceit_multi.json": "571370c74ad9af589f3dc214669bff3d857efe6fc4fa13815b5d793d12b53770", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C0_no_ctrl.json": "ec5b89961033d8ebe0d66ce1ec7940dc2faf98130c38319bc9984ef654e60b50", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C6_deceit_f2.h5": "2792be74d8564fa29fd0636fc8493630fba2779c165b44330197095b3e296b18", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C5_deceit_multi_f1p5.h5": "2c64ee6c7a4ea2c42ed8f3d274402bec62de0e02ea0340e16022f0cdc92af724", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C1_stealth.h5": "100727d94fe6c2e46d7807eed0442555bdd1e26ec9b04b4c457171a2bbba3255", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C5_deceit_multi_f1p5.json": "f86166f121b4eeb6d74d8176c9265e7a3ccfe2540d040f554b6f96e6a6222c16", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C6_deceit_f2.png": "fef4de0e3ac8203742f35c16a02445b19c3f556b11f73abd5d8e3ca05ca33d78", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C5_deceit_multi_f1p5.png": "9136448e6d7565ca5af3666f9cf6e154342d8a3475076abfdbdd1ff9faec34f3", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C1_stealth.png": "544537a9c500a05937fd3be17c25e7d887461d9b83a15564f9ab7063208f40f6", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C4_deceit_f1p5.png": "51e7056db99dd653affbe913d52fa41df6ec0db921109384e3c679bda06b5a83", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C2_deceit.h5": "39d6c162085acae1612650da37d2314757715931e83a854e08bb01407d0f8efc", + "tests/output/exp_ctrl_matrix_vort_ny300/manifest.json": "05fbc2e7bbad4267a38e1094bbdd6bee6ad270412bdb5e92b0dfc9fa56969517", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C2_deceit.png": "07fc5817eba30371272b87ee2e023c0a1144077d1bef77efb2fd5dc284badcb7", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C2_deceit.json": "b1fcf76039c91a9080b830352dee2e95316d754b968cc27a8f68c51527661e76", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C1_stealth.json": "b78851637b9b7b93070524a2933cae1dab6d682f8894579b2849c64921e6c29e", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C3_deceit_multi.png": "2658f0747ed7287f7912fe15cc58a086e01ba284277cb98689bac01ecb6ec12b", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C0_no_ctrl.h5": "57f73f5f8dc4b32b156bc82300b1efd1e4eddadd9b8dc51cb7e6b41fa5c966bd", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C4_deceit_f1p5.h5": "2864b9dd086709ee8b8c3f262118a5130b0d40c86838f3ca0deab5bb898dafa8", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C0_no_ctrl.png": "2c7f3a8be2ee540afdfb66299e43a65583434bee84bde590124524a82868c900", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C3_deceit_multi.h5": "39e0d9b032dfff8cf057b410a98973729285e7d03e89f9a6a002aaf7de3d7519", + "tests/output/stealth_sweep_fix_check/summary_stealth_s150_w0.02709.json": "8b1032e13975bb05c6a810fde175c8da51bacdb3dc745fd11c1049ca63bbf136", + "tests/output/stealth_sweep_fix_check/summary_stealth_s050_w0.00903.json": "fa7da24d5dab9fd3a3c2dea6b50d0224c7a99cd9141796e137304a6040b1ac8a", + "tests/output/stealth_sweep_fix_check/streakline_stealth_s050_w0.00903.png": "640928f7eb159e7caea32036123f86c281723d083cca46839ba86bce8361ada7", + "tests/output/stealth_sweep_fix_check/state_stealth_s050_w0.00903.h5": "187ac365f9f7370c888c4c65570c47e42465b2fccd432056c176528d45cf0c2f", + "tests/output/stealth_sweep_fix_check/manifest.json": "83a3f12a942fb644e470bd07a72f24921f2147d7df429110268c5c96a9953d1a", + "tests/output/stealth_sweep_fix_check/state_stealth_s150_w0.02709.h5": "e057e9db26b2546c0704e2c959cc7d2aac91e6a49b4c7ee75a409597a5db8716", + "tests/output/stealth_sweep_fix_check/vorticity_stealth_s150_w0.02709.png": "d2d202088624cf30868228f9c913ee30e1b386aaa2c22b0ea89be43dedc0712d", + "tests/output/stealth_sweep_fix_check/streakline_stealth_s150_w0.02709.png": "0edc7caa9caaffb754490bf1f6ac7ad7180e45a991439a3f4f83ed949a082a1a", + "tests/output/stealth_sweep_fix_check/vorticity_stealth_s050_w0.00903.png": "4088359b17c46ed4d7c8401d244808fe67723273b1d16d0671b69f9478c68c1a", + "tests/output/final_validation_round/validation_summary_report.md": "881cb7052e5a555afc87168a37268ee66e8e3fba172533706e858d996fabc7b9", + "tests/output/final_validation_round/sah04_mixed/s2_d48.json": "83c6c01201d90aae5c49e73ebeca88d1c7ded6cc83c13f4892a9188e6289483f", + "tests/output/final_validation_round/sah04_mixed/s4_reg_d96.json": "b32f03e6b347fc709cea2ecd488df0f85849c733bf6a4b9cf65ea69401c93a1d", + "tests/output/final_validation_round/sah04_mixed/s1_d48.json": "120e8e878f5712dc89b7cf78c7f8d0e3368d34ad5ef7494977e083b188a54c18", + "tests/output/final_validation_round/sah04_mixed/s3_stablecfg.json": "b38a3d197a188e65c163d974113af18f332b3abed083e2654e998d9980f6be9f", + "tests/output/final_validation_round/sah04_mixed/vorticity/s3_mrt_laststep.png": "dc96fcd05d458684cfb40d4cb741172213083e2f2665e2bae7e1f0267bb3575d", + "tests/output/final_validation_round/sah04_mixed/vorticity/s1_mrt_laststep.png": "73a3580ba3c7fe6ffeee4676a9a51b5bf678d6fb523456a61e185598389ea1e1", + "tests/output/final_validation_round/sah04_mixed/vorticity/s4_mrt_laststep.png": "57f2a82761f2de1a9fc2b78ee86159ca542c966494b9c704deb451da857da778", + "tests/output/final_validation_round/sah04_mixed/vorticity/s2_mrt_laststep.png": "786f492b96ed932254b5452e2d06ff088727f2d88c7e7c7b47d386eddfe07862", + "tests/output/final_validation_round/kan99b/full_summary_runs.json": "8c4a11cbf555e08a66698439170b850c57d537d8e75e4dd75beb767bbf7e38cf", + "tests/output/final_validation_round/kan99b/summary_runs.csv": "3fa92fdd3114f0472de44bc03006af1d4b694dfc69b06704c1667cd3627b6dab", + "tests/output/final_validation_round/kan99b/force_csv/k5_baseline_domM_re160_a2p000_regularized_mrt.csv": "de05e9699146f2adffc9d7c9991f9e48396aacd142afc3c08b2b64727c83c69a", + "tests/output/final_validation_round/kan99b/force_csv/k3_baseline_domM_re60_a1p600_regularized_mrt.csv": "53cd0dc47328b7b370eced1130508655e6815a29b727bf1fe4e4e125e4918905", + "tests/output/final_validation_round/kan99b/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "4cac1ccfdb7451de3e26d921a6406cc55d1d4630e10ec0d7ec9350a4abd49404", + "tests/output/final_validation_round/kan99b/force_csv/k4_baseline_domM_re100_a2p000_regularized_mrt.csv": "392c98de52011ddb344a5761c4520e870f4e49bbba3e144e5a02818ba2f9250b", + "tests/output/final_validation_round/kan99b/force_csv/k1_baseline_domM_re100_a0p500_regularized_mrt.csv": "9e83c5175aec644c0b97c081e610deefa731b87aef04da6297abf662a71c0702", + "tests/output/final_validation_round/kan99b/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "55b071f278e153aa353aa2bef85f0bce35b910a7b08103032023fe3a28169b89", + "tests/output/final_validation_round/kan99b/vorticity/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.png": "b91b332e7deb787975d3f08fa3325facd4a972b536694fcda52e6c01943c42cb", + "tests/output/final_validation_round/kan99b/vorticity/k1_baseline_domM_re100_a0p500_regularized_mrt.png": "6e7c3f6567c0ff0d00d75da8373031f5ba2a17a624cb8c5d5d6ae4f8749c33c0", + "tests/output/final_validation_round/kan99b/vorticity/k5_baseline_domM_re160_a2p000_regularized_mrt.png": "c4d232df2e6f7466acca711191d976aa9411ec0ade81572b531463f42a7d633a", + "tests/output/final_validation_round/kan99b/vorticity/k3_baseline_domM_re60_a1p600_regularized_mrt.png": "b2314c60491d20933422e1697998555dec2436d39545c71f990e9906884685b2", + "tests/output/final_validation_round/kan99b/vorticity/k2_baseline_domM_re100_a1p000_regularized_mrt.png": "2b2797b8f53170d04d1a70d1cdf898f7e41b3a76b9f3c1f276dfec952520ab04", + "tests/output/final_validation_round/kan99b/vorticity/k4_baseline_domM_re100_a2p000_regularized_mrt.png": "8135f470404fe11ac97968fa580ee35232e90dcace3c6ad94de17ef7aace24d6", + "tests/output/kan99b_validation/summary_runs.json": "d7239aac64884202558741074f2d644ade9e2365d94d0b7556fba68dac94868d", + "tests/output/kan99b_validation/summary_runs.csv": "c44da69563d58b917291a9fd402d1f57055861bffab6f9e32d7db91297428d45", + "tests/output/kan99b_validation/force_csv/k5_baseline_domM_re160_a2p000_regularized_mrt.csv": "27b64460923d235d34b760f2a2371ad01611a70e38edb03d6fd6a2fe7a7de6e0", + "tests/output/kan99b_validation/force_csv/k3_baseline_domM_re60_a1p600_regularized_mrt.csv": "76ff52f4494b7ef7650c05968732a8caaba94d2b151234c02cf624f5b3a712ab", + "tests/output/kan99b_validation/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "28a83436ca8bdad38865ba21ce1bda679562a5ae1cfc6ee8fc6e86ff760ec66d", + "tests/output/kan99b_validation/force_csv/k4_baseline_domM_re100_a2p000_regularized_mrt.csv": "823ae04870fd951879024a18169ac5cba8db4b3201726f6a00f320f1958d04c6", + "tests/output/kan99b_validation/force_csv/k1_baseline_domM_re100_a0p500_regularized_mrt.csv": "a591daf2cdecd6ac3689fa2a2aba917b23053ad26e3ef1f635c81aecc451475f", + "tests/output/kan99b_validation/force_csv/k0_baseline_domM_re100_a0p000_regularized_mrt.csv": "e95c27c646c0c9baf8f455f876c115c8dbdb23cef9d9d550f455098bf0c03b55", + "tests/output/kan99b_validation/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "3c2ea79a0e27f561215febee2e165d24b3617a648bf908981c068ba59d549c51", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s125_w0.02257.png": "a892f18c74fe13efd839bfd5068097ca0ae07acebf6c06eed89e1b867e41fcb2", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s125_w0.02257.json": "7e542f59746429022ce1794854c6fb36e8ac658dd0aea3bc1140a45e83a3f1c9", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s100_w0.01806.json": "b76216e0fbee00ef754edbafe5790a99ce7d53638af629947ddd9615598e4c08", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s150_w0.02709.json": "42cb241d9cfb01308ce28e129756b6cb3fe2a8e9679518da84bcb8b607fe92ac", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s075_w0.01354.h5": "558be308dbf334832bc1d29419ba5be142969117a11b124864f6b221c8fee509", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s050_w0.00903.json": "53b579811a0b651ba7cc466c230c115b9f88486c6675e0465d0715d3377a75cd", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s075_w0.01354.png": "9f4a7d89b2471becaf31e84c14402441c5fd96fc7190cea5e8a9fdd06ee62002", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s050_w0.00903.png": "5f18f56b0ff2af3350216b65540a2bc664c569520624cfc6cc2439a3c5369560", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s100_w0.01806.h5": "30776f333959e0e9eb5ca96b269e6a8052c5b94941a4e3b36d8a6af8076920ce", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s075_w0.01354.png": "b5393474d99191e88dafea4144b6a8eccfbdf75107125ce4b05383b17007d06a", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s125_w0.02257.h5": "4ed9d8587f75ad4625ec5501fa99fb733cde037180ac53f92a210ffbb08375de", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s075_w0.01354.json": "ff1c1cc649e589b5425787493c2b0d04b6c39b43043b1968d65509cb0a426e82", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s050_w0.00903.h5": "4de51584b24095f8cf4480b8941593a5f913332f9396061ed077c9d49eb2ee11", + "tests/output/stealth_steady_sweep_nx1500/manifest.json": "0dfbb2c1b5bf9093fef169e4dc6319edb5c87a1e967e8d558613e2c64a2ca734", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s100_w0.01806.png": "60824cbdf21170cb4ffd8af0a49e8522c2d79cb2694690ab67995ee973265efa", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s150_w0.02709.h5": "b22d54a05cbd3138a1fe585a825246989fcff7c00f51aa9312a4185d963db933", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s125_w0.02257.png": "c1e1d04f266deac5fb2815a8283da80f9139ffaccbec2219d98544296bf3152c", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s150_w0.02709.png": "bcf098083a73798dc3906807218058cc571435a010234a5a350b585ba9915c78", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s150_w0.02709.png": "3bac21cc75a01429399cec308d6bf5fc8918917def1bf5d7fec1cb6003390a41", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s050_w0.00903.png": "a675f41df763f0a1ac0a06386315806b24f2571f5dabc8693fcd871a13ed22ba", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s100_w0.01806.png": "92515588596596cc1d691c643fa48cf828492c2eaed96355dcec58109de4b5aa", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C4_deceit_f1p5.json": "0393661f08b748428fc366eeecec3b34b9d9a013aa6b151a15b33c7e3c0e1818", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step080000.png": "bffef412087e426b614d8c05e59bd7580ee49bb77319279ddc4c1bf825678c49", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C6_deceit_f2.json": "de067f01ef5c11249d67bbe5e02db6f2b4c5590214de02609bca115edf8dee64", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2.png": "846badbae81b75f765d89e5a7c4f88aeb5d57f2387511e4f2f84c72a192ea9f2", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C3_deceit_multi.json": "eb21d1c69e51f01c1a6be1ce59fe86763089ea5aa667b8872d0186af035b24b2", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C0_no_ctrl.json": "780a0d329cb86990a17a088f49084410abb1fad24f659255918e5ddda6b3dabd", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step080000.png": "ff7836b8229d9a5dd3900f499fe3e7f0c73a61c7109b6e6e79b11a0fb459bb63", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step040000.png": "f2b56a7e30bcc363ed69fc19705403181ac5de90800eef03039a389a65869e30", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C5_deceit_multi_f1p5.json": "261b698723f19526a447679a2be8666c8d0cbf6df81b0c9de6d051960d77308b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step060000.png": "0697e0ae06a01154afdcf00330ba870bd8f36d21561a33846ad7ba63fb731179", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step040000.png": "1de3d7f54e91c5d5850f4358d1872e16fefb36d32a1b6293facb54524e32315c", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step100000.png": "91f0bf6ed3e854f7f83623a3f19bb12c83b4aac239e3eaa849fbe50e7baddff5", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step080000.png": "303c1d2d4c49b4a7495365c8cb2bcbfe9bdda7cbc0a7c7dd1f01e8aa62b3573b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step040000.png": "dd5945458a35d81b31a0e2f3a693a5023d6960474263e7dc86c22367a56cc13c", + "tests/output/exp_ctrl_matrix_streak_nx1500/manifest.json": "0d97efed02f775c25dd8a2d7439f310b715d142ff8d603c9da6ddab197570ce8", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi.png": "69022ef9175acf910374ec73848640548b85fc7beb7e6950843f52c10ed7d61b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step060000.png": "16ba30b8cca0d49e6b76be0bb4f0d14bbf276ca6ec47ebf56907c7534e15c4e0", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step100000.png": "8548b6dff635cf9c92e2baa119866277e3994366eb31aeb30641b03b3d80ee9f", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step060000.png": "56100f169c3e378b84bfc89c5477d2c142ca043d9f28eaa70bc5448c49c7f4d5", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C2_deceit.json": "587cd42d81b1325bbc766d9ca6c1fd3d076bf5a772efd45d056c2c4e3db742b6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step060000.png": "e43e95e7126de8cb857154353f161914c225f8c9f17eb44b1ff744249368a4d5", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step080000.png": "676d21ffc7180d34a6725a8bf49503ce59f48d65500450c3975d01e65162899e", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C1_stealth.json": "73040aeb7ef07c538d4687b101c599210e660202eb1c2c3e0894dfbde682d137", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step100000.png": "e22171ef86979c4398c45ada9cd0f5e4c4e5b034f271df5fa8ac9a762a8554cd", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step100000.png": "0d73042be73b0de8d0a591e56c01e3c802483aa22a97f27e0300cba82c708066", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step040000.png": "a6e95fd5c24052db20d5ece200edcfe5e261c00950ca964c89df9f7335579634", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl.png": "d74061347ac3505fad878e330f6cb04d23bdb13082bfa1afa2fda0872f80f388", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5.png": "3156400eb59fae0638556c2711345f12ca49d951ff09e6464a2271249409a6a7", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step100000.png": "d69e34c82da98b28eef7f1af29f5d11f400e90f628049f6f5f4a3a419a4a4340", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step040000.png": "ce1f372b517dd52fc3f3eb066145e04ab6841e43b67cb0f6bfbdb42a6738eca6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step100000.png": "07cce6c99dfa7b56dd4d3aa452873a676a5a00e9f046555fa9dda30f16dde488", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth.png": "a892f18c74fe13efd839bfd5068097ca0ae07acebf6c06eed89e1b867e41fcb2", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step060000.png": "80b63bd309ef11a3ebb2f1ef301b49cd8f09bcc25562097d382f859306c9fe6d", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit.png": "1edb30dc35e29ad991695353f4b84e0507792935ec75ae9a7904ebdc007a471a", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step060000.png": "93ab8e09e58a64c5dd2eedfdafd27cf4dcfe4e8fae1af64ac71eac509e6ffdaf", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step060000.png": "f773bdef1c8d718d01b6d6d7735182c04564dd8b5692b359e1dd2f721c774b1a", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step080000.png": "5570fe6a25c92e5c6aa9a5129aa1797ba8ee7418170c7a351f9e35b931a366c7", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step080000.png": "32d3e700286eb4b46b3bcf757669481affd6ff6b53792d730b5a21da92cc57d6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step100000.png": "5acfe36694bb4e628309ff8ae1e839ca0a1f684607165bbc2883436b85208bf4", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step040000.png": "2c6f2b8d61cc2aaa63631eb6c98d3de26dcef705fa6b66c823ce7b9eef50e00c", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5.png": "adbefd0021e2c981d026718de8c63594b9c8e5971901d1dc40835cb69d95b93e", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step080000.png": "ce8b18e4dd976ed590fcc44075f3fb058ca7b23e15a1624726c181c4dd0c11da", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step040000.png": "168d21ef24ae198fbfd642f8ca315faad4c7bff2e2c09e16ff7c97e7360ea883", + "tests/output/screening/screening_summary.csv": "3a23c4f2bd54ed5ee9bdb5b6dcdc58eed04519fcf1b4790e0abd1e6c5288fb96", + "tests/output/screening/screening_summary.json": "caf64530f152b6b8ccec82a3c7ba44fa0b3aeb0e0221ef6121857bf62c031ecd", + "tests/output/screening/B1/force_hist.csv": "854bfebe63fb2d140823fc5dbc434a70c317c6ab0bedbd5220cec45665b524c8", + "tests/output/screening/B1/summary.json": "35b4d958bc0fdd6ab6c9c0d1ed50e85d89b04f7be3e34632d6c3ea95b89acb47", + "tests/output/screening/custom/force_hist.csv": "06da0f67b564d5c114332ef3b39167b1ba222fc50045f95303c75c14755b51d5", + "tests/output/screening/custom/summary.json": "1701ed75e5e9ca16127f495ccff1d87de245d81df581e94114c8fca6fbbe77fd", + "tests/output/screening/MR1/force_hist.csv": "f70fbfa748fd0709e225523aaaa72b761db56df4f1d48f105384b94cbc44b31f", + "tests/output/screening/MR1/summary.json": "3d9a0fc19710820e3634ab2143b913b282beb159336567ab9ebf3de2092947bd", + "tests/output/screening/MR2/force_hist.csv": "c947b3c16b8e8f8f85a203cea8cd912bdfc07f96985c1c24a470b644170195ea", + "tests/output/screening/MR2/summary.json": "d2344e9e2517ec76c8b56bfbe3763dd465e24721856992401c57c414763481bb", + "tests/output/screening/MR3/force_hist.csv": "7df1536c83ee466b7195d9c521d3d3b1309acaf142f2855bba51fb279c7612e4", + "tests/output/screening/MR3/summary.json": "ad188eb1b271a6cd0fb4025b456eccac5450776f60db58466f804fc5a0e0ec61", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "examples/fixed_periodic_patch.py": "6732e440a47c237ea341703f2d80717903d34c68fd061bdc97189e5d877be46c", + "examples/fixed_patch_jet.py": "f27cd067fd7b9a7c6d7fab19fa471fe0617ee67889ae3931048557cc5659181b", + "research/j3-lag-2026-10-12/host-check.log": "b2b6d262934b3abf9e0f0bdbde14b339cb977f7bffe391c17b51b5d067862dda", + "research/j3-lag-2026-10-12/REVIEW.md": "f388b64b0cc0413dc9865afda90ed24de666dda0d6cdb821b4363ce1b73631b3", + "research/j3-lag-2026-10-12/trajectory.h5": "2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986", + "research/j3-lag-2026-10-12/baseline-status.txt": "e0b69879084f54afac1a3bc3701f1de9819068190c815ae84421f02f83cad9f7", + "research/j3-lag-2026-10-12/baseline.json": "5e9a920813fe3d775110af85af92970d5245a7040ace804445e432353b77e489", + "research/j3-lag-2026-10-12/gpu-diagnostic.log": "97956b517072b7c34e2e29e2a23f87eafb19b9eda786a4b8149e4a2eaed76ee9", + "research/j3-lag-2026-10-12/gpu-availability.log": "b227a519b8286849cfdf842573bd451803da048c6b27af9517f6b8964cd3aa39", + "research/j3-lag-2026-10-12/results.json": "00435ac7e402943e55e702fac1beb5af8cafe71967999658bcde2b29077b1fa8", + "research/j3-lag-2026-10-12/incremental.diff": "ebdf66c72daf17b926482f79a1a30bf0eb2d27fc930a7bb62e5449ebcf72fcc7", + "research/j3-lag-2026-10-12/end-21280.h5": "19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588", + "research/j3-lag-2026-10-12/start-20760.h5": "6c4cba5928c77566c2afc32231311a3986831c18fea766faadebb101243399e2", + "research/refinement_slot_20261013/incremental.patch": "2daca4c9751190df27e18ea79e46685a8fe3cbb6d42b34135b1219b8f53ea3fc", + "research/refinement_slot_20261013/baseline.json": "17b1a8cb7e8232979cd1fc9976cb6b78aa58a7005449526ec15cc0bfd45f8139", + "research/refinement_slot_20261013/manifest.json": "9f28f275533e8a1a761ec748152170b40845612058236ce331c47ae6c5d68713", + "research/refinement_slot_20261013/before.json": "482b02da26207ce32deb9368b6eb63f9de7b4ab670078c02f458f512fb182b53", + "research/refinement_slot_20261013/notes.txt": "8c70efe2acef9f179c453d297b27047b7632a2d55e0739fff4bccf74e0867511", + "research/refinement_slot_20261013/stdout.txt": "1cabbc8a87a2a237ffa649feac0b1b8e0ae8d769af8c298e600e249d2a525f58", + "research/refinement_slot_20261013/results.json": "6245de38106d7a7b0bfea0aa5100b9c9e393ab5436fc594ce0295b4526964b8f", + "research/refinement_slot_20261013/cpu_results.json": "2a891c1adcb3b25390ee7967e5171396aedb9cb4da5ae85f7444450d758671d5", + "research/refinement_slot_followup_20261013/planar_velocity.sha256": "326639a3e66b2b8dbd21ecd76b32a331f3194a82d1b5888219eee4a1782f6366", + "research/refinement_slot_followup_20261013/incremental.patch": "b734b4b540ece11a037a0f119a9846c39c09c8247d3cc89877880a27c3d082c4", + "research/refinement_slot_followup_20261013/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "research/refinement_slot_followup_20261013/baseline.json": "7ee505b7371a5258db7cb197c999be8859d14641915e3085f1969deb465880a4", + "research/refinement_slot_followup_20261013/manifest.json": "b11c1fb42abccc4b5638b974d1ea00b0687d8fad72b492eab3c8435bf485fd13", + "research/refinement_slot_followup_20261013/before.json": "809c4a6f330d4a29e92415fd0eb820f34dec38484e3560a8b9287b09553c2d87", + "research/refinement_slot_followup_20261013/notes.txt": "c04644a287aa936c9c6de0ca9d8bd83cee2d80aab9544ca284c9f7c029bfeff9", + "research/refinement_slot_followup_20261013/stdout.txt": "acb72f2b14e1abfe750330d84a38afe9bbe944bf028dde9700a291d5edff4be4", + "research/refinement_slot_followup_20261013/results.json": "dc38c3f5f88fac2ebf49be11df84e9f3da9d25504d400b6a506240a91735e4e1", + "research/refinement_prepare_20261013/incremental.patch": "df01345b8e2c33ebf6cdcbbb5104f02c4d7c239a6e6cafab1833228791bfa9a7", + "research/refinement_prepare_20261013/baseline.json": "5cc3c35faac9bb43a0017d83ddfca330d7da93f1e6407391da56b2e9df3b28b6", + "research/refinement_prepare_20261013/manifest.json": "5d479557cd01d61d8b652a3cf456fa57665bf624ce3b4a42c747523b74dec548", + "research/refinement_prepare_20261013/README.txt": "eee46f01add6ed7a5da76da76c98da628e13b930cfc49785399d7afbedbfd95f", + "research/refinement_prepare_20261013/validation.json": "945f4c3604ae0eae91c29741a39588207cfff3e05646e03a12d074a299956c2f", + "research/refinement_prepare_20261013/validation.txt": "5b5a8e9d455d37064c6709dcfd14e89ba66f51f09a11a9863b5cab67ac651d42", + "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", + "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/repair-2026-10-10/simplification-checks.log": "c9f15e870d02003480adf1a7f2fe4a9aca66c1934c4477619f05c8a4798ba85b", + "research/repair-2026-10-10/repair-state.md": "4d4aa1ec0c11a87d2c8380912e7ed74cf5c910ae42e5cc529effde36c9020969", + "research/repair-2026-10-10/TRON_HANDOFF.md": "f8aaa3d99cd133c2055d4adf396a0a57d14f6006aea19e87611bd1c2c1b53a88", + "research/repair-2026-10-10/final-gpu.log": "988bb97256d17b88c14f3793b15880d727ecb285abe62e7d2ae27a16729651c3", + "research/repair-2026-10-10/baseline-status.txt": "074088d793014e3b8154c58718058c7d300fb45595f5129fa957ef1e4cec38e2", + "research/repair-2026-10-10/repair-architecture.md": "49be42ff5c994017f3175e17efda14d84f0b68f8ecd239f66ccee38415b60c5a", + "research/repair-2026-10-10/classic-results.json": "a5d15305f516fd378b54cf9029102be58a83a55a7bad4b8e058fcfe0cc9898f4", + "research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff": "292b4bafe7a62d4fbbf7c165eb99929336edfcaa16b15f34f72ab71fcd928391", + "research/repair-2026-10-10/repair-numerical.md": "0272ebfa8c519aad161c520542cf53156574661609b91fd5ccad7955fdf2bd7b", + "research/repair-2026-10-10/provenance.json": "a81b7e32ecf7182c9617df1b39bbb063a05ef89290ad501bac4573cd5e8a6832", + "research/repair-2026-10-10/classic-signals.npz": "820c9a0b0713d7455f0a5839ac2cd5ee706086d1a26461225dcdb095673421e2", + "research/repair-2026-10-10/baseline-hashes.json": "d6a7d5f9ec5bceb0e7927d55603d9c5e70105982cd945723454659b19ab476e6", + "research/repair-2026-10-10/final-unit.log": "a892a39ecf88125558538cadce2cb5dc46d106b993b164e03da4ebb0eee68cef", + "research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "research/j1-2026-10-12/REVIEW.md": "13004a4f140acdcf59acb57e9e2dda1bb95763d30060f822a7c206c94b813a9f", + "research/j1-2026-10-12/gpu.log": "8659a78ea52bbf8eb923d46ea71636ce63cd322352d5c98a74f631e666dd8cfb", + "research/j1-2026-10-12/baseline-status.txt": "ac398360e05b746b89ae0c3acfe202b5122e650a3bb1ff234ab26f874a303e64", + "research/j1-2026-10-12/baseline.json": "ad7afdf7b3913d11c07343e971fe2f43c2d1a2b99e3d5904a6ba89e3bb0b24fb", + "research/j1-2026-10-12/checkpoint-gpu.log": "adfe3d77d2e6c6f6184dccc0267b4404b20a7709505d5ff5affed0ed4a618083", + "research/j1-2026-10-12/cpu.log": "60cac097f7c4f11401df2aacb43a248640555e7628d2829c4680c71db34e9640", + "research/j1-2026-10-12/gpu-validation.log": "d1e9f2aea17a85eddcd94b81c700738ce073214857b55c28abd1219ff1edbed7", + "research/j1-2026-10-12/results.json": "449f8a17dacac0fc6d2489c4b10bac330dbbbdb38fad3ce54f739ac8c6d48e85", + "research/j1-2026-10-12/incremental.diff": "a454c23da7b0011645949c0fbf64d0c41ecfdab5642b1b7c5119868005d3c721", + "research/j3-coverage-2026-10-12/restart-21280.h5": "3e89c12c16f91f76ca9acd909e0fa7d42df6fbb5e870b299aa08ca42bc3e3dc9", + "research/j3-coverage-2026-10-12/REVIEW.md": "7293f3f3442855c8521698605aab504e026915a7bf1e77f5a24710d89a812443", + "research/j3-coverage-2026-10-12/restart-reference-21296.h5": "7192f510dd7820675aa1de130f55514136fba782cf77f92545189918a7e0c328", + "research/j3-coverage-2026-10-12/negative-end-20760.h5": "bd0bd063579d625e358762b1fdde5ac11bfcf739646a847fb77a4a2031011b9b", + "research/j3-coverage-2026-10-12/baseline-status.txt": "31c949b11b20d7cd4202dba16882b5712aa1653da0cb2da2f0ebd69bf488040e", + "research/j3-coverage-2026-10-12/baseline.json": "d8844104f2665a25bfc417ee29becf89ab3955fac9105b5ddb12cfb1fe2a55b0", + "research/j3-coverage-2026-10-12/verification.json": "205986efd2b41635721b7fd20288be982348c765180102c7102750ba088f3a28", + "research/j3-coverage-2026-10-12/negative-budget-20744.h5": "c09d75fc4a2cff68039a0956bd9d32b79b9cd3a6b386c72b4db54c214b110cd8", + "research/j3-coverage-2026-10-12/gpu-validation.log": "505cd5a5db46d7984aefb2a614151c25c4ace0e7d2a52e02c3e4f9792fd8eb95", + "research/j3-coverage-2026-10-12/results.json": "02460981ad49c9cc13b4246abad1d8afd2599c61bfb545a6e32da9bbcd5c0db1", + "research/j3-coverage-2026-10-12/incremental.diff": "98aa7855d5d6b91b4509a924c8a5aabab4339ba29c7e7dc2d91262c48e3848ca", + "research/fixed_patch_jet_20261013/incremental.patch": "dd95a98f03b7ce06d024a1d1d1f454dd206ad10a573a8060f728bad71941d6e8", + "research/fixed_patch_jet_20261013/baseline.json": "d2a83d490ca545589a7a7fc0e3fd187f4801e22e5c8d2d18ddb519097d3281b9", + "research/fixed_patch_jet_20261013/manifest.json": "3efaf5af8d6a4f6c3460d8023466af611ff90bc9fc79c3e7db6f591d172d1182", + "research/fixed_patch_jet_20261013/before.json": "dd47f1e25a807a3eafef7d12429f034117f945a4ebfeb98eb1688d1752c3d30d", + "research/fixed_patch_jet_20261013/notes.txt": "155be36e201c9c8a043a87fc7a7d0064b703990b2aad86853767603fe38a256d", + "research/fixed_patch_jet_20261013/stdout.txt": "925abb3038095560d71a4e7733b38d93672397640cc88197c733a8a39e2f9f51", + "research/fixed_patch_jet_20261013/results.json": "fcd944b8dec61b399874b5386d6e00880f0dbc34d248ad371a6af8781fddaa93", + "research/fixed_patch_jet_20261013/fixed_patch_jet.py": "f27cd067fd7b9a7c6d7fab19fa471fe0617ee67889ae3931048557cc5659181b", + "research/fixed_patch_jet_20261013/output/summary.json": "a9a4ab5975684a386f05746f570ec4d7b1c5ee3be413400445122448f534eca3", + "research/fixed_patch_jet_20261013/output/velocity.png": "0f8ffc3a7b36ffefa5c0cd8550309fe89d9de72cd5476f354a27fac89cb39b0a", + "research/fixed_patch_jet_20261013/output/layout.png": "cfc354c0192a5a9727a8056ff6c5bc4571f916143853e4da2dc16da965e10173", + "research/audit-2026-10-09/numerical_semantics_results.json": "b95b065b594aa2911740dab216f87936c9bf7f7fa25acfda93b5738443564035", + "research/audit-2026-10-09/REVIEW.zh-CN.md": "2841fd3aa7a6baedbe1079d90915c8b05212b133824ed6abccaa1f09656eaefe", + "research/audit-2026-10-09/root-initializers-report.md": "ca448457c444949d5d0e1e10fa7121064510b77fc4c3512580900f0299219867", + "research/audit-2026-10-09/numerical-report.md": "970330b3a593f79f09866ce6ae82bc0ddd81226230d0a6ff06ae8ae756ee80da", + "research/audit-2026-10-09/numerical_collision_results.json": "51e5c263bb8cde82cedef2ccfdbf5ef657742a80218d7896b1ff877516e59693", + "research/audit-2026-10-09/architecture-cpu-results.json": "e1b809210005c8765b13fddbb5ed710d15f6fcbb4c5788a4064f3e88808433ef", + "research/audit-2026-10-09/numerical_compile_results.json": "c3b0ae02072a2ec408ada7513b542ec255f6855cb743a3ed7f91bd8f31504f44", + "research/audit-2026-10-09/state_results.json": "da9170df3e11231c73f20e5e79ed68e08966673d1dd52004ea6b6a279afc0dcd", + "research/audit-2026-10-09/architecture-report.md": "861079dc3f4ced9fdc41bfb22002d32e190c0d630d3ba2f138f9dc7a949b8371", + "research/audit-2026-10-09/state-report.md": "f8708807efc2e109810c5955f7c1884a932668c0b3cb2963c2df3b09f2a3d5c4", + "research/j3-offline-2026-10-12/REVIEW.md": "d9902c58498e73c29e054b23adb968f7e1e14421cba5c58d03bbc5a50159ae79", + "research/j3-offline-2026-10-12/lags.csv": "fbd9addd413f24c47f4411317e872265bb774e8e1724fe169412befa860ae94d", + "research/j3-offline-2026-10-12/localization.png": "a72907638e32b0ecfc2205bea438e7b408f40aad86217ce6ad9b4877840c9cfc", + "research/j3-offline-2026-10-12/results.json": "cdb857bea6f4e06ed15acf773505ce6d5147f8cb8ce0a53cc368ee267cde6361", + "research/j3-offline-2026-10-12/cpu-analysis.log": "bc02a9b197fc15ae1b503ca54655a7622d4361f9b45b7848ff9c387ea3665f11", + "research/j3-offline-2026-10-12/regions.csv": "3a8fc640b61d70e3b7f73d2bf8ac2bd3f720adf39a90dfda6180430e0489efae", + "research/j2-slot-2026-10-12/REVIEW.md": "10c4a94ffc32e0a2c4e0f6593b7cfc28479b5869f279f0b9d0b708fa3a47d1e6", + "research/j2-slot-2026-10-12/gpu-serialization-failure.log": "df804e53b35e7ddaad79a17842b4b5fd9d834e29ca2d56edb00e835848d09200", + "research/j2-slot-2026-10-12/baseline-status.txt": "812616e2d941efcf854e1b37d6e662dda1aaf2b69074fcc04017133e13b72166", + "research/j2-slot-2026-10-12/baseline.json": "e82a1844145fd0cbc585c581b29f80b56193f122cfe1dfa7578f26904a720285", + "research/j2-slot-2026-10-12/cli.log": "9482ad7101d501f27f92e204b2f3ae5c6d91bd887b525aa31cb4a2a188f3cb92", + "research/j2-slot-2026-10-12/cpu.log": "91aba5961006909fbbb860429a9d3cfc930112a0d74c7788bc51c0a5897b47e5", + "research/j2-slot-2026-10-12/gpu-validation.log": "223351b52c70fa4523289f3a1b3db435a11286379253280470900ffe397580a6", + "research/j2-slot-2026-10-12/results.json": "7d35ca7989aed5380e0a45de7f583972566fc516a051da63c53b35514e267494", + "research/j2-slot-2026-10-12/incremental.diff": "c9e391bc91438cd912c1ed5a419705d4388522f672c67a066cfc055e814e699f", + "research/design-2026-10-09/math-and-history.md": "64f8c82e4949d6f58b46faa09800958714859c36cad20bbeeae8b449ae7a6099", + "research/design-2026-10-09/math-checks.json": "94750381954317cde8d649db26beaed8ea945666572a05030ca2b4d97d384011", + "research/design-2026-10-09/Contracts.lean": "2442d9a778ef20e8af3fecf23be6fea6d73c6299ff744c9664b652bc5ee3f034", + "research/design-2026-10-09/jet-study.md": "a362142ef04a5ad5dbb4c9db9d221b1199dccec53780c8f2da49a15201cfe529", + "research/design-2026-10-09/PLAN.zh-CN.md": "0341dd7ee306a040340c8e5dedb07a109e931c27dbf3c994d072aa78e3b6bc67", + "research/design-2026-10-09/jet_closure_results.json": "12cf7d400a206f9f9ec9ea6ad251fe6bb0232e27bcbed22fbc1ead2c0fc7d249", + "research/design-2026-10-09/grid-study.md": "4435dc1275ec5e15b118becc6ac391f306195d1e5beaa58037b1aff3bb2465c7", + "research/design-2026-10-09/jet_closure_check.py": "fde45d0f8518740ef5c0bf0fe7635d6adaf9a2e789927dd4e68e991c138ddc30", + "research/design-2026-10-09/api-architecture-study.md": "d6fb45ec784f0e1db55fb9f34e137b9f551db0b9b39fd4f0ef247a78fc34eedf", + "research/design-2026-10-09/math_checks.py": "4254983a783fe4bad8888b3d7c243c87d991c7bbf242edb0f56f25cbaefee890", + "research/refinement_example_20261013/incremental.patch": "6acd05df6669ccdcf234ac1680c6e76c75a2587974adb6728f7edda6fd625b69", + "research/refinement_example_20261013/baseline.json": "ae0af15ddb40709d1e348655a665264984a240ded1e28af816a8000d08e784be", + "research/refinement_example_20261013/manifest.json": "6da85ac513065dcf49200bc0872bec38b6c7ba61f7d82036c2189cabe5ac29ce", + "research/refinement_example_20261013/before.json": "d95cd518f080eab92af5e53e1e9b6b6fad626eae51990e510d2d2f2ae9d0ec7b", + "research/refinement_example_20261013/notes.txt": "f111f8cba94b43d1127945fa41615037e1740efcfc529e802338dd8c4ff02795", + "research/refinement_example_20261013/stdout.txt": "9c59fb315a5552cce4ceab171003e425bf64d747137c89bd86d8779a34adcbd1", + "research/refinement_example_20261013/results.json": "8ab13bbc022f2a66898aa07ed94f43cb6716570e7a360a809b7fcd097316db7e", + "research/j3-reservoir-2026-10-12/gpu-availability-sandbox.log": "1d58470512e583a0acfabf6896ee5f31e5b493b8231aed54b864f64eb275b02c", + "research/j3-reservoir-2026-10-12/REVIEW.md": "1ea5f860728584ea6cbe40ba3994e40471102d8e2cf6d93e28fe47222cba0cab", + "research/j3-reservoir-2026-10-12/baseline-status.txt": "0ef1a8c9878c4053ebc1a7d4bace6d4ec38bf27ace167b4239ddbb1c6c897e20", + "research/j3-reservoir-2026-10-12/baseline.json": "847fefd1eae971985d34d04d89ee6d6f1c91f6940c54fe351d112faba7bc6838", + "research/j3-reservoir-2026-10-12/cpu.log": "b33f6c1a1b0ee67968c4cff85d491e46e30e0d6c796b552629714ab8b5dcead0", + "research/j3-reservoir-2026-10-12/gpu-validation.log": "ff04024db197e332f37c912a96413e3251fd0186947348ffbc33af6f4a899f2c", + "research/j3-reservoir-2026-10-12/results.json": "49685de7679a14860258abf1753aaa6d116ad709b868d907ddb40e74c9b845ea", + "research/j3-reservoir-2026-10-12/incremental.diff": "fae312831d71e46dd477a640b06ed927853a9e735d26bf9f5868927fa31cfa56" + }, + "prior_source_snapshot": "research/fixed_patch_jet_20261013/fixed_patch_jet.py" +} diff --git a/research/fixed_patch_jet_records_20261013/before.json b/research/fixed_patch_jet_records_20261013/before.json new file mode 100644 index 0000000..ebd6f42 --- /dev/null +++ b/research/fixed_patch_jet_records_20261013/before.json @@ -0,0 +1,8 @@ +{ + "utc": "2026-10-13T11:51:01.475368+00:00", + "physical_device": 0, + "uuid": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c", + "gpus": "index, uuid, name, memory.used [MiB], memory.free [MiB], utilization.gpu [%]\n0, GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, Tesla V100-SXM2-16GB, 5 MiB, 16140 MiB, 0 %\n1, GPU-f1c9fd5a-e917-56e0-21fb-24035ba44a36, Tesla V100-SXM2-16GB, 5 MiB, 16140 MiB, 0 %\n2, GPU-b8c11c01-c91f-aa0b-abf6-dad35085cc76, Tesla V100-SXM2-16GB, 5 MiB, 16140 MiB, 0 %\n3, GPU-8b71b032-1b75-2891-935c-ce106a53034a, Tesla V100-SXM2-16GB, 5 MiB, 16140 MiB, 0 %\n", + "compute_apps": "gpu_uuid, pid, process_name, used_gpu_memory [MiB]\n", + "ram_available_bytes": 64059838464 +} diff --git a/research/fixed_patch_jet_records_20261013/fixed_patch_jet.py b/research/fixed_patch_jet_records_20261013/fixed_patch_jet.py new file mode 100644 index 0000000..f6b2998 --- /dev/null +++ b/research/fixed_patch_jet_records_20261013/fixed_patch_jet.py @@ -0,0 +1,193 @@ +"""Low-Re startup flow in an x-periodic confined domain; nozzle remains coarse. + +From this checkout, after checking the selected physical GPU is idle: + PYTHONPATH="$PWD/src" CUDA_VISIBLE_DEVICES=0 python examples/fixed_patch_jet.py --output /tmp/patch-jet + +The fixed-amplitude start includes acoustic transients, not a developed jet. +Only native leaf cells are plotted. No interpolation, restart or flow oracle. +Scale estimates use the continuous peak A=.02, not inlet mean speed: W/A=600, +H/A=2250, W**2/nu=1440, H**2/nu=20250, where H=NY-3=45 between on-site planes. +An acoustic crossing (~78 steps) does not imply that transients have disappeared. +""" +import argparse +from dataclasses import replace +import json +import os +from pathlib import Path +import tempfile +import time + +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 FixedPatchStepper + +BOUNDS, AMPLITUDE, WIDTH = (16, 4, 32, 28), .02, 12 +TIMES, MAX_MACH, MAX_SECONDS = (0, 300, 1200), .1, 120 + + +def measure(arrays, masks, centers, initial_mass): + fields = [] + for array, mask in zip(arrays, masks): + if not np.isfinite(array[:, mask]).all(): + raise RuntimeError("Nonfinite leaf populations") + field = np.full((*mask.shape, 3), np.nan) + field[mask] = [compute_macro_from_ddf(f) for f in array[:, mask].T] + fields.append(field) + leaves = np.concatenate([f[m] for f, m in zip(fields, masks)]) + speed = np.hypot(leaves[:, 1], leaves[:, 2]) + mass = sum(area*a[:, m].sum(dtype=np.float64) + for area, a, m in zip((1, .25), arrays, masks)) + record = dict(finite=bool(np.isfinite(leaves).all()), rho_min=float(leaves[:, 0].min()), + rho_max=float(leaves[:, 0].max()), speed_max=float(speed.max()), + sampled_max_Mach=float(speed.max()*np.sqrt(3)), + density_deviation=float(np.abs(leaves[:, 0]-1).max()), + discrete_leaf_mass=float(mass), mass_change=float(mass-initial_mass)) + if not record['finite'] or record['rho_min'] <= 0 or record['sampled_max_Mach'] > MAX_MACH: + raise RuntimeError(f"Finite/positive-density/Ma<={MAX_MACH} guard failed: {record}") + walls = fields[0][[1, -2]] + record['macro_sum_rho_v'] = dict(zip(('Q_in', 'Q_out'), + (walls[:, :, 0]*walls[:, :, 2]).sum(axis=1).tolist())) + record['centerline'] = [] + for level, y in ((1, 16.25), (0, 32.5)): + xs, ys = centers[level] + columns = np.argsort(np.abs(xs-24))[:2] + row = int(np.flatnonzero(ys == y)[0]) + values = fields[level][row, columns].mean(axis=0) + record['centerline'].append(dict(level=level, x=24, y=y, + sampled_x=sorted(xs[columns].tolist()), rule='arithmetic mean of two neighboring native columns', + rho_ux_uy=values.tolist())) + return fields, record + + +def draw(out, snapshots, masks, centers): + import matplotlib + matplotlib.use('Agg') + import matplotlib.pyplot as plt + from matplotlib.collections import PolyCollection + + def decorate(ax): + ax.set(xlim=(0, 48), ylim=(1.5, 46.5), aspect='equal', xlabel='X', ylabel='Y') + ax.plot([16, 32, 32, 16, 16], [4, 4, 28, 28, 4], color='tab:red', lw=1) + ax.axhline(1.5, color='black', lw=1) + ax.axhline(46.5, color='black', lw=1, ls='--') + ax.plot([18, 30], [1.5, 1.5], color='tab:orange', lw=4, clip_on=False) + + fig, ax = plt.subplots(figsize=(6, 6), constrained_layout=True) + for mask, (xs, ys), dx in zip(masks, centers, (1, .5)): + yy, xx = np.meshgrid(ys, xs, indexing='ij') + cells = np.stack((xx[mask], yy[mask]), axis=-1) + vertices = cells[:, None, :] + dx*np.array([[-.5, -.5], [.5, -.5], [.5, .5], [-.5, .5]]) + ax.add_collection(PolyCollection(vertices, facecolors='none', edgecolors='0.55', linewidths=.3)) + decorate(ax) + ax.set_title('Native leaf grid: coarse dx=1, fine dx=0.5\n' + 'Red: internal patch; orange: coarse slot; dashed: reservoir\n' + 'Flow may cross patch sides; patch does not contain all startup flow', fontsize=10) + fig.savefig(out/'layout.png', dpi=150) + plt.close(fig) + vmax = max(1., *(np.nanmax(np.hypot(f[..., 1], f[..., 2]))/AMPLITUDE + for fields in snapshots for f in fields)) + fig, axes = plt.subplots(1, 3, figsize=(12, 4.8), constrained_layout=True) + for ax, step, fields in zip(axes, TIMES, snapshots): + for field, mask, (xs, ys), dx in zip(fields, masks, centers, (1, .5)): + speed = np.ma.masked_where(~mask, np.hypot(field[..., 1], field[..., 2])/AMPLITUDE) + image = ax.pcolormesh(np.r_[xs-dx/2, xs[-1]+dx/2], + np.r_[ys-dx/2, ys[-1]+dx/2], speed, + shading='flat', cmap='viridis', vmin=0, vmax=vmax, rasterized=True) + stride = int(4/dx) + yy, xx = np.meshgrid(ys, xs, indexing='ij') + selection = np.zeros_like(mask) + selection[::stride, ::stride] = mask[::stride, ::stride] + ax.quiver(xx[selection], yy[selection], field[..., 1][selection], field[..., 2][selection], + angles='xy', scale_units='xy', scale=AMPLITUDE/3, width=.005, color='white') + decorate(ax) + ax.set_title(f'coarse t={step}, fine steps={2*step}') + fig.colorbar(image, ax=axes, label='speed / imposed amplitude') + fig.suptitle('Low-Re startup flow in an x-periodic confined domain\n' + 'Fixed-amplitude start includes acoustic transients; not steady/developed\n' + 'Nozzle remains coarse; flow may cross patch sides (not fully enclosed)', fontsize=11) + fig.savefig(out/'velocity.png', dpi=150) + plt.close(fig) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--output', type=Path, required=True) + out = parser.parse_args().output.resolve() + root = Path(__file__).resolve().parents[1] + if Path(CelerisLab.__file__).resolve() != root/'src/CelerisLab/__init__.py': + raise RuntimeError(f'Set PYTHONPATH to {root / "src"}') + out.mkdir(parents=True, exist_ok=False) + cfg = replace(load_lbm_config(str(root/'src/CelerisLab/configs/config_lbm.json')), + nx=48, ny=48, viscosity=.1, velocity=0., rho=1., wall_slot_width=WIDTH, + wall_normal_velocity=AMPLITUDE, y_wall_bc='on_site_velocity', top_wall_bc='reservoir', + lattice_model='D2Q9', collision='SRT', streaming='double_buffer', + store_precision='FP32', ddf_shifting=False, les_enabled=False) + report = dict(config=dict(nx=48, ny=48, bounds=BOUNDS, W=WIDTH, A=AMPLITUDE, nu=.1, + rho=1, tau_coarse=.8, tau_fine=1.1, coarse_boundary='slot_reservoir'), + guards=dict(check_every=50, positive_density=True, finite=True, + max_Mach=MAX_MACH, max_seconds=MAX_SECONDS), + scale_estimates=dict(velocity_basis='continuous peak A, not inlet mean', H=cfg.ny-3, + W_over_A=WIDTH/AMPLITUDE, H_over_A=(cfg.ny-3)/AMPLITUDE, + W_squared_over_nu=WIDTH**2/cfg.viscosity, + H_squared_over_nu=(cfg.ny-3)**2/cfg.viscosity, + acoustic_crossing=(cfg.ny-3)*np.sqrt(3)), + notes='Node mass uses areas 1 and 1/4, not an exact physical volume integral. ' + 'Q_in/Q_out are bottom/top macro sum(rho*vy), not a closed population budget. ' + 'Mach maxima are sampled every 50 steps, not every-step peaks. ' + 'One acoustic crossing does not imply transient decay; no steady-state claim.', + samples=[], status='running', last_synchronized_coarse_step=0) + start, run = time.monotonic(), None + try: + with CudaContext(0) as context, FixedPatchStepper(cfg, BOUNDS, context=context, + coarse_boundary='slot_reservoir') as run: + p = run.patch + masks = [np.ones(p.coarse_shape, bool), p.fine_kind == ACTIVE] + masks[0][[0, -1]] = False + masks[0][4:28, 16:32] = False + centers = [(origin[0]+dx*(np.arange(shape[1])+.5), + origin[1]+dx*(np.arange(shape[0])+.5)) + for shape, origin, dx in ((p.coarse_shape, (0, 0), 1), + (p.fine_shape, p.fine_origin, .5))] + initial = [np.broadcast_to(compute_feq_d2q9(1., 0., 0.)[:, None, None], (9, *m.shape)).copy() + for m in masks] + for x in range(cfg.nx): + v = AMPLITUDE*max(0., 1-((2*x-(cfg.nx-1))/WIDTH)**2)**2 + initial[0][:, 1, x] = compute_feq_d2q9(1., 0., v) + run.initialize(*initial) + mass0 = sum(area*a[:, m].sum(dtype=np.float64) + for area, a, m in zip((1, .25), initial, masks)) + snapshots = [] + for step in range(0, TIMES[-1]+1, 50): + if time.monotonic()-start > MAX_SECONDS: + raise TimeoutError('120 second demonstration limit reached') + if step: + run.step(50) + report['last_synchronized_coarse_step'] = run.step_count + fields, sample = measure(run.download(), masks, centers, mass0) + sample.update(t=step, coarse_steps=step, fine_steps=2*step) + report['samples'].append(sample) + print(json.dumps(sample), flush=True) + if step in TIMES: + snapshots.append(fields) + with tempfile.TemporaryDirectory(prefix='.plot-', dir=out) as cache: + os.environ['MPLCONFIGDIR'] = cache + draw(out, snapshots, masks, centers) + report['status'] = 'complete' + except BaseException as exc: + report.update(status='failed', error=f'{type(exc).__name__}: {exc}', + last_synchronized_coarse_step=run.step_count if run is not None else 0) + raise + finally: + report['elapsed_seconds'] = time.monotonic()-start + (out/'summary.json').write_text(json.dumps(report, indent=2)+'\n') + print(f'{report["status"]}: last synchronized coarse step ' + f'{report["last_synchronized_coarse_step"]}; output={out}', flush=True) + + +if __name__ == '__main__': + main() diff --git a/research/fixed_patch_jet_records_20261013/incremental.patch b/research/fixed_patch_jet_records_20261013/incremental.patch new file mode 100644 index 0000000..c7f4d0c --- /dev/null +++ b/research/fixed_patch_jet_records_20261013/incremental.patch @@ -0,0 +1,87 @@ +--- a/examples/fixed_patch_jet.py ++++ b/examples/fixed_patch_jet.py +@@ -5,6 +5,9 @@ + + The fixed-amplitude start includes acoustic transients, not a developed jet. + Only native leaf cells are plotted. No interpolation, restart or flow oracle. ++Scale estimates use the continuous peak A=.02, not inlet mean speed: W/A=600, ++H/A=2250, W**2/nu=1440, H**2/nu=20250, where H=NY-3=45 between on-site planes. ++An acoustic crossing (~78 steps) does not imply that transients have disappeared. + """ + import argparse + from dataclasses import replace +@@ -41,15 +44,16 @@ + for area, a, m in zip((1, .25), arrays, masks)) + record = dict(finite=bool(np.isfinite(leaves).all()), rho_min=float(leaves[:, 0].min()), + rho_max=float(leaves[:, 0].max()), speed_max=float(speed.max()), +- measured_Ma=float(speed.max()*np.sqrt(3)), ++ sampled_max_Mach=float(speed.max()*np.sqrt(3)), + density_deviation=float(np.abs(leaves[:, 0]-1).max()), + discrete_leaf_mass=float(mass), mass_change=float(mass-initial_mass)) +- if not record['finite'] or record['rho_min'] <= 0 or record['measured_Ma'] > MAX_MACH: ++ if not record['finite'] or record['rho_min'] <= 0 or record['sampled_max_Mach'] > MAX_MACH: + raise RuntimeError(f"Finite/positive-density/Ma<={MAX_MACH} guard failed: {record}") + walls = fields[0][[1, -2]] +- record['macro_sum_rho_v_bottom_top'] = (walls[:, :, 0]*walls[:, :, 2]).sum(axis=1).tolist() ++ record['macro_sum_rho_v'] = dict(zip(('Q_in', 'Q_out'), ++ (walls[:, :, 0]*walls[:, :, 2]).sum(axis=1).tolist())) + record['centerline'] = [] +- for level, y in ((0, 3.5), (1, 8.25), (1, 16.25), (0, 32.5)): ++ for level, y in ((1, 16.25), (0, 32.5)): + xs, ys = centers[level] + columns = np.argsort(np.abs(xs-24))[:2] + row = int(np.flatnonzero(ys == y)[0]) +@@ -80,7 +84,9 @@ + vertices = cells[:, None, :] + dx*np.array([[-.5, -.5], [.5, -.5], [.5, .5], [-.5, .5]]) + ax.add_collection(PolyCollection(vertices, facecolors='none', edgecolors='0.55', linewidths=.3)) + decorate(ax) +- ax.set_title('Native leaf grid: coarse dx=1, fine dx=0.5\nRed: internal patch; orange: coarse slot; dashed: reservoir') ++ ax.set_title('Native leaf grid: coarse dx=1, fine dx=0.5\n' ++ 'Red: internal patch; orange: coarse slot; dashed: reservoir\n' ++ 'Flow may cross patch sides; patch does not contain all startup flow', fontsize=10) + fig.savefig(out/'layout.png', dpi=150) + plt.close(fig) + vmax = max(1., *(np.nanmax(np.hypot(f[..., 1], f[..., 2]))/AMPLITUDE +@@ -101,7 +107,9 @@ + decorate(ax) + ax.set_title(f'coarse t={step}, fine steps={2*step}') + fig.colorbar(image, ax=axes, label='speed / imposed amplitude') +- fig.suptitle('Low-Re startup flow in an x-periodic confined domain\nFixed-amplitude start includes acoustic transients; not steady/developed') ++ fig.suptitle('Low-Re startup flow in an x-periodic confined domain\n' ++ 'Fixed-amplitude start includes acoustic transients; not steady/developed\n' ++ 'Nozzle remains coarse; flow may cross patch sides (not fully enclosed)', fontsize=11) + fig.savefig(out/'velocity.png', dpi=150) + plt.close(fig) + +@@ -123,8 +131,15 @@ + rho=1, tau_coarse=.8, tau_fine=1.1, coarse_boundary='slot_reservoir'), + guards=dict(check_every=50, positive_density=True, finite=True, + max_Mach=MAX_MACH, max_seconds=MAX_SECONDS), ++ scale_estimates=dict(velocity_basis='continuous peak A, not inlet mean', H=cfg.ny-3, ++ W_over_A=WIDTH/AMPLITUDE, H_over_A=(cfg.ny-3)/AMPLITUDE, ++ W_squared_over_nu=WIDTH**2/cfg.viscosity, ++ H_squared_over_nu=(cfg.ny-3)**2/cfg.viscosity, ++ acoustic_crossing=(cfg.ny-3)*np.sqrt(3)), + notes='Node mass uses areas 1 and 1/4, not an exact physical volume integral. ' +- 'Boundary rho*v is a macro measurement, not a closed population budget.', ++ 'Q_in/Q_out are bottom/top macro sum(rho*vy), not a closed population budget. ' ++ 'Mach maxima are sampled every 50 steps, not every-step peaks. ' ++ 'One acoustic crossing does not imply transient decay; no steady-state claim.', + samples=[], status='running', last_synchronized_coarse_step=0) + start, run = time.monotonic(), None + try: +@@ -154,11 +169,10 @@ + run.step(50) + report['last_synchronized_coarse_step'] = run.step_count + fields, sample = measure(run.download(), masks, centers, mass0) +- print(f'step={step} rho=[{sample["rho_min"]:.7g},{sample["rho_max"]:.7g}] ' +- f'Ma={sample["measured_Ma"]:.7g}', flush=True) ++ sample.update(t=step, coarse_steps=step, fine_steps=2*step) ++ report['samples'].append(sample) ++ print(json.dumps(sample), flush=True) + if step in TIMES: +- sample.update(coarse_steps=step, fine_steps=2*step) +- report['samples'].append(sample) + snapshots.append(fields) + with tempfile.TemporaryDirectory(prefix='.plot-', dir=out) as cache: + os.environ['MPLCONFIGDIR'] = cache diff --git a/research/fixed_patch_jet_records_20261013/manifest.json b/research/fixed_patch_jet_records_20261013/manifest.json new file mode 100644 index 0000000..1d616c2 --- /dev/null +++ b/research/fixed_patch_jet_records_20261013/manifest.json @@ -0,0 +1,58 @@ +{ + "case_runs_total": 2, + "this_round_runs": 1, + "exit_code": 0, + "records": 25, + "baseline_files_checked": 543, + "unchanged_baseline_files": 542, + "changed_files": [ + "examples/fixed_patch_jet.py" + ], + "diff": { + "added": 25, + "removed": 11 + }, + "output_bytes": 199615, + "files": { + "examples/fixed_patch_jet.py": { + "bytes": 10650, + "sha256": "7d6370fe6d8b723b1b3e1492e89fcc72562383c0dc030c25a254ac3fc899845a" + }, + "research/fixed_patch_jet_records_20261013/incremental.patch": { + "bytes": 5539, + "sha256": "63485fb4eee8e2e89b683961aee32a6ca00ef5e607a362efb3290f3a08809222" + }, + "research/fixed_patch_jet_records_20261013/baseline.json": { + "bytes": 71228, + "sha256": "d73ddb2a6629f03655aa05fae08bb4bbc9474c686af56dbe29c99d6491b7508e" + }, + "research/fixed_patch_jet_records_20261013/before.json": { + "bytes": 690, + "sha256": "68ec7ef820d5f826b6e24c6afdef71c76bd22400393815321ac3a1905c437796" + }, + "research/fixed_patch_jet_records_20261013/notes.txt": { + "bytes": 2449, + "sha256": "6d55a6395833fa02883357752ab3d8ea43df516fbcb40e4006fb1756757b1e99" + }, + "research/fixed_patch_jet_records_20261013/stdout.txt": { + "bytes": 20750, + "sha256": "6e579eff0c1762ba31d8b1cee709e0cdba2e3f408432b71fe374b2d9f450665c" + }, + "research/fixed_patch_jet_records_20261013/results.json": { + "bytes": 1136, + "sha256": "7997ee1626ad0640a9d362499c8e0eeefe9d71913fef5f2280112d5bdc9b50d4" + }, + "research/fixed_patch_jet_records_20261013/output/summary.json": { + "bytes": 32817, + "sha256": "a448c2e66a56ee48071315d6f73d0ec1afccc29d680ab3a40d51d1df62dd973a" + }, + "research/fixed_patch_jet_records_20261013/output/velocity.png": { + "bytes": 116196, + "sha256": "7c67c5f64a4bec94547c0ac7833e6d47eeaae9696904c1465a9d5d969008b79d" + }, + "research/fixed_patch_jet_records_20261013/output/layout.png": { + "bytes": 50602, + "sha256": "678ba19a51c112960ace2a4b8d9d94e43287d97c3a6ef892684630ab37b70255" + } + } +} diff --git a/research/fixed_patch_jet_records_20261013/notes.txt b/research/fixed_patch_jet_records_20261013/notes.txt new file mode 100644 index 0000000..b58cec1 --- /dev/null +++ b/research/fixed_patch_jet_records_20261013/notes.txt @@ -0,0 +1,7 @@ +Second same-parameter case run, explicitly authorized to repair recording/captions. Total case executions now2; no third run. Same48x48, bounds(16,4,32,28), W12/A.02/nu.1/rho1, initial state, guard values and1200 coarse/2400 fine steps. Only example record/description/caption changes; all other baseline files unchanged. +Original run source saved byte-for-byte at research/fixed_patch_jet_20261013/fixed_patch_jet.py, SHA256 f27cd067fd7b9a7c6d7fab19fa471fe0617ee67889ae3931048557cc5659181b. Original PNG/stdout/summary/results/manifest retained unmodified. Historical source/doc wording is retained as evidence, not silently rewritten. +New stdout.txt is unmodified directly redirected merged stdout/stderr; 25 complete JSON samples exactly match output/summary.json.samples at0,50,...1200. Records include t, macro Q_in/out=sum(rho*vy), node-weighted leaf mass/change, density deviation, sampled maximum Mach and two centerline probes at16.25(fine)/32.5(coarse) with explicit native-column arithmetic mean. Only three macro-field snapshots retained for plots. Native-cell plots inspected, on-site clipping preserved; new captions note flow may cross patch sides and nozzle remains coarse. +Measured exit0, elapsed6.702868s, sampled maximum Mach0.0341615929682, sampled rho range[0.992553949356,1.010591745377]. Discrete leaf mass2208.00001640618 ->2202.30112983007, delta -5.69888657611. Final macro Q_in0.127690201625, Q_out0.0306652393192. Three shared snapshot scalar diagnostics and fluxes are identical to first run. Do not infer steady state or population-budget closure from these observations. Sampling every50 steps is not a bound on every-step maxima. +Scale estimates use continuous peak A=.02, not mean inlet velocity; on-site H=NY-3=45. W/A600, H/A2250, W^2/nu1440, H^2/nu20250; acoustic crossing~77.94 is not a transient-decay time. +Live precheck UUID/occupancy/VRAM/compute-apps/RAM in before.json. Real production compilation, private scratch/plot cache, no256MiB cap. Peak sampled group RSS281206784 bytes; minimum RAM63706316800 bytes, minimum GPU free15826MiB; combined task temporary/related evidence peak2192956 bytes (<2GB). Own temporary runner, compilation scratch and plot cache removed. No environment/system/dependency/DynamisLab edits, commit or push. +Read-only agent confirmed no numerical/guard change and no backend/kernel/helper modification. AST syntax passed before execution; no other tests or numerical cases run. diff --git a/research/fixed_patch_jet_records_20261013/results.json b/research/fixed_patch_jet_records_20261013/results.json new file mode 100644 index 0000000..788af64 --- /dev/null +++ b/research/fixed_patch_jet_records_20261013/results.json @@ -0,0 +1,34 @@ +{ + "case_run_number": 2, + "command": [ + "/usr/bin/prlimit", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "/home/frank14f/CelerisLab/examples/fixed_patch_jet.py", + "--output", + "/home/frank14f/CelerisLab/research/fixed_patch_jet_records_20261013/output" + ], + "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-jet-records-run-gnfs6m58" + }, + "exit_code": 0, + "elapsed_seconds": 6.70286765601486, + "peak_sampled_group_rss_bytes": 281206784, + "min_ram_available_bytes": 63706316800, + "min_gpu_free_mib": 15826, + "ram_reserve_bytes": 6405983846, + "vram_reserve_mib": 1614, + "peak_combined_temporary_and_related_evidence_bytes": 2192956, + "temporary_budget_bytes": 2000000000, + "termination_reason": null, + "monitor": "Own process group RSS recorded, not capped; live RAM/VRAM and temp sampled, not OS hard limits" +} diff --git a/research/fixed_patch_jet_records_20261013/stdout.txt b/research/fixed_patch_jet_records_20261013/stdout.txt new file mode 100644 index 0000000..a765b06 --- /dev/null +++ b/research/fixed_patch_jet_records_20261013/stdout.txt @@ -0,0 +1,26 @@ +{"finite": true, "rho_min": 0.9999999403953552, "rho_max": 1.0, "speed_max": 0.0197231937199831, "sampled_max_Mach": 0.03416157361053414, "density_deviation": 5.960464477539063e-08, "discrete_leaf_mass": 2208.0000164061785, "mass_change": 0.0, "macro_sum_rho_v": {"Q_in": 0.12800518795847893, "Q_out": -2.682209014892578e-07}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0, 0.0, -5.587935447692871e-09]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0, 0.0, -5.587935447692871e-09]}], "t": 0, "coarse_steps": 0, "fine_steps": 0} +{"finite": true, "rho_min": 0.9999995231628418, "rho_max": 1.009438395500183, "speed_max": 0.01972315839908094, "sampled_max_Mach": 0.034161512432937025, "density_deviation": 0.009438395500183105, "discrete_leaf_mass": 2214.5822166297585, "mass_change": 6.582200223580003, "macro_sum_rho_v": {"Q_in": 0.12863954529166222, "Q_out": 1.0689720511436462e-05}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0033259391784668, 3.9904424178132075e-08, 0.003767254186651691]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0027864575386047, 1.95017983891273e-08, 0.0017514756851302565]}], "t": 50, "coarse_steps": 50, "fine_steps": 100} +{"finite": true, "rho_min": 0.9984776973724365, "rho_max": 1.010591745376587, "speed_max": 0.019723167973819598, "sampled_max_Mach": 0.03416152901687085, "density_deviation": 0.010591745376586914, "discrete_leaf_mass": 2215.2133280904964, "mass_change": 7.213311684317887, "macro_sum_rho_v": {"Q_in": 0.1291772685945034, "Q_out": 0.25743226893246174}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0070598721504211, 3.051337606293814e-08, 0.004463808784989469]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0040816068649292, 7.234786527643558e-08, 0.0046468505171113755]}], "t": 100, "coarse_steps": 100, "fine_steps": 200} +{"finite": true, "rho_min": 0.9973579049110413, "rho_max": 1.0038379430770874, "speed_max": 0.01972316591697569, "sampled_max_Mach": 0.0341615254543127, "density_deviation": 0.0038379430770874023, "discrete_leaf_mass": 2208.77242693305, "mass_change": 0.7724105268716812, "macro_sum_rho_v": {"Q_in": 0.12834449112415314, "Q_out": 0.2561024557799101}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9987876713275909, 3.727096866032421e-09, 0.0070787730040260885]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9982824921607971, 1.2128023445341937e-08, 0.005549212578561977]}], "t": 150, "coarse_steps": 150, "fine_steps": 300} +{"finite": true, "rho_min": 0.993359386920929, "rho_max": 1.000130534172058, "speed_max": 0.019723204896160564, "sampled_max_Mach": 0.03416159296824134, "density_deviation": 0.006640613079071045, "discrete_leaf_mass": 2202.163527972065, "mass_change": -5.836488434113562, "macro_sum_rho_v": {"Q_in": 0.12781986966729164, "Q_out": 0.2561996504664421}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9962244033813477, 2.149466252515962e-08, 0.004466802336406565]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9985108375549316, -2.1456195895938244e-08, 0.005367343550101116]}], "t": 200, "coarse_steps": 200, "fine_steps": 400} +{"finite": true, "rho_min": 0.9925539493560791, "rho_max": 1.000000238418579, "speed_max": 0.019723183409092307, "sampled_max_Mach": 0.03416155575154741, "density_deviation": 0.0074460506439208984, "discrete_leaf_mass": 2200.13292664662, "mass_change": -7.867089759558439, "macro_sum_rho_v": {"Q_in": 0.12756339088082314, "Q_out": 0.021014515310525894}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9956563413143158, -2.7131816163200725e-08, 0.00453635997863009]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9977899789810181, -3.734428379729545e-09, 0.0022119478644690342]}], "t": 250, "coarse_steps": 250, "fine_steps": 500} +{"finite": true, "rho_min": 0.9937772750854492, "rho_max": 1.0004591941833496, "speed_max": 0.019723178287875644, "sampled_max_Mach": 0.03416154688133995, "density_deviation": 0.006222724914550781, "discrete_leaf_mass": 2206.436197685078, "mass_change": -1.563818721100688, "macro_sum_rho_v": {"Q_in": 0.12769856862723827, "Q_out": 0.00024305842816829681}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.998782604932785, -7.456729879883831e-09, 0.0030153855826159743]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9999143481254578, 5.5884044452416285e-08, 0.0004412565207833957]}], "t": 300, "coarse_steps": 300, "fine_steps": 600} +{"finite": true, "rho_min": 0.9999760985374451, "rho_max": 1.0093835592269897, "speed_max": 0.01972318919134063, "sampled_max_Mach": 0.03416156576669529, "density_deviation": 0.009383559226989746, "discrete_leaf_mass": 2213.0481811035424, "mass_change": 5.048164697363973, "macro_sum_rho_v": {"Q_in": 0.1290381271392107, "Q_out": 0.0012626796960830688}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0047874450683594, 2.7806554884415716e-08, 0.004754580718380195]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0005329847335815, 2.7924793749710368e-09, 0.0007658868023880151]}], "t": 350, "coarse_steps": 350, "fine_steps": 700} +{"finite": true, "rho_min": 0.9999998211860657, "rho_max": 1.0073307752609253, "speed_max": 0.019723158741160846, "sampled_max_Mach": 0.0341615130254368, "density_deviation": 0.007330775260925293, "discrete_leaf_mass": 2216.1557046929374, "mass_change": 8.15568828675896, "macro_sum_rho_v": {"Q_in": 0.1287879254668951, "Q_out": 0.19628209806978703}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0041831731796265, -1.8548858405324645e-09, 0.005016827190465851]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.003117322921753, -1.8568567271940063e-09, 0.003461982173165289]}], "t": 400, "coarse_steps": 400, "fine_steps": 800} +{"finite": true, "rho_min": 0.9997285008430481, "rho_max": 1.006166696548462, "speed_max": 0.019723182664604537, "sampled_max_Mach": 0.034161554462056765, "density_deviation": 0.006166696548461914, "discrete_leaf_mass": 2210.291847281158, "mass_change": 2.291830874979496, "macro_sum_rho_v": {"Q_in": 0.12863796204328537, "Q_out": 0.25612184032797813}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0015701651573181, 1.581361160296152e-08, 0.007088322591362907]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.000373661518097, 5.958460591071901e-08, 0.005809673169784788]}], "t": 450, "coarse_steps": 450, "fine_steps": 900} +{"finite": true, "rho_min": 0.9933133721351624, "rho_max": 1.0001569986343384, "speed_max": 0.019723185394248333, "sampled_max_Mach": 0.03416155918993851, "density_deviation": 0.0066866278648376465, "discrete_leaf_mass": 2203.688418552745, "mass_change": -4.311597853433341, "macro_sum_rho_v": {"Q_in": 0.12767854891717434, "Q_out": 0.2553195860236883}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9973909258842468, -2.6145246976368598e-08, 0.0063018467717611965]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9999212622642517, 1.2108146838067492e-08, 0.005339084554058069]}], "t": 500, "coarse_steps": 500, "fine_steps": 1000} +{"finite": true, "rho_min": 0.9927858114242554, "rho_max": 1.000000238418579, "speed_max": 0.01972319512696364, "sampled_max_Mach": 0.034161576047495916, "density_deviation": 0.007214188575744629, "discrete_leaf_mass": 2199.806432941463, "mass_change": -8.19358346471563, "macro_sum_rho_v": {"Q_in": 0.1276045311242342, "Q_out": 0.09961476735770702}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9950574338436127, 3.556874871666341e-08, 0.005545385725667422]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.99586421251297, -2.337975807628814e-08, 0.002802137885478718]}], "t": 550, "coarse_steps": 550, "fine_steps": 1100} +{"finite": true, "rho_min": 0.994580864906311, "rho_max": 1.000121831893921, "speed_max": 0.019723166170399542, "sampled_max_Mach": 0.03416152589325568, "density_deviation": 0.005419135093688965, "discrete_leaf_mass": 2204.9180188016035, "mass_change": -3.081997604575008, "macro_sum_rho_v": {"Q_in": 0.12786079943180084, "Q_out": 0.0007411930710077286}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9983413219451904, -2.5187487447300542e-08, 0.003947660095103177]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9996882379055023, -9.306989826611729e-10, 0.0005744642606567245]}], "t": 600, "coarse_steps": 600, "fine_steps": 1200} +{"finite": true, "rho_min": 0.9999998211860657, "rho_max": 1.006541132926941, "speed_max": 0.019723149663783343, "sampled_max_Mach": 0.03416149730295777, "density_deviation": 0.006541132926940918, "discrete_leaf_mass": 2211.5022075329907, "mass_change": 3.5021911268122494, "macro_sum_rho_v": {"Q_in": 0.12868730165064335, "Q_out": 0.001046767458319664}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0024074912071228, 9.242623275073931e-10, 0.004146123464533346]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0004808902740479, -5.58809520614676e-09, 0.000624724125908406]}], "t": 650, "coarse_steps": 650, "fine_steps": 1300} +{"finite": true, "rho_min": 0.9999998211860657, "rho_max": 1.0074607133865356, "speed_max": 0.01972319407723786, "sampled_max_Mach": 0.03416157422931753, "density_deviation": 0.0074607133865356445, "discrete_leaf_mass": 2215.9999844529666, "mass_change": 7.999968046788126, "macro_sum_rho_v": {"Q_in": 0.12880354560911655, "Q_out": 0.12477604672312737}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0045958161354065, 3.7028870333261446e-09, 0.005564589341807712]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0036527514457703, 3.711889562849047e-08, 0.0030931405317066586]}], "t": 700, "coarse_steps": 700, "fine_steps": 1400} +{"finite": true, "rho_min": 0.9999997615814209, "rho_max": 1.007198691368103, "speed_max": 0.019723184393099027, "sampled_max_Mach": 0.034161557455897044, "density_deviation": 0.007198691368103027, "discrete_leaf_mass": 2211.7847068845294, "mass_change": 3.784690478350967, "macro_sum_rho_v": {"Q_in": 0.12876741401851177, "Q_out": 0.25408212281763554}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.002867341041565, -9.286597902886766e-10, 0.006729123631333772]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0006000995635986, 6.79480776621312e-08, 0.005443732552273214]}], "t": 750, "coarse_steps": 750, "fine_steps": 1500} +{"finite": true, "rho_min": 0.9945453405380249, "rho_max": 1.0000394582748413, "speed_max": 0.019723183472220768, "sampled_max_Mach": 0.03416155586088911, "density_deviation": 0.005454659461975098, "discrete_leaf_mass": 2205.237119223457, "mass_change": -2.7628971827216446, "macro_sum_rho_v": {"Q_in": 0.12783589214086533, "Q_out": 0.25539055839180946}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9980476796627045, -5.601396359480762e-09, 0.007080950505634613]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9994752705097198, -4.472928188196246e-08, 0.005606726710118295]}], "t": 800, "coarse_steps": 800, "fine_steps": 1600} +{"finite": true, "rho_min": 0.9931564927101135, "rho_max": 1.000000238418579, "speed_max": 0.019723179656447747, "sampled_max_Mach": 0.03416154925177637, "density_deviation": 0.006843507289886475, "discrete_leaf_mass": 2200.3033418026753, "mass_change": -7.696674603503197, "macro_sum_rho_v": {"Q_in": 0.1276633646339178, "Q_out": 0.15738135389983654}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.995688796043396, 1.777174654169606e-08, 0.0056219994183139]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9968701601028442, 3.7369864678042045e-09, 0.003516295929207963]}], "t": 850, "coarse_steps": 850, "fine_steps": 1700} +{"finite": true, "rho_min": 0.993564784526825, "rho_max": 1.000000238418579, "speed_max": 0.019723168988232915, "sampled_max_Mach": 0.034161530773886256, "density_deviation": 0.006435215473175049, "discrete_leaf_mass": 2203.472729786299, "mass_change": -4.527286619879305, "macro_sum_rho_v": {"Q_in": 0.1277082972228527, "Q_out": 0.007872957736253738}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9970619380474091, 5.6019655037608065e-09, 0.004682498959001465]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9991383850574493, -3.72778494670464e-09, 0.0010103030911885196]}], "t": 900, "coarse_steps": 900, "fine_steps": 1800} +{"finite": true, "rho_min": 0.9997681975364685, "rho_max": 1.0051435232162476, "speed_max": 0.019723180265717073, "sampled_max_Mach": 0.0341615503070618, "density_deviation": 0.005143523216247559, "discrete_leaf_mass": 2209.9437092989683, "mass_change": 1.9436928927898407, "macro_sum_rho_v": {"Q_in": 0.1285070050507784, "Q_out": 0.001014290377497673}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0013298392295837, 2.1397079474795436e-08, 0.003988593510698206]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0001946687698364, -5.121277207651142e-08, 0.0006442091845156772]}], "t": 950, "coarse_steps": 950, "fine_steps": 1900} +{"finite": true, "rho_min": 0.9999998211860657, "rho_max": 1.007829189300537, "speed_max": 0.019723195956038383, "sampled_max_Mach": 0.03416157748349549, "density_deviation": 0.00782918930053711, "discrete_leaf_mass": 2215.248868701514, "mass_change": 7.248852295335382, "macro_sum_rho_v": {"Q_in": 0.12884884513914585, "Q_out": 0.0783053319901228}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0045344233512878, 3.708970133368847e-08, 0.005484848626894535]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0028420090675354, 2.7876626557184095e-09, 0.002498106860624199]}], "t": 1000, "coarse_steps": 1000, "fine_steps": 2000} +{"finite": true, "rho_min": 0.9999998211860657, "rho_max": 1.0071310997009277, "speed_max": 0.019723162551660844, "sampled_max_Mach": 0.0341615196254164, "density_deviation": 0.007131099700927734, "discrete_leaf_mass": 2213.121662114281, "mass_change": 5.121645708102733, "macro_sum_rho_v": {"Q_in": 0.1287609599530697, "Q_out": 0.23961861431598663}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.0033761858940125, 1.948702402629945e-08, 0.006330294274771218]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [1.001342535018921, 2.418192186307541e-08, 0.005024741082302464]}], "t": 1050, "coarse_steps": 1050, "fine_steps": 2100} +{"finite": true, "rho_min": 0.9964147210121155, "rho_max": 1.0018093585968018, "speed_max": 0.019723162200346454, "sampled_max_Mach": 0.03416151901692203, "density_deviation": 0.0035852789878845215, "discrete_leaf_mass": 2206.7887076763436, "mass_change": -1.2113087298348546, "macro_sum_rho_v": {"Q_in": 0.12807970866560936, "Q_out": 0.2554724644869566}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9992902874946594, -1.4911744245216772e-08, 0.007389858762817912]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9998897016048431, -3.44636083569892e-08, 0.005732718796797301]}], "t": 1100, "coarse_steps": 1100, "fine_steps": 2200} +{"finite": true, "rho_min": 0.9931712746620178, "rho_max": 1.000000238418579, "speed_max": 0.019723172283986106, "sampled_max_Mach": 0.03416153648229823, "density_deviation": 0.006828725337982178, "discrete_leaf_mass": 2201.227777376771, "mass_change": -6.772239029407501, "macro_sum_rho_v": {"Q_in": 0.12766188196837902, "Q_out": 0.1938594225794077}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9959544539451599, -9.351055873348861e-09, 0.005925549967763543]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9975717067718506, 3.6411556051212644e-08, 0.00414892074651798]}], "t": 1150, "coarse_steps": 1150, "fine_steps": 2300} +{"finite": true, "rho_min": 0.9934006929397583, "rho_max": 1.000000238418579, "speed_max": 0.01972318067164439, "sampled_max_Mach": 0.03416155101014853, "density_deviation": 0.006599307060241699, "discrete_leaf_mass": 2202.30112983007, "mass_change": -5.6988865761086345, "macro_sum_rho_v": {"Q_in": 0.12769020162522793, "Q_out": 0.030665239319205284}, "centerline": [{"level": 1, "x": 24, "y": 16.25, "sampled_x": [23.75, 24.25], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9964200258255005, -5.613009959780303e-09, 0.0051035086848514625]}, {"level": 0, "x": 24, "y": 32.5, "sampled_x": [23.5, 24.5], "rule": "arithmetic mean of two neighboring native columns", "rho_ux_uy": [0.9982107579708099, -9.338345695949091e-10, 0.001630484555699851]}], "t": 1200, "coarse_steps": 1200, "fine_steps": 2400} +complete: last synchronized coarse step 1200; output=/home/frank14f/CelerisLab/research/fixed_patch_jet_records_20261013/output diff --git a/research/j1-2026-10-12/REVIEW.md b/research/j1-2026-10-12/REVIEW.md new file mode 100644 index 0000000..8f469da --- /dev/null +++ b/research/j1-2026-10-12/REVIEW.md @@ -0,0 +1,55 @@ +# J1 两平面吹吸:限定实施与验收 + +2026-10-12。以下门槛在本包第一次数值测试前写定。唯一写入者root;保留起点工作树,`baseline.json`及`baseline-status.txt`为证。仅独立CelerisLab,使用既有pycuda_3_10解释器和进程级PYTHONPATH;先查GPU0/1空闲,仅占用空闲获准设备。不提交或推送。 + +## 模型与时序 + +D2Q9/SRT/FP32/unshifted/double-buffer,无对象、体积力、LES。新on-site模式默认关闭,x周期,物理平面y=1与NY−2,H=NY−3;下壁(0,V),上壁(U,V)。上下helper只补poststream未知方向,不碰撞或存储;融合核顺序为pull到t+dt、重建到达时刻速度、同节点碰撞、存postcollision g(t+dt)。初态为rho0、线性u、常量v=V的局部平衡,边界初态满足目标;后续不以解析指数场初始化来回避收敛。 + +参考:`research/design-2026-10-09/jet-study.md`中Zou–He/Ho scheme A原文核对与矩公式;本地`ref/OpenLB/src/boundary/zouHeDynamics.hh`的missing population重建;现有paired D2Q9方向表和pull时序为地址依据。连续解v=V,u=U*expm1(Vy/nu)/expm1(VH/nu),V=0取线性极限。连续解不是精确离散LBM解;预期小Ma下有截断误差与FP32舍入,若不满足下列候选门槛须报告失败,不能静默放宽。 + +## 预先固定的有界验证 + +- 主案例NX=16、H=32、nu=.1、U=.02、rho0=1,V依次0、+.001、−.001、+.01、−.01;Re_U=6.4,最大Ma约.039。先不铺网格矩阵,也不声称证明二阶收敛。 +- 采样间隔ceil(.5*H²/(pi²*nu))=519步,最多40个间隔=20760步/案例。至少8个间隔后才允许判稳;连续4个间隔的u剖面RMS变化/U≤2e−5、v剖面RMS变化≤2e−7,且每间隔质量相对变化≤2e−6。最后4间隔质量相对跨度≤6e−6。不能把持续质量增长作为gauge freedom接受。 +- H32内部u连续解析剖面相对L2≤1e−3;v最大绝对误差≤2e−6;非零V内部三个独立截面的实测Σrho*v相对rho_bar*V*NX误差≤1e−3,V=0用绝对平均速度≤2e−6。不使用重建节点的赋值验证通量。 +- 全域质量统计仅含y=1..NY−2,不含ghost。末态相对初态质量偏移≤1e−3,另以上述增量/跨度独立约束漂移;记录全部采样质量和剖面残差,不能仅记录最终密度范围。 +- 实际population跨界收支:测试临时CUDA构建在真实SRT调用前记录边界重建后的未知incoming,以及collision前后质量差;结合旧postcollision outgoing,核对16个连续步的ΔM=入−出+collision舍入。纯周期x对消;全局每步预算残差/M≤2e−7,另报告未加collision舍入的物理残差,不将记录器加进生产kernel。 +- helper上下方向、V正/负/零及非平衡已知分布:未知方向外逐值不变,独立质量/动量矩误差≤3e−7(rho O(1));平衡保持同容差。 +- 关闭模式:与本包起点源码同参数、同初值的短默认通道结果逐值相同;同时运行受影响配置/恢复回归。不声明全部旧工况或性能已重新验证。 + +完整执行命令、原始日志、结果和本包增量将在本目录追加;任何门槛变化必须显式记录,当前未运行数值测试。 + +## 完成记录(以上为运行前冻结记录) + +本包限定实现完成,门槛未改。生产代码新增75行、删除5行;配置说明新增15行;测试/验证新增364行。`incremental.diff`相对于本包起点的脏工作树生成,不是相对于HEAD。未提交、推送、安装依赖或修改DynamisLab。新增模式没有额外生产kernel启动;未进行性能基准,因此不声称已证明性能无回退。 + +CPU针对性回归77 passed、13 subtests passed(1.30秒);checkpoint GPU回归10 passed、8 deselected(34.31秒)。五个J1案例全部通过,包括独立内部截面通量、末段质量变化与实际population预算。默认关闭模式的7步场和flags与本包起点逐值相同。只读architecture复核通过,没有发现限定范围内必须修复的项。 + +| V | 收敛步数 | u相对L2 | v最大绝对误差 | 相对初态质量偏移 | 末4间隔质量相对跨度 | 内部通量误差 | +| --- | ---: | ---: | ---: | ---: | ---: | ---: | +| 0 | 4152 | 1.66909e-5 | 8.00937e-8 | 2.98475e-7 | 1.33772e-8 | 4.84288e-8(绝对平均速度) | +| +.001 | 7785 | 7.27898e-4 | 2.53653e-7 | 5.01238e-5 | 3.51193e-7 | 2.53631e-4(相对) | +| −.001 | 7785 | 6.86307e-4 | 1.72778e-7 | 4.90631e-5 | 2.53997e-9 | 1.61564e-4(相对) | +| +.01 | 9342 | 1.73175e-4 | 1.63549e-7 | 6.19301e-5 | 2.08842e-9 | 8.44460e-6(相对) | +| −.01 | 8304 | 2.44096e-4 | 1.76794e-7 | 4.90692e-5 | 4.40262e-9 | 9.94338e-6(相对) | + +每例末态再审计16步,审计版与普通版逐值一致。独立记录实际collision舍入后,预算残差均为0;这是用双精度累加已记录FP32 populations所得的离散收支一致性,不代表连续物理误差为0。不扣除collision舍入时,最大相对物理收支残差为7.733e-9。完整内部实测通量、质量历史、剖面及逐步预算见`results.json`。 + +本包只实现全平面固定速度边界,限定D2Q9/SRT/FP32/unshifted/double_buffer、无对象/体积力/LES。尚不是有限slot Jet;未扩展曲面、多层网格、AMR,也未证明网格收敛阶。 + +## 执行与原始证据 + +所有命令工作目录均为`/home/frank14f/CelerisLab`;解释器、Python导入和CUDA源码位置已校验,见`baseline.json`与`results.json`。每次GPU运行前检查物理GPU0/1空闲;实际仅用GPU0。执行命令如下: + +```bash +env PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -m pytest tests/unit/test_planar_velocity.py tests/unit/test_build_contracts.py tests/unit/test_state_regressions.py tests/unit/test_simulation_lifecycle.py -q --tb=short -p no:cacheprovider > research/j1-2026-10-12/cpu.log 2>&1 +env CUDA_VISIBLE_DEVICES=0 PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python tests/validation/run_j1.py --output research/j1-2026-10-12/results.json --baseline-kernels /tmp/celeris-j1-before/src/CelerisLab/lbm/kernels > research/j1-2026-10-12/gpu-validation.log 2>&1 +env CUDA_VISIBLE_DEVICES=0 PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -m pytest tests/integration/test_state_gpu.py -k checkpoint -q --tb=short -p no:cacheprovider > research/j1-2026-10-12/checkpoint-gpu.log 2>&1 +``` + +第一次J1执行在V=0数值计算后因NumPy bool不能序列化JSON而退出,原始记录保留为`gpu.log`。只将输出的steady转为Python bool后,按同一门槛完整重跑;成功记录为`gpu-validation.log`。完成数值验证后将`--baseline-kernels`改为可选,便于日后只重跑五例;省略时旧模式比较明确记录为null,不视为已通过该比较。此CLI变动通过`--help`检查,数值路径未改动。 + +## 保存与清理 + +所有起点manifest文件仍存在,只有diff列出的9个已有文件发生本包修改,另新增4个实现/测试文件。四份config头文件及`tests/postproc/experiment.ipynb`均与起点SHA256一致。`git diff --check`通过,增量补丁反向适用检查通过。保留本目录原始成功/失败日志;临时审计构建自动清除。起点副本可由当前源码和增量补丁反向重建,临时重复备份在完成核验后清除。停在此步,等待主线程复核。 diff --git a/research/j1-2026-10-12/baseline-status.txt b/research/j1-2026-10-12/baseline-status.txt new file mode 100644 index 0000000..64ca05a --- /dev/null +++ b/research/j1-2026-10-12/baseline-status.txt @@ -0,0 +1,62 @@ + M pyproject.toml + M setup.py + M src/CelerisLab/__init__.py + M src/CelerisLab/body/__init__.py + M src/CelerisLab/body/ddf_patch.py + M src/CelerisLab/body/manager.py + M src/CelerisLab/body/preprocess/flag_overlay.py + M src/CelerisLab/common/__init__.py + M src/CelerisLab/common/checkpoint.py + M src/CelerisLab/config.py + M src/CelerisLab/configs/CONFIG.md + M src/CelerisLab/cuda/__init__.py + M src/CelerisLab/cuda/compiler_v2.py + M src/CelerisLab/cuda/context.py + M src/CelerisLab/lbm/__init__.py + M src/CelerisLab/lbm/curved_links.py + M src/CelerisLab/lbm/field.py + M src/CelerisLab/lbm/initializers.py + M src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh + M src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh + M src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh + M src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh + M src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh + M src/CelerisLab/lbm/kernels/config/config_grid.h + M src/CelerisLab/lbm/kernels/config/config_method.h + M src/CelerisLab/lbm/kernels/config/config_objects.h + M src/CelerisLab/lbm/kernels/config/config_physics.h + M src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh + M src/CelerisLab/lbm/kernels/operators/collision_trt.cuh + M src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh + M src/CelerisLab/lbm/kernels/step/aux_kernels.cu + M src/CelerisLab/lbm/kernels/step/esopull_sync.cu + M src/CelerisLab/lbm/kernels/step/init_flow.cu + M src/CelerisLab/lbm/kernels/step/one_step_esopull.cu + M src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh + M src/CelerisLab/lbm/stepper.py + M src/CelerisLab/simulation.py + M tests/integration/test_body_sync_e2e.py + M tests/integration/test_ddf_patch.py + M tests/integration/test_sync_bodies_skeleton.py + M tests/integration/test_unified_obs.py + M tests/postproc/experiment.ipynb + M tests/validation/run_kan99b_rotating_cylinder.py + M tests/validation/run_sah04_st_matrix.py + M tests/validation/test_sensor_accuracy.py +?? docs/design/ +?? docs/multilevel_grid_architecture_analysis.md +?? research/ +?? "tests/audit/body\345\210\240\345\207\217\345\212\237\350\203\275.md" +?? tests/integration/_cases.py +?? tests/integration/test_numerical_gpu.py +?? tests/integration/test_runtime_contracts_gpu.py +?? tests/integration/test_state_gpu.py +?? tests/unit/cpp/ +?? tests/unit/test_build_contracts.py +?? tests/unit/test_context_ownership.py +?? tests/unit/test_initializers.py +?? tests/unit/test_numerical_operators.py +?? tests/unit/test_simulation_lifecycle.py +?? tests/unit/test_state_regressions.py +?? tests/validation/multigrid/ +?? tests/validation/run_poiseuille.py diff --git a/research/j1-2026-10-12/baseline.json b/research/j1-2026-10-12/baseline.json new file mode 100644 index 0000000..ab5852b --- /dev/null +++ b/research/j1-2026-10-12/baseline.json @@ -0,0 +1,202 @@ +{ + "head": "6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0", + "python": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "package": "/home/frank14f/CelerisLab/src/CelerisLab/__init__.py", + "cuda_source": "/home/frank14f/CelerisLab/src/CelerisLab/lbm/kernels/kernel_v2.cu", + "hashes": { + "docs/design/README.md": "98242c6960866d9b75aaf363f703edf02c4210bc38da1a340e9f6add49c6a3ce", + "docs/design/integrated_architecture.md": "c26b0d301321fe4b86d83d11c7e0b8d0c0545ee2995afa563966f004e9788132", + "docs/design/multi_level_grid_architecture.md": "e56a67d9129f2e3c311342e21a3fb2ed14bd492dd881949b251d5d9ac577bdee", + "docs/design/multi_level_summary.md": "eebf23e0bec9b154e5ce2128e2806e7558a7d4824b2c700cfd16afd1158b2354", + "docs/design/multi_level_visual_reference.md": "cad4bfbd561e5650ec297334529334b662a1ed35f7373c61f34ee22ecf1f66bd", + "docs/design/spatial_coupling_refinement.md": "36c878c7afad524999d89fa842297a98a0433e0283e78b36ca734ddbf8723ed8", + "docs/multilevel_grid_architecture_analysis.md": "90309730b1759d63531cb258c30db990ab71ca1b56ae47d0bbe2f4e2ae52012c", + "research/audit-2026-10-09/REVIEW.zh-CN.md": "2841fd3aa7a6baedbe1079d90915c8b05212b133824ed6abccaa1f09656eaefe", + "research/audit-2026-10-09/architecture-cpu-results.json": "e1b809210005c8765b13fddbb5ed710d15f6fcbb4c5788a4064f3e88808433ef", + "research/audit-2026-10-09/architecture-report.md": "861079dc3f4ced9fdc41bfb22002d32e190c0d630d3ba2f138f9dc7a949b8371", + "research/audit-2026-10-09/numerical-report.md": "970330b3a593f79f09866ce6ae82bc0ddd81226230d0a6ff06ae8ae756ee80da", + "research/audit-2026-10-09/numerical_collision_results.json": "51e5c263bb8cde82cedef2ccfdbf5ef657742a80218d7896b1ff877516e59693", + "research/audit-2026-10-09/numerical_compile_results.json": "c3b0ae02072a2ec408ada7513b542ec255f6855cb743a3ed7f91bd8f31504f44", + "research/audit-2026-10-09/numerical_semantics_results.json": "b95b065b594aa2911740dab216f87936c9bf7f7fa25acfda93b5738443564035", + "research/audit-2026-10-09/root-initializers-report.md": "ca448457c444949d5d0e1e10fa7121064510b77fc4c3512580900f0299219867", + "research/audit-2026-10-09/state-report.md": "f8708807efc2e109810c5955f7c1884a932668c0b3cb2963c2df3b09f2a3d5c4", + "research/audit-2026-10-09/state_results.json": "da9170df3e11231c73f20e5e79ed68e08966673d1dd52004ea6b6a279afc0dcd", + "research/design-2026-10-09/Contracts.lean": "2442d9a778ef20e8af3fecf23be6fea6d73c6299ff744c9664b652bc5ee3f034", + "research/design-2026-10-09/PLAN.zh-CN.md": "0341dd7ee306a040340c8e5dedb07a109e931c27dbf3c994d072aa78e3b6bc67", + "research/design-2026-10-09/api-architecture-study.md": "d6fb45ec784f0e1db55fb9f34e137b9f551db0b9b39fd4f0ef247a78fc34eedf", + "research/design-2026-10-09/grid-study.md": "4435dc1275ec5e15b118becc6ac391f306195d1e5beaa58037b1aff3bb2465c7", + "research/design-2026-10-09/jet-study.md": "a362142ef04a5ad5dbb4c9db9d221b1199dccec53780c8f2da49a15201cfe529", + "research/design-2026-10-09/jet_closure_check.py": "fde45d0f8518740ef5c0bf0fe7635d6adaf9a2e789927dd4e68e991c138ddc30", + "research/design-2026-10-09/jet_closure_results.json": "12cf7d400a206f9f9ec9ea6ad251fe6bb0232e27bcbed22fbc1ead2c0fc7d249", + "research/design-2026-10-09/math-and-history.md": "64f8c82e4949d6f58b46faa09800958714859c36cad20bbeeae8b449ae7a6099", + "research/design-2026-10-09/math-checks.json": "94750381954317cde8d649db26beaed8ea945666572a05030ca2b4d97d384011", + "research/design-2026-10-09/math_checks.py": "4254983a783fe4bad8888b3d7c243c87d991c7bbf242edb0f56f25cbaefee890", + "research/repair-2026-10-10/TRON_HANDOFF.md": "f8aaa3d99cd133c2055d4adf396a0a57d14f6006aea19e87611bd1c2c1b53a88", + "research/repair-2026-10-10/baseline-hashes.json": "d6a7d5f9ec5bceb0e7927d55603d9c5e70105982cd945723454659b19ab476e6", + "research/repair-2026-10-10/baseline-status.txt": "074088d793014e3b8154c58718058c7d300fb45595f5129fa957ef1e4cec38e2", + "research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff": "292b4bafe7a62d4fbbf7c165eb99929336edfcaa16b15f34f72ab71fcd928391", + "research/repair-2026-10-10/classic-results.json": "a5d15305f516fd378b54cf9029102be58a83a55a7bad4b8e058fcfe0cc9898f4", + "research/repair-2026-10-10/classic-signals.npz": "820c9a0b0713d7455f0a5839ac2cd5ee706086d1a26461225dcdb095673421e2", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "research/repair-2026-10-10/provenance.json": "a81b7e32ecf7182c9617df1b39bbb063a05ef89290ad501bac4573cd5e8a6832", + "research/repair-2026-10-10/repair-architecture.md": "49be42ff5c994017f3175e17efda14d84f0b68f8ecd239f66ccee38415b60c5a", + "research/repair-2026-10-10/repair-numerical.md": "0272ebfa8c519aad161c520542cf53156574661609b91fd5ccad7955fdf2bd7b", + "research/repair-2026-10-10/repair-state.md": "4d4aa1ec0c11a87d2c8380912e7ed74cf5c910ae42e5cc529effde36c9020969", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + ".cursor/rules/cuda-style.mdc": "5810cf8cff793a11ba5dedafaa8a4e7d7d3debb728d837ca1903ff6dc8d6fdb9", + ".cursor/rules/project-layout.mdc": "aeed1cd9d48447bcfcfb6a77250af7c5a3d500de4c6b2591c5684696fa04c3ec", + ".cursor/rules/python-style.mdc": "ece75cb724d7dc46cb8dab7ecf8d710a90b503001da0d506ea4bf772ce395e21", + ".cursorignore": "9f072faa815a6c6d4dc791a424201404f0f623338681ae3d2fcbdf86db1bd035", + ".gitignore": "de25151f4cfdf29ca64032e509398e1829c7ded2449ccff803b2fd87d859ae6c", + "LICENSE": "e98392425e9a0007d0d69f0f7c912c2dc1b59061a6197223962aac45599c76ea", + "README.md": "982d0df8b766b1d5017ba702b75e8b3cec8d22f57af8f434be27ea251652596c", + "docs/audit/audit_round2.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "docs/audit/body_refactor_notes.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "docs/audit/config_diagnosis.md": "b601652df0cac36a8faf2b317b11853221353716a25184cd9b2dc41373a7f183", + "docs/audit/kernel_layer_audit.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "docs/performance_analysis.md": "ba01aaa4d3c02b61a8dc55fd00518ac291ebbed79b6574190d6b7234a1158fcb", + "docs/tests_overview.md": "ffc9591fd7baa4261b2c1ce9cfa7aa13a3554a8d5df712035806266a5eaade3f", + "docs/validation_specs/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "docs/validation_specs/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "docs/validation_specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "docs/validation_specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "docs/validation_specs/exp_ctrl_matrix.md": "b7250576c23292988b6ef4bcfd080f611d41edc413c3cebd0eadcc8596049470", + "docs/validation_specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "output/round3_compatibility_summary.md": "319f2e6abde4b34cc4ec90ef461d8ebb85dd5a3ac1736cfa7a3fb110f2a69df9", + "pyproject.toml": "f24ab9ad3a6a728a9382b1bce2e721612fc76635f35c6f96dfddaa853b6e5a9c", + "setup.py": "bf07df7ec19de56710d2bb5f61873e09710cd059d46837dc3aa54f3e09ff9e06", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/checkpoint.py": "aff19ad16a7f5e9c65809241d3b0174ea30f941d042a0a42ad07967e88ad3b3d", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/config.py": "aabf28f049008ad69c87e7e572d09db4fea935ae8bd08b8f6b854029c3e4f2b1", + "src/CelerisLab/configs/CONFIG.md": "7ada7d8fbee49149db5e2e4ce2e97e40ae5d015abb25b88d9f20a226a586534e", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/cuda/compiler_v2.py": "d0de8c04a65678610d631ba88e284a53ea1815bc070c2cf9722fac6dcb2e779c", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/field.py": "c096791ff0b16f3871f44bde7e26009cc33b1d37a6d88948821bbba2be5df35e", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "5bcc192e2c38371d4b24b6725f75fec7d00364557c4b4536b064edf2ec9c75c5", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "b1139addaf8c2fa8532c167b4324b38ddd5b931cc499152c7c287710746eeaa6", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "9bbf48e0c907dc5e0bf9e8fb653acd09f49ebed7208dd595c802d07f7439e289", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/simulation.py": "f701d60981d73df688e1284a85f4e42e732416253a631fb81d063490890490f6", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9" + } +} \ No newline at end of file diff --git a/research/j1-2026-10-12/incremental.diff b/research/j1-2026-10-12/incremental.diff new file mode 100644 index 0000000..dd9c4e6 --- /dev/null +++ b/research/j1-2026-10-12/incremental.diff @@ -0,0 +1,629 @@ +--- a/src/CelerisLab/common/checkpoint.py ++++ b/src/CelerisLab/common/checkpoint.py +@@ -214,6 +214,10 @@ + + # Config compatibility check + saved_cfg = json.loads(hf.attrs["config_json"]) ++ if "on_site_velocity" in (saved_cfg.get("y_wall_bc"), lbm_cfg.y_wall_bc): ++ for key in ("y_wall_bc", "velocity", "wall_normal_velocity"): ++ if saved_cfg.get(key) != getattr(lbm_cfg, key): ++ raise ValueError(f"Checkpoint on-site boundary mismatch on '{key}'") + for key in ("lattice_model", "nx", "ny", "nz", "store_precision", + "streaming", "ddf_shifting"): + saved_val = saved_cfg.get(key) +@@ -279,6 +283,9 @@ + if key in raw_params} + if not all(np.isfinite(value) for value in params.values()): + raise ValueError("Checkpoint runtime parameters must be finite") ++ if lbm_cfg.y_wall_bc == "on_site_velocity" and ( ++ bodies.count or any(params.get(k, 0.0) != 0 for k in ("fx", "fy", "fz"))): ++ raise ValueError("on_site_velocity does not support body forces or objects") + obs_accum_steps = int(hf.attrs.get("obs_accum_steps", 0)) + if obs_accum_steps < 0: + raise ValueError("Checkpoint obs_accum_steps must be nonnegative") +--- a/src/CelerisLab/config.py ++++ b/src/CelerisLab/config.py +@@ -34,7 +34,7 @@ + "regularized": 3, + } + OUTLET_MAP = {"neq_extrap": 0, "zero_gradient": 1, "blended": 2} +-Y_WALL_BC_MAP = {"bounce_back": 0, "free_slip": 1} ++Y_WALL_BC_MAP = {"bounce_back": 0, "free_slip": 1, "on_site_velocity": 2} + DTYPE_MAP = {"FP32": "float", "FP64": "double"} + + +@@ -86,6 +86,7 @@ + inlet_regularized_neq_damp: float = 0.5 + outlet_srt_neq_damp: float = 0.5 + y_wall_bc: str = "bounce_back" ++ wall_normal_velocity: float = 0.0 + omega_min: float = 0.01 + omega_max: float = 1.99 + +@@ -127,7 +128,7 @@ + for name in ("viscosity", "velocity", "rho", "les_cs", "trt_magic_param", + "outlet_blend_alpha", "inlet_trt_neq_damp", + "inlet_regularized_neq_damp", "outlet_srt_neq_damp", +- "omega_min", "omega_max"): ++ "omega_min", "omega_max", "wall_normal_velocity"): + if not math.isfinite(getattr(self, name)): + raise ValueError(f"{name} must be finite.") + if self.viscosity <= 0 or self.rho <= 0: +@@ -150,6 +151,13 @@ + ) + if self.dim == 2 and self.nz != 1: + raise ValueError("nz must be 1 for 2D") ++ if self.y_wall_bc == "on_site_velocity": ++ if (not self.is_d2q9 or self.collision != "SRT" ++ or self.streaming != "double_buffer" or self.store_precision != "FP32" ++ or self.ddf_shifting or self.les_enabled): ++ raise ValueError("on_site_velocity requires D2Q9/SRT/FP32/unshifted/double_buffer without LES") ++ if abs(self.wall_normal_velocity) >= 1: ++ raise ValueError("on_site_velocity requires abs(wall_normal_velocity) < 1") + if not (0.0 <= self.inlet_trt_neq_damp <= 1.0): + raise ValueError("method.inlet.trt_neq_damp must lie in [0, 1].") + if not (0.0 <= self.inlet_regularized_neq_damp <= 1.0): +@@ -187,7 +195,9 @@ + """Parameters that cannot change while field allocations/state are retained.""" + self.validate() + return (self.lattice_model, self.nx, self.ny, self.nz, self.data_type, +- self.store_precision, bool(self.ddf_shifting), self.streaming) ++ self.store_precision, bool(self.ddf_shifting), self.streaming, ++ (self.velocity, self.wall_normal_velocity) ++ if self.y_wall_bc == "on_site_velocity" else None) + + def to_macros(self) -> Dict[str, Any]: + """Return flat dict of macro_name → value for header generation.""" +@@ -216,6 +226,7 @@ + "OUTLET_BLEND_ALPHA": _float_literal(self.outlet_blend_alpha), + "OUTLET_BACKFLOW_CLAMP": int(self.outlet_backflow_clamp), + "Y_WALL_BC": Y_WALL_BC_MAP[self.y_wall_bc], ++ "WALL_NORMAL_VELOCITY": _float_literal(self.wall_normal_velocity), + "OMEGA_COLLISION_MIN": _float_literal(self.omega_min), + "OMEGA_COLLISION_MAX": _float_literal(self.omega_max), + "TRT_MAGIC_PARAM": _float_literal(self.trt_magic_param), +@@ -284,6 +295,7 @@ + inlet_regularized_neq_damp=m["inlet"].get("regularized_neq_damp", 0.5), + outlet_srt_neq_damp=m["outlet"].get("srt_neq_damp", 0.5), + y_wall_bc=m.get("y_wall_bc", "bounce_back"), ++ wall_normal_velocity=m.get("wall_normal_velocity", 0.0), + omega_min=m["omega_guard"]["min"], + omega_max=m["omega_guard"]["max"], + threads_per_block=c["threads_per_block"], +--- a/src/CelerisLab/configs/CONFIG.md ++++ b/src/CelerisLab/configs/CONFIG.md +@@ -101,3 +101,18 @@ + D2Q9/D3Q19 的 flag 扩展位 `0x0800` 定义为 `FRC_REGION`,用于标记 force_region 类型物体的格子。 + - ForceRegionKernel 不依赖 flag 位执行,flag 只用于后处理可视化。 + - `merge_flag_masks` 会正确合并 force_region 的 `FLUID | FRC_REGION` 标记。 ++# J1 on-site velocity planes (limited reference case) ++ ++Set `method.y_wall_bc` to `"on_site_velocity"` and ++`method.wall_normal_velocity` to V (default 0). This selects an x-periodic ++domain with physical planes through fluid rows y=1 and y=NY−2, H=NY−3. ++The bottom velocity is (0,V); the top is (`physics.velocity`,V). ++These are constant **Cartesian** velocities: positive V injects through the ++bottom and leaves through the top. The selected rows do not also receive ++halfway reflection. Initialization uses a linear tangential profile and V. ++ ++Supported only for D2Q9/SRT/FP32/unshifted/double_buffer without LES, objects ++or body forces. Boundary targets and the mode are fixed at construction; ++checkpoint restart requires matching targets. This is an entire-plane ++Couette-throughflow reference, not a finite slot or curved jet API. The default ++`bounce_back` mode and existing configurations retain their previous path. +--- a/src/CelerisLab/cuda/compiler_v2.py ++++ b/src/CelerisLab/cuda/compiler_v2.py +@@ -65,6 +65,8 @@ + macros = cfg.to_macros() + if isinstance(n_objects, bool) or not isinstance(n_objects, int) or n_objects < 0: + raise ValueError("n_objects must be a nonnegative integer") ++ if cfg.y_wall_bc == "on_site_velocity" and n_objects: ++ raise ValueError("on_site_velocity currently requires an object-free domain") + build_dir = tempfile.mkdtemp(prefix="celeris-build-", dir=build_root) + try: + shutil.copytree(_KERNEL_DIR, build_dir, dirs_exist_ok=True, +@@ -173,6 +175,7 @@ + #define OUTLET_BLEND_ALPHA {m['OUTLET_BLEND_ALPHA']} + #define OUTLET_BACKFLOW_CLAMP {m['OUTLET_BACKFLOW_CLAMP']} + #define Y_WALL_BC {m['Y_WALL_BC']} ++#define WALL_NORMAL_VELOCITY {m['WALL_NORMAL_VELOCITY']} + + #define OMEGA_COLLISION_MIN {m['OMEGA_COLLISION_MIN']} + #define OMEGA_COLLISION_MAX {m['OMEGA_COLLISION_MAX']} +--- a/src/CelerisLab/lbm/field.py ++++ b/src/CelerisLab/lbm/field.py +@@ -123,6 +123,8 @@ + if self.cfg.is_d2q9: + flag[0:self.nx] = SOLID | BC_WALL + flag[(self.ny - 1) * self.nx:self.ny * self.nx] = SOLID | BC_WALL ++ if self.cfg.y_wall_bc == "on_site_velocity": ++ return flag # x periodic; physical y planes are the adjacent fluid rows. + flag[::self.nx] = SOLID | BC_INLET + flag[self.nx - 1::self.nx] = SOLID | BC_OUTLET + flag[0] = SOLID | BC_WALL +@@ -231,6 +233,10 @@ + + Accepted keys: omega, fx, fy, fz, n_objects. + """ ++ if self.cfg.y_wall_bc == "on_site_velocity" and ( ++ any(float(kwargs.get(k, 0.0)) != 0 for k in ("fx", "fy", "fz")) ++ or int(kwargs.get("n_objects", 0)) != 0): ++ raise ValueError("on_site_velocity does not support body forces or objects") + self._runtime_params.update({ + "omega": float(kwargs.get("omega", self._runtime_params["omega"])), + "fx": float(kwargs.get("fx", self._runtime_params["fx"])), +--- /dev/null ++++ b/src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh +@@ -0,0 +1,22 @@ ++// On-site D2Q9 Zou-He velocity closure, paired lattice ordering. ++// Input is poststream f at the arrival time. Only unknown populations change; ++// the caller owns collision/store. No force, shifting or off-lattice walls. ++#ifndef CELERIS_BOUNDARY_PLANAR_VELOCITY_CUH ++#define CELERIS_BOUNDARY_PLANAR_VELOCITY_CUH ++ ++__device__ __forceinline__ void reconstruct_bottom_velocity(float* f, float u, float v) ++{ ++ const float rho = (f[0] + f[1] + f[2] + 2.0f*(f[4] + f[6] + f[7])) / (1.0f-v); ++ f[3] = f[4] + (2.0f/3.0f)*rho*v; ++ f[5] = f[6] + 0.5f*(f[2]-f[1]) + 0.5f*rho*u + (1.0f/6.0f)*rho*v; ++ f[8] = f[7] + 0.5f*(f[1]-f[2]) - 0.5f*rho*u + (1.0f/6.0f)*rho*v; ++} ++ ++__device__ __forceinline__ void reconstruct_top_velocity(float* f, float u, float v) ++{ ++ const float rho = (f[0] + f[1] + f[2] + 2.0f*(f[3] + f[5] + f[8])) / (1.0f+v); ++ f[4] = f[3] - (2.0f/3.0f)*rho*v; ++ f[6] = f[5] + 0.5f*(f[1]-f[2]) - 0.5f*rho*u - (1.0f/6.0f)*rho*v; ++ f[7] = f[8] + 0.5f*(f[2]-f[1]) + 0.5f*rho*u - (1.0f/6.0f)*rho*v; ++} ++#endif +--- a/src/CelerisLab/lbm/kernels/kernel_v2.cu ++++ b/src/CelerisLab/lbm/kernels/kernel_v2.cu +@@ -56,6 +56,9 @@ + #include "boundary/bounce_back.cuh" + #include "boundary/curved_boundary.cuh" + #include "boundary/inlet_outlet.cuh" ++#if Y_WALL_BC == 2 ++#include "boundary/planar_velocity.cuh" ++#endif + #include "boundary/ibm_kernels.cuh" + + // ============================================================================ +--- a/src/CelerisLab/lbm/kernels/step/init_flow.cu ++++ b/src/CelerisLab/lbm/kernels/step/init_flow.cu +@@ -49,10 +49,12 @@ + { + if (y == 0u || y == (unsigned int)(NY - 1)) + return (uint16_t)(FLAG_SOLID | FLAG_BC_WALL); ++#if Y_WALL_BC != 2 + if (x == 0u) + return (uint16_t)(FLAG_SOLID | FLAG_BC_INLET); + if (x == (unsigned int)(NX - 1)) + return (uint16_t)(FLAG_SOLID | FLAG_BC_OUTLET); ++#endif + return FLAG_FLUID; + } + +@@ -85,7 +87,15 @@ + if (is_solid(fl)) { + write_rest_equilibrium(fi, k); + } else { ++#if Y_WALL_BC == 2 ++ // Initial g(0)=feq: both boundary velocities are already satisfied. ++ // Start from linear Couette, not the sought exponential steady profile. ++ float f[NQ]; ++ compute_feq(RHO, U0*(float)(y-1u)/(float)(NY-3), WALL_NORMAL_VELOCITY, f); ++ stream_pull_store(k, f, fi); ++#else + write_equilibrium(fi, k, inlet_target_u((float)y)); ++#endif + } + #elif DIM == 3 + unsigned int x, y, z; unsigned long k; +@@ -138,4 +148,4 @@ + #endif + } + +-#endif // CELERIS_STEP_INIT_FLOW_CU +\ No newline at end of file ++#endif // CELERIS_STEP_INIT_FLOW_CU +--- a/src/CelerisLab/lbm/kernels/step/one_step_double.cu ++++ b/src/CelerisLab/lbm/kernels/step/one_step_double.cu +@@ -88,7 +88,12 @@ + bounce_back_swap(f); + + if (is_fluid(fl) && (y == 1u || y == (unsigned int)(NY - 2))) { +-#if Y_WALL_BC == 1 ++#if Y_WALL_BC == 2 ++ // Reconstruct f(t+dt) on the physical plane, then collide below. ++ // This replaces, rather than compounds, the halfway wall correction. ++ if (y == 1u) reconstruct_bottom_velocity(f, 0.0f, WALL_NORMAL_VELOCITY); ++ else reconstruct_top_velocity(f, U0, WALL_NORMAL_VELOCITY); ++#elif Y_WALL_BC == 1 + apply_wall_freeslip_d2q9_y_pull(y, f, fi_in, k); + #else + apply_wall_bb_d2q9_y_pull(y, f, fi_in, k); +--- a/src/CelerisLab/simulation.py ++++ b/src/CelerisLab/simulation.py +@@ -115,6 +115,8 @@ + Returns: + int body_id (formal id before initialize; -1 if staged). + """ ++ if self.lbm_cfg.y_wall_bc == "on_site_velocity": ++ raise ValueError("on_site_velocity currently requires an object-free domain") + type_lower = str(type).strip().lower() + + if type_lower == "circle": +--- /dev/null ++++ b/tests/unit/cpp/planar_velocity.cpp +@@ -0,0 +1,30 @@ ++#include ++#include ++#define __device__ ++#define __forceinline__ inline ++#include "boundary/planar_velocity.cuh" ++ ++int main() { ++ const int cx[9]={0,1,-1,0,0,1,-1,1,-1}; ++ const int cy[9]={0,0,0,1,-1,1,-1,-1,1}; ++ const float w[9]={4.f/9,1.f/9,1.f/9,1.f/9,1.f/9,1.f/36,1.f/36,1.f/36,1.f/36}; ++ for (int top : {0,1}) for (float rho : {1.f,1.04f}) ++ for (float u : {-.02f,0.f,.02f}) for (float v : {-.01f,-.001f,0.f,.001f,.01f}) ++ for (int neq : {0,1}) { ++ float f[9]; ++ printf("%d %.9g %.9g %.9g %d\n",top,rho,u,v,neq); ++ for (int i=0;i<9;++i) { ++ float cu=cx[i]*u+cy[i]*v; ++ f[i]=w[i]*rho*(1+3*cu+4.5f*cu*cu-1.5f*(u*u+v*v)); ++ f[i]+=neq*.0001f*(i-4); ++ // Unknown inputs must be completely overwritten, never consumed. ++ if (cy[i]==(top?-1:1)) f[i]=-7.f-i; ++ printf("%.9g ",f[i]); ++ } ++ puts(""); ++ if (top) reconstruct_top_velocity(f,u,v); ++ else reconstruct_bottom_velocity(f,u,v); ++ for (float value : f) printf("%.9g ",value); ++ puts(""); ++ } ++} +--- /dev/null ++++ b/tests/unit/test_planar_velocity.py +@@ -0,0 +1,95 @@ ++"""J1 actual-header moments and bounded host capability contracts.""" ++import json ++from pathlib import Path ++from types import SimpleNamespace ++ ++import h5py ++import numpy as np ++import pytest ++ ++import CelerisLab ++from CelerisLab.config import LBMConfig, load_lbm_config ++from CelerisLab.cuda import compiler_v2 as compiler ++from CelerisLab.common.checkpoint import save_checkpoint, load_checkpoint ++from .test_numerical_operators import compile_run ++from .test_state_regressions import device, make_field, manager ++ ++ ++def test_planar_helper_moments_and_known_populations(tmp_path): ++ root = Path(__file__).resolve().parents[2] ++ assert Path(CelerisLab.__file__).resolve() == root/'src/CelerisLab/__init__.py' ++ assert Path(compiler.kernel_path('kernel_v2.cu')).resolve() == root/'src/CelerisLab/lbm/kernels/kernel_v2.cu' ++ lines = compile_run(tmp_path, 'planar_velocity.cpp', {}) ++ cx = np.array([0,1,-1,0,0,1,-1,1,-1]) ++ cy = np.array([0,0,0,1,-1,1,-1,-1,1]) ++ w = np.array([4/9]+[1/9]*4+[1/36]*4) ++ for start in range(0, len(lines), 3): ++ top, rho, u, v, neq = np.fromstring(lines[start], sep=' ') ++ before, after = [np.fromstring(s, sep=' ') for s in lines[start+1:start+3]] ++ known = cy != (-1 if top else 1) ++ np.testing.assert_array_equal(after[known], before[known]) ++ density = after.sum() ++ np.testing.assert_allclose([after@cx, after@cy], density*np.array([u,v]), atol=3e-7, rtol=0) ++ if not neq: ++ cu = cx*u+cy*v ++ expected = w*rho*(1+3*cu+4.5*cu**2-1.5*(u*u+v*v)) ++ np.testing.assert_allclose(after, expected, atol=3e-7, rtol=0) ++ assert abs(density-rho) <= 3e-7 ++ ++ ++@pytest.mark.parametrize('override', [ ++ dict(collision='TRT'), dict(collision='MRT'), dict(streaming='esopull'), ++ dict(store_precision='FP16S'), dict(ddf_shifting=True), dict(les_enabled=True), ++ dict(lattice_model='D3Q19'), dict(wall_normal_velocity=1.), ++ dict(wall_normal_velocity=float('nan')), ++]) ++def test_planar_unsupported_configuration(override): ++ with pytest.raises(ValueError): ++ LBMConfig(y_wall_bc='on_site_velocity', **override).validate_runtime() ++ ++ ++def test_planar_config_roundtrip_and_fixed_targets(tmp_path): ++ path = Path(__file__).resolve().parents[2]/'src/CelerisLab/configs/config_lbm.json' ++ data = json.loads(path.read_text()) ++ data['method'].update(y_wall_bc='on_site_velocity', wall_normal_velocity=-.01, ++ collision='SRT', streaming='double_buffer', ++ store_precision='FP32', ddf_shifting=False) ++ data['method']['les']['enabled'] = False ++ path = tmp_path/'config.json' ++ path.write_text(json.dumps(data)) ++ cfg = load_lbm_config(str(path)) ++ assert float(cfg.to_macros()['WALL_NORMAL_VELOCITY'][:-1]) == -.01 ++ with pytest.raises(ValueError, match='object-free'): ++ compiler.generate_config(cfg, n_objects=1, build_root=tmp_path) ++ before = cfg.allocation_signature() ++ cfg.wall_normal_velocity = .01 ++ assert cfg.allocation_signature() != before ++ ++ ++def test_planar_force_rejected_before_state_change(device): ++ field = make_field(device, y_wall_bc='on_site_velocity') ++ before, writes = field._runtime_params.copy(), device.writes ++ with pytest.raises(ValueError, match='body forces'): ++ field.update_params(fx=.001) ++ assert field._runtime_params == before and device.writes == writes ++ ++ ++@pytest.mark.parametrize('damage', ['target', 'mode', 'force']) ++def test_planar_checkpoint_contract_before_writes(device, tmp_path, damage): ++ field = make_field(device, y_wall_bc='on_site_velocity') ++ bodies = manager(field) ++ bodies.sync_to_gpu(field) ++ path = save_checkpoint(field, SimpleNamespace(step_count=3), field.cfg, bodies, ++ str(tmp_path/'plane.h5')) ++ with h5py.File(path, 'a') as hf: ++ if damage == 'force': ++ hf.attrs['runtime_params_json'] = '{"fx":0.001}' ++ else: ++ cfg = json.loads(hf.attrs['config_json']) ++ cfg['wall_normal_velocity' if damage == 'target' else 'y_wall_bc'] = ( ++ .01 if damage == 'target' else 'bounce_back') ++ hf.attrs['config_json'] = json.dumps(cfg) ++ writes = device.writes ++ with pytest.raises(ValueError): ++ load_checkpoint(path, field, SimpleNamespace(_step_count=0), field.cfg, bodies) ++ assert device.writes == writes +--- /dev/null ++++ b/tests/validation/run_j1.py +@@ -0,0 +1,239 @@ ++"""Bounded J1 Couette-throughflow validation; gates fixed before first run. ++ ++See research/j1-2026-10-12/REVIEW.md. No production audit kernel or extra launch ++is added: a temporary test build records actual incoming populations and the ++roundoff of the real collision, then is compared with uninstrumented stepping. ++""" ++import argparse ++import hashlib ++import json ++import os ++from pathlib import Path ++import sys ++from tempfile import TemporaryDirectory ++from unittest.mock import patch ++ ++import numpy as np ++import pycuda.driver as cuda ++ ++import CelerisLab ++from CelerisLab.cuda import compiler_v2 as compiler ++from CelerisLab.simulation import Simulation ++ ++ROOT = Path(__file__).resolve().parents[2] ++CX = np.array([0,1,-1,0,0,1,-1,1,-1]) ++CY = np.array([0,0,0,1,-1,1,-1,-1,1]) ++GATES = dict(u_relative_l2=1e-3, v_max_error=2e-6, flux_relative_error=1e-3, ++ mass_offset=1e-3, mass_window_span=6e-6, mass_chunk_change=2e-6, ++ u_change=2e-5, v_change=2e-7, budget_relative_residual=2e-7) ++ ++ ++def make_sim(v, mode='on_site_velocity'): ++ config = json.loads((ROOT/'src/CelerisLab/configs/config_lbm.json').read_text()) ++ config['grid'].update(nx=16, ny=35, nz=1, lattice_model='D2Q9') ++ config['physics'].update(viscosity=.1, velocity=.02, rho=1.) ++ config['method'].update(collision='SRT', streaming='double_buffer', ++ store_precision='FP32', ddf_shifting=False, ++ y_wall_bc=mode, wall_normal_velocity=v) ++ config['method']['les']['enabled'] = False ++ with TemporaryDirectory(prefix='celeris-j1-config-') as folder: ++ lbm, body = Path(folder)/'lbm.json', Path(folder)/'body.json' ++ lbm.write_text(json.dumps(config)) ++ body.write_text('{"objects":[]}') ++ return Simulation(str(lbm), str(body), device_id=0) ++ ++ ++def populations(sim): ++ return sim.get_ddf().reshape(9, sim.field.ny, sim.field.nx).astype(np.float64) ++ ++ ++def observables(f): ++ interior = f[:, 1:-1, :] ++ rho = interior.sum(axis=0) ++ ux = np.einsum('q,qyx->yx', CX, interior)/rho ++ uy = np.einsum('q,qyx->yx', CY, interior)/rho ++ return rho, ux, uy ++ ++ ++AUDIT = r''' ++__device__ double j1_incoming[2*NX]; ++__device__ double j1_collision[NX*NY]; ++__device__ void j1_collide_audit(float* f, float rho, float ux, float uy) { ++ const unsigned x=threadIdx.x+blockIdx.x*blockDim.x, y=blockIdx.y; ++ double before=0.0; ++ for(int i=0;i= 8 and all( ++ r['u_change'] <= GATES['u_change'] and r['v_change'] <= GATES['v_change'] ++ and r['mass_change'] <= GATES['mass_chunk_change'] for r in tail) ++ steady = steady and np.ptp([r['mass'] for r in history[-5:]])/initial_mass <= GATES['mass_window_span'] ++ if steady: ++ break ++ y = np.arange(height+1) ++ exact = speed*y/height if v == 0 else speed*np.expm1(v*y/nu)/np.expm1(v*height/nu) ++ relative_l2 = float(np.linalg.norm(u[1:-1]-exact[1:-1])/np.linalg.norm(exact[1:-1])) ++ v_error = float(np.max(np.abs(uy-v))) ++ sections = [8,16,24] # Distances above physical bottom; none is a BC row. ++ flux = [float(np.sum(rho[s]*uy[s])) for s in sections] ++ target_flux = float(rho.mean()*v*nx) ++ flux_error = max(abs(q-target_flux)/abs(target_flux) for q in flux) if v else max(abs(q)/nx for q in flux) ++ mass_span = float(np.ptp([r['mass'] for r in history[-5:]])/initial_mass) ++ offset = float(abs(mass-initial_mass)/initial_mass) ++ result = dict(v=v, height=height, nx=nx, nu=nu, top_u=speed, ++ pe=v*height/nu, re=speed*height/nu, ++ ma=float(np.hypot(speed,v)*np.sqrt(3)), ++ steps=sim.stepper.step_count, max_steps=40*chunk, steady=bool(steady), ++ relative_l2=relative_l2, v_max_error=v_error, ++ mass_offset=offset, mass_window_span=mass_span, ++ rho_range=[float(rho.min()),float(rho.max())], ++ section_y=sections, measured_flux=flux, reference_flux=target_flux, ++ flux_error=flux_error, profile_u=u.tolist(), profile_v=normal.tolist(), ++ analytic_u=exact.tolist(), history=history) ++ budget = population_budget(sim) ++ result['population_budget'] = budget ++ result['passed'] = bool(steady and relative_l2 <= GATES['u_relative_l2'] ++ and v_error <= GATES['v_max_error'] ++ and flux_error <= (GATES['flux_relative_error'] if v else GATES['v_max_error']) ++ and offset <= GATES['mass_offset'] and mass_span <= GATES['mass_window_span'] ++ and budget['instrumented_matches_plain'] ++ and budget['max_relative_residual'] <= GATES['budget_relative_residual']) ++ return result ++ ++ ++def off_path_check(baseline): ++ outcomes = [] ++ for kernel_root in (baseline, Path(compiler.kernel_path(''))): ++ with patch.object(compiler, '_KERNEL_DIR', str(kernel_root)): ++ with make_sim(0., mode='bounce_back') as sim: ++ sim.initialize() ++ sim.run(7) ++ outcomes.append((sim.get_ddf().copy(), sim.get_flags().copy())) ++ return bool(all(np.array_equal(a,b) for a,b in zip(*outcomes))) ++ ++ ++def main(): ++ parser = argparse.ArgumentParser(description=__doc__) ++ parser.add_argument('--output', type=Path, required=True) ++ parser.add_argument('--baseline-kernels', type=Path, ++ help='Optional pre-change CUDA source for the off-mode comparison') ++ args = parser.parse_args() ++ assert Path.cwd() == ROOT == Path('/home/frank14f/CelerisLab') ++ assert Path(CelerisLab.__file__).resolve() == ROOT/'src/CelerisLab/__init__.py' ++ assert Path(compiler.kernel_path('kernel_v2.cu')).resolve() == ROOT/'src/CelerisLab/lbm/kernels/kernel_v2.cu' ++ assert os.environ.get('CUDA_VISIBLE_DEVICES') in ('0','1') ++ report = dict(python=sys.executable, package=CelerisLab.__file__, ++ cuda_source=compiler.kernel_path('kernel_v2.cu'), ++ physical_gpu=os.environ['CUDA_VISIBLE_DEVICES'], gates=GATES, cases=[]) ++ report['off_path_bitwise_equal'] = (off_path_check(args.baseline_kernels) ++ if args.baseline_kernels else None) ++ for v in (0., .001, -.001, .01, -.01): ++ case = run_case(v) ++ report['cases'].append(case) ++ args.output.write_text(json.dumps(report, indent=2)+'\n') ++ print(json.dumps({k:case[k] for k in ('v','steps','steady','relative_l2','v_max_error', ++ 'mass_offset','mass_window_span','flux_error','passed')}), flush=True) ++ return 0 if report['off_path_bitwise_equal'] is not False and all(c['passed'] for c in report['cases']) else 1 ++ ++ ++if __name__ == '__main__': ++ raise SystemExit(main()) diff --git a/research/j1-2026-10-12/results.json b/research/j1-2026-10-12/results.json new file mode 100644 index 0000000..56547aa --- /dev/null +++ b/research/j1-2026-10-12/results.json @@ -0,0 +1,2089 @@ +{ + "python": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "package": "/home/frank14f/CelerisLab/src/CelerisLab/__init__.py", + "cuda_source": "/home/frank14f/CelerisLab/src/CelerisLab/lbm/kernels/kernel_v2.cu", + "physical_gpu": "0", + "gates": { + "u_relative_l2": 0.001, + "v_max_error": 2e-06, + "flux_relative_error": 0.001, + "mass_offset": 0.001, + "mass_window_span": 6e-06, + "mass_chunk_change": 2e-06, + "u_change": 2e-05, + "v_change": 2e-07, + "budget_relative_residual": 2e-07 + }, + "cases": [ + { + "v": 0.0, + "height": 32, + "nx": 16, + "nu": 0.1, + "top_u": 0.02, + "pe": 0.0, + "re": 6.3999999999999995, + "ma": 0.034641016151377546, + "steps": 4152, + "max_steps": 20760, + "steady": true, + "relative_l2": 1.6690870182059772e-05, + "v_max_error": 8.009371232562902e-08, + "mass_offset": 2.984747715880211e-07, + "mass_window_span": 1.3377178681233171e-08, + "rho_range": [ + 1.0000000894069672, + 1.0000005215406418 + ], + "section_y": [ + 8, + 16, + 24 + ], + "measured_flux": [ + -5.662441253662109e-07, + -5.066394805908203e-07, + 7.748603820800781e-07 + ], + "reference_flux": 0.0, + "flux_error": 4.842877388000488e-08, + "profile_u": [ + 0.0, + 0.0006250346091007761, + 0.001249914628012539, + 0.0018749974854300228, + 0.002499905512699696, + 0.0031249533465722043, + 0.003749966286125813, + 0.004374958848362834, + 0.004999801991562365, + 0.005624694852253915, + 0.00624962332669976, + 0.006874587162290314, + 0.007499608867913192, + 0.00812470461833606, + 0.008749934916870424, + 0.009375055914265951, + 0.010000116247651934, + 0.01062511585880868, + 0.011250064736216245, + 0.01187504649277279, + 0.012499975436373637, + 0.013124933969255043, + 0.013749875363476665, + 0.014374844683415235, + 0.014999829549381128, + 0.015624818974243344, + 0.016249773178779056, + 0.016874735531232806, + 0.01749979084828462, + 0.018124759012211503, + 0.018749796028773514, + 0.01937488050087347, + 0.019999967962512265 + ], + "profile_v": [ + 0.0, + -1.862644597589055e-09, + -3.539024761786986e-08, + -1.8626444275862706e-08, + 1.8626445282001596e-09, + 2.0489091184101924e-08, + -3.3527609688555325e-08, + -8.009371232562902e-08, + -3.539024801338659e-08, + -3.725289132728103e-08, + -4.097818076532028e-08, + -5.029140376020444e-08, + -3.911553698652022e-08, + -1.3038511794545568e-08, + 1.8626445698334964e-09, + 0.0, + -3.166495886678071e-08, + -1.4901155032112417e-08, + -1.862644691264072e-08, + -3.539024695867533e-08, + -5.4016694939905076e-08, + -7.450577710345082e-08, + -8.009371023702353e-08, + 3.7252883555726343e-09, + 4.842876287492165e-08, + 1.8626444414640478e-08, + 2.793966938016922e-08, + 3.539024867258115e-08, + 5.5879340633838805e-09, + -2.048909011551289e-08, + -3.539024761786986e-08, + -4.284082510617041e-08, + 0.0 + ], + "analytic_u": [ + 0.0, + 0.000625, + 0.00125, + 0.001875, + 0.0025, + 0.003125, + 0.00375, + 0.004375, + 0.005, + 0.005625, + 0.00625, + 0.006875, + 0.0075, + 0.008125, + 0.00875, + 0.009375, + 0.01, + 0.010625, + 0.01125, + 0.011875, + 0.0125, + 0.013125, + 0.01375, + 0.014375, + 0.015, + 0.015625, + 0.01625, + 0.016875, + 0.0175, + 0.018125, + 0.01875, + 0.019375, + 0.02 + ], + "history": [ + { + "step": 0, + "mass": 528.0000046491623 + }, + { + "step": 519, + "mass": 528.0001588463783, + "u_change": 9.109258125513369e-06, + "v_change": 3.610637269721321e-08, + "mass_change": 2.920401793109723e-07 + }, + { + "step": 1038, + "mass": 528.0001622438431, + "u_change": 2.125845171513403e-07, + "v_change": 1.6922969668227844e-08, + "mass_change": 6.434592277048867e-09 + }, + { + "step": 1557, + "mass": 528.0001654326916, + "u_change": 3.547901897147794e-07, + "v_change": 9.369496757570218e-09, + "mass_change": 6.039485733721305e-09 + }, + { + "step": 2076, + "mass": 528.0001593232155, + "u_change": 2.945673004005006e-07, + "v_change": 8.885727502900059e-09, + "mass_change": 1.1570977340307174e-08 + }, + { + "step": 2595, + "mass": 528.0001617670059, + "u_change": 2.125845171513403e-07, + "v_change": 1.6922969668227844e-08, + "mass_change": 4.62839093612287e-09 + }, + { + "step": 3114, + "mass": 528.0001659095287, + "u_change": 3.547901897147794e-07, + "v_change": 9.369496757570218e-09, + "mass_change": 7.845687074647302e-09 + }, + { + "step": 3633, + "mass": 528.0001588463783, + "u_change": 2.945673004005006e-07, + "v_change": 8.885727502900059e-09, + "mass_change": 1.3377178681233171e-08 + }, + { + "step": 4152, + "mass": 528.0001622438431, + "u_change": 2.125845171513403e-07, + "v_change": 1.6922969668227844e-08, + "mass_change": 6.434592277048867e-09 + } + ], + "population_budget": { + "steps": [ + { + "step": 4153, + "mass": 528.0001622438431, + "delta_mass": -4.678964614868164e-06, + "bottom_net_in": -3.5762786865234375e-07, + "top_net_in": -2.384185791015625e-07, + "collision_roundoff": -4.082918167114258e-06, + "physical_residual": -4.082918167114258e-06, + "budget_residual": 0.0 + }, + { + "step": 4154, + "mass": 528.0001575648785, + "delta_mass": -1.430511474609375e-06, + "bottom_net_in": -3.5762786865234375e-07, + "top_net_in": 4.470348358154297e-07, + "collision_roundoff": -1.519918441772461e-06, + "physical_residual": -1.519918441772461e-06, + "budget_residual": 0.0 + }, + { + "step": 4155, + "mass": 528.000156134367, + "delta_mass": 2.7120113372802734e-06, + "bottom_net_in": -3.5762786865234375e-07, + "top_net_in": 1.1026859283447266e-06, + "collision_roundoff": 1.9669532775878906e-06, + "physical_residual": 1.9669532775878906e-06, + "budget_residual": 0.0 + }, + { + "step": 4156, + "mass": 528.0001588463783, + "delta_mass": 4.351139068603516e-06, + "bottom_net_in": -3.5762786865234375e-07, + "top_net_in": 1.1026859283447266e-06, + "collision_roundoff": 3.606081008911133e-06, + "physical_residual": 3.606081008911133e-06, + "budget_residual": 0.0 + }, + { + "step": 4157, + "mass": 528.0001631975174, + "delta_mass": 6.854534149169922e-07, + "bottom_net_in": -3.5762786865234375e-07, + "top_net_in": 6.854534149169922e-07, + "collision_roundoff": 3.5762786865234375e-07, + "physical_residual": 3.5762786865234375e-07, + "budget_residual": 0.0 + }, + { + "step": 4158, + "mass": 528.0001638829708, + "delta_mass": 2.0265579223632812e-06, + "bottom_net_in": -3.5762786865234375e-07, + "top_net_in": 5.066394805908203e-07, + "collision_roundoff": 1.8775463104248047e-06, + "physical_residual": 1.8775463104248047e-06, + "budget_residual": 0.0 + }, + { + "step": 4159, + "mass": 528.0001659095287, + "delta_mass": -9.238719940185547e-07, + "bottom_net_in": -3.5762786865234375e-07, + "top_net_in": 2.980232238769531e-07, + "collision_roundoff": -8.642673492431641e-07, + "physical_residual": -8.642673492431641e-07, + "budget_residual": 0.0 + }, + { + "step": 4160, + "mass": 528.0001649856567, + "delta_mass": -4.1425228118896484e-06, + "bottom_net_in": -3.5762786865234375e-07, + "top_net_in": 2.980232238769531e-07, + "collision_roundoff": -4.082918167114258e-06, + "physical_residual": -4.082918167114258e-06, + "budget_residual": 0.0 + }, + { + "step": 4161, + "mass": 528.0001608431339, + "delta_mass": 9.238719940185547e-07, + "bottom_net_in": -3.5762786865234375e-07, + "top_net_in": -1.7881393432617188e-07, + "collision_roundoff": 1.4603137969970703e-06, + "physical_residual": 1.4603137969970703e-06, + "budget_residual": 0.0 + }, + { + "step": 4162, + "mass": 528.0001617670059, + "delta_mass": -3.725290298461914e-06, + "bottom_net_in": -3.5762786865234375e-07, + "top_net_in": -2.384185791015625e-07, + "collision_roundoff": -3.129243850708008e-06, + "physical_residual": -3.129243850708008e-06, + "budget_residual": 0.0 + }, + { + "step": 4163, + "mass": 528.0001580417156, + "delta_mass": -2.384185791015625e-06, + "bottom_net_in": -3.5762786865234375e-07, + "top_net_in": 4.470348358154297e-07, + "collision_roundoff": -2.473592758178711e-06, + "physical_residual": -2.473592758178711e-06, + "budget_residual": 0.0 + }, + { + "step": 4164, + "mass": 528.0001556575298, + "delta_mass": 3.6656856536865234e-06, + "bottom_net_in": -3.5762786865234375e-07, + "top_net_in": 1.1026859283447266e-06, + "collision_roundoff": 2.9206275939941406e-06, + "physical_residual": 2.9206275939941406e-06, + "budget_residual": 0.0 + }, + { + "step": 4165, + "mass": 528.0001593232155, + "delta_mass": 3.3974647521972656e-06, + "bottom_net_in": -3.5762786865234375e-07, + "top_net_in": 1.1026859283447266e-06, + "collision_roundoff": 2.652406692504883e-06, + "physical_residual": 2.652406692504883e-06, + "budget_residual": 0.0 + }, + { + "step": 4166, + "mass": 528.0001627206802, + "delta_mass": 1.6391277313232422e-06, + "bottom_net_in": -3.5762786865234375e-07, + "top_net_in": 6.854534149169922e-07, + "collision_roundoff": 1.3113021850585938e-06, + "physical_residual": 1.3113021850585938e-06, + "budget_residual": 0.0 + }, + { + "step": 4167, + "mass": 528.000164359808, + "delta_mass": 1.0728836059570312e-06, + "bottom_net_in": -3.5762786865234375e-07, + "top_net_in": 5.066394805908203e-07, + "collision_roundoff": 9.238719940185547e-07, + "physical_residual": 9.238719940185547e-07, + "budget_residual": 0.0 + }, + { + "step": 4168, + "mass": 528.0001654326916, + "delta_mass": 2.9802322387695312e-08, + "bottom_net_in": -3.5762786865234375e-07, + "top_net_in": 2.980232238769531e-07, + "collision_roundoff": 8.940696716308594e-08, + "physical_residual": 8.940696716308594e-08, + "budget_residual": 0.0 + } + ], + "instrumented_matches_plain": true, + "audit_source_sha256": "260a5a2b2ee7db4554dfb90cbc66c946786445a2b4ad6e747cb9be00525c5ec6", + "max_relative_residual": 0.0, + "max_physical_relative_residual": 7.732797182794556e-09 + }, + "passed": true + }, + { + "v": 0.001, + "height": 32, + "nx": 16, + "nu": 0.1, + "top_u": 0.02, + "pe": 0.32, + "re": 6.3999999999999995, + "ma": 0.03468429039204925, + "steps": 7785, + "max_steps": 20760, + "steady": true, + "relative_l2": 0.0007278982098159164, + "v_max_error": 2.536534820013394e-07, + "mass_offset": 5.0123837036145766e-05, + "mass_window_span": 3.51193273702043e-07, + "rho_range": [ + 1.000049915164709, + 1.0000503193587065 + ], + "section_y": [ + 8, + 16, + 24 + ], + "measured_flux": [ + 0.016001790761947632, + 0.01600348949432373, + 0.016004860401153564 + ], + "reference_flux": 0.016000802100607843, + "flux_error": 0.00025363106925541654, + "profile_u": [ + 0.0, + 0.0005340419552252591, + 0.0010732806411684476, + 0.001617974554871208, + 0.0021682392131257187, + 0.002724099350457596, + 0.003285405362611013, + 0.003852265616494395, + 0.0044247096735770906, + 0.005002707805656517, + 0.005586351628644541, + 0.0061757861321995134, + 0.0067711838558665695, + 0.007372412265939397, + 0.007979661526215114, + 0.008592899531197013, + 0.009212426912630385, + 0.00983808069607108, + 0.010469839610857495, + 0.01110783049516636, + 0.011752107056774593, + 0.012402667118273389, + 0.013059692277075393, + 0.013723324972232472, + 0.014393550874096127, + 0.015070342659545053, + 0.015753914680847438, + 0.0164442620708338, + 0.01714143404691818, + 0.017845573617166547, + 0.018556649470887514, + 0.019274716176671345, + 0.019999956155539414 + ], + "profile_v": [ + 0.0009999779660126397, + 0.0010000411772896288, + 0.0010000562751435894, + 0.00100003201167817, + 0.001000013293031118, + 0.0010000506260205166, + 0.0010000468860158005, + 0.0010000506297458088, + 0.0010000617901553242, + 0.0010001250945624502, + 0.0010001307176107763, + 0.001000246225630851, + 0.0010001641988346827, + 0.001000249935830433, + 0.0010001644447319396, + 0.0010001214067145295, + 0.0010001679500182296, + 0.0010002201312751858, + 0.001000197776927436, + 0.0010001791365061637, + 0.001000199574276931, + 0.0010002033440906564, + 0.0010002350614976264, + 0.0010002443649419976, + 0.0010002536534820014, + 0.0010002201312751858, + 0.0010002181886161567, + 0.0010002107421353387, + 0.0010001586055909761, + 0.0010001157687643835, + 0.0010000915649057028, + 0.0010000469083674703, + 0.001000001998517681 + ], + "analytic_u": [ + 0.0, + 0.0005329847353914288, + 0.0010713260564268524, + 0.0016150777976869939, + 0.0021642943347991066, + 0.0027190305898745844, + 0.003279342037001217, + 0.003845284707790644, + 0.004416915196981565, + 0.00499429066809926, + 0.005577468859171987, + 0.006166508088504837, + 0.006761467260511616, + 0.007362405871605316, + 0.007969384016147838, + 0.008582462392459451, + 0.009201702308888686, + 0.009827165689943223, + 0.010458915082482385, + 0.011097013661971885, + 0.011741525238801426, + 0.012392514264665784, + 0.01305004583901004, + 0.013714185715539572, + 0.014385000308795486, + 0.01506255670079612, + 0.015746922647745305, + 0.01643816658680804, + 0.017136357642954278, + 0.01784156563587146, + 0.018553861086946545, + 0.019273315226318234, + 0.02 + ], + "history": [ + { + "step": 0, + "mass": 528.0000039339066 + }, + { + "step": 519, + "mass": 528.0026085972786, + "u_change": 0.011372068471195805, + "v_change": 5.2502029679140716e-08, + "mass_change": 4.933074531502918e-06 + }, + { + "step": 1038, + "mass": 528.0052772164345, + "u_change": 0.006855278936094634, + "v_change": 1.670241606896004e-07, + "mass_change": 5.054202909092854e-06 + }, + { + "step": 1557, + "mass": 528.0079841315746, + "u_change": 0.004135977464364556, + "v_change": 2.2008101914090797e-07, + "mass_change": 5.126733181787667e-06 + }, + { + "step": 2076, + "mass": 528.0100733041763, + "u_change": 0.0025018587598375453, + "v_change": 7.64899935210715e-08, + "mass_change": 3.956766261617955e-06 + }, + { + "step": 2595, + "mass": 528.0124583542347, + "u_change": 0.0015121070229392923, + "v_change": 1.4691798373014657e-07, + "mass_change": 4.5171402283993576e-06 + }, + { + "step": 3114, + "mass": 528.0148413777351, + "u_change": 0.0009023986970198846, + "v_change": 1.1827869827640899e-07, + "mass_change": 4.51330205054469e-06 + }, + { + "step": 3633, + "mass": 528.018407791853, + "u_change": 0.0005154827486616705, + "v_change": 1.445999815879917e-07, + "mass_change": 6.7545721425023766e-06 + }, + { + "step": 4152, + "mass": 528.0209882259369, + "u_change": 0.0002906189566509194, + "v_change": 1.1399753727595623e-07, + "mass_change": 4.887185728622853e-06 + }, + { + "step": 4671, + "mass": 528.0238378942013, + "u_change": 0.00015718983850267267, + "v_change": 1.105147433038598e-07, + "mass_change": 5.397098945373779e-06 + }, + { + "step": 5190, + "mass": 528.0253579318523, + "u_change": 3.961056252760133e-05, + "v_change": 1.5845685228667192e-07, + "mass_change": 2.878859166168274e-06 + }, + { + "step": 5709, + "mass": 528.0262841284275, + "u_change": 8.407113544673632e-05, + "v_change": 1.6952898970005028e-07, + "mass_change": 1.7541601671668423e-06 + }, + { + "step": 6228, + "mass": 528.0264695584774, + "u_change": 8.857215219888074e-06, + "v_change": 1.7757905346102906e-07, + "mass_change": 3.51193273702043e-07 + }, + { + "step": 6747, + "mass": 528.0264693200588, + "u_change": 1.786154488624288e-07, + "v_change": 3.4635890026519415e-08, + "mass_change": 4.5155033584319255e-10 + }, + { + "step": 7266, + "mass": 528.0264695584774, + "u_change": 1.786154488624288e-07, + "v_change": 3.4635890026519415e-08, + "mass_change": 4.5155033584319255e-10 + }, + { + "step": 7785, + "mass": 528.0264693200588, + "u_change": 1.786154488624288e-07, + "v_change": 3.4635890026519415e-08, + "mass_change": 4.5155033584319255e-10 + } + ], + "population_budget": { + "steps": [ + { + "step": 7786, + "mass": 528.0264693200588, + "delta_mass": 3.2782554626464844e-07, + "bottom_net_in": 0.01600050926208496, + "top_net_in": -0.01600092649459839, + "collision_roundoff": 7.450580596923828e-07, + "physical_residual": 7.450580596923828e-07, + "budget_residual": 0.0 + }, + { + "step": 7787, + "mass": 528.0264696478844, + "delta_mass": 1.7881393432617188e-07, + "bottom_net_in": 0.01600050926208496, + "top_net_in": -0.01600092649459839, + "collision_roundoff": 5.960464477539062e-07, + "physical_residual": 5.960464477539062e-07, + "budget_residual": 0.0 + }, + { + "step": 7788, + "mass": 528.0264698266983, + "delta_mass": -2.682209014892578e-07, + "bottom_net_in": 0.01600050926208496, + "top_net_in": -0.01600092649459839, + "collision_roundoff": 1.4901161193847656e-07, + "physical_residual": 1.4901161193847656e-07, + "budget_residual": 0.0 + }, + { + "step": 7789, + "mass": 528.0264695584774, + "delta_mass": 1.3709068298339844e-06, + "bottom_net_in": 0.01600050926208496, + "top_net_in": -0.01600092649459839, + "collision_roundoff": 1.7881393432617188e-06, + "physical_residual": 1.7881393432617188e-06, + "budget_residual": 0.0 + }, + { + "step": 7790, + "mass": 528.0264709293842, + "delta_mass": -9.5367431640625e-07, + "bottom_net_in": 0.01600050926208496, + "top_net_in": -0.01600092649459839, + "collision_roundoff": -5.364418029785156e-07, + "physical_residual": -5.364418029785156e-07, + "budget_residual": 0.0 + }, + { + "step": 7791, + "mass": 528.0264699757099, + "delta_mass": -6.556510925292969e-07, + "bottom_net_in": 0.01600050926208496, + "top_net_in": -0.01600092649459839, + "collision_roundoff": -2.384185791015625e-07, + "physical_residual": -2.384185791015625e-07, + "budget_residual": 0.0 + }, + { + "step": 7792, + "mass": 528.0264693200588, + "delta_mass": 3.2782554626464844e-07, + "bottom_net_in": 0.01600050926208496, + "top_net_in": -0.01600092649459839, + "collision_roundoff": 7.450580596923828e-07, + "physical_residual": 7.450580596923828e-07, + "budget_residual": 0.0 + }, + { + "step": 7793, + "mass": 528.0264696478844, + "delta_mass": 1.7881393432617188e-07, + "bottom_net_in": 0.01600050926208496, + "top_net_in": -0.01600092649459839, + "collision_roundoff": 5.960464477539062e-07, + "physical_residual": 5.960464477539062e-07, + "budget_residual": 0.0 + }, + { + "step": 7794, + "mass": 528.0264698266983, + "delta_mass": -2.682209014892578e-07, + "bottom_net_in": 0.01600050926208496, + "top_net_in": -0.01600092649459839, + "collision_roundoff": 1.4901161193847656e-07, + "physical_residual": 1.4901161193847656e-07, + "budget_residual": 0.0 + }, + { + "step": 7795, + "mass": 528.0264695584774, + "delta_mass": 1.3709068298339844e-06, + "bottom_net_in": 0.01600050926208496, + "top_net_in": -0.01600092649459839, + "collision_roundoff": 1.7881393432617188e-06, + "physical_residual": 1.7881393432617188e-06, + "budget_residual": 0.0 + }, + { + "step": 7796, + "mass": 528.0264709293842, + "delta_mass": -9.5367431640625e-07, + "bottom_net_in": 0.01600050926208496, + "top_net_in": -0.01600092649459839, + "collision_roundoff": -5.364418029785156e-07, + "physical_residual": -5.364418029785156e-07, + "budget_residual": 0.0 + }, + { + "step": 7797, + "mass": 528.0264699757099, + "delta_mass": -6.556510925292969e-07, + "bottom_net_in": 0.01600050926208496, + "top_net_in": -0.01600092649459839, + "collision_roundoff": -2.384185791015625e-07, + "physical_residual": -2.384185791015625e-07, + "budget_residual": 0.0 + }, + { + "step": 7798, + "mass": 528.0264693200588, + "delta_mass": 3.2782554626464844e-07, + "bottom_net_in": 0.01600050926208496, + "top_net_in": -0.01600092649459839, + "collision_roundoff": 7.450580596923828e-07, + "physical_residual": 7.450580596923828e-07, + "budget_residual": 0.0 + }, + { + "step": 7799, + "mass": 528.0264696478844, + "delta_mass": 1.7881393432617188e-07, + "bottom_net_in": 0.01600050926208496, + "top_net_in": -0.01600092649459839, + "collision_roundoff": 5.960464477539062e-07, + "physical_residual": 5.960464477539062e-07, + "budget_residual": 0.0 + }, + { + "step": 7800, + "mass": 528.0264698266983, + "delta_mass": -2.682209014892578e-07, + "bottom_net_in": 0.01600050926208496, + "top_net_in": -0.01600092649459839, + "collision_roundoff": 1.4901161193847656e-07, + "physical_residual": 1.4901161193847656e-07, + "budget_residual": 0.0 + }, + { + "step": 7801, + "mass": 528.0264695584774, + "delta_mass": 1.3709068298339844e-06, + "bottom_net_in": 0.01600050926208496, + "top_net_in": -0.01600092649459839, + "collision_roundoff": 1.7881393432617188e-06, + "physical_residual": 1.7881393432617188e-06, + "budget_residual": 0.0 + } + ], + "instrumented_matches_plain": true, + "audit_source_sha256": "260a5a2b2ee7db4554dfb90cbc66c946786445a2b4ad6e747cb9be00525c5ec6", + "max_relative_residual": 0.0, + "max_physical_relative_residual": 3.3864577750371425e-09 + }, + "passed": true + }, + { + "v": -0.001, + "height": 32, + "nx": 16, + "nu": 0.1, + "top_u": 0.02, + "pe": -0.32, + "re": 6.3999999999999995, + "ma": 0.03468429039204925, + "steps": 7785, + "max_steps": 20760, + "steady": true, + "relative_l2": 0.0006863065373162491, + "v_max_error": 1.727779429282813e-07, + "mass_offset": 4.906308885345813e-05, + "mass_window_span": 2.539970639117958e-09, + "rho_range": [ + 1.000048965215683, + 1.0000493079423904 + ], + "section_y": [ + 8, + 16, + 24 + ], + "measured_flux": [ + -0.016002744436264038, + -0.016002029180526733, + -0.01600337028503418 + ], + "reference_flux": -0.016000785128636792, + "flux_error": 0.00016156434678700889, + "profile_u": [ + 0.0, + 0.0007255317015162998, + 0.001443892625237889, + 0.0021551348737010494, + 0.002859405652484646, + 0.0035564701953175095, + 0.004246814269067818, + 0.004930466805383219, + 0.0056072046539448655, + 0.0062772119792882395, + 0.00694058077093401, + 0.0075975186232508105, + 0.008248006423962824, + 0.008892112820415795, + 0.00952998149469061, + 0.010161639881899179, + 0.010786963768911806, + 0.011406179804998052, + 0.012019474436924357, + 0.012626696083942086, + 0.013228093728379185, + 0.013823459003396146, + 0.014413036315809806, + 0.014996788510074896, + 0.015574859707059205, + 0.01614722841610825, + 0.016713926854478728, + 0.017275073934628404, + 0.01783084649296259, + 0.018381159338545332, + 0.01892604182781637, + 0.019465686755797337, + 0.019999980107925086 + ], + "profile_v": [ + -0.0010000085975460816, + -0.000999982708051844, + -0.0010000199963768116, + -0.0010000423619225948, + -0.0010000517063564187, + -0.0010000703467960333, + -0.00100011496985197, + -0.0010001727779429283, + -0.0010001223828111198, + -0.0010001168305428946, + -0.00100002926258024, + -0.0010000218496175662, + -0.000999997664357583, + -0.0010000404937809525, + -0.001000066558357305, + -0.0010000573666616253, + -0.0010000777932860012, + -0.0010001318688195803, + -0.0010000889015511084, + -0.0010001206599658708, + -0.0010001113080784533, + -0.0010000926788148647, + -0.0010001113602357678, + -0.0010001653649848688, + -0.0010001614983001256, + -0.0010001186837827129, + -0.0010000646529620765, + -0.0010000460646784294, + -0.0010000255523737696, + -0.0010000219762740018, + -0.0010000423544720641, + -0.0010000125424367498, + -0.0010000014267162345 + ], + "analytic_u": [ + 0.0, + 0.0007266847736817672, + 0.0014461389130534527, + 0.0021584343641285406, + 0.0028636423570457203, + 0.003561833413191958, + 0.004253077352254698, + 0.004937443299203882, + 0.0056149996912045145, + 0.006285814284460428, + 0.006949954160989958, + 0.007607485735334214, + 0.008258474761198573, + 0.008902986338028118, + 0.009541084917517616, + 0.01017283431005678, + 0.010798297691111314, + 0.01141753760754055, + 0.012030615983852164, + 0.012637594128394682, + 0.013238532739488384, + 0.013833491911495162, + 0.014422531140828015, + 0.015005709331900742, + 0.015583084803018437, + 0.016154715292209357, + 0.01672065796299878, + 0.017280969410125413, + 0.01783570566520089, + 0.018384922202313008, + 0.018928673943573147, + 0.019467015264608572, + 0.02 + ], + "history": [ + { + "step": 0, + "mass": 528.0000039339066 + }, + { + "step": 519, + "mass": 528.0027928650379, + "u_change": 0.011362942390685, + "v_change": 9.024836204279898e-08, + "mass_change": 5.282066497317725e-06 + }, + { + "step": 1038, + "mass": 528.0047027170658, + "u_change": 0.00685702329264858, + "v_change": 7.175747830377708e-08, + "mass_change": 3.617143965271894e-06 + }, + { + "step": 1557, + "mass": 528.0065134167671, + "u_change": 0.004142038435605972, + "v_change": 1.6266996227275616e-07, + "mass_change": 3.4293554693531063e-06 + }, + { + "step": 2076, + "mass": 528.0085217952728, + "u_change": 0.0025016536398061897, + "v_change": 1.5871268084846557e-07, + "mass_change": 3.8037471415590933e-06 + }, + { + "step": 2595, + "mass": 528.011074334383, + "u_change": 0.0015123418660972154, + "v_change": 1.1225503498951403e-07, + "mass_change": 4.8343543393292e-06 + }, + { + "step": 3114, + "mass": 528.0144983232021, + "u_change": 0.0009101231252580335, + "v_change": 1.6161799913999767e-07, + "mass_change": 6.484827260628049e-06 + }, + { + "step": 3633, + "mass": 528.0173847675323, + "u_change": 0.000520302414765398, + "v_change": 1.5351020459775483e-07, + "mass_change": 5.466750584677591e-06 + }, + { + "step": 4152, + "mass": 528.0205543339252, + "u_change": 0.0002703380548552341, + "v_change": 1.3642394821284993e-07, + "mass_change": 6.002966608491382e-06 + }, + { + "step": 4671, + "mass": 528.0229699611664, + "u_change": 0.00014870793458946014, + "v_change": 1.74688496214714e-07, + "mass_change": 4.575051558971246e-06 + }, + { + "step": 5190, + "mass": 528.0243915617466, + "u_change": 9.916915577860768e-05, + "v_change": 3.082319753877443e-07, + "mass_change": 2.692425321257016e-06 + }, + { + "step": 5709, + "mass": 528.0259090960026, + "u_change": 3.265051946412092e-05, + "v_change": 1.1316690978151663e-07, + "mass_change": 2.874117887641921e-06 + }, + { + "step": 6228, + "mass": 528.0259095430374, + "u_change": 1.5604326885077163e-07, + "v_change": 1.8157248600518227e-08, + "mass_change": 8.466568797059861e-10 + }, + { + "step": 6747, + "mass": 528.0259091258049, + "u_change": 2.3060122430442137e-07, + "v_change": 1.7573548654795336e-08, + "mass_change": 7.90213087725587e-10 + }, + { + "step": 7266, + "mass": 528.0259104371071, + "u_change": 1.727587540342075e-07, + "v_change": 1.7036710132790284e-08, + "mass_change": 2.483526847137559e-09 + }, + { + "step": 7785, + "mass": 528.0259092450142, + "u_change": 1.9251540343465989e-07, + "v_change": 1.7556518813981664e-08, + "mass_change": 2.2577516792159627e-09 + } + ], + "population_budget": { + "steps": [ + { + "step": 7786, + "mass": 528.0259092450142, + "delta_mass": 1.1920928955078125e-06, + "bottom_net_in": -0.016001492738723755, + "top_net_in": 0.01600104570388794, + "collision_roundoff": 1.6391277313232422e-06, + "physical_residual": 1.6391277313232422e-06, + "budget_residual": 0.0 + }, + { + "step": 7787, + "mass": 528.0259104371071, + "delta_mass": -1.3113021850585938e-06, + "bottom_net_in": -0.016001492738723755, + "top_net_in": 0.01600104570388794, + "collision_roundoff": -8.642673492431641e-07, + "physical_residual": -8.642673492431641e-07, + "budget_residual": 0.0 + }, + { + "step": 7788, + "mass": 528.0259091258049, + "delta_mass": 4.172325134277344e-07, + "bottom_net_in": -0.016001492738723755, + "top_net_in": 0.01600104570388794, + "collision_roundoff": 8.642673492431641e-07, + "physical_residual": 8.642673492431641e-07, + "budget_residual": 0.0 + }, + { + "step": 7789, + "mass": 528.0259095430374, + "delta_mass": -4.470348358154297e-07, + "bottom_net_in": -0.016001492738723755, + "top_net_in": 0.01600104570388794, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0 + }, + { + "step": 7790, + "mass": 528.0259090960026, + "delta_mass": 1.430511474609375e-06, + "bottom_net_in": -0.016001492738723755, + "top_net_in": 0.01600104570388794, + "collision_roundoff": 1.8775463104248047e-06, + "physical_residual": 1.8775463104248047e-06, + "budget_residual": 0.0 + }, + { + "step": 7791, + "mass": 528.025910526514, + "delta_mass": -1.0728836059570312e-06, + "bottom_net_in": -0.016001492738723755, + "top_net_in": 0.01600104570388794, + "collision_roundoff": -6.258487701416016e-07, + "physical_residual": -6.258487701416016e-07, + "budget_residual": 0.0 + }, + { + "step": 7792, + "mass": 528.0259094536304, + "delta_mass": 1.7881393432617188e-07, + "bottom_net_in": -0.016001492738723755, + "top_net_in": 0.01600104570388794, + "collision_roundoff": 6.258487701416016e-07, + "physical_residual": 6.258487701416016e-07, + "budget_residual": 0.0 + }, + { + "step": 7793, + "mass": 528.0259096324444, + "delta_mass": -3.8743019104003906e-07, + "bottom_net_in": -0.016001492738723755, + "top_net_in": 0.01600104570388794, + "collision_roundoff": 5.960464477539063e-08, + "physical_residual": 5.960464477539063e-08, + "budget_residual": 0.0 + }, + { + "step": 7794, + "mass": 528.0259092450142, + "delta_mass": 1.1920928955078125e-06, + "bottom_net_in": -0.016001492738723755, + "top_net_in": 0.01600104570388794, + "collision_roundoff": 1.6391277313232422e-06, + "physical_residual": 1.6391277313232422e-06, + "budget_residual": 0.0 + }, + { + "step": 7795, + "mass": 528.0259104371071, + "delta_mass": -1.3113021850585938e-06, + "bottom_net_in": -0.016001492738723755, + "top_net_in": 0.01600104570388794, + "collision_roundoff": -8.642673492431641e-07, + "physical_residual": -8.642673492431641e-07, + "budget_residual": 0.0 + }, + { + "step": 7796, + "mass": 528.0259091258049, + "delta_mass": 4.172325134277344e-07, + "bottom_net_in": -0.016001492738723755, + "top_net_in": 0.01600104570388794, + "collision_roundoff": 8.642673492431641e-07, + "physical_residual": 8.642673492431641e-07, + "budget_residual": 0.0 + }, + { + "step": 7797, + "mass": 528.0259095430374, + "delta_mass": -4.470348358154297e-07, + "bottom_net_in": -0.016001492738723755, + "top_net_in": 0.01600104570388794, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0 + }, + { + "step": 7798, + "mass": 528.0259090960026, + "delta_mass": 1.430511474609375e-06, + "bottom_net_in": -0.016001492738723755, + "top_net_in": 0.01600104570388794, + "collision_roundoff": 1.8775463104248047e-06, + "physical_residual": 1.8775463104248047e-06, + "budget_residual": 0.0 + }, + { + "step": 7799, + "mass": 528.025910526514, + "delta_mass": -1.0728836059570312e-06, + "bottom_net_in": -0.016001492738723755, + "top_net_in": 0.01600104570388794, + "collision_roundoff": -6.258487701416016e-07, + "physical_residual": -6.258487701416016e-07, + "budget_residual": 0.0 + }, + { + "step": 7800, + "mass": 528.0259094536304, + "delta_mass": 1.7881393432617188e-07, + "bottom_net_in": -0.016001492738723755, + "top_net_in": 0.01600104570388794, + "collision_roundoff": 6.258487701416016e-07, + "physical_residual": 6.258487701416016e-07, + "budget_residual": 0.0 + }, + { + "step": 7801, + "mass": 528.0259096324444, + "delta_mass": -3.8743019104003906e-07, + "bottom_net_in": -0.016001492738723755, + "top_net_in": 0.01600104570388794, + "collision_roundoff": 5.960464477539063e-08, + "physical_residual": 5.960464477539063e-08, + "budget_residual": 0.0 + } + ], + "instrumented_matches_plain": true, + "audit_source_sha256": "260a5a2b2ee7db4554dfb90cbc66c946786445a2b4ad6e747cb9be00525c5ec6", + "max_relative_residual": 0.0, + "max_physical_relative_residual": 3.555784438000826e-09 + }, + "passed": true + }, + { + "v": 0.01, + "height": 32, + "nx": 16, + "nu": 0.1, + "top_u": 0.02, + "pe": 3.1999999999999997, + "re": 6.3999999999999995, + "ma": 0.03872983346207417, + "steps": 9342, + "max_steps": 20760, + "steady": true, + "relative_l2": 0.000173175458673579, + "v_max_error": 1.6354875459652363e-07, + "mass_offset": 6.193012837912416e-05, + "mass_window_span": 2.088420297145091e-09, + "rho_range": [ + 1.000061746686697, + 1.0000621564686298 + ], + "section_y": [ + 8, + 16, + 24 + ], + "measured_flux": [ + 0.16001096367835999, + 0.16001126170158386, + 0.16001027822494507 + ], + "reference_flux": 0.1600099104823488, + "flux_error": 8.444597156414126e-06, + "profile_u": [ + 0.0, + 8.9455446131989e-05, + 0.00018824030498032382, + 0.0002975763635390583, + 0.0004184583024047838, + 0.0005520351572583125, + 0.0006994804790031533, + 0.00086242202728945, + 0.0010426200355878434, + 0.00124175421498925, + 0.0014619185354570851, + 0.001705112561023556, + 0.0019738009568291913, + 0.002270621293314193, + 0.002598603643791379, + 0.0029610144670790548, + 0.0033615591732579133, + 0.0038042468263619796, + 0.004293466294116019, + 0.004834108378828214, + 0.005431611884502507, + 0.006091939747447754, + 0.0068216774098657906, + 0.007628133815882744, + 0.008519446034910387, + 0.009504576832561003, + 0.010593354906768923, + 0.011796635689810863, + 0.01312638651831285, + 0.014596046504046977, + 0.01622043980942417, + 0.01801580664152244, + 0.019999997615961867 + ], + "profile_v": [ + 0.010000019929070018, + 0.010000036375207957, + 0.010000014062100415, + 0.010000044663461211, + 0.010000019519312639, + 0.010000037064339651, + 0.010000044886965773, + 0.010000052337084574, + 0.010000066548193994, + 0.010000065989431331, + 0.010000017470532752, + 0.009999993592897282, + 0.010000063549513605, + 0.01000006794508827, + 0.010000163548754597, + 0.010000047215130098, + 0.010000085136242266, + 0.010000097335805029, + 0.010000123299468444, + 0.010000121418313187, + 0.010000110690146882, + 0.010000104413414212, + 0.010000062152619218, + 0.010000087743774337, + 0.010000023132620254, + 0.010000072973901148, + 0.010000157756283231, + 0.010000143805921093, + 0.010000134176638097, + 0.010000120058672521, + 0.010000082249312477, + 0.01000007476194272, + 0.010000011845689466 + ], + "analytic_u": [ + 0.0, + 8.93834340759214e-05, + 0.00018816740597436157, + 0.00029734057888851964, + 0.0004179955946272912, + 0.0005513400091417412, + 0.0006987083781509353, + 0.0008615756138241375, + 0.0010415717461975328, + 0.0012404982370627041, + 0.0014603460096017326, + 0.0017033153742155769, + 0.0019718380499701158, + 0.002268601502057889, + 0.002596575838853032, + 0.0029590435377541704, + 0.0033596322973215107, + 0.0038023513445033324, + 0.004291631560326843, + 0.004832369825644762, + 0.005429978030764802, + 0.006090437239466852, + 0.006820357549499615, + 0.0076270442486605855, + 0.008518570928571731, + 0.009503860287898064, + 0.010592773433714914, + 0.011796208574781966, + 0.013126210094479533, + 0.01459608909504569, + 0.016220556619561517, + 0.018015870885014745, + 0.02 + ], + "history": [ + { + "step": 0, + "mass": 528.0000054836273 + }, + { + "step": 519, + "mass": 528.0030145943165, + "u_change": 0.11252226647865608, + "v_change": 8.444312712194063e-08, + "mass_change": 5.699073215741694e-06 + }, + { + "step": 1038, + "mass": 528.0055006146431, + "u_change": 0.06386860625231582, + "v_change": 1.2862906902905968e-07, + "mass_change": 4.708371781809515e-06 + }, + { + "step": 1557, + "mass": 528.0086757838726, + "u_change": 0.03471244745796428, + "v_change": 1.9873623224528026e-07, + "mass_change": 6.013578023733381e-06 + }, + { + "step": 2076, + "mass": 528.0115706920624, + "u_change": 0.0185714444556153, + "v_change": 9.260365942990823e-08, + "mass_change": 5.4827806055076405e-06 + }, + { + "step": 2595, + "mass": 528.0134516060352, + "u_change": 0.009902454405190013, + "v_change": 2.0139815891275127e-07, + "mass_change": 3.5623370328031925e-06 + }, + { + "step": 3114, + "mass": 528.0158904194832, + "u_change": 0.005278179354537613, + "v_change": 2.3757110251613611e-07, + "mass_change": 4.618964815574979e-06 + }, + { + "step": 3633, + "mass": 528.0179588496685, + "u_change": 0.0028014308267930825, + "v_change": 1.6484661017939857e-07, + "mass_change": 3.917481370901487e-06 + }, + { + "step": 4152, + "mass": 528.0197386145592, + "u_change": 0.0014945402414918815, + "v_change": 2.452223851427273e-07, + "mass_change": 3.3707668033839913e-06 + }, + { + "step": 4671, + "mass": 528.0222311317921, + "u_change": 0.0007984849939463289, + "v_change": 4.122746189743962e-07, + "mass_change": 4.720676528425127e-06 + }, + { + "step": 5190, + "mass": 528.0253580510616, + "u_change": 0.00038457078038421405, + "v_change": 1.3977332566665448e-07, + "mass_change": 5.92219552478533e-06 + }, + { + "step": 5709, + "mass": 528.028033465147, + "u_change": 0.0001749640276780146, + "v_change": 2.0415197253240904e-07, + "mass_change": 5.0670720787921375e-06 + }, + { + "step": 6228, + "mass": 528.0297338962555, + "u_change": 0.00011205162061305987, + "v_change": 1.0156637751212001e-07, + "mass_change": 3.2205134295731743e-06 + }, + { + "step": 6747, + "mass": 528.0310046672821, + "u_change": 3.3227072256016815e-05, + "v_change": 1.644647201579807e-07, + "mass_change": 2.4067632829801806e-06 + }, + { + "step": 7266, + "mass": 528.0327045917511, + "u_change": 1.7266556062037596e-05, + "v_change": 1.0757521919628957e-07, + "mass_change": 3.2195538851123237e-06 + }, + { + "step": 7785, + "mass": 528.032704025507, + "u_change": 1.7649265948354784e-07, + "v_change": 2.85143343412214e-08, + "mass_change": 1.0724320444799115e-09 + }, + { + "step": 8304, + "mass": 528.0327042639256, + "u_change": 1.6463345734313962e-07, + "v_change": 2.842215751416109e-08, + "mass_change": 4.5155033451785746e-10 + }, + { + "step": 8823, + "mass": 528.0327051281929, + "u_change": 1.763111821248263e-07, + "v_change": 2.828467916967182e-08, + "mass_change": 1.6368699626272333e-09 + }, + { + "step": 9342, + "mass": 528.0327045917511, + "u_change": 1.62481860306085e-07, + "v_change": 2.8377249220676094e-08, + "mass_change": 1.0159882526651794e-09 + } + ], + "population_budget": { + "steps": [ + { + "step": 9343, + "mass": 528.0327045917511, + "delta_mass": 5.364418029785156e-07, + "bottom_net_in": 0.16000980138778687, + "top_net_in": -0.16000932455062866, + "collision_roundoff": 5.960464477539063e-08, + "physical_residual": 5.960464477539063e-08, + "budget_residual": 0.0 + }, + { + "step": 9344, + "mass": 528.0327051281929, + "delta_mass": -8.642673492431641e-07, + "bottom_net_in": 0.16000983119010925, + "top_net_in": -0.16000932455062866, + "collision_roundoff": -1.3709068298339844e-06, + "physical_residual": -1.3709068298339844e-06, + "budget_residual": 0.0 + }, + { + "step": 9345, + "mass": 528.0327042639256, + "delta_mass": -2.384185791015625e-07, + "bottom_net_in": 0.16000980138778687, + "top_net_in": -0.16000932455062866, + "collision_roundoff": -7.152557373046875e-07, + "physical_residual": -7.152557373046875e-07, + "budget_residual": 0.0 + }, + { + "step": 9346, + "mass": 528.032704025507, + "delta_mass": 5.662441253662109e-07, + "bottom_net_in": 0.16000983119010925, + "top_net_in": -0.16000932455062866, + "collision_roundoff": 5.960464477539063e-08, + "physical_residual": 5.960464477539063e-08, + "budget_residual": 0.0 + }, + { + "step": 9347, + "mass": 528.0327045917511, + "delta_mass": 5.364418029785156e-07, + "bottom_net_in": 0.16000980138778687, + "top_net_in": -0.16000932455062866, + "collision_roundoff": 5.960464477539063e-08, + "physical_residual": 5.960464477539063e-08, + "budget_residual": 0.0 + }, + { + "step": 9348, + "mass": 528.0327051281929, + "delta_mass": -8.642673492431641e-07, + "bottom_net_in": 0.16000983119010925, + "top_net_in": -0.16000932455062866, + "collision_roundoff": -1.3709068298339844e-06, + "physical_residual": -1.3709068298339844e-06, + "budget_residual": 0.0 + }, + { + "step": 9349, + "mass": 528.0327042639256, + "delta_mass": -2.384185791015625e-07, + "bottom_net_in": 0.16000980138778687, + "top_net_in": -0.16000932455062866, + "collision_roundoff": -7.152557373046875e-07, + "physical_residual": -7.152557373046875e-07, + "budget_residual": 0.0 + }, + { + "step": 9350, + "mass": 528.032704025507, + "delta_mass": 5.662441253662109e-07, + "bottom_net_in": 0.16000983119010925, + "top_net_in": -0.16000932455062866, + "collision_roundoff": 5.960464477539063e-08, + "physical_residual": 5.960464477539063e-08, + "budget_residual": 0.0 + }, + { + "step": 9351, + "mass": 528.0327045917511, + "delta_mass": 5.364418029785156e-07, + "bottom_net_in": 0.16000980138778687, + "top_net_in": -0.16000932455062866, + "collision_roundoff": 5.960464477539063e-08, + "physical_residual": 5.960464477539063e-08, + "budget_residual": 0.0 + }, + { + "step": 9352, + "mass": 528.0327051281929, + "delta_mass": -8.642673492431641e-07, + "bottom_net_in": 0.16000983119010925, + "top_net_in": -0.16000932455062866, + "collision_roundoff": -1.3709068298339844e-06, + "physical_residual": -1.3709068298339844e-06, + "budget_residual": 0.0 + }, + { + "step": 9353, + "mass": 528.0327042639256, + "delta_mass": -2.384185791015625e-07, + "bottom_net_in": 0.16000980138778687, + "top_net_in": -0.16000932455062866, + "collision_roundoff": -7.152557373046875e-07, + "physical_residual": -7.152557373046875e-07, + "budget_residual": 0.0 + }, + { + "step": 9354, + "mass": 528.032704025507, + "delta_mass": 5.662441253662109e-07, + "bottom_net_in": 0.16000983119010925, + "top_net_in": -0.16000932455062866, + "collision_roundoff": 5.960464477539063e-08, + "physical_residual": 5.960464477539063e-08, + "budget_residual": 0.0 + }, + { + "step": 9355, + "mass": 528.0327045917511, + "delta_mass": 5.364418029785156e-07, + "bottom_net_in": 0.16000980138778687, + "top_net_in": -0.16000932455062866, + "collision_roundoff": 5.960464477539063e-08, + "physical_residual": 5.960464477539063e-08, + "budget_residual": 0.0 + }, + { + "step": 9356, + "mass": 528.0327051281929, + "delta_mass": -8.642673492431641e-07, + "bottom_net_in": 0.16000983119010925, + "top_net_in": -0.16000932455062866, + "collision_roundoff": -1.3709068298339844e-06, + "physical_residual": -1.3709068298339844e-06, + "budget_residual": 0.0 + }, + { + "step": 9357, + "mass": 528.0327042639256, + "delta_mass": -2.384185791015625e-07, + "bottom_net_in": 0.16000980138778687, + "top_net_in": -0.16000932455062866, + "collision_roundoff": -7.152557373046875e-07, + "physical_residual": -7.152557373046875e-07, + "budget_residual": 0.0 + }, + { + "step": 9358, + "mass": 528.032704025507, + "delta_mass": 5.662441253662109e-07, + "bottom_net_in": 0.16000983119010925, + "top_net_in": -0.16000932455062866, + "collision_roundoff": 5.960464477539063e-08, + "physical_residual": 5.960464477539063e-08, + "budget_residual": 0.0 + } + ], + "instrumented_matches_plain": true, + "audit_source_sha256": "260a5a2b2ee7db4554dfb90cbc66c946786445a2b4ad6e747cb9be00525c5ec6", + "max_relative_residual": 0.0, + "max_physical_relative_residual": 2.596253634519027e-09 + }, + "passed": true + }, + { + "v": -0.01, + "height": 32, + "nx": 16, + "nu": 0.1, + "top_u": 0.02, + "pe": -3.1999999999999997, + "re": 6.3999999999999995, + "ma": 0.03872983346207417, + "steps": 8304, + "max_steps": 20760, + "steady": true, + "relative_l2": 0.0002440960088747591, + "v_max_error": 1.7679359053286714e-07, + "mass_offset": 4.906924108276198e-05, + "mass_window_span": 4.40261576154911e-09, + "rho_range": [ + 1.0000489745289087, + 1.000049151480198 + ], + "section_y": [ + 8, + 16, + 24 + ], + "measured_flux": [ + -0.1600094437599182, + -0.1600075364112854, + -0.16000664234161377 + ], + "reference_flux": -0.16000785274036003, + "flux_error": 9.943384221056558e-06, + "profile_u": [ + -1.862553695630337e-09, + 0.0019837929550688953, + 0.003778598549418785, + 0.0054024786790679465, + 0.0068718848833857656, + 0.008201216020474385, + 0.009404130479545443, + 0.010492593647536092, + 0.01147753270759774, + 0.01236881496460428, + 0.013175159065577303, + 0.013904706341415449, + 0.01456494021818619, + 0.015162375250485065, + 0.015703081390053553, + 0.016192360225634972, + 0.01663502902016883, + 0.017035558046667225, + 0.017398100968197314, + 0.01772621201904061, + 0.01802323946137988, + 0.018292128237852655, + 0.018535534533052837, + 0.018755671650596478, + 0.018954878167266164, + 0.019135220372838088, + 0.019298539574030493, + 0.019446496958155184, + 0.019580445554579513, + 0.01970159714944656, + 0.019811200612979807, + 0.019910356704333502, + 0.019999994635845068 + ], + "profile_v": [ + -0.010000015403319063, + -0.009999997038539547, + -0.010000042745612728, + -0.01000003613354257, + -0.01000004030566475, + -0.010000074315901176, + -0.010000110412183282, + -0.010000141907963956, + -0.010000099236861088, + -0.010000149544436778, + -0.01000001909117531, + -0.010000056267746516, + -0.01000003676681317, + -0.010000069324247907, + -0.010000068914483273, + -0.010000039672393938, + -0.00999997969816536, + -0.009999925628233704, + -0.009999899887739232, + -0.009999873737486384, + -0.009999875004007052, + -0.009999908157470084, + -0.009999957608278124, + -0.009999858911558081, + -0.0099999245293213, + -0.009999823206409467, + -0.009999859209562477, + -0.009999902923690355, + -0.010000012460485198, + -0.010000091563137801, + -0.010000069026237261, + -0.010000047271613764, + -0.010000006630691515 + ], + "analytic_u": [ + 0.0, + 0.0019841291149852525, + 0.003779443380438482, + 0.005403910904954308, + 0.006873789905520474, + 0.008203791425218043, + 0.009407226566285091, + 0.01049613971210194, + 0.011481429071428273, + 0.012372955751339414, + 0.013179642450500385, + 0.013909562760533149, + 0.014570021969235203, + 0.01516763017435524, + 0.01570836843967316, + 0.01619764865549667, + 0.016640367702678488, + 0.01704095646224583, + 0.01740342416114697, + 0.017731398497942114, + 0.018028161950029886, + 0.018296684625784425, + 0.018539653990398267, + 0.018759501762937298, + 0.01895842825380247, + 0.019138424386175867, + 0.019301291621849067, + 0.019448659990858264, + 0.01958200440537271, + 0.019702659421111483, + 0.019811832594025643, + 0.01991061656592408, + 0.02 + ], + "history": [ + { + "step": 0, + "mass": 528.0000054836273 + }, + { + "step": 519, + "mass": 528.0026223063469, + "u_change": 0.11252184512581681, + "v_change": 7.753946920416669e-08, + "mass_change": 4.956103584084374e-06 + }, + { + "step": 1038, + "mass": 528.005097091198, + "u_change": 0.06387059345522791, + "v_change": 1.5371872859941173e-07, + "mass_change": 4.687092472295361e-06 + }, + { + "step": 1557, + "mass": 528.007267177105, + "u_change": 0.03470596157418923, + "v_change": 1.2458960038999775e-07, + "mass_change": 4.110011144781539e-06 + }, + { + "step": 2076, + "mass": 528.0092547237873, + "u_change": 0.01857666465613561, + "v_change": 1.6150823118665627e-07, + "mass_change": 3.764292919916304e-06 + }, + { + "step": 2595, + "mass": 528.0118220150471, + "u_change": 0.00990548969723435, + "v_change": 2.363469736060659e-07, + "mass_change": 4.86229400208829e-06 + }, + { + "step": 3114, + "mass": 528.0143028497696, + "u_change": 0.005270655061622195, + "v_change": 2.4307873076526544e-07, + "mass_change": 4.698550562033751e-06 + }, + { + "step": 3633, + "mass": 528.0164777934551, + "u_change": 0.0027931213395853234, + "v_change": 1.968755914687075e-07, + "mass_change": 4.11921148284734e-06 + }, + { + "step": 4152, + "mass": 528.0191949903965, + "u_change": 0.0014905237199427895, + "v_change": 1.7557707402151934e-07, + "mass_change": 5.146206274916392e-06 + }, + { + "step": 4671, + "mass": 528.0214557349682, + "u_change": 0.0007730749201786436, + "v_change": 1.277598746914046e-07, + "mass_change": 4.281713159481954e-06 + }, + { + "step": 5190, + "mass": 528.0228283405304, + "u_change": 0.00036518921842941293, + "v_change": 2.221627395888796e-07, + "mass_change": 2.5996317196111203e-06 + }, + { + "step": 5709, + "mass": 528.0245542228222, + "u_change": 0.0001728084519173012, + "v_change": 1.174595060777523e-07, + "mass_change": 3.2687164277829555e-06 + }, + { + "step": 6228, + "mass": 528.0259140431881, + "u_change": 9.764523898882018e-05, + "v_change": 9.202532375409883e-08, + "mass_change": 2.5754173329226003e-06 + }, + { + "step": 6747, + "mass": 528.0259120166302, + "u_change": 1.821458540860218e-07, + "v_change": 3.206455317117716e-08, + "mass_change": 3.8381778434017885e-09 + }, + { + "step": 7266, + "mass": 528.025911718607, + "u_change": 1.750992007227593e-07, + "v_change": 3.131766536567733e-08, + "mass_change": 5.644379181473218e-10 + }, + { + "step": 7785, + "mass": 528.0259118676186, + "u_change": 1.5769860492340722e-07, + "v_change": 3.121097016104306e-08, + "mass_change": 2.822189590736609e-10 + }, + { + "step": 8304, + "mass": 528.0259140431881, + "u_change": 1.6127395726360295e-07, + "v_change": 3.1960398809363656e-08, + "mass_change": 4.1203968024754494e-09 + } + ], + "population_budget": { + "steps": [ + { + "step": 8305, + "mass": 528.0259140431881, + "delta_mass": -2.473592758178711e-06, + "bottom_net_in": -0.1600082516670227, + "top_net_in": 0.16000771522521973, + "collision_roundoff": -1.9371509552001953e-06, + "physical_residual": -1.9371509552001953e-06, + "budget_residual": 0.0 + }, + { + "step": 8306, + "mass": 528.0259115695953, + "delta_mass": 4.172325134277344e-07, + "bottom_net_in": -0.1600082516670227, + "top_net_in": 0.16000771522521973, + "collision_roundoff": 9.5367431640625e-07, + "physical_residual": 9.5367431640625e-07, + "budget_residual": 0.0 + }, + { + "step": 8307, + "mass": 528.0259119868279, + "delta_mass": 2.9802322387695312e-08, + "bottom_net_in": -0.1600082516670227, + "top_net_in": 0.16000771522521973, + "collision_roundoff": 5.662441253662109e-07, + "physical_residual": 5.662441253662109e-07, + "budget_residual": 0.0 + }, + { + "step": 8308, + "mass": 528.0259120166302, + "delta_mass": 1.817941665649414e-06, + "bottom_net_in": -0.1600082516670227, + "top_net_in": 0.16000771522521973, + "collision_roundoff": 2.3543834686279297e-06, + "physical_residual": 2.3543834686279297e-06, + "budget_residual": 0.0 + }, + { + "step": 8309, + "mass": 528.0259138345718, + "delta_mass": -2.0563602447509766e-06, + "bottom_net_in": -0.1600082516670227, + "top_net_in": 0.16000771522521973, + "collision_roundoff": -1.519918441772461e-06, + "physical_residual": -1.519918441772461e-06, + "budget_residual": 0.0 + }, + { + "step": 8310, + "mass": 528.0259117782116, + "delta_mass": -5.960464477539063e-08, + "bottom_net_in": -0.1600082516670227, + "top_net_in": 0.16000771522521973, + "collision_roundoff": 4.76837158203125e-07, + "physical_residual": 4.76837158203125e-07, + "budget_residual": 0.0 + }, + { + "step": 8311, + "mass": 528.025911718607, + "delta_mass": 0.0, + "bottom_net_in": -0.1600082516670227, + "top_net_in": 0.16000771522521973, + "collision_roundoff": 5.364418029785156e-07, + "physical_residual": 5.364418029785156e-07, + "budget_residual": 0.0 + }, + { + "step": 8312, + "mass": 528.025911718607, + "delta_mass": 2.592802047729492e-06, + "bottom_net_in": -0.1600082516670227, + "top_net_in": 0.16000771522521973, + "collision_roundoff": 3.129243850708008e-06, + "physical_residual": 3.129243850708008e-06, + "budget_residual": 0.0 + }, + { + "step": 8313, + "mass": 528.025914311409, + "delta_mass": -2.4437904357910156e-06, + "bottom_net_in": -0.1600082516670227, + "top_net_in": 0.16000771522521973, + "collision_roundoff": -1.9073486328125e-06, + "physical_residual": -1.9073486328125e-06, + "budget_residual": 0.0 + }, + { + "step": 8314, + "mass": 528.0259118676186, + "delta_mass": -3.5762786865234375e-07, + "bottom_net_in": -0.1600082516670227, + "top_net_in": 0.16000771522521973, + "collision_roundoff": 1.7881393432617188e-07, + "physical_residual": 1.7881393432617188e-07, + "budget_residual": 0.0 + }, + { + "step": 8315, + "mass": 528.0259115099907, + "delta_mass": 4.172325134277344e-07, + "bottom_net_in": -0.1600082516670227, + "top_net_in": 0.16000771522521973, + "collision_roundoff": 9.5367431640625e-07, + "physical_residual": 9.5367431640625e-07, + "budget_residual": 0.0 + }, + { + "step": 8316, + "mass": 528.0259119272232, + "delta_mass": 2.115964889526367e-06, + "bottom_net_in": -0.1600082516670227, + "top_net_in": 0.16000771522521973, + "collision_roundoff": 2.652406692504883e-06, + "physical_residual": 2.652406692504883e-06, + "budget_residual": 0.0 + }, + { + "step": 8317, + "mass": 528.0259140431881, + "delta_mass": -2.473592758178711e-06, + "bottom_net_in": -0.1600082516670227, + "top_net_in": 0.16000771522521973, + "collision_roundoff": -1.9371509552001953e-06, + "physical_residual": -1.9371509552001953e-06, + "budget_residual": 0.0 + }, + { + "step": 8318, + "mass": 528.0259115695953, + "delta_mass": 4.172325134277344e-07, + "bottom_net_in": -0.1600082516670227, + "top_net_in": 0.16000771522521973, + "collision_roundoff": 9.5367431640625e-07, + "physical_residual": 9.5367431640625e-07, + "budget_residual": 0.0 + }, + { + "step": 8319, + "mass": 528.0259119868279, + "delta_mass": 2.9802322387695312e-08, + "bottom_net_in": -0.1600082516670227, + "top_net_in": 0.16000771522521973, + "collision_roundoff": 5.662441253662109e-07, + "physical_residual": 5.662441253662109e-07, + "budget_residual": 0.0 + }, + { + "step": 8320, + "mass": 528.0259120166302, + "delta_mass": 1.817941665649414e-06, + "bottom_net_in": -0.1600082516670227, + "top_net_in": 0.16000771522521973, + "collision_roundoff": 2.3543834686279297e-06, + "physical_residual": 2.3543834686279297e-06, + "budget_residual": 0.0 + } + ], + "instrumented_matches_plain": true, + "audit_source_sha256": "260a5a2b2ee7db4554dfb90cbc66c946786445a2b4ad6e747cb9be00525c5ec6", + "max_relative_residual": 0.0, + "max_physical_relative_residual": 5.9263073672332004e-09 + }, + "passed": true + } + ], + "off_path_bitwise_equal": true +} diff --git a/research/j2-slot-2026-10-12/REVIEW.md b/research/j2-slot-2026-10-12/REVIEW.md new file mode 100644 index 0000000..69fa4d3 --- /dev/null +++ b/research/j2-slot-2026-10-12/REVIEW.md @@ -0,0 +1,119 @@ +# J2 静态有限平壁 slot:运行前冻结约定 + +2026-10-12。root唯一写入,沿用J1能力范围。起点HEAD和208个现有文件的准确SHA256见baseline.json;src/tests副本仅为制作本包增量和旧路径对照。保留此前脏树、checkpoint v3、四个配置头和notebook。不提交推送,不修改其他项目或环境。 + +## 参考和修改范围(代码修改前记录) + +沿用本地lbm-ref-architecture-guard。已搜索并核对ref/OpenLB/src/boundary/zouHeDynamics.hh:67–118,以及research/design-2026-10-09/jet-study.md中Zou–He Eq14–18、Ho scheme A的本地阅读记录。 + +1. 只重建poststream未知populations;已有paired-D2Q9 helper负责对应方向、密度分母和切向矩修正,不改公式。 +2. reconstruction后在同一节点collision/store。slot与零速flanks共用y=1物理平面,均不额外halfway反射。 +3. 空间目标profile只改变传给helper的局部速度,不改变分布阶段或引入launch。静态幅值不需要时间插值。 +4. profile与离散求和是本包公开的设计约定,不声称由参考文献证明其数值精度;实际流量、对称与收支须实测。 + +修改范围:config参数/宏/静态签名→compiler生成临时头→planar_velocity目标函数→现有init/step;checkpoint仅增加静态宽度比较(旧v3缺省为0);CONFIG说明、针对性单测和复用J1审计的J2验证器。没有注册框架或新生产kernel。 + +## 参数、符号与初始化 + +新增整数method.wall_slot_width=W,默认0保留J1整平面路径;非零时要求2≤W≤NX、on_site_velocity且physics.velocity=0。中心c=(NX−1)/2,x=0..NX−1,单元面积权重均为1。 + +有限宽W1e−5,防止只有均匀伪解通过流量。 +- 全宽W=NX、A=.002:同网格/U=0/初值,与本包起点原J1均匀路径比较初始化和64步DDF/flags逐值相同。默认关闭的旧bounce_back短通道也与起点逐值相同。 +- 每例再核对16步实际全平面population预算:包含全部底部slot、零目标flanks和整个上壁的真实incoming/outgoing;独立记录实际collision舍入。预算残差/M≤2e−7,另报不扣collision的物理残差;审计版与普通版逐值相同。必要时复用J1测试审计并细分slot/flank账,生产不加记录器。 +- 配置错误、静态参数改变、checkpoint宽度/幅值不一致必须在写状态前拒绝;同参数slot恢复后续短轨迹逐值相同;兼容旧v3缺少宽度字段时默认0。实际profile节点值/请求Q独立验算(CPUshim与GPU场),保持已有J1矩测试。 + +全部运行固定cwd=/home/frank14f/CelerisLab、解释器=/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python、进程PYTHONPATH=/home/frank14f/CelerisLab/src。每次Python/编译/测试核对来源;每次GPU执行先查获准GPU0/1空闲。原始失败/成功日志保留;门槛变动必须显式记录。当前尚未执行本包测试。 + +## 完成状态:实现完成,有限 slot 未通过质量稳态验收 + +以上为运行前冻结记录。门槛未改,未追加长期计算或更换参数以求通过。正/负有限slot均达到20760步上限,末段速度变化达标,但质量仍增长;不能称为稳态质量验收通过,也不能以压力基准自由度接受。生产模式默认关闭,CONFIG中已标注本轮实测限制。 + +| 案例 | 步数 | 质量相对初态偏移 | 末4间隔质量相对跨度 | 内部质量流量最大相对误差 | 判定 | +| --- | ---: | ---: | ---: | ---: | --- | +| A=0,W16 | 4152 | 6.70552e-8 | 0 | 内部实测0 | 通过 | +| A=+.002,W16 | 20760 | 9.44271e-5 | **9.10981e-6** | 2.41774e-4 | **质量/稳态失败** | +| A=−.002,W16 | 20760 | 8.50923e-5 | **8.50902e-6** | 3.34474e-4 | **质量/稳态失败** | + +有限案例末4间隔的质量增量分别约2.18–2.33e-6与2.01–2.20e-6/间隔,超过2e-6;窗口跨度超过6e-6。总偏移仍小于1e-3,不能用这一点替代末段漂移门槛。零幅值最终整个流体域u=v=0。 + +### 请求与真实流量 + +W16、NX48时Σw=8.533447265625,Q=±0.01706689453125,top v=±0.000355560302734375。离散峰值略小于A。原始实际rho/u/v二维场、全部纵向截面的宏观Σv和Σrho*v、质量采样与真实population账均见results.json。 + +| A | 内部y距8处Σrho*v | 距16处 | 距24处 | 底平面Σrho*v | 顶平面Σrho*v | +| --- | ---: | ---: | ---: | ---: | ---: | +| +.002 | .01706983335 | .01707181893 | .01707263291 | .01707108133 | .01706793159 | +| −.002 | −.01706487872 | −.01706400141 | −.01706263795 | −.01706563681 | −.01706770062 | + +内部截面跨度相对参照为1.64019e-4和1.31282e-4,均通过.002门槛。边界最大速度误差为3.59193e-8和3.30522e-8;最大实际速度约.0019844,密度最大偏差分别3.41552e-4和2.47041e-4。 + +### 对称与独立质量预算 + +rho偶对称误差/rho0:正5.01052e-7、负4.99189e-7。u奇对称误差/固定.002:正9.03279e-5、负9.03303e-5;v偶对称误差/固定.002:正1.00537e-4、负9.03337e-5。均低于冻结门槛。内部中心v方向和非零横向u检查通过。 + +每例末态16步的实际全平面预算残差均为0,审计版与普通版逐值相同。这只证明已记录FP32分布的离散收支相符,不代表质量恒定或物理误差为0。 + +| A | 每步平均ΔM | 全边界平均净流入 | 平均collision舍入 | +| --- | ---: | ---: | ---: | +| 0 | 0 | 0 | 0 | +| +.002 | 8.10414e-6 | 3.89630e-6 | 4.20783e-6 | +| −.002 | 6.77782e-6 | 2.62831e-6 | 4.14951e-6 | + +未扣collision的最大相对物理预算残差为正4.94425e-9、负8.18954e-9。正case底slot/flanks/top平均净交换为.01706407918、7.56886e-6、−.01706775173;负case为−.01705836912、−7.00448e-6、.01706800191。完整incoming/outgoing均已存储,没有忽略零目标flanks。这种按节点索引的population分账包括时间变化和斜向分布重分配,flanks分账净值不能直接解释为该处宏观穿壁速度。 + +结论限于实测:请求体积配平没有给出实际质量精确配平,且FP32碰撞舍入也贡献了增长。只读复核未发现本包profile、Zou–He未知方向、符号、阶段或checkpoint方面的必改编码错误。若后续要改变质量控制/出口条件,应先重新明确物理契约;本包未加入动态top、质量修正或密度钳制。 + +## 回归与只读复核 + +- CPU:98 passed、13 subtests passed,4.34秒,见cpu.log。包括实际CUDA helper CPUshim的9种profile/幅值组合、离散Q、配置/静态签名、checkpoint宽度不一致在写状态前拒绝、旧v3缺宽度按0、同宽度恢复,以及已有J1矩/力/对象限制与状态测试。 +- 全宽W48与起点原J1 W0,U0=0/A=.002,初态与64步DDF/flags逐值相同。默认关闭旧通道7步DDF/flags与起点逐值相同。 +- 正slot checkpoint载入新Simulation后7步DDF/flags/step_count逐值相同。 +- architecture只读复核:未发现生产编码必改项;发现验证器原先允许省略baseline使两项比较跳过。现已要求该参数,并用CLI检查确认省略时在访问CUDA前退出2。本次GPU调用始终带baseline,因此不影响数值结果;未重跑物理路径。 +- 本轮最终数值验证进程退出1,真实反映两例失败,不报告成全通过。 + +## 实际执行与失败记录 + +首次沙箱内nvidia-smi无法连接驱动;获准设备访问后只读检查成功:GPU0为0%、9MiB且无计算进程,GPU1已有其他Python进程占约362MiB。每次GPU运行前重复核对,只用物理GPU0;未干扰GPU1。未安装依赖或修改环境设置。 + +CPU实际命令(cwd固定为本项目): + +```bash +env PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python - <<'PY' > research/j2-slot-2026-10-12/cpu.log 2>&1 +from pathlib import Path +import sys, pytest, CelerisLab +from CelerisLab.cuda import compiler_v2 as compiler +root=Path('/home/frank14f/CelerisLab') +assert Path.cwd()==root +assert sys.executable=='/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python' +assert Path(CelerisLab.__file__).resolve()==root/'src/CelerisLab/__init__.py' +assert Path(compiler.kernel_path('kernel_v2.cu')).resolve()==root/'src/CelerisLab/lbm/kernels/kernel_v2.cu' +print(sys.executable, CelerisLab.__file__, compiler.kernel_path('kernel_v2.cu')) +raise SystemExit(pytest.main(['tests/unit/test_slot_velocity.py','tests/unit/test_planar_velocity.py','tests/unit/test_build_contracts.py','tests/unit/test_state_regressions.py','tests/unit/test_simulation_lifecycle.py','-q','--tb=short','-p','no:cacheprovider'])) +PY +``` + +数值验证实际命令(执行两次;两次前均核对GPU0空闲): + +```bash +env CUDA_VISIBLE_DEVICES=0 PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python tests/validation/run_j2_slot.py --output research/j2-slot-2026-10-12/results.json --baseline-kernels /tmp/celeris-j2-before/src/CelerisLab/lbm/kernels > research/j2-slot-2026-10-12/gpu-validation.log 2>&1 +``` + +第一次在零幅值计算完成后,输出JSON时因NumPy bool失败,日志原样移为gpu-serialization-failure.log;没有生成完整结果。将checks显式转为Python bool后完整重跑,模型/参数/门槛未改。第二次数值失败记录保留为gpu-validation.log,逐项指标在results.json。 + +CLI缺baseline检查使用同一解释器/进程PYTHONPATH和来源断言,通过runpy运行run_j2_slot.py,argv为`['run_j2_slot.py','--output','unused.json']`,断言SystemExit.code==2;原始stderr与确认在cli.log。未访问GPU、未创建unused.json。 + +## 增量与保存 + +incremental.diff仅包含相对本包起点的12个文件:生产代码6个文件+43/−3行,CONFIG说明+29/−2行,测试与验证5个文件+256/−6行,总计+328/−11行。没有新增生产文件或kernel launch。为避免混入此前同文件中的修改,不提交;没有推送。四个配置头和notebook的SHA256与起点相同,其余原文件均保留。git diff --check和增量补丁反向校验通过,反向应用后逐字节匹配起点哈希。 + +保留全部原始成功/失败日志。临时CUDA审计构建自动清理,重复起点副本在补丁反向核验后删除。日后复跑需先在临时副本中用本包diff反向重建起点src,再提供其kernels目录作为必需的baseline;不要在当前脏工作树直接反向应用。停在此包交复审;尚未覆盖长期质量稳定、端点/网格阶/性能、其他碰撞/精度/streaming、曲面slot或AMR。 diff --git a/research/j2-slot-2026-10-12/baseline-status.txt b/research/j2-slot-2026-10-12/baseline-status.txt new file mode 100644 index 0000000..e711afb --- /dev/null +++ b/research/j2-slot-2026-10-12/baseline-status.txt @@ -0,0 +1,67 @@ + M pyproject.toml + M setup.py + M src/CelerisLab/__init__.py + M src/CelerisLab/body/__init__.py + M src/CelerisLab/body/ddf_patch.py + M src/CelerisLab/body/manager.py + M src/CelerisLab/body/preprocess/flag_overlay.py + M src/CelerisLab/common/__init__.py + M src/CelerisLab/common/checkpoint.py + M src/CelerisLab/config.py + M src/CelerisLab/configs/CONFIG.md + M src/CelerisLab/cuda/__init__.py + M src/CelerisLab/cuda/compiler_v2.py + M src/CelerisLab/cuda/context.py + M src/CelerisLab/lbm/__init__.py + M src/CelerisLab/lbm/curved_links.py + M src/CelerisLab/lbm/field.py + M src/CelerisLab/lbm/initializers.py + M src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh + M src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh + M src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh + M src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh + M src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh + M src/CelerisLab/lbm/kernels/config/config_grid.h + M src/CelerisLab/lbm/kernels/config/config_method.h + M src/CelerisLab/lbm/kernels/config/config_objects.h + M src/CelerisLab/lbm/kernels/config/config_physics.h + M src/CelerisLab/lbm/kernels/kernel_v2.cu + M src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh + M src/CelerisLab/lbm/kernels/operators/collision_trt.cuh + M src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh + M src/CelerisLab/lbm/kernels/step/aux_kernels.cu + M src/CelerisLab/lbm/kernels/step/esopull_sync.cu + M src/CelerisLab/lbm/kernels/step/init_flow.cu + M src/CelerisLab/lbm/kernels/step/one_step_double.cu + M src/CelerisLab/lbm/kernels/step/one_step_esopull.cu + M src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh + M src/CelerisLab/lbm/stepper.py + M src/CelerisLab/simulation.py + M tests/integration/test_body_sync_e2e.py + M tests/integration/test_ddf_patch.py + M tests/integration/test_sync_bodies_skeleton.py + M tests/integration/test_unified_obs.py + M tests/postproc/experiment.ipynb + M tests/validation/run_kan99b_rotating_cylinder.py + M tests/validation/run_sah04_st_matrix.py + M tests/validation/test_sensor_accuracy.py +?? docs/design/ +?? docs/multilevel_grid_architecture_analysis.md +?? research/ +?? src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh +?? "tests/audit/body\345\210\240\345\207\217\345\212\237\350\203\275.md" +?? tests/integration/_cases.py +?? tests/integration/test_numerical_gpu.py +?? tests/integration/test_runtime_contracts_gpu.py +?? tests/integration/test_state_gpu.py +?? tests/unit/cpp/ +?? tests/unit/test_build_contracts.py +?? tests/unit/test_context_ownership.py +?? tests/unit/test_initializers.py +?? tests/unit/test_numerical_operators.py +?? tests/unit/test_planar_velocity.py +?? tests/unit/test_simulation_lifecycle.py +?? tests/unit/test_state_regressions.py +?? tests/validation/multigrid/ +?? tests/validation/run_j1.py +?? tests/validation/run_poiseuille.py diff --git a/research/j2-slot-2026-10-12/baseline.json b/research/j2-slot-2026-10-12/baseline.json new file mode 100644 index 0000000..286e023 --- /dev/null +++ b/research/j2-slot-2026-10-12/baseline.json @@ -0,0 +1,216 @@ +{ + "head": "6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0", + "python": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "package": "/home/frank14f/CelerisLab/src/CelerisLab/__init__.py", + "cuda_source": "/home/frank14f/CelerisLab/src/CelerisLab/lbm/kernels/kernel_v2.cu", + "hashes": { + "docs/design/README.md": "98242c6960866d9b75aaf363f703edf02c4210bc38da1a340e9f6add49c6a3ce", + "docs/design/integrated_architecture.md": "c26b0d301321fe4b86d83d11c7e0b8d0c0545ee2995afa563966f004e9788132", + "docs/design/multi_level_grid_architecture.md": "e56a67d9129f2e3c311342e21a3fb2ed14bd492dd881949b251d5d9ac577bdee", + "docs/design/multi_level_summary.md": "eebf23e0bec9b154e5ce2128e2806e7558a7d4824b2c700cfd16afd1158b2354", + "docs/design/multi_level_visual_reference.md": "cad4bfbd561e5650ec297334529334b662a1ed35f7373c61f34ee22ecf1f66bd", + "docs/design/spatial_coupling_refinement.md": "36c878c7afad524999d89fa842297a98a0433e0283e78b36ca734ddbf8723ed8", + "docs/multilevel_grid_architecture_analysis.md": "90309730b1759d63531cb258c30db990ab71ca1b56ae47d0bbe2f4e2ae52012c", + "research/audit-2026-10-09/REVIEW.zh-CN.md": "2841fd3aa7a6baedbe1079d90915c8b05212b133824ed6abccaa1f09656eaefe", + "research/audit-2026-10-09/architecture-cpu-results.json": "e1b809210005c8765b13fddbb5ed710d15f6fcbb4c5788a4064f3e88808433ef", + "research/audit-2026-10-09/architecture-report.md": "861079dc3f4ced9fdc41bfb22002d32e190c0d630d3ba2f138f9dc7a949b8371", + "research/audit-2026-10-09/numerical-report.md": "970330b3a593f79f09866ce6ae82bc0ddd81226230d0a6ff06ae8ae756ee80da", + "research/audit-2026-10-09/numerical_collision_results.json": "51e5c263bb8cde82cedef2ccfdbf5ef657742a80218d7896b1ff877516e59693", + "research/audit-2026-10-09/numerical_compile_results.json": "c3b0ae02072a2ec408ada7513b542ec255f6855cb743a3ed7f91bd8f31504f44", + "research/audit-2026-10-09/numerical_semantics_results.json": "b95b065b594aa2911740dab216f87936c9bf7f7fa25acfda93b5738443564035", + "research/audit-2026-10-09/root-initializers-report.md": "ca448457c444949d5d0e1e10fa7121064510b77fc4c3512580900f0299219867", + "research/audit-2026-10-09/state-report.md": "f8708807efc2e109810c5955f7c1884a932668c0b3cb2963c2df3b09f2a3d5c4", + "research/audit-2026-10-09/state_results.json": "da9170df3e11231c73f20e5e79ed68e08966673d1dd52004ea6b6a279afc0dcd", + "research/design-2026-10-09/Contracts.lean": "2442d9a778ef20e8af3fecf23be6fea6d73c6299ff744c9664b652bc5ee3f034", + "research/design-2026-10-09/PLAN.zh-CN.md": "0341dd7ee306a040340c8e5dedb07a109e931c27dbf3c994d072aa78e3b6bc67", + "research/design-2026-10-09/api-architecture-study.md": "d6fb45ec784f0e1db55fb9f34e137b9f551db0b9b39fd4f0ef247a78fc34eedf", + "research/design-2026-10-09/grid-study.md": "4435dc1275ec5e15b118becc6ac391f306195d1e5beaa58037b1aff3bb2465c7", + "research/design-2026-10-09/jet-study.md": "a362142ef04a5ad5dbb4c9db9d221b1199dccec53780c8f2da49a15201cfe529", + "research/design-2026-10-09/jet_closure_check.py": "fde45d0f8518740ef5c0bf0fe7635d6adaf9a2e789927dd4e68e991c138ddc30", + "research/design-2026-10-09/jet_closure_results.json": "12cf7d400a206f9f9ec9ea6ad251fe6bb0232e27bcbed22fbc1ead2c0fc7d249", + "research/design-2026-10-09/math-and-history.md": "64f8c82e4949d6f58b46faa09800958714859c36cad20bbeeae8b449ae7a6099", + "research/design-2026-10-09/math-checks.json": "94750381954317cde8d649db26beaed8ea945666572a05030ca2b4d97d384011", + "research/design-2026-10-09/math_checks.py": "4254983a783fe4bad8888b3d7c243c87d991c7bbf242edb0f56f25cbaefee890", + "research/j1-2026-10-12/REVIEW.md": "13004a4f140acdcf59acb57e9e2dda1bb95763d30060f822a7c206c94b813a9f", + "research/j1-2026-10-12/baseline-status.txt": "ac398360e05b746b89ae0c3acfe202b5122e650a3bb1ff234ab26f874a303e64", + "research/j1-2026-10-12/baseline.json": "ad7afdf7b3913d11c07343e971fe2f43c2d1a2b99e3d5904a6ba89e3bb0b24fb", + "research/j1-2026-10-12/incremental.diff": "a454c23da7b0011645949c0fbf64d0c41ecfdab5642b1b7c5119868005d3c721", + "research/j1-2026-10-12/results.json": "449f8a17dacac0fc6d2489c4b10bac330dbbbdb38fad3ce54f739ac8c6d48e85", + "research/repair-2026-10-10/TRON_HANDOFF.md": "f8aaa3d99cd133c2055d4adf396a0a57d14f6006aea19e87611bd1c2c1b53a88", + "research/repair-2026-10-10/baseline-hashes.json": "d6a7d5f9ec5bceb0e7927d55603d9c5e70105982cd945723454659b19ab476e6", + "research/repair-2026-10-10/baseline-status.txt": "074088d793014e3b8154c58718058c7d300fb45595f5129fa957ef1e4cec38e2", + "research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff": "292b4bafe7a62d4fbbf7c165eb99929336edfcaa16b15f34f72ab71fcd928391", + "research/repair-2026-10-10/classic-results.json": "a5d15305f516fd378b54cf9029102be58a83a55a7bad4b8e058fcfe0cc9898f4", + "research/repair-2026-10-10/classic-signals.npz": "820c9a0b0713d7455f0a5839ac2cd5ee706086d1a26461225dcdb095673421e2", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "research/repair-2026-10-10/provenance.json": "a81b7e32ecf7182c9617df1b39bbb063a05ef89290ad501bac4573cd5e8a6832", + "research/repair-2026-10-10/repair-architecture.md": "49be42ff5c994017f3175e17efda14d84f0b68f8ecd239f66ccee38415b60c5a", + "research/repair-2026-10-10/repair-numerical.md": "0272ebfa8c519aad161c520542cf53156574661609b91fd5ccad7955fdf2bd7b", + "research/repair-2026-10-10/repair-state.md": "4d4aa1ec0c11a87d2c8380912e7ed74cf5c910ae42e5cc529effde36c9020969", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "8443d80bc31b3940648b38d355a564f4f8618afbd6a091d8ec7c493f5119ba06", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_planar_velocity.py": "47e2277a0d2a4a57126a257cc6fac46a7cf4285651545071d5ccfb6766ac68aa", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/run_j1.py": "435a12fcaf2172df5944c72d702f7c75eddd0fb2918557a5178f0638b58e2f53", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + ".cursor/rules/cuda-style.mdc": "5810cf8cff793a11ba5dedafaa8a4e7d7d3debb728d837ca1903ff6dc8d6fdb9", + ".cursor/rules/project-layout.mdc": "aeed1cd9d48447bcfcfb6a77250af7c5a3d500de4c6b2591c5684696fa04c3ec", + ".cursor/rules/python-style.mdc": "ece75cb724d7dc46cb8dab7ecf8d710a90b503001da0d506ea4bf772ce395e21", + ".cursorignore": "9f072faa815a6c6d4dc791a424201404f0f623338681ae3d2fcbdf86db1bd035", + ".gitignore": "de25151f4cfdf29ca64032e509398e1829c7ded2449ccff803b2fd87d859ae6c", + "LICENSE": "e98392425e9a0007d0d69f0f7c912c2dc1b59061a6197223962aac45599c76ea", + "README.md": "982d0df8b766b1d5017ba702b75e8b3cec8d22f57af8f434be27ea251652596c", + "docs/audit/audit_round2.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "docs/audit/body_refactor_notes.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "docs/audit/config_diagnosis.md": "b601652df0cac36a8faf2b317b11853221353716a25184cd9b2dc41373a7f183", + "docs/audit/kernel_layer_audit.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "docs/performance_analysis.md": "ba01aaa4d3c02b61a8dc55fd00518ac291ebbed79b6574190d6b7234a1158fcb", + "docs/tests_overview.md": "ffc9591fd7baa4261b2c1ce9cfa7aa13a3554a8d5df712035806266a5eaade3f", + "docs/validation_specs/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "docs/validation_specs/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "docs/validation_specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "docs/validation_specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "docs/validation_specs/exp_ctrl_matrix.md": "b7250576c23292988b6ef4bcfd080f611d41edc413c3cebd0eadcc8596049470", + "docs/validation_specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "output/round3_compatibility_summary.md": "319f2e6abde4b34cc4ec90ef461d8ebb85dd5a3ac1736cfa7a3fb110f2a69df9", + "pyproject.toml": "f24ab9ad3a6a728a9382b1bce2e721612fc76635f35c6f96dfddaa853b6e5a9c", + "setup.py": "bf07df7ec19de56710d2bb5f61873e09710cd059d46837dc3aa54f3e09ff9e06", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/checkpoint.py": "152e7e357f1c3abecb980da1824e72dda2252cc5fa5c5bd9d8aa8e35b673a8fd", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/config.py": "1758fea66ff901137ed7f9504ccc70331ce877e70c5d858e2bebc4eea901f2a6", + "src/CelerisLab/configs/CONFIG.md": "54e833888f2ed3778a5cfeb53897d8a2a5907a7ee75ad1ef455774128409ce02", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/cuda/compiler_v2.py": "8fb7cd9f19a459636a7b1405998fe34c7d018a2b6b7285a7fa7fb854e004d985", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "53eeb8052beff29e36a0584528862b33633196fa32273121b7dcdd1cae7f1433", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "4f49c3e97255fa7686a00954b091387861f0ef11e314147eaadc5f836238f62c", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/simulation.py": "34d69e71844f553790c5a2bed0f8fbfb912a9498e95b500d1ef2ad41cae3b424", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9" + } +} diff --git a/research/j2-slot-2026-10-12/incremental.diff b/research/j2-slot-2026-10-12/incremental.diff new file mode 100644 index 0000000..649f3b5 --- /dev/null +++ b/research/j2-slot-2026-10-12/incremental.diff @@ -0,0 +1,474 @@ +--- a/src/CelerisLab/common/checkpoint.py ++++ b/src/CelerisLab/common/checkpoint.py +@@ -218,6 +218,8 @@ + for key in ("y_wall_bc", "velocity", "wall_normal_velocity"): + if saved_cfg.get(key) != getattr(lbm_cfg, key): + raise ValueError(f"Checkpoint on-site boundary mismatch on '{key}'") ++ if saved_cfg.get("wall_slot_width", 0) != lbm_cfg.wall_slot_width: ++ raise ValueError("Checkpoint on-site boundary mismatch on 'wall_slot_width'") + for key in ("lattice_model", "nx", "ny", "nz", "store_precision", + "streaming", "ddf_shifting"): + saved_val = saved_cfg.get(key) +--- a/src/CelerisLab/config.py ++++ b/src/CelerisLab/config.py +@@ -87,6 +87,7 @@ + outlet_srt_neq_damp: float = 0.5 + y_wall_bc: str = "bounce_back" + wall_normal_velocity: float = 0.0 ++ wall_slot_width: int = 0 + omega_min: float = 0.01 + omega_max: float = 1.99 + +@@ -151,6 +152,11 @@ + ) + if self.dim == 2 and self.nz != 1: + raise ValueError("nz must be 1 for 2D") ++ if (isinstance(self.wall_slot_width, bool) or not isinstance(self.wall_slot_width, int) ++ or self.wall_slot_width != 0 and not 2 <= self.wall_slot_width <= self.nx): ++ raise ValueError("wall_slot_width must be 0 (disabled) or an integer in [2, nx]") ++ if self.wall_slot_width and (self.y_wall_bc != "on_site_velocity" or self.velocity != 0): ++ raise ValueError("wall_slot_width requires on_site_velocity and velocity=0") + if self.y_wall_bc == "on_site_velocity": + if (not self.is_d2q9 or self.collision != "SRT" + or self.streaming != "double_buffer" or self.store_precision != "FP32" +@@ -196,8 +202,17 @@ + self.validate() + return (self.lattice_model, self.nx, self.ny, self.nz, self.data_type, + self.store_precision, bool(self.ddf_shifting), self.streaming, +- (self.velocity, self.wall_normal_velocity) ++ (self.velocity, self.wall_normal_velocity, self.wall_slot_width) + if self.y_wall_bc == "on_site_velocity" else None) ++ ++ @property ++ def top_wall_normal_velocity(self) -> float: ++ """Uniform top target balancing the bottom's discrete requested volume.""" ++ if self.wall_slot_width in (0, self.nx): ++ return self.wall_normal_velocity ++ weights = (max(0.0, 1.0-((2*x-(self.nx-1))/self.wall_slot_width)**2)**2 ++ for x in range(self.nx)) ++ return self.wall_normal_velocity * math.fsum(weights) / self.nx + + def to_macros(self) -> Dict[str, Any]: + """Return flat dict of macro_name → value for header generation.""" +@@ -227,6 +242,8 @@ + "OUTLET_BACKFLOW_CLAMP": int(self.outlet_backflow_clamp), + "Y_WALL_BC": Y_WALL_BC_MAP[self.y_wall_bc], + "WALL_NORMAL_VELOCITY": _float_literal(self.wall_normal_velocity), ++ "WALL_SLOT_WIDTH": self.wall_slot_width, ++ "TOP_WALL_NORMAL_VELOCITY": _float_literal(self.top_wall_normal_velocity), + "OMEGA_COLLISION_MIN": _float_literal(self.omega_min), + "OMEGA_COLLISION_MAX": _float_literal(self.omega_max), + "TRT_MAGIC_PARAM": _float_literal(self.trt_magic_param), +@@ -296,6 +313,7 @@ + outlet_srt_neq_damp=m["outlet"].get("srt_neq_damp", 0.5), + y_wall_bc=m.get("y_wall_bc", "bounce_back"), + wall_normal_velocity=m.get("wall_normal_velocity", 0.0), ++ wall_slot_width=m.get("wall_slot_width", 0), + omega_min=m["omega_guard"]["min"], + omega_max=m["omega_guard"]["max"], + threads_per_block=c["threads_per_block"], +--- a/src/CelerisLab/configs/CONFIG.md ++++ b/src/CelerisLab/configs/CONFIG.md +@@ -113,6 +113,33 @@ + + Supported only for D2Q9/SRT/FP32/unshifted/double_buffer without LES, objects + or body forces. Boundary targets and the mode are fixed at construction; +-checkpoint restart requires matching targets. This is an entire-plane +-Couette-throughflow reference, not a finite slot or curved jet API. The default ++checkpoint restart requires matching targets. With the slot disabled this is an ++entire-plane Couette-throughflow reference. The default + `bounce_back` mode and existing configurations retain their previous path. ++ ++### Static centered bottom slot ++ ++Optional `method.wall_slot_width` is an integer W: 0 (default) keeps the above ++uniform planes; 2≤W≤NX enables a centered bottom slot and requires ++`physics.velocity=0`. The same support restrictions apply. Width and amplitude ++are fixed at construction and must match on checkpoint restart; older v3 ++checkpoints without this field mean W=0. ++ ++For W 0 && WALL_SLOT_WIDTH < NX ++ // C1 compact profile centered at (NX-1)/2; amplitude is its continuous peak. ++ const float s = (2.0f*(float)x-(float)(NX-1))/(float)WALL_SLOT_WIDTH; ++ const float w = fmaxf(0.0f, 1.0f-s*s); ++ return WALL_NORMAL_VELOCITY*w*w; ++#else ++ return WALL_NORMAL_VELOCITY; // Disabled or explicitly uniform full width. ++#endif ++} + + __device__ __forceinline__ void reconstruct_bottom_velocity(float* f, float u, float v) + { +--- a/src/CelerisLab/lbm/kernels/step/init_flow.cu ++++ b/src/CelerisLab/lbm/kernels/step/init_flow.cu +@@ -91,7 +91,13 @@ + // Initial g(0)=feq: both boundary velocities are already satisfied. + // Start from linear Couette, not the sought exponential steady profile. + float f[NQ]; ++#if WALL_SLOT_WIDTH > 0 && WALL_SLOT_WIDTH < NX ++ const float t = (float)(y-1u)/(float)(NY-3); ++ const float v = (1.0f-t)*bottom_wall_normal_velocity(x)+t*TOP_WALL_NORMAL_VELOCITY; ++ compute_feq(RHO, 0.0f, v, f); ++#else + compute_feq(RHO, U0*(float)(y-1u)/(float)(NY-3), WALL_NORMAL_VELOCITY, f); ++#endif + stream_pull_store(k, f, fi); + #else + write_equilibrium(fi, k, inlet_target_u((float)y)); +--- a/src/CelerisLab/lbm/kernels/step/one_step_double.cu ++++ b/src/CelerisLab/lbm/kernels/step/one_step_double.cu +@@ -91,8 +91,8 @@ + #if Y_WALL_BC == 2 + // Reconstruct f(t+dt) on the physical plane, then collide below. + // This replaces, rather than compounds, the halfway wall correction. +- if (y == 1u) reconstruct_bottom_velocity(f, 0.0f, WALL_NORMAL_VELOCITY); +- else reconstruct_top_velocity(f, U0, WALL_NORMAL_VELOCITY); ++ if (y == 1u) reconstruct_bottom_velocity(f, 0.0f, bottom_wall_normal_velocity(x)); ++ else reconstruct_top_velocity(f, U0, TOP_WALL_NORMAL_VELOCITY); + #elif Y_WALL_BC == 1 + apply_wall_freeslip_d2q9_y_pull(y, f, fi_in, k); + #else +--- /dev/null ++++ b/tests/unit/cpp/slot_profile.cpp +@@ -0,0 +1,10 @@ ++#include ++#include ++#define __device__ ++#define __forceinline__ inline ++#include "boundary/planar_velocity.cuh" ++ ++int main() { ++ for (unsigned x=0; x= 8 and span <= GATES['mass_window_span'] and all( ++ r['u_change'] <= GATES['velocity_change'] and r['v_change'] <= GATES['velocity_change'] ++ and r['mass_change'] <= GATES['mass_change'] for r in history[-4:])) ++ if steady: ++ break ++ sections = [8, 16, 24] ++ actual_mass_flux = (rho*uy).sum(axis=1) ++ actual_volume_flux = uy.sum(axis=1) ++ request_q = float(bottom.sum()) ++ reference = float(rho.mean()*request_q) ++ flux_error = float(np.max(np.abs(actual_mass_flux[sections]-reference))/abs(reference)) if amplitude else 0. ++ flux_span = float(np.ptp(actual_mass_flux[sections])/abs(reference)) if amplitude else 0. ++ symmetry = dict(rho=float(np.max(np.abs(rho-rho[:, ::-1]))), ++ u=float(np.max(np.abs(ux+ux[:, ::-1]))/scale), ++ v=float(np.max(np.abs(uy-uy[:, ::-1]))/scale)) ++ boundary_error = float(max(np.abs(uy[0]-bottom).max(), np.abs(uy[-1]-top).max(), ++ np.abs(ux[[0, -1]]).max())) ++ offset = abs(mass-initial_mass)/initial_mass ++ speed = float(np.hypot(ux, uy).max()) ++ density_error = float(np.abs(rho-1).max()) ++ nonuniform = bool(uy[8, NX//2]*amplitude > 0 and np.abs(ux).max() > 1e-5) if amplitude else True ++ restart = restart_check(sim, amplitude) if amplitude > 0 else None ++ budget = population_budget(sim, bottom_slot=slot) ++ checks = dict(steady=steady, initialization=initial_error <= GATES['boundary_error'], ++ boundary=boundary_error <= GATES['boundary_error'], ++ mass=offset <= GATES['mass_offset'] and span <= GATES['mass_window_span'], ++ bounded=density_error <= GATES['rho_error'] and speed <= GATES['speed'], ++ flux=flux_error <= GATES['flux_error'] and flux_span <= GATES['flux_span'], ++ symmetry=symmetry['rho'] <= GATES['rho_symmetry'] and ++ max(symmetry['u'], symmetry['v']) <= GATES['velocity_symmetry'], ++ zero=bool(amplitude or speed <= GATES['zero_speed']), nonuniform=nonuniform, ++ restart=restart is not False, audit=budget['instrumented_matches_plain'] and ++ budget['max_relative_residual'] <= GATES['budget_residual']) ++ checks = {name: bool(passed) for name, passed in checks.items()} ++ return dict(amplitude=amplitude, width=WIDTH, nx=NX, height=32, viscosity=.1, top_u=0., ++ steps=sim.stepper.step_count-16, max_steps=40*CHUNK, checks=checks, passed=all(checks.values()), ++ requested_volume=request_q, top_target=top, bottom_targets=bottom.tolist(), ++ velocity_scale=scale, rho_scale=1., initial_boundary_error=initial_error, ++ boundary_error=boundary_error, mass_offset=offset, mass_window_span=span, ++ flux_error=flux_error, flux_span=flux_span, section_y=sections, ++ mass_flux_by_y=actual_mass_flux.tolist(), volume_flux_by_y=actual_volume_flux.tolist(), ++ symmetry=symmetry, max_speed=speed, rho_error=density_error, ++ rho=rho.tolist(), u=ux.tolist(), v=uy.tolist(), history=history, ++ checkpoint_bitwise_equal=restart, population_budget=budget) ++ ++ ++def main(): ++ parser = argparse.ArgumentParser(description=__doc__) ++ parser.add_argument('--output', type=Path, required=True) ++ parser.add_argument('--baseline-kernels', type=Path, required=True, ++ help='Pre-J2 source for the required full-width and default-mode comparisons') ++ args = parser.parse_args() ++ assert Path.cwd() == ROOT == Path('/home/frank14f/CelerisLab') ++ assert sys.executable == '/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python' ++ assert Path(CelerisLab.__file__).resolve() == ROOT/'src/CelerisLab/__init__.py' ++ assert Path(compiler.kernel_path('kernel_v2.cu')).resolve() == ROOT/'src/CelerisLab/lbm/kernels/kernel_v2.cu' ++ assert os.environ.get('CUDA_VISIBLE_DEVICES') in ('0', '1') ++ report = dict(python=sys.executable, package=CelerisLab.__file__, ++ cuda_source=compiler.kernel_path('kernel_v2.cu'), physical_gpu=os.environ['CUDA_VISIBLE_DEVICES'], ++ gates=GATES, full_width_bitwise_equal=None, off_path_bitwise_equal=None, cases=[]) ++ report['full_width_bitwise_equal'] = full_width_check(args.baseline_kernels) ++ report['off_path_bitwise_equal'] = off_path_check(args.baseline_kernels) ++ for amplitude in (0., .002, -.002): ++ case = run_case(amplitude) ++ report['cases'].append(case) ++ args.output.write_text(json.dumps(report, indent=2)+'\n') ++ print(json.dumps({k: case[k] for k in ('amplitude', 'steps', 'checks', 'mass_offset', ++ 'mass_window_span', 'flux_error', 'symmetry')}), flush=True) ++ return 0 if (report['full_width_bitwise_equal'] is True and report['off_path_bitwise_equal'] is True ++ and all(c['passed'] for c in report['cases'])) else 1 ++ ++ ++if __name__ == '__main__': ++ raise SystemExit(main()) diff --git a/research/j2-slot-2026-10-12/results.json b/research/j2-slot-2026-10-12/results.json new file mode 100644 index 0000000..b4272e2 --- /dev/null +++ b/research/j2-slot-2026-10-12/results.json @@ -0,0 +1,17204 @@ +{ + "python": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "package": "/home/frank14f/CelerisLab/src/CelerisLab/__init__.py", + "cuda_source": "/home/frank14f/CelerisLab/src/CelerisLab/lbm/kernels/kernel_v2.cu", + "physical_gpu": "0", + "gates": { + "velocity_change": 5e-05, + "mass_change": 2e-06, + "mass_window_span": 6e-06, + "mass_offset": 0.001, + "rho_error": 0.005, + "speed": 0.01, + "zero_speed": 2e-06, + "flux_error": 0.005, + "flux_span": 0.002, + "boundary_error": 2e-06, + "rho_symmetry": 2e-05, + "velocity_symmetry": 0.002, + "budget_residual": 2e-07 + }, + "full_width_bitwise_equal": true, + "off_path_bitwise_equal": true, + "cases": [ + { + "amplitude": 0.0, + "width": 16, + "nx": 48, + "height": 32, + "viscosity": 0.1, + "top_u": 0.0, + "steps": 4152, + "max_steps": 20760, + "checks": { + "steady": true, + "initialization": true, + "boundary": true, + "mass": true, + "bounded": true, + "flux": true, + "symmetry": true, + "zero": true, + "nonuniform": true, + "restart": true, + "audit": true + }, + "passed": true, + "requested_volume": 0.0, + "top_target": 0.0, + "bottom_targets": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "velocity_scale": 0.002, + "rho_scale": 1.0, + "initial_boundary_error": 0.0, + "boundary_error": 0.0, + "mass_offset": 6.705522487271409e-08, + "mass_window_span": 0.0, + "flux_error": 0.0, + "flux_span": 0.0, + "section_y": [ + 8, + 16, + 24 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "max_speed": 0.0, + "rho_error": 7.450580596923828e-08, + "rho": [ + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ], + [ + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806, + 1.000000074505806 + ] + ], + "u": [ + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ] + ], + "v": [ + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ] + ], + "history": [ + { + "step": 0, + "mass": 1584.0000118017197 + }, + { + "step": 519, + "mass": 1584.0001180171967, + "u_change": 0.0, + "v_change": 0.0, + "mass_change": 6.705522487271409e-08 + }, + { + "step": 1038, + "mass": 1584.0001180171967, + "u_change": 0.0, + "v_change": 0.0, + "mass_change": 0.0 + }, + { + "step": 1557, + "mass": 1584.0001180171967, + "u_change": 0.0, + "v_change": 0.0, + "mass_change": 0.0 + }, + { + "step": 2076, + "mass": 1584.0001180171967, + "u_change": 0.0, + "v_change": 0.0, + "mass_change": 0.0 + }, + { + "step": 2595, + "mass": 1584.0001180171967, + "u_change": 0.0, + "v_change": 0.0, + "mass_change": 0.0 + }, + { + "step": 3114, + "mass": 1584.0001180171967, + "u_change": 0.0, + "v_change": 0.0, + "mass_change": 0.0 + }, + { + "step": 3633, + "mass": 1584.0001180171967, + "u_change": 0.0, + "v_change": 0.0, + "mass_change": 0.0 + }, + { + "step": 4152, + "mass": 1584.0001180171967, + "u_change": 0.0, + "v_change": 0.0, + "mass_change": 0.0 + } + ], + "checkpoint_bitwise_equal": null, + "population_budget": { + "steps": [ + { + "step": 4153, + "mass": 1584.0001180171967, + "delta_mass": 0.0, + "bottom_net_in": 0.0, + "top_net_in": 0.0, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.666666865348816, + "outgoing": 2.666666865348816 + }, + "flanks": { + "incoming": 5.333333730697632, + "outgoing": 5.333333730697632 + }, + "top": { + "incoming": 8.000000596046448, + "outgoing": 8.000000596046448 + } + } + }, + { + "step": 4154, + "mass": 1584.0001180171967, + "delta_mass": 0.0, + "bottom_net_in": 0.0, + "top_net_in": 0.0, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.666666865348816, + "outgoing": 2.666666865348816 + }, + "flanks": { + "incoming": 5.333333730697632, + "outgoing": 5.333333730697632 + }, + "top": { + "incoming": 8.000000596046448, + "outgoing": 8.000000596046448 + } + } + }, + { + "step": 4155, + "mass": 1584.0001180171967, + "delta_mass": 0.0, + "bottom_net_in": 0.0, + "top_net_in": 0.0, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.666666865348816, + "outgoing": 2.666666865348816 + }, + "flanks": { + "incoming": 5.333333730697632, + "outgoing": 5.333333730697632 + }, + "top": { + "incoming": 8.000000596046448, + "outgoing": 8.000000596046448 + } + } + }, + { + "step": 4156, + "mass": 1584.0001180171967, + "delta_mass": 0.0, + "bottom_net_in": 0.0, + "top_net_in": 0.0, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.666666865348816, + "outgoing": 2.666666865348816 + }, + "flanks": { + "incoming": 5.333333730697632, + "outgoing": 5.333333730697632 + }, + "top": { + "incoming": 8.000000596046448, + "outgoing": 8.000000596046448 + } + } + }, + { + "step": 4157, + "mass": 1584.0001180171967, + "delta_mass": 0.0, + "bottom_net_in": 0.0, + "top_net_in": 0.0, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.666666865348816, + "outgoing": 2.666666865348816 + }, + "flanks": { + "incoming": 5.333333730697632, + "outgoing": 5.333333730697632 + }, + "top": { + "incoming": 8.000000596046448, + "outgoing": 8.000000596046448 + } + } + }, + { + "step": 4158, + "mass": 1584.0001180171967, + "delta_mass": 0.0, + "bottom_net_in": 0.0, + "top_net_in": 0.0, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.666666865348816, + "outgoing": 2.666666865348816 + }, + "flanks": { + "incoming": 5.333333730697632, + "outgoing": 5.333333730697632 + }, + "top": { + "incoming": 8.000000596046448, + "outgoing": 8.000000596046448 + } + } + }, + { + "step": 4159, + "mass": 1584.0001180171967, + "delta_mass": 0.0, + "bottom_net_in": 0.0, + "top_net_in": 0.0, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.666666865348816, + "outgoing": 2.666666865348816 + }, + "flanks": { + "incoming": 5.333333730697632, + "outgoing": 5.333333730697632 + }, + "top": { + "incoming": 8.000000596046448, + "outgoing": 8.000000596046448 + } + } + }, + { + "step": 4160, + "mass": 1584.0001180171967, + "delta_mass": 0.0, + "bottom_net_in": 0.0, + "top_net_in": 0.0, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.666666865348816, + "outgoing": 2.666666865348816 + }, + "flanks": { + "incoming": 5.333333730697632, + "outgoing": 5.333333730697632 + }, + "top": { + "incoming": 8.000000596046448, + "outgoing": 8.000000596046448 + } + } + }, + { + "step": 4161, + "mass": 1584.0001180171967, + "delta_mass": 0.0, + "bottom_net_in": 0.0, + "top_net_in": 0.0, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.666666865348816, + "outgoing": 2.666666865348816 + }, + "flanks": { + "incoming": 5.333333730697632, + "outgoing": 5.333333730697632 + }, + "top": { + "incoming": 8.000000596046448, + "outgoing": 8.000000596046448 + } + } + }, + { + "step": 4162, + "mass": 1584.0001180171967, + "delta_mass": 0.0, + "bottom_net_in": 0.0, + "top_net_in": 0.0, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.666666865348816, + "outgoing": 2.666666865348816 + }, + "flanks": { + "incoming": 5.333333730697632, + "outgoing": 5.333333730697632 + }, + "top": { + "incoming": 8.000000596046448, + "outgoing": 8.000000596046448 + } + } + }, + { + "step": 4163, + "mass": 1584.0001180171967, + "delta_mass": 0.0, + "bottom_net_in": 0.0, + "top_net_in": 0.0, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.666666865348816, + "outgoing": 2.666666865348816 + }, + "flanks": { + "incoming": 5.333333730697632, + "outgoing": 5.333333730697632 + }, + "top": { + "incoming": 8.000000596046448, + "outgoing": 8.000000596046448 + } + } + }, + { + "step": 4164, + "mass": 1584.0001180171967, + "delta_mass": 0.0, + "bottom_net_in": 0.0, + "top_net_in": 0.0, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.666666865348816, + "outgoing": 2.666666865348816 + }, + "flanks": { + "incoming": 5.333333730697632, + "outgoing": 5.333333730697632 + }, + "top": { + "incoming": 8.000000596046448, + "outgoing": 8.000000596046448 + } + } + }, + { + "step": 4165, + "mass": 1584.0001180171967, + "delta_mass": 0.0, + "bottom_net_in": 0.0, + "top_net_in": 0.0, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.666666865348816, + "outgoing": 2.666666865348816 + }, + "flanks": { + "incoming": 5.333333730697632, + "outgoing": 5.333333730697632 + }, + "top": { + "incoming": 8.000000596046448, + "outgoing": 8.000000596046448 + } + } + }, + { + "step": 4166, + "mass": 1584.0001180171967, + "delta_mass": 0.0, + "bottom_net_in": 0.0, + "top_net_in": 0.0, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.666666865348816, + "outgoing": 2.666666865348816 + }, + "flanks": { + "incoming": 5.333333730697632, + "outgoing": 5.333333730697632 + }, + "top": { + "incoming": 8.000000596046448, + "outgoing": 8.000000596046448 + } + } + }, + { + "step": 4167, + "mass": 1584.0001180171967, + "delta_mass": 0.0, + "bottom_net_in": 0.0, + "top_net_in": 0.0, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.666666865348816, + "outgoing": 2.666666865348816 + }, + "flanks": { + "incoming": 5.333333730697632, + "outgoing": 5.333333730697632 + }, + "top": { + "incoming": 8.000000596046448, + "outgoing": 8.000000596046448 + } + } + }, + { + "step": 4168, + "mass": 1584.0001180171967, + "delta_mass": 0.0, + "bottom_net_in": 0.0, + "top_net_in": 0.0, + "collision_roundoff": 0.0, + "physical_residual": 0.0, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.666666865348816, + "outgoing": 2.666666865348816 + }, + "flanks": { + "incoming": 5.333333730697632, + "outgoing": 5.333333730697632 + }, + "top": { + "incoming": 8.000000596046448, + "outgoing": 8.000000596046448 + } + } + } + ], + "instrumented_matches_plain": true, + "audit_source_sha256": "3018b449a088ae6d16a3f13ea99abc9decf1bbe074d543109fc130e54171536a", + "max_relative_residual": 0.0, + "max_physical_relative_residual": 0.0 + } + }, + { + "amplitude": 0.002, + "width": 16, + "nx": 48, + "height": 32, + "viscosity": 0.1, + "top_u": 0.0, + "steps": 20760, + "max_steps": 20760, + "checks": { + "steady": false, + "initialization": true, + "boundary": true, + "mass": false, + "bounded": true, + "flux": true, + "symmetry": true, + "zero": true, + "nonuniform": true, + "restart": true, + "audit": true + }, + "passed": false, + "requested_volume": 0.01706689453125, + "top_target": 0.00035556030273437505, + "bottom_targets": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 2.9327392578125e-05, + 0.000230987548828125, + 0.000556182861328125, + 0.000934600830078125, + 0.0013076477050781251, + 0.0016284484863281251, + 0.001861846923828125, + 0.001984405517578125, + 0.001984405517578125, + 0.001861846923828125, + 0.0016284484863281251, + 0.0013076477050781251, + 0.000934600830078125, + 0.000556182861328125, + 0.000230987548828125, + 2.9327392578125e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "velocity_scale": 0.002, + "rho_scale": 1.0, + "initial_boundary_error": 1.7896178272809593e-08, + "boundary_error": 3.591924287795227e-08, + "mass_offset": 9.442705529450256e-05, + "mass_window_span": 9.109805805329115e-06, + "flux_error": 0.00024177421167541802, + "flux_span": 0.00016401878577321653, + "section_y": [ + 8, + 16, + 24 + ], + "mass_flux_by_y": [ + 0.017071081325411797, + 0.01707097515463829, + 0.01707082986831665, + 0.01707059144973755, + 0.017070382833480835, + 0.017069818452000618, + 0.017070425674319267, + 0.017069661989808083, + 0.017069833353161812, + 0.017070408910512924, + 0.017070742323994637, + 0.017070163041353226, + 0.017070500180125237, + 0.01707073487341404, + 0.017071586102247238, + 0.017071397975087166, + 0.017071818932890892, + 0.017071224749088287, + 0.017071302980184555, + 0.017070617526769638, + 0.017070796340703964, + 0.017070535570383072, + 0.01707109436392784, + 0.01707235723733902, + 0.017072632908821106, + 0.017072737216949463, + 0.017072824761271477, + 0.017072174698114395, + 0.017071420326828957, + 0.01707027107477188, + 0.017069334164261818, + 0.01706894114613533, + 0.017067931592464447 + ], + "volume_flux_by_y": [ + 0.017066846326625106, + 0.017067444204933127, + 0.017067828091237823, + 0.01706796668183108, + 0.01706802299320107, + 0.0170676454551007, + 0.017068386857314342, + 0.017067721608553424, + 0.017067965457725237, + 0.01706859490149605, + 0.017068970634625084, + 0.0170684230883439, + 0.01706878500045061, + 0.01706903998368682, + 0.017069907669246286, + 0.017069731189888044, + 0.017070162146715803, + 0.01706957575692141, + 0.01706966018027035, + 0.01706897916878946, + 0.017069161609391363, + 0.017068904553476226, + 0.01706946523560996, + 0.017070730238746685, + 0.017071007879515203, + 0.017071114139772185, + 0.017071203273050194, + 0.01707055385529089, + 0.017069800952950676, + 0.017068653002769447, + 0.017067717038555027, + 0.01706732537168075, + 0.01706631728770023 + ], + "symmetry": { + "rho": 5.010515451431274e-07, + "u": 9.032788826570339e-05, + "v": 0.00010053689162298619 + }, + "max_speed": 0.001984404848396532, + "rho_error": 0.00034155137836933136, + "rho": [ + [ + 1.000078909099102, + 1.000078771263361, + 1.0000788196921349, + 1.0000784043222666, + 1.0000776052474976, + 1.0000767540186644, + 1.0000756606459618, + 1.0000743754208088, + 1.0000725574791431, + 1.0000703260302544, + 1.0000673215836287, + 1.0000630132853985, + 1.0000566765666008, + 1.0000487715005875, + 1.0000383406877518, + 0.999999538064003, + 0.99992979131639, + 0.9999631196260452, + 1.0000449176877737, + 1.000129047781229, + 1.000206995755434, + 1.000271713361144, + 1.0003178883343935, + 1.0003415513783693, + 1.0003414396196604, + 1.0003178901970387, + 1.0002716891467571, + 1.000206733122468, + 1.0001290254294872, + 1.0000449139624834, + 0.9999632593244314, + 0.999929878860712, + 0.9999997224658728, + 1.0000384375452995, + 1.0000489763915539, + 1.0000571385025978, + 1.0000634416937828, + 1.0000677835196257, + 1.0000703930854797, + 1.0000725388526917, + 1.000074379146099, + 1.0000756531953812, + 1.000076873227954, + 1.000077610835433, + 1.0000781193375587, + 1.0000788029283285, + 1.00007876008749, + 1.0000790171325207 + ], + [ + 1.0000791158527136, + 1.0000790413469076, + 1.0000788103789091, + 1.0000784788280725, + 1.0000776890665293, + 1.000077011063695, + 1.0000759158283472, + 1.0000747479498386, + 1.0000729616731405, + 1.0000706426799297, + 1.0000678859651089, + 1.0000637453049421, + 1.000058265402913, + 1.0000495854765177, + 1.0000372156500816, + 1.0000225771218538, + 1.0000104308128357, + 1.0000300407409668, + 1.000071745365858, + 1.0001251734793186, + 1.0001794323325157, + 1.0002256091684103, + 1.0002593286335468, + 1.0002768114209175, + 1.0002768076956272, + 1.000259330496192, + 1.0002258252352476, + 1.000179285183549, + 1.0001252871006727, + 1.0000717360526323, + 1.0000302009284496, + 1.000010583549738, + 1.0000226981937885, + 1.0000371597707272, + 1.0000499654561281, + 1.000058701261878, + 1.0000641345977783, + 1.0000679176300764, + 1.0000708103179932, + 1.0000729821622372, + 1.0000747740268707, + 1.0000760219991207, + 1.0000768639147282, + 1.0000778939574957, + 1.0000784751027822, + 1.0000789482146502, + 1.0000791605561972, + 1.0000791605561972 + ], + [ + 1.0000794287770987, + 1.0000794157385826, + 1.0000790189951658, + 1.0000786688178778, + 1.0000782068818808, + 1.0000773891806602, + 1.0000764597207308, + 1.0000754073262215, + 1.0000736936926842, + 1.0000716056674719, + 1.000069124624133, + 1.000065851956606, + 1.0000614803284407, + 1.0000561252236366, + 1.0000487733632326, + 1.0000436920672655, + 1.0000493191182613, + 1.0000627003610134, + 1.0000893268734217, + 1.0001251641660929, + 1.0001618657261133, + 1.0001943670213223, + 1.000218091532588, + 1.0002305936068296, + 1.0002307780086994, + 1.0002180486917496, + 1.0001941602677107, + 1.0001618713140488, + 1.0001251343637705, + 1.0000893417745829, + 1.0000628270208836, + 1.000049665570259, + 1.0000438652932644, + 1.0000490006059408, + 1.0000564362853765, + 1.000061772763729, + 1.0000659339129925, + 1.0000693015754223, + 1.0000720508396626, + 1.0000736843794584, + 1.000075250864029, + 1.0000764597207308, + 1.0000774059444666, + 1.0000780653208494, + 1.0000786762684584, + 1.0000791512429714, + 1.000079421326518, + 1.0000794306397438 + ], + [ + 1.0000798720866442, + 1.0000796392560005, + 1.0000795423984528, + 1.0000790283083916, + 1.000078596174717, + 1.0000778269022703, + 1.0000770650804043, + 1.0000763330608606, + 1.0000747293233871, + 1.0000732950866222, + 1.0000714343041182, + 1.0000690445303917, + 1.0000660326331854, + 1.0000631622970104, + 1.000061135739088, + 1.0000616274774075, + 1.0000686664134264, + 1.0000805705785751, + 1.000100288540125, + 1.0001242123544216, + 1.0001491867005825, + 1.0001718495041132, + 1.0001883674412966, + 1.000197384506464, + 1.0001973807811737, + 1.0001887530088425, + 1.000171985477209, + 1.0001494232565165, + 1.000124340876937, + 1.0001002568751574, + 1.0000807754695415, + 1.00006864964962, + 1.0000617504119873, + 1.0000615306198597, + 1.0000634510070086, + 1.0000662244856358, + 1.0000691693276167, + 1.0000713933259249, + 1.0000732950866222, + 1.0000748448073864, + 1.0000762287527323, + 1.000077061355114, + 1.000077947974205, + 1.0000786855816841, + 1.00007900968194, + 1.000079546123743, + 1.0000797342509031, + 1.0000798888504505 + ], + [ + 1.0000803247094154, + 1.000080082565546, + 1.0000799894332886, + 1.000079644843936, + 1.0000792294740677, + 1.0000789426267147, + 1.0000780504196882, + 1.0000772271305323, + 1.0000763051211834, + 1.000075303018093, + 1.0000737514346838, + 1.0000725090503693, + 1.0000712275505066, + 1.0000700633972883, + 1.0000707637518644, + 1.0000737607479095, + 1.0000805165618658, + 1.0000908467918634, + 1.0001053139567375, + 1.0001223664730787, + 1.0001398026943207, + 1.0001554135233164, + 1.0001670867204666, + 1.0001734476536512, + 1.0001735538244247, + 1.000167390331626, + 1.0001557134091854, + 1.0001399517059326, + 1.0001224596053362, + 1.0001054592430592, + 1.0000910740345716, + 1.0000802036374807, + 1.0000738818198442, + 1.000070946291089, + 1.0000701788812876, + 1.0000712145119905, + 1.0000725090503693, + 1.000074053183198, + 1.0000752620398998, + 1.0000764671713114, + 1.0000774040818214, + 1.0000780653208494, + 1.0000787880271673, + 1.0000792536884546, + 1.0000797510147095, + 1.0000801365822554, + 1.0000800658017397, + 1.0000803284347057 + ], + [ + 1.0000809635967016, + 1.0000807326287031, + 1.0000806022435427, + 1.0000803172588348, + 1.0000801123678684, + 1.0000797398388386, + 1.0000792350620031, + 1.0000786744058132, + 1.0000779442489147, + 1.0000772811472416, + 1.0000765267759562, + 1.0000758469104767, + 1.0000757463276386, + 1.0000763405114412, + 1.000078046694398, + 1.0000818595290184, + 1.000087846070528, + 1.00009654648602, + 1.0001075807958841, + 1.0001199264079332, + 1.0001324564218521, + 1.0001434050500393, + 1.0001515578478575, + 1.0001559909433126, + 1.0001563653349876, + 1.000151740387082, + 1.0001435372978449, + 1.0001324769109488, + 1.0001198202371597, + 1.0001075826585293, + 1.0000968724489212, + 1.0000878665596247, + 1.0000818874686956, + 1.0000782199203968, + 1.00007632561028, + 1.0000757034868002, + 1.0000760424882174, + 1.000076785683632, + 1.000077286735177, + 1.0000779684633017, + 1.0000786520540714, + 1.000078996643424, + 1.0000797528773546, + 1.000080220401287, + 1.0000803004950285, + 1.0000805836170912, + 1.0000808015465736, + 1.000080967321992 + ], + [ + 1.0000815745443106, + 1.0000816006213427, + 1.0000814255326986, + 1.0000812113285065, + 1.0000810772180557, + 1.0000807475298643, + 1.0000805109739304, + 1.000080220401287, + 1.0000798925757408, + 1.000079546123743, + 1.000079059973359, + 1.000079270452261, + 1.000079745426774, + 1.0000810455530882, + 1.0000834129750729, + 1.0000872537493706, + 1.0000925939530134, + 1.0000997968018055, + 1.0001080445945263, + 1.0001172944903374, + 1.0001264326274395, + 1.0001342743635178, + 1.000140042975545, + 1.0001432951539755, + 1.0001432858407497, + 1.0001402664929628, + 1.0001342631876469, + 1.0001263413578272, + 1.0001172721385956, + 1.0001081116497517, + 1.0000997558236122, + 1.000092525035143, + 1.0000872258096933, + 1.0000834241509438, + 1.000081043690443, + 1.000079844146967, + 1.0000792518258095, + 1.000079208984971, + 1.0000795982778072, + 1.0000796727836132, + 1.0000801179558039, + 1.0000805407762527, + 1.0000806078314781, + 1.0000809375196695, + 1.0000810716301203, + 1.0000811628997326, + 1.0000813771039248, + 1.000081753358245 + ], + [ + 1.0000822693109512, + 1.0000822953879833, + 1.0000821594148874, + 1.000082017853856, + 1.0000818688422441, + 1.0000818986445665, + 1.0000818613916636, + 1.000081680715084, + 1.0000815652310848, + 1.0000815279781818, + 1.0000815484672785, + 1.0000822879374027, + 1.0000830590724945, + 1.0000848099589348, + 1.0000871848315, + 1.000090703368187, + 1.0000955145806074, + 1.000101299956441, + 1.0001077335327864, + 1.0001147016882896, + 1.000121507793665, + 1.0001270156353712, + 1.0001314021646976, + 1.0001336596906185, + 1.0001337844878435, + 1.0001313537359238, + 1.0001270677894354, + 1.0001212190836668, + 1.0001146998256445, + 1.000107878819108, + 1.0001011583954096, + 1.0000955201685429, + 1.0000908467918634, + 1.000087397173047, + 1.0000847354531288, + 1.0000830702483654, + 1.0000821463763714, + 1.0000817123800516, + 1.000081392005086, + 1.0000816099345684, + 1.0000815726816654, + 1.0000815484672785, + 1.0000816825777292, + 1.0000819023698568, + 1.0000820104032755, + 1.0000821501016617, + 1.0000821202993393, + 1.0000822581350803 + ], + [ + 1.0000829584896564, + 1.0000829380005598, + 1.0000828970223665, + 1.000082977116108, + 1.0000829566270113, + 1.0000829882919788, + 1.000082978978753, + 1.0000831056386232, + 1.0000830348581076, + 1.000083390623331, + 1.000083826482296, + 1.0000845566391945, + 1.0000857170671225, + 1.0000876411795616, + 1.000090166926384, + 1.0000933948904276, + 1.0000971928238869, + 1.0001017414033413, + 1.0001070387661457, + 1.000112161040306, + 1.0001174956560135, + 1.0001215282827616, + 1.000124592334032, + 1.0001262966543436, + 1.00012631341815, + 1.0001247469335794, + 1.0001214910298586, + 1.0001172740012407, + 1.0001123137772083, + 1.0001070220023394, + 1.0001017302274704, + 1.0000975467264652, + 1.0000935532152653, + 1.0000901706516743, + 1.000087659806013, + 1.0000858437269926, + 1.000084588304162, + 1.0000838357955217, + 1.0000832453370094, + 1.0000830944627523, + 1.000082952901721, + 1.0000830199569464, + 1.0000827331095934, + 1.0000829827040434, + 1.0000828858464956, + 1.0000829845666885, + 1.0000829491764307, + 1.00008294172585 + ], + [ + 1.0000834856182337, + 1.0000839792191982, + 1.0000838227570057, + 1.0000839661806822, + 1.0000840425491333, + 1.0000840611755848, + 1.000084174796939, + 1.0000844541937113, + 1.0000844318419695, + 1.0000850893557072, + 1.000085724517703, + 1.0000866502523422, + 1.000087808817625, + 1.0000897627323866, + 1.0000921804457903, + 1.0000950768589973, + 1.0000983010977507, + 1.000101886689663, + 1.0001061018556356, + 1.0001101363450289, + 1.0001139510422945, + 1.0001172628253698, + 1.0001196283847094, + 1.0001206491142511, + 1.0001206584274769, + 1.0001194272190332, + 1.0001172926276922, + 1.0001139864325523, + 1.0001101773232222, + 1.0001060888171196, + 1.0001020953059196, + 1.000098429620266, + 1.0000949073582888, + 1.000092165544629, + 1.0000897664576769, + 1.0000879596918821, + 1.0000865571200848, + 1.0000857133418322, + 1.000085100531578, + 1.0000844355672598, + 1.0000844225287437, + 1.0000841952860355, + 1.0000840723514557, + 1.000083964318037, + 1.000083852559328, + 1.0000838451087475, + 1.0000837035477161, + 1.0000838227570057 + ], + [ + 1.0000844895839691, + 1.000084474682808, + 1.0000846087932587, + 1.0000849328935146, + 1.0000850316137075, + 1.0000851266086102, + 1.0000852663069963, + 1.0000855326652527, + 1.0000859666615725, + 1.0000865906476974, + 1.0000872537493706, + 1.0000882744789124, + 1.0000895336270332, + 1.0000912714749575, + 1.0000934693962336, + 1.0000958163291216, + 1.0000987146049738, + 1.0001017898321152, + 1.0001049395650625, + 1.0001085083931684, + 1.0001112539321184, + 1.0001137536019087, + 1.0001152325421572, + 1.000116167590022, + 1.000116165727377, + 1.0001152195036411, + 1.000113746151328, + 1.0001112800091505, + 1.000108178704977, + 1.000105006620288, + 1.0001019574701786, + 1.0000988245010376, + 1.0000959616154432, + 1.000093450769782, + 1.000091290101409, + 1.0000896342098713, + 1.0000882595777512, + 1.0000872537493706, + 1.0000864434987307, + 1.000085849314928, + 1.000085473060608, + 1.0000851098448038, + 1.0000850688666105, + 1.0000847708433867, + 1.0000844486057758, + 1.000084487721324, + 1.0000844094902277, + 1.0000843591988087 + ], + [ + 1.000085223466158, + 1.0000853706151247, + 1.000085363164544, + 1.000085486099124, + 1.0000856816768646, + 1.0000858772546053, + 1.000086149200797, + 1.0000865887850523, + 1.0000872313976288, + 1.0000876318663359, + 1.0000882782042027, + 1.0000895131379366, + 1.000090878456831, + 1.0000923555344343, + 1.0000944323837757, + 1.0000967737287283, + 1.0000990070402622, + 1.0001012906432152, + 1.0001040566712618, + 1.0001064967364073, + 1.000108990818262, + 1.0001108702272177, + 1.000112060457468, + 1.000112783163786, + 1.000112745910883, + 1.000112384557724, + 1.000110836699605, + 1.0001089796423912, + 1.0001068450510502, + 1.000104060396552, + 1.00010147690773, + 1.000099005177617, + 1.000096581876278, + 1.0000944454222918, + 1.0000925213098526, + 1.000090865418315, + 1.0000897087156773, + 1.0000885836780071, + 1.0000876281410456, + 1.0000870414078236, + 1.0000864528119564, + 1.0000861156731844, + 1.0000855308026075, + 1.0000855810940266, + 1.0000855028629303, + 1.0000853650271893, + 1.0000852271914482, + 1.0000852551311255 + ], + [ + 1.0000859573483467, + 1.0000861287117004, + 1.0000861287117004, + 1.0000861920416355, + 1.0000864565372467, + 1.000086560845375, + 1.0000872444361448, + 1.000087583437562, + 1.0000879503786564, + 1.0000886861234903, + 1.0000895410776138, + 1.000090440735221, + 1.000091778114438, + 1.0000930577516556, + 1.0000948999077082, + 1.000096995383501, + 1.000098979100585, + 1.000100988894701, + 1.0001031700521708, + 1.0001051891595125, + 1.00010702945292, + 1.000108564272523, + 1.000109575688839, + 1.0001102797687054, + 1.0001102443784475, + 1.0001095440238714, + 1.0001087076961994, + 1.0001070275902748, + 1.0001051668077707, + 1.0001031756401062, + 1.0001011416316032, + 1.0000989716500044, + 1.000096958130598, + 1.0000951662659645, + 1.0000933445990086, + 1.000091752037406, + 1.0000905729830265, + 1.0000896472483873, + 1.0000886842608452, + 1.000087982043624, + 1.0000877156853676, + 1.0000870544463396, + 1.0000865757465363, + 1.0000864621251822, + 1.0000861939042807, + 1.0000861193984747, + 1.000085860490799, + 1.0000859890133142 + ], + [ + 1.000086560845375, + 1.0000865515321493, + 1.0000867433845997, + 1.0000870861113071, + 1.0000872313976288, + 1.0000875778496265, + 1.0000878870487213, + 1.00008830614388, + 1.0000889375805855, + 1.0000894870609045, + 1.0000903978943825, + 1.0000913254916668, + 1.0000926069915295, + 1.0000939704477787, + 1.0000952165573835, + 1.0000970736145973, + 1.0000988859683275, + 1.0001005604863167, + 1.0001021567732096, + 1.000104021281004, + 1.0001055356115103, + 1.0001065358519554, + 1.0001076310873032, + 1.0001077372580767, + 1.0001077596098185, + 1.0001077000051737, + 1.000106554478407, + 1.0001052767038345, + 1.000103909522295, + 1.000102249905467, + 1.0001006200909615, + 1.0000988747924566, + 1.0000970494002104, + 1.0000955369323492, + 1.0000939443707466, + 1.0000925976783037, + 1.0000913348048925, + 1.0000905003398657, + 1.0000896528363228, + 1.0000889729708433, + 1.0000882614403963, + 1.0000878851860762, + 1.0000873487442732, + 1.000087222084403, + 1.0000867694616318, + 1.0000868011265993, + 1.000086784362793, + 1.0000866763293743 + ], + [ + 1.0000872854143381, + 1.0000874437391758, + 1.000087333843112, + 1.0000876225531101, + 1.0000876542180777, + 1.000088119879365, + 1.0000883787870407, + 1.000089231878519, + 1.0000894870609045, + 1.0000904370099306, + 1.0000910609960556, + 1.0000919830054045, + 1.0000930447131395, + 1.0000943057239056, + 1.0000955890864134, + 1.0000971984118223, + 1.0000985972583294, + 1.000100065022707, + 1.0001016352325678, + 1.0001028515398502, + 1.0001040678471327, + 1.0001049786806107, + 1.0001056417822838, + 1.0001058410853148, + 1.0001059714704752, + 1.000105595216155, + 1.0001048129051924, + 1.0001039616763592, + 1.0001027509570122, + 1.000101424753666, + 1.000100128352642, + 1.0000987127423286, + 1.000097181648016, + 1.0000957995653152, + 1.0000942908227444, + 1.0000930689275265, + 1.0000920109450817, + 1.0000910591334105, + 1.0000904146581888, + 1.0000896640121937, + 1.0000890418887138, + 1.0000883974134922, + 1.0000881496816874, + 1.0000876840204, + 1.0000876374542713, + 1.0000875182449818, + 1.0000874195247889, + 1.0000871922820807 + ], + [ + 1.000087833032012, + 1.0000879783183336, + 1.0000879503786564, + 1.000088270753622, + 1.000088419765234, + 1.0000886712223291, + 1.0000891834497452, + 1.00008986890316, + 1.000090291723609, + 1.0000909231603146, + 1.0000915098935366, + 1.0000925604254007, + 1.0000936444848776, + 1.0000947210937738, + 1.0000958126038313, + 1.0000970233231783, + 1.0000982638448477, + 1.000099690631032, + 1.0001008678227663, + 1.0001022275537252, + 1.000102959573269, + 1.00010378472507, + 1.0001043509691954, + 1.000104546546936, + 1.000104520469904, + 1.0001043546944857, + 1.00010378472507, + 1.0001028403639793, + 1.0001019854098558, + 1.000100875273347, + 1.0000997092574835, + 1.0000984016805887, + 1.0000971872359514, + 1.0000958126038313, + 1.0000947304069996, + 1.0000936426222324, + 1.0000924710184336, + 1.0000914856791496, + 1.0000908803194761, + 1.0000901278108358, + 1.0000895280390978, + 1.0000890642404556, + 1.0000886917114258, + 1.0000882856547832, + 1.0000882912427187, + 1.0000879615545273, + 1.0000879913568497, + 1.000087983906269 + ], + [ + 1.0000886358320713, + 1.0000884011387825, + 1.0000887606292963, + 1.0000887103378773, + 1.0000890493392944, + 1.0000893957912922, + 1.0000898148864508, + 1.0000900775194168, + 1.0000908821821213, + 1.0000913478434086, + 1.0000919979065657, + 1.0000928435474634, + 1.0000935792922974, + 1.0000949203968048, + 1.0000960361212492, + 1.0000970140099525, + 1.0000982694327831, + 1.0000993441790342, + 1.000100277364254, + 1.000101177021861, + 1.0001022815704346, + 1.0001026932150126, + 1.0001031123101711, + 1.000103311613202, + 1.0001033209264278, + 1.0001031197607517, + 1.0001027528196573, + 1.0001019462943077, + 1.0001011658459902, + 1.0001004301011562, + 1.000099191442132, + 1.0000981371849775, + 1.0000970046967268, + 1.0000960566103458, + 1.0000950545072556, + 1.000093787908554, + 1.0000926796346903, + 1.000092001631856, + 1.000091377645731, + 1.0000905953347683, + 1.0000899583101273, + 1.00008974224329, + 1.0000890083611012, + 1.0000889096409082, + 1.0000887159258127, + 1.000088406726718, + 1.00008843280375, + 1.0000886488705873 + ], + [ + 1.0000889226794243, + 1.00008893199265, + 1.0000890586525202, + 1.0000893659889698, + 1.0000895038247108, + 1.0000898279249668, + 1.000089904293418, + 1.0000906120985746, + 1.0000910367816687, + 1.0000918563455343, + 1.0000925529748201, + 1.0000930335372686, + 1.0000940393656492, + 1.0000951811671257, + 1.0000962987542152, + 1.0000972244888544, + 1.0000981707125902, + 1.0000989940017462, + 1.0000997856259346, + 1.0001006834208965, + 1.0001014862209558, + 1.000101774930954, + 1.000102188438177, + 1.0001023951917887, + 1.0001023951917887, + 1.0001022275537252, + 1.0001016315072775, + 1.0001011360436678, + 1.000100463628769, + 1.0000996235758066, + 1.000098841264844, + 1.0000978894531727, + 1.0000970773398876, + 1.0000961255282164, + 1.0000951625406742, + 1.0000940579921007, + 1.000093037262559, + 1.0000925567001104, + 1.0000916942954063, + 1.0000910684466362, + 1.0000904649496078, + 1.0000898987054825, + 1.0000897031277418, + 1.0000895410776138, + 1.000089019536972, + 1.0000887289643288, + 1.0000889264047146, + 1.000089069828391 + ], + [ + 1.0000893715769053, + 1.0000893473625183, + 1.0000893510878086, + 1.0000894628465176, + 1.0000897962599993, + 1.0000898987054825, + 1.0000904090702534, + 1.0000909231603146, + 1.0000914670526981, + 1.0000919979065657, + 1.000092752277851, + 1.0000934805721045, + 1.0000942200422287, + 1.0000951532274485, + 1.0000960044562817, + 1.0000968649983406, + 1.000097906216979, + 1.0000985972583294, + 1.0000994559377432, + 1.0001002866774797, + 1.00010085105896, + 1.0001011546701193, + 1.000101462006569, + 1.000101676210761, + 1.0001016650348902, + 1.0001015830785036, + 1.0001011285930872, + 1.000100551173091, + 1.0001000761985779, + 1.0000994820147753, + 1.0000986028462648, + 1.0000975839793682, + 1.0000970847904682, + 1.0000961236655712, + 1.0000952240079641, + 1.0000942312180996, + 1.0000934712588787, + 1.000092726200819, + 1.000092014670372, + 1.0000913962721825, + 1.000090828165412, + 1.000090455636382, + 1.0000899154692888, + 1.0000896640121937, + 1.0000895261764526, + 1.0000893604010344, + 1.0000891480594873, + 1.000089157372713 + ], + [ + 1.000089468434453, + 1.0000894591212273, + 1.0000897943973541, + 1.0000898279249668, + 1.0000900756567717, + 1.0000904370099306, + 1.0000909250229597, + 1.0000913925468922, + 1.00009198859334, + 1.0000923871994019, + 1.0000930987298489, + 1.0000936519354582, + 1.000094359740615, + 1.0000951569527388, + 1.0000961497426033, + 1.0000969395041466, + 1.0000976864248514, + 1.000098342075944, + 1.0000992361456156, + 1.0000998098403215, + 1.0001004412770271, + 1.0001005735248327, + 1.0001010056585073, + 1.0001011285930872, + 1.0001009963452816, + 1.0001010186970234, + 1.000100588425994, + 1.000100251287222, + 1.0000996962189674, + 1.0000991206616163, + 1.000098329037428, + 1.0000976771116257, + 1.0000969283282757, + 1.0000961069017649, + 1.0000952687114477, + 1.0000942163169384, + 1.0000936593860388, + 1.000093063339591, + 1.0000922586768866, + 1.0000916868448257, + 1.000091079622507, + 1.000090852379799, + 1.0000903904438019, + 1.0000899489969015, + 1.0000898335129023, + 1.0000897012650967, + 1.0000894833356142, + 1.0000894777476788 + ], + [ + 1.0000897962599993, + 1.0000897888094187, + 1.0000901333987713, + 1.0000902563333511, + 1.0000904314219952, + 1.0000905320048332, + 1.0000909343361855, + 1.0000915676355362, + 1.000092165544629, + 1.0000925846397877, + 1.0000931825488806, + 1.0000938829034567, + 1.0000947136431932, + 1.0000953394919634, + 1.0000961441546679, + 1.0000969395041466, + 1.0000975616276264, + 1.000098256394267, + 1.0000989865511656, + 1.000099429860711, + 1.0000999476760626, + 1.0001004058867693, + 1.0001004301011562, + 1.000100502744317, + 1.000100515782833, + 1.0001005660742521, + 1.0001001562923193, + 1.0000997390598059, + 1.0000994503498077, + 1.0000989940017462, + 1.000098405405879, + 1.000097507610917, + 1.0000968668609858, + 1.000096244737506, + 1.0000953767448664, + 1.00009448453784, + 1.000093786045909, + 1.0000930670648813, + 1.0000925492495298, + 1.0000919420272112, + 1.000091576948762, + 1.0000910758972168, + 1.00009042955935, + 1.0000903755426407, + 1.0000899191945791, + 1.0000896323472261, + 1.0000898521393538, + 1.0000897869467735 + ], + [ + 1.000089816749096, + 1.000089954584837, + 1.0000899452716112, + 1.0000902656465769, + 1.0000904742628336, + 1.0000908579677343, + 1.0000914055854082, + 1.0000918060541153, + 1.0000922437757254, + 1.0000927671790123, + 1.0000934582203627, + 1.0000940915197134, + 1.0000947248190641, + 1.0000953171402216, + 1.0000961292535067, + 1.0000968780368567, + 1.0000974275171757, + 1.0000979490578175, + 1.0000985730439425, + 1.0000992566347122, + 1.0000996142625809, + 1.0001000743359327, + 1.0001000761985779, + 1.000100314617157, + 1.0001001451164484, + 1.0001000575721264, + 1.0000996496528387, + 1.0000994950532913, + 1.000099217519164, + 1.0000987369567156, + 1.0000979527831078, + 1.0000974014401436, + 1.0000969339162111, + 1.0000962913036346, + 1.000095346942544, + 1.000094497576356, + 1.0000938773155212, + 1.0000933427363634, + 1.0000926237553358, + 1.0000920705497265, + 1.000091653317213, + 1.000091202557087, + 1.0000908877700567, + 1.0000904966145754, + 1.000090280547738, + 1.0000899955630302, + 1.000089842826128, + 1.000089854001999 + ], + [ + 1.000089829787612, + 1.0000897962599993, + 1.000090103596449, + 1.0000905338674784, + 1.0000905971974134, + 1.0000908188521862, + 1.0000915136188269, + 1.0000916980206966, + 1.000092277303338, + 1.0000931043177843, + 1.0000937338918447, + 1.0000941473990679, + 1.0000946950167418, + 1.000095320865512, + 1.0000962298363447, + 1.0000969115644693, + 1.0000973977148533, + 1.0000979844480753, + 1.0000984892249107, + 1.000099040567875, + 1.0000994708389044, + 1.0000998117029667, + 1.0001001115888357, + 1.0001001320779324, + 1.0001000985503197, + 1.0000997986644506, + 1.000099679455161, + 1.0000994838774204, + 1.0000989735126495, + 1.0000986084342003, + 1.0000979863107204, + 1.0000973958522081, + 1.0000968966633081, + 1.0000962298363447, + 1.0000953394919634, + 1.0000947285443544, + 1.0000941473990679, + 1.0000936277210712, + 1.000092875212431, + 1.000092389062047, + 1.0000916793942451, + 1.0000913850963116, + 1.0000908114016056, + 1.0000907387584448, + 1.0000904966145754, + 1.0000900514423847, + 1.0000899694859982, + 1.0000898409634829 + ], + [ + 1.0000898484140635, + 1.0000899285078049, + 1.0000903271138668, + 1.000090392306447, + 1.0000907704234123, + 1.0000910852104425, + 1.0000915247946978, + 1.000091664493084, + 1.00009223818779, + 1.0000930428504944, + 1.0000935569405556, + 1.0000942759215832, + 1.0000950153917074, + 1.0000953152775764, + 1.0000960659235716, + 1.0000968910753727, + 1.000097531825304, + 1.0000980142503977, + 1.000098591670394, + 1.0000990387052298, + 1.0000993460416794, + 1.000099714845419, + 1.0000996720045805, + 1.0000997800379992, + 1.0000998079776764, + 1.0000996552407742, + 1.0000995695590973, + 1.0000993460416794, + 1.0000990517437458, + 1.0000985749065876, + 1.0000979825854301, + 1.000097380951047, + 1.0000968985259533, + 1.000096207484603, + 1.0000954698771238, + 1.0000947266817093, + 1.00009411200881, + 1.0000936519354582, + 1.0000930950045586, + 1.0000924076884985, + 1.0000919997692108, + 1.0000913497060537, + 1.0000908747315407, + 1.0000908840447664, + 1.0000903885811567, + 1.0000900626182556, + 1.00008999183774, + 1.0000898446887732 + ], + [ + 1.0000898614525795, + 1.0000899899750948, + 1.000090342015028, + 1.0000904258340597, + 1.000090727582574, + 1.0000909361988306, + 1.0000913124531507, + 1.0000917669385672, + 1.0000924356281757, + 1.0000930782407522, + 1.0000935979187489, + 1.0000941008329391, + 1.000094873830676, + 1.000095533207059, + 1.0000961907207966, + 1.0000968277454376, + 1.0000975150614977, + 1.0000979248434305, + 1.0000984575599432, + 1.0000990349799395, + 1.0000993218272924, + 1.0000995267182589, + 1.0000996384769678, + 1.0000997968018055, + 1.0000997744500637, + 1.0000998191535473, + 1.0000995714217424, + 1.0000993236899376, + 1.0000990312546492, + 1.0000986084342003, + 1.0000979341566563, + 1.000097345560789, + 1.0000968649983406, + 1.0000962298363447, + 1.0000953078269958, + 1.0000947527587414, + 1.0000941380858421, + 1.000093575567007, + 1.0000930111855268, + 1.0000926665961742, + 1.000092014670372, + 1.0000913012772799, + 1.0000909566879272, + 1.0000906307250261, + 1.0000904183834791, + 1.0000901017338037, + 1.0000900123268366, + 1.0000900272279978 + ], + [ + 1.0000898260623217, + 1.0000897943973541, + 1.00008999183774, + 1.0000904332846403, + 1.0000904146581888, + 1.000090915709734, + 1.0000913254916668, + 1.000091990455985, + 1.0000924225896597, + 1.0000928323715925, + 1.0000934395939112, + 1.000094249844551, + 1.0000949762761593, + 1.0000957529991865, + 1.000096295028925, + 1.000096807256341, + 1.0000974778085947, + 1.0000979620963335, + 1.0000984128564596, + 1.0000989940017462, + 1.0000992938876152, + 1.000099653378129, + 1.0000997800379992, + 1.0000998880714178, + 1.0000998824834824, + 1.000100089237094, + 1.0000996366143227, + 1.0000992771238089, + 1.0000990610569715, + 1.0000986643135548, + 1.000098116695881, + 1.0000974722206593, + 1.0000968407839537, + 1.0000960491597652, + 1.000095320865512, + 1.0000947583466768, + 1.0000941827893257, + 1.0000936053693295, + 1.0000927820801735, + 1.0000924207270145, + 1.0000920072197914, + 1.000091303139925, + 1.0000908970832825, + 1.00009042955935, + 1.0000903327018023, + 1.0000898651778698, + 1.0000898130238056, + 1.0000896751880646 + ], + [ + 1.0000894721597433, + 1.0000898148864508, + 1.0000897962599993, + 1.0000901203602552, + 1.0000904724001884, + 1.0000909380614758, + 1.0000913236290216, + 1.0000917669385672, + 1.0000922810286283, + 1.0000926833599806, + 1.0000934209674597, + 1.0000941418111324, + 1.0000950042158365, + 1.000095758587122, + 1.000096259638667, + 1.0000968091189861, + 1.0000975858420134, + 1.000098068267107, + 1.0000986885279417, + 1.0000990070402622, + 1.0000994335860014, + 1.0000997595489025, + 1.0001000687479973, + 1.000100065022707, + 1.0001001097261906, + 1.0001000724732876, + 1.000099902972579, + 1.000099390745163, + 1.0000989753752947, + 1.0000986903905869, + 1.0000980906188488, + 1.0000974535942078, + 1.0000968351960182, + 1.0000961702317, + 1.0000955145806074, + 1.0000947415828705, + 1.0000941287726164, + 1.0000935718417168, + 1.0000928081572056, + 1.0000922568142414, + 1.0000917874276638, + 1.000091329216957, + 1.0000909119844437, + 1.0000903513282537, + 1.0000899620354176, + 1.000089842826128, + 1.0000896230340004, + 1.0000896509736776 + ], + [ + 1.0000893212854862, + 1.0000895094126463, + 1.0000896360725164, + 1.0000898521393538, + 1.000090243294835, + 1.0000906866043806, + 1.0000909846276045, + 1.0000915359705687, + 1.000092089176178, + 1.000092726200819, + 1.0000936035066843, + 1.0000941194593906, + 1.0000950153917074, + 1.0000957269221544, + 1.0000963974744081, + 1.0000971090048552, + 1.0000978875905275, + 1.000098453834653, + 1.000099029392004, + 1.000099379569292, + 1.0000997446477413, + 1.0001000706106424, + 1.0001000687479973, + 1.000100377947092, + 1.000100476667285, + 1.000100264325738, + 1.0001000557094812, + 1.0000998489558697, + 1.0000993944704533, + 1.000098967924714, + 1.0000982005149126, + 1.0000975728034973, + 1.0000969972461462, + 1.0000962261110544, + 1.0000954698771238, + 1.0000948645174503, + 1.000094162300229, + 1.000093461945653, + 1.0000927224755287, + 1.000092275440693, + 1.0000918414443731, + 1.0000913832336664, + 1.000090716406703, + 1.0000900868326426, + 1.0000898260623217, + 1.000089617446065, + 1.0000893361866474, + 1.0000893604010344 + ], + [ + 1.0000890456140041, + 1.0000891890376806, + 1.0000892858952284, + 1.0000895000994205, + 1.0000899862498045, + 1.0000903885811567, + 1.0000908449292183, + 1.0000913050025702, + 1.00009192712605, + 1.0000925790518522, + 1.0000933408737183, + 1.000094098970294, + 1.0000950265675783, + 1.0000957753509283, + 1.0000965781509876, + 1.0000973083078861, + 1.0000979620963335, + 1.0000985506922007, + 1.000098928809166, + 1.0000996012240648, + 1.0001000668853521, + 1.0001005176454782, + 1.000100551173091, + 1.0001006834208965, + 1.0001008231192827, + 1.0001007188111544, + 1.000100502744317, + 1.0001000799238682, + 1.0000997371971607, + 1.0000992845743895, + 1.0000985190272331, + 1.0000979732722044, + 1.0000971686095, + 1.0000963769853115, + 1.0000956188887358, + 1.0000948589295149, + 1.0000940691679716, + 1.0000933706760406, + 1.0000925194472075, + 1.0000919848680496, + 1.0000914260745049, + 1.0000908821821213, + 1.0000902898609638, + 1.0000898241996765, + 1.0000896137207747, + 1.0000893268734217, + 1.0000890512019396, + 1.0000888369977474 + ], + [ + 1.0000885538756847, + 1.0000887233763933, + 1.0000888742506504, + 1.000089157372713, + 1.0000894740223885, + 1.0000899657607079, + 1.0000904370099306, + 1.00009086728096, + 1.0000917594879866, + 1.0000925417989492, + 1.000093039125204, + 1.0000938940793276, + 1.000094885006547, + 1.0000958256423473, + 1.000096820294857, + 1.0000974498689175, + 1.0000982154160738, + 1.0000989902764559, + 1.0000995080918074, + 1.0001001209020615, + 1.0001005586236715, + 1.0001008417457342, + 1.0001011975109577, + 1.0001010689884424, + 1.0001011919230223, + 1.0001011062413454, + 1.0001008342951536, + 1.0001005735248327, + 1.0001000370830297, + 1.0000994466245174, + 1.0000988468527794, + 1.0000981874763966, + 1.0000972915440798, + 1.0000967364758253, + 1.000095620751381, + 1.0000948421657085, + 1.0000941287726164, + 1.0000931527465582, + 1.0000923685729504, + 1.000091776251793, + 1.0000910088419914, + 1.0000905971974134, + 1.0000900942832232, + 1.000089494511485, + 1.0000891461968422, + 1.0000888463109732, + 1.000088719651103, + 1.000088568776846 + ], + [ + 1.0000881124287844, + 1.0000882428139448, + 1.0000884421169758, + 1.0000883918255568, + 1.0000890493392944, + 1.0000896528363228, + 1.0000899098813534, + 1.0000905692577362, + 1.0000914577394724, + 1.0000920835882425, + 1.0000930726528168, + 1.0000937841832638, + 1.0000947378575802, + 1.0000958275049925, + 1.0000968221575022, + 1.000097781419754, + 1.0000984501093626, + 1.0000992715358734, + 1.0000999085605145, + 1.000100577250123, + 1.0001011118292809, + 1.0001014079898596, + 1.0001017823815346, + 1.0001019183546305, + 1.0001019462943077, + 1.0001017656177282, + 1.0001013055443764, + 1.0001011230051517, + 1.000100588425994, + 1.0001000482589006, + 1.0000990200787783, + 1.000098468735814, + 1.000097643584013, + 1.000096533447504, + 1.0000957604497671, + 1.0000949073582888, + 1.0000939071178436, + 1.000093013048172, + 1.0000923853367567, + 1.0000915545970201, + 1.0000906474888325, + 1.000090267509222, + 1.0000895895063877, + 1.0000890120863914, + 1.0000887755304575, + 1.000088419765234, + 1.0000882260501385, + 1.0000881142914295 + ], + [ + 1.000087358057499, + 1.0000876784324646, + 1.00008780695498, + 1.000088106840849, + 1.000088268890977, + 1.000088730826974, + 1.0000895950943232, + 1.0000902377068996, + 1.0000909958034754, + 1.0000919736921787, + 1.0000928547233343, + 1.0000936686992645, + 1.000094911083579, + 1.0000958107411861, + 1.0000969283282757, + 1.0000980012118816, + 1.0000988580286503, + 1.000099465250969, + 1.0001001805067062, + 1.0001011099666357, + 1.0001016538590193, + 1.0001021977514029, + 1.0001025050878525, + 1.0001027043908834, + 1.0001026708632708, + 1.0001025199890137, + 1.0001022014766932, + 1.0001016575843096, + 1.0001010969281197, + 1.0001002009958029, + 1.0000995080918074, + 1.0000985190272331, + 1.000097768381238, + 1.000096831470728, + 1.0000955816358328, + 1.0000947397202253, + 1.0000938270241022, + 1.0000928491353989, + 1.0000919550657272, + 1.0000909976661205, + 1.000090355053544, + 1.0000898707658052, + 1.0000891704112291, + 1.000088533386588, + 1.0000882279127836, + 1.000087795779109, + 1.0000876672565937, + 1.0000873245298862 + ], + [ + 1.000086609274149, + 1.000086722895503, + 1.0000868923962116, + 1.0000873561948538, + 1.000088008120656, + 1.0000882912427187, + 1.0000890754163265, + 1.000089829787612, + 1.0000905822962523, + 1.0000915080308914, + 1.0000924859195948, + 1.0000936836004257, + 1.0000947266817093, + 1.0000957939773798, + 1.0000968743115664, + 1.0000979471951723, + 1.0000990200787783, + 1.0000999849289656, + 1.0001011155545712, + 1.0001016352325678, + 1.0001024100929499, + 1.0001028012484312, + 1.0001033507287502, + 1.000103484839201, + 1.0001034885644913, + 1.0001033749431372, + 1.0001029949635267, + 1.0001022405922413, + 1.0001016445457935, + 1.0001009851694107, + 1.0001000054180622, + 1.0000989232212305, + 1.000097842887044, + 1.000096868723631, + 1.0000958163291216, + 1.0000946670770645, + 1.0000934656709433, + 1.0000925119966269, + 1.0000915136188269, + 1.000090729445219, + 1.0000898391008377, + 1.0000891815871, + 1.0000884477049112, + 1.0000878032296896, + 1.0000873655080795, + 1.00008705817163, + 1.0000867452472448, + 1.0000866204500198 + ] + ], + "u": [ + [ + 0.0, + 0.0, + 0.0, + -1.8624991212496333e-09, + 0.0, + 1.8625021947027424e-09, + 0.0, + 0.0, + 0.0, + 0.0, + 1.8625197614510765e-09, + 3.725055570472127e-09, + 0.0, + 3.7251086193246983e-09, + 0.0, + -3.725292019308397e-09, + -1.8627759322770226e-09, + -3.725427693628397e-09, + -1.8625614872756123e-09, + -3.7248096200449466e-09, + 0.0, + 9.310695905675664e-09, + -5.586159672698861e-09, + 5.586027532289608e-09, + -5.5860281563637505e-09, + 0.0, + 0.0, + -1.8622601583735688e-09, + -3.724809703290189e-09, + 1.8625614942138829e-09, + -9.313567932932596e-09, + -3.725551538380261e-09, + 1.8626456661786964e-09, + -7.450294225902025e-09, + 7.4502157122419445e-09, + 7.450154906228364e-09, + 3.725053974728325e-09, + 1.8625189011444682e-09, + 0.0, + 0.0, + 0.0, + 0.0, + -1.8625019726922456e-09, + -5.587501797010421e-09, + 0.0, + 1.8624983789046923e-09, + 0.0, + -3.724995959962507e-09 + ], + [ + -2.439872112929827e-07, + -6.984367255820892e-07, + -1.1826864617934732e-06, + -1.633411607646821e-06, + -2.2033380362649363e-06, + -2.7732650551130926e-06, + -3.4139693842265887e-06, + -4.056537917132276e-06, + -4.818311448995455e-06, + -5.818492412300354e-06, + -7.163246960009067e-06, + -9.105891676748444e-06, + -1.2175401935823347e-05, + -1.6839339807508486e-05, + -2.654915591304164e-05, + -5.4520255252693e-05, + -0.00011829163425946263, + -0.00019912568573083827, + -0.00025623316021847485, + -0.0002737447690293783, + -0.0002540303929600592, + -0.0002038670834289004, + -0.00013139416745983296, + -4.5316788147166133e-05, + 4.532051257533241e-05, + 0.00013140720235079213, + 0.0002039005594329441, + 0.0002539466263267699, + 0.00027371307692920137, + 0.00025616424967768073, + 0.00019908467687861824, + 0.00011828789094128398, + 5.451093563761249e-05, + 2.6467204055337415e-05, + 1.6742480700752142e-05, + 1.2063644480415061e-05, + 9.174801582902479e-06, + 7.232159923301482e-06, + 5.915342126700489e-06, + 4.872324117638958e-06, + 4.052812799593384e-06, + 3.400931496884462e-06, + 2.797477989035294e-06, + 2.229412585860252e-06, + 1.7041865753296665e-06, + 1.2348362458231315e-06, + 8.027365142495947e-07, + 2.7006216836703303e-07 + ], + [ + -6.649115051677174e-07, + -2.037571977975121e-06, + -3.462383738336467e-06, + -4.918858878305694e-06, + -6.591385691406158e-06, + -8.422229575376216e-06, + -1.0461677906259197e-05, + -1.283638241122377e-05, + -1.5786616910786447e-05, + -1.959548646717098e-05, + -2.4799405912397774e-05, + -3.2143413278771455e-05, + -4.3305699916114784e-05, + -6.125896078533236e-05, + -9.168796083097466e-05, + -0.00014352357642253462, + -0.00022152836317568988, + -0.00030778653787367436, + -0.00037056064051271034, + -0.0003902777554572868, + -0.0003627268200304593, + -0.0002924119807962401, + -0.00018918672333308515, + -6.541405209482594e-05, + 6.538983123505421e-05, + 0.00018922956293531608, + 0.00029249584400228607, + 0.00036266163597477086, + 0.0003903038408563797, + 0.00037048986079884095, + 0.00030775669844180636, + 0.00022152456132526848, + 0.00014351423874437358, + 9.163206338008617e-05, + 6.123845379071048e-05, + 4.3262849060583404e-05, + 3.2147135689278826e-05, + 2.4816164169080417e-05, + 1.970536589070524e-05, + 1.5881604961285994e-05, + 1.2873634519363601e-05, + 1.0457952900773614e-05, + 8.468791958713106e-06, + 6.636086618478844e-06, + 5.045508747465938e-06, + 3.486595750972923e-06, + 2.140009314087884e-06, + 8.008738002510036e-07 + ], + [ + -1.2869850039408468e-06, + -3.929868293090278e-06, + -6.757139122357441e-06, + -9.632839444816178e-06, + -1.2881041451496841e-05, + -1.6470089238623794e-05, + -2.067749293410656e-05, + -2.5566578388309234e-05, + -3.1603001221252614e-05, + -3.9421857800140165e-05, + -4.9797986070506665e-05, + -6.40146939145885e-05, + -8.41245384905226e-05, + -0.00011352105159524904, + -0.00015685120938272335, + -0.0002175174713450355, + -0.00029178381597553204, + -0.0003652352865458376, + -0.00041688150589533075, + -0.00042949124974481673, + -0.0003959579135233057, + -0.00031850787651688733, + -0.0002060759062872698, + -7.12842606136627e-05, + 7.120604522116483e-05, + 0.00020607768913971883, + 0.00031854694203781685, + 0.000395967131705447, + 0.0004295005066202591, + 0.0004168461323844724, + 0.0003651756118878999, + 0.000291819208695077, + 0.00021747646894324868, + 0.0001567952715326104, + 0.00011354150661933611, + 8.410775965585038e-05, + 6.398302314884097e-05, + 4.974583777000031e-05, + 3.945538295559715e-05, + 3.169612285940212e-05, + 2.5622456150096017e-05, + 2.0673768007885624e-05, + 1.6535274743703242e-05, + 1.2940640255050855e-05, + 9.707339543981893e-06, + 6.775764067135284e-06, + 4.024855248669852e-06, + 1.3596223402727874e-06 + ], + [ + -2.056195081478555e-06, + -6.347386353595393e-06, + -1.075777787340247e-05, + -1.541216111071979e-05, + -2.0621573255881645e-05, + -2.6395323338743777e-05, + -3.3064958600401444e-05, + -4.089121634006374e-05, + -5.048873215652719e-05, + -6.25429144409578e-05, + -7.80781889224604e-05, + -9.846718398753876e-05, + -0.00012565999247485355, + -0.00016204808756930023, + -0.00020985496677450327, + -0.000268595970421231, + -0.00033244607849673333, + -0.00038992982721428813, + -0.00042625497941572933, + -0.00042838017933837766, + -0.00038992750197911906, + -0.00031185332665961885, + -0.00020125870832955094, + -6.954097079921542e-05, + 6.944598499853495e-05, + 0.00020126795890245086, + 0.00031190351674297327, + 0.0003899348934215454, + 0.00042834289110568215, + 0.0004261953191336641, + 0.00038990738890733455, + 0.00033246108248503745, + 0.0002685307501401672, + 0.00020979905308013267, + 0.00016204434382777213, + 0.00012565068155060015, + 9.843738382593248e-05, + 7.800739008969106e-05, + 6.257271708323347e-05, + 5.055763657641714e-05, + 4.095267163734406e-05, + 3.307240810674399e-05, + 2.641953989841386e-05, + 2.0623435254121894e-05, + 1.5462446883086588e-05, + 1.079316371254175e-05, + 6.36414892423617e-06, + 2.123244913182918e-06 + ], + [ + -2.978128473627636e-06, + -8.949287442554491e-06, + -1.533392156513801e-05, + -2.2003522530400174e-05, + -2.9263536213538528e-05, + -3.7354232492497187e-05, + -4.6646251743840184e-05, + -5.7454357376048624e-05, + -7.044719917048423e-05, + -8.631203121286813e-05, + -0.00010609373662403003, + -0.00013087069791775343, + -0.0001621049043572683, + -0.00020086535724500812, + -0.0002473641842479181, + -0.000299377074421073, + -0.00035117461886745874, + -0.000393324741718662, + -0.00041531959992994897, + -0.0004077642152104595, + -0.00036593149952442535, + -0.00029025534771527986, + -0.00018648398361672657, + -6.432014215934012e-05, + 6.426238510998858e-05, + 0.00018652864628253615, + 0.0002903167678034982, + 0.0003659110056451438, + 0.00040771397310409354, + 0.00041517619090818895, + 0.00039328177683306943, + 0.00035111314978336037, + 0.00029936030362354924, + 0.0002473362039093916, + 0.00020082066016608547, + 0.00016210304879730143, + 0.0001308762598348637, + 0.0001060583216170774, + 8.636604326547456e-05, + 7.044905996471446e-05, + 5.750278362530961e-05, + 4.667606283258499e-05, + 3.73747194681997e-05, + 2.925608306939596e-05, + 2.197558546538465e-05, + 1.5296671949478705e-05, + 9.033099085393688e-06, + 3.007928372102963e-06 + ], + [ + -3.898198303590145e-06, + -1.1858494004674535e-05, + -2.0116792236319538e-05, + -2.8823955497779505e-05, + -3.82258297988782e-05, + -4.8620425641402636e-05, + -6.037836932645037e-05, + -7.39112809094671e-05, + -8.979839899962788e-05, + -0.00010864317470152154, + -0.00013134148942396304, + -0.00015848363796870286, + -0.00019088541646053098, + -0.00022871615054378974, + -0.0002709140403707402, + -0.000314547243246692, + -0.000354441591266648, + -0.0003832605959173142, + -0.00039348597722576006, + -0.0003784488296514362, + -0.0003348873341782589, + -0.0002631824979560214, + -0.00016819379171313726, + -5.789575357321996e-05, + 5.781567184557693e-05, + 0.00016821237796335942, + 0.0002632309231694715, + 0.0003348370796734892, + 0.00037839669016075784, + 0.00039338165399066934, + 0.00038324571194620993, + 0.0003543838790342079, + 0.00031449324003618646, + 0.0002709028624046568, + 0.0002287217384523897, + 0.00019087236014271177, + 0.00015848364092045672, + 0.00013134891984459686, + 0.00010870649393031073, + 8.977979376744738e-05, + 7.396902585456318e-05, + 6.0445417352307005e-05, + 4.867071979852393e-05, + 3.8220247655322095e-05, + 2.8803472088421417e-05, + 2.0103760061336843e-05, + 1.189202153956696e-05, + 3.97269732196227e-06 + ], + [ + -4.8275790652033835e-06, + -1.4713685810442125e-05, + -2.483633252644649e-05, + -3.550841744589546e-05, + -4.6966477637008616e-05, + -5.954947633496491e-05, + -7.35218986609499e-05, + -8.923576554881252e-05, + -0.00010726471036362122, + -0.00012813208933630911, + -0.0001523426366728243, + -0.00018010669061284905, + -0.00021172791464036398, + -0.000246567229369492, + -0.0002830433688853543, + -0.0003181705369940596, + -0.00034747492863449185, + -0.00036548659766351074, + -0.0003666538616778225, + -0.000346304242657008, + -0.00030229665335289237, + -0.00023544755688989185, + -0.00014964387421170225, + -5.1368612593221545e-05, + 5.128852315586867e-05, + 0.00014966623026401138, + 0.0002354996920498238, + 0.00030227252916633035, + 0.00034623533333541555, + 0.00036656068620223033, + 0.00036545685008899963, + 0.0003474209151428745, + 0.000318116479562488, + 0.0002830209590002573, + 0.00024655234783998146, + 0.00021173163725518004, + 0.00018012906601267068, + 0.00015234261170396051, + 0.00012819729403190815, + 0.00010730940540453718, + 8.928047502576694e-05, + 7.353682161199489e-05, + 5.952713928438902e-05, + 4.698882597374377e-05, + 3.549351777118827e-05, + 2.4838195249879173e-05, + 1.471741337083151e-05, + 4.849929022480751e-06 + ], + [ + -5.721571245528509e-06, + -1.741242534841692e-05, + -2.9339816852381425e-05, + -4.187623876578261e-05, + -5.5161385382300666e-05, + -6.953422347494829e-05, + -8.524433234750898e-05, + -0.00010266978141360482, + -0.00012221103898080675, + -0.0001440524138015399, + -0.0001685552566111674, + -0.0001956729539308387, + -0.00022514655996199159, + -0.00025601303963821185, + -0.00028646762049836465, + -0.0003137388617167895, + -0.000334196838753212, + -0.0003436379689850995, + -0.0003380823354432572, + -0.0003143717903425409, + -0.00027112457428472885, + -0.00020937126050164657, + -0.00013234680019791193, + -4.526959824355523e-05, + 4.525283579564347e-05, + 0.00013233374284997603, + 0.0002093787179759145, + 0.0002711078725331229, + 0.00031434566822815163, + 0.00033804322974783995, + 0.00034355602477519005, + 0.0003341147720988564, + 0.00031371832486878177, + 0.0002864489946592013, + 0.000255942260558407, + 0.00022514280647687222, + 0.0001956934350990352, + 0.00016855711753051183, + 0.00014410830943181155, + 0.0001222482815047983, + 0.0001027405717384771, + 8.533372839985693e-05, + 6.953982869056808e-05, + 5.5153933981595906e-05, + 4.1833405299666466e-05, + 2.934167677465144e-05, + 1.7404975191205387e-05, + 5.801658440290601e-06 + ], + [ + -6.561551065593379e-06, + -1.988020479881473e-05, + -3.340187826878233e-05, + -4.755865056736595e-05, + -6.238964382423209e-05, + -7.82058957366746e-05, + -9.527186782848269e-05, + -0.00011381104531398866, + -0.00013409726602030652, + -0.00015614715756019268, + -0.00018007440946149334, + -0.0002056629072158715, + -0.0002322589063097513, + -0.00025886022535502893, + -0.00028351129835351514, + -0.0003039398895432766, + -0.00031719405219684415, + -0.00032013373204480325, + -0.0003098013862662653, + -0.0002841096387825318, + -0.00024240868196648236, + -0.00018572305851588238, + -0.00011679436803183174, + -3.983903584281235e-05, + 3.981482400620454e-05, + 0.00011674596853318728, + 0.00018568207959414624, + 0.00024238818662712568, + 0.00028408355298220654, + 0.00030973992953556284, + 0.000320074066706478, + 0.000317162349583206, + 0.00030390082922028143, + 0.00028347777805489316, + 0.00025881552491971763, + 0.00023227563360287692, + 0.0002056703763038165, + 0.0001800818614158467, + 0.00015618440554827323, + 0.00013413451527857762, + 0.00011387251101864612, + 9.535567785175469e-05, + 7.829901929100097e-05, + 6.243807341256497e-05, + 4.751209374622206e-05, + 3.3439127302027545e-05, + 1.9831785558202462e-05, + 6.5969361452005685e-06 + ], + [ + -7.256252423655359e-06, + -2.1988531157625726e-05, + -3.694802834235239e-05, + -5.239175826424112e-05, + -6.846687648188644e-05, + -8.536148594574874e-05, + -0.00010334377965293606, + -0.0001224547193931145, + -0.0001428581898398033, + -0.00016443870137194288, + -0.00018727262951609297, + -0.00021081046996676797, + -0.0002342252829281617, + -0.00025660251494527824, + -0.00027614672236391354, + -0.00029080741214735755, + -0.0002983607124114862, + -0.00029635393032881503, + -0.00028281485008850853, + -0.0002563522499048743, + -0.00021664809403194407, + -0.00016479368486417768, + -0.00010312091638242453, + -3.513099436699285e-05, + 3.506953428206028e-05, + 0.00010311533043513064, + 0.00016476016229236367, + 0.0002165810406187369, + 0.00025629087377085005, + 0.00028275523273973594, + 0.0002962980069959407, + 0.0002983066682543775, + 0.00029074777097550615, + 0.0002760387041832738, + 0.0002565168363104306, + 0.00023422898432764447, + 0.0002107657735693924, + 0.00018727262951609297, + 0.00016451508741696937, + 0.00014290849370420943, + 0.0001225366760734624, + 0.00010338849550015314, + 8.544157780278505e-05, + 6.851904397791163e-05, + 5.2391783634784755e-05, + 3.694244535196811e-05, + 2.1934520440804185e-05, + 7.271153273933052e-06 + ], + [ + -7.900667400776865e-06, + -2.3711311145641397e-05, + -3.980691673013042e-05, + -5.6304812227641815e-05, + -7.330743197003264e-05, + -9.095446494295039e-05, + -0.00010942283847238462, + -0.00012859519942656953, + -0.00014864101790608731, + -0.00016937224481999494, + -0.00019073292688217636, + -0.00021199660762963286, + -0.000232254468471712, + -0.0002507242715702257, + -0.0002658153394123958, + -0.00027576959205948665, + -0.0002788178244928958, + -0.0002733527404777199, + -0.0002577837536308978, + -0.00023126188218944857, + -0.0001938839537544735, + -0.0001465757849990381, + -9.138603142197727e-05, + -3.107659204369738e-05, + 3.0972296831892366e-05, + 9.136365257698691e-05, + 0.0001465273665060402, + 0.00019382063288690717, + 0.00023123758984612533, + 0.0002577502285465259, + 0.0002732670165839354, + 0.00027878243825781956, + 0.0002756858340243514, + 0.00026569427544579564, + 0.00025060316927614753, + 0.00023219673474633856, + 0.00021191275465844226, + 0.00019074031854407987, + 0.00016950634415082526, + 0.0001487043705671344, + 0.000128716278379141, + 0.0001094638168054775, + 9.099919611199523e-05, + 7.331116431438254e-05, + 5.630294879793819e-05, + 3.9812504114464736e-05, + 2.370572708687077e-05, + 7.842930073379746e-06 + ], + [ + -8.351382986415072e-06, + -2.5132369025156416e-05, + -4.206235527376112e-05, + -5.9290335325567325e-05, + -7.688706966075046e-05, + -9.496433067624422e-05, + -0.00011351645552132249, + -0.00013250255882215058, + -0.0001518592788066218, + -0.0001715213681628884, + -0.00019107910701104955, + -0.00021002218569214217, + -0.0002273987892632496, + -0.0002423671844144662, + -0.00025358811009559547, + -0.00025982869729477366, + -0.00025949107651353844, + -0.0002515136514470835, + -0.00023483111139306994, + -0.0002089016189777692, + -0.0001738872533003578, + -0.0001307379080746842, + -8.125830392632004e-05, + -2.756783332463388e-05, + 2.7536172823121992e-05, + 8.115959711919319e-05, + 0.00013065780429025368, + 0.00017377736932106094, + 0.00020877497709545904, + 0.00023477709894429013, + 0.00025144656459156925, + 0.00025944265446542757, + 0.0002597393086739374, + 0.00025353775592329794, + 0.00024226654144849974, + 0.00022735037086174214, + 0.00020995324629069468, + 0.00019114054850589662, + 0.0001716238048810549, + 0.00015191701091823965, + 0.00013252302860009888, + 0.00011353510191653245, + 9.496060429348133e-05, + 7.688893171526252e-05, + 5.932572242281378e-05, + 4.209401790626739e-05, + 2.511375091325101e-05, + 8.30854556708391e-06 + ], + [ + -8.716424797301777e-06, + -2.615486208726352e-05, + -4.3634265572302596e-05, + -6.133901356860924e-05, + -7.930078764541631e-05, + -9.74711349274553e-05, + -0.00011583144703694248, + -0.00013429416948504538, + -0.00015282016832866266, + -0.0001712381340681109, + -0.00018902649388871824, + -0.00020566194578036366, + -0.00022037149140646727, + -0.00023230962451443682, + -0.00024043528212013338, + -0.00024364386174176162, + -0.00024083669152275426, + -0.00023121296851757108, + -0.00021399420404411704, + -0.00018889727227935994, + -0.00015627619912258147, + -0.00011694675518831285, + -7.244537364045076e-05, + -2.4519081770984986e-05, + 2.4481832333940985e-05, + 7.239135775585323e-05, + 0.00011689460450272042, + 0.00015617007998205612, + 0.00018877437158097883, + 0.00021390851119957436, + 0.00023116080592063101, + 0.0002408702185120261, + 0.0002436308303900886, + 0.000240409130557039, + 0.00023233570515434227, + 0.0002203733559313353, + 0.00020566753129028378, + 0.0001890544116744771, + 0.0001712995674632841, + 0.00015291142441330486, + 0.00013430162541098873, + 0.0001158221348453529, + 9.746184484434504e-05, + 7.932872562439215e-05, + 6.13800076278386e-05, + 4.3628675602540834e-05, + 2.6078494174032367e-05, + 8.671724181597929e-06 + ], + [ + -8.930603979093834e-06, + -2.6756420532393616e-05, + -4.460831815337156e-05, + -6.253469408102527e-05, + -8.057282925253399e-05, + -9.853828372868724e-05, + -0.00011649815811848938, + -0.00013433688219137815, + -0.00015194285699971237, + -0.0001689955494535852, + -0.00018505557068299586, + -0.0001995845584492201, + -0.00021188411070596037, + -0.00022126510245327427, + -0.00022685408233729849, + -0.00022774770006866625, + -0.0002231489640339051, + -0.00021242087395081225, + -0.0001951388125320788, + -0.00017117065991927046, + -0.00014088885560398652, + -0.00010499001063965326, + -6.482810379800385e-05, + -2.1911701022484898e-05, + 2.188934879243216e-05, + 6.48225194710282e-05, + 0.00010496581619336639, + 0.0001407976104359536, + 0.0001710514800923917, + 0.00019506621780676392, + 0.00021241713558223032, + 0.00022318246256972413, + 0.0002277421164937579, + 0.00022684844719369698, + 0.00022128000550635394, + 0.00021196791680728794, + 0.00019960876503256135, + 0.00018509095806317993, + 0.00016907750220776597, + 0.0001520042918946534, + 0.0001343555325048494, + 0.00011648698106566925, + 9.852338094449938e-05, + 8.052067735998571e-05, + 6.253469314926738e-05, + 4.4639972124751185e-05, + 2.670985912192954e-05, + 8.852380535034043e-06 + ], + [ + -9.034898056429157e-06, + -2.6963141653556895e-05, + -4.495284970168543e-05, + -6.288479992995285e-05, + -8.067147904055183e-05, + -9.833708156502264e-05, + -0.00011586854646726538, + -0.00013300326253955997, + -0.000149610913565317, + -0.00016517925437516893, + -0.00017961892392837688, + -0.00019223885065837622, + -0.00020247850640321257, + -0.0002097344666219668, + -0.0002133436981840229, + -0.00021251650569538555, + -0.00020661596204139758, + -0.00019522486509754343, + -0.0001782017756984394, + -0.00015543488649115842, + -0.00012730986405155563, + -9.456226804291255e-05, + -5.8233249185012485e-05, + -1.9622777798637223e-05, + 1.965630241901811e-05, + 5.8236973869686855e-05, + 9.456226804291255e-05, + 0.0001273024294120582, + 0.00015536042591668625, + 0.00017814217573811962, + 0.00019522113654266995, + 0.00020657495940377873, + 0.00021248294651005407, + 0.00021330272391659107, + 0.0002097400520749978, + 0.0002025436932563134, + 0.00019227239235691994, + 0.00017963569055017632, + 0.00016526307286585085, + 0.00014959976322251735, + 0.00013299399547950789, + 0.00011582758573472594, + 9.832404219062449e-05, + 8.065286505129617e-05, + 6.288293616090536e-05, + 4.494539927405246e-05, + 2.6938929045557765e-05, + 8.965984886024005e-06 + ], + [ + -9.029303363655017e-06, + -2.6868143748301464e-05, + -4.474235306056143e-05, + -6.239307758824301e-05, + -7.993761141351153e-05, + -9.718041107682656e-05, + -0.00011410843172209485, + -0.0001304777154655756, + -0.00014598830964117495, + -0.00016023617553986456, + -0.00017312252764634234, + -0.00018404764336574158, + -0.00019256458721149432, + -0.00019808096027796015, + -0.00020000094203544705, + -0.00019786077480652366, + -0.00019107371444436412, + -0.00017948714467350176, + -0.0001628943354274294, + -0.00014144799986126933, + -0.00011539024057073478, + -8.54065479352934e-05, + -5.254725197185826e-05, + -1.7739862312631365e-05, + 1.7723100072963076e-05, + 5.254352667420407e-05, + 8.542889229051171e-05, + 0.00011537165470159589, + 0.0001413809529995541, + 0.0001628905856337469, + 0.00017949834684754783, + 0.00019110167664655023, + 0.00019780304025014269, + 0.0001999692760118024, + 0.00019807348384330516, + 0.00019262414609826293, + 0.00018408492298142466, + 0.00017317095132023363, + 0.00016028832006378902, + 0.0001459399271268852, + 0.00013043303155583884, + 0.00011406932797241638, + 9.717672376535488e-05, + 7.991341034543511e-05, + 6.244336419740066e-05, + 4.472374408866152e-05, + 2.6840205690924844e-05, + 8.941766683940238e-06 + ], + [ + -8.898927206574303e-06, + -2.6557095407470634e-05, + -4.409047197972095e-05, + -6.136494843755637e-05, + -7.852209146406682e-05, + -9.527319177063866e-05, + -0.00011154192724413742, + -0.00012700785221348213, + -0.0001414233593890627, + -0.0001545052613560785, + -0.0001659556363343935, + -0.000175435538443106, + -0.00018246432379574425, + -0.0001865224329823155, + -0.00018714801305481246, + -0.00018400958786074525, + -0.00017679423477473893, + -0.00016514625953835307, + -0.00014918671505395533, + -0.00012896774109028857, + -0.00010481716885521063, + -7.745580340717329e-05, + -4.757454612339023e-05, + -1.6059944660704895e-05, + 1.6015245754076467e-05, + 4.7546607441350436e-05, + 7.73869036480342e-05, + 0.00010477995642033637, + 0.00012889327111193782, + 0.00014916252725241688, + 0.00016519470874738008, + 0.00017677752232941147, + 0.00018394442868282257, + 0.00018712755834329235, + 0.00018651871152041186, + 0.00018249784485684385, + 0.00017542436295839883, + 0.00016597798538939659, + 0.00015454067340442846, + 0.0001413842429250384, + 0.00012696875889099796, + 0.00011147301619191935, + 9.523781657589883e-05, + 7.849601384182013e-05, + 6.137986953049041e-05, + 4.405882435635284e-05, + 2.647700893625499e-05, + 8.848638957242861e-06 + ], + [ + -8.710812863871416e-06, + -2.58959044241469e-05, + -4.3053058432018416e-05, + -5.996808359947934e-05, + -7.661675360598678e-05, + -9.274021533550145e-05, + -0.00010822852478151052, + -0.00012275578044230768, + -0.00013618788189789563, + -0.00014812812917599803, + -0.00015835485339485173, + -0.00016651422372209663, + -0.0001723156936149191, + -0.00017520422058625397, + -0.00017487441491876964, + -0.00017101896243147126, + -0.00016352237160053394, + -0.0001520848824434592, + -0.00013682189284829676, + -0.00011778745466033674, + -9.54658372285014e-05, + -7.035057893229634e-05, + -4.3201533567278687e-05, + -1.4577441404026148e-05, + 1.4499218423216123e-05, + 4.316241676225706e-05, + 7.037293024826428e-05, + 9.546027848084786e-05, + 0.00011779679174343722, + 0.0001367883650031193, + 0.00015208674405520773, + 0.00016351311197143758, + 0.00017096677584519496, + 0.00017489674366758445, + 0.0001752414575423413, + 0.0001723119667500297, + 0.0001665309875122917, + 0.0001584032818075736, + 0.00014818213843249053, + 0.00013616926678720355, + 0.0001227204050587269, + 0.0001081186336181976, + 9.265267732982944e-05, + 7.65590269147649e-05, + 6.0001604413400355e-05, + 4.30251208503306e-05, + 2.5849347606998276e-05, + 8.645627961255623e-06 + ], + [ + -8.412815457647894e-06, + -2.5143460202763568e-05, + -4.1823803927861614e-05, + -5.8127933595840644e-05, + -7.422158628387172e-05, + -8.963169178453979e-05, + -0.00010429305757283155, + -0.00011795053750076702, + -0.0001304104170783277, + -0.00014128348294505092, + -0.00015043929357682996, + -0.00015747003734855382, + -0.00016221549795025837, + -0.0001641933095760526, + -0.00016311477872565794, + -0.0001588160816130201, + -0.00015118917614902717, + -0.00014002175493427503, + -0.00012553168842240409, + -0.00010770788131873968, + -8.712578905550944e-05, + -6.410021131688719e-05, + -3.9284806145014565e-05, + -1.3232755575331949e-05, + 1.3175021156673959e-05, + 3.9156296099419414e-05, + 6.412628477112112e-05, + 8.710718102250808e-05, + 0.00010772838060959475, + 0.00012553915276003233, + 0.00014002361922178656, + 0.00015119476494663617, + 0.00015881235845850882, + 0.00016313899777295425, + 0.0001641821164214823, + 0.00016225090813741944, + 0.0001574290618197704, + 0.0001504411613722413, + 0.0001413039883080034, + 0.000130373206938173, + 0.00011786862548431581, + 0.00010418690401980566, + 8.956278431639577e-05, + 7.418434613149793e-05, + 5.8167045305617074e-05, + 4.1786558261005704e-05, + 2.510434754572726e-05, + 8.362528459835512e-06 + ], + [ + -8.103641367616707e-06, + -2.4303474372286133e-05, + -4.0400857110553274e-05, + -5.607545898772644e-05, + -7.146323185431487e-05, + -8.600171650307456e-05, + -9.988830136717717e-05, + -0.00011264618917059223, + -0.00012414689564603667, + -0.0001341017602717577, + -0.0001422499933458546, + -0.000148332721713609, + -0.00015220653349529636, + -0.00015346174139672258, + -0.00015186734695574677, + -0.0001472464515002037, + -0.0001396773084661684, + -0.0001290146156214389, + -0.00011525838603003175, + -9.864146713138196e-05, + -7.964060933244197e-05, + -5.846069879090726e-05, + -3.5770370314220706e-05, + -1.2081764832539355e-05, + 1.1975604572286571e-05, + 3.571635417327626e-05, + 5.84644382981365e-05, + 7.959965183854662e-05, + 9.863960265058144e-05, + 0.00011521741103428558, + 0.00012899597177992554, + 0.00013971270281769373, + 0.00014723714987192473, + 0.00015190830593169518, + 0.00015343193620016217, + 0.0001522270555242551, + 0.00014836998548891517, + 0.000142283534264584, + 0.00013410735243555072, + 0.0001241171238099255, + 0.00011258845140931469, + 9.981378820726987e-05, + 8.59514384411557e-05, + 7.13626620986219e-05, + 5.6099690101035635e-05, + 4.035059043995559e-05, + 2.426622327725464e-05, + 8.142753479464493e-06 + ], + [ + -7.829856955069353e-06, + -2.3385268881590354e-05, + -3.876374687520255e-05, + -5.3723149974698344e-05, + -6.829143106996759e-05, + -8.205882693171705e-05, + -9.507375666040816e-05, + -0.00010689111715297729, + -0.00011753510555060174, + -0.00012661832180079266, + -0.00013391725849649856, + -0.00013916933883139664, + -0.0001423056480405273, + -0.000142998401714096, + -0.0001410538709736856, + -0.00013633427977147476, + -0.0001289383615368259, + -0.00011864260036538762, + -0.00010571890557147238, + -9.034422363529153e-05, + -7.284824564274964e-05, + -5.339110541358487e-05, + -3.265635192305572e-05, + -1.0995953906153198e-05, + 1.0882345793169792e-05, + 3.262655319052881e-05, + 5.336132873273292e-05, + 7.274768149451406e-05, + 9.029394073907035e-05, + 0.00010575241254710273, + 0.00011864259992345279, + 0.00012892719011637277, + 0.00013636407158775348, + 0.0001411078596265777, + 0.00014300212238795511, + 0.00014237272926480735, + 0.00013917123110955968, + 0.00013395079844377486, + 0.00012660902759597587, + 0.00011749973890912854, + 0.00010689858337548828, + 9.496388991939647e-05, + 8.202902487242845e-05, + 6.823555524563117e-05, + 5.372687412824087e-05, + 3.873953271794543e-05, + 2.3336847071570064e-05, + 7.811231885429187e-06 + ], + [ + -7.4666736735566435e-06, + -2.2262198406601354e-05, + -3.6918025701166565e-05, + -5.10970436561724e-05, + -6.476016739423966e-05, + -7.772112353417784e-05, + -8.98737170070591e-05, + -0.00010079338763193577, + -0.0001106327756152735, + -0.00011889833373350711, + -0.00012537593153677374, + -0.00012995010553284704, + -0.00013249044179623856, + -0.0001327995285096178, + -0.00013066502186092659, + -0.00012594544735610393, + -0.000118732064031757, + -0.00010905650087217171, + -9.698583144168684e-05, + -8.267835495343509e-05, + -6.658107856411755e-05, + -4.876290818825704e-05, + -2.9778852082858053e-05, + -9.99767807279185e-06, + 9.912005306845178e-06, + 2.9734162377778368e-05, + 4.862323017388069e-05, + 6.646001780489281e-05, + 8.264856112386308e-05, + 9.697092018925619e-05, + 0.00010902483880395047, + 0.00011874137657165611, + 0.00012595289909138598, + 0.00013067619665647323, + 0.00013282932551758993, + 0.0001325463114161795, + 0.00012996128035166232, + 0.0001254076068498829, + 0.00011884062433389847, + 0.00011058806389838937, + 0.00010079711445798423, + 8.978246728440764e-05, + 7.763172526446443e-05, + 6.468193422923614e-05, + 5.105979602748529e-05, + 3.688822798753104e-05, + 2.2256607117807486e-05, + 7.455498723182985e-06 + ], + [ + -7.105352839632099e-06, + -2.1060897372429926e-05, + -3.4832043302975715e-05, + -4.811708801581651e-05, + -6.0992367044033874e-05, + -7.298110267351971e-05, + -8.42266927529093e-05, + -9.4360404342006e-05, + -0.00010335982147909767, + -0.00011078727609288806, + -0.00011654970411483519, + -0.00012059862915609757, + -0.00012267891694934572, + -0.00012261369379621196, + -0.00012042147901322673, + -0.00011580432968284666, + -0.00010894293995532777, + -9.987083207246943e-05, + -8.875932894639585e-05, + -7.560286693267957e-05, + -6.0786973435403496e-05, + -4.4479256211776207e-05, + -2.7175146771075453e-05, + -9.116738336987842e-06, + 9.05527692668356e-06, + 2.7072711951593245e-05, + 4.435634033283436e-05, + 6.071247503055589e-05, + 7.557120411565069e-05, + 8.870159412591843e-05, + 9.98503481453027e-05, + 0.00010895599363687759, + 0.00011581550360819566, + 0.00012045498635526703, + 0.00012267141132953074, + 0.00012271806420781958, + 0.00012055394964505031, + 0.0001165813550465733, + 0.00011070159661434817, + 0.00010330206729683901, + 9.436409765572955e-05, + 8.424160729880118e-05, + 7.295690584644222e-05, + 6.087502413419526e-05, + 4.80910135198141e-05, + 3.477617819277946e-05, + 2.1001296757438146e-05, + 6.997329152800729e-06 + ], + [ + -6.649045689850559e-06, + -1.97105998579209e-05, + -3.250022171856129e-05, + -4.4876376886910334e-05, + -5.677013617649112e-05, + -6.792635427314421e-05, + -7.832638957612926e-05, + -8.757912598401335e-05, + -9.565288783942923e-05, + -0.00010229626326529006, + -0.0001073639932262532, + -0.00011092870660450746, + -0.00011266257899168703, + -0.0001124241089073536, + -0.00011021701278728552, + -0.00010585132506623447, + -9.946858979932635e-05, + -9.108001673646293e-05, + -8.082152876036476e-05, + -6.882723518597409e-05, + -5.524988083281433e-05, + -4.035019123597385e-05, + -2.4653377415392395e-05, + -8.299118559483103e-06, + 8.183646266915028e-06, + 2.4584461969664407e-05, + 4.029059072191227e-05, + 5.516607002258695e-05, + 6.87303874855648e-05, + 8.0748880569381e-05, + 9.102600446853237e-05, + 9.946674419383508e-05, + 0.000105802897040066, + 0.00011023377066982143, + 0.00011242972164601613, + 0.00011268307978609816, + 0.00011089145307608234, + 0.00010739379515968034, + 0.00010222549619124772, + 9.556719201094928e-05, + 8.755861707835706e-05, + 7.833011540162072e-05, + 6.792821535726576e-05, + 5.674779195838921e-05, + 4.4880102174729354e-05, + 3.241269309222149e-05, + 1.9591400857183292e-05, + 6.542883371595294e-06 + ], + [ + -6.121964693540063e-06, + -1.814798474675292e-05, + -2.9922564181004014e-05, + -4.131904601863911e-05, + -5.222198570629923e-05, + -6.246371408200945e-05, + -7.18915372303307e-05, + -8.022233482366439e-05, + -8.743379567282742e-05, + -9.331917216215024e-05, + -9.79454937657439e-05, + -0.00010107995076941525, + -0.00010251397790809434, + -0.00010211346792607442, + -9.992874019591018e-05, + -9.590390247567861e-05, + -9.002590305063063e-05, + -8.234133836252894e-05, + -7.29991925650478e-05, + -6.209630475880761e-05, + -4.980963607862577e-05, + -3.64092217203765e-05, + -2.218747779541086e-05, + -7.466598579134786e-06, + 7.356713532644372e-06, + 2.2153946678480564e-05, + 3.6310511972929434e-05, + 4.9725826202312934e-05, + 6.196965327100844e-05, + 7.291536344810976e-05, + 8.227986437429529e-05, + 9.004639065335897e-05, + 9.585920010568073e-05, + 0.00010001071327842601, + 0.00010204646321431735, + 0.00010250841284080138, + 0.00010102780839409001, + 9.795106494274431e-05, + 9.331358943783291e-05, + 8.742820841661614e-05, + 8.019812131970989e-05, + 7.191388853827795e-05, + 6.251586456933807e-05, + 5.2251784555821864e-05, + 4.131532522043732e-05, + 2.98815934595502e-05, + 1.8073485293772268e-05, + 6.041879057464483e-06 + ], + [ + -5.570673221185469e-06, + -1.646616685744431e-05, + -2.7104640961371164e-05, + -3.740040670358103e-05, + -4.7210058035442795e-05, + -5.637714183923067e-05, + -6.476757025494793e-05, + -7.219508879736107e-05, + -7.865038406853022e-05, + -8.389507506966517e-05, + -8.801107444718685e-05, + -9.073580434727796e-05, + -9.189604379662528e-05, + -9.14284953122139e-05, + -8.939649924322145e-05, + -8.573670670465703e-05, + -8.042675696644144e-05, + -7.353001953004252e-05, + -6.510978618301203e-05, + -5.533743387840619e-05, + -4.437310850312706e-05, + -3.241424254700107e-05, + -1.9734613183217765e-05, + -6.611728676989702e-06, + 6.5893788770639776e-06, + 1.97085386869507e-05, + 3.2285728221697414e-05, + 4.427440002190849e-05, + 5.521265075612212e-05, + 6.499617591987376e-05, + 7.343689476372293e-05, + 8.038765586511257e-05, + 8.569573024357874e-05, + 8.945610614825684e-05, + 9.141175541392366e-05, + 9.186813089882948e-05, + 9.067061908592376e-05, + 8.804272317468858e-05, + 8.393417651899301e-05, + 7.865224844614875e-05, + 7.22453741216176e-05, + 6.477315731821652e-05, + 5.6410667874146995e-05, + 4.727897539500243e-05, + 3.740227510205865e-05, + 2.709160235459363e-05, + 1.6415883104072072e-05, + 5.4328488401183415e-06 + ], + [ + -4.902044175888578e-06, + -1.451801943886255e-05, + -2.388255800988691e-05, + -3.296026965519805e-05, + -4.1579800658371115e-05, + -4.957725523444712e-05, + -5.687442022412142e-05, + -6.339677514932832e-05, + -6.905679745959788e-05, + -7.368313503669873e-05, + -7.723480224513034e-05, + -7.965038580075928e-05, + -8.065418479848513e-05, + -8.017361096592924e-05, + -7.836696556663332e-05, + -7.513739673759991e-05, + -7.03880580074853e-05, + -6.428659335437243e-05, + -5.689817471735734e-05, + -4.830103916368719e-05, + -3.878757902447738e-05, + -2.828143645045664e-05, + -1.7205394166342556e-05, + -5.777345334850075e-06, + 5.7531328103631936e-06, + 1.712903000683293e-05, + 2.8143614920670737e-05, + 3.863857824425146e-05, + 4.820419052240503e-05, + 5.682181732054857e-05, + 6.421583607216634e-05, + 7.033406872329116e-05, + 7.49772331874478e-05, + 7.835952913084174e-05, + 8.016245676815202e-05, + 8.05852856326899e-05, + 7.961499546307018e-05, + 7.73353866158161e-05, + 7.369803509081374e-05, + 6.906423449110857e-05, + 6.343773021518492e-05, + 5.694144665391317e-05, + 4.96554777571313e-05, + 4.158353211818096e-05, + 3.2952820603226144e-05, + 2.3901183237081233e-05, + 1.4482634857049187e-05, + 4.821957399311975e-06 + ], + [ + -4.14960388846045e-06, + -1.2286774203909178e-05, + -2.020603311025139e-05, + -2.789247737538463e-05, + -3.514681388116365e-05, + -4.1926215303223544e-05, + -4.811892871485785e-05, + -5.3678394740015716e-05, + -5.848354410687032e-05, + -6.2409598484126e-05, + -6.547331623952204e-05, + -6.749404644270942e-05, + -6.830601996142348e-05, + -6.792602559866335e-05, + -6.632238847046682e-05, + -6.351001953624074e-05, + -5.9526170306140723e-05, + -5.4352216941404806e-05, + -4.808501546952572e-05, + -4.07934536256907e-05, + -3.2732713037091323e-05, + -2.390092273560273e-05, + -1.4536483729256025e-05, + -4.8796389922386285e-06, + 4.840526705849802e-06, + 1.446198299004469e-05, + 2.3759376286219293e-05, + 3.258557836874248e-05, + 4.067238821890285e-05, + 4.7960213528458575e-05, + 5.42348835776333e-05, + 5.9433046507065694e-05, + 6.345229201816449e-05, + 6.63186768796684e-05, + 6.785898741126292e-05, + 6.826505710452206e-05, + 6.747914869441368e-05, + 6.555526302340471e-05, + 6.248410111705477e-05, + 5.852637762831003e-05, + 5.370260041497877e-05, + 4.8171076247184995e-05, + 4.201748081414963e-05, + 3.5256705769563034e-05, + 2.7905511554206938e-05, + 2.0217207154997566e-05, + 1.2275601021555738e-05, + 4.104905241447341e-06 + ], + [ + -3.2667903048085584e-06, + -9.716557657735588e-06, + -1.5998699959423645e-05, + -2.208155215610656e-05, + -2.7892478102672585e-05, + -3.331599913023786e-05, + -3.833163321802833e-05, + -4.2844395859152836e-05, + -4.674996613789005e-05, + -4.987515891432699e-05, + -5.2275860348298406e-05, + -5.393527667343275e-05, + -5.456846249839639e-05, + -5.4276003905950216e-05, + -5.296849961837723e-05, + -5.0711160327333945e-05, + -4.7543073261696814e-05, + -4.34232731725038e-05, + -3.836853473962956e-05, + -3.257812719886528e-05, + -2.6102346950387936e-05, + -1.9058525917055788e-05, + -1.159565524766295e-05, + -3.883222662760124e-06, + 3.8459730517529275e-06, + 1.1511845747942022e-05, + 1.8928154044562573e-05, + 2.5934725356296426e-05, + 3.239747142233387e-05, + 3.827727656104491e-05, + 4.326869513259587e-05, + 4.745553886280281e-05, + 5.065715690091922e-05, + 5.296291666277334e-05, + 5.425739035496253e-05, + 5.452190312321628e-05, + 5.391291437832991e-05, + 5.2370840463596534e-05, + 4.993662916600641e-05, + 4.673692803472629e-05, + 4.278106562259361e-05, + 3.838005146510301e-05, + 3.341843110305439e-05, + 2.7998638803886977e-05, + 2.213370181812157e-05, + 1.605643727630071e-05, + 9.716557693929376e-06, + 3.2593403353673465e-06 + ], + [ + -2.322513858754023e-06, + -6.863241743151877e-06, + -1.1349955725301524e-05, + -1.566159870258266e-05, + -1.980932979948995e-05, + -2.362739809988934e-05, + -2.723314884287371e-05, + -3.05110894679757e-05, + -3.3273112507355914e-05, + -3.5563934269885534e-05, + -3.7282960573259884e-05, + -3.8467465272403385e-05, + -3.897774501504944e-05, + -3.872254461282362e-05, + -3.7832247916462004e-05, + -3.6224906029800065e-05, + -3.395826581094519e-05, + -3.104348761268741e-05, + -2.743774707265667e-05, + -2.3263960733846303e-05, + -1.8624568328136346e-05, + -1.358661857196146e-05, + -8.280477526757918e-06, + -2.773195987632768e-06, + 2.719184707072773e-06, + 8.226466452712856e-06, + 1.3495359596577028e-05, + 1.8542620020283572e-05, + 2.3196911992806292e-05, + 2.7353932593425008e-05, + 3.091498562777237e-05, + 3.3853967320206794e-05, + 3.6146687564150453e-05, + 3.782667144187885e-05, + 3.8729997076318247e-05, + 3.894607644633731e-05, + 3.846746054386575e-05, + 3.7342561896572134e-05, + 3.56011730011931e-05, + 3.331035877752119e-05, + 3.0499912223353493e-05, + 2.7281563507149585e-05, + 2.37763978593345e-05, + 1.9868929877093125e-05, + 1.5695117330202694e-05, + 1.141328031492131e-05, + 6.9023539556237645e-06, + 2.2908516767818076e-06 + ], + [ + -1.2478632390761511e-06, + -3.702613917286853e-06, + -6.0735525314884505e-06, + -8.381164733591995e-06, + -1.057330321843509e-05, + -1.2677900610209687e-05, + -1.4644666718107075e-05, + -1.6412148060416925e-05, + -1.78853538759185e-05, + -1.9157406027624696e-05, + -2.0060688172716465e-05, + -2.0777723062527612e-05, + -2.100678086184186e-05, + -2.090432629597185e-05, + -2.04349618506715e-05, + -1.9581932045942797e-05, + -1.8334066379370134e-05, + -1.677331385210212e-05, + -1.4854969531891303e-05, + -1.2595795583777737e-05, + -1.0085198283761114e-05, + -7.339934408327226e-06, + -4.5257637988154286e-06, + -1.4918255474998363e-06, + 1.4657512424993555e-06, + 4.425191204019135e-06, + 7.325034742557836e-06, + 1.0014424925168714e-05, + 1.2556684153919782e-05, + 1.4804682847273035e-05, + 1.6719301798827947e-05, + 1.8311723054096517e-05, + 1.9524200249934722e-05, + 2.0423789040936004e-05, + 2.0935993026043974e-05, + 2.101795927349007e-05, + 2.07088083684371e-05, + 2.0133324701395415e-05, + 1.9190930914362185e-05, + 1.788349136693917e-05, + 1.6358134305594432e-05, + 1.4644662681352883e-05, + 1.2771018991261407e-05, + 1.0647799632392214e-05, + 8.3979260463956e-06, + 6.099627342196602e-06, + 3.7175138136276e-06, + 1.2404133508750877e-06 + ], + [ + 0.0, + 5.5874508877734025e-09, + -3.7249666271858694e-09, + 1.862482449851156e-09, + -9.312406178788205e-09, + -1.8624807084946645e-09, + 0.0, + -1.8624778432418667e-09, + 1.8624764418381397e-09, + 0.0, + -1.8624728967123843e-09, + -3.7249413325465066e-09, + -3.724937447497938e-09, + -9.312333680672825e-09, + -5.587394172728938e-09, + -1.8624627262308098e-09, + 1.8624607282229269e-09, + -5.587376794220997e-09, + -3.7249136517522875e-09, + 1.862455858096672e-09, + -1.8624544151011917e-09, + -1.8624536866668224e-09, + 0.0, + 0.0, + 3.7249048134099077e-09, + 1.862452618297445e-09, + 5.587359977755751e-09, + -3.724909461512524e-09, + -3.7249116815059263e-09, + 3.7249141373767108e-09, + 0.0, + 5.587382725795388e-09, + 5.587388761445414e-09, + 3.724929469298608e-09, + -1.8624666945091778e-09, + 0.0, + -5.587413216367766e-09, + -1.8624728481491114e-09, + -1.8624747074305065e-09, + 0.0, + 0.0, + 1.8624790503933023e-09, + -5.587441251337864e-09, + 1.862481617329718e-09, + 3.7249648650139037e-09, + -5.5874490145975845e-09, + -1.8624835876316585e-09, + -3.7249676400886205e-09 + ] + ], + "v": [ + [ + 0.0, + 0.0, + 0.0, + -1.8624991212496333e-09, + 0.0, + -1.8625021947027424e-09, + 0.0, + 0.0, + 0.0, + 0.0, + 1.8625197614510765e-09, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 2.932940705370172e-05, + 0.0002309802424326542, + 0.000556196248768756, + 0.0009345957065750977, + 0.0013076489436866495, + 0.0016284649217120284, + 0.0018618204675799244, + 0.001984404626689867, + 0.0019844048483886696, + 0.0018618223261663365, + 0.0016284705475512764, + 0.001307643700266911, + 0.0009345957274622446, + 0.0005561962508406554, + 0.00023095599488727592, + 2.9327541710129416e-05, + -1.8626456661786964e-09, + 0.0, + 0.0, + 0.0, + 0.0, + -1.8625189011444682e-09, + 0.0, + 0.0, + 0.0, + 0.0, + -1.8625019726922456e-09, + -1.862500599003474e-09, + 0.0, + -1.8624983789046923e-09, + 0.0, + 0.0 + ], + [ + 1.8438728181683427e-07, + 1.6203732033504468e-07, + 2.2908729889857825e-07, + 2.0673738705678123e-07, + 2.1418755213057286e-07, + 1.992876836112162e-07, + 1.9556289435013192e-07, + 2.30950735410653e-07, + 2.663388238138191e-07, + 3.6505266095098254e-07, + 4.693547150083944e-07, + 6.388465627172666e-07, + 1.0970340737647165e-06, + 2.397105445444466e-06, + 4.809170798896697e-06, + 1.8631618779429746e-05, + 8.600860527122483e-05, + 0.0002762592295019824, + 0.0005771066453423997, + 0.0009330758739916906, + 0.0012869611837998819, + 0.0015931130151679066, + 0.0018167105813559148, + 0.0019343207343053696, + 0.0019343095687310973, + 0.001816667748241528, + 0.0015930977732298362, + 0.0012869073661142764, + 0.0009330217580450486, + 0.0005770898881128786, + 0.0002762666356056375, + 8.592663661549008e-05, + 1.8562700217468944e-05, + 4.7793698526386915e-06, + 2.3635785970913863e-06, + 1.1231090970650428e-06, + 6.816844050633998e-07, + 5.121926291290001e-07, + 3.0545217530821165e-07, + 2.682013275764564e-07, + 2.346757411529257e-07, + 2.3840045542235e-07, + 2.272252427844913e-07, + 2.2536250867927362e-07, + 2.2908737570005354e-07, + 1.9556230137470408e-07, + 1.620373010202198e-07, + 1.9556225985198944e-07 + ], + [ + 1.0709358976790967e-06, + 1.1137733481070587e-06, + 1.160336239367197e-06, + 1.1826866292026186e-06, + 1.2758121499330937e-06, + 1.3894257548055413e-06, + 1.5440147737740565e-06, + 1.8699547215421742e-06, + 2.2946097255885914e-06, + 2.9707062936163593e-06, + 4.14409899775329e-06, + 6.0308478500789186e-06, + 9.567819898889582e-06, + 1.7068322184152804e-05, + 3.345706300214918e-05, + 7.415425137379305e-05, + 0.00017352663979238193, + 0.0003549643814358713, + 0.0006192648818978272, + 0.0009304293951688945, + 0.0012427810599712793, + 0.0015154701856637857, + 0.0017159024069735309, + 0.0018216361911244225, + 0.0018216116464887249, + 0.001715814955230953, + 0.0015153271030971785, + 0.0012426823488122947, + 0.0009303549264104828, + 0.0006192164482233318, + 0.00035494198614136773, + 0.000173433452044492, + 7.408532368136068e-05, + 3.337510302879777e-05, + 1.7077629575322376e-05, + 9.618105413675422e-06, + 6.0382974452283866e-06, + 4.12733561983505e-06, + 2.9651174383745505e-06, + 2.2480470491699536e-06, + 1.81780487426199e-06, + 1.5775398231443012e-06, + 1.3950132344570303e-06, + 1.2832623295346403e-06, + 1.2124865982282486e-06, + 1.1584735881972e-06, + 1.1305358169289342e-06, + 1.0653484040548234e-06 + ], + [ + 3.108506471168268e-06, + 3.1774195772568784e-06, + 3.2370197890455435e-06, + 3.4381712326238717e-06, + 3.710097537793769e-06, + 4.181312941389847e-06, + 4.853679209717321e-06, + 5.820321808367914e-06, + 7.297298372516957e-06, + 9.573294391605426e-06, + 1.3125122782618112e-05, + 1.8882192810768057e-05, + 2.8714504171372616e-05, + 4.663768879319173e-05, + 8.012982081439575e-05, + 0.00014300135645479027, + 0.0002557403820209518, + 0.0004283887699532637, + 0.000658803672888585, + 0.000923511413331871, + 0.0011889874362205775, + 0.0014217567207351108, + 0.0015935522423224267, + 0.0016844598535249418, + 0.0016844598597988054, + 0.0015934827231518303, + 0.0014216689981794396, + 0.0011889368710951208, + 0.00092345728466094, + 0.0006588167309564655, + 0.0004283849571979533, + 0.0002556789232373334, + 0.00014299016369524072, + 8.010743880805823e-05, + 4.661718753260877e-05, + 2.8805762231218874e-05, + 1.889895310136784e-05, + 1.3080423028144527e-05, + 9.554669305240436e-06, + 7.252597391850503e-06, + 5.790522364661519e-06, + 4.835054211573971e-06, + 4.220424934583414e-06, + 3.792047144398898e-06, + 3.464246268573738e-06, + 3.3040696688009877e-06, + 3.186731758664561e-06, + 3.0917439518531878e-06 + ], + [ + 6.522459397950997e-06, + 6.664010672876854e-06, + 6.9396607265058174e-06, + 7.403424823578389e-06, + 8.068339536170455e-06, + 9.103890804387495e-06, + 1.0610661248605139e-05, + 1.2789796520483613e-05, + 1.6002626039873157e-05, + 2.0770654611243635e-05, + 2.7999079556101887e-05, + 3.9179762471851883e-05, + 5.693328170349385e-05, + 8.578556250048157e-05, + 0.00013326841778967484, + 0.00020969602472599756, + 0.000325547396322152, + 0.00048629060787741465, + 0.0006865359530918527, + 0.0009095133273340031, + 0.0011310486272242573, + 0.0013249524867895242, + 0.0014681784408560794, + 0.001544146259584378, + 0.0015441256101283258, + 0.0014681537848409594, + 0.001324942777741079, + 0.0011310857063985692, + 0.0009095132426393455, + 0.0006864986043833513, + 0.00048626069777306613, + 0.00032555122317724154, + 0.00020970158686220108, + 0.00013328701859479535, + 8.581162779647765e-05, + 5.689044465800634e-05, + 3.9179762471851883e-05, + 2.8010246151394692e-05, + 2.081535558168286e-05, + 1.6045461009608902e-05, + 1.2832631780121001e-05, + 1.064418608605293e-05, + 9.087129726074109e-06, + 8.107451789144097e-06, + 7.4127365206799105e-06, + 6.919172250576808e-06, + 6.647248320339155e-06, + 6.54853431118521e-06 + ], + [ + 1.1642452213037119e-05, + 1.1892029203061484e-05, + 1.242842932153115e-05, + 1.3313118253538212e-05, + 1.4579618220441674e-05, + 1.6497995184410653e-05, + 1.9185587511012086e-05, + 2.3001857935496645e-05, + 2.8485074664588246e-05, + 3.640444870930733e-05, + 4.795757990857485e-05, + 6.496786048397626e-05, + 9.031282242157199e-05, + 0.00012842516693199667, + 0.00018526844134002815, + 0.0002678264483124941, + 0.00038139524429568744, + 0.0005277984638181048, + 0.0007010372545407889, + 0.0008884105825510667, + 0.0010717618928631296, + 0.001231206970988407, + 0.0013487846654618631, + 0.0014110893486073653, + 0.0014111204804068632, + 0.0013488253912692894, + 0.0012312533676330686, + 0.0010718121556640653, + 0.0008884423380368925, + 0.0007010353907903633, + 0.0005277778046800461, + 0.0003813635742964404, + 0.00026780222842587477, + 0.00018530752173798556, + 0.0001284661439113709, + 9.028116371978621e-05, + 6.49212851906793e-05, + 4.797060500789276e-05, + 3.643238602393625e-05, + 2.854653647268152e-05, + 2.302420843350643e-05, + 1.918931708088756e-05, + 1.648495749305006e-05, + 1.4616866560263527e-05, + 1.3318705963468568e-05, + 1.2432154543135315e-05, + 1.1916240814092541e-05, + 1.1631277203580807e-05 + ], + [ + 1.8630519651606413e-05, + 1.9029092703904463e-05, + 1.9863493121039522e-05, + 2.1277130240800793e-05, + 2.3359401546361836e-05, + 2.6330088385079834e-05, + 3.0444346505341406e-05, + 3.62031921761471e-05, + 4.428271320809625e-05, + 5.5629060241120576e-05, + 7.148080691164477e-05, + 9.384752444374323e-05, + 0.00012555275989638745, + 0.000170248732543361, + 0.0002322301273614848, + 0.00031579138165063774, + 0.0004235132536527657, + 0.0005548079954408487, + 0.0007042868940800838, + 0.0008615697645187167, + 0.0010130279468168056, + 0.0011435292014236149, + 0.0012393217935989579, + 0.0012899781776383819, + 0.0012899688777590348, + 0.0012392805441815786, + 0.0011435403885724227, + 0.001013059700231241, + 0.0008616405559901052, + 0.0007042868468590725, + 0.0005548415424420554, + 0.0004234592711258048, + 0.00031572992854411936, + 0.0002321705250936041, + 0.00017021707045894924, + 0.00012550991008466913, + 9.383262621130787e-05, + 7.150314623249036e-05, + 5.5595532395911576e-05, + 4.427527295327689e-05, + 3.6246033291090376e-05, + 3.0466695539811364e-05, + 2.6346854518212136e-05, + 2.3353817326157775e-05, + 2.129017067201715e-05, + 1.9891435747181535e-05, + 1.9010472021043064e-05, + 1.8634241306250594e-05 + ], + [ + 2.7486655804117104e-05, + 2.805657760107597e-05, + 2.9283963728032856e-05, + 3.1306634610440954e-05, + 3.429035253102929e-05, + 3.845860997844088e-05, + 4.422861374291519e-05, + 5.2045504936049773e-05, + 6.274367208517974e-05, + 7.725994723310622e-05, + 9.691483708381212e-05, + 0.00012370298625803198, + 0.00015992460519448885, + 0.00020851289106727379, + 0.0002721925442732502, + 0.00035359110967688855, + 0.00045343069085404964, + 0.0005701482156092191, + 0.000698716541629189, + 0.0008308754017441731, + 0.0009560056699926475, + 0.0010627406288939995, + 0.001140545195152355, + 0.0011815823838325235, + 0.0011815989979579518, + 0.0011405080023699865, + 0.0010627368486578043, + 0.0009560338822584162, + 0.0008309070646276088, + 0.0006987425143454161, + 0.0005701631959657936, + 0.00045339530144287537, + 0.0003535556719251223, + 0.0002721589617977915, + 0.00020848310680409012, + 0.00015992460340734057, + 0.0001237067287524204, + 9.691109621360937e-05, + 7.725064526973972e-05, + 6.270269443121961e-05, + 5.202688562603834e-05, + 4.4198827689746235e-05, + 3.843999335723241e-05, + 3.425310152931633e-05, + 3.1247035086699145e-05, + 2.9248576649977696e-05, + 2.8004432731437937e-05, + 2.7479206143502688e-05 + ], + [ + 3.8151258266082675e-05, + 3.889066784685996e-05, + 4.0518486359649454e-05, + 4.3224681963898e-05, + 4.716012557872962e-05, + 5.2570659232975046e-05, + 5.9921910127300284e-05, + 6.975585166954633e-05, + 8.281936495663523e-05, + 0.00010007157883684239, + 0.00012282742611042285, + 0.00015287671239816393, + 0.00019190119374350666, + 0.00024202207546179252, + 0.00030507749283449143, + 0.0003822703521368532, + 0.00047343093226469014, + 0.0005764337517984384, + 0.000686892358667621, + 0.00079804648614077, + 0.000901701153612193, + 0.0009891064199649346, + 0.0010524943445870477, + 0.0010857943030396148, + 0.0010858035968893778, + 0.0010524550712229964, + 0.0009891139064830722, + 0.000901673417054096, + 0.0007980389145194224, + 0.000686901682410452, + 0.0005764300333285699, + 0.0004734270398056607, + 0.00038229450374144145, + 0.0003051259161055113, + 0.0002419848213164866, + 0.00019186764470461475, + 0.0001528226954172049, + 0.0001228367374116291, + 0.00010005669345381885, + 8.284170990526568e-05, + 6.975958730425575e-05, + 5.991818269096181e-05, + 5.265448474465142e-05, + 4.720482412330896e-05, + 4.3263798214948236e-05, + 4.055387013401424e-05, + 3.888321744963027e-05, + 3.809352169478769e-05 + ], + [ + 5.046415728704303e-05, + 5.146056385527928e-05, + 5.353165970789236e-05, + 5.6885994293286006e-05, + 6.175267271587078e-05, + 6.829745645781989e-05, + 7.713495603613886e-05, + 8.873823381912039e-05, + 0.00010373126336478244, + 0.00012320721828910358, + 0.00014823708252003636, + 0.00018020275415457177, + 0.00022050292240685204, + 0.0002704373884048599, + 0.00033129864253379337, + 0.000403161013590586, + 0.0004854302507238799, + 0.0005759978534978137, + 0.0006707362697457271, + 0.00076434352459709, + 0.0008504632324182063, + 0.000922372438093945, + 0.0009742312692044961, + 0.0010013024185568892, + 0.0010012856474487662, + 0.0009742128409357326, + 0.0009223910348753312, + 0.0008504650647563807, + 0.0007643881918379377, + 0.0006707493156231555, + 0.0005760275326275856, + 0.0004855288988181778, + 0.00040323371818728223, + 0.0003312986474700729, + 0.0002705081615600175, + 0.00022047495192167423, + 0.0001801692462249248, + 0.00014822963423453538, + 0.00012320721691227277, + 0.0001037908625908343, + 8.87810738507822e-05, + 7.720759150096955e-05, + 6.837195523721802e-05, + 6.181227718697668e-05, + 5.696608778212261e-05, + 5.359870811505785e-05, + 5.149410284684276e-05, + 5.048090267631739e-05 + ], + [ + 6.433032821177005e-05, + 6.557819600711518e-05, + 6.807019557698836e-05, + 7.201492090455554e-05, + 7.764521132867343e-05, + 8.527208658884972e-05, + 9.530528860130104e-05, + 0.00010827747713448477, + 0.0001248218847355876, + 0.00014575053816471583, + 0.00017225729446727407, + 0.00020508892913436604, + 0.00024537035364255514, + 0.00029393769197008716, + 0.0003514203529344302, + 0.0004175631704422632, + 0.0004912558289521058, + 0.0005705148400832324, + 0.0006518592590488576, + 0.0007309139158759837, + 0.0008027163419045775, + 0.0008622339787123465, + 0.0009047706171232679, + 0.0009269177744521959, + 0.0009269233634649108, + 0.000904731517876996, + 0.0008621855618698397, + 0.0008026492732101504, + 0.0007309122943799328, + 0.0006518927394353121, + 0.0005705445437371077, + 0.0004913395857195185, + 0.0004176040840431939, + 0.0003514576089015301, + 0.00029400473560002355, + 0.00024545600296226413, + 0.0002051373566901136, + 0.00017229081915480553, + 0.00014592004566751535, + 0.00012496158577597063, + 0.0001083594329698754, + 9.540587778990371e-05, + 8.537080330782035e-05, + 7.775698081040073e-05, + 7.213043002516687e-05, + 6.813539089039825e-05, + 6.558006276990371e-05, + 6.433406157484516e-05 + ], + [ + 7.946112069465916e-05, + 8.09008107951634e-05, + 8.381746472680761e-05, + 8.830977049299185e-05, + 9.460309195848166e-05, + 0.00010305689379928892, + 0.00011406787530835553, + 0.00012805135413389724, + 0.00014561262106472682, + 0.00016748741310029452, + 0.00019451003780824713, + 0.00022733970496020974, + 0.0002666730229243851, + 0.000312986748624673, + 0.0003664892534312411, + 0.00042666649919382183, + 0.0004923377750029927, + 0.000561504560302963, + 0.0006313207210375354, + 0.0006982517940060752, + 0.0007583603734171202, + 0.0008078234566829873, + 0.0008428903110941946, + 0.0008611266664794547, + 0.000861130423425641, + 0.0008429086623023289, + 0.0008078309335192683, + 0.0007584013556195151, + 0.0006982720377284509, + 0.000631380317128865, + 0.000561552879585177, + 0.0004924066869679234, + 0.0004266870681608873, + 0.0003665134607534343, + 0.0003130593331843653, + 0.00026674193800992903, + 0.000227445821751529, + 0.00019461800224529434, + 0.00016758426278523593, + 0.00014571322281118116, + 0.00012806813390112132, + 0.0001141125787666922, + 0.00010313142893447496, + 9.464780113125075e-05, + 8.830790652680918e-05, + 8.379697722296021e-05, + 8.095110953046441e-05, + 7.951140531053307e-05 + ], + [ + 9.575408164531036e-05, + 9.729620259924197e-05, + 0.00010047360155855107, + 0.00010538310464884244, + 0.00011219604370824105, + 0.00012132965320415105, + 0.0001329011750255953, + 0.00014749553913670453, + 0.00016560439112011361, + 0.00018786649240683213, + 0.00021479963167031545, + 0.0002468917745535943, + 0.0002845804726078607, + 0.00032810793766274, + 0.0003773640350993271, + 0.0004317267206734934, + 0.0004898998275642526, + 0.0005501549163847108, + 0.0006101600897364124, + 0.0006669412103090998, + 0.0007175165615619273, + 0.0007587164234616953, + 0.0007878200227836141, + 0.000802871706295306, + 0.0008028959464237448, + 0.0007878479843441261, + 0.0007587852250350574, + 0.0007175444995855052, + 0.0006669784742004577, + 0.0006101619487802185, + 0.0005501697320184697, + 0.0004899184558221137, + 0.00043170438718019, + 0.0003773657970627704, + 0.0003281413680379878, + 0.0002846587039472577, + 0.00024700162801674766, + 0.00021490577012335833, + 0.00018795402931562853, + 0.00016572544716019814, + 0.0001476389307295421, + 0.00013297197462771427, + 0.00012139297584906692, + 0.00011223888021599362, + 0.00010538496693718244, + 0.00010050153976550129, + 9.730740360528866e-05, + 9.573731624855731e-05 + ], + [ + 0.00011281810163926449, + 0.0001144664009842006, + 0.00011783933680892886, + 0.0001230058241369171, + 0.0001301987143863139, + 0.00013964517817462345, + 0.00015161344087013227, + 0.00016643686107332517, + 0.00018465366802487363, + 0.00020679657323701675, + 0.00023309641958133294, + 0.0002639164406376249, + 0.000299463255863348, + 0.0003398523748809234, + 0.000384735563216254, + 0.00043348485325162846, + 0.00048484142916904174, + 0.0005373339921467602, + 0.0005888877482180465, + 0.0006371669783683979, + 0.0006797955994701564, + 0.0007143153697589623, + 0.0007386120409552482, + 0.0007511182773257069, + 0.00075112198542762, + 0.0007386362018364922, + 0.0007143526053891631, + 0.0006798460615809996, + 0.0006372229231186414, + 0.000588895143198062, + 0.0005373190604603923, + 0.00048484515950902884, + 0.0004334941760691707, + 0.00038476151450939343, + 0.00033987473338459995, + 0.00029952472025078194, + 0.00026399652460667474, + 0.00023318765705694739, + 0.00020689525030145886, + 0.00018477472265404274, + 0.00016653744247423178, + 0.00015169352785549163, + 0.00013969549719180762, + 0.00013022292787387305, + 0.00012297606334661144, + 0.00011783001758782265, + 0.00011443843708250569, + 0.00011280318874198027 + ], + [ + 0.00013043524264189332, + 0.00013213566832042306, + 0.00013563156247684759, + 0.00014096753411974746, + 0.00014826659620227164, + 0.00015784712957245682, + 0.0001698247010960847, + 0.0001845828394861735, + 0.00020267304587896323, + 0.00022419563425587485, + 0.0002494152758009669, + 0.0002785646238237279, + 0.00031167907769797694, + 0.0003487585901330813, + 0.00038933943861974306, + 0.0004327826501856844, + 0.0004780230975250818, + 0.0005236302866297619, + 0.0005679652262058707, + 0.0006091005479655088, + 0.0006452220506943867, + 0.0006741620678936197, + 0.0006945144569837631, + 0.0007050129381005062, + 0.0007049532478579685, + 0.0006945200766666488, + 0.000674141692692061, + 0.0006452016322242079, + 0.00060912295866964, + 0.0005679448587196935, + 0.0005236265285542813, + 0.00047801931740391044, + 0.0004328105944023424, + 0.000389348669013484, + 0.0003487734950857829, + 0.00031171445711597007, + 0.0002786074529384072, + 0.00024947673795877286, + 0.0002242626884297299, + 0.00020277544631728005, + 0.00018470952314502667, + 0.00016989547219254205, + 0.0001578396749447719, + 0.00014826659178397017, + 0.0001409712569832037, + 0.00013566692462913576, + 0.000132126359108068, + 0.00013040173009897085 + ], + [ + 0.00014836714369680543, + 0.00015010667966902104, + 0.00015356158675439028, + 0.00015886960768940226, + 0.00016615188265243637, + 0.00017562627664040873, + 0.00018743244136629138, + 0.00020201178888829373, + 0.00021945380042684136, + 0.00024005823172158885, + 0.00026392197939953594, + 0.0002910430304681639, + 0.00032155371063798235, + 0.0003552863981962065, + 0.0003917009593813687, + 0.0004302683989505601, + 0.0004699234090569526, + 0.0005094962776633411, + 0.0005476462530204284, + 0.0005827676802154756, + 0.0006133059019278083, + 0.0006377053776645324, + 0.0006547799655459639, + 0.0006635165924964405, + 0.000663535234302026, + 0.0006547389891895106, + 0.000637690478049691, + 0.0006132836255886853, + 0.0005827603714938826, + 0.0005476164496241839, + 0.0005095111678497378, + 0.00047000156769003815, + 0.0004303465519248698, + 0.00039174938351560636, + 0.00035525100798203805, + 0.00032157047347355, + 0.0002910579562704283, + 0.00026394992291105224, + 0.00024012715361276284, + 0.00021958420980505675, + 0.00020206959457124945, + 0.0001874883380860576, + 0.00017564676032189375, + 0.00016617797966323778, + 0.00015895341606647712, + 0.00015360255962745128, + 0.00015010854019329188, + 0.0001483540839450262 + ], + [ + 0.00016637534436371757, + 0.00016807024066593126, + 0.00017149528066700393, + 0.00017668229589048014, + 0.0001837559323690558, + 0.00019293416350662086, + 0.0002044684081111649, + 0.0002184574220312211, + 0.0002350928808528137, + 0.0002544476117570404, + 0.00027666489639152273, + 0.00030163296517888205, + 0.0003294561954601483, + 0.0003598996615284095, + 0.0003923974342284512, + 0.0004264149639811665, + 0.0004610934734913065, + 0.0004954162556193891, + 0.0005282155480007787, + 0.0005581764139521319, + 0.0005840136309033257, + 0.0006046326175143915, + 0.0006189564909908394, + 0.0006263037436881221, + 0.0006263018754030977, + 0.0006189378618487945, + 0.0006045990573111986, + 0.0005840324512419824, + 0.0005581503457953573, + 0.0005281819430850311, + 0.0004954275060426829, + 0.0004610953969262953, + 0.0004264727043510044, + 0.0003924551626430126, + 0.0003598884384580117, + 0.0003294561267366755, + 0.00030165908923129945, + 0.00027667234525615493, + 0.00025441035467539046, + 0.00023506314865979455, + 0.00021846117302624048, + 0.00020448146030910744, + 0.00019293796320723404, + 0.00018375037059851032, + 0.00017668788234303124, + 0.0001715251410421556, + 0.000168072097824908, + 0.00016638837955491962 + ], + [ + 0.00018414335138426145, + 0.00018579164404041189, + 0.00018909938371026267, + 0.00019408518109690647, + 0.000200983774527286, + 0.00020976342996363822, + 0.00022076506974618614, + 0.0002339177217420012, + 0.0002494804684856958, + 0.00026751646292513397, + 0.0002878991785975446, + 0.00031065844659240553, + 0.0003357120806429248, + 0.0003629540150050693, + 0.0003918218292508791, + 0.00042164882867799975, + 0.0004518389437877902, + 0.00048144797325984606, + 0.0005095278910767645, + 0.0005350989769397313, + 0.0005570773922620017, + 0.0005744334551617689, + 0.0005864944751190134, + 0.000592631141260772, + 0.0005926348661696577, + 0.0005864963146350606, + 0.0005744056007027791, + 0.000557077587318125, + 0.0005351065443706193, + 0.0005095298360972038, + 0.00048146667139806274, + 0.0004518334834708081, + 0.00042168427753974344, + 0.0003917939601263027, + 0.0003629987209948606, + 0.000335749323789769, + 0.0003106584454352203, + 0.0002879066274161955, + 0.0002674848442079301, + 0.0002494823230621607, + 0.00023392706854294054, + 0.00022074085876940257, + 0.00020973551896799733, + 0.0002009576923433946, + 0.00019408524833211993, + 0.00018908640868931203, + 0.00018578978259898565, + 0.00018415263668646346 + ], + [ + 0.00020168968053057502, + 0.00020324485516322316, + 0.00020636264380808272, + 0.00021115664047479255, + 0.00021769945496129947, + 0.00022601539565798634, + 0.00023618812840548055, + 0.00024840584828876263, + 0.0002627914685050912, + 0.000279250010033612, + 0.0002977199381924379, + 0.0003182013154599462, + 0.00034065687695990476, + 0.0003648667797084127, + 0.00039022767336156143, + 0.0004162534198856955, + 0.0004423814771741914, + 0.00046785405764973234, + 0.0004918775264164004, + 0.0005136380814240464, + 0.0005322344278900629, + 0.0005468675890226717, + 0.0005570531938195718, + 0.000562187865098953, + 0.0005622325703205156, + 0.0005570773383103321, + 0.0005468489787138974, + 0.0005322178253627074, + 0.0005136773011571977, + 0.0004919222126278016, + 0.00046785219257414656, + 0.0004423313332003609, + 0.00041622725390470024, + 0.0003902462515084905, + 0.0003648555790786273, + 0.00034070157242464095, + 0.00031826650491030995, + 0.0002977534704594567, + 0.0002792667676167185, + 0.00026279893700361084, + 0.00024842263416776446, + 0.00023615645530458733, + 0.0002259427552397853, + 0.00021763057205737067, + 0.00021110820266482814, + 0.00020632352983328747, + 0.00020326538293716917, + 0.000201710210999549 + ], + [ + 0.00021874623924845863, + 0.0002201598624924649, + 0.00022313975333938563, + 0.00022759479286804635, + 0.00023369062497293006, + 0.00024141609393878093, + 0.00025083265379817195, + 0.0002619868989117779, + 0.00027502778447761347, + 0.00028981571111963775, + 0.0003063915035498693, + 0.00032460816023184303, + 0.0003445102785784704, + 0.00036575703801624263, + 0.0003878622847588002, + 0.0004104648488897912, + 0.00043291281142757214, + 0.00045471450768064334, + 0.00047522723920341017, + 0.0004936392388146149, + 0.0005093450361458043, + 0.0005217321758552728, + 0.0005302620036198379, + 0.0005345940129594028, + 0.0005345959461081961, + 0.0005302415096796379, + 0.0005216949189254888, + 0.0005093414079895973, + 0.0004936597819511422, + 0.0004752161193158675, + 0.00045471265114684767, + 0.0004328811535840967, + 0.00041046112854740144, + 0.0003878976882304631, + 0.0003657420974018875, + 0.0003445196403331173, + 0.000324682656642005, + 0.0003064231764130981, + 0.00028989210977016196, + 0.0002750278674592305, + 0.0002619646311802129, + 0.00025081590973434373, + 0.00024143286747076991, + 0.00023369437952473456, + 0.00022758920416286667, + 0.00022314349907519583, + 0.00022016916955434798, + 0.00021874809968990664 + ], + [ + 0.00023531849594903885, + 0.00023665948180422118, + 0.00023931715533668783, + 0.00024345554992160387, + 0.00024898706316590924, + 0.0002560532741000236, + 0.0002645609604826369, + 0.0002746330556254563, + 0.0002862603134539537, + 0.0002994371879382736, + 0.0003140853480478622, + 0.0003300800229918233, + 0.00034744540741383736, + 0.00036589851879387263, + 0.0003850481006730116, + 0.000404463987939454, + 0.0004236545596671733, + 0.00044219507606242344, + 0.0004595528877915518, + 0.0004750893251164555, + 0.00048827528885803215, + 0.000498634057363752, + 0.000505862245186165, + 0.0005095182134318312, + 0.0005095088944994234, + 0.0005059087378556551, + 0.0004987161299865218, + 0.0004882902903851508, + 0.0004750725532439299, + 0.0004595268099170799, + 0.00044216893571048506, + 0.00042365272008582246, + 0.0004044435302060314, + 0.00038503316222033445, + 0.00036593202957962707, + 0.00034748832379893766, + 0.00033011730436907654, + 0.00031409655914720557, + 0.0002994278861705583, + 0.0002862678273278759, + 0.0002746237406950234, + 0.00026456837293661553, + 0.0002560141883179012, + 0.00024898335212423454, + 0.00024348356915768034, + 0.00023937501206071045, + 0.0002366594668179381, + 0.00023531663566249335 + ], + [ + 0.00025127061406334835, + 0.0002524588401481023, + 0.0002548856508486088, + 0.0002585807236275678, + 0.00026354230746533625, + 0.00026981130032722154, + 0.0002773690757664757, + 0.0002863032532581192, + 0.00029657094351419127, + 0.0003080827300394198, + 0.0003207566329016241, + 0.00033466907998812274, + 0.0003497287901907691, + 0.0003655521079934717, + 0.00038196013759683587, + 0.00039842031479069484, + 0.00041467754147297834, + 0.00043028848776516016, + 0.00044482473177904174, + 0.00045786723712583637, + 0.00046888165959873174, + 0.00047756981403865133, + 0.0004835687928197894, + 0.0004866044845969929, + 0.00048662877903076895, + 0.00048359487624920466, + 0.0004776333404591657, + 0.0004689189646850943, + 0.00045785794273198486, + 0.0004448283837962958, + 0.00043028848616236766, + 0.00041468500214045505, + 0.00039841284267092973, + 0.0003819023392659972, + 0.00036553719735965947, + 0.0003497139699033739, + 0.0003346859139016631, + 0.000320797644309049, + 0.0003081032614207255, + 0.00029656168251490834, + 0.0002863479963699181, + 0.00027741941890785957, + 0.0002698261920939326, + 0.00026358327606047056, + 0.00025863286913086863, + 0.00025489867537394284, + 0.0002525035678276967, + 0.00025129667939280365 + ], + [ + 0.0002665112669786949, + 0.00026754308867312627, + 0.00026966064318278184, + 0.00027297387291659955, + 0.0002773730249208228, + 0.00028283560555715905, + 0.0002895198307953648, + 0.0002972881579845816, + 0.00030612914647153513, + 0.0003159366695314152, + 0.00032671645031882564, + 0.00033853182365926567, + 0.0003513007242651267, + 0.0003647363458154777, + 0.00037851453722168417, + 0.0003924119904573047, + 0.0004060282721773681, + 0.0004190559602551363, + 0.0004311449877501051, + 0.0004419246725389953, + 0.0004511343465605576, + 0.00045834004765414897, + 0.00046324003904614855, + 0.00046575993611915804, + 0.0004657823012380516, + 0.0004632662584206836, + 0.0004583605953170762, + 0.0004511287532994268, + 0.00044197685107223955, + 0.0004312045351265192, + 0.0004191025210409949, + 0.0004060785594549117, + 0.0003924082713747673, + 0.00037851453722168417, + 0.00036473261408721645, + 0.0003513901109865411, + 0.0003385429984780809, + 0.0003267332472402495, + 0.00031590135493621263, + 0.0003060546133390139, + 0.0002971913148527647, + 0.00028946213127843147, + 0.0002827983581439537, + 0.000277369260706873, + 0.0002730074076635738, + 0.00026975005616207567, + 0.0002675821543611215, + 0.0002665149889561118 + ], + [ + 0.000280934290164421, + 0.00028185619410676607, + 0.0002836962089613874, + 0.0002865029429992273, + 0.0002903004234279795, + 0.0002949881829002276, + 0.0003007058505278502, + 0.0003073343550073381, + 0.00031476544740618106, + 0.00032300104471261524, + 0.00033198916325030524, + 0.00034190843747248086, + 0.0003525745399671453, + 0.0003636840536438058, + 0.0003751472603158079, + 0.0003866551201305558, + 0.0003978929771630648, + 0.00040858890794790326, + 0.0004185602910541635, + 0.0004273732679634711, + 0.0004348285644942599, + 0.0004406839766055279, + 0.0004447497446023237, + 0.00044675742769866364, + 0.00044678907702508695, + 0.00044474043975955245, + 0.0004407175648991964, + 0.0004348844382978956, + 0.00042737512485237905, + 0.0004185658854548074, + 0.00040860195812321247, + 0.00039783530081182394, + 0.00038662904274452167, + 0.0003751099578953623, + 0.00036369330976048154, + 0.00035255042965588984, + 0.00034181909495668156, + 0.0003319500198307502, + 0.00032296005348959303, + 0.00031470393244774515, + 0.00030725975302286205, + 0.00030064257902278935, + 0.0002949789326038884, + 0.0002903246026330883, + 0.0002865439185560946, + 0.0002837596082229599, + 0.0002818710760787694, + 0.00028094546607778173 + ], + [ + 0.00029452851184918425, + 0.00029532375191072737, + 0.0002968676412956079, + 0.00029917895004062423, + 0.0003023711439295678, + 0.0003063232544667901, + 0.0003110352011794831, + 0.0003164697596511827, + 0.00032258404687808757, + 0.0003293390247963218, + 0.00033666767636176723, + 0.0003447841508401549, + 0.0003534797495397873, + 0.00036253110718362713, + 0.0003718264366298161, + 0.0003811087244079828, + 0.0003902028719131774, + 0.0003988892383800273, + 0.00040689388661840415, + 0.00041396355251199844, + 0.0004199642804352089, + 0.0004245905445021309, + 0.00042779765244606457, + 0.00042941606183767106, + 0.0004294421458654377, + 0.00042781806221240396, + 0.0004246240497979707, + 0.0004199773168741819, + 0.0004139002303899282, + 0.0004068249141593359, + 0.0003987718995121633, + 0.0003901042274625308, + 0.000381011862045389, + 0.0003717165365974787, + 0.0003624809022568042, + 0.0003533699066803738, + 0.00034465376510976135, + 0.0003365969099932085, + 0.0003292645480014301, + 0.0003225131984211105, + 0.0003163933198340241, + 0.000310916006248671, + 0.0003062506116370345, + 0.0003023450985449182, + 0.0002991975770369505, + 0.00029687702500758565, + 0.00029531629540030806, + 0.0002945042508208101 + ], + [ + 0.00030710583519395025, + 0.00030773722492877513, + 0.00030902599863317246, + 0.0003109684254452143, + 0.0003135088495294284, + 0.0003166320644112976, + 0.0003203717845890701, + 0.0003246943733077225, + 0.00032957391230770426, + 0.00033488182318362286, + 0.00034080427801868544, + 0.0003472164847811127, + 0.0003540961903245288, + 0.0003612645500773083, + 0.0003685857073517541, + 0.00037591804268130607, + 0.0003830957253489742, + 0.0003899345028674057, + 0.00039620709865902055, + 0.00040177562615051305, + 0.0004064633180451424, + 0.0004100446816524247, + 0.0004124397523978796, + 0.0004137397043050774, + 0.0004137639185853857, + 0.0004125103983166562, + 0.000410001851955308, + 0.00040634598986261767, + 0.0004017309001563806, + 0.000396171612273339, + 0.0003898990558038214, + 0.0003830715154625398, + 0.00037583608162827803, + 0.000368496399586385, + 0.00036118275760184924, + 0.00035400873145797205, + 0.0003470749603616153, + 0.0003406645362161044, + 0.0003348203784363518, + 0.0003294938265817476, + 0.0003246366311776756, + 0.000320327092346898, + 0.00031658737088795876, + 0.0003135125698116575, + 0.00031097218167428924, + 0.0003090334876819575, + 0.00030776701884322876, + 0.0003071189188710784 + ], + [ + 0.0003186197860139959, + 0.0003191374456724285, + 0.00032010221517143547, + 0.00032166659236934294, + 0.00032363139200215725, + 0.0003260375600200979, + 0.000328903783441338, + 0.0003321629675609566, + 0.0003358132444404637, + 0.0003398472248426435, + 0.00034435042944589843, + 0.00034933601293570216, + 0.0003545562100792395, + 0.0003599589588305476, + 0.00036557411308476683, + 0.00037114081965207945, + 0.00037656588728837497, + 0.0003817675634059807, + 0.000386522190449356, + 0.000390740540953886, + 0.0003942213119635423, + 0.0003969608611803444, + 0.00039883064706310105, + 0.00039976560285740213, + 0.00039976186007087796, + 0.00039883809541256326, + 0.00039701481556588246, + 0.00039419711687014214, + 0.0003907051665700301, + 0.0003865501266496062, + 0.00038176382994872934, + 0.0003765528998380163, + 0.0003710327870165344, + 0.000365432598347803, + 0.00035986778575892384, + 0.00035442034297375935, + 0.0003492075070713277, + 0.00034431871549227933, + 0.00033977454601502095, + 0.0003356996416984995, + 0.0003320456248814186, + 0.0003287454712242911, + 0.0003259779692949255, + 0.00032354389476831345, + 0.00032162753126303677, + 0.0003201152376115863, + 0.0003191430943289274, + 0.0003186532536526182 + ], + [ + 0.00032894355401547764, + 0.00032930667543357617, + 0.00033001810040130165, + 0.0003310833664042652, + 0.00033256576866111555, + 0.00033430517406014826, + 0.00033634262284618213, + 0.0003386593559072775, + 0.0003412647691924332, + 0.0003442035333434177, + 0.00034749049238913873, + 0.0003510830174668271, + 0.00035490635013612587, + 0.00035883590271035585, + 0.0003628138886630908, + 0.00036685517803820405, + 0.0003707921388758824, + 0.0003745801762037471, + 0.0003779864012729189, + 0.00038096248009770523, + 0.000383461761516837, + 0.00038542653053933156, + 0.00038677308895172395, + 0.00038743972940925907, + 0.00038745272837108647, + 0.00038678605052397836, + 0.00038544516087005577, + 0.0003834691713593902, + 0.00038090660062055603, + 0.00037791751345388154, + 0.0003744536236496783, + 0.00037068982009676106, + 0.00036673602130578927, + 0.00036269847794236803, + 0.0003586869975513602, + 0.00035475554373144686, + 0.00035100291622723633, + 0.0003474123177903336, + 0.00034411041100274823, + 0.00034115668218203765, + 0.00033854377907120687, + 0.00033623819019301036, + 0.00033423066505029807, + 0.0003324801467316287, + 0.00033106102530295917, + 0.0003300032067219075, + 0.0003292638954614212, + 0.00032895285354340683 + ], + [ + 0.00033782022104880314, + 0.00033808278214585505, + 0.0003385707188632177, + 0.00033928025063864294, + 0.0003402914110229203, + 0.0003414571846038154, + 0.00034278497414894554, + 0.00034429528375991687, + 0.00034602717034716503, + 0.0003479899910343357, + 0.00035023027893204645, + 0.0003526232872608134, + 0.0003551261174136175, + 0.00035776682940758523, + 0.0003604689793352438, + 0.0003631357644896797, + 0.00036575973704112654, + 0.00036827384494084495, + 0.00037055894522611266, + 0.00037253476576594674, + 0.00037416983111605596, + 0.0003754547584503148, + 0.0003763152014026096, + 0.0003767528291839572, + 0.00037676581375909417, + 0.0003763374878149878, + 0.0003754882882878722, + 0.0003742499119643684, + 0.00037257010184475525, + 0.00037053087650367936, + 0.00036815652151641243, + 0.0003656070110142746, + 0.00036301847997113196, + 0.0003602679055519978, + 0.000357591813475369, + 0.00035499207921024794, + 0.000352496649812338, + 0.00035015949458788205, + 0.0003479490373718826, + 0.0003459507889416793, + 0.00034418535606187405, + 0.000342647138165002, + 0.0003413287073974267, + 0.0003401443304117959, + 0.0003392075754410363, + 0.0003384999307968072, + 0.0003380493041143186, + 0.0003378351913548699 + ], + [ + 0.0003452107086637778, + 0.00034534661118848113, + 0.0003456128936752513, + 0.00034607469064902027, + 0.0003466072499270411, + 0.0003472924712554335, + 0.0003480540605843001, + 0.00034893113699446034, + 0.00034995704901571263, + 0.0003511301331251784, + 0.000352420651518659, + 0.0003538376901221995, + 0.00035532358933433096, + 0.0003568970394784715, + 0.00035844253032891733, + 0.0003600291237166252, + 0.00036155047976365787, + 0.00036304389318879036, + 0.0003644182005645172, + 0.0003655857388588877, + 0.00036646279650368757, + 0.00036724492484147475, + 0.000367723445566748, + 0.00036794512519531283, + 0.00036795997962017947, + 0.00036772161666848814, + 0.00036726355215088333, + 0.00036652983952558565, + 0.0003655615575340195, + 0.0003643828362233453, + 0.00036300483357066675, + 0.0003615039283073008, + 0.00035991184548395653, + 0.000358332674936442, + 0.00035674439029764326, + 0.0003551876443541139, + 0.0003537668332328695, + 0.00035233680025540743, + 0.00035104265770801205, + 0.000349884406655124, + 0.0003488416887728247, + 0.00034793108139211717, + 0.00034713039109504434, + 0.00034648618172561125, + 0.0003459331461035227, + 0.00034555516646078786, + 0.0003453093628766701, + 0.00034518835375789333 + ], + [ + 0.0003507442922168536, + 0.00035078522106660897, + 0.0003509024874271676, + 0.00035114276506022376, + 0.00035142376857338854, + 0.0003517290029295366, + 0.00035206415851240716, + 0.00035249974588371096, + 0.0003529855386485659, + 0.00035350308542692245, + 0.0003540968643275709, + 0.0003547373022452592, + 0.000355440977143162, + 0.00035619116394443166, + 0.0003568873715354879, + 0.0003576487766016713, + 0.0003583879347996901, + 0.00035912703716275724, + 0.00035971534548010517, + 0.00036025335527877325, + 0.0003606312414513697, + 0.00036097196415691714, + 0.0003612418850854624, + 0.00036127722262257664, + 0.0003612790749849154, + 0.0003612027795727142, + 0.00036099993798019946, + 0.00036071318552113705, + 0.0003602719758311085, + 0.00035969853310415775, + 0.0003590395918046312, + 0.00035833577919571255, + 0.0003576115766278096, + 0.0003568781622356995, + 0.0003561129642210834, + 0.000355360830760729, + 0.00035468138453237234, + 0.0003540186616109941, + 0.00035344710457522457, + 0.00035292590527418637, + 0.0003524289442095926, + 0.0003519634588563012, + 0.00035163217633139864, + 0.00035130085802561917, + 0.000351027156588975, + 0.00035087642054318786, + 0.000350779639504096, + 0.00035074242908256096 + ], + [ + 0.0003543372854242355, + 0.0003543222720585943, + 0.0003543799634541251, + 0.00035437799470889247, + 0.0003544878236512188, + 0.0003545584341508753, + 0.0003546587015721866, + 0.00035475346001587074, + 0.0003549077765837136, + 0.00035504339014642193, + 0.0003551902126757575, + 0.000355322159005828, + 0.00035553962640154493, + 0.0003557423154390947, + 0.00035591326464998375, + 0.0003561103038722129, + 0.00035632976918263437, + 0.00035649717422369206, + 0.00035667199036790067, + 0.00035677409401508903, + 0.0003569266213656198, + 0.000357000925448208, + 0.0003570734514553463, + 0.00035704916839656196, + 0.0003570305558270444, + 0.0003570659963182409, + 0.0003569822995703758, + 0.00035690799547793495, + 0.000356831834829101, + 0.000356670120602217, + 0.0003564617722160051, + 0.0003563187151970636, + 0.0003561308738711502, + 0.00035589839940109987, + 0.0003556809355184322, + 0.00035546891351165635, + 0.0003552755409948034, + 0.0003551324780215241, + 0.00035498379759468205, + 0.00035487238888500894, + 0.0003547105814226079, + 0.000354595279567607, + 0.00035452102872504264, + 0.0003544206806097737, + 0.0003543835392499275, + 0.0003543278179286084, + 0.0003543260009818483, + 0.0003543596470933873 + ], + [ + 0.00035555189018735673, + 0.000355561162210719, + 0.0003555555144981456, + 0.0003555385872643364, + 0.0003555532553498409, + 0.0003555606046165909, + 0.0003555584633409346, + 0.0003555526077084021, + 0.00035553744036469166, + 0.00035556132343281504, + 0.0003555367636179106, + 0.00035556054995689425, + 0.0003555490043011257, + 0.00035555793719524144, + 0.00035555010325215747, + 0.00035554972182564026, + 0.0003555567902428543, + 0.00035552664787521344, + 0.0003555243834914971, + 0.000355548410678229, + 0.00035555558502372317, + 0.0003555554459605031, + 0.0003555794624945969, + 0.00035555706538364554, + 0.0003555533391544159, + 0.00035557759143272987, + 0.0003555479272778354, + 0.000355576132286524, + 0.0003555465449114222, + 0.00035552442984192016, + 0.00035552477813262877, + 0.0003555344751469035, + 0.0003555348592053741, + 0.00035555569263296, + 0.0003555504793818856, + 0.00035552667586547475, + 0.0003555289654285531, + 0.00035552930445603204, + 0.0003555594589714357, + 0.00035556160024265236, + 0.0003555358420969247, + 0.00035553793832482946, + 0.00035553819922471384, + 0.0003555607781195645, + 0.00035553672147098207, + 0.00035553869321386866, + 0.00035556115426399704, + 0.0003555369863435385 + ] + ], + "history": [ + { + "step": 0, + "mass": 1584.0000070855021 + }, + { + "step": 519, + "mass": 1584.00528729707, + "u_change": 0.06439558582423602, + "v_change": 0.07725380538355829, + "mass_change": 3.3334668840021693e-06 + }, + { + "step": 1038, + "mass": 1584.0103389397264, + "u_change": 0.006089487651326539, + "v_change": 0.002652201398705718, + "mass_change": 3.189168329374643e-06 + }, + { + "step": 1557, + "mass": 1584.015376392752, + "u_change": 0.00047357745296968355, + "v_change": 0.0003203664616142572, + "mass_change": 3.1802102291957487e-06 + }, + { + "step": 2076, + "mass": 1584.01955069229, + "u_change": 9.591859890664732e-05, + "v_change": 6.45963413877095e-05, + "mass_change": 2.635290100671196e-06 + }, + { + "step": 2595, + "mass": 1584.023663442582, + "u_change": 3.990286161296955e-05, + "v_change": 4.7214542898169446e-05, + "mass_change": 2.5964332534263304e-06 + }, + { + "step": 3114, + "mass": 1584.0273539423943, + "u_change": 3.442319529375185e-05, + "v_change": 4.251630980001889e-05, + "mass_change": 2.32986098223254e-06 + }, + { + "step": 3633, + "mass": 1584.03093444556, + "u_change": 4.063872272513524e-05, + "v_change": 5.408275763364619e-05, + "mass_change": 2.26041865511723e-06 + }, + { + "step": 4152, + "mass": 1584.034264754504, + "u_change": 3.075733828005945e-05, + "v_change": 2.8512629305315206e-05, + "mass_change": 2.102467758263796e-06 + }, + { + "step": 4671, + "mass": 1584.037502117455, + "u_change": 2.619016911287012e-05, + "v_change": 3.4558880416003174e-05, + "mass_change": 2.0437897326761308e-06 + }, + { + "step": 5190, + "mass": 1584.0409727972, + "u_change": 3.3649615513613035e-05, + "v_change": 2.5612713474839472e-05, + "mass_change": 2.1910856878492072e-06 + }, + { + "step": 5709, + "mass": 1584.0442774370313, + "u_change": 2.6439066195677058e-05, + "v_change": 2.2573821863044084e-05, + "mass_change": 2.0862625103555073e-06 + }, + { + "step": 6228, + "mass": 1584.047457801178, + "u_change": 2.7305672566789598e-05, + "v_change": 2.4675683086456194e-05, + "mass_change": 2.0078056392691543e-06 + }, + { + "step": 6747, + "mass": 1584.050682604313, + "u_change": 2.5961225044549837e-05, + "v_change": 2.796123406637906e-05, + "mass_change": 2.0358605557916095e-06 + }, + { + "step": 7266, + "mass": 1584.0541379954666, + "u_change": 2.2012153662751687e-05, + "v_change": 2.5439857607385184e-05, + "mass_change": 2.1814337993918216e-06 + }, + { + "step": 7785, + "mass": 1584.0575437601656, + "u_change": 2.3707712862770118e-05, + "v_change": 2.4324010164322142e-05, + "mass_change": 2.1501039670124197e-06 + }, + { + "step": 8304, + "mass": 1584.0610020309687, + "u_change": 2.705723917089148e-05, + "v_change": 2.517375472723131e-05, + "mass_change": 2.1832517598639363e-06 + }, + { + "step": 8823, + "mass": 1584.0644798297435, + "u_change": 3.0131183236920246e-05, + "v_change": 3.0751140266877985e-05, + "mass_change": 2.195580024799028e-06 + }, + { + "step": 9342, + "mass": 1584.0679859872907, + "u_change": 2.9712304968449212e-05, + "v_change": 2.727011027230614e-05, + "mass_change": 2.213483290121116e-06 + }, + { + "step": 9861, + "mass": 1584.0715058203787, + "u_change": 3.1526889200496684e-05, + "v_change": 2.7258933488777734e-05, + "mass_change": 2.222116838495157e-06 + }, + { + "step": 10380, + "mass": 1584.0750062689185, + "u_change": 3.45694838824836e-05, + "v_change": 3.019616718034685e-05, + "mass_change": 2.2098791188099702e-06 + }, + { + "step": 10899, + "mass": 1584.0783417373896, + "u_change": 3.8124867510587626e-05, + "v_change": 3.0174096002981656e-05, + "mass_change": 2.1057250354356963e-06 + }, + { + "step": 11418, + "mass": 1584.0819795951247, + "u_change": 4.2805773089053834e-05, + "v_change": 2.740585405942951e-05, + "mass_change": 2.296627347780464e-06 + }, + { + "step": 11937, + "mass": 1584.086013192311, + "u_change": 5.136884047715227e-05, + "v_change": 3.612277509816538e-05, + "mass_change": 2.546462858689901e-06 + }, + { + "step": 12456, + "mass": 1584.0899069514126, + "u_change": 4.363404684666353e-05, + "v_change": 3.405542085804123e-05, + "mass_change": 2.4581812400327075e-06 + }, + { + "step": 12975, + "mass": 1584.0939712766558, + "u_change": 4.250303474284065e-05, + "v_change": 3.08062054872579e-05, + "mass_change": 2.5658618845039233e-06 + }, + { + "step": 13494, + "mass": 1584.097817696631, + "u_change": 3.707561887173771e-05, + "v_change": 2.599393324829213e-05, + "mass_change": 2.428295428002437e-06 + }, + { + "step": 14013, + "mass": 1584.1016560010612, + "u_change": 3.7893155594786144e-05, + "v_change": 3.013530676962835e-05, + "mass_change": 2.423171977952628e-06 + }, + { + "step": 14532, + "mass": 1584.1053813062608, + "u_change": 3.2607434214162816e-05, + "v_change": 2.9492816319546304e-05, + "mass_change": 2.351834080150999e-06 + }, + { + "step": 15051, + "mass": 1584.1090751327574, + "u_change": 2.8803080882677226e-05, + "v_change": 2.782015571486474e-05, + "mass_change": 2.3319611616653972e-06 + }, + { + "step": 15570, + "mass": 1584.1126291304827, + "u_change": 3.299688519270698e-05, + "v_change": 3.042504202378995e-05, + "mass_change": 2.2436854225698855e-06 + }, + { + "step": 16089, + "mass": 1584.1164803225547, + "u_change": 3.287415532622855e-05, + "v_change": 2.921212513238995e-05, + "mass_change": 2.4313081154083607e-06 + }, + { + "step": 16608, + "mass": 1584.120300522074, + "u_change": 2.8562361378009733e-05, + "v_change": 3.912294189871515e-05, + "mass_change": 2.4117421100425657e-06 + }, + { + "step": 17127, + "mass": 1584.1240105833858, + "u_change": 3.799583185849221e-05, + "v_change": 3.2759512550791695e-05, + "mass_change": 2.3422104135896876e-06 + }, + { + "step": 17646, + "mass": 1584.12770351395, + "u_change": 3.797950428974561e-05, + "v_change": 3.238872000447411e-05, + "mass_change": 2.331395547831576e-06 + }, + { + "step": 18165, + "mass": 1584.1314775720239, + "u_change": 3.0376068445024274e-05, + "v_change": 4.2572216270794566e-05, + "mass_change": 2.3826124096446174e-06 + }, + { + "step": 18684, + "mass": 1584.1351496092975, + "u_change": 3.630120765416384e-05, + "v_change": 3.207792732950497e-05, + "mass_change": 2.318205339153884e-06 + }, + { + "step": 19203, + "mass": 1584.1388247366995, + "u_change": 3.367159456212745e-05, + "v_change": 3.209070804310242e-05, + "mass_change": 2.320156177720015e-06 + }, + { + "step": 19722, + "mass": 1584.1422722414136, + "u_change": 3.112669807789517e-05, + "v_change": 3.988905736999571e-05, + "mass_change": 2.176454986559393e-06 + }, + { + "step": 20241, + "mass": 1584.1458822004497, + "u_change": 3.315639327006611e-05, + "v_change": 2.8526944979671483e-05, + "mass_change": 2.279014532805473e-06 + }, + { + "step": 20760, + "mass": 1584.1495795417577, + "u_change": 3.365321553816488e-05, + "v_change": 3.4633222364995034e-05, + "mass_change": 2.3341801082442333e-06 + } + ], + "checkpoint_bitwise_equal": true, + "population_budget": { + "steps": [ + { + "step": 20761, + "mass": 1584.1495795417577, + "delta_mass": 6.154179573059082e-06, + "bottom_net_in": 0.01707145757973194, + "top_net_in": -0.01706749200820923, + "collision_roundoff": 2.1886080503463745e-06, + "physical_residual": 2.1886080503463745e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6756110172718763, + "outgoing": 2.6585471630096436 + }, + "flanks": { + "incoming": 5.33368506282568, + "outgoing": 5.333677459508181 + }, + "top": { + "incoming": 7.992226228117943, + "outgoing": 8.009293720126152 + } + } + }, + { + "step": 20762, + "mass": 1584.1495856959373, + "delta_mass": 7.0873647928237915e-06, + "bottom_net_in": 0.017071597278118134, + "top_net_in": -0.017067385837435722, + "collision_roundoff": 2.8759241104125977e-06, + "physical_residual": 2.8759241104125977e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.675611089915037, + "outgoing": 2.658547107130289 + }, + "flanks": { + "incoming": 5.333685105666518, + "outgoing": 5.333677491173148 + }, + "top": { + "incoming": 7.992226358503103, + "outgoing": 8.009293744340539 + } + } + }, + { + "step": 20763, + "mass": 1584.149592783302, + "delta_mass": 7.526949048042297e-06, + "bottom_net_in": 0.017071813344955444, + "top_net_in": -0.01706736907362938, + "collision_roundoff": 3.082677721977234e-06, + "physical_residual": 3.082677721977234e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6756113823503256, + "outgoing": 2.658547043800354 + }, + "flanks": { + "incoming": 5.333685029298067, + "outgoing": 5.333677554503083 + }, + "top": { + "incoming": 7.992226397618651, + "outgoing": 8.00929376669228 + } + } + }, + { + "step": 20764, + "mass": 1584.1496003102511, + "delta_mass": 8.23289155960083e-06, + "bottom_net_in": 0.017071684822440147, + "top_net_in": -0.0170674379914999, + "collision_roundoff": 3.986060619354248e-06, + "physical_residual": 3.986060619354248e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.675611440092325, + "outgoing": 2.6585471108555794 + }, + "flanks": { + "incoming": 5.333684995770454, + "outgoing": 5.33367764018476 + }, + "top": { + "incoming": 7.992226475849748, + "outgoing": 8.009293913841248 + } + } + }, + { + "step": 20765, + "mass": 1584.1496085431427, + "delta_mass": 1.0346993803977966e-05, + "bottom_net_in": 0.017071561887860298, + "top_net_in": -0.01706749014556408, + "collision_roundoff": 6.275251507759094e-06, + "physical_residual": 6.275251507759094e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6756113301962614, + "outgoing": 2.6585471648722887 + }, + "flanks": { + "incoming": 5.33368500508368, + "outgoing": 5.333677608519793 + }, + "top": { + "incoming": 7.992226578295231, + "outgoing": 8.009294068440795 + } + } + }, + { + "step": 20766, + "mass": 1584.1496188901365, + "delta_mass": 7.223337888717651e-06, + "bottom_net_in": 0.017071491107344627, + "top_net_in": -0.01706778258085251, + "collision_roundoff": 3.514811396598816e-06, + "physical_residual": 3.514811396598816e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.675611251965165, + "outgoing": 2.6585472840815783 + }, + "flanks": { + "incoming": 5.333685113117099, + "outgoing": 5.333677589893341 + }, + "top": { + "incoming": 7.992226470261812, + "outgoing": 8.009294252842665 + } + } + }, + { + "step": 20767, + "mass": 1584.1496261134744, + "delta_mass": 1.011975109577179e-05, + "bottom_net_in": 0.017071524634957314, + "top_net_in": -0.01706799305975437, + "collision_roundoff": 6.588175892829895e-06, + "physical_residual": 6.588175892829895e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6756112407892942, + "outgoing": 2.6585473101586103 + }, + "flanks": { + "incoming": 5.333685252815485, + "outgoing": 5.333677658811212 + }, + "top": { + "incoming": 7.992226397618651, + "outgoing": 8.009294390678406 + } + } + }, + { + "step": 20768, + "mass": 1584.1496362332255, + "delta_mass": 1.0360032320022583e-05, + "bottom_net_in": 0.01707160472869873, + "top_net_in": -0.017067883163690567, + "collision_roundoff": 6.638467311859131e-06, + "physical_residual": 6.638467311859131e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6756112314760685, + "outgoing": 2.658547190949321 + }, + "flanks": { + "incoming": 5.333685297518969, + "outgoing": 5.3336777333170176 + }, + "top": { + "incoming": 7.992226270958781, + "outgoing": 8.009294154122472 + } + } + }, + { + "step": 20769, + "mass": 1584.1496465932578, + "delta_mass": 6.303191184997559e-06, + "bottom_net_in": 0.017071545124053955, + "top_net_in": -0.01706780306994915, + "collision_roundoff": 2.561137080192566e-06, + "physical_residual": 2.561137080192566e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6756112687289715, + "outgoing": 2.6585472393780947 + }, + "flanks": { + "incoming": 5.333685310557485, + "outgoing": 5.3336777947843075 + }, + "top": { + "incoming": 7.992226347327232, + "outgoing": 8.009294150397182 + } + } + }, + { + "step": 20770, + "mass": 1584.149652896449, + "delta_mass": 1.1108815670013428e-05, + "bottom_net_in": 0.017071381211280823, + "top_net_in": -0.017068104818463326, + "collision_roundoff": 7.832422852516174e-06, + "physical_residual": 7.832422852516174e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.675611099228263, + "outgoing": 2.6585472989827394 + }, + "flanks": { + "incoming": 5.333685351535678, + "outgoing": 5.3336777705699205 + }, + "top": { + "incoming": 7.9922260493040085, + "outgoing": 8.009294154122472 + } + } + }, + { + "step": 20771, + "mass": 1584.1496640052646, + "delta_mass": 7.0463865995407104e-06, + "bottom_net_in": 0.017071710899472237, + "top_net_in": -0.017068346962332726, + "collision_roundoff": 3.682449460029602e-06, + "physical_residual": 3.682449460029602e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6756113301962614, + "outgoing": 2.658547269180417 + }, + "flanks": { + "incoming": 5.333685465157032, + "outgoing": 5.333677815273404 + }, + "top": { + "incoming": 7.992225803434849, + "outgoing": 8.009294150397182 + } + } + }, + { + "step": 20772, + "mass": 1584.1496710516512, + "delta_mass": 1.142546534538269e-05, + "bottom_net_in": 0.017072003334760666, + "top_net_in": -0.01706833578646183, + "collision_roundoff": 7.757917046546936e-06, + "physical_residual": 7.757917046546936e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.675611389800906, + "outgoing": 2.6585472654551268 + }, + "flanks": { + "incoming": 5.333685716614127, + "outgoing": 5.333677837625146 + }, + "top": { + "incoming": 7.99222588352859, + "outgoing": 8.009294219315052 + } + } + }, + { + "step": 20773, + "mass": 1584.1496824771166, + "delta_mass": 8.570030331611633e-06, + "bottom_net_in": 0.01707199588418007, + "top_net_in": -0.017067857086658478, + "collision_roundoff": 4.431232810020447e-06, + "physical_residual": 4.431232810020447e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6756115667521954, + "outgoing": 2.6585473641753197 + }, + "flanks": { + "incoming": 5.333685824647546, + "outgoing": 5.333678031340241 + }, + "top": { + "incoming": 7.992226220667362, + "outgoing": 8.00929407775402 + } + } + }, + { + "step": 20774, + "mass": 1584.149691047147, + "delta_mass": 7.573515176773071e-06, + "bottom_net_in": 0.01707197166979313, + "top_net_in": -0.017067573964595795, + "collision_roundoff": 3.1758099794387817e-06, + "physical_residual": 3.1758099794387817e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6756116449832916, + "outgoing": 2.658547416329384 + }, + "flanks": { + "incoming": 5.33368587307632, + "outgoing": 5.333678130060434 + }, + "top": { + "incoming": 7.992226207628846, + "outgoing": 8.009293781593442 + } + } + }, + { + "step": 20775, + "mass": 1584.149698620662, + "delta_mass": 3.5334378480911255e-06, + "bottom_net_in": 0.017071640118956566, + "top_net_in": -0.017067572101950645, + "collision_roundoff": -5.345791578292847e-07, + "physical_residual": -5.345791578292847e-07, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6756116058677435, + "outgoing": 2.6585474610328674 + }, + "flanks": { + "incoming": 5.333685813471675, + "outgoing": 5.333678318187594 + }, + "top": { + "incoming": 7.992226228117943, + "outgoing": 8.009293800219893 + } + } + }, + { + "step": 20776, + "mass": 1584.1497021541, + "delta_mass": 7.053837180137634e-06, + "bottom_net_in": 0.01707138493657112, + "top_net_in": -0.017067600041627884, + "collision_roundoff": 3.2689422369003296e-06, + "physical_residual": 3.2689422369003296e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6756115835160017, + "outgoing": 2.658547516912222 + }, + "flanks": { + "incoming": 5.3336857333779335, + "outgoing": 5.333678415045142 + }, + "top": { + "incoming": 7.992226155474782, + "outgoing": 8.00929375551641 + } + } + } + ], + "instrumented_matches_plain": true, + "audit_source_sha256": "3018b449a088ae6d16a3f13ea99abc9decf1bbe074d543109fc130e54171536a", + "max_relative_residual": 0.0, + "max_physical_relative_residual": 4.944244275277543e-09 + } + }, + { + "amplitude": -0.002, + "width": 16, + "nx": 48, + "height": 32, + "viscosity": 0.1, + "top_u": 0.0, + "steps": 20760, + "max_steps": 20760, + "checks": { + "steady": false, + "initialization": true, + "boundary": true, + "mass": false, + "bounded": true, + "flux": true, + "symmetry": true, + "zero": true, + "nonuniform": true, + "restart": true, + "audit": true + }, + "passed": false, + "requested_volume": -0.01706689453125, + "top_target": -0.00035556030273437505, + "bottom_targets": [ + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -2.9327392578125e-05, + -0.000230987548828125, + -0.000556182861328125, + -0.000934600830078125, + -0.0013076477050781251, + -0.0016284484863281251, + -0.001861846923828125, + -0.001984405517578125, + -0.001984405517578125, + -0.001861846923828125, + -0.0016284484863281251, + -0.0013076477050781251, + -0.000934600830078125, + -0.000556182861328125, + -0.000230987548828125, + -2.9327392578125e-05, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0, + -0.0 + ], + "velocity_scale": 0.002, + "rho_scale": 1.0, + "initial_boundary_error": 1.7896178272809593e-08, + "boundary_error": 3.305211538810011e-08, + "mass_offset": 8.509233626432222e-05, + "mass_window_span": 8.509020433525627e-06, + "flux_error": 0.00033447378480036777, + "flux_span": 0.00013128173054212117, + "section_y": [ + 8, + 16, + 24 + ], + "mass_flux_by_y": [ + -0.017065636813640594, + -0.017065351828932762, + -0.017065348103642464, + -0.017064349725842476, + -0.017064230516552925, + -0.0170645359903574, + -0.017065025866031647, + -0.017064707353711128, + -0.017064878717064857, + -0.01706412062048912, + -0.0170645359903574, + -0.017064685001969337, + -0.017065437510609627, + -0.017064200714230537, + -0.01706443727016449, + -0.01706378348171711, + -0.01706400141119957, + -0.017063768580555916, + -0.017063921317458153, + -0.017063632607460022, + -0.01706407032907009, + -0.017063817009329796, + -0.017063859850168228, + -0.017063172534108162, + -0.017062637954950333, + -0.017062902450561523, + -0.01706404983997345, + -0.017064334824681282, + -0.017065228894352913, + -0.01706584542989731, + -0.017066720873117447, + -0.01706715300679207, + -0.017067700624465942 + ], + "volume_flux_by_y": [ + -0.017066924345788336, + -0.01706591655536486, + -0.017065361112188173, + -0.017063964534533908, + -0.017063565701184467, + -0.017063672273728275, + -0.017064019189118665, + -0.017063596499331736, + -0.01706369033040396, + -0.017062872831432686, + -0.01706324350576689, + -0.017063358545128436, + -0.017064083290550473, + -0.017062825405112444, + -0.017063045890770037, + -0.017062378618174445, + -0.017062586021774087, + -0.017062345516069548, + -0.017062491225573875, + -0.017062197078197394, + -0.017062630572839035, + -0.017062374262691506, + -0.017062413875037638, + -0.01706172417155115, + -0.01706118806255666, + -0.01706145164035235, + -0.017062597452630272, + -0.017062881362685516, + -0.017063773861688426, + -0.017064388821233917, + -0.01706526301342259, + -0.01706569361798118, + -0.01706623991861244 + ], + "symmetry": { + "rho": 4.991888999938965e-07, + "u": 9.033027173687718e-05, + "v": 9.03337023478259e-05 + }, + "max_speed": 0.0019843977381050876, + "rho_error": 0.0002470407634973526, + "rho": [ + [ + 1.0001009292900562, + 1.000101137906313, + 1.0001011043787003, + 1.0001015216112137, + 1.000102199614048, + 1.0001027062535286, + 1.0001037940382957, + 1.0001052170991898, + 1.0001068226993084, + 1.0001088343560696, + 1.0001118704676628, + 1.00011595338583, + 1.000121831893921, + 1.0001295320689678, + 1.0001396350562572, + 1.000177912414074, + 1.0002470407634974, + 1.000212736427784, + 1.0001295059919357, + 1.0000445041805506, + 0.9999657198786736, + 0.9999003820121288, + 0.9998544920235872, + 0.9998307302594185, + 0.9998306464403868, + 0.9998544696718454, + 0.9999004527926445, + 0.9999657701700926, + 1.0000445991754532, + 1.0001297239214182, + 1.0002127718180418, + 1.000246912240982, + 1.0001781545579433, + 1.0001398846507072, + 1.0001298896968365, + 1.0001220237463713, + 1.0001160651445389, + 1.0001118369400501, + 1.0001089610159397, + 1.0001068208366632, + 1.0001052021980286, + 1.0001036543399096, + 1.000102797523141, + 1.0001022927463055, + 1.0001016557216644, + 1.0001011118292809, + 1.0001010447740555, + 1.000100925564766 + ], + [ + 1.0001006051898003, + 1.0001009069383144, + 1.0001009833067656, + 1.0001013167202473, + 1.0001019686460495, + 1.0001026596873999, + 1.0001035872846842, + 1.000104682520032, + 1.000106368213892, + 1.0001083817332983, + 1.0001112222671509, + 1.0001149270683527, + 1.0001201760023832, + 1.0001284442842007, + 1.0001406650990248, + 1.0001548547297716, + 1.0001659784466028, + 1.000145310536027, + 1.0001027937978506, + 1.0000488366931677, + 0.9999940618872643, + 0.9999474175274372, + 0.9999140072613955, + 0.9998968113213778, + 0.9998967666178942, + 0.9999141525477171, + 0.9999476037919521, + 0.9999941103160381, + 1.0000487752258778, + 1.000102898105979, + 1.0001456514000893, + 1.0001660119742155, + 1.000154985114932, + 1.0001408196985722, + 1.0001284517347813, + 1.0001204404979944, + 1.000115068629384, + 1.000111309811473, + 1.000108528882265, + 1.0001065209507942, + 1.0001048147678375, + 1.0001036114990711, + 1.0001027584075928, + 1.0001019462943077, + 1.0001014657318592, + 1.0001009702682495, + 1.000100702047348, + 1.0001005716621876 + ], + [ + 1.0001004096120596, + 1.000100389122963, + 1.0001005288213491, + 1.0001011323183775, + 1.0001015700399876, + 1.0001023020595312, + 1.000102998688817, + 1.0001040901988745, + 1.0001054927706718, + 1.000107428058982, + 1.0001099444925785, + 1.000112997367978, + 1.0001171100884676, + 1.0001221671700478, + 1.0001290384680033, + 1.0001334678381681, + 1.0001273546367884, + 1.0001132879406214, + 1.000086147338152, + 1.0000494234263897, + 1.0000126268714666, + 0.9999802969396114, + 0.9999564364552498, + 0.9999440666288137, + 0.9999441523104906, + 0.9999565929174423, + 0.9999804385006428, + 1.0000127721577883, + 1.0000498797744513, + 1.0000861193984747, + 1.000113258138299, + 1.0001273341476917, + 1.0001337975263596, + 1.000129096210003, + 1.0001220423728228, + 1.0001169387251139, + 1.000113122165203, + 1.0001099202781916, + 1.0001075975596905, + 1.0001054499298334, + 1.0001042354851961, + 1.0001031532883644, + 1.0001022145152092, + 1.0001014228910208, + 1.000101137906313, + 1.000100702047348, + 1.0001003872603178, + 1.000100389122963 + ], + [ + 1.000100078061223, + 1.0001000724732876, + 1.0001002568751574, + 1.0001005847007036, + 1.000101163983345, + 1.0001015570014715, + 1.0001022759824991, + 1.0001032762229443, + 1.000104434788227, + 1.0001058783382177, + 1.0001076348125935, + 1.0001097656786442, + 1.0001125074923038, + 1.0001151319593191, + 1.0001166798174381, + 1.000115841627121, + 1.0001084432005882, + 1.000095782801509, + 1.000075938180089, + 1.0000516399741173, + 1.0000265706330538, + 1.0000039786100388, + 0.9999873414635658, + 0.9999785181134939, + 0.9999785050749779, + 0.9999873172491789, + 1.000003982335329, + 1.000026511028409, + 1.0000515934079885, + 1.0000759474933147, + 1.0000960230827332, + 1.0001084171235561, + 1.0001158267259598, + 1.0001166518777609, + 1.0001151897013187, + 1.0001125000417233, + 1.0001099202781916, + 1.0001077633351088, + 1.0001059621572495, + 1.000104296952486, + 1.000103272497654, + 1.0001024156808853, + 1.000101650133729, + 1.0001011304557323, + 1.000100590288639, + 1.0001002792268991, + 1.0001000352203846, + 1.0001000501215458 + ], + [ + 1.0000994224101305, + 1.000099539756775, + 1.0000996235758066, + 1.0000998862087727, + 1.000100240111351, + 1.0001008976250887, + 1.0001013353466988, + 1.0001019313931465, + 1.0001028329133987, + 1.0001037660986185, + 1.0001051854342222, + 1.0001063980162144, + 1.0001076143234968, + 1.0001082513481379, + 1.0001071393489838, + 1.0001038704067469, + 1.000097157433629, + 1.0000861864537, + 1.0000714138150215, + 1.0000544153153896, + 1.0000368356704712, + 1.000021182000637, + 1.0000096559524536, + 1.0000032298266888, + 1.0000032093375921, + 1.0000093337148428, + 1.0000212769955397, + 1.000036720186472, + 1.000054407864809, + 1.0000715777277946, + 1.0000862125307322, + 1.0000971425324678, + 1.000103883445263, + 1.0001072995364666, + 1.0001080576330423, + 1.0001072343438864, + 1.0001065265387297, + 1.0001052785664797, + 1.0001039244234562, + 1.0001028068363667, + 1.0001022312790155, + 1.0001014564186335, + 1.0001008808612823, + 1.0001003667712212, + 1.0001000706106424, + 1.0000995956361294, + 1.0000996105372906, + 1.00009941495955 + ], + [ + 1.0000988636165857, + 1.00009885430336, + 1.000099040567875, + 1.0000992733985186, + 1.0000994950532913, + 1.0000995732843876, + 1.0001001134514809, + 1.0001005828380585, + 1.0001011993736029, + 1.0001017656177282, + 1.0001023970544338, + 1.0001026578247547, + 1.0001030173152685, + 1.0001022275537252, + 1.0001000743359327, + 1.000096233561635, + 1.0000898223370314, + 1.000080931931734, + 1.0000699386000633, + 1.0000574868172407, + 1.0000451132655144, + 1.0000339541584253, + 1.000025749206543, + 1.0000214725732803, + 1.0000213459134102, + 1.0000257566571236, + 1.0000340957194567, + 1.0000450629740953, + 1.0000576209276915, + 1.0000700652599335, + 1.000080917030573, + 1.0000900737941265, + 1.0000961292535067, + 1.0001002177596092, + 1.0001021586358547, + 1.0001028515398502, + 1.0001028534024954, + 1.0001023970544338, + 1.0001017674803734, + 1.0001011695712805, + 1.0001006834208965, + 1.0001002699136734, + 1.0000999458134174, + 1.0000996366143227, + 1.0000992976129055, + 1.000099040567875, + 1.000098954886198, + 1.0000988394021988 + ], + [ + 1.0000980962067842, + 1.000098254531622, + 1.0000983253121376, + 1.000098453834653, + 1.000098930671811, + 1.0000988598912954, + 1.0000990610569715, + 1.0000992845743895, + 1.0000995267182589, + 1.0000998172909021, + 1.000099716708064, + 1.0000996813178062, + 1.0000990256667137, + 1.0000976622104645, + 1.0000952128320932, + 1.000091204419732, + 1.00008556060493, + 1.000078434124589, + 1.0000700484961271, + 1.0000606514513493, + 1.0000516474246979, + 1.00004368647933, + 1.000037906691432, + 1.0000348221510649, + 1.0000349637120962, + 1.0000377967953682, + 1.0000436808913946, + 1.0000516530126333, + 1.0000606644898653, + 1.0000699236989021, + 1.0000783111900091, + 1.0000855959951878, + 1.0000910684466362, + 1.0000952184200287, + 1.0000978205353022, + 1.0000991690903902, + 1.0000996626913548, + 1.000099891796708, + 1.0000998228788376, + 1.000099666416645, + 1.0000993199646473, + 1.0000990517437458, + 1.0000988189131021, + 1.0000990014523268, + 1.0000985618680716, + 1.0000983383506536, + 1.0000982284545898, + 1.0000980868935585 + ], + [ + 1.0000975113362074, + 1.0000973548740149, + 1.0000974666327238, + 1.0000976584851742, + 1.0000976845622063, + 1.0000977609306574, + 1.000097906216979, + 1.0000978838652372, + 1.0000980142503977, + 1.0000979769974947, + 1.0000976510345936, + 1.0000968389213085, + 1.000095745548606, + 1.0000939052551985, + 1.0000915061682463, + 1.0000877175480127, + 1.0000828970223665, + 1.0000772569328547, + 1.0000706892460585, + 1.0000638477504253, + 1.000057142227888, + 1.0000512395054102, + 1.000047080218792, + 1.0000447761267424, + 1.000044910237193, + 1.0000471025705338, + 1.0000512339174747, + 1.0000570304691792, + 1.0000637229532003, + 1.0000704806298018, + 1.0000770818442106, + 1.0000829584896564, + 1.000087609514594, + 1.0000915061682463, + 1.0000941585749388, + 1.0000958312302828, + 1.0000970475375652, + 1.0000974982976913, + 1.0000979658216238, + 1.0000979844480753, + 1.0000979844480753, + 1.0000978894531727, + 1.0000979341566563, + 1.000097930431366, + 1.0000979416072369, + 1.0000974424183369, + 1.0000973232090473, + 1.000097507610917 + ], + [ + 1.0000966750085354, + 1.0000968780368567, + 1.000096820294857, + 1.0000968463718891, + 1.0000968035310507, + 1.0000968463718891, + 1.0000968668609858, + 1.000096732750535, + 1.0000962298363447, + 1.0000962764024734, + 1.0000954400748014, + 1.0000945404171944, + 1.0000932235270739, + 1.000091303139925, + 1.0000888016074896, + 1.0000856518745422, + 1.0000815819948912, + 1.000076785683632, + 1.0000717714428902, + 1.0000663716346025, + 1.0000614877790213, + 1.000057179480791, + 1.0000542812049389, + 1.0000523924827576, + 1.0000527389347553, + 1.000054044649005, + 1.0000571981072426, + 1.0000614430755377, + 1.000066252425313, + 1.000071594491601, + 1.0000767949968576, + 1.0000814236700535, + 1.000085612758994, + 1.0000889468938112, + 1.0000914707779884, + 1.0000931844115257, + 1.0000946819782257, + 1.0000954624265432, + 1.000096119940281, + 1.0000962223857641, + 1.0000967383384705, + 1.000096706673503, + 1.0000968091189861, + 1.0000968128442764, + 1.0000969246029854, + 1.0000968147069216, + 1.0000968631356955, + 1.0000966750085354 + ], + [ + 1.0000960994511843, + 1.0000959411263466, + 1.000095957890153, + 1.0000959560275078, + 1.0000958051532507, + 1.0000958293676376, + 1.0000956263393164, + 1.0000953525304794, + 1.000095158815384, + 1.0000947620719671, + 1.0000938214361668, + 1.0000926181674004, + 1.0000911783427, + 1.0000893454998732, + 1.0000872611999512, + 1.0000841990113258, + 1.0000805631279945, + 1.0000769309699535, + 1.0000729523599148, + 1.0000689830631018, + 1.0000651273876429, + 1.0000619739294052, + 1.0000596214085817, + 1.0000585690140724, + 1.0000586304813623, + 1.000059649348259, + 1.0000619664788246, + 1.0000651441514492, + 1.0000689718872309, + 1.0000729765743017, + 1.000076986849308, + 1.0000808276236057, + 1.000084362924099, + 1.0000872556120157, + 1.0000892765820026, + 1.0000911597162485, + 1.0000927336513996, + 1.0000936351716518, + 1.000094523653388, + 1.0000951867550611, + 1.000095335766673, + 1.0000956412404776, + 1.0000958181917667, + 1.0000959672033787, + 1.0000960659235716, + 1.0000959523022175, + 1.0000961236655712, + 1.0000959560275078 + ], + [ + 1.0000952295958996, + 1.0000952389091253, + 1.0000951141119003, + 1.0000951271504164, + 1.0000950247049332, + 1.00009492225945, + 1.0000945068895817, + 1.000094110146165, + 1.0000938344746828, + 1.0000932402908802, + 1.0000924374908209, + 1.0000912342220545, + 1.0000898223370314, + 1.000087970867753, + 1.0000858586281538, + 1.0000833608210087, + 1.0000803507864475, + 1.0000773835927248, + 1.0000740867108107, + 1.0000711139291525, + 1.000067874789238, + 1.0000657457858324, + 1.0000641532242298, + 1.0000631418079138, + 1.0000631846487522, + 1.0000640917569399, + 1.0000658128410578, + 1.000068087130785, + 1.000071108341217, + 1.0000741444528103, + 1.0000775046646595, + 1.000080456957221, + 1.0000833291560411, + 1.00008599832654, + 1.0000879541039467, + 1.0000898707658052, + 1.0000912100076675, + 1.000092113390565, + 1.0000930167734623, + 1.000093825161457, + 1.000094085931778, + 1.0000944919884205, + 1.0000947620719671, + 1.0000951718539, + 1.000095222145319, + 1.0000952258706093, + 1.0000952128320932, + 1.000095123425126 + ], + [ + 1.0000945590436459, + 1.0000945925712585, + 1.0000942330807447, + 1.0000942796468735, + 1.0000941660255194, + 1.0000940635800362, + 1.0000936202704906, + 1.0000930149108171, + 1.0000925697386265, + 1.0000919941812754, + 1.0000911932438612, + 1.0000900495797396, + 1.0000887345522642, + 1.0000870265066624, + 1.0000850930809975, + 1.000083088874817, + 1.0000804960727692, + 1.0000778418034315, + 1.0000752117484808, + 1.0000727232545614, + 1.000070694833994, + 1.0000686421990395, + 1.000067263841629, + 1.0000668242573738, + 1.0000666715204716, + 1.0000672657042742, + 1.0000688042491674, + 1.0000705011188984, + 1.0000726487487555, + 1.00007538869977, + 1.0000780876725912, + 1.0000805631279945, + 1.0000830441713333, + 1.0000850781798363, + 1.0000870004296303, + 1.0000887606292963, + 1.000090155750513, + 1.0000909753143787, + 1.0000919308513403, + 1.000092525035143, + 1.0000930894166231, + 1.0000937096774578, + 1.000094085931778, + 1.0000941511243582, + 1.0000942442566156, + 1.0000941082835197, + 1.0000944659113884, + 1.0000944063067436 + ], + [ + 1.0000939723104239, + 1.0000938326120377, + 1.000093823298812, + 1.000093724578619, + 1.0000935215502977, + 1.0000930055975914, + 1.0000925958156586, + 1.00009211525321, + 1.000091651454568, + 1.0000907965004444, + 1.0000901129096746, + 1.0000890158116817, + 1.0000878050923347, + 1.000086335465312, + 1.0000847950577736, + 1.0000824891030788, + 1.0000805668532848, + 1.000078622251749, + 1.000076450407505, + 1.0000743716955185, + 1.0000726580619812, + 1.0000712852925062, + 1.0000702366232872, + 1.0000696070492268, + 1.0000696163624525, + 1.0000704154372215, + 1.0000712741166353, + 1.0000726357102394, + 1.000074326992035, + 1.000076424330473, + 1.000078584998846, + 1.0000807624310255, + 1.0000828057527542, + 1.0000846218317747, + 1.0000864416360855, + 1.0000880397856236, + 1.000089194625616, + 1.000089978799224, + 1.0000908877700567, + 1.0000914726406336, + 1.000092277303338, + 1.000092713162303, + 1.0000929925590754, + 1.0000934042036533, + 1.0000936184078455, + 1.000093698501587, + 1.000093823298812, + 1.000093836337328 + ], + [ + 1.000093238428235, + 1.0000931024551392, + 1.0000930298119783, + 1.0000928547233343, + 1.0000925622880459, + 1.000092277303338, + 1.0000918507575989, + 1.000091502442956, + 1.0000908970832825, + 1.0000899601727724, + 1.000089343637228, + 1.000088231638074, + 1.0000871997326612, + 1.0000858306884766, + 1.0000843107700348, + 1.0000826269388199, + 1.0000809822231531, + 1.0000791922211647, + 1.000077374279499, + 1.0000756960362196, + 1.0000742748379707, + 1.000073280185461, + 1.000072654336691, + 1.0000719800591469, + 1.0000718832015991, + 1.0000724717974663, + 1.0000732727348804, + 1.0000743512064219, + 1.0000758580863476, + 1.000077374279499, + 1.0000791475176811, + 1.000080956146121, + 1.000082777813077, + 1.0000842958688736, + 1.0000858288258314, + 1.0000871941447258, + 1.000088470056653, + 1.0000893417745829, + 1.00009042955935, + 1.0000908859074116, + 1.000091526657343, + 1.0000919699668884, + 1.0000922847539186, + 1.0000925697386265, + 1.000092899426818, + 1.000093013048172, + 1.0000930316746235, + 1.0000932142138481 + ], + [ + 1.0000926610082388, + 1.000092539936304, + 1.0000925790518522, + 1.0000919327139854, + 1.0000919327139854, + 1.0000916924327612, + 1.0000913329422474, + 1.0000909119844437, + 1.0000902693718672, + 1.0000895224511623, + 1.0000885725021362, + 1.0000877231359482, + 1.000086596235633, + 1.0000855382531881, + 1.0000839903950691, + 1.0000824686139822, + 1.0000812839716673, + 1.0000797230750322, + 1.0000781510025263, + 1.0000769291073084, + 1.00007569976151, + 1.0000748429447412, + 1.0000743046402931, + 1.0000739470124245, + 1.000073742121458, + 1.0000740122050047, + 1.0000747498124838, + 1.0000756718218327, + 1.0000770222395658, + 1.0000781491398811, + 1.0000796932727098, + 1.0000812597572803, + 1.0000827610492706, + 1.000084163621068, + 1.0000855382531881, + 1.000086648389697, + 1.0000877063721418, + 1.0000887475907803, + 1.0000895131379366, + 1.0000902600586414, + 1.0000909194350243, + 1.0000911839306355, + 1.000091478228569, + 1.0000920053571463, + 1.0000922735780478, + 1.000092588365078, + 1.0000925790518522, + 1.0000926535576582 + ], + [ + 1.0000919364392757, + 1.0000919494777918, + 1.0000918041914701, + 1.0000916328281164, + 1.0000913012772799, + 1.0000913329422474, + 1.0000908728688955, + 1.0000902153551579, + 1.000089656561613, + 1.0000890512019396, + 1.0000880733132362, + 1.000087158754468, + 1.0000863429158926, + 1.0000852663069963, + 1.000084038823843, + 1.00008275359869, + 1.0000815689563751, + 1.0000801887363195, + 1.0000789277255535, + 1.0000780913978815, + 1.0000770203769207, + 1.0000760648399591, + 1.0000757053494453, + 1.000075364485383, + 1.0000753551721573, + 1.0000756811350584, + 1.0000761914998293, + 1.0000770017504692, + 1.0000780504196882, + 1.0000789128243923, + 1.000080168247223, + 1.000081516802311, + 1.0000829063355923, + 1.0000840779393911, + 1.0000850595533848, + 1.000086111947894, + 1.000087197870016, + 1.0000880789011717, + 1.0000889040529728, + 1.0000896248966455, + 1.0000903885811567, + 1.000090766698122, + 1.0000911988317966, + 1.0000915545970201, + 1.0000916291028261, + 1.0000919625163078, + 1.0000919103622437, + 1.0000919438898563 + ], + [ + 1.000091491267085, + 1.0000915173441172, + 1.0000915434211493, + 1.0000912137329578, + 1.0000910349190235, + 1.0000909101217985, + 1.0000902470201254, + 1.0000896472483873, + 1.0000892356038094, + 1.0000887792557478, + 1.0000877063721418, + 1.0000868793576956, + 1.000085886567831, + 1.0000850781798363, + 1.000084051862359, + 1.0000829957425594, + 1.0000817142426968, + 1.0000807009637356, + 1.0000796373933554, + 1.0000786408782005, + 1.0000777021050453, + 1.0000772662460804, + 1.0000769849866629, + 1.000076463446021, + 1.0000764578580856, + 1.0000769793987274, + 1.0000774133950472, + 1.0000780373811722, + 1.0000788513571024, + 1.000079471617937, + 1.000080605968833, + 1.0000818334519863, + 1.0000829566270113, + 1.0000840444117785, + 1.0000850651413202, + 1.000085761770606, + 1.0000870693475008, + 1.0000877100974321, + 1.000088619068265, + 1.000089343637228, + 1.0000897571444511, + 1.0000902637839317, + 1.0000905580818653, + 1.000090841203928, + 1.0000911932438612, + 1.0000915080308914, + 1.0000915359705687, + 1.000091502442956 + ], + [ + 1.0000912137329578, + 1.0000910833477974, + 1.0000909268856049, + 1.0000908337533474, + 1.0000904500484467, + 1.000090267509222, + 1.000089880079031, + 1.000089168548584, + 1.0000886879861355, + 1.000088308006525, + 1.0000873915851116, + 1.0000866334885359, + 1.0000856444239616, + 1.0000847671180964, + 1.0000837855041027, + 1.0000829622149467, + 1.0000820010900497, + 1.0000811386853456, + 1.0000801887363195, + 1.0000793971121311, + 1.0000786166638136, + 1.0000781957060099, + 1.0000779274851084, + 1.0000775884836912, + 1.0000775586813688, + 1.000077772885561, + 1.000078197568655, + 1.0000786036252975, + 1.0000794529914856, + 1.0000801533460617, + 1.00008112937212, + 1.00008200481534, + 1.000082978978753, + 1.0000838059931993, + 1.0000847838819027, + 1.0000856220722198, + 1.0000866241753101, + 1.0000873655080795, + 1.0000883117318153, + 1.0000889040529728, + 1.0000893045216799, + 1.0000896081328392, + 1.0000902879983187, + 1.0000905338674784, + 1.000090902671218, + 1.0000908970832825, + 1.0000910814851522, + 1.0000910330563784 + ], + [ + 1.0000907573848963, + 1.0000907760113478, + 1.0000905394554138, + 1.0000904519110918, + 1.0000901333987713, + 1.000089792534709, + 1.0000896584242582, + 1.0000890549272299, + 1.0000884719192982, + 1.0000876858830452, + 1.0000870432704687, + 1.0000862646847963, + 1.0000855475664139, + 1.000084761530161, + 1.0000840108841658, + 1.000083103775978, + 1.0000822376459837, + 1.0000814273953438, + 1.0000806283205748, + 1.0000800509005785, + 1.0000793617218733, + 1.000079084187746, + 1.0000785607844591, + 1.0000786036252975, + 1.0000782888382673, + 1.0000786129385233, + 1.0000790879130363, + 1.0000793877989054, + 1.0000800844281912, + 1.0000806599855423, + 1.0000812709331512, + 1.0000821202993393, + 1.0000831373035908, + 1.0000840239226818, + 1.000084713101387, + 1.0000855587422848, + 1.0000862926244736, + 1.0000871662050486, + 1.0000878050923347, + 1.0000884626060724, + 1.0000888723880053, + 1.0000895205885172, + 1.0000897329300642, + 1.0000902861356735, + 1.0000904481858015, + 1.0000905767083168, + 1.0000908747315407, + 1.0000908691436052 + ], + [ + 1.0000904649496078, + 1.000090504065156, + 1.0000904314219952, + 1.0000902879983187, + 1.0000898279249668, + 1.00008949264884, + 1.0000892076641321, + 1.0000887606292963, + 1.0000883042812347, + 1.0000874623656273, + 1.0000869426876307, + 1.0000861696898937, + 1.0000854693353176, + 1.000084888190031, + 1.000084038823843, + 1.0000834092497826, + 1.0000825077295303, + 1.000081667676568, + 1.0000809542834759, + 1.0000803600996733, + 1.0000800732523203, + 1.0000796727836132, + 1.0000794399529696, + 1.0000790935009718, + 1.0000790990889072, + 1.0000792853534222, + 1.0000796783715487, + 1.0000800639390945, + 1.0000801924616098, + 1.0000807791948318, + 1.000081667676568, + 1.0000825244933367, + 1.0000832602381706, + 1.000084038823843, + 1.0000847559422255, + 1.0000852905213833, + 1.0000861715525389, + 1.0000867284834385, + 1.0000873431563377, + 1.0000881347805262, + 1.0000886097550392, + 1.0000892225652933, + 1.0000895075500011, + 1.000089792534709, + 1.0000901222229004, + 1.0000904239714146, + 1.000090392306447, + 1.0000905767083168 + ], + [ + 1.0000902581959963, + 1.0000902507454157, + 1.0000900644809008, + 1.0000898204743862, + 1.0000897534191608, + 1.0000893995165825, + 1.0000888984650373, + 1.0000884793698788, + 1.0000879988074303, + 1.0000873524695635, + 1.0000866167247295, + 1.0000860840082169, + 1.000085337087512, + 1.0000847484916449, + 1.0000840350985527, + 1.0000834353268147, + 1.0000826641917229, + 1.0000818893313408, + 1.000081392005086, + 1.0000808350741863, + 1.0000803396105766, + 1.0000800136476755, + 1.0000798124819994, + 1.000079846009612, + 1.000079695135355, + 1.0000797919929028, + 1.00008000805974, + 1.0000803507864475, + 1.000080730766058, + 1.000081142410636, + 1.0000819098204374, + 1.0000824984163046, + 1.0000832118093967, + 1.0000840350985527, + 1.0000847484916449, + 1.0000853519886732, + 1.0000861212611198, + 1.0000867992639542, + 1.0000872109085321, + 1.0000878758728504, + 1.0000882148742676, + 1.0000889152288437, + 1.0000893119722605, + 1.0000897757709026, + 1.000089954584837, + 1.0000900570303202, + 1.0000902935862541, + 1.000090453773737 + ], + [ + 1.0000900719314814, + 1.0000899694859982, + 1.0000897236168385, + 1.0000898111611605, + 1.0000896789133549, + 1.0000893156975508, + 1.000088781118393, + 1.0000883676111698, + 1.0000876262784004, + 1.0000872611999512, + 1.0000866334885359, + 1.0000862013548613, + 1.0000853221863508, + 1.000084761530161, + 1.0000842045992613, + 1.000083614140749, + 1.0000825989991426, + 1.0000822059810162, + 1.0000816658139229, + 1.0000810846686363, + 1.000080605968833, + 1.000080157071352, + 1.0000799745321274, + 1.0000799875706434, + 1.0000798478722572, + 1.0000799987465143, + 1.000080181285739, + 1.0000808257609606, + 1.0000809654593468, + 1.000081516802311, + 1.000082079321146, + 1.0000825077295303, + 1.0000832062214613, + 1.0000839587301016, + 1.0000845901668072, + 1.0000852067023516, + 1.0000857841223478, + 1.0000866241753101, + 1.0000871568918228, + 1.0000876504927874, + 1.000088382512331, + 1.0000888127833605, + 1.000089343637228, + 1.0000896863639355, + 1.0000897645950317, + 1.0000898335129023, + 1.0000899489969015, + 1.0000902861356735 + ], + [ + 1.0000900067389011, + 1.0000898335129023, + 1.0000898577272892, + 1.0000895075500011, + 1.0000893026590347, + 1.0000892169773579, + 1.0000887531787157, + 1.0000882893800735, + 1.000087644904852, + 1.0000871680676937, + 1.0000865813344717, + 1.0000859573483467, + 1.0000852048397064, + 1.0000845808535814, + 1.0000839550048113, + 1.0000834744423628, + 1.0000829361379147, + 1.0000821519643068, + 1.0000816732645035, + 1.0000813137739897, + 1.00008081831038, + 1.0000805016607046, + 1.0000803750008345, + 1.0000802781432867, + 1.0000802613794804, + 1.0000803545117378, + 1.0000805854797363, + 1.0000809729099274, + 1.000081343576312, + 1.0000816732645035, + 1.000082353129983, + 1.0000827852636576, + 1.0000835172832012, + 1.0000840108841658, + 1.0000845976173878, + 1.0000851843506098, + 1.0000859946012497, + 1.000086585059762, + 1.0000872127711773, + 1.0000876914709806, + 1.0000883303582668, + 1.0000886023044586, + 1.0000890027731657, + 1.0000892877578735, + 1.0000896360725164, + 1.000089842826128, + 1.0000899843871593, + 1.000090142711997 + ], + [ + 1.00008999183774, + 1.0000897366553545, + 1.000089805573225, + 1.0000896509736776, + 1.0000893473625183, + 1.0000892374664545, + 1.0000887531787157, + 1.0000882484018803, + 1.0000876747071743, + 1.0000871941447258, + 1.0000866241753101, + 1.0000859498977661, + 1.0000853389501572, + 1.000084763392806, + 1.0000839792191982, + 1.0000834483653307, + 1.0000826977193356, + 1.0000822972506285, + 1.0000816509127617, + 1.0000814516097307, + 1.0000807866454124, + 1.0000807829201221, + 1.0000804848968983, + 1.000080494210124, + 1.0000805240124464, + 1.0000804662704468, + 1.000080805271864, + 1.000081118196249, + 1.0000814329832792, + 1.0000816490501165, + 1.000082166865468, + 1.0000825766474009, + 1.000083351507783, + 1.000084012746811, + 1.0000846087932587, + 1.0000852160155773, + 1.0000859536230564, + 1.000086598098278, + 1.0000871811062098, + 1.0000877398997545, + 1.0000880993902683, + 1.000088756904006, + 1.000089056789875, + 1.0000894293189049, + 1.0000896826386452, + 1.0000897999852896, + 1.0000899825245142, + 1.0000899974256754 + ], + [ + 1.000090142711997, + 1.0000898595899343, + 1.0000898838043213, + 1.0000898391008377, + 1.0000895652920008, + 1.0000889357179403, + 1.0000887587666512, + 1.0000882390886545, + 1.0000877138227224, + 1.0000871866941452, + 1.0000865552574396, + 1.0000861268490553, + 1.0000852104276419, + 1.0000845398753881, + 1.0000839941203594, + 1.0000831931829453, + 1.0000825598835945, + 1.000082267448306, + 1.0000818241387606, + 1.0000814236700535, + 1.0000809784978628, + 1.0000808238983154, + 1.0000804755836725, + 1.0000804588198662, + 1.0000805091112852, + 1.0000806357711554, + 1.0000805705785751, + 1.000080980360508, + 1.000081306323409, + 1.0000818576663733, + 1.0000822860747576, + 1.0000825766474009, + 1.0000833459198475, + 1.000083975493908, + 1.0000845659524202, + 1.0000852271914482, + 1.0000859536230564, + 1.0000865682959557, + 1.0000870563089848, + 1.0000874400138855, + 1.0000882428139448, + 1.0000885091722012, + 1.0000890754163265, + 1.0000894274562597, + 1.000089831650257, + 1.0000897496938705, + 1.000089831650257, + 1.000090142711997 + ], + [ + 1.00008999183774, + 1.0000901594758034, + 1.0000900384038687, + 1.0000895913690329, + 1.0000895280390978, + 1.0000890232622623, + 1.0000887922942638, + 1.0000882036983967, + 1.0000877007842064, + 1.0000869929790497, + 1.0000865925103426, + 1.0000860895961523, + 1.0000851824879646, + 1.0000844597816467, + 1.0000836215913296, + 1.0000828821212053, + 1.000082453712821, + 1.000082129612565, + 1.0000816471874714, + 1.0000814143568277, + 1.0000809784978628, + 1.000080805271864, + 1.0000804625451565, + 1.000080307945609, + 1.0000803042203188, + 1.0000803377479315, + 1.0000805892050266, + 1.0000809766352177, + 1.000081179663539, + 1.0000814981758595, + 1.000082166865468, + 1.000082567334175, + 1.0000833235681057, + 1.0000839438289404, + 1.000084426254034, + 1.0000850483775139, + 1.0000859554857016, + 1.000086622312665, + 1.0000871494412422, + 1.0000877156853676, + 1.0000883508473635, + 1.0000887364149094, + 1.0000891629606485, + 1.000089481472969, + 1.0000898204743862, + 1.0000900235027075, + 1.0000901147723198, + 1.0000901315361261 + ], + [ + 1.0000903960317373, + 1.0000902768224478, + 1.0000899117439985, + 1.0000897906720638, + 1.0000894777476788, + 1.0000891983509064, + 1.0000887773931026, + 1.0000881887972355, + 1.000087458640337, + 1.0000871047377586, + 1.000086611136794, + 1.0000861249864101, + 1.0000852160155773, + 1.0000845026224852, + 1.0000836178660393, + 1.0000832192599773, + 1.0000824257731438, + 1.000082129612565, + 1.0000814832746983, + 1.000081181526184, + 1.0000808089971542, + 1.0000805798918009, + 1.000080343335867, + 1.000080095604062, + 1.0000801272690296, + 1.0000802166759968, + 1.0000803116708994, + 1.000080730766058, + 1.0000810623168945, + 1.0000816453248262, + 1.0000820141285658, + 1.000082427635789, + 1.0000831559300423, + 1.0000839438289404, + 1.0000846274197102, + 1.0000853799283504, + 1.0000861510634422, + 1.0000865757465363, + 1.000087197870016, + 1.0000878106802702, + 1.0000884514302015, + 1.000088855624199, + 1.0000894479453564, + 1.0000894721597433, + 1.000089829787612, + 1.0000902824103832, + 1.000090254470706, + 1.0000902377068996 + ], + [ + 1.0000904221087694, + 1.0000904276967049, + 1.000090267509222, + 1.0000899210572243, + 1.0000898446887732, + 1.0000893995165825, + 1.0000887606292963, + 1.0000882148742676, + 1.0000876504927874, + 1.0000871066004038, + 1.0000866446644068, + 1.0000858139246702, + 1.000085087493062, + 1.000084463506937, + 1.00008381344378, + 1.0000830478966236, + 1.0000824257731438, + 1.0000819694250822, + 1.000081242993474, + 1.0000809114426374, + 1.000080581754446, + 1.0000801756978035, + 1.0000801142305136, + 1.0000798162072897, + 1.0000798664987087, + 1.0000801477581263, + 1.0000803414732218, + 1.0000805538147688, + 1.0000809207558632, + 1.0000813864171505, + 1.000081766396761, + 1.0000824071466923, + 1.0000831596553326, + 1.0000839680433273, + 1.0000845957547426, + 1.0000853445380926, + 1.0000859498977661, + 1.0000866167247295, + 1.0000875014811754, + 1.000087970867753, + 1.0000884532928467, + 1.0000890512019396, + 1.000089405104518, + 1.000089816749096, + 1.000090116634965, + 1.0000903811305761, + 1.0000904444605112, + 1.000090455636382 + ], + [ + 1.00009092874825, + 1.0000906642526388, + 1.000090455636382, + 1.0000902637839317, + 1.0000900011509657, + 1.0000895243138075, + 1.0000891294330359, + 1.000088730826974, + 1.0000876374542713, + 1.0000872295349836, + 1.0000866055488586, + 1.0000859647989273, + 1.0000851303339005, + 1.0000844337046146, + 1.0000836923718452, + 1.000082965940237, + 1.0000823140144348, + 1.0000816658139229, + 1.00008125603199, + 1.0000805165618658, + 1.0000801794230938, + 1.0000800918787718, + 1.000079870223999, + 1.0000797044485807, + 1.0000796876847744, + 1.000079832971096, + 1.000079944729805, + 1.0000804513692856, + 1.000080518424511, + 1.0000812374055386, + 1.0000816937536001, + 1.0000824704766273, + 1.00008306466043, + 1.0000838227570057, + 1.0000844206660986, + 1.0000853519886732, + 1.000085934996605, + 1.000086709856987, + 1.0000873133540154, + 1.0000879429280758, + 1.0000887755304575, + 1.0000892709940672, + 1.0000896286219358, + 1.0000901445746422, + 1.0000903941690922, + 1.0000905822962523, + 1.0000909008085728, + 1.0000909343361855 + ], + [ + 1.0000913124531507, + 1.0000911746174097, + 1.000091042369604, + 1.0000906940549612, + 1.0000902246683836, + 1.0000897906720638, + 1.0000893659889698, + 1.0000887624919415, + 1.0000883117318153, + 1.0000876840204, + 1.0000866912305355, + 1.0000859387218952, + 1.0000850688666105, + 1.0000844951719046, + 1.0000835098326206, + 1.0000829044729471, + 1.0000823233276606, + 1.000081529840827, + 1.0000808015465736, + 1.0000802762806416, + 1.0000798646360636, + 1.000079669058323, + 1.0000792294740677, + 1.0000791046768427, + 1.0000792611390352, + 1.0000795349478722, + 1.0000796783715487, + 1.0000799968838692, + 1.0000803265720606, + 1.0000807791948318, + 1.0000815652310848, + 1.000082103535533, + 1.000082965940237, + 1.000083489343524, + 1.0000844411551952, + 1.0000853408128023, + 1.0000860933214426, + 1.0000868923962116, + 1.0000876858830452, + 1.000088294968009, + 1.000088857486844, + 1.0000895038247108, + 1.0000901147723198, + 1.0000904314219952, + 1.0000908728688955, + 1.000091042369604, + 1.0000913254916668, + 1.0000913217663765 + ], + [ + 1.0000919420272112, + 1.0000918004661798, + 1.0000915247946978, + 1.0000911727547646, + 1.0000909082591534, + 1.0000902265310287, + 1.00008986890316, + 1.000089192762971, + 1.0000884253531694, + 1.0000876300036907, + 1.0000868700444698, + 1.0000861622393131, + 1.0000850800424814, + 1.0000840816646814, + 1.0000833980739117, + 1.0000825934112072, + 1.0000820383429527, + 1.0000812336802483, + 1.0000805705785751, + 1.0000798348337412, + 1.0000795312225819, + 1.0000791121274233, + 1.0000787805765867, + 1.0000786650925875, + 1.000078598037362, + 1.0000787917524576, + 1.0000790692865849, + 1.000079546123743, + 1.0000798776745796, + 1.0000804662704468, + 1.0000810343772173, + 1.0000818502157927, + 1.0000827237963676, + 1.0000833570957184, + 1.0000844672322273, + 1.0000855755060911, + 1.0000861585140228, + 1.0000868868082762, + 1.000087682157755, + 1.0000884421169758, + 1.0000893045216799, + 1.000089943408966, + 1.000090604647994, + 1.000090915709734, + 1.000091327354312, + 1.000091651454568, + 1.0000919569283724, + 1.000091951340437 + ], + [ + 1.0000923797488213, + 1.0000922624021769, + 1.000092113390565, + 1.0000919699668884, + 1.0000913310796022, + 1.0000908616930246, + 1.0000902358442545, + 1.0000895112752914, + 1.0000887475907803, + 1.0000881142914295, + 1.0000872630625963, + 1.0000862888991833, + 1.0000851769000292, + 1.0000844653695822, + 1.0000833813101053, + 1.0000823270529509, + 1.0000816397368908, + 1.0000808034092188, + 1.000080157071352, + 1.0000793803483248, + 1.0000788774341345, + 1.0000784676522017, + 1.0000781882554293, + 1.0000780429691076, + 1.0000780168920755, + 1.0000780373811722, + 1.0000784676522017, + 1.0000787787139416, + 1.0000793933868408, + 1.0000801496207714, + 1.0000808015465736, + 1.0000815205276012, + 1.0000823270529509, + 1.0000833980739117, + 1.0000844579190016, + 1.0000855326652527, + 1.0000862944871187, + 1.0000872183591127, + 1.000088095664978, + 1.00008887052536, + 1.0000896248966455, + 1.0000904351472855, + 1.0000909250229597, + 1.0000916700810194, + 1.0000919662415981, + 1.000092413276434, + 1.0000925213098526, + 1.0000925119966269 + ], + [ + 1.000093050301075, + 1.0000930577516556, + 1.0000930707901716, + 1.0000923816114664, + 1.0000919830054045, + 1.0000915322452784, + 1.0000909212976694, + 1.000089904293418, + 1.0000894106924534, + 1.0000884234905243, + 1.0000874791294336, + 1.0000866204500198, + 1.000085573643446, + 1.0000844653695822, + 1.0000834036618471, + 1.0000821091234684, + 1.0000812597572803, + 1.0000804737210274, + 1.0000797621905804, + 1.0000787544995546, + 1.0000783577561378, + 1.0000777132809162, + 1.0000775139778852, + 1.0000770464539528, + 1.0000769346952438, + 1.0000773910433054, + 1.0000777132809162, + 1.000077998265624, + 1.0000787917524576, + 1.0000795349478722, + 1.0000801291316748, + 1.0000812616199255, + 1.0000823326408863, + 1.0000833924859762, + 1.0000844895839691, + 1.0000855531543493, + 1.000086635351181, + 1.0000877100974321, + 1.0000884383916855, + 1.0000893715769053, + 1.000090403482318, + 1.0000909008085728, + 1.0000915136188269, + 1.000092089176178, + 1.000092588365078, + 1.0000928174704313, + 1.000093037262559, + 1.0000930428504944 + ] + ], + "u": [ + [ + 0.0, + 3.724913568502399e-09, + -7.449827386754466e-09, + 0.0, + -3.7249096141369857e-09, + -3.7249077271445193e-09, + -7.449807351334308e-09, + 0.0, + -3.724892395401604e-09, + -7.449769806024123e-09, + -7.449747190221688e-09, + -7.4497167770400565e-09, + -7.449672989154468e-09, + 0.0, + 0.0, + -3.724627640966783e-09, + 1.8621851135987203e-09, + -3.7244979620701747e-09, + -3.7248079135183036e-09, + 1.862562257423966e-09, + 0.0, + 0.0, + 1.862916218400123e-09, + 0.0, + 1.8629606482481573e-09, + 5.5887487801368174e-09, + 0.0, + -1.8627089094400942e-09, + 0.0, + -1.862403550939066e-09, + 1.8622489151436354e-09, + 0.0, + 0.0, + 7.4495385208299115e-09, + 3.7248064844768708e-09, + 5.587253670068123e-09, + 0.0, + 3.724873719982998e-09, + 3.7248844312700247e-09, + 5.587338603508523e-09, + 3.724898430959544e-09, + 1.862452097988127e-09, + -1.8624536936042898e-09, + 3.724909267263227e-09, + 7.4498232797620515e-09, + -3.724913665627269e-09, + -7.449827830753917e-09, + 0.0 + ], + [ + 3.017181597626859e-07, + 9.833774091903762e-07, + 1.6780738220135487e-06, + 2.29454634794211e-06, + 3.013452573776806e-06, + 3.7491198019350252e-06, + 4.609569251584284e-06, + 5.50726519187717e-06, + 6.537189124669594e-06, + 7.794325187057891e-06, + 9.457460187631243e-06, + 1.1839474537561755e-05, + 1.5255093121243474e-05, + 2.040451941108415e-05, + 3.069766190512215e-05, + 5.9351447408491374e-05, + 0.00012378761434829428, + 0.0002052765074443533, + 0.0002629319011739826, + 0.000280662702963857, + 0.0002604216900176327, + 0.00020916742234739077, + 0.00013491367652957204, + 4.6516912040133235e-05, + -4.6557896543853265e-05, + -0.0001349099313166448, + -0.00020922699115287724, + -0.0002604626558402884, + -0.00028067203298610494, + -0.0002629467733789202, + -0.00020528202460483463, + -0.0001238136829023882, + -5.935888909718933e-05, + -3.0613849929939206e-05, + -2.0415693694597916e-05, + -1.5269988453530905e-05, + -1.1839472861746363e-05, + -9.548718814016121e-06, + -7.84461000180549e-06, + -6.533463232786661e-06, + -5.505402013692792e-06, + -4.630056113933411e-06, + -3.829204943816475e-06, + -3.065601388932729e-06, + -2.324345304842785e-06, + -1.6315124164799739e-06, + -1.0280765929577469e-06, + -3.6131682071756975e-07 + ], + [ + 8.623181190661257e-07, + 2.596266701090854e-06, + 4.307865165563578e-06, + 6.077196520967212e-06, + 8.090508774959485e-06, + 1.0211838661106706e-05, + 1.2640470675924855e-05, + 1.5501182055926266e-05, + 1.8900129147405937e-05, + 2.3155779559936153e-05, + 2.884920155076173e-05, + 3.68035720871749e-05, + 4.8559060220060465e-05, + 6.72928735520867e-05, + 9.845603119866299e-05, + 0.00015101615141643258, + 0.00022962558979084573, + 0.00031638100257337556, + 0.00037921306005860174, + 0.0003987018407236007, + 0.0003701904611268342, + 0.00029833085042189016, + 0.0001930007970009749, + 6.669946558447934e-05, + -6.670691086595598e-05, + -0.00019303802132243086, + -0.0002983531603680741, + -0.0003702239345283824, + -0.00039868862092014474, + -0.000379226108046052, + -0.000316369837395916, + -0.00022964608098307966, + -0.00015096954173571996, + -9.837966692083525e-05, + -6.726122084548508e-05, + -4.858141766864312e-05, + -3.6779355846644795e-05, + -2.889203837912368e-05, + -2.3165087859210978e-05, + -1.8875918123214114e-05, + -1.5486280195925304e-05, + -1.2664680611319365e-05, + -1.0280750381838617e-05, + -8.114721896644693e-06, + -6.108858252343934e-06, + -4.283652470657279e-06, + -2.5944042477441353e-06, + -9.126045075570433e-07 + ], + [ + 1.5439783103565924e-06, + 4.652422003402273e-06, + 7.835362593845252e-06, + 1.11803342602581e-05, + 1.4854954923853606e-05, + 1.89244154544476e-05, + 2.3569363783679904e-05, + 2.90132897517391e-05, + 3.568455435038858e-05, + 4.4018957448008996e-05, + 5.4983092000792996e-05, + 6.981545272352361e-05, + 9.062611684443496e-05, + 0.00012081401863078478, + 0.0001647242928684617, + 0.00022590896164971792, + 0.00030052010662740496, + 0.00037397028752771106, + 0.0004252561605192568, + 0.00043720729437651243, + 0.00040253858601128786, + 0.00032358487848695286, + 0.00020930063427819043, + 7.236345590602041e-05, + -7.236531953474028e-05, + -0.00020929132600247627, + -0.0003235997783833627, + -0.00040250135808842316, + -0.0004372166274797831, + -0.0004253101691662565, + -0.0003739608853467528, + -0.0003005238393496849, + -0.00022587916614475186, + -0.00016471871018658793, + -0.00012077117575136793, + -9.067081597457969e-05, + -6.986200294200402e-05, + -5.4966322934975095e-05, + -4.3983567250568887e-05, + -3.5643585348654514e-05, + -2.9054263821610574e-05, + -2.3619646760341767e-05, + -1.8946763162117364e-05, + -1.4892204557816941e-05, + -1.1249245136539724e-05, + -7.850262085795565e-06, + -4.6524221767011625e-06, + -1.5607404827805384e-06 + ], + [ + 2.3448371135245847e-06, + 7.1369458020037805e-06, + 1.2025901665258098e-05, + 1.7253821243684713e-05, + 2.2923138678760946e-05, + 2.9197742021665776e-05, + 3.6429647507997185e-05, + 4.4859098513970004e-05, + 5.5069028863784834e-05, + 6.772433807114213e-05, + 8.379717895669329e-05, + 0.00010479244225865844, + 0.00013264517565253503, + 0.00016968536823141296, + 0.00021775714048981486, + 0.0002766802365455945, + 0.0003406130397380036, + 0.0003977429047935685, + 0.00043344755027614984, + 0.00043467674656496544, + 0.00039505620928184177, + 0.00031564833679630224, + 0.00020358514900242457, + 7.032580311420821e-05, + -7.032021663760158e-05, + -0.0002036094287655362, + -0.0003156427189954015, + -0.00039502272852124634, + -0.0004346283236642662, + -0.00043339160387859897, + -0.0003977391694533487, + -0.0003406242195983888, + -0.00027666347087342745, + -0.0002177757300646862, + -0.00016967795132288692, + -0.00013273462343028653, + -0.00010484643974763229, + -8.375247237553609e-05, + -6.761444270570516e-05, + -5.503550613350136e-05, + -4.48944717029493e-05, + -3.6483654327378504e-05, + -2.9195880053818757e-05, + -2.293058560849181e-05, + -1.7251955603594327e-05, + -1.2068738573321112e-05, + -7.15929481244091e-06, + -2.3411122110075537e-06 + ], + [ + 3.257444323278318e-06, + 9.848693963352548e-06, + 1.669882254713685e-05, + 2.3882327868736497e-05, + 3.1758665254594315e-05, + 4.0378126252678754e-05, + 5.019326175109931e-05, + 6.166970326755858e-05, + 7.52600115692456e-05, + 9.166075310624025e-05, + 0.00011195958616903042, + 0.00013723305712880457, + 0.00016888167645990855, + 0.00020804550841145564, + 0.000254685648724718, + 0.0003066717755100099, + 0.0003581153798886307, + 0.0003997099261799967, + 0.0004209469897345257, + 0.0004124646449529805, + 0.00036957682827342157, + 0.00029282581448224893, + 0.0001880217358237579, + 6.477395684612073e-05, + -6.479631631488918e-05, + -0.0001879844824794238, + -0.00029282577303093796, + -0.0003695712591754771, + -0.000412408713505506, + -0.0004208538106885872, + -0.0003996652322690557, + -0.0003581134273686992, + -0.00030664573296972954, + -0.0002547656979158322, + -0.00020808463430059543, + -0.0001689804144938895, + -0.00013727959163157213, + -0.00011195586126015165, + -9.159929190033625e-05, + -7.523766433123843e-05, + -6.16436226584405e-05, + -5.029382665217605e-05, + -4.04004607202088e-05, + -3.175121092093255e-05, + -2.393261371620519e-05, + -1.6739796682318315e-05, + -9.90456679832986e-06, + -3.2667567074710032e-06 + ], + [ + 4.214752521474764e-06, + 1.2709441738106897e-05, + 2.1448112646173004e-05, + 3.070640741181268e-05, + 4.0685458245233115e-05, + 5.1673981181250524e-05, + 6.397366093246383e-05, + 7.806129585718163e-05, + 9.452542145392942e-05, + 0.00011383909634624776, + 0.00013695967917065247, + 0.00016439184994578046, + 0.00019710049284510015, + 0.00023498698912968106, + 0.0002771780481370415, + 0.0003205599333771731, + 0.00035994214202781386, + 0.0003881541177970426, + 0.00039755934660444455, + 0.00038162166929841846, + 0.00033719586251885456, + 0.00026471128959472076, + 0.00016909755523438272, + 5.811064247328595e-05, + -5.807710780689373e-05, + -0.00016907336034508772, + -0.00026472060389279967, + -0.0003372312490646396, + -0.000381616076726461, + -0.0003975798838793471, + -0.0003881616155080482, + -0.0003599179169759961, + -0.00032052458992553755, + -0.00027722460828353564, + -0.00023499998916977788, + -0.0001971395762484911, + -0.0001644812510650242, + -0.00013699690437506004, + -0.00011382233357708704, + -9.454589530496676e-05, + -7.811530443976943e-05, + -6.405002241564539e-05, + -5.169633283178187e-05, + -4.076367871782271e-05, + -3.0702679171658365e-05, + -2.150584868848043e-05, + -1.2709442069498864e-05, + -4.220339948122077e-06 + ], + [ + 5.149711682356367e-06, + 1.554598558316291e-05, + 2.6169476341105065e-05, + 3.736101307363165e-05, + 4.934410042687731e-05, + 6.237947570759335e-05, + 7.687315217499104e-05, + 9.315107915110798e-05, + 0.00011168256989026405, + 0.00013293327312339178, + 0.00015740794638358595, + 0.00018531897154947584, + 0.00021703884667188773, + 0.0002517966659201079, + 0.00028804475297298414, + 0.0003228221039076535, + 0.00035165501682735253, + 0.0003689335617100093, + 0.00036931593733068995, + 0.0003482514296425408, + 0.00030365713761436243, + 0.00023620296696681846, + 0.0001500625294065228, + 5.144954324593751e-05, + -5.138993437828907e-05, + -0.00015005507582284994, + -0.0002362048308363613, + -0.00030367579693803444, + -0.0003482123600448491, + -0.00036935698967588627, + -0.00036895225131694927, + -0.00035162705785426736, + -0.0003227737142487435, + -0.0002880969022651807, + -0.00025174817792672223, + -0.00021709097714408656, + -0.000185341282465497, + -0.00015748619389285682, + -0.00013294444938504062, + -0.00011175334679929842, + -9.31734193345083e-05, + -7.699793847341364e-05, + -6.245210095017448e-05, + -4.948191053992408e-05, + -3.7342377869574094e-05, + -2.621603856637783e-05, + -1.5499424478171422e-05, + -5.179511118256432e-06 + ], + [ + 5.997137607194318e-06, + 1.8116194305229916e-05, + 3.054442312733427e-05, + 4.351835196243239e-05, + 5.726520692916714e-05, + 7.21109112078001e-05, + 8.830504062839247e-05, + 0.00010620706593328134, + 0.00012609080555050231, + 0.00014823365602416438, + 0.00017283511180748437, + 0.00020002172830916557, + 0.00022945090422722385, + 0.000260087197731699, + 0.0002901836587005694, + 0.0003170658276322897, + 0.00033704235755238973, + 0.00034582939656256905, + 0.0003395917170717526, + 0.0003152187314088339, + 0.0002715588278538244, + 0.00020947972199226596, + 0.00013241198146722482, + 4.525245565721258e-05, + -4.521146394798491e-05, + -0.00013241760042183802, + -0.00020947226793616305, + -0.0002715513898698657, + -0.0003151703434177767, + -0.0003396346149301267, + -0.0003458349808483843, + -0.00033702937345573446, + -0.0003170192778910143, + -0.0002901836165446027, + -0.0002600312798915563, + -0.00022946022555946506, + -0.00020003287480940612, + -0.000172946855985902, + -0.00014825230387618908, + -0.00012623235390117358, + -0.00010623127738456755, + -8.845777690537433e-05, + -7.211836375326345e-05, + -5.737136689170159e-05, + -4.353324827531864e-05, + -3.055746055184472e-05, + -1.811246964566599e-05, + -6.0008625373851225e-06 + ], + [ + 6.796139044311432e-06, + 2.0472231351411996e-05, + 3.4472391169190665e-05, + 4.8982867223419466e-05, + 6.426068907875052e-05, + 8.04734598871986e-05, + 9.795645440665486e-05, + 0.00011689218889002938, + 0.00013735328408968155, + 0.00015949995338892815, + 0.0001834756849887727, + 0.00020894708170613133, + 0.00023549696838092205, + 0.00026170247591536077, + 0.0002860736065053985, + 0.00030609995696236465, + 0.0003188591612569193, + 0.0003212145216722524, + 0.00031030522023466284, + 0.000284173480486777, + 0.00024221191380253786, + 0.00018541483372012612, + 0.00011660022240780471, + 3.978377029137119e-05, + -3.968877851277358e-05, + -0.00011664305743338308, + -0.00018539993486361013, + -0.00024222867245675902, + -0.0002841958338626994, + -0.0003103443254151839, + -0.0003211958787067631, + -0.0003188479019592374, + -0.00030604775712822404, + -0.00028607174562118274, + -0.00026168573163986675, + -0.00023549324781626206, + -0.00020901410658599718, + -0.0001835688426984056, + -0.0001595707652389564, + -0.00013747061572805876, + -0.00011689777825216897, + -9.803095162795253e-05, + -8.050698518691214e-05, + -6.42960655281541e-05, + -4.9007073901898246e-05, + -3.449660342553842e-05, + -2.042380349560977e-05, + -6.757028223823796e-06 + ], + [ + 7.49084544002271e-06, + 2.252654767612139e-05, + 3.78527996775457e-05, + 5.360369087365156e-05, + 6.998410390867851e-05, + 8.724733030200093e-05, + 0.00010554612577086434, + 0.00012487301750255876, + 0.0001454235501546671, + 0.00016704134316080074, + 0.00018976551016238922, + 0.000213158427341041, + 0.00023638382714745305, + 0.00025840996868086824, + 0.0002775717625945866, + 0.00029186706576745703, + 0.0002989566020855666, + 0.00029649340022669656, + 0.00028257027411339274, + 0.00025580680659400494, + 0.00021594787176615156, + 0.000164160887921488, + 0.00010280396645104045, + 3.499130500434275e-05, + -3.494474031872844e-05, + -0.00010277603488306647, + -0.000164183227185223, + -0.00021602605168466777, + -0.00025578632038353576, + -0.0002825609452631564, + -0.0002964728768236849, + -0.0002988988329934121, + -0.00029179816288051605, + -0.000277554961456786, + -0.0002584118354937583, + -0.00023646948967798152, + -0.00021316029497734374, + -0.00018988104502238427, + -0.00016713450408938302, + -0.0001455371622034637, + -0.00012493820697309332, + -0.00010558710166501353, + -8.725106921392258e-05, + -7.006790466683181e-05, + -5.3590648507451644e-05, + -3.783789570521557e-05, + -2.2452049550755163e-05, + -7.459184279512669e-06 + ], + [ + 8.045866235261225e-06, + 2.423817122115326e-05, + 4.058880092943493e-05, + 5.730446330697323e-05, + 7.450065318397858e-05, + 9.24306591073332e-05, + 0.0001110703076872882, + 0.0001303525466190269, + 0.00015043937315052964, + 0.0001711892804738631, + 0.0001923210623731972, + 0.00021331885289411402, + 0.00023344136604436304, + 0.00025152088783882257, + 0.000266205218957322, + 0.0002758981524691259, + 0.0002786367357425916, + 0.0002727538372285448, + 0.00025691208643254253, + 0.00023020806161062893, + 0.0001928036703346225, + 0.0001457270787389843, + 9.08686193682577e-05, + 3.084334258780129e-05, + -3.078747166924006e-05, + -9.084068140103028e-05, + -0.00014569166730251445, + -0.00019284095795776937, + -0.00023023042887930278, + -0.0002568543033281846, + -0.00027268299518300767, + -0.00027855104228541083, + -0.0002757789654109741, + -0.00026620522292375144, + -0.0002514873697011471, + -0.000233482334513801, + -0.00021342871640486378, + -0.00019245706500863814, + -0.00017131221459368008, + -0.00015058092780968543, + -0.00013043076072236779, + -0.0001111373466999969, + -9.240085752286912e-05, + -7.455652838788848e-05, + -5.721320432331572e-05, + -4.054969412694486e-05, + -2.4148775768816675e-05, + -8.027242770842095e-06 + ], + [ + 8.491001316332425e-06, + 2.548231985914479e-05, + 4.2607735480658906e-05, + 6.000507746732235e-05, + 7.776002538741626e-05, + 9.596945355319452e-05, + 0.00011451599594356427, + 0.00013350210671651073, + 0.00015294826436909235, + 0.00017253605566440257, + 0.00019191152511597873, + 0.00021051231700250963, + 0.0002276176029931659, + 0.00024223657714652396, + 0.000253179062672613, + 0.0002590837445432118, + 0.00025853666896917, + 0.0002503198273481571, + 0.0002334721709940838, + 0.00020747578871754572, + 0.0001725578100698903, + 0.00012971467466966382, + 8.06245204258408e-05, + 2.7319377427670227e-05, + -2.7321239688744084e-05, + -8.053138031009354e-05, + -0.0001296848759208301, + -0.00017257643902522283, + -0.00020745344791117041, + -0.00023344237703694064, + -0.00025027141170416066, + -0.0002585198559566691, + -0.0002590277877834929, + -0.0002531772440385559, + -0.0002422384139144552, + -0.0002277143985987377, + -0.00021056815373411456, + -0.00019200467472929106, + -0.0001725937766705963, + -0.00015309356474900383, + -0.00013363804563429435, + -0.00011462214343773273, + -9.592661794945388e-05, + -7.778797157924099e-05, + -5.996597195097017e-05, + -4.258352867918708e-05, + -2.5424583513855604e-05, + -8.47796517809901e-06 + ], + [ + 8.822527473312371e-06, + 2.6372599959305737e-05, + 4.403069780543094e-05, + 6.179869039633321e-05, + 7.978088291139268e-05, + 9.7945607596364e-05, + 0.00011628543163239088, + 0.00013474073421476725, + 0.00015327803796482705, + 0.00017152114965586938, + 0.00018904531794093483, + 0.0002054148720631846, + 0.00021983070043057082, + 0.00023145849703337383, + 0.00023931109872167458, + 0.00024231011257210057, + 0.00023926905784601724, + 0.0002295044109047688, + 0.00021225434346976182, + 0.00018721705616648208, + 0.000154819016227329, + 0.00011584058888173144, + 7.173270358548303e-05, + 2.4302044644554623e-05, + -2.4279696863030384e-05, + -7.172154161754762e-05, + -0.00011576981441497904, + -0.00015477989176485767, + -0.00018718536326456012, + -0.0002122170934489707, + -0.00022947089620433466, + -0.0002392616141074636, + -0.00024222626392283477, + -0.00023928502745329883, + -0.00023145291000857895, + -0.000219910788417184, + -0.0002054818723863126, + -0.00018918500419943328, + -0.00017157694345521217, + -0.00015337861337501364, + -0.00013486179180680625, + -0.00011637481651652545, + -9.794933181322239e-05, + -7.979205715347749e-05, + -6.175398830293378e-05, + -4.393943741964737e-05, + -2.628692811930208e-05, + -8.764791069171827e-06 + ], + [ + 8.934280921382837e-06, + 2.680843342730862e-05, + 4.474218223116652e-05, + 6.268342248536612e-05, + 8.055572228836032e-05, + 9.853420677893402e-05, + 0.00011647546429575183, + 0.0001342696073819006, + 0.00015181236475215668, + 0.0001686287957482389, + 0.0001844153379683363, + 0.00019864485528673124, + 0.00021062271285700904, + 0.00021975656621010963, + 0.0002251413612174615, + 0.00022590718783300126, + 0.000221135746421594, + 0.00021037086083886258, + 0.00019304994531617382, + 0.0001692660323224944, + 0.000139261298406071, + 0.00010374343299329076, + 6.403298228284488e-05, + 2.1649786277645785e-05, + -2.1653515728772243e-05, + -6.400506339744832e-05, + -0.00010366149239362916, + -0.00013917376459881553, + -0.00016916916647143147, + -0.0001930257331809749, + -0.00021037831709478627, + -0.00022116741417048386, + -0.00022585310953601655, + -0.00022513945973201096, + -0.00021979381592681854, + -0.00021071210109399485, + -0.00019871749540659373, + -0.00018450842967510168, + -0.00016867163432253405, + -0.00015187010295419218, + -0.00013432920560765244, + -0.00011653508086065119, + -9.856216500504365e-05, + -8.065815249561794e-05, + -6.26480141282605e-05, + -4.470679483309842e-05, + -2.67432458334646e-05, + -8.93428098794225e-06 + ], + [ + 8.99202408581073e-06, + 2.686991089368003e-05, + 4.4831615656910684e-05, + 6.27188282967395e-05, + 8.030061406046263e-05, + 9.792893780854251e-05, + 0.00011534871995821482, + 0.0001323736991961545, + 0.0001487822058001645, + 0.0001643135106849813, + 0.0001784741152635475, + 0.0001906791283777837, + 0.0002006435751301699, + 0.00020770633933489075, + 0.00021108328615184016, + 0.00021011878706985723, + 0.00020411435779937217, + 0.0001928037025179768, + 0.00017582727502109158, + 0.00015329676313922814, + 0.00012553261448888274, + 9.322388659444292e-05, + 5.739120280733909e-05, + 1.936446222382404e-05, + -1.93961249857537e-05, + -5.7396791709505115e-05, + -9.313819963847062e-05, + -0.0001254953667922631, + -0.00015324834442627337, + -0.00017581237765552148, + -0.00019280929395554242, + -0.0002041516183103924, + -0.0002100666052389905, + -0.00021106651549890058, + -0.00020767844497436992, + -0.00020074419564584475, + -0.00019075175774695878, + -0.00017849460155847688, + -0.000164348921973173, + -0.0001488809218568411, + -0.00013244631286296192, + -0.00011539901905842365, + -9.802207470532186e-05, + -8.043841684329678e-05, + -6.27151035813792e-05, + -4.482602113799076e-05, + -2.6916473793829078e-05, + -8.99202401882109e-06 + ], + [ + 8.900766825739828e-06, + 2.670602473036744e-05, + 4.4440507669690176e-05, + 6.197200199786977e-05, + 7.93191108066187e-05, + 9.641478636026776e-05, + 0.00011316596902093843, + 0.000129298822911367, + 0.00014459914070436198, + 0.00015882668987564827, + 0.0001714358620337479, + 0.0001820335339938736, + 0.00019024168691749916, + 0.000195486603218897, + 0.00019729528026744337, + 0.00019502883759337387, + 0.0001882458881528801, + 0.00017678428561248175, + 0.00016034421414718803, + 0.00013913237644558115, + 0.00011343745113031686, + 8.390940589834847e-05, + 5.161178639765158e-05, + 1.7416263082966545e-05, + -1.7406950666548757e-05, + -5.161364918780767e-05, + -8.389263104342149e-05, + -0.00011344858809924311, + -0.00013910068469255213, + -0.0001603572782061399, + -0.00017678243990971318, + -0.00018827939058328814, + -0.00019499345789917845, + -0.00019727293187387458, + -0.00019549964317455118, + -0.00019026964793838555, + -0.00018205212424220944, + -0.00017143213643157403, + -0.00015886023995720513, + -0.00014468107414915667, + -0.00012936772038841604, + -0.00011320507914175241, + -9.64725570701442e-05, + -7.938990025699971e-05, + -6.202229010071412e-05, + -4.446844636307485e-05, + -2.6728373928964153e-05, + -8.915666524101055e-06 + ], + [ + 8.712659293924229e-06, + 2.6234830015920517e-05, + 4.359310857730301e-05, + 6.076514111296923e-05, + 7.76652778947827e-05, + 9.412586404453343e-05, + 0.00011016555888787177, + 0.00012536719147453036, + 0.00013957424892431446, + 0.00015255206731425343, + 0.00016380905063257073, + 0.0001729558327258827, + 0.00017970006426990939, + 0.00018350900837879198, + 0.00018403254793571076, + 0.0001808813652843055, + 0.0001736252686403196, + 0.00016218411754380106, + 0.000146360507297889, + 0.00012648218976367103, + 0.00010281924215750072, + 7.585029253525488e-05, + 4.657926273231407e-05, + 1.5665492888342096e-05, + -1.5702743369096618e-05, + -4.6625832440317214e-05, + -7.5889404883616e-05, + -0.00010282110599675576, + -0.00012646355772480685, + -0.0001463623749730739, + -0.0001621003068220542, + -0.00017363271796323163, + -0.0001808832247428986, + -0.00018404930656691946, + -0.00018348851794309964, + -0.00017968889337209885, + -0.00017294652191745434, + -0.00016380905490385143, + -0.00015258186643672827, + -0.00013964126803404974, + -0.00012537648682359466, + -0.00011019911345290021, + -9.420594862671982e-05, + -7.768948358045997e-05, + -6.0789349111533366e-05, + -4.36378092968954e-05, + -2.6270217099513955e-05, + -8.79274731885695e-06 + ], + [ + 8.498478516255124e-06, + 2.552150973905412e-05, + 4.243466506861214e-05, + 5.91354972144957e-05, + 7.54862040701975e-05, + 9.125583028456097e-05, + 0.00010649091389004123, + 0.00012075756948412469, + 0.00013394586339477539, + 0.00014575410351124238, + 0.00015574641863649841, + 0.00016366954887692418, + 0.00016915841194327225, + 0.0001718144517607208, + 0.00017137317090457806, + 0.0001675719835020305, + 0.00016013519814399397, + 0.00014888772968949543, + 0.00013385192668372698, + 0.00011523449340309392, + 9.329807916421639e-05, + 6.87485208274847e-05, + 4.215021101860305e-05, + 1.4136365513085104e-05, + -1.4197832440779883e-05, + -4.224333375710767e-05, + -6.880439550684165e-05, + -9.335767664474198e-05, + -0.00011523448953986584, + -0.0001338314350015273, + -0.00014881325323159807, + -0.0001601221794883734, + -0.00016760550270973157, + -0.00017139365604552586, + -0.0001717958352070577, + -0.00016913978519496854, + -0.00016365278194456934, + -0.00015578364914762012, + -0.00014574663621106932, + -0.00013400732649498204, + -0.00012081346591394552, + -0.00010652817813536271, + -9.128563537172223e-05, + -7.545266795582854e-05, + -5.912432257462311e-05, + -4.2486812828603707e-05, + -2.5553169310047665e-05, + -8.517102325638837e-06 + ], + [ + 8.265671418738617e-06, + 2.4690852120865692e-05, + 4.1097411365580186e-05, + 5.7209705699115335e-05, + 7.28415085848551e-05, + 8.791643374976526e-05, + 0.00010222216001542356, + 0.0001155985358785275, + 0.00012783694920299982, + 0.00013853142991322465, + 0.0001474323092067673, + 0.00015423235465364347, + 0.00015868752908714174, + 0.0001604458090713199, + 0.0001593433520694102, + 0.0001551975500838966, + 0.00014774027410302, + 0.00013678707661223772, + 0.00012257820462076137, + 0.00010513228229795549, + 8.496893061444502e-05, + 6.243461635284149e-05, + 3.826127982638159e-05, + 1.2823297612952927e-05, + -1.2910834939188273e-05, + -3.8319023162983444e-05, + -6.254077831865449e-05, + -8.499686884617343e-05, + -0.00010509505000489231, + -0.00012250745128253993, + -0.00013672375184875017, + -0.0001476378345968913, + -0.0001551603234066511, + -0.00015938432681922348, + -0.00016043651785166597, + -0.00015870990729582483, + -0.00015422304194310789, + -0.00014746772797340546, + -0.00013861712061982582, + -0.00012788353289454064, + -0.00011567863996278437, + -0.00010234508210461978, + -8.792388235359896e-05, + -7.287689824284317e-05, + -5.717805306814676e-05, + -4.111231148564558e-05, + -2.4750454137495088e-05, + -8.27684535377498e-06 + ], + [ + 7.962089369139521e-06, + 2.376334479945606e-05, + 3.953108294596209e-05, + 5.4902122374353676e-05, + 6.983919949891594e-05, + 8.415796003220658e-05, + 9.755481779800906e-05, + 0.00010998319010902837, + 0.0001212736043144721, + 0.00013106102800177372, + 0.00013897109323408906, + 0.00014479701977397153, + 0.00014845318834702648, + 0.00014952979338156232, + 0.00014798962194512844, + 0.00014350856035490978, + 0.00013615555580041107, + 0.0001256363029136857, + 0.00011219847437602503, + 9.597807143564491e-05, + 7.745001358168981e-05, + 5.681544426635029e-05, + 3.4756047163410287e-05, + 1.1627565251961991e-05, + -1.170765436496649e-05, + -3.4847310205782584e-05, + -5.690670689439784e-05, + -7.746118768916552e-05, + -9.598180643570695e-05, + -0.00011218360242569359, + -0.00012559718799527345, + -0.00013610901608237754, + -0.00014351231740923983, + -0.00014801569678601586, + -0.00014953724333078728, + -0.00014847926094164302, + -0.0001448417140143194, + -0.0001389934176704596, + -0.00013109084627681687, + -0.00012140771788858893, + -0.00011011359285608369, + -9.772057684239718e-05, + -8.417472970836835e-05, + -6.989134732045577e-05, + -5.490956492251089e-05, + -3.954598305982545e-05, + -2.3869504969338152e-05, + -7.990024962290715e-06 + ], + [ + 7.619395011878406e-06, + 2.276320102040528e-05, + 3.773753006602958e-05, + 5.2292791378643545e-05, + 6.647184425329152e-05, + 7.994317755977219e-05, + 9.252054635561724e-05, + 0.00010405678923764264, + 0.00011444951563512248, + 0.0001232814500306341, + 0.0001303198536732901, + 0.00013539331803589057, + 0.00013843301459942058, + 0.00013896762605609129, + 0.00013704747798789777, + 0.00013249377227306862, + 0.00012533635266021132, + 0.00011527708240085341, + 0.00010270531659591788, + 8.763407378178115e-05, + 7.069472351267932e-05, + 5.176248485823462e-05, + 3.1625185424533885e-05, + 1.0539865841234437e-05, + -1.0646029610191788e-05, + -3.168292203951874e-05, + -5.181649598348401e-05, + -7.066118307278105e-05, + -8.764525919384018e-05, + -0.00010270905688560467, + -0.00011526592204697259, + -0.00012526372693097567, + -0.00013250313876622948, + -0.00013711828625434467, + -0.00013898254976884425, + -0.00013840695577451605, + -0.0001354492490828661, + -0.00013045954117286618, + -0.00012330753764826498, + -0.00011451842469440615, + -0.00010418343636383215, + -9.263042973071339e-05, + -7.999346225259749e-05, + -6.654634288249576e-05, + -5.2380330277836415e-05, + -3.777291299808587e-05, + -2.2835838113989005e-05, + -7.692029982661233e-06 + ], + [ + 7.22268779814284e-06, + 2.1573080777911773e-05, + 3.576329854680506e-05, + 4.954565154995847e-05, + 6.285493538338314e-05, + 7.545274861947936e-05, + 8.721434385279149e-05, + 9.78919862208015e-05, + 0.00010731993274369217, + 0.00011530631016063895, + 0.00012161088578625768, + 0.00012599711396765823, + 0.00012846314084173242, + 0.00012861408249126402, + 0.00012650210069644322, + 0.0001219353367907586, + 0.00011501997452343697, + 0.00010555301715466825, + 9.389944876911188e-05, + 8.004066687950375e-05, + 6.44404515498275e-05, + 4.7108091479901837e-05, + 2.8751342279518574e-05, + 9.61978993690295e-06, + -9.673802472374338e-06, + -2.8838880156558094e-05, + -4.716582487849976e-05, + -6.444602907118242e-05, + -8.0029489532416e-05, + -9.392179868551201e-05, + -0.00010552692103803185, + -0.00011498087956534273, + -0.00012197071886976681, + -0.00012652816846970004, + -0.00012865691754989088, + -0.00012848363082504176, + -0.00012608278358364013, + -0.00012170773449533057, + -0.00011539570417690841, + -0.0001074484389926133, + -9.792923182243205e-05, + -8.730561853635583e-05, + -7.551795155875509e-05, + -6.295551017795523e-05, + -4.963318165838542e-05, + -3.583034828115442e-05, + -2.1656889013371922e-05, + -7.254348929568294e-06 + ], + [ + 6.760793475478935e-06, + 2.0243273563328273e-05, + 3.35208770342817e-05, + 4.651166749546635e-05, + 5.894745217378089e-05, + 7.068666345000412e-05, + 8.155240511419013e-05, + 9.139193228079453e-05, + 9.998175103027188e-05, + 0.0001071076580813339, + 0.00011266164585481933, + 0.00011652451584626136, + 0.00011856959688542243, + 0.00011845605339925356, + 0.00011624909712599028, + 0.00011179222091419776, + 0.0001051823238193748, + 9.640071676509672e-05, + 8.558900676723449e-05, + 7.287378106718457e-05, + 5.865368260532253e-05, + 4.289697773396164e-05, + 2.6197858137171514e-05, + 8.733240129477911e-06, + -8.774214763048251e-06, + -2.625000849297848e-05, + -4.288952679661756e-05, + -5.86499381720882e-05, + -7.287005743749233e-05, + -8.56206693089769e-05, + -9.640817930174332e-05, + -0.00010517674907889792, + -0.0001118406564788208, + -0.00011627144309288028, + -0.00011849145897471818, + -0.00011861803610780848, + -0.00011662508960555319, + -0.00011275477298552982, + -0.00010716539644379066, + -0.00010005438130045095, + -9.139194589805401e-05, + -8.166787856057046e-05, + -7.073696316092712e-05, + -5.90889957158597e-05, + -4.661410231925832e-05, + -3.370153757775545e-05, + -2.034756732987214e-05, + -6.822255196228034e-06 + ], + [ + 6.315660390286543e-06, + 1.884268777857255e-05, + 3.123002678868786e-05, + 4.317968591561339e-05, + 5.479225016134045e-05, + 6.559839076108547e-05, + 7.55459071815591e-05, + 8.452124143993345e-05, + 9.226548508934986e-05, + 9.865943705489921e-05, + 0.00010361184414702344, + 0.00010695318615366787, + 0.00010858482228617161, + 0.00010827572213448488, + 0.0001061171568053421, + 0.00010182606436435362, + 9.567618230152068e-05, + 8.756878292106972e-05, + 7.769016017942406e-05, + 6.607009435425586e-05, + 5.306432587733955e-05, + 3.881811276907236e-05, + 2.370397722286002e-05, + 7.919329994584535e-06, + -7.95099201476601e-06, + -2.3696523446223677e-05, + -3.881439761150054e-05, + -5.3084813216069004e-05, + -6.612411442451413e-05, + -7.769760754563137e-05, + -8.755760633875574e-05, + -9.571156803342397e-05, + -0.0001019228982888035, + -0.00010608363398433747, + -0.0001082831692617989, + -0.00010862020770791195, + -0.00010702584159656184, + -0.00010364722999062194, + -9.869669957767267e-05, + -9.22934475846525e-05, + -8.45659406642635e-05, + -7.564649997207211e-05, + -6.563376870362658e-05, + -5.4948705914766206e-05, + -4.335848410991644e-05, + -3.134550461211385e-05, + -1.8952574497530485e-05, + -6.3715347081009325e-06 + ], + [ + 5.818379839503084e-06, + 1.7335938049954603e-05, + 2.8732439694176656e-05, + 3.9661475127018734e-05, + 5.0236630023229745e-05, + 6.007240880149182e-05, + 6.910917454520134e-05, + 7.718120731619885e-05, + 8.418417772683484e-05, + 8.981266131525101e-05, + 9.418767189480603e-05, + 9.711182040865074e-05, + 9.848828601409496e-05, + 9.810095971465613e-05, + 9.599642890751479e-05, + 9.20126321053304e-05, + 8.633952216873347e-05, + 7.891938129015411e-05, + 6.993289023952417e-05, + 5.939678070342584e-05, + 4.768916724893051e-05, + 3.48174749841918e-05, + 2.125852121859863e-05, + 7.161295489864339e-06, + -7.120320613714645e-06, + -2.1260386366910504e-05, + -3.486218238774093e-05, + -4.7717104752711914e-05, + -5.943776950927726e-05, + -6.994407561964418e-05, + -7.897152812961418e-05, + -8.63935246092102e-05, + -9.202190393982298e-05, + -9.592748589067415e-05, + -9.804881334209155e-05, + -9.849202419477565e-05, + -9.716398301287723e-05, + -9.4217468829103e-05, + -8.981264726418965e-05, + -8.415437676401702e-05, + -7.720168324663967e-05, + -6.919485248108917e-05, + -6.015993692722028e-05, + -5.0365143378287754e-05, + -3.9816051703607195e-05, + -2.8833013906338984e-05, + -1.738808818961193e-05, + -5.8910156407284754e-06 + ], + [ + 5.254047020979272e-06, + 1.567646899926851e-05, + 2.597225139560715e-05, + 3.580800041469188e-05, + 4.5265677436045046e-05, + 5.404541617838675e-05, + 6.212860127278815e-05, + 6.931781410942446e-05, + 7.550130581797403e-05, + 8.045926206385502e-05, + 8.437610528521304e-05, + 8.688491324965127e-05, + 8.803973380881966e-05, + 8.762818681457784e-05, + 8.566706298703027e-05, + 8.20017165081759e-05, + 7.68911045321119e-05, + 7.026996759012165e-05, + 6.21923791844029e-05, + 5.277935353043625e-05, + 4.236430314755486e-05, + 3.087458076842386e-05, + 1.8837279589441025e-05, + 6.36042374264196e-06, + -6.257986266066891e-06, + -1.88037570517488e-05, + -3.0971438818559904e-05, + -4.23196065865668e-05, + -5.2861309565245583e-05, + -6.222030650322334e-05, + -7.025135078052763e-05, + -7.693766667961409e-05, + -8.200544668145171e-05, + -8.562419782257961e-05, + -8.75741637413289e-05, + -8.805834424051774e-05, + -8.692216067802966e-05, + -8.440032056178951e-05, + -8.053747884643317e-05, + -7.550314172243659e-05, + -6.93308332687627e-05, + -6.222917031433307e-05, + -5.411990183233136e-05, + -4.535693913591766e-05, + -3.590671033985995e-05, + -2.607467800445319e-05, + -1.5724893752994387e-05, + -5.319234550675299e-06 + ], + [ + 4.602180024926904e-06, + 1.3771152939772382e-05, + 2.2867492950626885e-05, + 3.144607303548258e-05, + 3.972106437098247e-05, + 4.739263158897731e-05, + 5.4486847553874394e-05, + 6.071315077166903e-05, + 6.611996999489507e-05, + 7.048194094008196e-05, + 7.389776873866391e-05, + 7.604341321421751e-05, + 7.699706162740997e-05, + 7.658549985647855e-05, + 7.48068725972506e-05, + 7.161275869894894e-05, + 6.706087369884752e-05, + 6.121826538405426e-05, + 5.418925811933094e-05, + 4.60017504728608e-05, + 3.6843877397805485e-05, + 2.686463974126983e-05, + 1.638065176417487e-05, + 5.526027091244446e-06, + -5.483189396197107e-06, + -1.632105134703515e-05, + -2.6944722595215405e-05, + -3.680104103941129e-05, + -4.596263766134054e-05, + -5.4153862970157303e-05, + -6.123504024781882e-05, + -6.708322484784998e-05, + -7.161275069626498e-05, + -7.479009863427574e-05, + -7.660225211738717e-05, + -7.699704183738689e-05, + -7.605644027072964e-05, + -7.39182581252617e-05, + -7.050426289670523e-05, + -6.615347347706771e-05, + -6.076528574919392e-05, + -5.457250577038456e-05, + -4.748761773451485e-05, + -3.980860194045013e-05, + -3.1567127910972644e-05, + -2.2899152458506183e-05, + -1.3881038834149632e-05, + -4.70647856459295e-06 + ], + [ + 3.913061648736696e-06, + 1.1631164426117313e-05, + 1.9285945997768102e-05, + 2.6581272243609792e-05, + 3.35599825069406e-05, + 3.998182407317603e-05, + 4.59864726314286e-05, + 5.124613416922573e-05, + 5.5837208143168805e-05, + 5.953798401480653e-05, + 6.245280838426456e-05, + 6.422593415656463e-05, + 6.502313200901199e-05, + 6.465067972371006e-05, + 6.310113657215897e-05, + 6.039684601814423e-05, + 5.651545239449997e-05, + 5.157615746362538e-05, + 4.5616198403687846e-05, + 3.870823748226902e-05, + 3.0995655359736426e-05, + 2.2564138778665395e-05, + 1.3797373266209559e-05, + 4.635754286196715e-06, + -4.6338918671722315e-06, + -1.3782473808475897e-05, + -2.259952952748664e-05, + -3.090997214705315e-05, + -3.868774996315053e-05, + -4.5616199253286734e-05, + -5.160409341764971e-05, + -5.6526618501989554e-05, + -6.040242752757744e-05, + -6.315700301630471e-05, + -6.470469271617387e-05, + -6.506595477974812e-05, + -6.424456092144797e-05, + -6.245280187049382e-05, + -5.952121668205934e-05, + -5.5855815901435965e-05, + -5.1331805949651886e-05, + -4.601626578425944e-05, + -4.010101850906454e-05, + -3.3610264580017676e-05, + -2.6629693174716515e-05, + -1.9319468131187022e-05, + -1.1737322798320644e-05, + -3.9521736183836134e-06 + ], + [ + 3.0972960614695747e-06, + 9.217390451496076e-06, + 1.5261124943820754e-05, + 2.100314448753699e-05, + 2.6620385302521906e-05, + 3.169937413180359e-05, + 3.651575752903758e-05, + 4.0732433901345107e-05, + 4.4412714064867715e-05, + 4.743554996603233e-05, + 4.9709689638809914e-05, + 5.113266565105355e-05, + 5.176781809326236e-05, + 5.148102467186341e-05, + 5.023879482200919e-05, + 4.806902351944181e-05, + 4.502573981392653e-05, + 4.111826459400441e-05, + 3.6333545764507235e-05, + 3.075352792526312e-05, + 2.4590539990769357e-05, + 1.7887418939391384e-05, + 1.0966385777694284e-05, + 3.652358219025277e-06, + -3.6784326129723717e-06, + -1.0869532583204465e-05, + -1.7937706185025205e-05, + -2.4547699327411664e-05, + -3.073303892779395e-05, + -3.629629668259149e-05, + -4.1075425794542686e-05, + -4.501084977156095e-05, + -4.8093232943151607e-05, + -5.028908307185298e-05, + -5.1538764576700854e-05, + -5.1831128547309616e-05, + -5.1209019623517957e-05, + -4.973202943955854e-05, + -4.7377812940772625e-05, + -4.44220272128359e-05, + -4.0786441942280425e-05, + -3.654555215151611e-05, + -3.177386295145454e-05, + -2.664459199655534e-05, + -2.11111643344641e-05, + -1.528719960201132e-05, + -9.267675887516207e-06, + -3.080533757043927e-06 + ], + [ + 2.203306635061627e-06, + 6.494447442065585e-06, + 1.075579131521684e-05, + 1.4840203526835458e-05, + 1.886315525480478e-05, + 2.2487548558316816e-05, + 2.5892165964053138e-05, + 2.8948511556767122e-05, + 3.161188082617063e-05, + 3.3725822968282985e-05, + 3.534993408205785e-05, + 3.638922554851431e-05, + 3.687537395124143e-05, + 3.667426200050681e-05, + 3.5793329383191086e-05, + 3.423259045644473e-05, + 3.210564318867661e-05, + 2.927840335345445e-05, + 2.5873781747551127e-05, + 2.1871295896147554e-05, + 1.751864699425295e-05, + 1.2730172483965919e-05, + 7.798280886765372e-06, + 2.609360588480284e-06, + -2.575835785749087e-06, + -7.716330870032062e-06, + -1.2750660506005437e-05, + -1.7488846781308497e-05, + -2.185825748459628e-05, + -2.5825359568868997e-05, + -2.9235571821123215e-05, + -3.210006175001435e-05, + -3.434433545800604e-05, + -3.5867830445714095e-05, + -3.679530957024844e-05, + -3.694240516997739e-05, + -3.638922568406306e-05, + -3.5318271273001895e-05, + -3.368484660895677e-05, + -3.156531828559407e-05, + -2.8963408152379347e-05, + -2.5940588453532673e-05, + -2.2519202154967143e-05, + -1.882963054949954e-05, + -1.491283775987438e-05, + -1.076323985081751e-05, + -6.46837179167758e-06, + -2.1530198194526e-06 + ], + [ + 1.1547333185492703e-06, + 3.425088422550197e-06, + 5.723381343525683e-06, + 7.926688737826201e-06, + 1.004805288058353e-05, + 1.2007382266010496e-05, + 1.385496705048017e-05, + 1.551817033217571e-05, + 1.6952291673255965e-05, + 1.8095865765538245e-05, + 1.8988010344474336e-05, + 1.9526286842740555e-05, + 1.9777744232740218e-05, + 1.9736783571681707e-05, + 1.9312157279400875e-05, + 1.847405632060894e-05, + 1.7291385901264748e-05, + 1.5773467218910485e-05, + 1.3938918993920118e-05, + 1.1787745434144202e-05, + 9.41120360747135e-06, + 6.840958839146389e-06, + 4.17758643153005e-06, + 1.4248123425760463e-06, + -1.3801123835012634e-06, + -4.1757245619664935e-06, + -6.833508843133161e-06, + -9.323667110545984e-06, + -1.1778432794065375e-05, + -1.3950094072990192e-05, + -1.577905473225883e-05, + -1.7298837935661727e-05, + -1.8511306156924312e-05, + -1.93922440179928e-05, + -1.9829908111088944e-05, + -1.989507380539711e-05, + -1.9572848844315653e-05, + -1.895076153909961e-05, + -1.8084691216133984e-05, + -1.6929939833862048e-05, + -1.5538655829611134e-05, + -1.382330218522307e-05, + -1.2018556360474347e-05, + -1.0029424730431086e-05, + -7.926688767352702e-06, + -5.702892423971141e-06, + -3.393425497726867e-06, + -1.0895466161672302e-06 + ], + [ + -3.7249436913299483e-09, + 3.7249436635795376e-09, + 5.5874154225244795e-09, + 5.587419272896503e-09, + -1.8624738332902837e-09, + 1.8624746727423868e-09, + 1.8624758105133873e-09, + -1.8624777044889283e-09, + 3.72495724745506e-09, + 0.0, + 1.8624822209076865e-09, + -3.7249676400886205e-09, + 0.0, + -1.8624878335077575e-09, + -5.58746943228176e-09, + -3.724984443254345e-09, + 0.0, + 0.0, + 3.724993184845594e-09, + -1.862498469096102e-09, + 3.7249984159444235e-09, + 3.725000816427054e-09, + 5.587502338160197e-09, + -3.7250033001666737e-09, + 0.0, + 5.587503025004294e-09, + 0.0, + -1.8624998774707894e-09, + 1.8624983997180938e-09, + 0.0, + 1.862495909051017e-09, + 1.8624937999676705e-09, + 7.44996722144797e-09, + 5.58746949472139e-09, + 3.724975576825133e-09, + 5.587457423085534e-09, + 3.7249675845870856e-09, + -1.862481790771623e-09, + 0.0, + -1.8624786965728918e-09, + -5.587430324534325e-09, + -3.724951697340731e-09, + -1.8624747074305065e-09, + -3.7249472711364085e-09, + 7.449890823712451e-09, + -1.8624722792652472e-09, + -5.587415609839753e-09, + 0.0 + ] + ], + "v": [ + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + -3.724892395401604e-09, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + -2.9308931502930256e-05, + -0.00023097846561574394, + -0.0005561994920702936, + -0.0009346058023414847, + -0.0013076589743714114, + -0.0016284568107261346, + -0.0018618562190718534, + -0.0019843919828642807, + -0.0019843977381042133, + -0.00186185626069364, + -0.0016284566954516465, + -0.0013076644967318632, + -0.0009345964007522545, + -0.0005562049580844011, + -0.00023096914619851968, + -2.9318246195622363e-05, + 0.0, + 0.0, + 3.7248064844768708e-09, + 1.8624178900227075e-09, + 0.0, + 0.0, + -3.7248844312700247e-09, + 1.8624462011695078e-09, + 0.0, + -1.862452097988127e-09, + -1.8624536936042898e-09, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + -2.6074408868380265e-07, + -2.719187532988541e-07, + -2.7005627546277974e-07, + -3.0916777090778434e-07, + -3.575914055408818e-07, + -3.333792571020216e-07, + -3.967023234696777e-07, + -3.6690268610071104e-07, + -4.283628201350446e-07, + -5.196216791371927e-07, + -6.704776816753145e-07, + -8.697553262610257e-07, + -1.3726045208590454e-06, + -2.719112663397486e-06, + -5.153214250529212e-06, + -1.8986727111913445e-05, + -8.641425466571187e-05, + -0.0002767469922767794, + -0.0005773848590660518, + -0.0009330260325045395, + -0.00128642861011328, + -0.0015920902503799056, + -0.0018151529136385097, + -0.0019325540616409124, + -0.0019325280683173433, + -0.0018151750035597738, + -0.001592097404785448, + -0.001286421097188274, + -0.0009330242272980213, + -0.000577369899218264, + -0.00027672268709681886, + -8.64105270969708e-05, + -1.898299992368622e-05, + -5.15135107106776e-06, + -2.696763772101604e-06, + -1.398678049591622e-06, + -8.660303414679973e-07, + -6.462659310441962e-07, + -4.954098434188652e-07, + -3.8366403248405143e-07, + -3.911144867643729e-07, + -3.8366514862038723e-07, + -3.352416779605863e-07, + -2.719184707072773e-07, + -2.7936842606283476e-07, + -2.68193821887119e-07, + -2.681938938150644e-07, + -2.644690131025511e-07 + ], + [ + -1.4359552263498552e-06, + -1.4415426303043908e-06, + -1.4955537085808706e-06, + -1.540251769181699e-06, + -1.6911100293884007e-06, + -1.8270679785784567e-06, + -2.0244867577324764e-06, + -2.326201656596408e-06, + -2.8271970876785783e-06, + -3.5405080787773366e-06, + -4.741773218091631e-06, + -6.807198824888632e-06, + -1.0479876955405218e-05, + -1.8020752919572426e-05, + -3.447497575935781e-05, + -7.530600567937464e-05, + -0.00017472180304333663, + -0.0003559800776386595, + -0.0006196896347299101, + -0.0009299690354645494, + -0.0012411299839240294, + -0.0015125051127357083, + -0.0017118231134842675, + -0.0018170095290600287, + -0.001817028000858705, + -0.0017118526492531192, + -0.0015125123493460804, + -0.0012410776502090554, + -0.0009299741987528868, + -0.0006196654397405565, + -0.0003559502892990767, + -0.00017463427344672128, + -7.52854944995774e-05, + -3.4454487317042485e-05, + -1.8033792093225308e-05, + -1.0461254477468598e-05, + -6.801610672065363e-06, + -4.795784105346708e-06, + -3.5237454759307902e-06, + -2.7657363998986643e-06, + -2.329926220697842e-06, + -2.037523615997557e-06, + -1.7879565881458463e-06, + -1.6631734344052583e-06, + -1.5197647359489788e-06, + -1.5234903134772408e-06, + -1.439680174807047e-06, + -1.4340927975896393e-06 + ], + [ + -3.8012783250154465e-06, + -3.840389980390507e-06, + -3.994973321558846e-06, + -4.214742034143609e-06, + -4.5369446081378366e-06, + -5.037943490235288e-06, + -5.723323185084816e-06, + -6.7495289549558675e-06, + -8.340053986484345e-06, + -1.0632715382724068e-05, + -1.4299850294088769e-05, + -2.0278254528456625e-05, + -3.034280097882315e-05, + -4.826116734926584e-05, + -8.185370363350396e-05, + -0.0001448262351877637, + -0.0002573114248529916, + -0.000429449447283656, + -0.0006589668515705099, + -0.0009221628940774586, + -0.0011858978926512624, + -0.0014168600991122952, + -0.0015872284524227728, + -0.001677364753648087, + -0.001677366638204092, + -0.0015872154521756133, + -0.0014168526432831747, + -0.0011859091389090305, + -0.0009220940227018021, + -0.0006589165578340569, + -0.0004294363068407583, + -0.0002572704578111556, + -0.0001448150627690121, + -8.18555683480968e-05, + -4.8277926438438137e-05, + -3.0342801204869202e-05, + -2.0324812404523737e-05, + -1.4357584234260259e-05, + -1.063830183499532e-05, + -8.336330234119428e-06, + -6.794227847515088e-06, + -5.754984110507496e-06, + -5.0491177560700065e-06, + -4.540669673831629e-06, + -4.1868051435333275e-06, + -4.002423065806564e-06, + -3.8590147118193785e-06, + -3.791966137161308e-06 + ], + [ + -7.6304985338445e-06, + -7.773907040074055e-06, + -8.140810930593641e-06, + -8.679059477069382e-06, + -9.37561586845e-06, + -1.0494946500739086e-05, + -1.212086635900029e-05, + -1.435208059240442e-05, + -1.7693309463134332e-05, + -2.2485381666333882e-05, + -2.9804775294911713e-05, + -4.1152628659355863e-05, + -5.91419321948056e-05, + -8.810661641466214e-05, + -0.00013557859048149643, + -0.00021181849379407907, + -0.0003271958476628923, + -0.00048704159278135825, + -0.0006858626455556031, + -0.0009070700050459664, + -0.0011265570692855823, + -0.001318382112977302, + -0.0014600091265750822, + -0.001535038162476991, + -0.0015350326060109211, + -0.0014600375364570038, + -0.0013184322780893881, + -0.0011266056263757528, + -0.0009071035375924165, + -0.0006859146834733774, + -0.00048703413014353496, + -0.000327251726464759, + -0.00021176820483744107, + -0.00013557856876583336, + -8.81476072461546e-05, + -5.9149404446848834e-05, + -4.117683517861981e-05, + -2.9875545584201878e-05, + -2.2535664299775023e-05, + -1.768958501712338e-05, + -1.4409812386049315e-05, + -1.208920313640379e-05, + -1.0534058279178292e-05, + -9.409138929020517e-06, + -8.662295747848128e-06, + -8.120324101802477e-06, + -7.829780278746511e-06, + -7.671472710533106e-06 + ], + [ + -1.3266309842602321e-05, + -1.354009173857281e-05, + -1.4139801558985386e-05, + -1.5069165935112455e-05, + -1.648649453633995e-05, + -1.8438351010217696e-05, + -2.1228304172134692e-05, + -2.5195329361063432e-05, + -3.0747297161441154e-05, + -3.8744664164769196e-05, + -5.039429222080755e-05, + -6.753630527122185e-05, + -9.306492816287669e-05, + -0.00013118945049008123, + -0.00018785690332233013, + -0.0002699662972078747, + -0.000382759686894005, + -0.0005279016917040487, + -0.0006995643167924752, + -0.000884901153474488, + -0.001066040583880727, + -0.0012234015364449326, + -0.001339334035378499, + -0.001400738679402515, + -0.001400746307237668, + -0.0013393675521490888, + -0.0012234535155508626, + -0.0010660611256643885, + -0.0008849531858660191, + -0.0006996052035142939, + -0.0005279314994808278, + -0.0003828024276349776, + -0.0002699812250937412, + -0.0001878885381763651, + -0.0001312620952709071, + -9.315992872241103e-05, + -6.759030321807899e-05, + -5.0453890762867784e-05, + -3.8776325838009856e-05, + -3.075102299113988e-05, + -2.515435275922707e-05, + -2.1179876932622795e-05, + -1.8412269716023613e-05, + -1.6501391879367806e-05, + -1.5126901836810781e-05, + -1.4184500615546982e-05, + -1.3551265141904486e-05, + -1.327189754700021e-05 + ], + [ + -2.0757143991089815e-05, + -2.118736946258852e-05, + -2.2111149126030384e-05, + -2.360670309605906e-05, + -2.5782046165656304e-05, + -2.8892357904658114e-05, + -3.3146212222046025e-05, + -3.897943027211019e-05, + -4.7140719611065505e-05, + -5.852778172996803e-05, + -7.452631412776778e-05, + -9.69410168091663e-05, + -0.0001285693882723188, + -0.0001731420342193205, + -0.00023470633200635543, + -0.00031762094738019915, + -0.000424339450834926, + -0.0005542517844803768, + -0.0007018979708161419, + -0.0008570963353461185, + -0.0010062234465708462, + -0.0011347073811536327, + -0.001228872670256137, + -0.0012787042085543668, + -0.0012786965772259029, + -0.001228893293621551, + -0.0011346980746750734, + -0.001006221578399482, + -0.0008570944616393724, + -0.0007019148210391741, + -0.0005543300775821288, + -0.00042441207276211734, + -0.00031767127740365484, + -0.00023474544251892424, + -0.00017314759419820362, + -0.0001285935818201123, + -9.694846845277952e-05, + -7.453002599856951e-05, + -5.858551763918005e-05, + -4.7150025323862156e-05, + -3.898874119360386e-05, + -3.314807499138286e-05, + -2.889980893290915e-05, + -2.585281784996103e-05, + -2.3688648855585246e-05, + -2.2109286375764368e-05, + -2.1194819863847755e-05, + -2.0773906346581485e-05 + ], + [ + -3.0125347725900266e-05, + -3.0788389562150005e-05, + -3.205858631125482e-05, + -3.419110059849102e-05, + -3.7260439085834815e-05, + -4.15049895842032e-05, + -4.734566690346329e-05, + -5.520898608969897e-05, + -6.59553881017914e-05, + -8.057199759847358e-05, + -0.00010030482228731134, + -0.0001270014740403083, + -0.0001630906325806183, + -0.00021136988659792983, + -0.0002745008367996487, + -0.0003550542135386203, + -0.00045374558503318225, + -0.0005689363968094243, + -0.0006955910504312163, + -0.0008256094525739265, + -0.000948516468353167, + -0.0010532513747139518, + -0.0011297193266717699, + -0.0011700035525199044, + -0.0011700108458632518, + -0.0011297155763069285, + -0.0010532532431488744, + -0.0009485240245078087, + -0.0008256263183393018, + -0.0006956209957546399, + -0.0005689439464223855, + -0.0004538032943548188, + -0.00035507660167671763, + -0.0002745418112435174, + -0.00021133630860273507, + -0.00016303846954140918, + -0.00012698654783309401, + -0.00010030856253319004, + -8.054592402116601e-05, + -6.596656484316368e-05, + -5.525367964093106e-05, + -4.734008030857791e-05, + -4.1477045453906294e-05, + -3.719710619178575e-05, + -3.423579002486339e-05, + -3.2116323461112484e-05, + -3.079025300085676e-05, + -3.0181221744460797e-05 + ], + [ + -4.131692567639713e-05, + -4.217923845281606e-05, + -4.390947071036785e-05, + -4.6621218279705874e-05, + -5.061993232275779e-05, + -5.610116399094361e-05, + -6.345231116294483e-05, + -7.3342008757329e-05, + -8.645008081472454e-05, + -0.00010370209784427029, + -0.00012642987418859535, + -0.0001562350804587011, + -0.00019498028127830906, + -0.0002446994284604038, + -0.0003070763501059426, + -0.00038329209144500454, + -0.00047316453581023227, + -0.0005745372088218173, + -0.0006830537329866747, + -0.0007921136442842208, + -0.0008936552322416165, + -0.000979333997527033, + -0.0010414228790522715, + -0.0010740641294497378, + -0.0010740302315131295, + -0.0010414212628492312, + -0.0009792781031280925, + -0.0008936552721886641, + -0.0007921472640968176, + -0.0006831115917111736, + -0.0005745576909947358, + -0.00047320744806828935, + -0.0003833237686932451, + -0.0003070949302907918, + -0.00024463606330045207, + -0.00019497842643276307, + -0.00015619780896785585, + -0.0001264224214935229, + -0.00010369838913591026, + -8.642400693562946e-05, + -7.336249546229033e-05, + -6.348957062695663e-05, + -5.6134690447894227e-05, + -5.0629244175562134e-05, + -4.663983927913619e-05, + -4.394485778757702e-05, + -4.222766316464627e-05, + -4.1324375536778736e-05 + ], + [ + -5.417727833926425e-05, + -5.5192331137895115e-05, + -5.734720387328055e-05, + -6.0723855625565334e-05, + -6.559049031349034e-05, + -7.224135720479214e-05, + -8.102290400328371e-05, + -9.257581244969568e-05, + -0.00010761339635924771, + -0.00012697007581106035, + -0.00015185838731570338, + -0.0001835168801371978, + -0.0002234430280334032, + -0.0002728251989813158, + -0.00033281819547187265, + -0.0004036161209212055, + -0.0004846026002770901, + -0.0005733972742143653, + -0.0006663499432394711, + -0.0007580014456370116, + -0.0008421643706462912, + -0.0009125091861828367, + -0.0009631629476644252, + -0.0009896846122239777, + -0.0009896677885707825, + -0.0009631610582215181, + -0.0009125091929811386, + -0.0008421960194342142, + -0.0007580685047085195, + -0.0006663741397253791, + -0.0005734717422462059, + -0.00048459502213375554, + -0.0004036197797449972, + -0.00033279771002246814, + -0.0002727972805990668, + -0.00022344303219497453, + -0.00018352430883564113, + -0.00015178764171013838, + -0.00012696265620381687, + -0.00010761525582071728, + -9.259630114495475e-05, + -8.101545292798152e-05, + -7.22152834784003e-05, + -6.559234215197646e-05, + -6.073688621650149e-05, + -5.7360241458791295e-05, + -5.521467065756404e-05, + -5.41456241794392e-05 + ], + [ + -6.846431585659742e-05, + -6.971775602813163e-05, + -7.223768393491869e-05, + -7.623267680585914e-05, + -8.18703757615949e-05, + -8.953816638421806e-05, + -9.958622454505234e-05, + -0.00011243544369788313, + -0.00012889598795550833, + -0.00014971290840065345, + -0.00017587518662607913, + -0.00020842401531209423, + -0.00024819193676157584, + -0.00029605444082024415, + -0.0003525814931021546, + -0.000417588858358996, + -0.0004898549404695221, + -0.0005674202489215109, + -0.0006469623503694572, + -0.0007241877750213024, + -0.000794289738092467, + -0.0008523443989451051, + -0.0008938074400353251, + -0.0009154080759391817, + -0.0009154210744170726, + -0.0008938056324459485, + -0.000852340616749578, + -0.0007942523190765241, + -0.0007242008166566925, + -0.0006470163257199123, + -0.000567451842741712, + -0.000489871650923115, + -0.00041751623447280076, + -0.0003525535065766449, + -0.00029602278360008896, + -0.0002481956496985586, + -0.00020841843293267518, + -0.00017590876814665057, + -0.00014966451759137312, + -0.00012887922692220933, + -0.00011242985901043129, + -9.954897664564618e-05, + -8.950465628991136e-05, + -8.187222618349484e-05, + -7.626805645305292e-05, + -7.223395092690887e-05, + -6.969913316780675e-05, + -6.848481027264927e-05 + ], + [ + -8.406812734426417e-05, + -8.548732588373557e-05, + -8.831644800040724e-05, + -9.281430786660505e-05, + -9.909642893827525e-05, + -0.00010753529047189498, + -0.00011847549152531652, + -0.00013236029133970173, + -0.00014972418361813305, + -0.0001713457282741112, + -0.00019803886155668097, + -0.00023046854510565636, + -0.0002692158796353453, + -0.00031479316248346576, + -0.0003672264956399299, + -0.0004262123024493686, + -0.0004904694927305023, + -0.0005581074880994201, + -0.0006261946910704845, + -0.0006914250640035162, + -0.0007500006528109745, + -0.0007981370893343983, + -0.0008322483782592496, + -0.0008499985662315747, + -0.0008499875209232346, + -0.0008322874896263464, + -0.0007981239223860781, + -0.0007500268732809393, + -0.0006914549156723991, + -0.0006262001677870918, + -0.0005580701008944962, + -0.0004904806348152141, + -0.00042623094640576364, + -0.0003672376760317191, + -0.00031479689565784785, + -0.0002692009727769424, + -0.00023048900788843666, + -0.00019804449213839132, + -0.0001713159395415409, + -0.00014961616688692207, + -0.00013224108328554899, + -0.00011841960681524338, + -0.00010751666336934992, + -9.910015535437931e-05, + -9.281989855988429e-05, + -8.8370470647404e-05, + -8.547988683368888e-05, + -8.408676487656124e-05 + ], + [ + -0.0001005901491760908, + -0.00010210807659390104, + -0.00010525379006069313, + -0.00011012043610195856, + -0.00011687564065858381, + -0.0001258733028438732, + -0.00013739833543812614, + -0.00015185492144285695, + -0.00016973660906804877, + -0.00019173073376277833, + -0.00021826930409173917, + -0.0002498814056955684, + -0.0002868631431300805, + -0.00032952376873008086, + -0.0003777198580674479, + -0.0004307458624033958, + -0.0004876198405240066, + -0.0005463937981385376, + -0.0006049148214535197, + -0.0006601692005324385, + -0.0007093256909836942, + -0.0007493054928807205, + -0.0007775550334803713, + -0.0007921688196271855, + -0.000792174399796515, + -0.0007775511694244874, + -0.0007492757010558604, + -0.0007092847316201883, + -0.0006601655050286787, + -0.000604855237136819, + -0.0005463938184916933, + -0.0004876402326061473, + -0.0004308500255109107, + -0.0003777255109554376, + -0.000329544221072995, + -0.0002868370010746777, + -0.0002498143117723362, + -0.0002182544335407744, + -0.00019169905417533873, + -0.0001697291895174086, + -0.00015177108553918322, + -0.0001373741071742315, + -0.00012591241639593883, + -0.00011694084086379789, + -0.00011017445944527876, + -0.0001053189896671917, + -0.00010219561365385473, + -0.00010060320014503429 + ], + [ + -0.00011785160880911694, + -0.0001194440381772737, + -0.00012279835871602208, + -0.000127890379236461, + -0.00013498457535451712, + -0.00014428021798603376, + -0.0001560604280758104, + -0.00017074237071171177, + -0.0001886837039799351, + -0.00021046555628074018, + -0.00023626660413307351, + -0.0002664930680577814, + -0.0003013441200834108, + -0.0003408571580465086, + -0.00038470064645621703, + -0.0004322581459370372, + -0.00048231339167928314, + -0.0005334230530736512, + -0.0005835551007112794, + -0.0006304967724562886, + -0.0006717913069759366, + -0.0007051867554758975, + -0.0007286622706790825, + -0.0007408510345083149, + -0.000740877181417895, + -0.0007286624036788897, + -0.0007052649860940446, + -0.0006718266433028119, + -0.0006305208828421782, + -0.000583573725721675, + -0.0005333932769538382, + -0.00048231712924430456, + -0.00043224876827092706, + -0.00038471555209341357, + -0.00034085529619605573, + -0.000301357159146417, + -0.00026654142901626606, + -0.00023626474209436298, + -0.00021040958319817728, + -0.0001886501815226726, + -0.00017060640592579844, + -0.00015598591051936558, + -0.0001442727670180762, + -0.000134988299294378, + -0.000127908998241113, + -0.0001228374726846144, + -0.00011949247089968704, + -0.00011785347413409582 + ], + [ + -0.00013547811726126932, + -0.00013718974616198088, + -0.0001406073782434299, + -0.00014589875754140836, + -0.00015306928216015864, + -0.00016244687741168897, + -0.00017421964055699282, + -0.0001888624988480587, + -0.00020657663918349008, + -0.00022772151091833085, + -0.00025240703959102437, + -0.00028091812483964964, + -0.0003132790985357575, + -0.00034946007979056945, + -0.00038897331881357, + -0.00043128413128682835, + -0.00047528046972226685, + -0.0005195974571802378, + -0.0005626592645519174, + -0.0006025994420804878, + -0.0006374550856423833, + -0.0006654155681599971, + -0.0006850746851426741, + -0.0006951771703853005, + -0.0006951959378883597, + -0.0006850990980627732, + -0.0006654193551388735, + -0.0006374644159723757, + -0.0006026440860040479, + -0.0005626872030938175, + -0.0005196570725592795, + -0.0004753009686617947, + -0.00043133056744975424, + -0.000389034713555999, + -0.0003494153801305187, + -0.00031321203278274646, + -0.0002808417677947876, + -0.0002523362211667118, + -0.00022761535176828518, + -0.0002065300791811627, + -0.0001887656486987243, + -0.00017413771760123325, + -0.0001624003503359748, + -0.00015305250877762014, + -0.00014588567050130859, + -0.00014064648886086736, + -0.00013721395294162808, + -0.00013550791783191875 + ], + [ + -0.00015342315163478556, + -0.00015513476314473406, + -0.00015856546309594137, + -0.00016380649346775162, + -0.0001709472773173968, + -0.00018014976109678743, + -0.0001917884558748514, + -0.00020603094454339145, + -0.00022319193348190522, + -0.00024332733222017788, + -0.00026662907136788485, + -0.0002930784336865926, + -0.0003228597973177123, + -0.0003556846041714304, + -0.0003911486866950126, + -0.0004285815339155704, + -0.00046710957649615794, + -0.0005055018470436017, + -0.0005424004352166469, + -0.0005764157209003368, + -0.0006059165026109982, + -0.000629453537996614, + -0.0006459127134153172, + -0.0006543556677463042, + -0.0006543612613544067, + -0.0006459518416425627, + -0.0006294720833086078, + -0.0006059388639170037, + -0.0005765274945057886, + -0.0005424786682217235, + -0.0005055186198625734, + -0.00046712822578908234, + -0.0004285889184237289, + -0.00039113563397641843, + -0.0003556530154298942, + -0.00032280027236902733, + -0.000293013235327604, + -0.000266534083341809, + -0.00024325473131923774, + -0.00022314537859301686, + -0.00020601414656547758, + -0.00019176426404605255, + -0.0001800715612922162, + -0.00017084666038696096, + -0.00016371709530228897, + -0.00015851515119886958, + -0.00015509938220695477, + -0.0001534343253352359 + ], + [ + -0.00017136071423641858, + -0.0001730220372010883, + -0.00017637076211376933, + -0.0001814460653554267, + -0.00018837078207432646, + -0.00019736842632147767, + -0.00020868869279352102, + -0.00022238175755066953, + -0.0002385947283427316, + -0.00025751949445965806, + -0.00027915435928606297, + -0.0003034525477566104, + -0.00033049799639244817, + -0.0003600484773996217, + -0.0003916198912121524, + -0.0004245659004759166, + -0.00045821796726021227, + -0.0004914490645338409, + -0.000523050570809925, + -0.0005520110839829487, + -0.000576972832905692, + -0.0005967900975666433, + -0.0006106603160472167, + -0.0006177642199415847, + -0.0006177660858960937, + -0.0006106547319539595, + -0.0005968030472631616, + -0.0005769875394740071, + -0.0005521096802147245, + -0.0005231642698371096, + -0.000491547823451348, + -0.00045827751240836426, + -0.0004246087543664626, + -0.00039162734408417264, + -0.0003600764193944683, + -0.00033049245017788644, + -0.00030340034058518587, + -0.00027907613401101074, + -0.00025748228610544274, + -0.0002385351032488748, + -0.00022230909647282058, + -0.0002086160526910547, + -0.00019732938379052816, + -0.00018832611913824384, + -0.00018139205728893578, + -0.0001763167565881877, + -0.0001729885094346122, + -0.0001713197378774672 + ], + [ + -0.00018900771493501892, + -0.00019063554317120263, + -0.00019384275632353, + -0.00019870756161781056, + -0.00020541627888660368, + -0.00021405448483592996, + -0.00022478243959724842, + -0.0002376374300959454, + -0.00025278323139850086, + -0.0002702608461180433, + -0.00029006673144007903, + -0.000312217471102628, + -0.0003365660546213547, + -0.0003629373071456125, + -0.00039084706253825294, + -0.0004197085391388587, + -0.0004489463485515702, + -0.0004776198312687317, + -0.00050471214882523, + -0.0005292770248605652, + -0.0005504074859455986, + -0.0005671515882186126, + -0.0005787960903867455, + -0.0005848382386624227, + -0.000584815906082255, + -0.0005788203923652642, + -0.0005671981496499505, + -0.0005504205306127819, + -0.000529411095083371, + -0.0005048406789003044, + -0.0004776924729843562, + -0.00044897987174273774, + -0.00041976626931218135, + -0.0003908600919542512, + -0.0003629056387788319, + -0.0003364841127736569, + -0.0003121448371414168, + -0.00029004438921430764, + -0.00027023104542060663, + -0.0002527198524799964, + -0.00023758338590071162, + -0.00022474897611189114, + -0.00021401909338773456, + -0.0002053175504141713, + -0.00019865353612504247, + -0.0001938092375345683, + -0.0001906187812466469, + -0.00018903941116641846 + ], + [ + -0.00020629344201095033, + -0.00020784301826824378, + -0.00021090311635531522, + -0.00021552393947164587, + -0.00022186946819803473, + -0.00023001043477462757, + -0.00024000824839428726, + -0.0002519617852849583, + -0.0002658616231840514, + -0.0002817972267302767, + -0.0002997275319559577, + -0.0003195632250390179, + -0.0003413303259402331, + -0.00036469735965496215, + -0.00038922847179367523, + -0.0004143631323696788, + -0.0004395909451324147, + -0.00046420042778197505, + -0.0004873571987616591, + -0.0005082248859462825, + -0.0005260567856925205, + -0.0005401802529149162, + -0.0005499865919640488, + -0.000555013452530472, + -0.0005550527397138944, + -0.0005500089132670603, + -0.0005402026008769251, + -0.0005260642219647684, + -0.000508262118827926, + -0.0004873776707748785, + -0.000464252650231803, + -0.0004396301090489184, + -0.0004143258686720909, + -0.0003892042543666168, + -0.0003646601275678691, + -0.0003412707225803826, + -0.00031955762865800325, + -0.00029970142035303963, + -0.00028170406905968584, + -0.00026580388876779146, + -0.0002518538074554594, + -0.00023996730694782136, + -0.00022992104953795394, + -0.0002217316110159286, + -0.00021541219167296692, + -0.00021083233439408817, + -0.00020779271090258004, + -0.0002063083187652175 + ], + [ + -0.00022315077858601814, + -0.00022459046426030258, + -0.0002274493823433057, + -0.0002317498743316932, + -0.0002376707980187512, + -0.00024519529072020586, + -0.0002542972954728229, + -0.0002652264408104421, + -0.0002778336935867638, + -0.00029219366564273104, + -0.0003082130356508026, + -0.0003257895416100063, + -0.00034499572501734245, + -0.00036547583305162283, + -0.0003868612378736392, + -0.00040861536227926077, + -0.00043031375635759606, + -0.00045133980178533255, + -0.00047102855175190373, + -0.0004886722512786521, + -0.0005036990092756045, + -0.0005155353778782238, + -0.0005237584230061941, + -0.0005280088245147552, + -0.0005279995090753727, + -0.0005237603664700703, + -0.000515589387403382, + -0.0005037157764305657, + -0.0004886276332931664, + -0.0004709504094396595, + -0.00045130627691054506, + -0.00043031561163594286, + -0.00040859679826184676, + -0.00038677556339675683, + -0.00036541814427484023, + -0.0003449659869213754, + -0.0003258212032423809, + -0.0003081814394440811, + -0.0002921192011729229, + -0.0002777611039166264, + -0.0002651799188198557, + -0.0002542712169781989, + -0.00024512451288599105, + -0.00023758326996733376, + -0.00023164002658604394, + -0.00022730038589884743, + -0.00022446011598227825, + -0.00022306880468533517 + ], + [ + -0.00023928546336349435, + -0.0002405929240417693, + -0.00024332708568391563, + -0.0002473296099743765, + -0.00025280158687892304, + -0.00025961834817707705, + -0.0002678823001337452, + -0.0002775505479311052, + -0.0002888373176935369, + -0.0003015452221663968, + -0.00031563885912629384, + -0.00033107902640796367, + -0.0003478211622190716, + -0.0003656155706516484, + -0.00038406378138519643, + -0.00040273360898852157, + -0.0004212582568797463, + -0.00043906028783601816, + -0.0004557093360817828, + -0.000470581609195702, + -0.00048322073691184727, + -0.0004930939863652507, + -0.0004999257227083811, + -0.0005034830741417795, + -0.0005034812876016435, + -0.0004999238704540533, + -0.0004930884016320041, + -0.00048318348160194353, + -0.0004705034334961053, + -0.000455653574994416, + -0.00043901371652598636, + -0.00042120803943784026, + -0.0004026778242939664, + -0.00038393340718075936, + -0.00036550009643866147, + -0.00034777273239583413, + -0.00033102313953288005, + -0.0003156015518450812, + -0.0003015340899534045, + -0.0002887703038651575, + -0.00027752454660362165, + -0.0002677575095138063, + -0.000259467510119746, + -0.00025267493272869353, + -0.00024722155310644633, + -0.00024321533885147771, + -0.00024057987639664077, + -0.00023926492932532375 + ], + [ + -0.0002548967934320867, + -0.0002561167423596802, + -0.0002585454766906571, + -0.00026215307370805186, + -0.0002669638893689633, + -0.00027305242952509195, + -0.00028040005827624785, + -0.0002889787597017032, + -0.0002988948277974894, + -0.0003099655336415022, + -0.0003221519596692246, + -0.00033550611345577126, + -0.00034994812668517406, + -0.0003651555315263241, + -0.0003808620988709784, + -0.00039679592071309536, + -0.0004124356630081756, + -0.00042746799835443613, + -0.0004413624273719905, + -0.00045382276957332146, + -0.00046433304620427173, + -0.0004725636238176611, + -0.0004782741234120674, + -0.0004811777487098, + -0.00048116850344202377, + -0.00047824989938190476, + -0.00047256919986317586, + -0.00046435901908033537, + -0.0004537892987705042, + -0.0004413215182816124, + -0.0004274419776011538, + -0.00041238541337797234, + -0.00039674207034516264, + -0.0003807802429991715, + -0.0003650512947896466, + -0.0003498848425557414, + -0.0003354578288080064, + -0.00032207187586527506, + -0.00030998046583317727, + -0.0002988445335492208, + -0.0002889377808241172, + -0.0002802789882152582, + -0.000272942535650609, + -0.00026686703851836797, + -0.00026206554945007134, + -0.000258446736954755, + -0.00025604038602433817, + -0.0002548725266361402 + ], + [ + -0.0002697835928150043, + -0.00027083966447752323, + -0.00027294984525733643, + -0.00027611987914019783, + -0.00028031796298098345, + -0.00028563722697664477, + -0.00029201262796351715, + -0.00029953904794366556, + -0.000308050783310909, + -0.00031754959246920724, + -0.0003279331264728348, + -0.0003393000773713542, + -0.0003515480436129365, + -0.0003644310898122242, + -0.00037756558877642655, + -0.0003908937463476461, + -0.00040402637854492087, + -0.0004164849052825058, + -0.00042807912377003756, + -0.00043839190528052854, + -0.00044707134742533145, + -0.0004539329213519992, + -0.00045858921747035707, + -0.0004609993312318311, + -0.0004610161014202792, + -0.00045858363937921297, + -0.00045389749590072286, + -0.00044710294071763964, + -0.00043833229241977957, + -0.00042804187390937064, + -0.00041645874662219655, + -0.00040393145245797094, + -0.000390862067279643, + -0.00037749851808760074, + -0.00036425042240752854, + -0.00035144188908503663, + -0.00033921066545322047, + -0.00032781392628259353, + -0.0003174639040698924, + -0.0003080153818127506, + -0.0002994012121031427, + -0.0002918953357686627, + -0.0002854640775732348, + -0.0002801987685111028, + -0.00027603230718016916, + -0.00027290142490094774, + -0.0002707856117693622, + -0.00026976679383965607 + ], + [ + -0.00028384530227271095, + -0.0002847524014926577, + -0.0002865422231205822, + -0.0002892596230750564, + -0.00029285243238233677, + -0.0002973317264287146, + -0.00030278148644594913, + -0.0003092090604698901, + -0.0003163648931393026, + -0.0003242880467846131, + -0.0003329860310100798, + -0.00034248865433695593, + -0.0003526580382498345, + -0.0003633358807751416, + -0.0003742224123483838, + -0.0003851833630356056, + -0.0003959693382555994, + -0.00040627466433961965, + -0.00041574197920896, + -0.0004241474949832854, + -0.00043127181917179165, + -0.0004368108799907096, + -0.0004405993254913865, + -0.0004425679788455259, + -0.00044259031559911805, + -0.00044056580878246686, + -0.0004367624453671185, + -0.00043117855149150367, + -0.00042409535306554163, + -0.000415743842476355, + -0.0004062374674651729, + -0.0003959265488913432, + -0.00038515732548170166, + -0.00037416280016500754, + -0.00036325957495172956, + -0.0003526171068984259, + -0.0003423731789873586, + -0.0003329264402090419, + -0.0003242377639775295, + -0.00031627361091144014, + -0.0003091085325640194, + -0.00030274423572127456, + -0.0002972740432870432, + -0.00029276673436826, + -0.00028920187709484554, + -0.0002864770379951619, + -0.0002847039070705945, + -0.0002838546130743997 + ], + [ + -0.0002969477869790963, + -0.0002977152118925614, + -0.00029918097466768035, + -0.000301415961431988, + -0.00030443512133730667, + -0.0003081565470422588, + -0.00031270663980990606, + -0.0003179459608085428, + -0.0003238241203098567, + -0.0003303038685331525, + -0.0003374243531892666, + -0.00034518733412559584, + -0.00035349061501181695, + -0.0003621663197078694, + -0.00037098167641513743, + -0.00037980645210412, + -0.00038850452737012665, + -0.0003968132174585471, + -0.0004044458886544356, + -0.00041120503951404746, + -0.00041685416785078625, + -0.00042133353184049273, + -0.00042437140836064103, + -0.00042590797409257125, + -0.00042586511528514703, + -0.0004242744906489278, + -0.00042124423879982245, + -0.0004167815297957707, + -0.0004110765756972027, + -0.0004043862753293628, + -0.00039676106029495477, + -0.0003884728585048838, + -0.00037977286927996426, + -0.0003709705083921545, + -0.00036211788558564433, + -0.0003534589468174231, + -0.0003451445567594539, + -0.0003373330870781931, + -0.00033022568730977644, + -0.0003237515721585538, + -0.0003179049850466352, + -0.00031272534265586676, + -0.00030816209143486506, + -0.0003044053636381149, + -0.0003014271385445488, + -0.00029919218965532936, + -0.0002976761081752459, + -0.00029693288716101243 + ], + [ + -0.0003091302973754939, + -0.00030977466267948536, + -0.0003109424735452445, + -0.0003127268667340967, + -0.0003151145838527514, + -0.00031813382191977493, + -0.00032174338119666715, + -0.0003258745531298427, + -0.0003304862219593027, + -0.00033564925908484254, + -0.00034135418159040074, + -0.0003475005531160823, + -0.00035412573278320646, + -0.00036096131907766265, + -0.0003678602823624082, + -0.0003748206824140523, + -0.0003816301121931962, + -0.0003881340585741313, + -0.0003940849112011537, + -0.0003993502721171007, + -0.00040378690765088403, + -0.0004072270052098855, + -0.0004095999637632917, + -0.0004107864367641116, + -0.0004107566383649598, + -0.0004095124775866591, + -0.00040716376835927024, + -0.000403792495885927, + -0.0003993429158585111, + -0.00039410731983990916, + -0.00038813404411619886, + -0.00038164310627502397, + -0.0003748261044342895, + -0.000367873201255573, + -0.00036093525634812334, + -0.00035408480556267874, + -0.0003475303994764674, + -0.0003413243716770693, + -0.0003356380316759906, + -0.00033053091659783495, + -0.0003258763676625726, + -0.00032174712413364325, + -0.0003181803394580828, + -0.00031517606031533787, + -0.00031273610748243515, + -0.00031092012844844156, + -0.00030973370202536885, + -0.00030908741721691243 + ], + [ + -0.00032010574815410437, + -0.00032061610501117713, + -0.00032161078513747197, + -0.00032296484551701135, + -0.0003248125252424039, + -0.00032713326484377155, + -0.0003298190984169603, + -0.00033298551005877695, + -0.00033645742010007915, + -0.00034040227798348737, + -0.00034478487046120393, + -0.00034951016185644283, + -0.00035455781776427717, + -0.0003597227492519369, + -0.0003651000744243319, + -0.0003703859670008837, + -0.00037550811286082435, + -0.0003803860910908981, + -0.00038486190853817217, + -0.00038882913677190043, + -0.0003921966719247125, + -0.0003947427925319453, + -0.00039649176918720434, + -0.0003973691030055315, + -0.0003973411529851721, + -0.00039646946945382004, + -0.00039478759829536883, + -0.0003921929776146342, + -0.00038882545813184624, + -0.00038482645880772, + -0.0003803451601830348, + -0.00037541685007164957, + -0.0003702779660196696, + -0.0003650571181827315, + -0.0003597804414768181, + -0.000354591284403029, + -0.00034951387771242864, + -0.0003447345955967841, + -0.0003404134211802871, + -0.00033654111333618683, + -0.0003330282596629735, + -0.0003298898468441258, + -0.0003271518079859706, + -0.00032482928936385623, + -0.0003229778702301018, + -0.0003215566541049174, + -0.00032056768777349767, + -0.0003201262860781414 + ], + [ + -0.00033004764064640705, + -0.0003303772971834547, + -0.0003310850913716516, + -0.00033207976914395544, + -0.0003333965663176471, + -0.00033503755840909967, + -0.00033701758850525126, + -0.00033919873749426057, + -0.0003417374917470866, + -0.00034457610156128274, + -0.00034777973281251037, + -0.00035119954475345774, + -0.00035485772368372306, + -0.0003586518328152395, + -0.00036250928075964314, + -0.00036628855142490225, + -0.00036996161278097183, + -0.00037341670515212485, + -0.0003765869408983716, + -0.00037943668225772566, + -0.00038183011350339206, + -0.0003836666894164323, + -0.000384897822811721, + -0.0003855386363042439, + -0.000385559104376887, + -0.0003849834847182707, + -0.00038378396303639256, + -0.0003819176614412957, + -0.00037946461614075374, + -0.0003766073743205265, + -0.00037342609342439257, + -0.0003699578946881429, + -0.00036625126068706693, + -0.0003624365876589498, + -0.0003586163981241107, + -0.0003548762573390547, + -0.0003511976345188036, + -0.00034777415507704134, + -0.00034457596550671084, + -0.00034175228212302103, + -0.00033927315584640047, + -0.0003370398403373981, + -0.00033506176875934253, + -0.00033343568766702096, + -0.0003321188162258867, + -0.00033110926595532905, + -0.0003304238535630378, + -0.0003300625293951202 + ], + [ + -0.00033858506249823426, + -0.00033876394976814283, + -0.0003392482643696245, + -0.00033992068365899824, + -0.00034076820019881166, + -0.0003418262504132956, + -0.00034310777103537356, + -0.0003446202414586351, + -0.00034634713896943535, + -0.0003482674998877808, + -0.00035037418641490573, + -0.00035266899246845317, + -0.00035507934438743465, + -0.00035760512530742176, + -0.0003601383758010315, + -0.0003627274993652911, + -0.00036521974989923176, + -0.0003674922281331378, + -0.00036960072170592157, + -0.00037149142760794384, + -0.0003730690867977025, + -0.0003742704293612538, + -0.00037507324825807416, + -0.00037545884724793474, + -0.00037552404092714385, + -0.0003751477620879503, + -0.0003743244968216799, + -0.0003731025102667074, + -0.0003714895644208588, + -0.0003695821036512616, + -0.00036746055548544406, + -0.00036514891808201187, + -0.00036270697616487356, + -0.0003601122540018436, + -0.0003576107174334186, + -0.00035505877834111465, + -0.00035270252770964355, + -0.00035038904974042716, + -0.0003482395334609402, + -0.00034633213332790333, + -0.0003446463007715697, + -0.00034313007221562587, + -0.0003419007138899496, + -0.00034081471326041416, + -0.0003399578888782351, + -0.0003392593962630263, + -0.00033882160639011293, + -0.00033858692308220105 + ], + [ + -0.0003456325383038721, + -0.0003457629592137587, + -0.00034598836448177856, + -0.000346381467468976, + -0.00034690312363131793, + -0.00034749367967187937, + -0.0003482648934180729, + -0.0003491777186933782, + -0.00035017616571417296, + -0.0003512920121262393, + -0.0003524899378666874, + -0.00035380884253908494, + -0.0003552265026614013, + -0.0003566980717803721, + -0.000358179102462009, + -0.0003597456739839104, + -0.0003611427518982335, + -0.0003624877585998146, + -0.00036373030651231015, + -0.0003648964198196281, + -0.00036583340570528727, + -0.00036652446354859525, + -0.0003670014240358532, + -0.00036721193208630424, + -0.00036722677461627825, + -0.00036697151198319776, + -0.0003665263226320907, + -0.0003658538447862009, + -0.00036489826396548467, + -0.0003637750145144212, + -0.0003625492080490655, + -0.000361209880988404, + -0.00035975496432628294, + -0.0003582331220000472, + -0.0003567707280736668, + -0.0003553009055152759, + -0.00035385534996515005, + -0.000352497316897226, + -0.000351226824607709, + -0.00035012215964359497, + -0.0003491422984127965, + -0.0003482536705483176, + -0.0003474972920138619, + -0.0003468639399031507, + -0.0003463888554403738, + -0.0003460181640911392, + -0.0003457684944769662, + -0.00034563439756027685 + ], + [ + -0.00035092174662587194, + -0.0003509702206266605, + -0.00035106344110461777, + -0.000351277749346057, + -0.0003515348639142361, + -0.0003518293749263111, + -0.0003521647467376653, + -0.00035255051798829085, + -0.0003530350334343645, + -0.0003535474967294724, + -0.00035412886019464256, + -0.00035473628083080303, + -0.0003553978474671417, + -0.0003560649731588487, + -0.0003567971750409989, + -0.0003574828589243248, + -0.0003581349296591395, + -0.0003587759156986411, + -0.00035937587700237404, + -0.0003598846029230098, + -0.00036033357396174034, + -0.0003606447620969628, + -0.0003609130814321727, + -0.00036101742303217406, + -0.00036098019726316647, + -0.0003608013274949894, + -0.0003606391900524167, + -0.0003603335685927787, + -0.0003598827250101057, + -0.00035940198941911963, + -0.00035881882456510755, + -0.0003581852843315352, + -0.0003575014372284893, + -0.00035683071447883854, + -0.0003561113980790971, + -0.0003554349211108301, + -0.00035475490699898794, + -0.0003541232668086387, + -0.00035357727800163505, + -0.0003530331650362494, + -0.000352569103379433, + -0.00035217217041223336, + -0.0003517826799957025, + -0.0003514640872141404, + -0.000351264657718255, + -0.00035111927087656504, + -0.00035097389066590315, + -0.00035092360583185127 + ], + [ + -0.0003543206064313714, + -0.0003543411352123125, + -0.00035439333726892627, + -0.0003544027004619352, + -0.0003544643885412005, + -0.0003545651286066723, + -0.00035469572388689273, + -0.0003547574426538047, + -0.00035488436218291417, + -0.0003549963357734306, + -0.0003551810237098862, + -0.00035535085576820314, + -0.00035553191207571456, + -0.00035568861400414397, + -0.00035590877336219036, + -0.0003560432479614082, + -0.0003561980795826239, + -0.00035634923952378373, + -0.0003565524818757455, + -0.0003566477461587674, + -0.0003567783003846437, + -0.0003568678465266328, + -0.0003569722461998859, + -0.0003569685730594348, + -0.00035697603236676064, + -0.00035692573755849016, + -0.00035684922153659973, + -0.0003567876480952119, + -0.00035666077898993404, + -0.0003565375845650885, + -0.0003563995275432154, + -0.00035623164692100297, + -0.0003560730478304605, + -0.00035589200498791163, + -0.00035569979158109116, + -0.00035551502322802946, + -0.0003553527162671239, + -0.0003551922144825698, + -0.00035506711666593357, + -0.00035490294335552796, + -0.0003547629897840704, + -0.00035463791642316027, + -0.00035455393129930576, + -0.0003544530935417886, + -0.000354447401154815, + -0.000354350394121457, + -0.0003542907567127283, + -0.0003542739977563795 + ], + [ + -0.00035552725061898695, + -0.0003555346978576761, + -0.00035555145546873023, + -0.00035553680069985927, + -0.00035553694240594874, + -0.00035555200245053985, + -0.00035555966955767924, + -0.00035555258122004987, + -0.00035555089422683293, + -0.00035553262039170555, + -0.0003555608933468237, + -0.0003555593361493791, + -0.00035553363351860807, + -0.00035555451488013143, + -0.0003555623423028713, + -0.000355560940061957, + -0.0003555612420388587, + -0.00035555779650986116, + -0.00035555804947988163, + -0.000355534195264224, + -0.000355565998795559, + -0.0003555364279246966, + -0.00035554208628103026, + -0.00035555901500750937, + -0.0003555367047189703, + -0.0003555421299860649, + -0.00035554387792632945, + -0.000355564264108316, + -0.0003555416320141855, + -0.00035554323029530496, + -0.00035553370657465767, + -0.0003555333039696286, + -0.0003555571356108258, + -0.0003555623462762588, + -0.00035553029393007484, + -0.00035553922825997097, + -0.0003555407060136681, + -0.0003555608112308382, + -0.000355540065016063, + -0.0003555527706118548, + -0.0003555375039339933, + -0.0003555280147526861, + -0.0003555594589714357, + -0.00035554994197724136, + -0.00035555348945250044, + -0.0003555515455285735, + -0.0003555291177259734, + -0.00035552725326762493 + ] + ], + "history": [ + { + "step": 0, + "mass": 1584.0000070855021 + }, + { + "step": 519, + "mass": 1584.0047779940069, + "u_change": 0.0647322877062526, + "v_change": 0.07817616709246572, + "mass_change": 3.0119371738531663e-06 + }, + { + "step": 1038, + "mass": 1584.0088585987687, + "u_change": 0.006049919292536146, + "v_change": 0.002710658546843143, + "mass_change": 2.576139358324288e-06 + }, + { + "step": 1557, + "mass": 1584.0127223730087, + "u_change": 0.0004881629285002919, + "v_change": 0.0003181452915118753, + "mass_change": 2.439251403240919e-06 + }, + { + "step": 2076, + "mass": 1584.0159236956388, + "u_change": 0.00010334411578326227, + "v_change": 4.8581332369613224e-05, + "mass_change": 2.021037004878621e-06 + }, + { + "step": 2595, + "mass": 1584.019107464701, + "u_change": 4.073688765463586e-05, + "v_change": 3.864548608214905e-05, + "mass_change": 2.0099552070201412e-06 + }, + { + "step": 3114, + "mass": 1584.0223935786635, + "u_change": 3.443705998344861e-05, + "v_change": 2.5740947240562353e-05, + "mass_change": 2.074566886257413e-06 + }, + { + "step": 3633, + "mass": 1584.0254519600421, + "u_change": 2.8740569675379104e-05, + "v_change": 3.3738420394773234e-05, + "mass_change": 1.930796316268942e-06 + }, + { + "step": 4152, + "mass": 1584.02849223651, + "u_change": 3.120966156470255e-05, + "v_change": 3.276182690659951e-05, + "mass_change": 1.9193664483588794e-06 + }, + { + "step": 4671, + "mass": 1584.0316907577217, + "u_change": 3.6193019037846925e-05, + "v_change": 4.671436496254943e-05, + "mass_change": 2.0192684327246364e-06 + }, + { + "step": 5190, + "mass": 1584.0350061822683, + "u_change": 3.835541929880133e-05, + "v_change": 3.130106880073709e-05, + "mass_change": 2.0930710427834145e-06 + }, + { + "step": 5709, + "mass": 1584.0380195304751, + "u_change": 4.119111446978759e-05, + "v_change": 5.0278776022727105e-05, + "mass_change": 1.9023662837111667e-06 + }, + { + "step": 6228, + "mass": 1584.0407872796059, + "u_change": 3.959572997895321e-05, + "v_change": 5.50303401455952e-05, + "mass_change": 1.7473163625916962e-06 + }, + { + "step": 6747, + "mass": 1584.0436464622617, + "u_change": 3.42664950885509e-05, + "v_change": 2.7968186771833263e-05, + "mass_change": 1.8050395473621833e-06 + }, + { + "step": 7266, + "mass": 1584.0466022975743, + "u_change": 3.7831673934709936e-05, + "v_change": 2.718647132681659e-05, + "mass_change": 1.8660576384993364e-06 + }, + { + "step": 7785, + "mass": 1584.0496723800898, + "u_change": 4.1589794972993255e-05, + "v_change": 3.576837140274306e-05, + "mass_change": 1.938183397566371e-06 + }, + { + "step": 8304, + "mass": 1584.0530327763408, + "u_change": 3.941926365071894e-05, + "v_change": 3.141224783293462e-05, + "mass_change": 2.121462270234088e-06 + }, + { + "step": 8823, + "mass": 1584.0560924019665, + "u_change": 4.42839381158975e-05, + "v_change": 4.3162201561336325e-05, + "mass_change": 1.9315818257096746e-06 + }, + { + "step": 9342, + "mass": 1584.0594095773995, + "u_change": 3.78724103787953e-05, + "v_change": 2.504398064424679e-05, + "mass_change": 2.094176400379655e-06 + }, + { + "step": 9861, + "mass": 1584.0626484695822, + "u_change": 3.440653184874983e-05, + "v_change": 2.8710958119499674e-05, + "mass_change": 2.044755156704337e-06 + }, + { + "step": 10380, + "mass": 1584.0658618938178, + "u_change": 2.515505387840679e-05, + "v_change": 4.7775384487133506e-05, + "mass_change": 2.028676907328382e-06 + }, + { + "step": 10899, + "mass": 1584.069312589243, + "u_change": 3.144365378036521e-05, + "v_change": 3.1884376055086764e-05, + "mass_change": 2.178469324391691e-06 + }, + { + "step": 11418, + "mass": 1584.0728264320642, + "u_change": 3.2163825805704645e-05, + "v_change": 4.2713509640550026e-05, + "mass_change": 2.2183351044212107e-06 + }, + { + "step": 11937, + "mass": 1584.0763099510223, + "u_change": 3.330793759808374e-05, + "v_change": 2.822192940015264e-05, + "mass_change": 2.199191251584193e-06 + }, + { + "step": 12456, + "mass": 1584.0798163618892, + "u_change": 2.648801354132854e-05, + "v_change": 2.856836697538118e-05, + "mass_change": 2.2136432141988703e-06 + }, + { + "step": 12975, + "mass": 1584.083113156259, + "u_change": 3.0240363516912778e-05, + "v_change": 2.8128032959098025e-05, + "mass_change": 2.0813095675944803e-06 + }, + { + "step": 13494, + "mass": 1584.0866144187748, + "u_change": 2.4828095872817098e-05, + "v_change": 2.6446879726581645e-05, + "mass_change": 2.2103929925009883e-06 + }, + { + "step": 14013, + "mass": 1584.0900689605623, + "u_change": 2.445423648825532e-05, + "v_change": 2.472932039531125e-05, + "mass_change": 2.180897583366411e-06 + }, + { + "step": 14532, + "mass": 1584.093659548089, + "u_change": 2.4953907676289832e-05, + "v_change": 3.666695884053469e-05, + "mass_change": 2.266785044506641e-06 + }, + { + "step": 15051, + "mass": 1584.097050106153, + "u_change": 2.7572287444692614e-05, + "v_change": 2.3852093694772313e-05, + "mass_change": 2.1405038186978363e-06 + }, + { + "step": 15570, + "mass": 1584.1005202960223, + "u_change": 3.22823291446144e-05, + "v_change": 2.6177133652390994e-05, + "mass_change": 2.1907764229047274e-06 + }, + { + "step": 16089, + "mass": 1584.103868842125, + "u_change": 2.8918391404213087e-05, + "v_change": 2.4292927777580684e-05, + "mass_change": 2.1139811159497444e-06 + }, + { + "step": 16608, + "mass": 1584.1073487419635, + "u_change": 2.8998096975085283e-05, + "v_change": 2.8970109686204837e-05, + "mass_change": 2.196906453914517e-06 + }, + { + "step": 17127, + "mass": 1584.110853690654, + "u_change": 2.898380017072364e-05, + "v_change": 2.9354438311368995e-05, + "mass_change": 2.212720123014776e-06 + }, + { + "step": 17646, + "mass": 1584.1142932977527, + "u_change": 2.8138610149067366e-05, + "v_change": 2.784839135653886e-05, + "mass_change": 2.1714691182529464e-06 + }, + { + "step": 18165, + "mass": 1584.1177192572504, + "u_change": 2.9196601704925153e-05, + "v_change": 2.7956770803077647e-05, + "mass_change": 2.1628532085639517e-06 + }, + { + "step": 18684, + "mass": 1584.1213150583208, + "u_change": 2.754525905469021e-05, + "v_change": 4.605408057221379e-05, + "mass_change": 2.270076423136298e-06 + }, + { + "step": 19203, + "mass": 1584.1246598158032, + "u_change": 2.4144550104111123e-05, + "v_change": 2.5188868033517556e-05, + "mass_change": 2.1115893102574538e-06 + }, + { + "step": 19722, + "mass": 1584.1281100474298, + "u_change": 3.033694636171546e-05, + "v_change": 3.171935183135259e-05, + "mass_change": 2.178176522219921e-06 + }, + { + "step": 20241, + "mass": 1584.1313007120043, + "u_change": 3.140207051204155e-05, + "v_change": 3.0042862852716294e-05, + "mass_change": 2.0143084344895908e-06 + }, + { + "step": 20760, + "mass": 1584.1347933467478, + "u_change": 2.5991657744273437e-05, + "v_change": 2.3962740798910898e-05, + "mass_change": 2.2049461665586625e-06 + } + ], + "checkpoint_bitwise_equal": null, + "population_budget": { + "steps": [ + { + "step": 20761, + "mass": 1584.1347933467478, + "delta_mass": 8.05780291557312e-06, + "bottom_net_in": -0.01706586591899395, + "top_net_in": 0.01706816256046295, + "collision_roundoff": 5.76116144657135e-06, + "physical_residual": 5.76116144657135e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6582143120467663, + "outgoing": 2.6752727795392275 + }, + "flanks": { + "incoming": 5.333937915042043, + "outgoing": 5.3339453134685755 + }, + "top": { + "incoming": 8.009222064167261, + "outgoing": 7.992153901606798 + } + } + }, + { + "step": 20762, + "mass": 1584.1348014045507, + "delta_mass": 9.967014193534851e-06, + "bottom_net_in": -0.017065582796931267, + "top_net_in": 0.01706794835627079, + "collision_roundoff": 7.601454854011536e-06, + "physical_residual": 7.601454854011536e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6582143157720566, + "outgoing": 2.6752726268023252 + }, + "flanks": { + "incoming": 5.333938097581267, + "outgoing": 5.33394536934793 + }, + "top": { + "incoming": 8.009222036227584, + "outgoing": 7.992154087871313 + } + } + }, + { + "step": 20763, + "mass": 1584.1348113715649, + "delta_mass": 2.3599714040756226e-06, + "bottom_net_in": -0.01706577278673649, + "top_net_in": 0.017067503184080124, + "collision_roundoff": 6.295740604400635e-07, + "physical_residual": 6.295740604400635e-07, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6582142617553473, + "outgoing": 2.6752727441489697 + }, + "flanks": { + "incoming": 5.333938121795654, + "outgoing": 5.333945412188768 + }, + "top": { + "incoming": 8.009221870452166, + "outgoing": 7.9921543672680855 + } + } + }, + { + "step": 20764, + "mass": 1584.1348137315363, + "delta_mass": 7.828697562217712e-06, + "bottom_net_in": -0.01706579141318798, + "top_net_in": 0.0170673206448555, + "collision_roundoff": 6.299465894699097e-06, + "physical_residual": 6.299465894699097e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.658214220777154, + "outgoing": 2.6752726919949055 + }, + "flanks": { + "incoming": 5.333938106894493, + "outgoing": 5.33394542708993 + }, + "top": { + "incoming": 8.009221773594618, + "outgoing": 7.992154452949762 + } + } + }, + { + "step": 20765, + "mass": 1584.1348215602338, + "delta_mass": 6.342306733131409e-06, + "bottom_net_in": -0.017065733671188354, + "top_net_in": 0.01706773228943348, + "collision_roundoff": 4.343688488006592e-06, + "physical_residual": 4.343688488006592e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6582142654806376, + "outgoing": 2.675272671505809 + }, + "flanks": { + "incoming": 5.333938054740429, + "outgoing": 5.333945382386446 + }, + "top": { + "incoming": 8.00922199524939, + "outgoing": 7.992154262959957 + } + } + }, + { + "step": 20766, + "mass": 1584.1348279025406, + "delta_mass": 4.20399010181427e-06, + "bottom_net_in": -0.017065446823835373, + "top_net_in": 0.017068035900592804, + "collision_roundoff": 1.6149133443832397e-06, + "physical_residual": 1.6149133443832397e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6582143753767014, + "outgoing": 2.6752726528793573 + }, + "flanks": { + "incoming": 5.333938114345074, + "outgoing": 5.333945283666253 + }, + "top": { + "incoming": 8.00922198034823, + "outgoing": 7.992153944447637 + } + } + }, + { + "step": 20767, + "mass": 1584.1348321065307, + "delta_mass": 2.255663275718689e-06, + "bottom_net_in": -0.01706548035144806, + "top_net_in": 0.017067935317754745, + "collision_roundoff": -1.993030309677124e-07, + "physical_residual": -1.993030309677124e-07, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6582143250852823, + "outgoing": 2.675272749736905 + }, + "flanks": { + "incoming": 5.33393812738359, + "outgoing": 5.333945183083415 + }, + "top": { + "incoming": 8.009221883490682, + "outgoing": 7.992153948172927 + } + } + }, + { + "step": 20768, + "mass": 1584.134834362194, + "delta_mass": 7.569789886474609e-06, + "bottom_net_in": -0.01706511527299881, + "top_net_in": 0.017067937180399895, + "collision_roundoff": 4.7478824853897095e-06, + "physical_residual": 4.7478824853897095e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6582143642008305, + "outgoing": 2.67527268640697 + }, + "flanks": { + "incoming": 5.333938343450427, + "outgoing": 5.333945136517286 + }, + "top": { + "incoming": 8.009221829473972, + "outgoing": 7.992153892293572 + } + } + }, + { + "step": 20769, + "mass": 1584.1348419319838, + "delta_mass": 4.1853636503219604e-06, + "bottom_net_in": -0.017065228894352913, + "top_net_in": 0.017068054527044296, + "collision_roundoff": 1.3597309589385986e-06, + "physical_residual": 1.3597309589385986e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6582142896950245, + "outgoing": 2.675272725522518 + }, + "flanks": { + "incoming": 5.333938425406814, + "outgoing": 5.333945218473673 + }, + "top": { + "incoming": 8.00922192260623, + "outgoing": 7.9921538680791855 + } + } + }, + { + "step": 20770, + "mass": 1584.1348461173475, + "delta_mass": 2.0917505025863647e-06, + "bottom_net_in": -0.01706538535654545, + "top_net_in": 0.01706807315349579, + "collision_roundoff": -5.960464477539062e-07, + "physical_residual": -5.960464477539062e-07, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6582143399864435, + "outgoing": 2.6752728316932917 + }, + "flanks": { + "incoming": 5.333938308060169, + "outgoing": 5.3339452017098665 + }, + "top": { + "incoming": 8.009221941232681, + "outgoing": 7.9921538680791855 + } + } + }, + { + "step": 20771, + "mass": 1584.134848209098, + "delta_mass": 2.680346369743347e-06, + "bottom_net_in": -0.017065519466996193, + "top_net_in": 0.017068155109882355, + "collision_roundoff": 4.470348358154297e-08, + "physical_residual": 4.470348358154297e-08, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6582143120467663, + "outgoing": 2.6752728298306465 + }, + "flanks": { + "incoming": 5.33393825776875, + "outgoing": 5.333945259451866 + }, + "top": { + "incoming": 8.0092219337821, + "outgoing": 7.992153778672218 + } + } + }, + { + "step": 20772, + "mass": 1584.1348508894444, + "delta_mass": 1.0950490832328796e-05, + "bottom_net_in": -0.017065120860934258, + "top_net_in": 0.01706836000084877, + "collision_roundoff": 7.711350917816162e-06, + "physical_residual": 7.711350917816162e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.658214434981346, + "outgoing": 2.675272721797228 + }, + "flanks": { + "incoming": 5.33393838070333, + "outgoing": 5.333945214748383 + }, + "top": { + "incoming": 8.009222108870745, + "outgoing": 7.992153748869896 + } + } + }, + { + "step": 20773, + "mass": 1584.1348618399352, + "delta_mass": 1.0035932064056396e-05, + "bottom_net_in": -0.01706465147435665, + "top_net_in": 0.01706821843981743, + "collision_roundoff": 6.468966603279114e-06, + "physical_residual": 6.468966603279114e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6582145150750875, + "outgoing": 2.6752727441489697 + }, + "flanks": { + "incoming": 5.3339387364685535, + "outgoing": 5.333945158869028 + }, + "top": { + "incoming": 8.009221967309713, + "outgoing": 7.992153748869896 + } + } + }, + { + "step": 20774, + "mass": 1584.1348718758672, + "delta_mass": 1.635029911994934e-05, + "bottom_net_in": -0.017064783722162247, + "top_net_in": 0.017068160697817802, + "collision_roundoff": 1.2973323464393616e-05, + "physical_residual": 1.2973323464393616e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6582145486027002, + "outgoing": 2.675272708758712 + }, + "flanks": { + "incoming": 5.333938712254167, + "outgoing": 5.333945335820317 + }, + "top": { + "incoming": 8.009221961721778, + "outgoing": 7.99215380102396 + } + } + }, + { + "step": 20775, + "mass": 1584.1348882261664, + "delta_mass": 7.238239049911499e-06, + "bottom_net_in": -0.017065266147255898, + "top_net_in": 0.01706811413168907, + "collision_roundoff": 4.390254616737366e-06, + "physical_residual": 4.390254616737366e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.658214535564184, + "outgoing": 2.675272883847356 + }, + "flanks": { + "incoming": 5.333938669413328, + "outgoing": 5.333945587277412 + }, + "top": { + "incoming": 8.009222030639648, + "outgoing": 7.992153916507959 + } + } + }, + { + "step": 20776, + "mass": 1584.1348954644054, + "delta_mass": 6.327405571937561e-06, + "bottom_net_in": -0.01706523261964321, + "top_net_in": 0.017068319022655487, + "collision_roundoff": 3.2410025596618652e-06, + "physical_residual": 3.2410025596618652e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6582146901637316, + "outgoing": 2.6752729639410973 + }, + "flanks": { + "incoming": 5.333938727155328, + "outgoing": 5.333945685997605 + }, + "top": { + "incoming": 8.009222108870745, + "outgoing": 7.992153789848089 + } + } + } + ], + "instrumented_matches_plain": true, + "audit_source_sha256": "3018b449a088ae6d16a3f13ea99abc9decf1bbe074d543109fc130e54171536a", + "max_relative_residual": 0.0, + "max_physical_relative_residual": 8.189532150776494e-09 + } + } + ] +} diff --git a/research/j3-coverage-2026-10-12/REVIEW.md b/research/j3-coverage-2026-10-12/REVIEW.md new file mode 100644 index 0000000..5887cf7 --- /dev/null +++ b/research/j3-coverage-2026-10-12/REVIEW.md @@ -0,0 +1,94 @@ +# J3 最小功能覆盖:运行前冻结 + +本轮唯一写入/执行者 root;仅新增独立验证脚本和本目录。257 个现有文件的 SHA256 已冻结于 baseline.json,含源码、旧测试、报告、日志、数据及真实 checkpoint;旧正例失败不改。固定已有 pycuda_3_10 解释器、当前仓库及进程 PYTHONPATH;每次科研命令核对 Python 包及 CUDA 源码来源。不安装依赖、不改生产公式、不提交推送、不访问其他项目、不联系外部评审。 + +GPU 只选空闲的 0。初查 GPU0 为 0%/9 MiB,无计算进程;GPU1 有 362 MiB Python 作业,本轮不使用。正式命令前再查。48×35×9×4×2=120960 字节双缓冲,加 flags 3360 字节、宏观缓存约 20 KiB/实例;顺序实例及小型审计模块,预算显存低于 1 GiB、CPU RSS 低于 512 MiB、输出低于 10 MiB。系统当前可用内存约 56 GiB,GPU0 总显存 16 GiB。临时编译目录使用现有编译器的独立构建和清理;不改 PyCUDA 环境。 + +## 固定顺序与判据 + +1. 从既有 end-21280.h5 恢复,SHA256 `19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588`。校验配置、运行参数及 postcollision g(t) 分布阶段。A 在未推进时另存本轮 checkpoint,再推进 16 步到 21296;关闭 A 后新建 B,从本轮 checkpoint 独立恢复并推进 16 步。逐字节比 DDF/temp/flags,比较 step_count、config/runtime;不声称拥有历史不间断参照。失败或非有限即停,不继续零/负例。 +2. 同 48×35/W16、rho1、nu.1、U0、top reservoir,A=0,固定 64 步。每步检查有限性、rho/speed/质量界;记录初始化及 64 步的质量、速度、边界和密度。zero_speed≤2e-6;零参考相对通量为 N/A;不宣称完整稳态通过,不额外做预算推进。 +3. 唯一负例 A=−.002,同原参数,固定最多 40×519=20760 主轨迹步,不提前以某个短窗口改判。每步检查有限性、rho_error≤.005、speed≤.01、mass_offset≤1e-3;每 519 步检查 mass_change≤2e-6、最近最多五采样点质量跨度≤6e-6。任一硬界越界立即停止,保留失败统计及 checkpoint。每采样记录实际质量、u/v 带符号均值、完整场 RMS 差/.002、边界、通量、镜像和非均匀流向;速度稳态不通过可继续到固定上限一次。 + +原全部 GATES 保留:velocity_change 5e-5(至少8间隔、末4间隔 u/v 同时满足)、mass_change 2e-6、mass_window_span 6e-6、mass_offset 1e-3、rho_error .005、speed .01、zero_speed 2e-6、flux_error .005、flux_span .002、boundary_error 2e-6、top_density_error 5e-7、rho_symmetry 2e-5、velocity_symmetry .002、budget_residual 2e-7,非零内部中心 v 与 A 同号且 max|u|>1e-5。未测/null 不计为通过;不改 gate、不选择偶数 lag。 + +负例如能运行到上限,在20744保存实际checkpoint,普通路径推进最后16步到20760作参照;独立审计路径加载20744状态,仅推进同一窗口16步,不产生20760之后轨迹。复用已验证 AUDIT 记录真实 incoming/outgoing/collision,覆盖slot/flanks/top;保留临时源码 SHA、逐步真实账及与普通末态 DDF/temp/flags/config/runtime/count 逐值比较。主路径20760步、重叠审计16步分别计数。硬界失败则预算标未测,不继续。 + +有限幅波动仅报告新轨迹每个519步窗口的在线时间方差 RMS、最大节点峰峰差和场差;不保留逐步全场、不追成因。短恢复/零例也逐步做安全检查。只保留聚合统计、日志和必要小checkpoint。正例只引用既有 J3/lag/offline 结果并明确窗口不同。完成后补一页功能范围/限制/下一里程碑,立即停止。 + +## 完成摘要:恢复与零例通过,负例速度稳态失败 + +本轮命令只执行一次,退出码 **1**,来自负例原稳态门槛失败;没有异常、越界或重跑。真实状态短恢复通过;零幅值短例通过。负例达到固定上限,除速度稳态外其余原验收项通过,不能将整体改判通过。正例沿用旧失败。 + +| 项目 | 实际运行与结果 | +| --- | --- | +| 真实 checkpoint 续跑 | A 从旧 end-21280 恢复并另存,推进16步;关闭A后B从本轮另存文件恢复,推进16步;均到21296 | +| 恢复比较 | 起点及终点 DDF/temp/flags 逐字节一致,step_count/config/runtime 一致;恢复检查通过 | +| 零幅值 | 初始化+64步的65个状态,最大速度严格为0;质量相对跨度/最大偏移6.70552e-8;最大rho偏差7.45058e-8 | +| 负幅值 | 普通路径20760步;独立审计仅重叠20744→20760的16步,未产生20760以后的负例轨迹 | +| 资源/保留 | CPU峰值RSS 211.20 MiB;输出约0.7 MiB;257个旧文件哈希全部保持;未修改生产或旧测试 | + +总新执行求解步数为 **20872**:正态恢复两条路径各16步、零例64步、负例普通20760步、独立重叠审计16步;其中正态仅从21280推进至21296,没有正例20760步重放。本次没有测量显存峰值,显存大小在启动前估算并确认有足够余量;不能将估算写成实测。 + +零例所有逐步数据在 results.json。边界指定速度误差0,顶密度最大误差7.45058e-8≤5e-7,质量跨度低于6e-6、偏移低于1e-3,每步质量变化低于2e-6,零速低于2e-6。相对流量误差/跨度为 null 并明确标 N/A(零参考);没有将其计作通过,也没有声称64步满足至少8间隔的完整稳态要求。零例没有单独的population预算或恢复测试。 + +### 正负实测与原门槛 + +正例数值直接引用 j3-reservoir-2026-10-12/results.json,不重新运行;下表为各自20760末态,质量跨度和速度收敛取各自原末四间隔。 + +| 量 | 原正例 +.002 | 本轮负例 −.002 | 原门槛 / 判定 | +| --- | ---: | ---: | --- | +| u场RMS变化/.002,末4 | 2.6381/2.6857/3.0247/2.9349 e-5 | 4.4394/4.3232/4.4663/4.4558 e-5 | ≤5e-5,均通过 | +| v场RMS变化/.002,末4 | 7.3296/6.9940/6.4742/6.0220 e-5 | 6.0193/6.1294/6.3192/6.4750 e-5 | ≤5e-5,均失败 | +| 初末质量相对偏移 | 1.93463e-7 | 3.08173e-7 | ≤1e-3,通过 | +| 末四间隔质量跨度 | 2.97376e-8 | 3.64015e-8 | ≤6e-6,通过 | +| 末间隔质量相对变化 | 2.17732e-8 | 6.19118e-9 | ≤2e-6,通过 | +| rho最大偏差 | 2.45519e-4 | 2.53472e-4 | ≤.005,通过 | +| 最大速度 | .00198440335 | .00198443044 | ≤.01,通过 | +| 指定边界速度最大误差 | 3.66935e-8 | 3.56677e-8 | ≤2e-6,通过 | +| 顶密度最大误差 | 2.06754e-7 | 1.97440e-7 | ≤5e-7,通过 | +| 截面质量流量相对误差 | .0010008493 | .0007190498 | ≤.005,通过 | +| 截面流量相对跨度 | .0005283367 | .0004005362 | ≤.002,通过 | +| rho镜像误差 | 4.95464e-7 | 6.22123e-7 | ≤2e-5,通过 | +| u/v镜像误差/.002 | .000202076/.000137884 | .000124795/.000216072 | 各≤.002,通过 | +| 内部非均匀流向 | 通过(旧记录) | 中心v=−.001084366,max\|u\|=.000432660 | 中心v与A同号且max\|u\|>1e-5,通过 | +| 初始化边界误差 | 通过(旧记录) | 1.78962e-8 | ≤2e-6,通过 | +| 实际population预算 | 通过(旧末态后16步) | 通过(20744→20760) | 残差/M≤2e-7且逐值一致 | + +负例每步有限,逐步观测到的全程最大rho偏差 .000602724、最大速度 .001984436、最大质量偏移8.14183e-7;40个采样间隔的最大质量变化6.43070e-7、最大滚动跨度7.00168e-7,均低于对应硬界。各采样原始值保留,没有删掉早期瞬态。 + +负例底请求体积流量−.01706689453125;20760末态距底8/16/24处实际质量流量分别−.01706145331、−.01705793291、−.01705461740。顶v范围[−.00045778788,−.00025554935],没有强制等于初始均匀猜测。全域有符号速度均值u=1.29822e-9、v=−.000355422879;末519步有符号空间平均变化分别−1.11917e-10、−5.99107e-9。各y宏观质量/体积流量、顶底所有节点宏观量及每次采样的镜像/流向均保存。 + +有限幅波动:负例最后 **20242–20760的519帧** 在线时间方差RMS为u=5.06547e-8、v=6.80326e-8;最大节点峰峰差为4.35901e-7、8.38259e-7。旧正例离线窗口为 **20760–21280的521帧**,RMS为3.36455e-8、7.37527e-8(引用旧文件)。时间窗口不同,不能宣称正负同窗口等价;不继续分析成因。 + +### 重叠16步实际账 + +临时审计 one_step_double.cu SHA256:`d6532c48ea0bf972bce6ec3809989e9f2ec52eb1440d58f8945eb59d67dcf1b5`。审计与普通末态DDF/temp/flags逐字节相同,配置/运行参数/步数相同。每步 ΔM−实际边界净交换−实际碰撞舍入残差为0,最大相对残差0≤2e-7;未扣舍入的最大相对残差7.51761e-9。 + +| 16步平均实际量 | incoming | outgoing | 净进入 | +| --- | ---: | ---: | ---: | +| 底slot | 2.65799031034 | 2.67504728318 | −.01705697284 | +| 底flanks | 5.33348024054 | 5.33348734328 | −7.10273e-6 | +| 全顶部 | 8.00853079371 | 7.99147556582 | +.01705522789 | + +全边界平均净进入−8.84768e-6,碰撞舍入+8.26980e-6,实际ΔM=−5.77886e-7。预算闭合不代表速度稳态通过,也不等同于宏观截面流量。逐步原始账在results.json。 + +## 可复核清单与后续边界 + +唯一新增代码:tests/validation/run_j3_coverage.py;复用旧make_sim/observables/AUDIT及原GATES,未改旧脚本。新脚本SHA256 `329869519b7078e854d96241a7aad8ef93f35ac9be83f0be502c3a93523c3b13`。运行前同一解释器做语法、静止平衡分布宏观量/零参考N/A及状态步数比较的主机检查,均通过,没有初始化CUDA;没有跑无关矩阵。 + +实际GPU命令(工作目录为 /home/frank14f/CelerisLab): + +```bash +env CUDA_VISIBLE_DEVICES=0 PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python tests/validation/run_j3_coverage.py > research/j3-coverage-2026-10-12/gpu-validation.log 2>&1 +``` + +脚本在创建CUDA上下文前复核GPU0无计算进程、显存小于100 MiB且利用率为0;记录包与kernel实际来源,并核对全部基线哈希。入口拒绝覆盖已有results.json,不能无意重跑。必要checkpoint四个均持久保存,本轮checkpoint路径、SHA及步数在results.json;原始日志、基线清单、独立新增脚本补丁保留,编译目录由现有编译器清理。 + +**当前功能范围:** 在D2Q9/SRT/FP32/unshifted/double-buffer、无物体/力/LES、固定小网格上,有限平壁slot与顶部reservoir支持正向喷入、负向抽吸和短时零驱动;真实保存/加载后的短续跑一致。正负质量、边界、宏观流量、镜像及population账在上述窗口内通过。 + +**尚不能保证:** 正负完整速度稳态均失败;未验证长期精度、网格收敛/精度阶、性能、多种碰撞/streaming组合、动态喷口、物体交互、曲面或AMR;零例仅64步,恢复一致只覆盖此次固定配置。量级小不构成精度保证。 + +**下一真正功能里程碑建议:** 整理一个精简、可外部调用的平壁Jet案例入口,复用现有Simulation及参数,提供正/零/负幅值、喷口宽度和持久恢复用法,明确边界含义并如实显示未收敛状态;不要为此新增求解器抽象或启动AMR重构。这只是建议,本轮不实施。 + +本轮完成并停止复审,不追加求解或波动诊断。 diff --git a/research/j3-coverage-2026-10-12/baseline-status.txt b/research/j3-coverage-2026-10-12/baseline-status.txt new file mode 100644 index 0000000..78e8835 --- /dev/null +++ b/research/j3-coverage-2026-10-12/baseline-status.txt @@ -0,0 +1,73 @@ + M pyproject.toml + M setup.py + M src/CelerisLab/__init__.py + M src/CelerisLab/body/__init__.py + M src/CelerisLab/body/ddf_patch.py + M src/CelerisLab/body/manager.py + M src/CelerisLab/body/preprocess/flag_overlay.py + M src/CelerisLab/common/__init__.py + M src/CelerisLab/common/checkpoint.py + M src/CelerisLab/config.py + M src/CelerisLab/configs/CONFIG.md + M src/CelerisLab/cuda/__init__.py + M src/CelerisLab/cuda/compiler_v2.py + M src/CelerisLab/cuda/context.py + M src/CelerisLab/lbm/__init__.py + M src/CelerisLab/lbm/curved_links.py + M src/CelerisLab/lbm/field.py + M src/CelerisLab/lbm/initializers.py + M src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh + M src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh + M src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh + M src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh + M src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh + M src/CelerisLab/lbm/kernels/config/config_grid.h + M src/CelerisLab/lbm/kernels/config/config_method.h + M src/CelerisLab/lbm/kernels/config/config_objects.h + M src/CelerisLab/lbm/kernels/config/config_physics.h + M src/CelerisLab/lbm/kernels/kernel_v2.cu + M src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh + M src/CelerisLab/lbm/kernels/operators/collision_trt.cuh + M src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh + M src/CelerisLab/lbm/kernels/step/aux_kernels.cu + M src/CelerisLab/lbm/kernels/step/esopull_sync.cu + M src/CelerisLab/lbm/kernels/step/init_flow.cu + M src/CelerisLab/lbm/kernels/step/one_step_double.cu + M src/CelerisLab/lbm/kernels/step/one_step_esopull.cu + M src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh + M src/CelerisLab/lbm/stepper.py + M src/CelerisLab/simulation.py + M tests/integration/test_body_sync_e2e.py + M tests/integration/test_ddf_patch.py + M tests/integration/test_sync_bodies_skeleton.py + M tests/integration/test_unified_obs.py + M tests/postproc/experiment.ipynb + M tests/validation/run_kan99b_rotating_cylinder.py + M tests/validation/run_sah04_st_matrix.py + M tests/validation/test_sensor_accuracy.py +?? docs/design/ +?? docs/multilevel_grid_architecture_analysis.md +?? research/ +?? src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh +?? "tests/audit/body\345\210\240\345\207\217\345\212\237\350\203\275.md" +?? tests/integration/_cases.py +?? tests/integration/test_numerical_gpu.py +?? tests/integration/test_runtime_contracts_gpu.py +?? tests/integration/test_state_gpu.py +?? tests/unit/cpp/ +?? tests/unit/test_build_contracts.py +?? tests/unit/test_context_ownership.py +?? tests/unit/test_initializers.py +?? tests/unit/test_numerical_operators.py +?? tests/unit/test_planar_velocity.py +?? tests/unit/test_reservoir.py +?? tests/unit/test_simulation_lifecycle.py +?? tests/unit/test_slot_velocity.py +?? tests/unit/test_state_regressions.py +?? tests/validation/analyze_j3_saved_frames.py +?? tests/validation/diagnose_j3_lags.py +?? tests/validation/multigrid/ +?? tests/validation/run_j1.py +?? tests/validation/run_j2_slot.py +?? tests/validation/run_j3_reservoir.py +?? tests/validation/run_poiseuille.py diff --git a/research/j3-coverage-2026-10-12/baseline.json b/research/j3-coverage-2026-10-12/baseline.json new file mode 100644 index 0000000..0959725 --- /dev/null +++ b/research/j3-coverage-2026-10-12/baseline.json @@ -0,0 +1,265 @@ +{ + "head": "6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0", + "python": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "package": "/home/frank14f/CelerisLab/src/CelerisLab/__init__.py", + "cuda_source": "/home/frank14f/CelerisLab/src/CelerisLab/lbm/kernels/kernel_v2.cu", + "hashes": { + ".cursor/rules/cuda-style.mdc": "5810cf8cff793a11ba5dedafaa8a4e7d7d3debb728d837ca1903ff6dc8d6fdb9", + ".cursor/rules/project-layout.mdc": "aeed1cd9d48447bcfcfb6a77250af7c5a3d500de4c6b2591c5684696fa04c3ec", + ".cursor/rules/python-style.mdc": "ece75cb724d7dc46cb8dab7ecf8d710a90b503001da0d506ea4bf772ce395e21", + ".cursorignore": "9f072faa815a6c6d4dc791a424201404f0f623338681ae3d2fcbdf86db1bd035", + ".gitignore": "de25151f4cfdf29ca64032e509398e1829c7ded2449ccff803b2fd87d859ae6c", + "LICENSE": "e98392425e9a0007d0d69f0f7c912c2dc1b59061a6197223962aac45599c76ea", + "README.md": "982d0df8b766b1d5017ba702b75e8b3cec8d22f57af8f434be27ea251652596c", + "docs/audit/audit_round2.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "docs/audit/body_refactor_notes.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "docs/audit/config_diagnosis.md": "b601652df0cac36a8faf2b317b11853221353716a25184cd9b2dc41373a7f183", + "docs/audit/kernel_layer_audit.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "docs/design/README.md": "98242c6960866d9b75aaf363f703edf02c4210bc38da1a340e9f6add49c6a3ce", + "docs/design/integrated_architecture.md": "c26b0d301321fe4b86d83d11c7e0b8d0c0545ee2995afa563966f004e9788132", + "docs/design/multi_level_grid_architecture.md": "e56a67d9129f2e3c311342e21a3fb2ed14bd492dd881949b251d5d9ac577bdee", + "docs/design/multi_level_summary.md": "eebf23e0bec9b154e5ce2128e2806e7558a7d4824b2c700cfd16afd1158b2354", + "docs/design/multi_level_visual_reference.md": "cad4bfbd561e5650ec297334529334b662a1ed35f7373c61f34ee22ecf1f66bd", + "docs/design/spatial_coupling_refinement.md": "36c878c7afad524999d89fa842297a98a0433e0283e78b36ca734ddbf8723ed8", + "docs/multilevel_grid_architecture_analysis.md": "90309730b1759d63531cb258c30db990ab71ca1b56ae47d0bbe2f4e2ae52012c", + "docs/performance_analysis.md": "ba01aaa4d3c02b61a8dc55fd00518ac291ebbed79b6574190d6b7234a1158fcb", + "docs/tests_overview.md": "ffc9591fd7baa4261b2c1ce9cfa7aa13a3554a8d5df712035806266a5eaade3f", + "docs/validation_specs/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "docs/validation_specs/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "docs/validation_specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "docs/validation_specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "docs/validation_specs/exp_ctrl_matrix.md": "b7250576c23292988b6ef4bcfd080f611d41edc413c3cebd0eadcc8596049470", + "docs/validation_specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "output/round3_compatibility_summary.md": "319f2e6abde4b34cc4ec90ef461d8ebb85dd5a3ac1736cfa7a3fb110f2a69df9", + "pyproject.toml": "f24ab9ad3a6a728a9382b1bce2e721612fc76635f35c6f96dfddaa853b6e5a9c", + "research/audit-2026-10-09/REVIEW.zh-CN.md": "2841fd3aa7a6baedbe1079d90915c8b05212b133824ed6abccaa1f09656eaefe", + "research/audit-2026-10-09/architecture-cpu-results.json": "e1b809210005c8765b13fddbb5ed710d15f6fcbb4c5788a4064f3e88808433ef", + "research/audit-2026-10-09/architecture-report.md": "861079dc3f4ced9fdc41bfb22002d32e190c0d630d3ba2f138f9dc7a949b8371", + "research/audit-2026-10-09/numerical-report.md": "970330b3a593f79f09866ce6ae82bc0ddd81226230d0a6ff06ae8ae756ee80da", + "research/audit-2026-10-09/numerical_collision_results.json": "51e5c263bb8cde82cedef2ccfdbf5ef657742a80218d7896b1ff877516e59693", + "research/audit-2026-10-09/numerical_compile_results.json": "c3b0ae02072a2ec408ada7513b542ec255f6855cb743a3ed7f91bd8f31504f44", + "research/audit-2026-10-09/numerical_semantics_results.json": "b95b065b594aa2911740dab216f87936c9bf7f7fa25acfda93b5738443564035", + "research/audit-2026-10-09/root-initializers-report.md": "ca448457c444949d5d0e1e10fa7121064510b77fc4c3512580900f0299219867", + "research/audit-2026-10-09/state-report.md": "f8708807efc2e109810c5955f7c1884a932668c0b3cb2963c2df3b09f2a3d5c4", + "research/audit-2026-10-09/state_results.json": "da9170df3e11231c73f20e5e79ed68e08966673d1dd52004ea6b6a279afc0dcd", + "research/design-2026-10-09/Contracts.lean": "2442d9a778ef20e8af3fecf23be6fea6d73c6299ff744c9664b652bc5ee3f034", + "research/design-2026-10-09/PLAN.zh-CN.md": "0341dd7ee306a040340c8e5dedb07a109e931c27dbf3c994d072aa78e3b6bc67", + "research/design-2026-10-09/api-architecture-study.md": "d6fb45ec784f0e1db55fb9f34e137b9f551db0b9b39fd4f0ef247a78fc34eedf", + "research/design-2026-10-09/grid-study.md": "4435dc1275ec5e15b118becc6ac391f306195d1e5beaa58037b1aff3bb2465c7", + "research/design-2026-10-09/jet-study.md": "a362142ef04a5ad5dbb4c9db9d221b1199dccec53780c8f2da49a15201cfe529", + "research/design-2026-10-09/jet_closure_check.py": "fde45d0f8518740ef5c0bf0fe7635d6adaf9a2e789927dd4e68e991c138ddc30", + "research/design-2026-10-09/jet_closure_results.json": "12cf7d400a206f9f9ec9ea6ad251fe6bb0232e27bcbed22fbc1ead2c0fc7d249", + "research/design-2026-10-09/math-and-history.md": "64f8c82e4949d6f58b46faa09800958714859c36cad20bbeeae8b449ae7a6099", + "research/design-2026-10-09/math-checks.json": "94750381954317cde8d649db26beaed8ea945666572a05030ca2b4d97d384011", + "research/design-2026-10-09/math_checks.py": "4254983a783fe4bad8888b3d7c243c87d991c7bbf242edb0f56f25cbaefee890", + "research/j1-2026-10-12/REVIEW.md": "13004a4f140acdcf59acb57e9e2dda1bb95763d30060f822a7c206c94b813a9f", + "research/j1-2026-10-12/baseline-status.txt": "ac398360e05b746b89ae0c3acfe202b5122e650a3bb1ff234ab26f874a303e64", + "research/j1-2026-10-12/baseline.json": "ad7afdf7b3913d11c07343e971fe2f43c2d1a2b99e3d5904a6ba89e3bb0b24fb", + "research/j1-2026-10-12/checkpoint-gpu.log": "adfe3d77d2e6c6f6184dccc0267b4404b20a7709505d5ff5affed0ed4a618083", + "research/j1-2026-10-12/cpu.log": "60cac097f7c4f11401df2aacb43a248640555e7628d2829c4680c71db34e9640", + "research/j1-2026-10-12/gpu-validation.log": "d1e9f2aea17a85eddcd94b81c700738ce073214857b55c28abd1219ff1edbed7", + "research/j1-2026-10-12/gpu.log": "8659a78ea52bbf8eb923d46ea71636ce63cd322352d5c98a74f631e666dd8cfb", + "research/j1-2026-10-12/incremental.diff": "a454c23da7b0011645949c0fbf64d0c41ecfdab5642b1b7c5119868005d3c721", + "research/j1-2026-10-12/results.json": "449f8a17dacac0fc6d2489c4b10bac330dbbbdb38fad3ce54f739ac8c6d48e85", + "research/j2-slot-2026-10-12/REVIEW.md": "10c4a94ffc32e0a2c4e0f6593b7cfc28479b5869f279f0b9d0b708fa3a47d1e6", + "research/j2-slot-2026-10-12/baseline-status.txt": "812616e2d941efcf854e1b37d6e662dda1aaf2b69074fcc04017133e13b72166", + "research/j2-slot-2026-10-12/baseline.json": "e82a1844145fd0cbc585c581b29f80b56193f122cfe1dfa7578f26904a720285", + "research/j2-slot-2026-10-12/cli.log": "9482ad7101d501f27f92e204b2f3ae5c6d91bd887b525aa31cb4a2a188f3cb92", + "research/j2-slot-2026-10-12/cpu.log": "91aba5961006909fbbb860429a9d3cfc930112a0d74c7788bc51c0a5897b47e5", + "research/j2-slot-2026-10-12/gpu-serialization-failure.log": "df804e53b35e7ddaad79a17842b4b5fd9d834e29ca2d56edb00e835848d09200", + "research/j2-slot-2026-10-12/gpu-validation.log": "223351b52c70fa4523289f3a1b3db435a11286379253280470900ffe397580a6", + "research/j2-slot-2026-10-12/incremental.diff": "c9e391bc91438cd912c1ed5a419705d4388522f672c67a066cfc055e814e699f", + "research/j2-slot-2026-10-12/results.json": "7d35ca7989aed5380e0a45de7f583972566fc516a051da63c53b35514e267494", + "research/j3-lag-2026-10-12/REVIEW.md": "f388b64b0cc0413dc9865afda90ed24de666dda0d6cdb821b4363ce1b73631b3", + "research/j3-lag-2026-10-12/baseline-status.txt": "e0b69879084f54afac1a3bc3701f1de9819068190c815ae84421f02f83cad9f7", + "research/j3-lag-2026-10-12/baseline.json": "5e9a920813fe3d775110af85af92970d5245a7040ace804445e432353b77e489", + "research/j3-lag-2026-10-12/end-21280.h5": "19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588", + "research/j3-lag-2026-10-12/gpu-availability.log": "b227a519b8286849cfdf842573bd451803da048c6b27af9517f6b8964cd3aa39", + "research/j3-lag-2026-10-12/gpu-diagnostic.log": "97956b517072b7c34e2e29e2a23f87eafb19b9eda786a4b8149e4a2eaed76ee9", + "research/j3-lag-2026-10-12/host-check.log": "b2b6d262934b3abf9e0f0bdbde14b339cb977f7bffe391c17b51b5d067862dda", + "research/j3-lag-2026-10-12/incremental.diff": "ebdf66c72daf17b926482f79a1a30bf0eb2d27fc930a7bb62e5449ebcf72fcc7", + "research/j3-lag-2026-10-12/results.json": "00435ac7e402943e55e702fac1beb5af8cafe71967999658bcde2b29077b1fa8", + "research/j3-lag-2026-10-12/start-20760.h5": "6c4cba5928c77566c2afc32231311a3986831c18fea766faadebb101243399e2", + "research/j3-lag-2026-10-12/trajectory.h5": "2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986", + "research/j3-offline-2026-10-12/REVIEW.md": "d9902c58498e73c29e054b23adb968f7e1e14421cba5c58d03bbc5a50159ae79", + "research/j3-offline-2026-10-12/cpu-analysis.log": "bc02a9b197fc15ae1b503ca54655a7622d4361f9b45b7848ff9c387ea3665f11", + "research/j3-offline-2026-10-12/lags.csv": "fbd9addd413f24c47f4411317e872265bb774e8e1724fe169412befa860ae94d", + "research/j3-offline-2026-10-12/localization.png": "a72907638e32b0ecfc2205bea438e7b408f40aad86217ce6ad9b4877840c9cfc", + "research/j3-offline-2026-10-12/regions.csv": "3a8fc640b61d70e3b7f73d2bf8ac2bd3f720adf39a90dfda6180430e0489efae", + "research/j3-offline-2026-10-12/results.json": "cdb857bea6f4e06ed15acf773505ce6d5147f8cb8ce0a53cc368ee267cde6361", + "research/j3-reservoir-2026-10-12/REVIEW.md": "1ea5f860728584ea6cbe40ba3994e40471102d8e2cf6d93e28fe47222cba0cab", + "research/j3-reservoir-2026-10-12/baseline-status.txt": "0ef1a8c9878c4053ebc1a7d4bace6d4ec38bf27ace167b4239ddbb1c6c897e20", + "research/j3-reservoir-2026-10-12/baseline.json": "847fefd1eae971985d34d04d89ee6d6f1c91f6940c54fe351d112faba7bc6838", + "research/j3-reservoir-2026-10-12/cpu.log": "b33f6c1a1b0ee67968c4cff85d491e46e30e0d6c796b552629714ab8b5dcead0", + "research/j3-reservoir-2026-10-12/gpu-availability-sandbox.log": "1d58470512e583a0acfabf6896ee5f31e5b493b8231aed54b864f64eb275b02c", + "research/j3-reservoir-2026-10-12/gpu-validation.log": "ff04024db197e332f37c912a96413e3251fd0186947348ffbc33af6f4a899f2c", + "research/j3-reservoir-2026-10-12/incremental.diff": "fae312831d71e46dd477a640b06ed927853a9e735d26bf9f5868927fa31cfa56", + "research/j3-reservoir-2026-10-12/results.json": "49685de7679a14860258abf1753aaa6d116ad709b868d907ddb40e74c9b845ea", + "research/repair-2026-10-10/TRON_HANDOFF.md": "f8aaa3d99cd133c2055d4adf396a0a57d14f6006aea19e87611bd1c2c1b53a88", + "research/repair-2026-10-10/baseline-hashes.json": "d6a7d5f9ec5bceb0e7927d55603d9c5e70105982cd945723454659b19ab476e6", + "research/repair-2026-10-10/baseline-status.txt": "074088d793014e3b8154c58718058c7d300fb45595f5129fa957ef1e4cec38e2", + "research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff": "292b4bafe7a62d4fbbf7c165eb99929336edfcaa16b15f34f72ab71fcd928391", + "research/repair-2026-10-10/classic-results.json": "a5d15305f516fd378b54cf9029102be58a83a55a7bad4b8e058fcfe0cc9898f4", + "research/repair-2026-10-10/classic-signals.npz": "820c9a0b0713d7455f0a5839ac2cd5ee706086d1a26461225dcdb095673421e2", + "research/repair-2026-10-10/final-gpu.log": "988bb97256d17b88c14f3793b15880d727ecb285abe62e7d2ae27a16729651c3", + "research/repair-2026-10-10/final-unit.log": "a892a39ecf88125558538cadce2cb5dc46d106b993b164e03da4ebb0eee68cef", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "research/repair-2026-10-10/provenance.json": "a81b7e32ecf7182c9617df1b39bbb063a05ef89290ad501bac4573cd5e8a6832", + "research/repair-2026-10-10/repair-architecture.md": "49be42ff5c994017f3175e17efda14d84f0b68f8ecd239f66ccee38415b60c5a", + "research/repair-2026-10-10/repair-numerical.md": "0272ebfa8c519aad161c520542cf53156574661609b91fd5ccad7955fdf2bd7b", + "research/repair-2026-10-10/repair-state.md": "4d4aa1ec0c11a87d2c8380912e7ed74cf5c910ae42e5cc529effde36c9020969", + "research/repair-2026-10-10/simplification-checks.log": "c9f15e870d02003480adf1a7f2fe4a9aca66c1934c4477619f05c8a4798ba85b", + "setup.py": "bf07df7ec19de56710d2bb5f61873e09710cd059d46837dc3aa54f3e09ff9e06", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/checkpoint.py": "5b7caf3896167a3f37c539b58837de6eb3f8085fa7bf5f821a09666cc16d43a4", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/config.py": "2f1bba7515f5bc08cb3a8d140bcafe7fa0689e01b3b06494697bb2956a71530e", + "src/CelerisLab/configs/CONFIG.md": "41cafdbe525366c08aa9d0416ea026ccf0026ba7123b8a9b65f968a80d928e3a", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/cuda/compiler_v2.py": "c4cc3ec4445c8d75e6a253dd87963877117a722bc73b9d4811806fc6045d08c1", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "f9f8242b38e8e0cf8425b75e2b0215bc15363c62eaa0fb43c761b8e0931bfdc9", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/simulation.py": "34d69e71844f553790c5a2bed0f8fbfb912a9498e95b500d1ef2ad41cae3b424", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/unit/cpp/reservoir.cpp": "c3eacaf0271400eb45ad559b571a8f7faa2a809d5f1857ffeb5592addce2cd0c", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/cpp/slot_profile.cpp": "31ac58ccab175bf79fa59fc46d4c0842df18ab0a5e5916be84760d9da2b75788", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_planar_velocity.py": "b656da0880b4234b1db805544edbe0d2473cbcc7c2c869c71d8251337f62a982", + "tests/unit/test_reservoir.py": "e718c78a53c3941aba7feb8ae4e8bb0b1726c1145de84febf91220c1917991c9", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_slot_velocity.py": "6a9494de9a32c350389ccbed58af48951f6b25a21a258537d2e8b73eb67cb11d", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/validation/analyze_j3_saved_frames.py": "438f67dac682b94c4950626f8de4fdcde48c3a4e9ecf8fdf1b0ada4b6e0e781a", + "tests/validation/diagnose_j3_lags.py": "286fcd65b3261667a847b9b26e213d0af92cf459faa6bbd774f78c8479ce31d7", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/run_j1.py": "51b758a271ff358f931b3140a80082294a67e66c2fec0f8c19319e37f92aadc4", + "tests/validation/run_j2_slot.py": "b7d2d3aa06fcafc3ac62ed4a50892afbdb7f86e5720ce75a39ce317b6f571dad", + "tests/validation/run_j3_reservoir.py": "47535bc3569ce68c888d38978bc4f9077fd763a17829c20c081be52bb18a2903", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9" + } +} diff --git a/research/j3-coverage-2026-10-12/incremental.diff b/research/j3-coverage-2026-10-12/incremental.diff new file mode 100644 index 0000000..f0d502d --- /dev/null +++ b/research/j3-coverage-2026-10-12/incremental.diff @@ -0,0 +1,348 @@ +diff --git a/tests/validation/run_j3_coverage.py b/tests/validation/run_j3_coverage.py +new file mode 100644 +index 0000000..d66c299 +--- /dev/null ++++ b/tests/validation/run_j3_coverage.py +@@ -0,0 +1,342 @@ ++"""One bounded J3 restart/zero/negative run; frozen plan in research/j3-coverage-2026-10-12.""" ++from dataclasses import asdict ++import hashlib ++import json ++import os ++from pathlib import Path ++import resource ++import subprocess ++import sys ++import traceback ++ ++import h5py ++import numpy as np ++import pycuda.driver as cuda ++import CelerisLab ++from CelerisLab.cuda import compiler_v2 as compiler ++from run_j1 import ROOT, AUDIT, make_sim, populations, observables ++from run_j2_slot import GATES, targets ++ ++OUT = ROOT/'research/j3-coverage-2026-10-12' ++SOURCE = ROOT/'research/j3-lag-2026-10-12/end-21280.h5' ++SOURCE_SHA = '19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588' ++SCALE, CHUNK, LIMIT = .002, 519, 20760 ++ ++ ++def sha(path): ++ digest = hashlib.sha256() ++ with Path(path).open('rb') as stream: ++ for chunk in iter(lambda: stream.read(1024*1024), b''): ++ digest.update(chunk) ++ return digest.hexdigest() ++ ++ ++def create(amplitude): ++ return make_sim(amplitude, nx=48, top_u=0., slot_width=16, top_mode='reservoir') ++ ++ ++def state(sim): ++ arrays = dict(ddf=np.empty(sim.field.n*9, dtype=np.float32), ++ temp=np.empty(sim.field.n*9, dtype=np.float32), ++ flag=np.empty(sim.field.n, dtype=np.uint16)) ++ with sim.ctx.activate(): ++ for name, array in arrays.items(): ++ cuda.memcpy_dtoh(array, getattr(sim.field, name+'_gpu')) ++ return dict(arrays=arrays, step=sim.stepper.step_count, ++ config=asdict(sim.lbm_cfg), runtime=sim.field._runtime_params.copy()) ++ ++ ++def compare(a, b): ++ checks = {name: a['arrays'][name].tobytes() == b['arrays'][name].tobytes() ++ for name in a['arrays']} ++ checks.update({name: a[name] == b[name] for name in ('step', 'config', 'runtime')}) ++ return checks ++ ++ ++def persist(sim, name): ++ path = OUT/name ++ assert not path.exists(), path ++ sim.save_checkpoint(str(path)) ++ return dict(path=str(path), sha256=sha(path), step=sim.stepper.step_count) ++ ++ ++def measure(f, amplitude, initial_mass, previous=None): ++ rho, u, v = observables(f) ++ bottom, top, _ = targets(amplitude) ++ mass = float(rho.sum()) ++ flux = (rho*v).sum(axis=1) ++ reference = float(rho.mean()*bottom.sum()) ++ row = dict(mass=mass, mass_offset=abs(mass-initial_mass)/initial_mass, ++ rho_range=[float(rho.min()), float(rho.max())], rho_error=float(np.abs(rho-1).max()), ++ max_speed=float(np.hypot(u, v).max()), u_mean=float(u.mean()), v_mean=float(v.mean()), ++ boundary_error=float(max(np.abs(v[0]-bottom).max(), np.abs(u[[0, -1]]).max())), ++ top_density_error=float(np.abs(rho[-1]-1).max()), ++ top_velocity_range=[float(v[-1].min()), float(v[-1].max())], ++ mass_flux_by_y=flux.tolist(), volume_flux_by_y=v.sum(axis=1).tolist(), ++ flux_error=float(np.max(np.abs(flux[[8, 16, 24]]-reference))/abs(reference)) if amplitude else None, ++ flux_span=float(np.ptp(flux[[8, 16, 24]])/abs(reference)) if amplitude else None, ++ symmetry=dict(rho=float(np.max(np.abs(rho-rho[:, ::-1]))), ++ u=float(np.max(np.abs(u+u[:, ::-1]))/SCALE), ++ v=float(np.max(np.abs(v-v[:, ::-1]))/SCALE)), ++ center_v=float(v[8, 24]), max_abs_u=float(np.abs(u).max()), ++ nonuniform=bool(v[8, 24]*amplitude > 0 and np.abs(u).max() > 1e-5) if amplitude else None, ++ finite=bool(np.isfinite(f).all() and np.isfinite(rho).all() and ++ np.isfinite(u).all() and np.isfinite(v).all())) ++ if previous is not None: ++ row.update(u_change=float(np.sqrt(np.mean((u-previous[0])**2))/SCALE), ++ v_change=float(np.sqrt(np.mean((v-previous[1])**2))/SCALE), ++ u_signed_change=float((u-previous[0]).mean()), ++ v_signed_change=float((v-previous[1]).mean())) ++ return row, (rho, u, v) ++ ++ ++def check_step(sim, mass0, extrema): ++ f = populations(sim) ++ rho, u, v = observables(f) ++ values = dict(rho_error=float(np.abs(rho-1).max()), speed=float(np.hypot(u, v).max()), ++ mass_offset=abs(float(rho.sum())-mass0)/mass0) ++ finite = bool(np.isfinite(f).all() and all(np.isfinite(a).all() for a in (rho, u, v))) ++ for key, value in values.items(): ++ extrema[key] = max(extrema.get(key, 0.), value) ++ if not finite or any(value > GATES[key] for key, value in values.items()): ++ raise RuntimeError(f'Hard stop at step {sim.stepper.step_count}: finite={finite}, {values}') ++ return f, (rho, u, v) ++ ++ ++def restart(report, save): ++ with h5py.File(SOURCE, 'r') as hf: ++ assert int(hf.attrs['step_count']) == 21280 ++ assert str(hf.attrs['distribution_phase']).startswith('postcollision g(t)') ++ config, runtime = json.loads(hf.attrs['config_json']), json.loads(hf.attrs['runtime_params_json']) ++ saved = {name: hf[name][:] for name in ('ddf', 'temp', 'flag')} ++ row = report['restart'] = dict(status='running', source=str(SOURCE), source_sha256=sha(SOURCE), ++ start=21280, end=21296, a_steps=0, b_steps=0, extrema={}) ++ for label in ('a', 'b'): ++ with create(.002) as sim: ++ sim.load_checkpoint(str(SOURCE if label == 'a' else OUT/'restart-21280.h5')) ++ before = state(sim) ++ assert before['config'] == config and before['runtime'] == runtime ++ checks = compare(dict(arrays=saved, step=21280, config=config, runtime=runtime), before) ++ row[label+'_initial_equal'] = checks ++ assert all(checks.values()), checks ++ mass0 = float(observables(populations(sim))[0].sum()) ++ check_step(sim, mass0, row['extrema']) ++ if label == 'a': ++ row['checkpoint'] = persist(sim, 'restart-21280.h5') ++ for _ in range(16): ++ sim.run(1) ++ row[label+'_steps'] += 1 ++ check_step(sim, mass0, row['extrema']) ++ if label == 'a': ++ expected = state(sim) ++ row['reference_end'] = persist(sim, 'restart-reference-21296.h5') ++ else: ++ row['continued_equal'] = compare(expected, state(sim)) ++ row['status'] = 'passed' if all(row['continued_equal'].values()) else 'failed' ++ save() ++ assert row['status'] == 'passed', row['continued_equal'] ++ print('RESTART', json.dumps(row), flush=True) ++ ++ ++def zero(report, save): ++ row = report['zero'] = dict(status='running', steps=0, history=[], extrema={}, ++ steady='not_tested_short_case', flux_relative='not_applicable_zero_reference') ++ with create(0.) as sim: ++ sim.initialize() ++ mass0 = float(observables(populations(sim))[0].sum()) ++ for step in range(65): ++ if step: ++ sim.run(1) ++ row['steps'] = step ++ f, fields = check_step(sim, mass0, row['extrema']) ++ sample, _ = measure(f, 0., mass0) ++ sample['step'] = step ++ row['history'].append(sample) ++ if sample['max_speed'] > GATES['zero_speed']: ++ raise RuntimeError(f'Zero speed exceeds gate at {step}') ++ if np.ptp([s['mass'] for s in row['history']])/mass0 > GATES['mass_window_span']: ++ raise RuntimeError(f'Zero mass span exceeds gate at {step}') ++ if step and abs(sample['mass']-row['history'][-2]['mass'])/mass0 > GATES['mass_change']: ++ raise RuntimeError(f'Zero mass change exceeds gate at {step}') ++ row['mass_span'] = float(np.ptp([s['mass'] for s in row['history']])/mass0) ++ row['checks'] = dict(zero_speed=row['extrema']['speed'] <= GATES['zero_speed'], ++ mass_offset=row['extrema']['mass_offset'] <= GATES['mass_offset'], ++ mass_span=row['mass_span'] <= GATES['mass_window_span'], ++ mass_change=max(abs(s['mass']-p['mass'])/mass0 for p,s in zip(row['history'],row['history'][1:])) <= GATES['mass_change'], ++ boundary=max(s['boundary_error'] for s in row['history']) <= GATES['boundary_error'], ++ top_density=max(s['top_density_error'] for s in row['history']) <= 5e-7, ++ finite=all(s['finite'] for s in row['history'])) ++ row['status'] = 'passed' if all(row['checks'].values()) else 'failed' ++ save() ++ assert row['status'] == 'passed', row['checks'] ++ print('ZERO', json.dumps({k:v for k,v in row.items() if k != 'history'}), flush=True) ++ ++ ++def audit(reference, mass0, report): ++ result = dict(status='running', start=LIMIT-16, end=LIMIT, plain_steps=16, audit_steps=0, steps=[]) ++ report['negative']['population_budget'] = result ++ with create(-.002) as sim: ++ sim.load_checkpoint(str(OUT/'negative-budget-20744.h5')) ++ build = compiler.generate_config(sim.lbm_cfg) ++ original = sim.stepper.step_fn ++ try: ++ source = Path(build)/'step/one_step_double.cu' ++ code = source.read_text() ++ call, marker = 'collide_dispatch(f, rho_n, ux, uy);', '__global__ __launch_bounds__(NT, 2)' ++ assert code.count(call) == code.count(marker) == 1 ++ source.write_text(code.replace(call, 'j1_collide_audit(f, rho_n, ux, uy);').replace(marker, AUDIT+'\n'+marker)) ++ result['audit_source_sha256'] = sha(source) ++ ptx = compiler.compile_kernel(build_dir=build) ++ with sim.ctx.activate(): ++ module = compiler.load_module(ptx) ++ ptr, size = module.get_global('d_params') ++ cuda.memcpy_dtod(ptr, sim.field.module.get_global('d_params')[0], size) ++ iptr, _ = module.get_global('j1_incoming') ++ cptr, size = module.get_global('j1_collision') ++ cuda.memset_d8(cptr, 0, size) ++ incoming, collision = np.empty((2,48)), np.empty((35,48)) ++ sim.stepper.step_fn = module.get_function('OneStep') ++ slot = targets(-.002)[2] ++ for _ in range(16): ++ before = populations(sim) ++ outgoing = np.stack((before[[4,6,7],1].sum(axis=0), before[[3,5,8],-2].sum(axis=0))) ++ mass = float(before[:,1:-1].sum()) ++ sim.run(1) ++ result['audit_steps'] += 1 ++ after, _ = check_step(sim, mass0, report['negative']['extrema']) ++ cuda.memcpy_dtoh(incoming, iptr) ++ cuda.memcpy_dtoh(collision, cptr) ++ delta = float(after[:,1:-1].sum()-mass) ++ net = float(incoming.sum()-outgoing.sum()) ++ rounding = float(collision.sum()) ++ entry = dict(step=sim.stepper.step_count, mass=mass, delta_mass=delta, ++ net_boundary=net, collision_roundoff=rounding, ++ physical_residual=delta-net, budget_residual=delta-net-rounding, ++ exchange={name:dict(incoming=float(i.sum()), outgoing=float(o.sum())) ++ for name,i,o in [('slot',incoming[0,slot],outgoing[0,slot]), ++ ('flanks',incoming[0,~slot],outgoing[0,~slot]), ++ ('top',incoming[1],outgoing[1])]}) ++ result['steps'].append(entry) ++ if abs(entry['budget_residual'])/mass > GATES['budget_residual']: ++ raise RuntimeError('Population budget gate exceeded') ++ result['continued_equal'] = compare(reference, state(sim)) ++ result['max_relative_residual'] = max(abs(s['budget_residual'])/s['mass'] for s in result['steps']) ++ result['max_physical_relative_residual'] = max(abs(s['physical_residual'])/s['mass'] for s in result['steps']) ++ result['status'] = 'passed' if all(result['continued_equal'].values()) else 'failed' ++ finally: ++ sim.stepper.step_fn = original ++ compiler.cleanup_build_dir(build) ++ return result ++ ++ ++def negative(report, save): ++ row = report['negative'] = dict(status='running', amplitude=-.002, steps=0, main_steps=0, ++ history=[], extrema={}, population_budget=dict(status='not_tested')) ++ with create(-.002) as sim: ++ sim.initialize() ++ initial = populations(sim) ++ mass0 = float(observables(initial)[0].sum()) ++ first, fields = measure(initial, -.002, mass0) ++ first.update(step=0) ++ row['history'].append(first) ++ bottom, top, _ = targets(-.002) ++ row['initial_error'] = float(max(np.abs(fields[2][0]-bottom).max(), np.abs(fields[2][-1]-top).max(), np.abs(fields[1]).max())) ++ previous, mass_previous = fields[1:], mass0 ++ check_step(sim, mass0, row['extrema']) ++ try: ++ for interval in range(1,41): ++ mean = np.zeros((2,33,48)); m2 = np.zeros_like(mean) ++ low, high = np.full_like(mean, np.inf), np.full_like(mean, -np.inf) ++ for n in range(1,CHUNK+1): ++ if sim.stepper.step_count == LIMIT-16: ++ row['budget_start'] = persist(sim, 'negative-budget-20744.h5') ++ sim.run(1) ++ row['steps'] = row['main_steps'] = sim.stepper.step_count ++ f, fields = check_step(sim, mass0, row['extrema']) ++ uv = np.stack(fields[1:]) ++ delta = uv-mean ++ mean += delta/n ++ m2 += delta*(uv-mean) ++ low, high = np.minimum(low,uv), np.maximum(high,uv) ++ sample, fields = measure(f, -.002, mass0, previous) ++ sample.update(step=sim.stepper.step_count, mass_change=abs(sample['mass']-mass_previous)/mass0, ++ fluctuation=dict(samples=CHUNK, first_step=sim.stepper.step_count-CHUNK+1, ++ rms=np.sqrt(np.mean(m2/CHUNK,axis=(1,2))).tolist(), ++ max_node_peak_to_peak=np.max(high-low,axis=(1,2)).tolist())) ++ row['history'].append(sample) ++ sample['mass_window_span'] = float(np.ptp([s['mass'] for s in row['history'][-5:]])/mass0) ++ previous, mass_previous = fields[1:], sample['mass'] ++ save() ++ print('NEGATIVE', json.dumps({k:sample[k] for k in ('step','mass_offset','mass_change','mass_window_span','u_change','v_change','flux_error','boundary_error')}), flush=True) ++ if sample['mass_change'] > GATES['mass_change'] or sample['mass_window_span'] > GATES['mass_window_span']: ++ raise RuntimeError('Negative sampled mass hard gate exceeded') ++ assert resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024 < 512 ++ reference = state(sim) ++ row['end_checkpoint'] = persist(sim, 'negative-end-20760.h5') ++ row['final_boundary'] = dict(bottom_rho=fields[0][0].tolist(), bottom_u=fields[1][0].tolist(), ++ bottom_v=fields[2][0].tolist(), top_rho=fields[0][-1].tolist(), ++ top_u=fields[1][-1].tolist(), top_v=fields[2][-1].tolist()) ++ except Exception: ++ row['failure_checkpoint'] = persist(sim, 'negative-failure.h5') ++ raise ++ budget = audit(reference, mass0, report) ++ last, tail = row['history'][-1], row['history'][-4:] ++ checks = dict(steady=len(row['history']) >= 9 and all(s['u_change'] <= GATES['velocity_change'] and s['v_change'] <= GATES['velocity_change'] and s['mass_change'] <= GATES['mass_change'] for s in tail) and last['mass_window_span'] <= GATES['mass_window_span'], ++ initialization=row['initial_error'] <= GATES['boundary_error'], ++ boundary=last['boundary_error'] <= GATES['boundary_error'], ++ top_density=last['top_density_error'] <= 5e-7, ++ mass=last['mass_offset'] <= GATES['mass_offset'] and last['mass_window_span'] <= GATES['mass_window_span'], ++ bounded=last['rho_error'] <= GATES['rho_error'] and last['max_speed'] <= GATES['speed'], ++ flux=last['flux_error'] <= GATES['flux_error'] and last['flux_span'] <= GATES['flux_span'], ++ symmetry=last['symmetry']['rho'] <= GATES['rho_symmetry'] and max(last['symmetry']['u'],last['symmetry']['v']) <= GATES['velocity_symmetry'], ++ nonuniform=last['nonuniform'], audit=budget['status'] == 'passed' and budget['max_relative_residual'] <= GATES['budget_residual']) ++ row['checks'] = {k:bool(v) for k,v in checks.items()} ++ row['status'] = 'passed' if all(checks.values()) else 'failed' ++ save() ++ print('NEGATIVE RESULT',json.dumps(row['checks']),flush=True) ++ ++ ++def main(): ++ assert Path.cwd() == ROOT == Path('/home/frank14f/CelerisLab') ++ assert sys.executable == '/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python' ++ assert Path(CelerisLab.__file__).resolve() == ROOT/'src/CelerisLab/__init__.py' ++ assert Path(compiler.kernel_path('kernel_v2.cu')).resolve() == ROOT/'src/CelerisLab/lbm/kernels/kernel_v2.cu' ++ assert os.environ.get('CUDA_VISIBLE_DEVICES') == '0' ++ assert not (OUT/'results.json').exists(), 'Do not repeat this run' ++ baseline = json.loads((OUT/'baseline.json').read_text()) ++ assert all(sha(ROOT/name) == digest for name,digest in baseline['hashes'].items()) ++ assert sha(SOURCE) == SOURCE_SHA ++ gpu = subprocess.check_output(['nvidia-smi','-i','0','--query-gpu=memory.used,utilization.gpu','--format=csv,noheader,nounits'],text=True) ++ used, utilization = map(int,gpu.strip().split(',')) ++ apps = subprocess.check_output(['nvidia-smi','-i','0','--query-compute-apps=pid','--format=csv,noheader'],text=True) ++ assert not apps.strip() and used < 100 and utilization == 0, (gpu,apps) ++ report = dict(python=sys.executable, package=CelerisLab.__file__, cuda_source=compiler.kernel_path('kernel_v2.cu'), ++ script_sha256=sha(__file__), gpu='0', gpu_before=gpu, gates=dict(GATES,top_density_error=5e-7), ++ restart=dict(status='not_tested'),zero=dict(status='not_tested'),negative=dict(status='not_tested')) ++ ++ def save(): ++ report['peak_rss_mib'] = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024 ++ (OUT/'results.json').write_text(json.dumps(report,indent=2)+'\n') ++ ++ print('SOURCES',report['python'],report['package'],report['cuda_source'],flush=True) ++ save() ++ try: ++ restart(report,save) ++ zero(report,save) ++ negative(report,save) ++ except Exception as error: ++ report['error'] = repr(error) ++ for name in ('restart','zero','negative'): ++ if report[name]['status'] == 'running': report[name]['status'] = 'failed' ++ budget = report['negative'].get('population_budget', {}) ++ if budget.get('status') == 'running': budget['status'] = 'failed' ++ traceback.print_exc() ++ finally: ++ report['old_files_unchanged'] = all(sha(ROOT/name) == digest for name,digest in baseline['hashes'].items()) ++ save() ++ print('FINAL',json.dumps({name:report[name]['status'] for name in ('restart','zero','negative')}),flush=True) ++ return 0 if report['old_files_unchanged'] and all(report[n]['status']=='passed' for n in ('restart','zero','negative')) else 1 ++ ++ ++if __name__ == '__main__': ++ raise SystemExit(main()) diff --git a/research/j3-coverage-2026-10-12/negative-budget-20744.h5 b/research/j3-coverage-2026-10-12/negative-budget-20744.h5 new file mode 100644 index 0000000..693b133 Binary files /dev/null and b/research/j3-coverage-2026-10-12/negative-budget-20744.h5 differ diff --git a/research/j3-coverage-2026-10-12/negative-end-20760.h5 b/research/j3-coverage-2026-10-12/negative-end-20760.h5 new file mode 100644 index 0000000..429270d Binary files /dev/null and b/research/j3-coverage-2026-10-12/negative-end-20760.h5 differ diff --git a/research/j3-coverage-2026-10-12/restart-21280.h5 b/research/j3-coverage-2026-10-12/restart-21280.h5 new file mode 100644 index 0000000..74900af Binary files /dev/null and b/research/j3-coverage-2026-10-12/restart-21280.h5 differ diff --git a/research/j3-coverage-2026-10-12/restart-reference-21296.h5 b/research/j3-coverage-2026-10-12/restart-reference-21296.h5 new file mode 100644 index 0000000..7510ee9 Binary files /dev/null and b/research/j3-coverage-2026-10-12/restart-reference-21296.h5 differ diff --git a/research/j3-coverage-2026-10-12/results.json b/research/j3-coverage-2026-10-12/results.json new file mode 100644 index 0000000..7806b10 --- /dev/null +++ b/research/j3-coverage-2026-10-12/results.json @@ -0,0 +1,12143 @@ +{ + "python": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "package": "/home/frank14f/CelerisLab/src/CelerisLab/__init__.py", + "cuda_source": "/home/frank14f/CelerisLab/src/CelerisLab/lbm/kernels/kernel_v2.cu", + "script_sha256": "329869519b7078e854d96241a7aad8ef93f35ac9be83f0be502c3a93523c3b13", + "gpu": "0", + "gpu_before": "5, 0\n", + "gates": { + "velocity_change": 5e-05, + "mass_change": 2e-06, + "mass_window_span": 6e-06, + "mass_offset": 0.001, + "rho_error": 0.005, + "speed": 0.01, + "zero_speed": 2e-06, + "flux_error": 0.005, + "flux_span": 0.002, + "boundary_error": 2e-06, + "rho_symmetry": 2e-05, + "velocity_symmetry": 0.002, + "budget_residual": 2e-07, + "top_density_error": 5e-07 + }, + "restart": { + "status": "passed", + "source": "/home/frank14f/CelerisLab/research/j3-lag-2026-10-12/end-21280.h5", + "source_sha256": "19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588", + "start": 21280, + "end": 21296, + "a_steps": 16, + "b_steps": 16, + "extrema": { + "rho_error": 0.00024590082466602325, + "speed": 0.001984403386033322, + "mass_offset": 5.044664977423216e-09 + }, + "a_initial_equal": { + "ddf": true, + "temp": true, + "flag": true, + "step": true, + "config": true, + "runtime": true + }, + "checkpoint": { + "path": "/home/frank14f/CelerisLab/research/j3-coverage-2026-10-12/restart-21280.h5", + "sha256": "3e89c12c16f91f76ca9acd909e0fa7d42df6fbb5e870b299aa08ca42bc3e3dc9", + "step": 21280 + }, + "reference_end": { + "path": "/home/frank14f/CelerisLab/research/j3-coverage-2026-10-12/restart-reference-21296.h5", + "sha256": "7192f510dd7820675aa1de130f55514136fba782cf77f92545189918a7e0c328", + "step": 21296 + }, + "b_initial_equal": { + "ddf": true, + "temp": true, + "flag": true, + "step": true, + "config": true, + "runtime": true + }, + "continued_equal": { + "ddf": true, + "temp": true, + "flag": true, + "step": true, + "config": true, + "runtime": true + } + }, + "zero": { + "status": "passed", + "steps": 64, + "history": [ + { + "mass": 1584.0000118017197, + "mass_offset": 0.0, + "rho_range": [ + 1.0000000074505806, + 1.0000000074505806 + ], + "rho_error": 7.450580596923828e-09, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-09, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 0 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 1 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 2 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 3 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 4 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 5 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 6 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 7 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 8 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 9 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 10 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 11 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 12 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 13 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 14 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 15 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 16 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 17 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 18 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 19 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 20 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 21 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 22 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 23 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 24 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 25 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 26 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 27 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 28 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 29 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 30 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 31 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 32 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 33 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 34 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 35 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 36 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 37 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 38 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 39 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 40 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 41 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 42 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 43 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 44 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 45 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 46 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 47 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 48 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 49 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 50 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 51 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 52 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 53 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 54 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 55 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 56 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 57 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 58 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 59 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 60 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 61 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 62 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 63 + }, + { + "mass": 1584.0001180171967, + "mass_offset": 6.705522487271409e-08, + "rho_range": [ + 1.000000074505806, + 1.000000074505806 + ], + "rho_error": 7.450580596923828e-08, + "max_speed": 0.0, + "u_mean": 0.0, + "v_mean": 0.0, + "boundary_error": 0.0, + "top_density_error": 7.450580596923828e-08, + "top_velocity_range": [ + 0.0, + 0.0 + ], + "mass_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "volume_flux_by_y": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "flux_error": null, + "flux_span": null, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": 0.0, + "max_abs_u": 0.0, + "nonuniform": null, + "finite": true, + "step": 64 + } + ], + "extrema": { + "rho_error": 7.450580596923828e-08, + "speed": 0.0, + "mass_offset": 6.705522487271409e-08 + }, + "steady": "not_tested_short_case", + "flux_relative": "not_applicable_zero_reference", + "mass_span": 6.705522487271409e-08, + "checks": { + "zero_speed": true, + "mass_offset": true, + "mass_span": true, + "mass_change": true, + "boundary": true, + "top_density": true, + "finite": true + } + }, + "negative": { + "status": "failed", + "amplitude": -0.002, + "steps": 20760, + "main_steps": 20760, + "history": [ + { + "mass": 1584.0000070855021, + "mass_offset": 0.0, + "rho_range": [ + 0.9999999515712261, + 1.000000063329935 + ], + "rho_error": 6.332993507385254e-08, + "max_speed": 0.0019843876213998524, + "u_mean": 0.0, + "v_mean": -0.0003555597808310273, + "boundary_error": 1.7896178272809593e-08, + "top_density_error": 7.450580596923828e-09, + "top_velocity_range": [ + -0.00035554915401675435, + -0.00035554915401675435 + ], + "mass_flux_by_y": [ + -0.017066851258277893, + -0.01706709712743759, + -0.017066605389118195, + -0.0170673206448555, + -0.017066560685634613, + -0.01706647127866745, + -0.01706676185131073, + -0.01706680655479431, + -0.017066694796085358, + -0.01706700772047043, + -0.017066560685634613, + -0.017067477107048035, + -0.01706673949956894, + -0.017066985368728638, + -0.01706738770008087, + -0.017067186534404755, + -0.017067499458789825, + -0.01706700772047043, + -0.017066538333892822, + -0.017067231237888336, + -0.017066292464733124, + -0.017066381871700287, + -0.017066583037376404, + -0.017066605389118195, + -0.0170670747756958, + -0.01706709712743759, + -0.017066583037376404, + -0.017066985368728638, + -0.017067208886146545, + -0.0170670747756958, + -0.0170670747756958, + -0.017066583037376404, + -0.017066359519958496 + ], + "volume_flux_by_y": [ + -0.01706685116963664, + -0.017067097253524986, + -0.017066605059667655, + -0.01706732059392633, + -0.017066560530814224, + -0.017066471245999006, + -0.01706676178098549, + -0.01706680649730747, + -0.01706669474628795, + -0.01706700738497672, + -0.017066560649033648, + -0.017067476878406602, + -0.017066739181331433, + -0.017066985349282027, + -0.017067387492189008, + -0.017067186692309035, + -0.017067499262939753, + -0.01706700745398202, + -0.0170665383012511, + -0.017067231163073432, + -0.017066292461515448, + -0.01706638169037892, + -0.017066583065938397, + -0.017066605712040814, + -0.017067074833568677, + -0.01706709712640317, + -0.017066582984162304, + -0.017066985194649727, + -0.017067208645477235, + -0.017067075028551214, + -0.017067074738311375, + -0.017066583275621165, + -0.01706635939280421 + ], + "flux_error": 3.5440026472370716e-05, + "flux_span": 4.714757564095906e-05, + "symmetry": { + "rho": 0.0, + "u": 0.0, + "v": 0.0 + }, + "center_v": -0.0015772059794844089, + "max_abs_u": 0.0, + "nonuniform": false, + "finite": true, + "step": 0 + }, + { + "mass": 1583.9994974229485, + "mass_offset": 3.217566612299335e-07, + "rho_range": [ + 0.9997524619102478, + 1.000165594741702 + ], + "rho_error": 0.00024753808975219727, + "max_speed": 0.001984398287901183, + "u_mean": -2.519291163748324e-09, + "v_mean": -0.0003551005112670434, + "boundary_error": 3.308605328871273e-08, + "top_density_error": 2.0489096641540527e-07, + "top_velocity_range": [ + -0.0004988685324619492, + -0.00022050179582182652 + ], + "mass_flux_by_y": [ + -0.017064262181520462, + -0.017063209787011147, + -0.017062485218048096, + -0.017062043771147728, + -0.01706112176179886, + -0.01706036925315857, + -0.017059268429875374, + -0.017057934775948524, + -0.017056358978152275, + -0.017054185271263123, + -0.01705271191895008, + -0.0170513354241848, + -0.017049722373485565, + -0.01704872027039528, + -0.017046978697180748, + -0.017045674845576286, + -0.017044363543391228, + -0.017042508348822594, + -0.01704070344567299, + -0.017039550468325615, + -0.01703781448304653, + -0.017036374658346176, + -0.01703476347029209, + -0.017033806070685387, + -0.017032334581017494, + -0.017033031210303307, + -0.01703125424683094, + -0.01703137904405594, + -0.01702849566936493, + -0.017028605565428734, + -0.017026230692863464, + -0.017027035355567932, + -0.017024604603648186 + ], + "volume_flux_by_y": [ + -0.017066890228113078, + -0.017065116780466953, + -0.017063842677242827, + -0.01706301019671877, + -0.01706181360602675, + -0.017060871807227537, + -0.017059638246643388, + -0.017058210599704145, + -0.017056567481717147, + -0.01705434534990645, + -0.017052838499208627, + -0.017051437571200888, + -0.017049806698239682, + -0.017048791129181423, + -0.01704704001136934, + -0.017045729046819162, + -0.017044413123866026, + -0.01704255286683759, + -0.01704074467151659, + -0.01703958833745244, + -0.017037849430203637, + -0.017036406817044422, + -0.0170347925719288, + -0.017033832444762004, + -0.017032357504019047, + -0.01703305225824573, + -0.017031273035033975, + -0.01703139474253873, + -0.017028508189533845, + -0.01702861472309851, + -0.017026236428402952, + -0.017027037903432754, + -0.01702460486929343 + ], + "flux_error": 0.0020246534065660256, + "flux_span": 0.0014076611719454003, + "symmetry": { + "rho": 4.973262548446655e-07, + "u": 7.450490512487742e-05, + "v": 9.964880873748944e-05 + }, + "center_v": -0.0010987124693118448, + "max_abs_u": 0.00044052592893774106, + "nonuniform": true, + "finite": true, + "u_change": 0.06598576785222791, + "v_change": 0.07623812727056475, + "u_signed_change": -2.519291163748324e-09, + "v_signed_change": 4.592695639839173e-07, + "step": 519, + "mass_change": 3.217566612299335e-07, + "fluctuation": { + "samples": 519, + "first_step": 1, + "rms": [ + 3.424217429362146e-05, + 3.79726944094006e-05 + ], + "max_node_peak_to_peak": [ + 0.00046157989835548396, + 0.0005352154867275613 + ] + }, + "mass_window_span": 3.217566612299335e-07 + }, + { + "mass": 1583.9988980200142, + "mass_offset": 7.001676029165427e-07, + "rho_range": [ + 0.9997455719858408, + 1.0001616403460503 + ], + "rho_error": 0.0002544280141592026, + "max_speed": 0.0019844191832874163, + "u_mean": -6.137537068399256e-09, + "v_mean": -0.0003555001403170018, + "boundary_error": 2.2541318599232987e-08, + "top_density_error": 2.3283064365386963e-07, + "top_velocity_range": [ + -0.0004687943070941974, + -0.00024531038077535514 + ], + "mass_flux_by_y": [ + -0.017064189538359642, + -0.017064236104488373, + -0.01706472411751747, + -0.0170653834939003, + -0.017065823078155518, + -0.017065558582544327, + -0.01706594228744507, + -0.01706552878022194, + -0.017065314576029778, + -0.01706390641629696, + -0.01706453412771225, + -0.017064519226551056, + -0.01706475205719471, + -0.01706443540751934, + -0.017065076157450676, + -0.017065107822418213, + -0.017064915969967842, + -0.017063602805137634, + -0.017063843086361885, + -0.01706358790397644, + -0.017063841223716736, + -0.017063859850168228, + -0.01706416718661785, + -0.01706310361623764, + -0.017063366249203682, + -0.01706189475953579, + -0.017062781378626823, + -0.017061391845345497, + -0.017062010243535042, + -0.017060186713933945, + -0.01706036552786827, + -0.017059117555618286, + -0.017060136422514915 + ], + "volume_flux_by_y": [ + -0.017066929482986354, + -0.017066257447710193, + -0.01706619735729254, + -0.017066462536129597, + -0.017066623056858115, + -0.017066162710255538, + -0.017066405293336695, + -0.017065887225669478, + -0.017065596569517574, + -0.017064130195217807, + -0.01706471470551643, + -0.01706466399238998, + -0.017064869164884717, + -0.017064531122790674, + -0.01706515455712866, + -0.017065172902996008, + -0.017064969254843097, + -0.01706364662248345, + -0.01706387985102724, + -0.017063618830207003, + -0.017063867454402547, + -0.017063881549362184, + -0.017064184436435533, + -0.01706311772828718, + -0.017063378106276426, + -0.017061904345309572, + -0.01706278903068999, + -0.017061397943897747, + -0.017062015209126015, + -0.017060190261889208, + -0.01706036770865167, + -0.017059118770343586, + -0.017060136838218144 + ], + "flux_error": 0.00020603696487783222, + "flux_span": 0.00011415833020876807, + "symmetry": { + "rho": 5.010515451431274e-07, + "u": 0.00010244474968858874, + "v": 8.1952951358989e-05 + }, + "center_v": -0.001086172558859655, + "max_abs_u": 0.0004299373466246951, + "nonuniform": true, + "finite": true, + "u_change": 0.003868697582245292, + "v_change": 0.007239808798830057, + "u_signed_change": -3.618245904650641e-09, + "v_signed_change": -3.9962904995851194e-07, + "step": 1038, + "mass_change": 3.784109416866091e-07, + "fluctuation": { + "samples": 519, + "first_step": 520, + "rms": [ + 3.6910567160520313e-06, + 3.218750226638814e-06 + ], + "max_node_peak_to_peak": [ + 4.032173460804717e-05, + 3.046911043537941e-05 + ] + }, + "mass_window_span": 7.001676029165427e-07 + }, + { + "mass": 1583.9999166429043, + "mass_offset": 5.7097599407508326e-08, + "rho_range": [ + 0.999746523797512, + 1.0001625940203667 + ], + "rho_error": 0.00025347620248794556, + "max_speed": 0.0019844100744695436, + "u_mean": -2.6003567927533115e-09, + "v_mean": -0.00035547710798977726, + "boundary_error": 3.735520930374294e-08, + "top_density_error": 2.2724270820617676e-07, + "top_velocity_range": [ + -0.00046200117151807136, + -0.00025151300354638365 + ], + "mass_flux_by_y": [ + -0.017064271494746208, + -0.01706353947520256, + -0.01706334948539734, + -0.017061688005924225, + -0.017062300816178322, + -0.017062686383724213, + -0.01706334948539734, + -0.017063185572624207, + -0.017062921077013016, + -0.01706264540553093, + -0.017063593491911888, + -0.017064325511455536, + -0.017065782099962234, + -0.017065059393644333, + -0.01706523261964321, + -0.017064940184354782, + -0.017064828425645828, + -0.017064420506358147, + -0.017064614221453667, + -0.017064129933714867, + -0.017063172534108162, + -0.017062675207853317, + -0.01706204004585743, + -0.017061080783605576, + -0.017060210928320885, + -0.017060911282896996, + -0.01706024631857872, + -0.017060425132513046, + -0.01705964468419552, + -0.01705983839929104, + -0.017058800905942917, + -0.017059484496712685, + -0.017059769481420517 + ], + "volume_flux_by_y": [ + -0.017066997175952982, + -0.01706554528342507, + -0.017064804266364572, + -0.017062746586612373, + -0.01706308144241986, + -0.01706326928145049, + -0.017063790683406695, + -0.017063522312837483, + -0.01706318057259079, + -0.017062847207254192, + -0.01706375154826965, + -0.01706444974229239, + -0.017065879369869787, + -0.017065135276383304, + -0.01706529280686741, + -0.017064988071979176, + -0.01706486593507379, + -0.01706445030229327, + -0.017064637374803432, + -0.017064147559862023, + -0.017063186724342243, + -0.01706268666544556, + -0.017062048680576977, + -0.017061087460413685, + -0.017060215890702734, + -0.017060915282418744, + -0.017060249238274313, + -0.01706042679657671, + -0.017059646112390983, + -0.017059838354895766, + -0.017058800901779636, + -0.01705948446753984, + -0.01705976968044133 + ], + "flux_error": 0.0003915595267182779, + "flux_span": 0.0002705528858505534, + "symmetry": { + "rho": 6.202608346939087e-07, + "u": 0.0001266598307346308, + "v": 0.00011362949819414855 + }, + "center_v": -0.0010851352644496185, + "max_abs_u": 0.0004325279109439106, + "nonuniform": true, + "finite": true, + "u_change": 0.001278616745148646, + "v_change": 0.001425086673485527, + "u_signed_change": 3.537180275645679e-09, + "v_signed_change": 2.3032327224543543e-08, + "step": 1557, + "mass_change": 6.430700035090344e-07, + "fluctuation": { + "samples": 519, + "first_step": 1039, + "rms": [ + 5.470518516360712e-07, + 9.867630846715412e-07 + ], + "max_node_peak_to_peak": [ + 5.401524470148488e-06, + 7.869720017653872e-06 + ] + }, + "mass_window_span": 7.001676029165427e-07 + }, + { + "mass": 1583.9996689930558, + "mass_offset": 2.1344220000938404e-07, + "rho_range": [ + 0.9997469559311867, + 1.0001625996083021 + ], + "rho_error": 0.000253044068813324, + "max_speed": 0.001984431574117778, + "u_mean": -7.431877169711292e-09, + "v_mean": -0.0003552705656732505, + "boundary_error": 3.5485396705802787e-08, + "top_density_error": 2.384185791015625e-07, + "top_velocity_range": [ + -0.00045916995442306765, + -0.00025394933706069024 + ], + "mass_flux_by_y": [ + -0.017064237967133522, + -0.017063893377780914, + -0.01706213317811489, + -0.01706121861934662, + -0.0170600526034832, + -0.01705932803452015, + -0.017058370634913445, + -0.017057981342077255, + -0.01705685630440712, + -0.017056183889508247, + -0.017054660245776176, + -0.017053570598363876, + -0.01705184206366539, + -0.01705179549753666, + -0.017050402238965034, + -0.017050500959157944, + -0.017049409449100494, + -0.017049383372068405, + -0.017048776149749756, + -0.017049338668584824, + -0.017049036920070648, + -0.01704895682632923, + -0.017049070447683334, + -0.017049182206392288, + -0.017049100250005722, + -0.01704888977110386, + -0.017048267647624016, + -0.01704767532646656, + -0.01704816333949566, + -0.017046965658664703, + -0.017047954723238945, + -0.017046041786670685, + -0.017048750072717667 + ], + "volume_flux_by_y": [ + -0.017066956034756255, + -0.017065891454705464, + -0.01706358231560283, + -0.017062273117876912, + -0.017060828683938038, + -0.017059908304418725, + -0.017058809899200847, + -0.017058318468482665, + -0.017057116586242392, + -0.017056387696466724, + -0.01705482062411277, + -0.0170536965293906, + -0.017051942621445812, + -0.017051875521255866, + -0.017050465662607175, + -0.017050551319567304, + -0.017049449334367486, + -0.017049415400118013, + -0.017048801890300138, + -0.01704935979827765, + -0.017049053987104174, + -0.017048970061224765, + -0.017049080719629066, + -0.01704919071944424, + -0.017049106756312077, + -0.017048894549576418, + -0.017048271155452176, + -0.01704767783632189, + -0.017048164812761137, + -0.01704696611662354, + -0.01704795484222406, + -0.017046042761647118, + -0.017048750444974455 + ], + "flux_error": 0.0010424109949828588, + "flux_span": 0.000454450339982569, + "symmetry": { + "rho": 4.600733518600464e-07, + "u": 0.00010523949220050876, + "v": 0.00011271317640289052 + }, + "center_v": -0.0010844070661702558, + "max_abs_u": 0.0004325706347489156, + "nonuniform": true, + "finite": true, + "u_change": 0.00017278447193852438, + "v_change": 0.0006039945603517812, + "u_signed_change": -4.831520376957482e-09, + "v_signed_change": 2.065423165268259e-07, + "step": 2076, + "mass_change": 1.5634460060187572e-07, + "fluctuation": { + "samples": 519, + "first_step": 1558, + "rms": [ + 1.385563318097131e-07, + 3.57924706538836e-07 + ], + "max_node_peak_to_peak": [ + 1.1343475740371986e-06, + 2.9392556516321137e-06 + ] + }, + "mass_window_span": 7.001676029165427e-07 + }, + { + "mass": 1583.9994581658393, + "mass_offset": 3.465401896324511e-07, + "rho_range": [ + 0.999746523797512, + 1.000162510201335 + ], + "rho_error": 0.00025347620248794556, + "max_speed": 0.001984430365417902, + "u_mean": 5.599155624024559e-10, + "v_mean": -0.00035538240932212427, + "boundary_error": 3.744637678160679e-08, + "top_density_error": 2.3096799850463867e-07, + "top_velocity_range": [ + -0.00045845656049955995, + -0.0002548434163059151 + ], + "mass_flux_by_y": [ + -0.017064299434423447, + -0.017063701525330544, + -0.017062919214367867, + -0.01706325262784958, + -0.017062490805983543, + -0.017062241211533546, + -0.017062373459339142, + -0.017061982303857803, + -0.017061103135347366, + -0.01705966331064701, + -0.017059167847037315, + -0.01705893874168396, + -0.01705872267484665, + -0.01705813780426979, + -0.017058080062270164, + -0.01705796644091606, + -0.017058392986655235, + -0.017056873068213463, + -0.017057348042726517, + -0.017056437209248543, + -0.017056696116924286, + -0.01705525629222393, + -0.017056157812476158, + -0.017055252566933632, + -0.017056314274668694, + -0.017055250704288483, + -0.017056092619895935, + -0.01705360598862171, + -0.01705491729080677, + -0.017052391543984413, + -0.017053917050361633, + -0.01705065928399563, + -0.017054470255970955 + ], + "volume_flux_by_y": [ + -0.017067024679252286, + -0.017065706493197354, + -0.01706437550860367, + -0.01706431414925888, + -0.017063274146709193, + -0.017062827635318273, + -0.017062817767211663, + -0.017062323762193236, + -0.017061367873686832, + -0.017059869876364347, + -0.01705933065889474, + -0.01705906735810652, + -0.01705882454442829, + -0.017058218942346492, + -0.017058145338512576, + -0.017058018521332492, + -0.017058434464726005, + -0.01705690606954227, + -0.017057375233404594, + -0.01705645845870414, + -0.01705671380731626, + -0.01705526976312264, + -0.017056169110651713, + -0.017055261509760302, + -0.017056320977849676, + -0.01705525592323938, + -0.017056095990270397, + -0.017053608379439027, + -0.017054919098244456, + -0.01705239253924416, + -0.017053917290719957, + -0.017050659670025524, + -0.017054470824567583 + ], + "flux_error": 0.0006195867770403673, + "flux_span": 0.0002805936550446306, + "symmetry": { + "rho": 4.824250936508179e-07, + "u": 9.778830827180152e-05, + "v": 0.00011082558337874825 + }, + "center_v": -0.0010844391502879585, + "max_abs_u": 0.00043268441375624397, + "nonuniform": true, + "finite": true, + "u_change": 9.126784346950154e-05, + "v_change": 0.00022312111710797426, + "u_signed_change": 7.991792732113621e-09, + "v_signed_change": -1.118436488738358e-07, + "step": 2595, + "mass_change": 1.3309798962306706e-07, + "fluctuation": { + "samples": 519, + "first_step": 2077, + "rms": [ + 5.965088646118914e-08, + 1.4697753244470522e-07 + ], + "max_node_peak_to_peak": [ + 6.016341309831327e-07, + 1.6316943096694216e-06 + ] + }, + "mass_window_span": 6.430700035090344e-07 + }, + { + "mass": 1583.999448992312, + "mass_offset": 3.5233155788934993e-07, + "rho_range": [ + 0.9997465554624796, + 1.0001623760908842 + ], + "rho_error": 0.00025344453752040863, + "max_speed": 0.001984400696027979, + "u_mean": 3.3582120572438104e-09, + "v_mean": -0.0003554001385911607, + "boundary_error": 3.7467096667049594e-08, + "top_density_error": 2.123415470123291e-07, + "top_velocity_range": [ + -0.00045788652287259837, + -0.0002553239607433208 + ], + "mass_flux_by_y": [ + -0.017064206302165985, + -0.017063461244106293, + -0.017062664031982422, + -0.017062796279788017, + -0.017061986029148102, + -0.01706233061850071, + -0.017061764374375343, + -0.017062261700630188, + -0.017060736194252968, + -0.017060833051800728, + -0.017059242352843285, + -0.017061304301023483, + -0.0170592088252306, + -0.017060348764061928, + -0.017058104276657104, + -0.01706019602715969, + -0.017057955265045166, + -0.017059700563549995, + -0.017056860029697418, + -0.017059890553355217, + -0.017056144773960114, + -0.01705966144800186, + -0.017055364325642586, + -0.01705894060432911, + -0.017054449766874313, + -0.017059320583939552, + -0.017053939402103424, + -0.017059175297617912, + -0.01705281250178814, + -0.017058495432138443, + -0.017051570117473602, + -0.017056766897439957, + -0.01705065369606018 + ], + "volume_flux_by_y": [ + -0.017066931501496, + -0.017065466426608857, + -0.017064119800151524, + -0.01706385665067261, + -0.0170627679427236, + -0.01706291625973648, + -0.017062209125944784, + -0.017062603151973072, + -0.017061001372535647, + -0.017061040529661835, + -0.017059406338447505, + -0.017061433638948704, + -0.017059310994829307, + -0.017060430269780713, + -0.017058169426428023, + -0.01706024848725534, + -0.0170579972963298, + -0.017059733978503654, + -0.01705688708974474, + -0.017059912226108927, + -0.01705616235821681, + -0.017059676119940685, + -0.01705537553555593, + -0.01705895002010043, + -0.017054457441647707, + -0.01705932676695926, + -0.01705394430706457, + -0.017059179169045452, + -0.017052815290696223, + -0.017058497424464532, + -0.017051570838071965, + -0.017056767650294204, + -0.017050654098459586 + ], + "flux_error": 0.0007288280722323868, + "flux_span": 0.0003683405644729976, + "symmetry": { + "rho": 4.78699803352356e-07, + "u": 8.940662689762373e-05, + "v": 0.0001788181074885572 + }, + "center_v": -0.001084327258697174, + "max_abs_u": 0.00043265457176544454, + "nonuniform": true, + "finite": true, + "u_change": 5.051222085059064e-05, + "v_change": 8.920724497802651e-05, + "u_signed_change": 2.798296494841338e-09, + "v_signed_change": -1.772926903632915e-08, + "step": 3114, + "mass_change": 5.791368256898807e-09, + "fluctuation": { + "samples": 519, + "first_step": 2596, + "rms": [ + 3.946634049072043e-08, + 7.03037481999781e-08 + ], + "max_node_peak_to_peak": [ + 3.855506125375154e-07, + 8.736035953897919e-07 + ] + }, + "mass_window_span": 6.430700035090344e-07 + }, + { + "mass": 1583.9994927216321, + "mass_offset": 3.247246639670731e-07, + "rho_range": [ + 0.9997464995831251, + 1.0001623649150133 + ], + "rho_error": 0.00025350041687488556, + "max_speed": 0.0019844082594129273, + "u_mean": 8.647640031645948e-09, + "v_mean": -0.00035541458473367594, + "boundary_error": 3.747124064431163e-08, + "top_density_error": 1.5273690223693848e-07, + "top_velocity_range": [ + -0.0004580989241101409, + -0.00025545435447582793 + ], + "mass_flux_by_y": [ + -0.017064210027456284, + -0.017063645645976067, + -0.01706361211836338, + -0.017063112929463387, + -0.01706351712346077, + -0.017062989994883537, + -0.017062947154045105, + -0.017061959952116013, + -0.017062321305274963, + -0.0170602947473526, + -0.017060695216059685, + -0.01705988496541977, + -0.017061501741409302, + -0.017059555277228355, + -0.017060980200767517, + -0.017058447003364563, + -0.017060520127415657, + -0.017058322206139565, + -0.0170606542378664, + -0.017057668417692184, + -0.01705935038626194, + -0.017055347561836243, + -0.01705867424607277, + -0.01705385372042656, + -0.01705886237323284, + -0.017053227871656418, + -0.017059577628970146, + -0.01705400086939335, + -0.017061131075024605, + -0.01705298013985157, + -0.0170610249042511, + -0.017051322385668755, + -0.017059864476323128 + ], + "volume_flux_by_y": [ + -0.017066933763346406, + -0.017065647273360143, + -0.01706506561886113, + -0.017064171162036224, + -0.017064297477827624, + -0.01706357436064103, + -0.017063389924476285, + -0.017062300389930868, + -0.017062585037735598, + -0.01706050109508582, + -0.01706085859934415, + -0.01706001383578527, + -0.017061604067204784, + -0.017059636813342223, + -0.017061044614989078, + -0.017058499402915824, + -0.017060562391107648, + -0.017058355746545045, + -0.017060680957796004, + -0.017057689808691483, + -0.017059367139540732, + -0.017055361112327666, + -0.01705868450959793, + -0.01705386283782404, + -0.017058869159375305, + -0.01705323276853539, + -0.017059581693950013, + -0.017054003927162335, + -0.017061132829556323, + -0.017052981104594203, + -0.017061025173967403, + -0.01705132288522397, + -0.017059864735464704 + ], + "flux_error": 0.0004703078743784531, + "flux_span": 0.00020266915832385253, + "symmetry": { + "rho": 5.085021257400513e-07, + "u": 0.00010989647463286503, + "v": 0.00017786155497251464 + }, + "center_v": -0.0010843623976148499, + "max_abs_u": 0.0004326155475993754, + "nonuniform": true, + "finite": true, + "u_change": 2.5529452176931958e-05, + "v_change": 6.489416307709728e-05, + "u_signed_change": 5.2894279744025214e-09, + "v_signed_change": -1.4446142515254359e-08, + "step": 3633, + "mass_change": 2.7606893922276812e-08, + "fluctuation": { + "samples": 519, + "first_step": 3115, + "rms": [ + 3.3147305245490987e-08, + 6.964643160731144e-08 + ], + "max_node_peak_to_peak": [ + 3.2410852684056904e-07, + 7.934900945470486e-07 + ] + }, + "mass_window_span": 2.9523395848184156e-07 + }, + { + "mass": 1583.9995022006333, + "mass_offset": 3.187404460870004e-07, + "rho_range": [ + 0.9997465386986732, + 1.0001623686403036 + ], + "rho_error": 0.0002534613013267517, + "max_speed": 0.0019844081632861047, + "u_mean": 8.81721823164915e-09, + "v_mean": -0.0003554243306066743, + "boundary_error": 3.566151512957548e-08, + "top_density_error": 1.9371509552001953e-07, + "top_velocity_range": [ + -0.0004577412979653594, + -0.00025544877367703755 + ], + "mass_flux_by_y": [ + -0.01706419326364994, + -0.01706428825855255, + -0.017063485458493233, + -0.017063768580555916, + -0.017063165083527565, + -0.017064126208424568, + -0.017062844708561897, + -0.017063625156879425, + -0.017062649130821228, + -0.017063124105334282, + -0.017060905694961548, + -0.017062464728951454, + -0.017059901729226112, + -0.017061958089470863, + -0.01705922931432724, + -0.01706235483288765, + -0.017059314996004105, + -0.01706281304359436, + -0.01705867238342762, + -0.017060711979866028, + -0.01705664023756981, + -0.017061222344636917, + -0.01705627329647541, + -0.017060918733477592, + -0.01705503650009632, + -0.01706060953438282, + -0.01705353893339634, + -0.017060300335288048, + -0.017052732408046722, + -0.017059655860066414, + -0.017051024362444878, + -0.0170598141849041, + -0.01705012656748295 + ], + "volume_flux_by_y": [ + -0.01706691777104386, + -0.017066293492160756, + -0.017064940851221105, + -0.017064829264286163, + -0.01706394812152745, + -0.0170647117912762, + -0.01706328937020076, + -0.01706396600147951, + -0.017062912593893743, + -0.017063329678648244, + -0.01706106711028143, + -0.017062591725828746, + -0.017060002524981195, + -0.017062038596587618, + -0.017059293325907627, + -0.01706240577750545, + -0.01705935617994405, + -0.017062845959658204, + -0.01705869886977126, + -0.01706073351078896, + -0.017056657975869985, + -0.017061236672299643, + -0.017056284033539038, + -0.017060927884566746, + -0.017055043398872243, + -0.017060614307756967, + -0.017053542756113274, + -0.017060303193461218, + -0.01705273412874416, + -0.017059656848985277, + -0.01705102502530331, + -0.01705981388891737, + -0.01705012704955061 + ], + "flux_error": 0.0006944831873434876, + "flux_span": 0.0004460467663504593, + "symmetry": { + "rho": 5.941838026046753e-07, + "u": 0.00010430786647332576, + "v": 0.00017416683218744408 + }, + "center_v": -0.00108442210516496, + "max_abs_u": 0.0004326881488412958, + "nonuniform": true, + "finite": true, + "u_change": 3.343741054447642e-05, + "v_change": 6.715497284163599e-05, + "u_signed_change": 1.6957820000267525e-10, + "v_signed_change": -9.745872998453142e-09, + "step": 4152, + "mass_change": 5.984217880072697e-09, + "fluctuation": { + "samples": 519, + "first_step": 3634, + "rms": [ + 3.7451466572350094e-08, + 6.768360945167768e-08 + ], + "max_node_peak_to_peak": [ + 3.3902044668180763e-07, + 8.232973402047062e-07 + ] + }, + "mass_window_span": 1.3888935787996587e-07 + }, + { + "mass": 1583.999528579414, + "mass_offset": 3.020871755785332e-07, + "rho_range": [ + 0.9997468143701553, + 1.0001623630523682 + ], + "rho_error": 0.00025318562984466553, + "max_speed": 0.001984431522360094, + "u_mean": 3.2431480755140594e-09, + "v_mean": -0.0003554242027683379, + "boundary_error": 3.560971558163456e-08, + "top_density_error": 1.825392246246338e-07, + "top_velocity_range": [ + -0.0004578661182110498, + -0.00025588276099197844 + ], + "mass_flux_by_y": [ + -0.01706429198384285, + -0.017064064741134644, + -0.01706423982977867, + -0.017063094303011894, + -0.017064480111002922, + -0.01706310361623764, + -0.017063599079847336, + -0.0170622318983078, + -0.017063966020941734, + -0.017061244696378708, + -0.01706259325146675, + -0.017059825360774994, + -0.017062101513147354, + -0.017059221863746643, + -0.017061632126569748, + -0.017058897763490677, + -0.017062298953533173, + -0.017058473080396652, + -0.01706148497760296, + -0.017056766897439957, + -0.01706065610051155, + -0.01705591194331646, + -0.0170600526034832, + -0.01705455407500267, + -0.017059724777936935, + -0.017054270952939987, + -0.017059538513422012, + -0.017053842544555664, + -0.01705993339419365, + -0.017052877694368362, + -0.01705988682806492, + -0.01705206371843815, + -0.017060382291674614 + ], + "volume_flux_by_y": [ + -0.01706701360787657, + -0.0170660659087635, + -0.0170656936694661, + -0.017064153322945048, + -0.017065260669242598, + -0.017063687949278324, + -0.017064042042210084, + -0.01706257215207612, + -0.01706422896849068, + -0.017061449991069115, + -0.0170627545948084, + -0.01705995334906195, + -0.017062202192927478, + -0.017059302092658536, + -0.01706169616971554, + -0.017058949035778804, + -0.017062339749406095, + -0.01705850586623712, + -0.017061511366241344, + -0.017056787986664525, + -0.017060673471707387, + -0.017055925744276383, + -0.017060063298704048, + -0.017054562739377437, + -0.017059731220983664, + -0.017054275564462294, + -0.017059541840857548, + -0.017053845378062288, + -0.017059934551167624, + -0.01705287886929715, + -0.01705988677692906, + -0.017052064186262723, + -0.01706038285804167 + ], + "flux_error": 0.0004197996352176973, + "flux_span": 0.0002485070883450261, + "symmetry": { + "rho": 5.178153514862061e-07, + "u": 7.823424630974923e-05, + "v": 0.0001182917323730014 + }, + "center_v": -0.0010843977102286202, + "max_abs_u": 0.00043266209351275613, + "nonuniform": true, + "finite": true, + "u_change": 4.4224595155967846e-05, + "v_change": 5.665068649864396e-05, + "u_signed_change": -5.574070156134799e-09, + "v_signed_change": 1.2783833647329128e-10, + "step": 4671, + "mass_change": 1.665327050846719e-08, + "fluctuation": { + "samples": 519, + "first_step": 4153, + "rms": [ + 4.9920830710251353e-08, + 5.983760791015739e-08 + ], + "max_node_peak_to_peak": [ + 4.1164049195133916e-07, + 7.842319172335572e-07 + ] + }, + "mass_window_span": 5.02443823108167e-08 + }, + { + "mass": 1583.9994785692543, + "mass_offset": 3.3365924589923903e-07, + "rho_range": [ + 0.9997465200722218, + 1.0001623686403036 + ], + "rho_error": 0.000253479927778244, + "max_speed": 0.001984428454242913, + "u_mean": -1.8105283704060442e-10, + "v_mean": -0.00035541417924891863, + "boundary_error": 3.690716059222103e-08, + "top_density_error": 1.8998980522155762e-07, + "top_velocity_range": [ + -0.00045779532405188335, + -0.0002555251340459216 + ], + "mass_flux_by_y": [ + -0.017064275220036507, + -0.017063990235328674, + -0.017063265666365623, + -0.017064230516552925, + -0.017063038423657417, + -0.017063278704881668, + -0.017061157152056694, + -0.017062438651919365, + -0.017059732228517532, + -0.0170613843947649, + -0.017058324068784714, + -0.017061783000826836, + -0.01705898344516754, + -0.017061421647667885, + -0.017057770863175392, + -0.017061932012438774, + -0.017058484256267548, + -0.01706269197165966, + -0.017057882621884346, + -0.017061125487089157, + -0.01705573871731758, + -0.01706063374876976, + -0.017054345458745956, + -0.017059847712516785, + -0.017053477466106415, + -0.017059972509741783, + -0.017052793875336647, + -0.017060257494449615, + -0.017054172232747078, + -0.01706080697476864, + -0.01705338805913925, + -0.017059655860066414, + -0.017053117975592613 + ], + "volume_flux_by_y": [ + -0.01706699893417716, + -0.017065993202963613, + -0.01706472089002671, + -0.017065290240035745, + -0.017063818992706967, + -0.0170638629902223, + -0.017061599882145916, + -0.017062779004968852, + -0.01705999588331622, + -0.017061590405653686, + -0.017058487628175512, + -0.01706191256976724, + -0.017059085559973274, + -0.017061503702683327, + -0.017057836587898122, + -0.017061985205232187, + -0.017058527492953286, + -0.01706272659539736, + -0.0170579102109173, + -0.017061148327607772, + -0.01705575695115025, + -0.01706064862262209, + -0.017054356832090528, + -0.01705985705604321, + -0.017053484519129046, + -0.017059977885338293, + -0.017052797976767096, + -0.017060261028790324, + -0.017054174392382243, + -0.017060808020446364, + -0.017053388169884016, + -0.017059655687453705, + -0.01705311848136739 + ], + "flux_error": 0.0007858167371831788, + "flux_span": 0.0003664852125643753, + "symmetry": { + "rho": 4.78699803352356e-07, + "u": 6.892225670980995e-05, + "v": 0.00018160756418313106 + }, + "center_v": -0.001084233925516077, + "max_abs_u": 0.000432632264415601, + "nonuniform": true, + "finite": true, + "u_change": 4.891330914948065e-05, + "v_change": 5.708806900752434e-05, + "u_signed_change": -3.424200912554778e-09, + "v_signed_change": 1.0023519419258245e-08, + "step": 5190, + "mass_change": 3.157207032070581e-08, + "fluctuation": { + "samples": 519, + "first_step": 4672, + "rms": [ + 5.404922913272482e-08, + 6.34487495656111e-08 + ], + "max_node_peak_to_peak": [ + 4.358895218752035e-07, + 7.152932139191642e-07 + ] + }, + "mass_window_span": 5.02443823108167e-08 + }, + { + "mass": 1583.9995342027396, + "mass_offset": 2.985370962348627e-07, + "rho_range": [ + 0.9997466299682856, + 1.0001625902950764 + ], + "rho_error": 0.0002533700317144394, + "max_speed": 0.0019844117268443795, + "u_mean": 6.670549777195117e-10, + "v_mean": -0.0003554221071583439, + "boundary_error": 2.8033082189447313e-08, + "top_density_error": 1.7136335372924805e-07, + "top_velocity_range": [ + -0.00045799648631004015, + -0.00025590884088620925 + ], + "mass_flux_by_y": [ + -0.017064182087779045, + -0.017063824459910393, + -0.01706433854997158, + -0.017063675448298454, + -0.017064251005649567, + -0.017061937600374222, + -0.017063487321138382, + -0.017061088234186172, + -0.017062775790691376, + -0.01705954037606716, + -0.017062360420823097, + -0.017058730125427246, + -0.01706111989915371, + -0.01705755665898323, + -0.017061153426766396, + -0.01705734059214592, + -0.017062555998563766, + -0.017058202996850014, + -0.017062176018953323, + -0.01705753244459629, + -0.01706107147037983, + -0.017055537551641464, + -0.017059996724128723, + -0.017054088413715363, + -0.017060430720448494, + -0.017053702846169472, + -0.017060348764061928, + -0.017053313553333282, + -0.017061466351151466, + -0.017054179683327675, + -0.017061559483408928, + -0.01705295778810978, + -0.01706150360405445 + ], + "volume_flux_by_y": [ + -0.017066904676970023, + -0.017065825663262802, + -0.01706579139508598, + -0.0170647327091107, + -0.01706502906263895, + -0.01706252009666272, + -0.017063929184436027, + -0.017061427190200904, + -0.017063038233974134, + -0.017059746145142912, + -0.017062522864937996, + -0.01705885853267111, + -0.017061222071622195, + -0.01705763845226271, + -0.017061218855542952, + -0.01705739367977013, + -0.01706259845165673, + -0.017058236801654646, + -0.017062202969884283, + -0.017057553883327997, + -0.01706108857339222, + -0.017055551353092224, + -0.017060007138556765, + -0.017054097321270573, + -0.017060437268824346, + -0.01705370735387013, + -0.01706035189135121, + -0.017053316611194635, + -0.01706146784034004, + -0.017054180261807647, + -0.017061559378380317, + -0.01705295784250049, + -0.01706150398342033 + ], + "flux_error": 0.00037843990486683614, + "flux_span": 0.00013740466539994412, + "symmetry": { + "rho": 4.4330954551696777e-07, + "u": 0.00011827712336100746, + "v": 0.00012759528868056653 + }, + "center_v": -0.001084326971888204, + "max_abs_u": 0.00043264899895791064, + "nonuniform": true, + "finite": true, + "u_change": 4.719180072238416e-05, + "v_change": 5.975644054364836e-05, + "u_signed_change": 8.481078147602893e-10, + "v_signed_change": -7.927909425322853e-09, + "step": 5709, + "mass_change": 3.512214966437636e-08, + "fluctuation": { + "samples": 519, + "first_step": 5191, + "rms": [ + 5.4089501289979373e-08, + 6.442974821827162e-08 + ], + "max_node_peak_to_peak": [ + 4.43309187653408e-07, + 7.468705287327947e-07 + ] + }, + "mass_window_span": 3.512214966437636e-08 + }, + { + "mass": 1583.9994819257408, + "mass_offset": 3.315402518689991e-07, + "rho_range": [ + 0.999746534973383, + 1.000162387266755 + ], + "rho_error": 0.00025346502661705017, + "max_speed": 0.0019844100522864103, + "u_mean": 4.153245093729842e-09, + "v_mean": -0.00035542111637313495, + "boundary_error": 3.5680162969249814e-08, + "top_density_error": 1.993030309677124e-07, + "top_velocity_range": [ + -0.00045776370939165954, + -0.00025555866261351074 + ], + "mass_flux_by_y": [ + -0.017064234241843224, + -0.01706422120332718, + -0.017064044252038002, + -0.01706465147435665, + -0.01706310547888279, + -0.01706392876803875, + -0.017062215134501457, + -0.017063936218619347, + -0.017061233520507812, + -0.017063098028302193, + -0.017060551792383194, + -0.01706274226307869, + -0.017059078440070152, + -0.017061756923794746, + -0.01705780252814293, + -0.01706143654882908, + -0.017058027908205986, + -0.017061706632375717, + -0.017056943848729134, + -0.017060555517673492, + -0.017056120559573174, + -0.017059843987226486, + -0.017055312171578407, + -0.017059791833162308, + -0.017054906114935875, + -0.017059631645679474, + -0.017054684460163116, + -0.017060639336705208, + -0.017054835334420204, + -0.01706051267683506, + -0.01705297827720642, + -0.017059624195098877, + -0.017052244395017624 + ], + "volume_flux_by_y": [ + -0.01706695954043496, + -0.017066225833329382, + -0.017065500731123503, + -0.017065711566753343, + -0.017063887651153145, + -0.01706451319579122, + -0.017062657776068513, + -0.017064275522282943, + -0.017061495956105413, + -0.017063303556983614, + -0.017060713037410587, + -0.017062869761263054, + -0.017059179066245513, + -0.017061837112991564, + -0.017057866341843884, + -0.017061488804938494, + -0.017058069831331575, + -0.017061739822799897, + -0.017056970831750767, + -0.017060577503930884, + -0.017056138496689882, + -0.017059858270362785, + -0.01705532325275637, + -0.017059800768387624, + -0.01705491320396487, + -0.017059637240804615, + -0.017054689207955085, + -0.017060642986540538, + -0.01705483808077292, + -0.017060514681758912, + -0.017052979057997575, + -0.01705962486418274, + -0.017052244778339606 + ], + "flux_error": 0.0007021100524159079, + "flux_span": 0.00037074159155543176, + "symmetry": { + "rho": 4.507601261138916e-07, + "u": 8.474766424038235e-05, + "v": 0.00018998837628112267 + }, + "center_v": -0.0010843716444831116, + "max_abs_u": 0.00043271979792925915, + "nonuniform": true, + "finite": true, + "u_change": 5.04339322934357e-05, + "v_change": 5.9773245056474365e-05, + "u_signed_change": 3.486190116010215e-09, + "v_signed_change": 9.907852089888859e-10, + "step": 6228, + "mass_change": 3.300315563413643e-08, + "fluctuation": { + "samples": 519, + "first_step": 5710, + "rms": [ + 5.407978143881127e-08, + 6.539912006201944e-08 + ], + "max_node_peak_to_peak": [ + 4.4517049157668056e-07, + 7.431988136543852e-07 + ] + }, + "mass_window_span": 3.512214966437636e-08 + }, + { + "mass": 1583.9994448386133, + "mass_offset": 3.549538423995802e-07, + "rho_range": [ + 0.9997462872415781, + 1.0001623574644327 + ], + "rho_error": 0.0002537127584218979, + "max_speed": 0.0019844105329210795, + "u_mean": 5.371255965398996e-09, + "v_mean": -0.0003554107897921167, + "boundary_error": 3.7523040365616475e-08, + "top_density_error": 1.8067657947540283e-07, + "top_velocity_range": [ + -0.00045789397686341065, + -0.00025580454227760053 + ], + "mass_flux_by_y": [ + -0.01706419698894024, + -0.017063898965716362, + -0.01706385426223278, + -0.01706218719482422, + -0.017063353210687637, + -0.01706179603934288, + -0.01706322282552719, + -0.017060518264770508, + -0.017063014209270477, + -0.01705940067768097, + -0.017061995342373848, + -0.017058443278074265, + -0.017061199992895126, + -0.017056947574019432, + -0.017060520127415657, + -0.017056383192539215, + -0.01706087961792946, + -0.017055995762348175, + -0.01706022210419178, + -0.017055638134479523, + -0.017060082405805588, + -0.017055921256542206, + -0.017060918733477592, + -0.017055850476026535, + -0.017059816047549248, + -0.01705574057996273, + -0.017059214413166046, + -0.017055274918675423, + -0.017059432342648506, + -0.017054961994290352, + -0.017058059573173523, + -0.01705314591526985, + -0.01705792360007763 + ], + "volume_flux_by_y": [ + -0.017066924495752474, + -0.01706590612139365, + -0.01706531097848553, + -0.01706324818255044, + -0.017064135801339957, + -0.01706238144040235, + -0.017063668091854813, + -0.017060859295869195, + -0.017063278846654376, + -0.01705960765582485, + -0.01706215898070192, + -0.01705857292139895, + -0.017061301870538295, + -0.017057028815907566, + -0.017060585274331228, + -0.017056435944391744, + -0.017060922100257572, + -0.01705602994484875, + -0.017060249442029485, + -0.017055660470018125, + -0.01706010045241068, + -0.01705593622542196, + -0.01706093037488403, + -0.017055860447571205, + -0.017059823737569584, + -0.01705574649624441, + -0.017059219217546988, + -0.017055278782842017, + -0.017059435227274874, + -0.01705496335255019, + -0.017058060080252097, + -0.017053145789238944, + -0.017057924172354688 + ], + "flux_error": 0.00041439903140502894, + "flux_span": 0.000187389852106245, + "symmetry": { + "rho": 4.731118679046631e-07, + "u": 9.592499938507637e-05, + "v": 0.00022912694365188 + }, + "center_v": -0.0010843739656978845, + "max_abs_u": 0.0004327328054398184, + "nonuniform": true, + "finite": true, + "u_change": 4.794602342957015e-05, + "v_change": 5.573211329723268e-05, + "u_signed_change": 1.2180108716688346e-09, + "v_signed_change": 1.0326581018207854e-08, + "step": 6747, + "mass_change": 2.341359053058115e-08, + "fluctuation": { + "samples": 519, + "first_step": 6229, + "rms": [ + 5.330454039340254e-08, + 6.170458377178362e-08 + ], + "max_node_peak_to_peak": [ + 4.2470645227663634e-07, + 7.916309928524099e-07 + ] + }, + "mass_window_span": 5.641674616471758e-08 + }, + { + "mass": 1583.999512847513, + "mass_offset": 3.120189311719885e-07, + "rho_range": [ + 0.9997466243803501, + 1.0001623667776585 + ], + "rho_error": 0.0002533756196498871, + "max_speed": 0.0019844098748213607, + "u_mean": 6.303628536663599e-09, + "v_mean": -0.00035541106015553016, + "boundary_error": 2.3681188265553543e-08, + "top_density_error": 1.7695128917694092e-07, + "top_velocity_range": [ + -0.0004578642530073812, + -0.0002555567994921833 + ], + "mass_flux_by_y": [ + -0.017064223065972328, + -0.017064247280359268, + -0.017063435167074203, + -0.017063843086361885, + -0.017061475664377213, + -0.017062637954950333, + -0.01706075109541416, + -0.01706303469836712, + -0.01706056483089924, + -0.01706216111779213, + -0.01705928146839142, + -0.01706194318830967, + -0.017057830467820168, + -0.01706073433160782, + -0.017056697979569435, + -0.01706073433160782, + -0.0170571431517601, + -0.017061257734894753, + -0.01705738715827465, + -0.01706044189631939, + -0.017056409269571304, + -0.0170594435185194, + -0.017055870965123177, + -0.01705937273800373, + -0.017055107280611992, + -0.017058944329619408, + -0.01705441065132618, + -0.017059819772839546, + -0.01705542765557766, + -0.017059968784451485, + -0.017053479328751564, + -0.01705990545451641, + -0.017052505165338516 + ], + "volume_flux_by_y": [ + -0.01706694451614762, + -0.017066247750027307, + -0.01706488735005033, + -0.017064900220662496, + -0.017062254266855568, + -0.01706322100879231, + -0.01706119337944976, + -0.017063374262802522, + -0.017060827233713202, + -0.01706236646749808, + -0.017059443832731634, + -0.01706207077625323, + -0.017057931726039803, + -0.017060814893447317, + -0.017056762921289083, + -0.0170607865636158, + -0.01705718486838989, + -0.017061291056101727, + -0.017057413420377456, + -0.017060463434656642, + -0.017056426110636458, + -0.01705945705106543, + -0.017055881977670294, + -0.01705938151848751, + -0.01705511435768906, + -0.017058949811535634, + -0.01705441462307932, + -0.01705982333698467, + -0.017055429764260582, + -0.017059969766045284, + -0.017053479533329727, + -0.017059906020476516, + -0.017052505466197423 + ], + "flux_error": 0.0006903426624485928, + "flux_span": 0.00031977416604413525, + "symmetry": { + "rho": 5.532056093215942e-07, + "u": 0.00010803493816575669, + "v": 0.00021604377545538715 + }, + "center_v": -0.0010842487140552974, + "max_abs_u": 0.00043260054924695667, + "nonuniform": true, + "finite": true, + "u_change": 4.907399006122449e-05, + "v_change": 5.976952902328246e-05, + "u_signed_change": 9.323725712647373e-10, + "v_signed_change": -2.70363413349346e-10, + "step": 7266, + "mass_change": 4.2934911227591726e-08, + "fluctuation": { + "samples": 519, + "first_step": 6748, + "rms": [ + 5.446479908928219e-08, + 6.601610116933408e-08 + ], + "max_node_peak_to_peak": [ + 4.3585411087300224e-07, + 8.046607770093093e-07 + ] + }, + "mass_window_span": 5.641674616471758e-08 + }, + { + "mass": 1583.9994569849223, + "mass_offset": 3.4728571805374526e-07, + "rho_range": [ + 0.9997465927153826, + 1.0001623667776585 + ], + "rho_error": 0.000253407284617424, + "max_speed": 0.0019844304319609823, + "u_mean": 9.30743355384898e-10, + "v_mean": -0.0003554231450633062, + "boundary_error": 3.548746868662755e-08, + "top_density_error": 1.862645149230957e-07, + "top_velocity_range": [ + -0.00045799648460387033, + -0.0002558827638516914 + ], + "mass_flux_by_y": [ + -0.017064275220036507, + -0.017063554376363754, + -0.01706341840326786, + -0.017062373459339142, + -0.017063461244106293, + -0.01706206053495407, + -0.01706301048398018, + -0.017060548067092896, + -0.017062455415725708, + -0.01705923117697239, + -0.01706165447831154, + -0.01705872267484665, + -0.01706198789179325, + -0.017057888209819794, + -0.01706141233444214, + -0.017057279124855995, + -0.017061930149793625, + -0.017057428136467934, + -0.01706128567457199, + -0.01705709472298622, + -0.01706046797335148, + -0.017056742683053017, + -0.01706060767173767, + -0.017056936398148537, + -0.01706034317612648, + -0.017056776210665703, + -0.017059842124581337, + -0.01705651357769966, + -0.01706012524664402, + -0.017056822776794434, + -0.01705940067768097, + -0.017055194824934006, + -0.017058754339814186 + ], + "volume_flux_by_y": [ + -0.017066998230538855, + -0.01706555664735025, + -0.017064873384809942, + -0.017063433570981085, + -0.017064243243880436, + -0.017062645897905987, + -0.017063454656478558, + -0.01706088911108724, + -0.017062719454260515, + -0.01705943739617323, + -0.01706181713859206, + -0.017058851017464412, + -0.017062089605736006, + -0.017057969300275873, + -0.01706147687961479, + -0.01705733144261392, + -0.01706197172504629, + -0.017057461780273165, + -0.017061312657712623, + -0.017057117084452893, + -0.01706048654547799, + -0.01705675822157514, + -0.017060619553521117, + -0.017056946079545138, + -0.01706035102837324, + -0.01705678208101233, + -0.01705984713853779, + -0.017056517702204798, + -0.017060127981600663, + -0.01705682453867193, + -0.01705940096892989, + -0.017055195057687888, + -0.017058754657890942 + ], + "flux_error": 0.0003835206580670535, + "flux_span": 0.00012376242903844155, + "symmetry": { + "rho": 4.936009645462036e-07, + "u": 9.220286437776733e-05, + "v": 0.0001993254412481038 + }, + "center_v": -0.0010842787920077842, + "max_abs_u": 0.0004326843750699679, + "nonuniform": true, + "finite": true, + "u_change": 4.946886542016209e-05, + "v_change": 6.152294632439298e-05, + "u_signed_change": -5.372885181278701e-09, + "v_signed_change": -1.2084907776071523e-08, + "step": 7785, + "mass_change": 3.526678688175678e-08, + "fluctuation": { + "samples": 519, + "first_step": 7267, + "rms": [ + 5.4290006219431356e-08, + 6.668871117440937e-08 + ], + "max_node_peak_to_peak": [ + 4.3772565683065467e-07, + 7.972277693433431e-07 + ] + }, + "mass_window_span": 5.641674616471758e-08 + }, + { + "mass": 1583.999448897317, + "mass_offset": 3.5239152941850763e-07, + "rho_range": [ + 0.9997465182095766, + 1.0001623667776585 + ], + "rho_error": 0.00025348179042339325, + "max_speed": 0.0019844100744695436, + "u_mean": 8.42028018370271e-09, + "v_mean": -0.00035542536324654973, + "boundary_error": 3.566565909382709e-08, + "top_density_error": 2.1420419216156006e-07, + "top_velocity_range": [ + -0.0004579201170086817, + -0.000255446901991337 + ], + "mass_flux_by_y": [ + -0.017064187675714493, + -0.017064249143004417, + -0.017063500359654427, + -0.017064176499843597, + -0.017062488943338394, + -0.017064271494746208, + -0.017061563208699226, + -0.01706320233643055, + -0.017060473561286926, + -0.017063083127141, + -0.01705973781645298, + -0.017062965780496597, + -0.017059383913874626, + -0.01706281676888466, + -0.017058925703167915, + -0.017062349244952202, + -0.01705838553607464, + -0.017061587423086166, + -0.017057225108146667, + -0.017061278223991394, + -0.017057184129953384, + -0.017060639336705208, + -0.017056066542863846, + -0.01705957017838955, + -0.01705479435622692, + -0.017059065401554108, + -0.017054829746484756, + -0.017060190439224243, + -0.01705612987279892, + -0.01706099510192871, + -0.017054127529263496, + -0.017059892416000366, + -0.01705377921462059 + ], + "volume_flux_by_y": [ + -0.017066911339581287, + -0.01706625201932495, + -0.017064954986895732, + -0.017065236268508074, + -0.017063269776454407, + -0.017064855686139732, + -0.017062006229535694, + -0.017063542558602676, + -0.017060737212346404, + -0.017063289343302136, + -0.01705990034795809, + -0.017063094166465932, + -0.017059485883813147, + -0.017062898236516022, + -0.017058991468530717, + -0.017062401901015847, + -0.017058428125635943, + -0.017061621652952205, + -0.01705725296853193, + -0.017061301026943105, + -0.01705720208967627, + -0.01706065350078566, + -0.017056077339350932, + -0.017059579186374248, + -0.017054801388358302, + -0.01705907093219763, + -0.017054834496253342, + -0.017060194576876575, + -0.017056132538505138, + -0.017060996872020312, + -0.017054128575359713, + -0.017059892791773078, + -0.01705377989594948 + ], + "flux_error": 0.0007086374924729209, + "flux_span": 0.000332761594413488, + "symmetry": { + "rho": 4.4889748096466064e-07, + "u": 0.00012572838760108854, + "v": 0.00016763658923483094 + }, + "center_v": -0.001084295299849185, + "max_abs_u": 0.0004326825180051591, + "nonuniform": true, + "finite": true, + "u_change": 4.9989008922856146e-05, + "v_change": 5.7439469894667905e-05, + "u_signed_change": 7.489536828318501e-09, + "v_signed_change": -2.2181832435103885e-09, + "step": 8304, + "mass_change": 5.10581136476236e-09, + "fluctuation": { + "samples": 519, + "first_step": 7786, + "rms": [ + 5.514830673551575e-08, + 6.233175357810105e-08 + ], + "max_node_peak_to_peak": [ + 4.433250205133064e-07, + 7.65491027374045e-07 + ] + }, + "mass_window_span": 4.2934911227591726e-08 + }, + { + "mass": 1583.9994664434344, + "mass_offset": 3.413144352093733e-07, + "rho_range": [ + 0.9997467994689941, + 1.0001623667776585 + ], + "rho_error": 0.0002532005310058594, + "max_speed": 0.0019844334483269453, + "u_mean": 6.353068838508542e-09, + "v_mean": -0.0003554119285824077, + "boundary_error": 3.5628363417731027e-08, + "top_density_error": 2.2910535335540771e-07, + "top_velocity_range": [ + -0.0004578661182110498, + -0.0002558827600387408 + ], + "mass_flux_by_y": [ + -0.017064224928617477, + -0.01706414856016636, + -0.01706436462700367, + -0.017063505947589874, + -0.01706402748823166, + -0.017062528058886528, + -0.017064036801457405, + -0.017061173915863037, + -0.01706252060830593, + -0.017059622332453728, + -0.017062200233340263, + -0.017059490084648132, + -0.017062265425920486, + -0.01705854758620262, + -0.01706196554005146, + -0.01705780439078808, + -0.017061568796634674, + -0.017056681215763092, + -0.01706095226109028, + -0.017055628821253777, + -0.01705954410135746, + -0.01705438829958439, + -0.01705957017838955, + -0.01705370657145977, + -0.01705901138484478, + -0.017053188756108284, + -0.017058851197361946, + -0.017053809016942978, + -0.017059944570064545, + -0.0170532688498497, + -0.017058975994586945, + -0.017051002010703087, + -0.0170593298971653 + ], + "volume_flux_by_y": [ + -0.017066945049312915, + -0.01706614882844061, + -0.017065816902486403, + -0.017064562857358752, + -0.01706480687517666, + -0.017063111489884868, + -0.0170644787415135, + -0.017061513140993308, + -0.017062784769022833, + -0.017059828452963728, + -0.017062363381636386, + -0.01705961932534942, + -0.017062367478322876, + -0.01705862881521166, + -0.01706203102476457, + -0.01705785742072622, + -0.0170616115585603, + -0.01705671602797662, + -0.017060980014811586, + -0.017055651427910448, + -0.017059562286940933, + -0.017054402965429635, + -0.017059581776789214, + -0.017053716213274134, + -0.017059019071015695, + -0.017053194247627693, + -0.017058855722368402, + -0.017053812663792012, + -0.01705994680067565, + -0.017053269876497624, + -0.017058976474356183, + -0.017051002627095538, + -0.017059330566247442 + ], + "flux_error": 0.0004615602568978071, + "flux_span": 0.00020561588616940817, + "symmetry": { + "rho": 4.544854164123535e-07, + "u": 0.00010803321743005997, + "v": 0.0001424939721921838 + }, + "center_v": -0.0010843567266872872, + "max_abs_u": 0.00043271788283086955, + "nonuniform": true, + "finite": true, + "u_change": 5.063494368419444e-05, + "v_change": 5.933742665122894e-05, + "u_signed_change": -2.0672113451948987e-09, + "v_signed_change": 1.3434664141966695e-08, + "step": 8823, + "mass_change": 1.107709420913437e-08, + "fluctuation": { + "samples": 519, + "first_step": 8305, + "rms": [ + 5.53417391366421e-08, + 6.698256148301745e-08 + ], + "max_node_peak_to_peak": [ + 4.5262723156257547e-07, + 8.17704545272779e-07 + ] + }, + "mass_window_span": 4.2934911227591726e-08 + }, + { + "mass": 1583.999471142888, + "mass_offset": 3.3834760838457007e-07, + "rho_range": [ + 0.999746523797512, + 1.0001624003052711 + ], + "rho_error": 0.00025347620248794556, + "max_speed": 0.001984410074466045, + "u_mean": 5.948912180601281e-09, + "v_mean": -0.0003554094978901691, + "boundary_error": 3.75188963875955e-08, + "top_density_error": 1.7508864402770996e-07, + "top_velocity_range": [ + -0.00045774129967057856, + -0.0002554506367982193 + ], + "mass_flux_by_y": [ + -0.01706417091190815, + -0.017064247280359268, + -0.0170634463429451, + -0.01706397533416748, + -0.017062431201338768, + -0.017062950879335403, + -0.01706061139702797, + -0.017062408849596977, + -0.017059698700904846, + -0.017061039805412292, + -0.017058197408914566, + -0.01706140674650669, + -0.017058545723557472, + -0.017061328515410423, + -0.017057063058018684, + -0.01706082932651043, + -0.01705649495124817, + -0.0170611459761858, + -0.017055802047252655, + -0.01706071011722088, + -0.017055630683898926, + -0.0170610249042511, + -0.01705494523048401, + -0.01706056110560894, + -0.017054323107004166, + -0.017060494050383568, + -0.017053933814167976, + -0.0170606542378664, + -0.017054636031389236, + -0.01706118695437908, + -0.017052551731467247, + -0.017059875652194023, + -0.01705165021121502 + ], + "volume_flux_by_y": [ + -0.017066896590937082, + -0.017066254246347376, + -0.017064903317374494, + -0.017065036824422786, + -0.017063214043578055, + -0.017063536882967002, + -0.01706105620169577, + -0.017062750816423236, + -0.017059963679278624, + -0.01706124658211755, + -0.0170583612706518, + -0.017061536234639862, + -0.017058647847249128, + -0.01706140970171227, + -0.01705712757056399, + -0.017060881312338794, + -0.017056536446785266, + -0.01706118002701759, + -0.017055829115612396, + -0.01706073218249162, + -0.017055648567805212, + -0.017061039451821945, + -0.017054956629344663, + -0.017060570484510956, + -0.017054329992850198, + -0.01706049906811822, + -0.01705393748951921, + -0.017060657576638185, + -0.01705463808715503, + -0.017061187936099197, + -0.0170525520813997, + -0.017059875750845048, + -0.017051650647715626 + ], + "flux_error": 0.0007362634261529635, + "flux_span": 0.00031497210494924326, + "symmetry": { + "rho": 5.420297384262085e-07, + "u": 7.450298254140387e-05, + "v": 0.00024026693667812227 + }, + "center_v": -0.0010843347095179337, + "max_abs_u": 0.000432706830717108, + "nonuniform": true, + "finite": true, + "u_change": 4.877692210769506e-05, + "v_change": 6.244959315297692e-05, + "u_signed_change": -4.0415665790722006e-10, + "v_signed_change": 2.430692238606993e-09, + "step": 9342, + "mass_change": 2.966826824803186e-09, + "fluctuation": { + "samples": 519, + "first_step": 8824, + "rms": [ + 5.5394432427306825e-08, + 6.699860188087673e-08 + ], + "max_node_peak_to_peak": [ + 4.5266326222358775e-07, + 7.692844905660525e-07 + ] + }, + "mass_window_span": 4.037259824651914e-08 + }, + { + "mass": 1583.9994534775615, + "mass_offset": 3.4949996098323575e-07, + "rho_range": [ + 0.9997465275228024, + 1.0001623500138521 + ], + "rho_error": 0.0002534724771976471, + "max_speed": 0.001984410067075166, + "u_mean": 1.093834682523294e-09, + "v_mean": -0.0003554234746220018, + "boundary_error": 2.7388958911619965e-08, + "top_density_error": 1.7136335372924805e-07, + "top_velocity_range": [ + -0.00045786428370957384, + -0.0002558063939640308 + ], + "mass_flux_by_y": [ + -0.017064226791262627, + -0.017064018175005913, + -0.017064088955521584, + -0.01706322282552719, + -0.01706453040242195, + -0.0170622356235981, + -0.017064131796360016, + -0.01706101931631565, + -0.017063718289136887, + -0.017060106620192528, + -0.01706312596797943, + -0.017059143632650375, + -0.017062896862626076, + -0.017058396711945534, + -0.017062073573470116, + -0.017056871205568314, + -0.017061494290828705, + -0.01705612987279892, + -0.01706070639193058, + -0.017055591568350792, + -0.017060577869415283, + -0.017055151984095573, + -0.017060499638319016, + -0.017054522410035133, + -0.01706000044941902, + -0.01705428585410118, + -0.01706024259328842, + -0.017055384814739227, + -0.017061391845345497, + -0.017055051401257515, + -0.017060931771993637, + -0.017053775489330292, + -0.017060570418834686 + ], + "volume_flux_by_y": [ + -0.01706695074494181, + -0.017066022102693222, + -0.017065543944127997, + -0.01706428299659493, + -0.01706531272332555, + -0.017062821754422072, + -0.017064576666404888, + -0.01706136071781255, + -0.017063983010361963, + -0.017060313111120162, + -0.017063289183125573, + -0.01705927240863436, + -0.017062999121626204, + -0.01705847824183334, + -0.01706213875507835, + -0.017056924207752115, + -0.0170615369765775, + -0.017056163736424983, + -0.017060733433889703, + -0.01705561366948098, + -0.017060595858308256, + -0.01705516679549392, + -0.017060511071326362, + -0.017054532288870498, + -0.017060008208144684, + -0.017054291583954953, + -0.017060246776296323, + -0.017055388211590736, + -0.0170613938948514, + -0.01705505303515406, + -0.017060932299137528, + -0.01705377552931748, + -0.017060570742576445 + ], + "flux_error": 0.0004035998265008716, + "flux_span": 0.0002178393376611231, + "symmetry": { + "rho": 4.917383193969727e-07, + "u": 0.00011081517673574876, + "v": 0.00023376489720572336 + }, + "center_v": -0.0010844242446047367, + "max_abs_u": 0.0004326844202039573, + "nonuniform": true, + "finite": true, + "u_change": 4.8235116278588654e-05, + "v_change": 6.311351465213179e-05, + "u_signed_change": -4.85507749807806e-09, + "v_signed_change": -1.3976731832725999e-08, + "step": 9861, + "mass_change": 1.1152352598665643e-08, + "fluctuation": { + "samples": 519, + "first_step": 9343, + "rms": [ + 5.3290352377642184e-08, + 6.798858420879955e-08 + ], + "max_node_peak_to_peak": [ + 4.3214138518694965e-07, + 8.32600357252391e-07 + ] + }, + "mass_window_span": 1.4043921033937556e-08 + }, + { + "mass": 1583.999536080286, + "mass_offset": 2.973517765997451e-07, + "rho_range": [ + 0.999746622517705, + 1.0001626051962376 + ], + "rho_error": 0.0002533774822950363, + "max_speed": 0.001984408015398704, + "u_mean": 5.362747828191203e-09, + "v_mean": -0.0003554025625586593, + "boundary_error": 2.259644483700897e-08, + "top_density_error": 2.0675361156463623e-07, + "top_velocity_range": [ + -0.0004577637110969624, + -0.0002554487080152089 + ], + "mass_flux_by_y": [ + -0.017064206302165985, + -0.017064569517970085, + -0.017064284533262253, + -0.017064981162548065, + -0.01706329919397831, + -0.017063675448298454, + -0.01706169918179512, + -0.017063848674297333, + -0.01706104911863804, + -0.017062434926629066, + -0.01705889031291008, + -0.01706189103424549, + -0.0170578770339489, + -0.01706133596599102, + -0.017056530341506004, + -0.017061270773410797, + -0.017056694254279137, + -0.017061633989214897, + -0.017055490985512733, + -0.01706046052277088, + -0.017054297029972076, + -0.01705988682806492, + -0.017052901908755302, + -0.01705877110362053, + -0.017052434384822845, + -0.01705916039645672, + -0.01705218479037285, + -0.017059778794646263, + -0.017052192240953445, + -0.017060017213225365, + -0.017050771042704582, + -0.017058946192264557, + -0.01704956777393818 + ], + "volume_flux_by_y": [ + -0.01706692794816746, + -0.017066569819182177, + -0.017065736119360804, + -0.017066037485080794, + -0.017064076650539505, + -0.017064256892732048, + -0.017062140189002876, + -0.01706418718189145, + -0.01706131128520436, + -0.017062640094315056, + -0.01705905157589677, + -0.01706201828572814, + -0.017057978311026022, + -0.017061416206026737, + -0.017056593886611994, + -0.017061322583991505, + -0.0170567363208735, + -0.017061667888229014, + -0.017055518121880768, + -0.01706048239438617, + -0.017054314611750804, + -0.01705990101095168, + -0.017052913089057875, + -0.01705878057044353, + -0.017052441886110926, + -0.017059166547346728, + -0.017052189934353777, + -0.017059782556400525, + -0.017052194738241724, + -0.0170600185205357, + -0.017050771442860876, + -0.01705894658084474, + -0.017049568363890294 + ], + "flux_error": 0.0008469702619881968, + "flux_span": 0.0005047629680075256, + "symmetry": { + "rho": 4.917383193969727e-07, + "u": 0.00012944666763198395, + "v": 0.0002244464817592281 + }, + "center_v": -0.0010843586075704593, + "max_abs_u": 0.0004326283858887841, + "nonuniform": true, + "finite": true, + "u_change": 5.1402483881896615e-05, + "v_change": 6.686590849079071e-05, + "u_signed_change": 4.2689131456681234e-09, + "v_signed_change": 2.091206334252959e-08, + "step": 10380, + "mass_change": 5.2148184383490644e-08, + "fluctuation": { + "samples": 519, + "first_step": 9862, + "rms": [ + 5.581374655723795e-08, + 6.791753937497084e-08 + ], + "max_node_peak_to_peak": [ + 4.693980073620788e-07, + 7.804543463890462e-07 + ] + }, + "mass_window_span": 5.5039752818762556e-08 + }, + { + "mass": 1583.999496601522, + "mass_offset": 3.222752385702974e-07, + "rho_range": [ + 0.9997468423098326, + 1.000162361189723 + ], + "rho_error": 0.00025315769016742706, + "max_speed": 0.0019844092462960664, + "u_mean": 4.125723362490839e-09, + "v_mean": -0.0003553984789951551, + "boundary_error": 3.7353137315979286e-08, + "top_density_error": 1.7136335372924805e-07, + "top_velocity_range": [ + -0.0004579219805067077, + -0.00025581198428240265 + ], + "mass_flux_by_y": [ + -0.017064187675714493, + -0.017063671723008156, + -0.017064571380615234, + -0.017063017934560776, + -0.017064008861780167, + -0.017062358558177948, + -0.017064029350876808, + -0.017061175778508186, + -0.01706264540553093, + -0.017058376222848892, + -0.017061443999409676, + -0.017058052122592926, + -0.017061393707990646, + -0.01705663464963436, + -0.01706128753721714, + -0.01705651916563511, + -0.017061661928892136, + -0.017055725678801537, + -0.017060628160834312, + -0.017054634168744087, + -0.017059892416000366, + -0.017053475603461266, + -0.017059585079550743, + -0.017053112387657166, + -0.0170594472438097, + -0.017051802948117256, + -0.017058957368135452, + -0.017051702365279198, + -0.01705905795097351, + -0.01705152913928032, + -0.017058340832591057, + -0.01705002598464489, + -0.017057595774531364 + ], + "volume_flux_by_y": [ + -0.017066907060356587, + -0.017065671360410973, + -0.017066022952977898, + -0.01706407485949933, + -0.017064787626418606, + -0.017062942018073738, + -0.01706447165548877, + -0.01706151545819445, + -0.017062908730855267, + -0.01705858267231651, + -0.017061607594624724, + -0.01705818201582405, + -0.01706149672452252, + -0.017056716585284397, + -0.01706135325316864, + -0.017056572186405147, + -0.017061704444268976, + -0.01705575994602755, + -0.01706065566277259, + -0.01705465605214132, + -0.017059909810348373, + -0.017053490045377595, + -0.01705959642235296, + -0.017053122029221622, + -0.01705945453450656, + -0.01705180830311999, + -0.01705896154387626, + -0.017051705997263626, + -0.017059060013595136, + -0.017051529945299893, + -0.017058340880019784, + -0.017050026278761794, + -0.017057596064950033 + ], + "flux_error": 0.0004360410089437155, + "flux_span": 0.0001873898459826043, + "symmetry": { + "rho": 4.7497451305389404e-07, + "u": 9.49780640999414e-05, + "v": 0.00024121604850070415 + }, + "center_v": -0.0010843120864086518, + "max_abs_u": 0.0004326564546197774, + "nonuniform": true, + "finite": true, + "u_change": 5.096933382931519e-05, + "v_change": 6.707436891381034e-05, + "u_signed_change": -1.2370244657000478e-09, + "v_signed_change": 4.0835635042156005e-09, + "step": 10899, + "mass_change": 2.492346197055233e-08, + "fluctuation": { + "samples": 519, + "first_step": 10381, + "rms": [ + 5.445728341091074e-08, + 7.633522210291789e-08 + ], + "max_node_peak_to_peak": [ + 4.284096266214579e-07, + 8.456591865393069e-07 + ] + }, + "mass_window_span": 5.2148184383490644e-08 + }, + { + "mass": 1583.999458136037, + "mass_offset": 3.465590042298339e-07, + "rho_range": [ + 0.9997465070337057, + 1.0001623705029488 + ], + "rho_error": 0.00025349296629428864, + "max_speed": 0.0019844082446241846, + "u_mean": 5.471709509190618e-09, + "v_mean": -0.00035541975252984854, + "boundary_error": 3.561593152681935e-08, + "top_density_error": 2.0116567611694336e-07, + "top_velocity_range": [ + -0.00045787170188224535, + -0.0002555251330940162 + ], + "mass_flux_by_y": [ + -0.017064224928617477, + -0.017063962295651436, + -0.017063278704881668, + -0.017063872888684273, + -0.017062734812498093, + -0.0170644149184227, + -0.017062319442629814, + -0.017064254730939865, + -0.017061056569218636, + -0.017063196748495102, + -0.017059599980711937, + -0.01706281118094921, + -0.017059003934264183, + -0.01706257089972496, + -0.017058124765753746, + -0.017062528058886528, + -0.017058374360203743, + -0.017062386497855186, + -0.01705724373459816, + -0.017061004415154457, + -0.017056409269571304, + -0.017060665413737297, + -0.01705525442957878, + -0.017059972509741783, + -0.017054561525583267, + -0.01705990917980671, + -0.017054155468940735, + -0.017060287296772003, + -0.017054133117198944, + -0.017059464007616043, + -0.01705259270966053, + -0.017058195546269417, + -0.017051659524440765 + ], + "volume_flux_by_y": [ + -0.017066949991182932, + -0.017065967557457914, + -0.0170647336872387, + -0.017064932740330767, + -0.017063517092863172, + -0.017065000148331753, + -0.017062762846821213, + -0.017064595383151814, + -0.017061320082237166, + -0.017063402883691167, + -0.017059762898253984, + -0.017062938974748032, + -0.01705910505559759, + -0.017062652039914326, + -0.017058189563951914, + -0.017062580792381904, + -0.017058416686734575, + -0.01706242042716649, + -0.01705727086714371, + -0.017061026679778928, + -0.017056426869735474, + -0.017060679787192633, + -0.01705526575087296, + -0.017059981914935934, + -0.017054569170211087, + -0.017059915354079275, + -0.017054160197840406, + -0.017060291235578805, + -0.017054136103815593, + -0.017059465785921026, + -0.017052593619293767, + -0.017058196110964416, + -0.01705165970786069 + ], + "flux_error": 0.0007222855639168523, + "flux_span": 0.0003805640121194227, + "symmetry": { + "rho": 6.128102540969849e-07, + "u": 9.871755444531693e-05, + "v": 0.00016296185487111735 + }, + "center_v": -0.0010843438634786612, + "max_abs_u": 0.0004327197608518799, + "nonuniform": true, + "finite": true, + "u_change": 4.8870390690632344e-05, + "v_change": 6.431253382468429e-05, + "u_signed_change": 1.3459861466990603e-09, + "v_signed_change": -2.1273534693463405e-08, + "step": 11418, + "mass_change": 2.4283765659536502e-08, + "fluctuation": { + "samples": 519, + "first_step": 10900, + "rms": [ + 5.249950594925247e-08, + 6.750140456922549e-08 + ], + "max_node_peak_to_peak": [ + 4.5634030835062873e-07, + 8.40074329417728e-07 + ] + }, + "mass_window_span": 5.2148184383490644e-08 + }, + { + "mass": 1583.999435706064, + "mass_offset": 3.607193405850777e-07, + "rho_range": [ + 0.999746523797512, + 1.0001624003052711 + ], + "rho_error": 0.00025347620248794556, + "max_speed": 0.001984430343227547, + "u_mean": 8.320989666328158e-09, + "v_mean": -0.0003554184059886043, + "boundary_error": 3.561178756332668e-08, + "top_density_error": 1.862645149230957e-07, + "top_velocity_range": [ + -0.00045774129455492115, + -0.0002558827638516914 + ], + "mass_flux_by_y": [ + -0.017064254730939865, + -0.01706397347152233, + -0.017064139246940613, + -0.017063407227396965, + -0.017063230276107788, + -0.017061661928892136, + -0.017062677070498466, + -0.01706085167825222, + -0.017062785103917122, + -0.01706026680767536, + -0.01706276834011078, + -0.01705983281135559, + -0.017062177881598473, + -0.017058387398719788, + -0.017061367630958557, + -0.017057856544852257, + -0.017061656340956688, + -0.01705741323530674, + -0.017061224207282066, + -0.0170579981058836, + -0.017061231657862663, + -0.017056621611118317, + -0.017059914767742157, + -0.0170556902885437, + -0.017059652134776115, + -0.017055479809641838, + -0.017059197649359703, + -0.0170555729418993, + -0.01705940254032612, + -0.017054880037903786, + -0.017057443037629128, + -0.01705274172127247, + -0.017056334763765335 + ], + "volume_flux_by_y": [ + -0.01706697890179118, + -0.017065977308867622, + -0.01706559405830417, + -0.017064465874544632, + -0.017064010924970535, + -0.017062246983377008, + -0.017063120959613758, + -0.01706119224195449, + -0.017063049382423694, + -0.017060472972242332, + -0.017062930639504988, + -0.017059961591640978, + -0.017062279668082367, + -0.017058468610487685, + -0.017061432778505636, + -0.017057909426454222, + -0.01706169918356438, + -0.01705744777599619, + -0.01706125208479513, + -0.017058020751944094, + -0.01706124974948886, + -0.017056636364443843, + -0.017059926258315556, + -0.017055700133358116, + -0.017059659670541547, + -0.01705548558855941, + -0.01705920204378953, + -0.017055576481572514, + -0.01705940439149252, + -0.017054881488930078, + -0.017057443442999864, + -0.017052742215535113, + -0.01705633513785718 + ], + "flux_error": 0.0004239974075370913, + "flux_span": 0.0001835700250785851, + "symmetry": { + "rho": 4.3958425521850586e-07, + "u": 8.474892800769851e-05, + "v": 0.00020584724031013778 + }, + "center_v": -0.0010844165231100149, + "max_abs_u": 0.00043273651150741674, + "nonuniform": true, + "finite": true, + "u_change": 4.81227375965284e-05, + "v_change": 5.82310036884415e-05, + "u_signed_change": 2.849280157138101e-09, + "v_signed_change": 1.3465412442488845e-09, + "step": 11937, + "mass_change": 1.4160336355243744e-08, + "fluctuation": { + "samples": 519, + "first_step": 11419, + "rms": [ + 5.2539542275739134e-08, + 6.751183581015718e-08 + ], + "max_node_peak_to_peak": [ + 4.302444611223056e-07, + 7.860504534489433e-07 + ] + }, + "mass_window_span": 6.336756398533257e-08 + }, + { + "mass": 1583.9994494970888, + "mass_offset": 3.5201288564617843e-07, + "rho_range": [ + 0.9997465033084154, + 1.0001623630523682 + ], + "rho_error": 0.0002534966915845871, + "max_speed": 0.0019844082520255528, + "u_mean": 4.643208259649677e-09, + "v_mean": -0.00035542250873987617, + "boundary_error": 3.876711376351802e-08, + "top_density_error": 1.825392246246338e-07, + "top_velocity_range": [ + -0.0004577412979653594, + -0.00025555866166148046 + ], + "mass_flux_by_y": [ + -0.017064247280359268, + -0.017064068466424942, + -0.017063003033399582, + -0.017063627019524574, + -0.017062680795788765, + -0.017064006999135017, + -0.017061443999409676, + -0.017062658444046974, + -0.017060333862900734, + -0.01706233061850071, + -0.017059633508324623, + -0.017062237486243248, + -0.017058856785297394, + -0.017062045633792877, + -0.01705870032310486, + -0.017062000930309296, + -0.01705791801214218, + -0.017061876133084297, + -0.01705772429704666, + -0.017060939222574234, + -0.01705634966492653, + -0.01706037111580372, + -0.017056025564670563, + -0.017060095444321632, + -0.017055625095963478, + -0.017060285434126854, + -0.017054889351129532, + -0.017060598358511925, + -0.01705523207783699, + -0.017060628160834312, + -0.017054127529263496, + -0.017059538513422012, + -0.017054490745067596 + ], + "volume_flux_by_y": [ + -0.017066972725721517, + -0.017066073797956185, + -0.017064458821121127, + -0.017064687622093642, + -0.017063463612852825, + -0.017064592077006717, + -0.017061887929830745, + -0.017062999424673424, + -0.01706059856575096, + -0.017062536914152812, + -0.01705979692670539, + -0.017062366477409923, + -0.017058958811784437, + -0.017062127161243643, + -0.01705876472261571, + -0.01706205274803115, + -0.01705795993097208, + -0.017061909744416057, + -0.017057750946184502, + -0.017060960763114932, + -0.017056367372253883, + -0.01706038540902617, + -0.017056036660270075, + -0.017060104750942495, + -0.01705563254421817, + -0.01706029127262, + -0.017054893646716602, + -0.01706060224223355, + -0.017055234181741617, + -0.01706062933306238, + -0.017054127006191907, + -0.017059538381237336, + -0.017054491319811738 + ], + "flux_error": 0.0006599623473811722, + "flux_span": 0.00027590072494548183, + "symmetry": { + "rho": 4.824250936508179e-07, + "u": 0.00011174955778271711, + "v": 0.0001900299228856854 + }, + "center_v": -0.0010843569286709527, + "max_abs_u": 0.0004327030085832848, + "nonuniform": true, + "finite": true, + "u_change": 5.08519894610169e-05, + "v_change": 5.464912671899741e-05, + "u_signed_change": -3.677781406678131e-09, + "v_signed_change": -4.102751271762751e-09, + "step": 12456, + "mass_change": 8.706454938899243e-09, + "fluctuation": { + "samples": 519, + "first_step": 11938, + "rms": [ + 5.6643066100066124e-08, + 6.291297626716053e-08 + ], + "max_node_peak_to_peak": [ + 4.4707731054315775e-07, + 7.711538485290193e-07 + ] + }, + "mass_window_span": 6.336756398533257e-08 + }, + { + "mass": 1583.999454498291, + "mass_offset": 3.488555610228742e-07, + "rho_range": [ + 0.9997466206550598, + 1.0001623593270779 + ], + "rho_error": 0.00025337934494018555, + "max_speed": 0.0019844098822122385, + "u_mean": 1.2055650305438677e-09, + "v_mean": -0.00035541107560503924, + "boundary_error": 3.561593152681935e-08, + "top_density_error": 2.253800630569458e-07, + "top_velocity_range": [ + -0.00045779532916814466, + -0.00025588276099197844 + ], + "mass_flux_by_y": [ + -0.017064198851585388, + -0.017063593491911888, + -0.017063584178686142, + -0.017062660306692123, + -0.017063338309526443, + -0.017061246559023857, + -0.01706237718462944, + -0.01706003025174141, + -0.017062311992049217, + -0.017058920115232468, + -0.017061682417988777, + -0.017058799043297768, + -0.017062034457921982, + -0.017057983204722404, + -0.017061710357666016, + -0.01705722138285637, + -0.017061620950698853, + -0.01705690287053585, + -0.017061324790120125, + -0.017055774107575417, + -0.01705946959555149, + -0.017054343596100807, + -0.017059162259101868, + -0.017054647207260132, + -0.017059912905097008, + -0.01705477572977543, + -0.017059804871678352, + -0.017054948955774307, + -0.017060864716768265, + -0.017054583877325058, + -0.01705869659781456, + -0.017052296549081802, + -0.01705966889858246 + ], + "volume_flux_by_y": [ + -0.017066921230553898, + -0.01706559539436179, + -0.01706503613820622, + -0.017063718185766335, + -0.017064117032340235, + -0.017061830168815077, + -0.017062819171158823, + -0.0170603701073531, + -0.017062575349181222, + -0.017059126700641036, + -0.017061846078219967, + -0.01705892825080356, + -0.017062136599241814, + -0.01705806481227895, + -0.01706177571147269, + -0.017057273809773482, + -0.0170616635446806, + -0.017056937629788133, + -0.01706135300445851, + -0.017055796726004893, + -0.017059488121438964, + -0.017054359074028712, + -0.017059174643111935, + -0.017054657761391645, + -0.017059921035073065, + -0.0170547816291955, + -0.017059809167413162, + -0.01705495234059736, + -0.017060866567531578, + -0.01705458472272358, + -0.01705869655073084, + -0.017052297174069704, + -0.017059669325975843 + ], + "flux_error": 0.000408729954039584, + "flux_span": 0.00014056967270877885, + "symmetry": { + "rho": 4.5634806156158447e-07, + "u": 9.406254480795058e-05, + "v": 0.00019004405952711425 + }, + "center_v": -0.0010843213696357188, + "max_abs_u": 0.000432602414370906, + "nonuniform": true, + "finite": true, + "u_change": 4.936336306714821e-05, + "v_change": 5.519584286474697e-05, + "u_signed_change": -3.437643229106563e-09, + "v_signed_change": 1.1433134836787232e-08, + "step": 12975, + "mass_change": 3.157324623304223e-09, + "fluctuation": { + "samples": 519, + "first_step": 12457, + "rms": [ + 5.3324010983958826e-08, + 6.545358347993433e-08 + ], + "max_node_peak_to_peak": [ + 4.6384609125196363e-07, + 7.692134364920781e-07 + ] + }, + "mass_window_span": 3.8444102014780245e-08 + }, + { + "mass": 1583.9995284415781, + "mass_offset": 3.0217419309142876e-07, + "rho_range": [ + 0.9997465834021568, + 1.0001623667776585 + ], + "rho_error": 0.00025341659784317017, + "max_speed": 0.0019844025036903283, + "u_mean": -3.774555118720995e-09, + "v_mean": -0.000355433436948378, + "boundary_error": 3.747124064431163e-08, + "top_density_error": 1.564621925354004e-07, + "top_velocity_range": [ + -0.00045799648119153075, + -0.0002555493498629297 + ], + "mass_flux_by_y": [ + -0.017064204439520836, + -0.017064141109585762, + -0.0170640479773283, + -0.01706453040242195, + -0.017063414677977562, + -0.01706440933048725, + -0.01706293784081936, + -0.017064660787582397, + -0.01706276275217533, + -0.017063923180103302, + -0.017061052843928337, + -0.01706310547888279, + -0.017060216516256332, + -0.017062941566109657, + -0.01705946773290634, + -0.01706201769411564, + -0.017058907076716423, + -0.017062151804566383, + -0.017058024182915688, + -0.0170599278062582, + -0.017057016491889954, + -0.017059728503227234, + -0.017056424170732498, + -0.01705930568277836, + -0.017056720331311226, + -0.017059162259101868, + -0.017056185752153397, + -0.017058735713362694, + -0.01705731637775898, + -0.017057975754141808, + -0.017056219279766083, + -0.017057273536920547, + -0.017057035118341446 + ], + "volume_flux_by_y": [ + -0.017066926117851128, + -0.017066142377799593, + -0.017065500050980575, + -0.0170655868456874, + -0.017064193346461122, + -0.01706499134156965, + -0.017063379349879924, + -0.017064999603525827, + -0.017063025596811755, + -0.017064128602906903, + -0.017061214594387475, + -0.017063232554750268, + -0.017060316757363633, + -0.017063021459344727, + -0.01705953122990619, + -0.017062068262540794, + -0.017058947512480164, + -0.017062184476940283, + -0.01705804988495279, + -0.017059948854813337, + -0.017057033590960002, + -0.0170597415806416, + -0.017056434069939563, + -0.017059314271199406, + -0.017056727561385092, + -0.017059167407151042, + -0.01705619023356909, + -0.017058739873067837, + -0.017057319357412466, + -0.017057977472892116, + -0.017056220206728354, + -0.017057274196359384, + -0.017057035483971236 + ], + "flux_error": 0.0005958390447387067, + "flux_span": 0.00035404347591629976, + "symmetry": { + "rho": 5.476176738739014e-07, + "u": 9.407022800153109e-05, + "v": 0.00030640210147057597 + }, + "center_v": -0.0010844219476082277, + "max_abs_u": 0.00043265645139612926, + "nonuniform": true, + "finite": true, + "u_change": 4.5217148130284586e-05, + "v_change": 5.5512993780914466e-05, + "u_signed_change": -4.980120149264401e-09, + "v_signed_change": -2.236134333869414e-08, + "step": 13494, + "mass_change": 4.668136793144545e-08, + "fluctuation": { + "samples": 519, + "first_step": 12976, + "rms": [ + 5.052933749370819e-08, + 6.652610869160415e-08 + ], + "max_node_peak_to_peak": [ + 4.898920449373221e-07, + 8.065259051552587e-07 + ] + }, + "mass_window_span": 5.854514749364892e-08 + }, + { + "mass": 1583.9995051193982, + "mass_offset": 3.1689779145582064e-07, + "rho_range": [ + 0.999746523797512, + 1.0001623649150133 + ], + "rho_error": 0.00025347620248794556, + "max_speed": 0.001984432261802314, + "u_mean": -5.62683177810534e-09, + "v_mean": -0.00035542116476968105, + "boundary_error": 2.6744224188978566e-08, + "top_density_error": 2.4959444999694824e-07, + "top_velocity_range": [ + -0.0004580188977699052, + -0.00025580454323054686 + ], + "mass_flux_by_y": [ + -0.017064189538359642, + -0.017063746228814125, + -0.017063792794942856, + -0.017062915489077568, + -0.017063599079847336, + -0.01706218533217907, + -0.017063984647393227, + -0.017061905935406685, + -0.017064016312360764, + -0.01706053875386715, + -0.017063245177268982, + -0.017059972509741783, + -0.0170627199113369, + -0.01705867052078247, + -0.017061371356248856, + -0.0170578733086586, + -0.017061695456504822, + -0.017057830467820168, + -0.01706111803650856, + -0.01705743558704853, + -0.01706058904528618, + -0.01705637015402317, + -0.01705976016819477, + -0.01705540344119072, + -0.017059003934264183, + -0.0170543622225523, + -0.017058100551366806, + -0.01705453172326088, + -0.017058970406651497, + -0.017054956406354904, + -0.017058629542589188, + -0.017053959891200066, + -0.017059041187167168 + ], + "volume_flux_by_y": [ + -0.017066913084917777, + -0.017065748272365594, + -0.017065245228125227, + -0.017063973288275816, + -0.017064378270349602, + -0.017062769091511717, + -0.017064426923083024, + -0.01706224564333777, + -0.017064278899372336, + -0.017060744220507948, + -0.01706340712879132, + -0.017060100119829516, + -0.01706282077012832, + -0.01705875082520586, + -0.017061435721574814, + -0.01705792533838879, + -0.01706173758324725, + -0.017057864262390844, + -0.01706114513809131, + -0.017057457578196312, + -0.0170606068176333, + -0.017056383995146085, + -0.017059771082951362, + -0.01705541263684526, + -0.017059011047383648, + -0.017054367602389896, + -0.01705810498796924, + -0.017054535460778678, + -0.017058973145021514, + -0.017054958497542256, + -0.01705862987003272, + -0.017053960659129765, + -0.01705904180465998 + ], + "flux_error": 0.00046202121404424035, + "flux_span": 0.0002936901996665831, + "symmetry": { + "rho": 4.880130290985107e-07, + "u": 7.82167864354165e-05, + "v": 0.00026172341900454 + }, + "center_v": -0.0010843548740818376, + "max_abs_u": 0.0004326042778832466, + "nonuniform": true, + "finite": true, + "u_change": 4.204552097340793e-05, + "v_change": 5.845736696373156e-05, + "u_signed_change": -1.8522766593844806e-09, + "v_signed_change": 1.2272178696879558e-08, + "step": 14013, + "mass_change": 1.4723598364391872e-08, + "fluctuation": { + "samples": 519, + "first_step": 13495, + "rms": [ + 4.83416802869329e-08, + 6.416837887967576e-08 + ], + "max_node_peak_to_peak": [ + 4.843145960702544e-07, + 8.492770718356133e-07 + ] + }, + "mass_window_span": 5.854514749364892e-08 + }, + { + "mass": 1583.999447049573, + "mass_offset": 3.535580344562424e-07, + "rho_range": [ + 0.9997465144842863, + 1.000162372365594 + ], + "rho_error": 0.0002534855157136917, + "max_speed": 0.0019844082298354423, + "u_mean": -8.483108032883265e-09, + "v_mean": -0.00035541647408217613, + "boundary_error": 3.752511235468117e-08, + "top_density_error": 1.8812716007232666e-07, + "top_velocity_range": [ + -0.00045792005559681893, + -0.0002554468401364456 + ], + "mass_flux_by_y": [ + -0.01706424541771412, + -0.017063703387975693, + -0.017063302919268608, + -0.017063602805137634, + -0.017062772065401077, + -0.017063621431589127, + -0.017061742022633553, + -0.017063017934560776, + -0.0170613843947649, + -0.017063377425074577, + -0.017060456797480583, + -0.017062947154045105, + -0.01705935411155224, + -0.01706167869269848, + -0.017057335004210472, + -0.017061347141861916, + -0.017057990655303, + -0.017062349244952202, + -0.017057590186595917, + -0.017060255631804466, + -0.017056012526154518, + -0.01705998182296753, + -0.017055142670869827, + -0.017058802768588066, + -0.01705465465784073, + -0.017058074474334717, + -0.01705458015203476, + -0.01705910824239254, + -0.01705494150519371, + -0.01705913618206978, + -0.017054133117198944, + -0.017059050500392914, + -0.017053334042429924 + ], + "volume_flux_by_y": [ + -0.017066969881382718, + -0.017065707347157684, + -0.017064757889674716, + -0.01706466275404783, + -0.01706355443756922, + -0.017064206777666856, + -0.017062185879329082, + -0.017063359137788146, + -0.017061648808627317, + -0.017063583805981622, + -0.01706062019871243, + -0.01706307594448668, + -0.01705945626598501, + -0.017061760296767266, + -0.01705740021142991, + -0.017061399617245572, + -0.017058032642922355, + -0.017062383030030853, + -0.017057617263583076, + -0.017060278189597794, + -0.017056030770292302, + -0.01705999669946113, + -0.01705515398310722, + -0.017058812220330254, + -0.01705466146680605, + -0.017058080020497187, + -0.01705458497805184, + -0.017059112395254414, + -0.01705494451114952, + -0.017059137991062463, + -0.017054134069485277, + -0.01705905072833317, + -0.017053334732349983 + ], + "flux_error": 0.000716821672681441, + "flux_span": 0.00039431539587352695, + "symmetry": { + "rho": 3.7439167499542236e-07, + "u": 0.00012012712373216019, + "v": 0.00019747506065431937 + }, + "center_v": -0.00108434001284089, + "max_abs_u": 0.00043272162275235495, + "nonuniform": true, + "finite": true, + "u_change": 3.898978078556537e-05, + "v_change": 5.685306238372468e-05, + "u_signed_change": -2.856276254777502e-09, + "v_signed_change": 4.690687505005168e-09, + "step": 14532, + "mass_change": 3.666024300042177e-08, + "fluctuation": { + "samples": 519, + "first_step": 14014, + "rms": [ + 4.6646904141278925e-08, + 6.401705346928312e-08 + ], + "max_node_peak_to_peak": [ + 4.302719369742757e-07, + 8.046494426571784e-07 + ] + }, + "mass_window_span": 5.138384136481364e-08 + }, + { + "mass": 1583.9995091538876, + "mass_offset": 3.1435076533512157e-07, + "rho_range": [ + 0.9997465219348669, + 1.000162372365594 + ], + "rho_error": 0.0002534780651330948, + "max_speed": 0.0019844082150467005, + "u_mean": -1.1115434158290913e-09, + "v_mean": -0.0003554196136038251, + "boundary_error": 3.560349963644977e-08, + "top_density_error": 1.8998980522155762e-07, + "top_velocity_range": [ + -0.00045794438854490643, + -0.0002558827619452161 + ], + "mass_flux_by_y": [ + -0.01706419326364994, + -0.01706346869468689, + -0.017063535749912262, + -0.017062654718756676, + -0.01706388220191002, + -0.017061790451407433, + -0.01706322841346264, + -0.017061104997992516, + -0.01706303097307682, + -0.017059113830327988, + -0.01706269569694996, + -0.01705937087535858, + -0.017062896862626076, + -0.017058033496141434, + -0.017061688005924225, + -0.01705734245479107, + -0.017061801627278328, + -0.01705707237124443, + -0.017061172053217888, + -0.017056308686733246, + -0.01706104353070259, + -0.017056679353117943, + -0.01706118695437908, + -0.017055509611964226, + -0.01706118881702423, + -0.017054449766874313, + -0.017060771584510803, + -0.01705378293991089, + -0.01706114038825035, + -0.01705280691385269, + -0.0170596893876791, + -0.017050817608833313, + -0.01706056296825409 + ], + "volume_flux_by_y": [ + -0.017066917647174412, + -0.017065472556810856, + -0.017064992249233378, + -0.01706371558149576, + -0.017064663939345488, + -0.017062375233747075, + -0.017063671746210457, + -0.01706144572724006, + -0.01706329428916397, + -0.017059319608681116, + -0.017062857462291064, + -0.017059498437073613, + -0.017062997537881534, + -0.017058113292510824, + -0.017061752323522847, + -0.017057394649734624, + -0.017061843284746248, + -0.01705710626045094, + -0.017061198852081683, + -0.017056330524469386, + -0.017061061288648288, + -0.01705669396838192, + -0.01706119827453729, + -0.017055518931020183, + -0.017061195465944572, + -0.017054454896635363, + -0.01706077593989408, + -0.017053786389342962, + -0.01706114266376907, + -0.01705280774011582, + -0.0170596897469295, + -0.01705081804742334, + -0.017060563391951188 + ], + "flux_error": 0.00033400495523749685, + "flux_span": 0.00010793742353416658, + "symmetry": { + "rho": 4.4330954551696777e-07, + "u": 9.406434826229173e-05, + "v": 0.00018346417013568564 + }, + "center_v": -0.0010843269920860139, + "max_abs_u": 0.00043270122889425236, + "nonuniform": true, + "finite": true, + "u_change": 4.006388277968182e-05, + "v_change": 6.078198552495385e-05, + "u_signed_change": 7.3715646170539926e-09, + "v_signed_change": -3.1395216489751886e-09, + "step": 15051, + "mass_change": 3.920726912112082e-08, + "fluctuation": { + "samples": 519, + "first_step": 14533, + "rms": [ + 4.617866193723255e-08, + 6.701563123688456e-08 + ], + "max_node_peak_to_peak": [ + 4.563451285651823e-07, + 7.916315485595828e-07 + ] + }, + "mass_window_span": 5.138384136481364e-08 + }, + { + "mass": 1583.9994678758085, + "mass_offset": 3.4041015862266155e-07, + "rho_range": [ + 0.999746510758996, + 1.0001624953001738 + ], + "rho_error": 0.0002534892410039902, + "max_speed": 0.0019844100448920326, + "u_mean": 1.4661429133940873e-09, + "v_mean": -0.00035539486127321934, + "boundary_error": 3.747124064431163e-08, + "top_density_error": 1.9371509552001953e-07, + "top_velocity_range": [ + -0.0004578642530073812, + -0.000255446901991337 + ], + "mass_flux_by_y": [ + -0.01706419326364994, + -0.017064154148101807, + -0.017063166946172714, + -0.017063723877072334, + -0.01706211268901825, + -0.01706334576010704, + -0.017061777412891388, + -0.017063595354557037, + -0.017060261219739914, + -0.017062189057469368, + -0.017058148980140686, + -0.01706160604953766, + -0.017057383432984352, + -0.01706109754741192, + -0.017055677250027657, + -0.017060527577996254, + -0.017055904492735863, + -0.017060883343219757, + -0.017055412754416466, + -0.017059940844774246, + -0.017053963616490364, + -0.017059355974197388, + -0.017052754759788513, + -0.017058486118912697, + -0.01705234870314598, + -0.017058614641427994, + -0.01705157198011875, + -0.017059242352843285, + -0.017052534967660904, + -0.017059728503227234, + -0.017051147297024727, + -0.017059234902262688, + -0.01705070771276951 + ], + "volume_flux_by_y": [ + -0.017066918466479668, + -0.01706615755105795, + -0.01706462169122288, + -0.01706478342891194, + -0.017062893778353197, + -0.017063930394144566, + -0.017062221196516687, + -0.017063936358343454, + -0.017060524440116173, + -0.017062395339575435, + -0.017058312463377228, + -0.017061734660953332, + -0.017057485448284, + -0.017061179176008356, + -0.017055742500813924, + -0.017060580387702213, + -0.017055947007741917, + -0.017060918070271037, + -0.017055440427109856, + -0.017059963257544337, + -0.017053981636715353, + -0.017059370665225893, + -0.017052766540627956, + -0.017058496233861385, + -0.017052356555681283, + -0.017058620471042972, + -0.01705157699124209, + -0.017059246146846663, + -0.017052537496956847, + -0.017059729850630055, + -0.017051147651349484, + -0.01705923542323004, + -0.017050708548841186 + ], + "flux_error": 0.0008519475854722156, + "flux_span": 0.0004636179849563692, + "symmetry": { + "rho": 4.76837158203125e-07, + "u": 0.00010432495253478769, + "v": 0.0001909440662954719 + }, + "center_v": -0.0010842766606841932, + "max_abs_u": 0.0004326620225915754, + "nonuniform": true, + "finite": true, + "u_change": 4.280487754117373e-05, + "v_change": 6.719461434248612e-05, + "u_signed_change": 2.577686329223033e-09, + "v_signed_change": 2.475233060577376e-08, + "step": 15570, + "mass_change": 2.6059393287539996e-08, + "fluctuation": { + "samples": 519, + "first_step": 15052, + "rms": [ + 4.6718551044404116e-08, + 7.013569445371492e-08 + ], + "max_node_peak_to_peak": [ + 4.228285966103012e-07, + 7.431230479205291e-07 + ] + }, + "mass_window_span": 5.138384136481364e-08 + }, + { + "mass": 1583.9995099194348, + "mass_offset": 3.138674653648504e-07, + "rho_range": [ + 0.9997465275228024, + 1.0001623686403036 + ], + "rho_error": 0.0002534724771976471, + "max_speed": 0.0019844303875942637, + "u_mean": -2.4315217748214237e-09, + "v_mean": -0.0003554498347479755, + "boundary_error": 3.560971558163456e-08, + "top_density_error": 1.7508864402770996e-07, + "top_velocity_range": [ + -0.0004579201221263377, + -0.00025581384645124186 + ], + "mass_flux_by_y": [ + -0.017064226791262627, + -0.017063533887267113, + -0.01706368662416935, + -0.017063632607460022, + -0.017065251246094704, + -0.017064126208424568, + -0.017065463587641716, + -0.017063597217202187, + -0.01706554926931858, + -0.017061851918697357, + -0.017064567655324936, + -0.01706121675670147, + -0.017063364386558533, + -0.017058715224266052, + -0.017061717808246613, + -0.017057733610272408, + -0.017062120139598846, + -0.017058711498975754, + -0.017062265425920486, + -0.017058266326785088, + -0.017062006518244743, + -0.017057742923498154, + -0.017061609774827957, + -0.017057113349437714, + -0.017062289640307426, + -0.01705712452530861, + -0.017062116414308548, + -0.017056353390216827, + -0.01706216298043728, + -0.01705598644912243, + -0.017061548307538033, + -0.01705443114042282, + -0.017061810940504074 + ], + "volume_flux_by_y": [ + -0.01706694971509088, + -0.017065535444518477, + -0.01706514063203249, + -0.017064691329767637, + -0.017066031640856134, + -0.01706470980793542, + -0.017065906304075278, + -0.01706393780903469, + -0.017065813016661456, + -0.017062058148978092, + -0.017064730735871003, + -0.017061345110779065, + -0.01706346590552542, + -0.01705879656574759, + -0.017061782972152405, + -0.017057786252321447, + -0.01706216205417752, + -0.017058745151342418, + -0.017062292203018373, + -0.017058287742962846, + -0.01706202365757431, + -0.01705775667541933, + -0.017061620382357204, + -0.017057122635237006, + -0.017062296610078284, + -0.017057129740847037, + -0.017062120178710817, + -0.017056356599796967, + -0.0170621648042606, + -0.017055987292052373, + -0.017061548497992123, + -0.017054431449831625, + -0.017061811173787023 + ], + "flux_error": 0.00027943646796062624, + "flux_span": 0.00020092294907013422, + "symmetry": { + "rho": 4.78699803352356e-07, + "u": 0.00010523684178896162, + "v": 0.0001797456547995152 + }, + "center_v": -0.0010844164948307434, + "max_abs_u": 0.0004326508608586077, + "nonuniform": true, + "finite": true, + "u_change": 4.5652731921964906e-05, + "v_change": 6.826751763037581e-05, + "u_signed_change": -3.897664688215874e-09, + "v_signed_change": -5.497347475629121e-08, + "step": 16089, + "mass_change": 2.6542693257811143e-08, + "fluctuation": { + "samples": 519, + "first_step": 15571, + "rms": [ + 4.93042041746288e-08, + 6.908845378068902e-08 + ], + "max_node_peak_to_peak": [ + 4.321214465517883e-07, + 8.400534895723621e-07 + ] + }, + "mass_window_span": 3.969056909139197e-08 + }, + { + "mass": 1583.9995134379715, + "mass_offset": 3.116461669613414e-07, + "rho_range": [ + 0.9997465051710606, + 1.000162372365594 + ], + "rho_error": 0.00025349482893943787, + "max_speed": 0.001984410111441434, + "u_mean": 1.7944908036953745e-09, + "v_mean": -0.0003554192921391434, + "boundary_error": 2.3681188265553543e-08, + "top_density_error": 1.955777406692505e-07, + "top_velocity_range": [ + -0.00045787358755449304, + -0.0002554469143623188 + ], + "mass_flux_by_y": [ + -0.01706419140100479, + -0.01706433668732643, + -0.01706334762275219, + -0.0170639306306839, + -0.01706288754940033, + -0.017063351348042488, + -0.01706140860915184, + -0.017062397673726082, + -0.01705990359187126, + -0.01706228032708168, + -0.017059214413166046, + -0.017062032595276833, + -0.01705939508974552, + -0.017062297090888023, + -0.017058080062270164, + -0.017062168568372726, + -0.017058204859495163, + -0.017062218859791756, + -0.017057904973626137, + -0.017061427235603333, + -0.017056461423635483, + -0.017060594633221626, + -0.01705651916563511, + -0.01706072688102722, + -0.017055703327059746, + -0.017059752717614174, + -0.0170548427850008, + -0.017059825360774994, + -0.017055077478289604, + -0.01705959625542164, + -0.017052654176950455, + -0.01705804280936718, + -0.01705273613333702 + ], + "volume_flux_by_y": [ + -0.017066914894767807, + -0.01706633968691272, + -0.017064802842819936, + -0.01706499016336859, + -0.017063668714815815, + -0.017063935514144618, + -0.017061852079335506, + -0.017062738104434767, + -0.01706016728973478, + -0.017062486764367633, + -0.017059377868312596, + -0.01706216101094098, + -0.017059497149772843, + -0.01706237812318734, + -0.017058143717315365, + -0.017062219943565278, + -0.017058245833256384, + -0.01706225155955085, + -0.017057931070670492, + -0.01706144841690478, + -0.01705647801235021, + -0.017060608209387474, + -0.01705653000999606, + -0.017060735759242905, + -0.017055710617429637, + -0.017059758428884214, + -0.017054847322543264, + -0.017059828454340904, + -0.017055079598823627, + -0.017059597493646463, + -0.017052654373511618, + -0.017058043010485906, + -0.017052736709581795 + ], + "flux_error": 0.0006554188939670422, + "flux_span": 0.0002461060560275523, + "symmetry": { + "rho": 4.675239324569702e-07, + "u": 9.59265016524933e-05, + "v": 0.00018161054549545807 + }, + "center_v": -0.0010843157916205005, + "max_abs_u": 0.0004326341005286032, + "nonuniform": true, + "finite": true, + "u_change": 4.822533585629837e-05, + "v_change": 5.856013215247114e-05, + "u_signed_change": 4.2260125785171e-09, + "v_signed_change": 3.054260883218069e-08, + "step": 16608, + "mass_change": 2.2212984035090045e-09, + "fluctuation": { + "samples": 519, + "first_step": 16090, + "rms": [ + 5.230720564794521e-08, + 6.618396676312579e-08 + ], + "max_node_peak_to_peak": [ + 4.1909991929217063e-07, + 8.735852675307589e-07 + ] + }, + "mass_window_span": 4.1911867494900975e-08 + }, + { + "mass": 1583.9994932990521, + "mass_offset": 3.24360131142781e-07, + "rho_range": [ + 0.9997464176267385, + 1.0001624953001738 + ], + "rho_error": 0.0002535823732614517, + "max_speed": 0.0019844121483243156, + "u_mean": 1.2437399506593193e-09, + "v_mean": -0.0003554269702745156, + "boundary_error": 3.7348993340451976e-08, + "top_density_error": 2.0116567611694336e-07, + "top_velocity_range": [ + -0.0004577618305460471, + -0.00025588276099197844 + ], + "mass_flux_by_y": [ + -0.01706421934068203, + -0.017063045874238014, + -0.01706334762275219, + -0.017062995582818985, + -0.017063898965716362, + -0.017062313854694366, + -0.017064016312360764, + -0.017061835154891014, + -0.017064308747649193, + -0.017061157152056694, + -0.017063787207007408, + -0.017059650272130966, + -0.01706283539533615, + -0.017057929188013077, + -0.017062554135918617, + -0.017058005556464195, + -0.017062943428754807, + -0.01705761067569256, + -0.01706213504076004, + -0.017056582495570183, + -0.017061708495020866, + -0.017055954784154892, + -0.017061632126569748, + -0.01705503650009632, + -0.01706148125231266, + -0.01705399714410305, + -0.017061039805412292, + -0.017053881660103798, + -0.017061324790120125, + -0.01705356314778328, + -0.017059922218322754, + -0.017051568254828453, + -0.01705937832593918 + ], + "volume_flux_by_y": [ + -0.01706694510737696, + -0.017065052024732887, + -0.017064804970865342, + -0.017064056130878243, + -0.01706468132380503, + -0.017062899115480666, + -0.017064460200322543, + -0.017062176055380664, + -0.017064572441404816, + -0.01706136321021728, + -0.01706394926310816, + -0.017059777978388292, + -0.017062936333272948, + -0.0170580100367324, + -0.01706261811374961, + -0.017058057282532797, + -0.01706298492431298, + -0.017057644189316365, + -0.017062161835740813, + -0.017056604493221578, + -0.017061725999917357, + -0.017055969203479255, + -0.017061643304985573, + -0.017055045792927978, + -0.017061488135337137, + -0.01705400261270415, + -0.017061044125662582, + -0.017053885365311286, + -0.017061326936132076, + -0.017053564511030475, + -0.017059922620051335, + -0.017051568504187237, + -0.017059378772265925 + ], + "flux_error": 0.0003168602923212994, + "flux_span": 0.00016567139592001018, + "symmetry": { + "rho": 4.842877388000488e-07, + "u": 9.685885314746209e-05, + "v": 0.00016298341231301122 + }, + "center_v": -0.001084399926418673, + "max_abs_u": 0.0004326843815176801, + "nonuniform": true, + "finite": true, + "u_change": 4.8053305385704276e-05, + "v_change": 6.202215695601254e-05, + "u_signed_change": -5.507508530365544e-10, + "v_signed_change": -7.678135372211128e-09, + "step": 17127, + "mass_change": 1.2713964181439575e-08, + "fluctuation": { + "samples": 519, + "first_step": 16609, + "rms": [ + 5.079226182382707e-08, + 6.841599733922894e-08 + ], + "max_node_peak_to_peak": [ + 4.4332841372070656e-07, + 8.400764140144377e-07 + ] + }, + "mass_window_span": 2.876399166132015e-08 + }, + { + "mass": 1583.9994561169297, + "mass_offset": 3.478336932025199e-07, + "rho_range": [ + 0.9997468236833811, + 1.0001623500138521 + ], + "rho_error": 0.00025317631661891937, + "max_speed": 0.0019844076161098286, + "u_mean": 1.5366004468021532e-10, + "v_mean": -0.0003554266073712249, + "boundary_error": 3.361351218276586e-08, + "top_density_error": 2.1420419216156006e-07, + "top_velocity_range": [ + -0.00045799835322056536, + -0.0002555568118684874 + ], + "mass_flux_by_y": [ + -0.01706419512629509, + -0.01706397905945778, + -0.017063472419977188, + -0.01706377975642681, + -0.0170627161860466, + -0.01706394925713539, + -0.017062095925211906, + -0.017063191160559654, + -0.01706092059612274, + -0.017062852159142494, + -0.017059871926903725, + -0.017063023522496223, + -0.017060132697224617, + -0.017062513157725334, + -0.017058584839105606, + -0.01706232875585556, + -0.01705804094672203, + -0.017062978819012642, + -0.017057854682207108, + -0.017061913385987282, + -0.017056938260793686, + -0.017060857266187668, + -0.017055585980415344, + -0.0170599352568388, + -0.017055276781320572, + -0.01706009916961193, + -0.017054734751582146, + -0.017060412093997, + -0.017055392265319824, + -0.017060725018382072, + -0.017053773626685143, + -0.017059694975614548, + -0.017053281888365746 + ], + "volume_flux_by_y": [ + -0.017066916347717745, + -0.017065978984995345, + -0.01706492409159588, + -0.017064836859370436, + -0.017063494677692755, + -0.017064531655594378, + -0.017062537982817153, + -0.017063530521203574, + -0.01706118324793035, + -0.017063057845879623, + -0.01706003461162316, + -0.01706315271286609, + -0.017060235075108204, + -0.01706259494498668, + -0.017058650724028408, + -0.01706238207811003, + -0.017058084047588847, + -0.01706301351875068, + -0.017057882482102243, + -0.017061935813777247, + -0.017056956287336687, + -0.0170608722011147, + -0.01705559737593001, + -0.017059945281447185, + -0.017055284222394138, + -0.017060104489203254, + -0.017054739138922796, + -0.017060415567056043, + -0.017055394522976504, + -0.01706072657760618, + -0.01705377427435357, + -0.01705969560975336, + -0.017053282304187064 + ], + "flux_error": 0.0006803753194454256, + "flux_span": 0.0003306879719505898, + "symmetry": { + "rho": 4.973262548446655e-07, + "u": 9.68563990907221e-05, + "v": 0.0001918356738160609 + }, + "center_v": -0.0010843232747556465, + "max_abs_u": 0.00043259497804915773, + "nonuniform": true, + "finite": true, + "u_change": 4.319492580019836e-05, + "v_change": 6.581950458729456e-05, + "u_signed_change": -1.0900799059787095e-09, + "v_signed_change": 3.6290329066980566e-10, + "step": 17646, + "mass_change": 2.3473562059738883e-08, + "fluctuation": { + "samples": 519, + "first_step": 17128, + "rms": [ + 4.9750826887087796e-08, + 6.844899794900652e-08 + ], + "max_node_peak_to_peak": [ + 4.675198562704248e-07, + 7.860363144679416e-07 + ] + }, + "mass_window_span": 3.618752624117846e-08 + }, + { + "mass": 1583.9995216727257, + "mass_offset": 3.064474585220014e-07, + "rho_range": [ + 0.9997466187924147, + 1.000162459909916 + ], + "rho_error": 0.0002533812075853348, + "max_speed": 0.0019844080227930734, + "u_mean": -1.3346320478465922e-09, + "v_mean": -0.00035541053590965505, + "boundary_error": 3.38020618617825e-08, + "top_density_error": 2.3096799850463867e-07, + "top_velocity_range": [ + -0.00045776370939165954, + -0.00025580454323054686 + ], + "mass_flux_by_y": [ + -0.017064189538359642, + -0.017063390463590622, + -0.01706349290907383, + -0.017063049599528313, + -0.017064249143004417, + -0.017062785103917122, + -0.01706383377313614, + -0.017062177881598473, + -0.017063798382878304, + -0.01706068590283394, + -0.017062721773982048, + -0.01705954037606716, + -0.017061881721019745, + -0.017057841643691063, + -0.01706094481050968, + -0.017057551071047783, + -0.017061734572052956, + -0.017056595534086227, + -0.017060641199350357, + -0.017055189236998558, + -0.017059504985809326, + -0.017053762450814247, + -0.017059171572327614, + -0.017053645104169846, + -0.017059165984392166, + -0.017052801325917244, + -0.017058880999684334, + -0.017052985727787018, + -0.01705937087535858, + -0.0170536320656538, + -0.017059175297617912, + -0.017051631584763527, + -0.017059626057744026 + ], + "volume_flux_by_y": [ + -0.01706691191198659, + -0.017065391400554526, + -0.0170649462845128, + -0.017064107609282154, + -0.01706502968915636, + -0.017063369801018472, + -0.017064277526201696, + -0.017062518031628338, + -0.01706406234315211, + -0.017060891657508563, + -0.0170628843319951, + -0.017059668836769147, + -0.01706198323930671, + -0.017057922681129746, + -0.01706100954879862, + -0.017057604125943145, + -0.0170617765378243, + -0.017056628887787896, + -0.017060667848129395, + -0.017055210882796563, + -0.017059521746825897, + -0.017053775830608492, + -0.01705918182476404, + -0.01705365386617548, + -0.017059172589687664, + -0.017052806343035777, + -0.017058885046958277, + -0.017052989014038098, + -0.01705937299902073, + -0.017053633101654177, + -0.017059175211529068, + -0.017051631586359806, + -0.01705962654475387 + ], + "flux_error": 0.00045253665877021364, + "flux_span": 0.00027142605683306875, + "symmetry": { + "rho": 5.550682544708252e-07, + "u": 9.03322703384991e-05, + "v": 0.00021703156221757622 + }, + "center_v": -0.001084364371411393, + "max_abs_u": 0.0004326583487571041, + "nonuniform": true, + "finite": true, + "u_change": 4.362078858422843e-05, + "v_change": 6.288152055491563e-05, + "u_signed_change": -1.488292092526975e-09, + "v_signed_change": 1.6071461569887804e-08, + "step": 18165, + "mass_change": 4.1386234680518485e-08, + "fluctuation": { + "samples": 519, + "first_step": 17647, + "rms": [ + 4.8523788701775496e-08, + 6.972105082215943e-08 + ], + "max_node_peak_to_peak": [ + 4.135232557126009e-07, + 8.922140461136829e-07 + ] + }, + "mass_window_span": 4.1386234680518485e-08 + }, + { + "mass": 1583.9995411075652, + "mass_offset": 2.941779892037309e-07, + "rho_range": [ + 0.9997465182095766, + 1.0001623705029488 + ], + "rho_error": 0.00025348179042339325, + "max_speed": 0.001984408222441071, + "u_mean": 1.1715252840033063e-09, + "v_mean": -0.0003554238795325704, + "boundary_error": 3.691929598083517e-08, + "top_density_error": 2.0302832126617432e-07, + "top_velocity_range": [ + -0.0004577953223464629, + -0.00025544876606407017 + ], + "mass_flux_by_y": [ + -0.01706424541771412, + -0.01706439070403576, + -0.01706399954855442, + -0.01706472598016262, + -0.017063450068235397, + -0.017064528539776802, + -0.017062243074178696, + -0.017064502462744713, + -0.017062179744243622, + -0.017064440995454788, + -0.017060544341802597, + -0.017064429819583893, + -0.01705997809767723, + -0.017063511535525322, + -0.017058884724974632, + -0.017062919214367867, + -0.01705806516110897, + -0.01706176996231079, + -0.01705634780228138, + -0.0170607827603817, + -0.017056617885828018, + -0.017060931771993637, + -0.017055347561836243, + -0.01705906353890896, + -0.017054233700037003, + -0.017059504985809326, + -0.01705477572977543, + -0.01706003211438656, + -0.01705465279519558, + -0.01705934852361679, + -0.017052441835403442, + -0.01705741137266159, + -0.017050491645932198 + ], + "volume_flux_by_y": [ + -0.017066969192731925, + -0.0170663937118522, + -0.017065453710296836, + -0.01706578454214652, + -0.017064229763469115, + -0.017065111612675612, + -0.017062685448283994, + -0.017064841917815307, + -0.017062442909035202, + -0.017064646812146055, + -0.017060705688165506, + -0.017064556542406985, + -0.017060078293275896, + -0.017063591557692666, + -0.01705894836199404, + -0.017062970050379343, + -0.017058105821356064, + -0.017061802479546216, + -0.01705637380575531, + -0.01706080422844037, + -0.01705663499781138, + -0.0170609454743438, + -0.01705535816678039, + -0.017059072400760825, + -0.017054240298130633, + -0.017059510749276738, + -0.017054779857705205, + -0.017060035761864767, + -0.017054655213290044, + -0.01705934969100646, + -0.01705244219022707, + -0.01705741194386423, + -0.017050491985064857 + ], + "flux_error": 0.0007415461843213717, + "flux_span": 0.0004655824464185786, + "symmetry": { + "rho": 5.271285772323608e-07, + "u": 0.00010245360696802051, + "v": 0.00020774725543787256 + }, + "center_v": -0.0010843306770997201, + "max_abs_u": 0.000432693702304315, + "nonuniform": true, + "finite": true, + "u_change": 4.7243310129114326e-05, + "v_change": 6.06439862610983e-05, + "u_signed_change": 2.5061573318501746e-09, + "v_signed_change": -1.3343622915374008e-08, + "step": 18684, + "mass_change": 1.2269469318270489e-08, + "fluctuation": { + "samples": 519, + "first_step": 18166, + "rms": [ + 5.127947003387945e-08, + 6.496641763428288e-08 + ], + "max_node_peak_to_peak": [ + 4.396127689675392e-07, + 8.475217836053641e-07 + ] + }, + "mass_window_span": 5.3655703998788974e-08 + }, + { + "mass": 1583.9995437450707, + "mass_offset": 2.9251289733535145e-07, + "rho_range": [ + 0.9997468534857035, + 1.0001624822616577 + ], + "rho_error": 0.0002531465142965317, + "max_speed": 0.001984407556947901, + "u_mean": -7.13177841398743e-10, + "v_mean": -0.00035541403463406853, + "boundary_error": 2.9886319003673105e-08, + "top_density_error": 1.825392246246338e-07, + "top_velocity_range": [ + -0.0004577431563473533, + -0.0002558119833294287 + ], + "mass_flux_by_y": [ + -0.01706419140100479, + -0.01706370711326599, + -0.017063289880752563, + -0.017062803730368614, + -0.0170638058334589, + -0.017061978578567505, + -0.01706377975642681, + -0.01706136390566826, + -0.017063623294234276, + -0.017060164362192154, + -0.01706288941204548, + -0.017058929428458214, + -0.017062274739146233, + -0.017058134078979492, + -0.017061199992895126, + -0.017056958749890327, + -0.01706189289689064, + -0.017057059332728386, + -0.017060739919543266, + -0.01705511286854744, + -0.01705959253013134, + -0.01705458015203476, + -0.01705995388329029, + -0.01705452799797058, + -0.017059938982129097, + -0.01705414615571499, + -0.01706019416451454, + -0.01705465093255043, + -0.017059672623872757, + -0.01705361343920231, + -0.01705865189433098, + -0.01705283485352993, + -0.017058957368135452 + ], + "volume_flux_by_y": [ + -0.0170669122349485, + -0.017065707405225713, + -0.01706474066197262, + -0.017063860491288444, + -0.017064584010441135, + -0.01706256077233065, + -0.017064220824621716, + -0.017061702082463034, + -0.017063884883847212, + -0.017060368862860015, + -0.01706305036837683, + -0.017059055507772133, + -0.01706237522696099, + -0.017058214356269696, + -0.017061263637447265, + -0.0170570100971285, + -0.017061933537505646, + -0.017057091881258233, + -0.017060766060936296, + -0.0170551338874484, + -0.017059609891505324, + -0.017054594536393422, + -0.01705996512846559, + -0.017054537234527822, + -0.01705994587318959, + -0.017054151902288765, + -0.01706019866586775, + -0.017054654640269597, + -0.01705967503168621, + -0.01705361496100577, + -0.017058652871706548, + -0.0170528357511312, + -0.017058957581223902 + ], + "flux_error": 0.00040725834255186916, + "flux_span": 0.00021587484235408534, + "symmetry": { + "rho": 4.973262548446655e-07, + "u": 0.00012665777901713234, + "v": 0.000244952969223356 + }, + "center_v": -0.0010843976657905442, + "max_abs_u": 0.0004325912381317514, + "nonuniform": true, + "finite": true, + "u_change": 4.439367825683474e-05, + "v_change": 6.01934585014838e-05, + "u_signed_change": -1.884703125401818e-09, + "v_signed_change": 9.844898501919725e-09, + "step": 19203, + "mass_change": 1.6650918683794338e-09, + "fluctuation": { + "samples": 519, + "first_step": 18685, + "rms": [ + 5.01156805623197e-08, + 6.803630453615184e-08 + ], + "max_node_peak_to_peak": [ + 4.2653066933235565e-07, + 8.400722448210726e-07 + ] + }, + "mass_window_span": 5.53207958671684e-08 + }, + { + "mass": 1583.9994860850275, + "mass_offset": 3.2891443962175946e-07, + "rho_range": [ + 0.9997464865446091, + 1.0001623891294003 + ], + "rho_error": 0.0002535134553909302, + "max_speed": 0.001984432247013394, + "u_mean": 1.7299714963726697e-09, + "v_mean": -0.0003554148875048979, + "boundary_error": 3.5680162969249814e-08, + "top_density_error": 1.564621925354004e-07, + "top_velocity_range": [ + -0.0004578661079769448, + -0.0002555251330940162 + ], + "mass_flux_by_y": [ + -0.01706426776945591, + -0.017064210027456284, + -0.01706317812204361, + -0.01706417091190815, + -0.017063036561012268, + -0.017064182087779045, + -0.01706165261566639, + -0.017063554376363754, + -0.017061229795217514, + -0.017063098028302193, + -0.01706021837890148, + -0.017063159495592117, + -0.0170598141849041, + -0.017062662169337273, + -0.01705849915742874, + -0.017062602564692497, + -0.01705911010503769, + -0.01706281118094921, + -0.01705753803253174, + -0.017061222344636917, + -0.017056258395314217, + -0.017060574144124985, + -0.017054831609129906, + -0.0170582365244627, + -0.017053257673978806, + -0.017057666555047035, + -0.017052702605724335, + -0.017058510333299637, + -0.017053673043847084, + -0.01705910451710224, + -0.01705252006649971, + -0.01705748215317726, + -0.017051486298441887 + ], + "volume_flux_by_y": [ + -0.01706699211044857, + -0.017066214039687062, + -0.01706463385463202, + -0.01706523198527819, + -0.017063819694630045, + -0.017064767916555097, + -0.017062097179080884, + -0.017063895648704443, + -0.017061494072134652, + -0.01706330454403264, + -0.01706038160336747, + -0.017063288277696077, + -0.01705991585017609, + -0.017062743067475038, + -0.017058563684484968, + -0.017062655304255124, + -0.017059151783424948, + -0.01706284477163545, + -0.017057564944744932, + -0.017061244426613737, + -0.01705627574561544, + -0.01706058860150255, + -0.017054842496861598, + -0.01705824505086769, + -0.017053264243679853, + -0.017057671529903697, + -0.017052706331016153, + -0.017058512935190326, + -0.01705367496454071, + -0.01705910531208332, + -0.01705252068283563, + -0.01705748252500607, + -0.017051486629597816 + ], + "flux_error": 0.0007986997554743311, + "flux_span": 0.0004671103937858922, + "symmetry": { + "rho": 4.731118679046631e-07, + "u": 0.0001322463666924393, + "v": 0.00022817693377973265 + }, + "center_v": -0.0010844092015660544, + "max_abs_u": 0.0004326806528807308, + "nonuniform": true, + "finite": true, + "u_change": 4.323227219542144e-05, + "v_change": 6.129359115901223e-05, + "u_signed_change": 2.4431493377710404e-09, + "v_signed_change": -8.528708293916651e-10, + "step": 19722, + "mass_change": 3.6401542286408015e-08, + "fluctuation": { + "samples": 519, + "first_step": 19204, + "rms": [ + 5.0130578081576623e-08, + 6.414587986223141e-08 + ], + "max_node_peak_to_peak": [ + 4.638083165936437e-07, + 8.419343689459991e-07 + ] + }, + "mass_window_span": 5.53207958671684e-08 + }, + { + "mass": 1583.9995091333985, + "mass_offset": 3.143637003708223e-07, + "rho_range": [ + 0.9997465368360281, + 1.0001624878495932 + ], + "rho_error": 0.00025346316397190094, + "max_speed": 0.001984408185469217, + "u_mean": 1.4101346186161914e-09, + "v_mean": -0.0003554168878390821, + "boundary_error": 2.9473415504412473e-08, + "top_density_error": 2.253800630569458e-07, + "top_velocity_range": [ + -0.0004579983498082118, + -0.0002558063939640308 + ], + "mass_flux_by_y": [ + -0.017064189538359642, + -0.017063653096556664, + -0.017063632607460022, + -0.017063084989786148, + -0.01706370711326599, + -0.017062123864889145, + -0.017063451930880547, + -0.017061546444892883, + -0.01706331968307495, + -0.01705889031291008, + -0.017061308026313782, + -0.017058169469237328, + -0.017062023282051086, + -0.01705722138285637, + -0.017060834914445877, + -0.017056049779057503, + -0.017062192782759666, + -0.017056986689567566, + -0.01706143096089363, + -0.017055556178092957, + -0.017060600221157074, + -0.01705499365925789, + -0.01706012710928917, + -0.01705479435622692, + -0.01706041395664215, + -0.017054319381713867, + -0.017061099410057068, + -0.01705464906990528, + -0.017061511054635048, + -0.01705377921462059, + -0.01706107147037983, + -0.017051322385668755, + -0.01706164889037609 + ], + "volume_flux_by_y": [ + -0.017066912833588833, + -0.017065655554841137, + -0.017065086141080404, + -0.0170641430427258, + -0.017064485648068388, + -0.017062707572472066, + -0.017063894640881063, + -0.017061886702574212, + -0.01706358269073969, + -0.017059096154782467, + -0.017061470922568267, + -0.01705829908494481, + -0.01706212597885804, + -0.01705730248904234, + -0.017060899740218738, + -0.01705610240395035, + -0.01706223471727079, + -0.017057020375510944, + -0.01706145785897511, + -0.017055578166841296, + -0.01706061784057955, + -0.01705500794065099, + -0.01706013813813658, + -0.01705480389785379, + -0.017060421275592534, + -0.01705432494973131, + -0.017061103574982233, + -0.01705465269329129, + -0.017061513035050622, + -0.017053780861251835, + -0.017061071771424997, + -0.017051322460856243, + -0.017061649177769308 + ], + "flux_error": 0.00037940632571506163, + "flux_span": 0.00017025518778106965, + "symmetry": { + "rho": 4.3585896492004395e-07, + "u": 8.847459009947515e-05, + "v": 0.0002439890797578518 + }, + "center_v": -0.0010843252323899468, + "max_abs_u": 0.0004326024256522651, + "nonuniform": true, + "finite": true, + "u_change": 4.46631450959411e-05, + "v_change": 6.319163482527336e-05, + "u_signed_change": -3.198368777566992e-10, + "v_signed_change": -2.0003341841917947e-09, + "step": 20241, + "mass_change": 1.4550739250937227e-08, + "fluctuation": { + "samples": 519, + "first_step": 19723, + "rms": [ + 5.023560122891643e-08, + 6.85361518247906e-08 + ], + "max_node_peak_to_peak": [ + 4.3775526921397377e-07, + 8.381366046689501e-07 + ] + }, + "mass_window_span": 3.6401542286408015e-08 + }, + { + "mass": 1583.9995189402252, + "mass_offset": 3.0817252191953857e-07, + "rho_range": [ + 0.9997465275228024, + 1.0001623630523682 + ], + "rho_error": 0.0002534724771976471, + "max_speed": 0.001984430439362432, + "u_mean": 1.2982178964885774e-09, + "v_mean": -0.0003554228789076137, + "boundary_error": 3.566773107595289e-08, + "top_density_error": 1.9744038581848145e-07, + "top_velocity_range": [ + -0.00045778787858767264, + -0.00025554935081492533 + ], + "mass_flux_by_y": [ + -0.017064275220036507, + -0.017064927145838737, + -0.017064746469259262, + -0.017064709216356277, + -0.01706346683204174, + -0.017064260318875313, + -0.017062904313206673, + -0.01706402376294136, + -0.017061453312635422, + -0.01706310734152794, + -0.017060013487935066, + -0.017062846571207047, + -0.01705886982381344, + -0.01706174574792385, + -0.01705758646130562, + -0.01706278882920742, + -0.017057932913303375, + -0.017062168568372726, + -0.017057105898857117, + -0.01706148497760296, + -0.017056526616215706, + -0.017061859369277954, + -0.01705569587647915, + -0.01706114038825035, + -0.017054617404937744, + -0.017060810700058937, + -0.017054492607712746, + -0.017060430720448494, + -0.017053773626685143, + -0.01705964468419552, + -0.01705106347799301, + -0.017057951539754868, + -0.01705077290534973 + ], + "volume_flux_by_y": [ + -0.017066999015892183, + -0.01706693036847205, + -0.0170662004490562, + -0.017065767200653604, + -0.01706424686778589, + -0.017064843778805353, + -0.017063346257345013, + -0.01706436289033565, + -0.017061715558514816, + -0.01706331302824903, + -0.017060174984275416, + -0.017062973828299563, + -0.01705897097222718, + -0.017061826804314145, + -0.017057651568178962, + -0.017062841190425643, + -0.01705797454402363, + -0.01706220209936287, + -0.0170571321139983, + -0.017061506753628837, + -0.01705654406181072, + -0.017061873699383542, + -0.01705570718787308, + -0.017061149857249134, + -0.017054625169578175, + -0.01706081677981741, + -0.017054497699216666, + -0.017060434482504674, + -0.017053776210370138, + -0.01705964604711576, + -0.017051063828686264, + -0.017057951656227952, + -0.01705077323598235 + ], + "flux_error": 0.0007190497844786953, + "flux_span": 0.0004005362405692628, + "symmetry": { + "rho": 6.221234798431396e-07, + "u": 0.00012479461444465185, + "v": 0.00021607205055778006 + }, + "center_v": -0.0010843661109052388, + "max_abs_u": 0.0004326601623027994, + "nonuniform": true, + "finite": true, + "u_change": 4.4558131051500194e-05, + "v_change": 6.474982911551653e-05, + "u_signed_change": -1.1191672212718425e-10, + "v_signed_change": -5.991068531669248e-09, + "step": 20760, + "mass_change": 6.1911784512836996e-09, + "fluctuation": { + "samples": 519, + "first_step": 20242, + "rms": [ + 5.0654694015804795e-08, + 6.803261185832661e-08 + ], + "max_node_peak_to_peak": [ + 4.359005425564244e-07, + 8.382586693403632e-07 + ] + }, + "mass_window_span": 3.6401542286408015e-08 + } + ], + "extrema": { + "rho_error": 0.0006027240306138992, + "speed": 0.001984435614913626, + "mass_offset": 8.141828871440861e-07 + }, + "population_budget": { + "status": "passed", + "start": 20744, + "end": 20760, + "plain_steps": 16, + "audit_steps": 16, + "steps": [ + { + "step": 20745, + "mass": 1583.9995281863958, + "delta_mass": 1.1194497346878052e-06, + "net_boundary": -7.541850209236145e-06, + "collision_roundoff": 8.66129994392395e-06, + "physical_residual": 8.66129994392395e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.657990397885442, + "outgoing": 2.6750473473221064 + }, + "flanks": { + "incoming": 5.333479883149266, + "outgoing": 5.333487240597606 + }, + "top": { + "incoming": 8.008533172309399, + "outgoing": 7.991476407274604 + } + } + }, + { + "step": 20746, + "mass": 1583.9995293058455, + "delta_mass": 2.9355287551879883e-06, + "net_boundary": -8.441507816314697e-06, + "collision_roundoff": 1.1377036571502686e-05, + "physical_residual": 1.1377036571502686e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6579903326928616, + "outgoing": 2.6750473715364933 + }, + "flanks": { + "incoming": 5.3334797360002995, + "outgoing": 5.33348717354238 + }, + "top": { + "incoming": 8.008529445156455, + "outgoing": 7.991473410278559 + } + } + }, + { + "step": 20747, + "mass": 1583.9995322413743, + "delta_mass": -2.8461217880249023e-06, + "net_boundary": -7.536262273788452e-06, + "collision_roundoff": 4.69014048576355e-06, + "physical_residual": 4.69014048576355e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6579903755337, + "outgoing": 2.6750473771244287 + }, + "flanks": { + "incoming": 5.333479972556233, + "outgoing": 5.333487065508962 + }, + "top": { + "incoming": 8.008533449843526, + "outgoing": 7.991476891562343 + } + } + }, + { + "step": 20748, + "mass": 1583.9995293952525, + "delta_mass": 1.4808028936386108e-06, + "net_boundary": -8.437782526016235e-06, + "collision_roundoff": 9.918585419654846e-06, + "physical_residual": 9.918585419654846e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.657990390434861, + "outgoing": 2.675047356635332 + }, + "flanks": { + "incoming": 5.333479896187782, + "outgoing": 5.333487074822187 + }, + "top": { + "incoming": 8.008528808131814, + "outgoing": 7.991473101079464 + } + } + }, + { + "step": 20749, + "mass": 1583.9995308760554, + "delta_mass": 9.294599294662476e-07, + "net_boundary": -7.925555109977722e-06, + "collision_roundoff": 8.85501503944397e-06, + "physical_residual": 8.85501503944397e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6579903792589903, + "outgoing": 2.6750473398715258 + }, + "flanks": { + "incoming": 5.333480060100555, + "outgoing": 5.333487117663026 + }, + "top": { + "incoming": 8.008533552289009, + "outgoing": 7.991477459669113 + } + } + }, + { + "step": 20750, + "mass": 1583.9995318055153, + "delta_mass": 4.1369348764419556e-06, + "net_boundary": -7.770955562591553e-06, + "collision_roundoff": 1.1907890439033508e-05, + "physical_residual": 1.1907890439033508e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.657990327104926, + "outgoing": 2.6750473733991385 + }, + "flanks": { + "incoming": 5.333480227738619, + "outgoing": 5.333487264811993 + }, + "top": { + "incoming": 8.008529452607036, + "outgoing": 7.991473140195012 + } + } + }, + { + "step": 20751, + "mass": 1583.9995359424502, + "delta_mass": -2.8517097234725952e-06, + "net_boundary": -9.3802809715271e-06, + "collision_roundoff": 6.528571248054504e-06, + "physical_residual": 6.528571248054504e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.657990276813507, + "outgoing": 2.6750473883002996 + }, + "flanks": { + "incoming": 5.333480276167393, + "outgoing": 5.333487395197153 + }, + "top": { + "incoming": 8.008532125502825, + "outgoing": 7.991477275267243 + } + } + }, + { + "step": 20752, + "mass": 1583.9995330907404, + "delta_mass": -2.903863787651062e-06, + "net_boundary": -9.566545486450195e-06, + "collision_roundoff": 6.662681698799133e-06, + "physical_residual": 6.662681698799133e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.65799019113183, + "outgoing": 2.675047367811203 + }, + "flanks": { + "incoming": 5.333480259403586, + "outgoing": 5.333487451076508 + }, + "top": { + "incoming": 8.008528800681233, + "outgoing": 7.991473998874426 + } + } + }, + { + "step": 20753, + "mass": 1583.9995301868767, + "delta_mass": -7.294118404388428e-06, + "net_boundary": -9.780749678611755e-06, + "collision_roundoff": 2.4866312742233276e-06, + "physical_residual": 2.4866312742233276e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.657990148290992, + "outgoing": 2.6750473957508802 + }, + "flanks": { + "incoming": 5.333480231463909, + "outgoing": 5.333487445488572 + }, + "top": { + "incoming": 8.00853244587779, + "outgoing": 7.991477765142918 + } + } + }, + { + "step": 20754, + "mass": 1583.9995228927583, + "delta_mass": -4.077330231666565e-06, + "net_boundary": -9.220093488693237e-06, + "collision_roundoff": 5.142763257026672e-06, + "physical_residual": 5.142763257026672e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6579900849610567, + "outgoing": 2.6750472746789455 + }, + "flanks": { + "incoming": 5.333480216562748, + "outgoing": 5.333487402647734 + }, + "top": { + "incoming": 8.008529156446457, + "outgoing": 7.991474000737071 + } + } + }, + { + "step": 20755, + "mass": 1583.999518815428, + "delta_mass": -2.738088369369507e-07, + "net_boundary": -9.091570973396301e-06, + "collision_roundoff": 8.81776213645935e-06, + "physical_residual": 8.81776213645935e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6579901799559593, + "outgoing": 2.6750471498817205 + }, + "flanks": { + "incoming": 5.333480531349778, + "outgoing": 5.333487382158637 + }, + "top": { + "incoming": 8.00853218510747, + "outgoing": 7.991477455943823 + } + } + }, + { + "step": 20756, + "mass": 1583.9995185416192, + "delta_mass": -2.5331974029541016e-07, + "net_boundary": -1.0000541806221008e-05, + "collision_roundoff": 9.747222065925598e-06, + "physical_residual": 9.747222065925598e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6579902470111847, + "outgoing": 2.675047166645527 + }, + "flanks": { + "incoming": 5.3334804847836494, + "outgoing": 5.33348735794425 + }, + "top": { + "incoming": 8.008528107777238, + "outgoing": 7.991474315524101 + } + } + }, + { + "step": 20757, + "mass": 1583.9995182882994, + "delta_mass": -3.118067979812622e-06, + "net_boundary": -8.858740329742432e-06, + "collision_roundoff": 5.7406723499298096e-06, + "physical_residual": 5.7406723499298096e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6579902600497007, + "outgoing": 2.6750471834093332 + }, + "flanks": { + "incoming": 5.333480656147003, + "outgoing": 5.333487456664443 + }, + "top": { + "incoming": 8.008532848209143, + "outgoing": 7.9914779830724 + } + } + }, + { + "step": 20758, + "mass": 1583.9995151702315, + "delta_mass": 1.5869736671447754e-06, + "net_boundary": -9.26293432712555e-06, + "collision_roundoff": 1.0849907994270325e-05, + "physical_residual": 1.0849907994270325e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.657990414649248, + "outgoing": 2.6750471498817205 + }, + "flanks": { + "incoming": 5.333480466157198, + "outgoing": 5.333487492054701 + }, + "top": { + "incoming": 8.00852826796472, + "outgoing": 7.9914737697690725 + } + } + }, + { + "step": 20759, + "mass": 1583.9995167572051, + "delta_mass": -2.0302832126617432e-07, + "net_boundary": -9.475275874137878e-06, + "collision_roundoff": 9.272247552871704e-06, + "physical_residual": 9.272247552871704e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.657990448176861, + "outgoing": 2.675047094002366 + }, + "flanks": { + "incoming": 5.333480512723327, + "outgoing": 5.333487572148442 + }, + "top": { + "incoming": 8.008532313629985, + "outgoing": 7.991478083655238 + } + } + }, + { + "step": 20760, + "mass": 1583.9995165541768, + "delta_mass": 2.386048436164856e-06, + "net_boundary": -9.272247552871704e-06, + "collision_roundoff": 1.165829598903656e-05, + "physical_residual": 1.165829598903656e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.657990511506796, + "outgoing": 2.675047194585204 + }, + "flanks": { + "incoming": 5.333480438217521, + "outgoing": 5.3334876000881195 + }, + "top": { + "incoming": 8.00852856785059, + "outgoing": 7.991473995149136 + } + } + } + ], + "audit_source_sha256": "d6532c48ea0bf972bce6ec3809989e9f2ec52eb1440d58f8945eb59d67dcf1b5", + "continued_equal": { + "ddf": true, + "temp": true, + "flag": true, + "step": true, + "config": true, + "runtime": true + }, + "max_relative_residual": 0.0, + "max_physical_relative_residual": 7.517609822434953e-09 + }, + "initial_error": 1.7896178272809593e-08, + "budget_start": { + "path": "/home/frank14f/CelerisLab/research/j3-coverage-2026-10-12/negative-budget-20744.h5", + "sha256": "c09d75fc4a2cff68039a0956bd9d32b79b9cd3a6b386c72b4db54c214b110cd8", + "step": 20744 + }, + "end_checkpoint": { + "path": "/home/frank14f/CelerisLab/research/j3-coverage-2026-10-12/negative-end-20760.h5", + "sha256": "bd0bd063579d625e358762b1fdde5ac11bfcf739646a847fb77a4a2031011b9b", + "step": 20760 + }, + "final_boundary": { + "bottom_rho": [ + 1.000014428049326, + 1.0000144094228745, + 1.000014740973711, + 1.000015152618289, + 1.0000157952308655, + 1.0000166930258274, + 1.000017773360014, + 1.0000189375132322, + 1.000020869076252, + 1.000023104250431, + 1.0000259727239609, + 1.00003033131361, + 1.0000366289168596, + 1.0000446736812592, + 1.0000547729432583, + 1.00009342469275, + 1.0001623630523682, + 1.0001283194869757, + 1.0000451486557722, + 0.9999600779265165, + 0.9998817034065723, + 0.9998164717108011, + 0.9997707549482584, + 0.9997465889900923, + 0.9997465275228024, + 0.9997701328247786, + 0.9998162724077702, + 0.9998816959559917, + 0.9999600518494844, + 1.0000450443476439, + 1.0001283250749111, + 1.0001623630523682, + 1.00009342469275, + 1.0000548772513866, + 1.0000446774065495, + 1.0000366233289242, + 1.0000303089618683, + 1.0000263527035713, + 1.0000232011079788, + 1.0000209733843803, + 1.000019110739231, + 1.000017849728465, + 1.0000167768448591, + 1.0000159237533808, + 1.0000151582062244, + 1.0000147353857756, + 1.0000144112855196, + 1.000014428049326 + ], + "bottom_u": [ + 0.0, + 0.0, + -3.7252353848650383e-09, + -1.8626169257076631e-09, + 7.450462915142029e-09, + 3.7252281131328085e-09, + 0.0, + -1.8626098760317831e-09, + 0.0, + -3.7252042304104676e-09, + 0.0, + -3.7251773089407034e-09, + 1.8625769250556244e-09, + 3.7251238834648933e-09, + 0.0, + 1.8624711484361586e-09, + 0.0, + -1.8624061662271664e-09, + 9.312805285514676e-09, + 1.8627195128562282e-09, + 3.7257310397519445e-09, + 1.862987060058889e-09, + 5.589216747975456e-09, + -5.58935185099016e-09, + 3.726234796426385e-09, + 1.8630734086526344e-09, + -3.725974862852175e-09, + 0.0, + 5.588158684297096e-09, + -9.31280625687221e-09, + 7.449624623285985e-09, + 0.0, + 1.8624711484361586e-09, + 0.0, + 0.0, + -3.725153870926406e-09, + 7.450354784404762e-09, + 0.0, + 0.0, + 0.0, + 0.0, + 1.8626119021142685e-09, + 1.8626139004465167e-09, + 5.587846468203782e-09, + 3.7252338305992757e-09, + -1.8626177028405533e-09, + -1.862618306506728e-09, + 0.0 + ], + "bottom_v": [ + 0.0, + 0.0, + 0.0, + 1.8626169257076631e-09, + 0.0, + 0.0, + 0.0, + 1.8626098760317831e-09, + 0.0, + 0.0, + 0.0, + 0.0, + -1.8625769250556244e-09, + 0.0, + 0.0, + -1.8624711484361586e-09, + -2.932072462714408e-05, + -0.0002309774751416594, + -0.0005562184710437067, + -0.0009346102019780483, + -0.0013076347259458989, + -0.0016284574820551359, + -0.0018618482108573452, + -0.0019844304393545607, + -0.0019844100670716675, + -0.0018618456432763322, + -0.0016284559436838572, + -0.0013076570900760946, + -0.0009346102263508822, + -0.000556218529059201, + -0.00023098306106960525, + -2.932072462714408e-05, + -1.8624711484361586e-09, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.8626119021142685e-09, + -1.8626139004465167e-09, + -1.8626154894012605e-09, + 0.0, + 1.8626177028405533e-09, + 1.862618306506728e-09, + 0.0 + ], + "top_rho": [ + 0.9999999217689037, + 0.9999999180436134, + 0.9999999292194843, + 0.999999925494194, + 0.9999999832361937, + 0.9999999329447746, + 0.9999999366700649, + 1.0000001974403858, + 1.0000000018626451, + 1.0000000167638063, + 1.0000001322478056, + 0.9999999068677425, + 0.9999999012798071, + 1.0000000726431608, + 0.9999999329447746, + 0.9999999757856131, + 0.9999998547136784, + 1.0, + 1.000000175088644, + 1.0000001788139343, + 1.0000000223517418, + 0.9999999366700649, + 0.9999999105930328, + 1.0000000167638063, + 1.0000000521540642, + 1.0000000521540642, + 0.9999999161809683, + 0.9999999292194843, + 0.9999999217689037, + 0.9999999292194843, + 1.0000001601874828, + 0.9999999795109034, + 0.9999999925494194, + 0.9999999795109034, + 0.9999998211860657, + 1.0000000037252903, + 0.9999999981373549, + 0.9999998696148396, + 0.9999999850988388, + 1.0, + 0.9999999552965164, + 0.9999999329447746, + 0.9999999701976776, + 0.9999999422580004, + 0.9999999403953552, + 0.9999999292194843, + 0.9999999329447746, + 0.9999999050050974 + ], + "top_u": [ + 0.0, + 0.0, + 0.0, + -7.450581152035382e-09, + 1.86264518045598e-09, + 7.450581096524222e-09, + 0.0, + 0.0, + -1.86264514576151e-09, + -1.862645118005935e-09, + 1.8626449029002561e-09, + -3.7252906454066415e-09, + -1.8626453331116637e-09, + -5.5879350417676075e-09, + 0.0, + -1.8626451943337686e-09, + -3.725290839695717e-09, + 0.0, + 0.0, + 7.450579264656437e-09, + 0.0, + -3.725290534384322e-09, + 3.725290631528851e-09, + 1.862645118005935e-09, + -3.7252901041728947e-09, + 0.0, + -5.5879359160682485e-09, + 3.7252905621399014e-09, + 0.0, + 3.7252905621399014e-09, + 0.0, + 1.8626451873948743e-09, + 0.0, + 1.8626451873948743e-09, + 3.725290964595848e-09, + 3.7252902845841263e-09, + 1.862645152700404e-09, + 0.0, + 0.0, + 0.0, + 0.0, + -7.450581096524222e-09, + 0.0, + 5.587935770351457e-09, + 0.0, + -7.450581124279803e-09, + 0.0, + 5.587935978518305e-09 + ], + "top_v": [ + -0.00025565551731275717, + -0.0002573915036865066, + -0.00026076661405923093, + -0.00026561694336063737, + -0.00027177297034479067, + -0.0002795383521604923, + -0.00028837101497615594, + -0.00029849627680963775, + -0.0003095958376124579, + -0.00032147578356176234, + -0.0003339927201839478, + -0.0003467724050183226, + -0.00036000650204782303, + -0.0003733429786555913, + -0.00038661810367973844, + -0.0003992151565659736, + -0.0004111417235230178, + -0.0004222467541694641, + -0.00043201438969121754, + -0.0004403627621478864, + -0.00044714285923966334, + -0.0004523955572050976, + -0.0004560277273679728, + -0.00045778787858767264, + -0.0004577412962601403, + -0.0004559531570101373, + -0.0004523452750510301, + -0.00044714290088309017, + -0.00044023994075148836, + -0.0004317872531859495, + -0.00042200081741051694, + -0.00041094609446899413, + -0.000399112704389637, + -0.00038649328844887423, + -0.0003732406270338226, + -0.0003597736345239966, + -0.00034654326801475746, + -0.00033366684495784185, + -0.0003211721825774339, + -0.0003093220293521881, + -0.0002981163694612549, + -0.0002881251468742365, + -0.00027910620805937674, + -0.00027156436521279687, + -0.0002653822460998443, + -0.0002605878001122482, + -0.0002571121030599544, + -0.00025554935081492533 + ] + }, + "checks": { + "steady": false, + "initialization": true, + "boundary": true, + "top_density": true, + "mass": true, + "bounded": true, + "flux": true, + "symmetry": true, + "nonuniform": true, + "audit": true + } + }, + "peak_rss_mib": 211.19921875, + "old_files_unchanged": true +} diff --git a/research/j3-coverage-2026-10-12/verification.json b/research/j3-coverage-2026-10-12/verification.json new file mode 100644 index 0000000..78a07c4 --- /dev/null +++ b/research/j3-coverage-2026-10-12/verification.json @@ -0,0 +1,31 @@ +{ + "old_files_verified": 257, + "changed_old_files": [], + "new_code_files": [ + "tests/validation/run_j3_coverage.py" + ], + "production_changes": 0, + "script_sha256": "329869519b7078e854d96241a7aad8ef93f35ac9be83f0be502c3a93523c3b13", + "checkpoint_hashes_verified": 4, + "solver_advances": { + "restart_a": 16, + "restart_b": 16, + "zero": 64, + "negative_plain": 20760, + "negative_overlapping_audit": 16 + }, + "gpu_after": "GPU0: 5 MiB, 0%, no compute process", + "git_diff_check": "passed", + "artifacts": { + "REVIEW.md": "7293f3f3442855c8521698605aab504e026915a7bf1e77f5a24710d89a812443", + "baseline-status.txt": "31c949b11b20d7cd4202dba16882b5712aa1653da0cb2da2f0ebd69bf488040e", + "baseline.json": "d8844104f2665a25bfc417ee29becf89ab3955fac9105b5ddb12cfb1fe2a55b0", + "gpu-validation.log": "505cd5a5db46d7984aefb2a614151c25c4ace0e7d2a52e02c3e4f9792fd8eb95", + "incremental.diff": "98aa7855d5d6b91b4509a924c8a5aabab4339ba29c7e7dc2d91262c48e3848ca", + "negative-budget-20744.h5": "c09d75fc4a2cff68039a0956bd9d32b79b9cd3a6b386c72b4db54c214b110cd8", + "negative-end-20760.h5": "bd0bd063579d625e358762b1fdde5ac11bfcf739646a847fb77a4a2031011b9b", + "restart-21280.h5": "3e89c12c16f91f76ca9acd909e0fa7d42df6fbb5e870b299aa08ca42bc3e3dc9", + "restart-reference-21296.h5": "7192f510dd7820675aa1de130f55514136fba782cf77f92545189918a7e0c328", + "results.json": "02460981ad49c9cc13b4246abad1d8afd2599c61bfb545a6e32da9bbcd5c0db1" + } +} diff --git a/research/j3-lag-2026-10-12/REVIEW.md b/research/j3-lag-2026-10-12/REVIEW.md new file mode 100644 index 0000000..34fe5db --- /dev/null +++ b/research/j3-lag-2026-10-12/REVIEW.md @@ -0,0 +1,107 @@ +# J3 单轨迹 lag 诊断:运行前冻结计划 + +2026-10-12。重新核对当前工作树并记录baseline.json准确哈希。仅新增独立诊断脚本和本目录证据,root唯一写入/计算者;不改任何生产公式、旧脚本、旧结果或环境。J3原验收失败保持。本次不是新验收,不调整任何门槛。 + +## 固定状态与步数 + +同NX48/NY35/H32/W16、nu=.1、U=0、rho0=1、A=+.002、D2Q9/SRT/FP32/unshifted/double-buffer、top_wall_bc=reservoir,无物体/力/LES。同make_sim、初始化g(0)=局部feq、pull→arrival重建→collision→postcollision g(t)。仅此正例。 + +先40次各519步,到t0=20760;复用原完整场计算,保存重放40间隔历史并与原J3终态macros/history比较,不从macros重建DDF。不跑J1/J2/default回归。立即持久保存start-20760.h5,包含真实DDF、temp、flags/domain_flags、step_count、config、runtime_params及分布阶段说明。用新Simulation无时间推进load,按字节比较DDF/temp/flags,比较count、配置和运行参数;失败立即停止,不进入诊断。文件记录SHA256。 + +然后只沿一个轨迹推进520步,记录n=0..520共521帧(t=20760..21280)。结束保存end-21280.h5及SHA256,同样无时间推进核验恢复。不删除这些唯一状态。所有统计覆盖固定完整窗口,不事后挑选窗口。 + +## 场与统计定义 + +统计格点为所有流体平面节点x=0..47、y=1..33,共1584点,含底slot、零速flanks和top,不含ghost y=0/34。用实际FP32 postcollision DDF在CPU float64求rho/u/v,分析精度不等于新增FP64运行支持。速度归一固定.002,密度归一rho0=1。 + +- lag L=1/16/519:起点n=0..520−L,共520/505/**2**个合法起点;绝对起点t0+n。逐起点记录du=u[n+L]−u[n]、dv同理的空间RMS、max绝对值、空间有符号均值;向量记录sqrt(mean(du²+dv²))及max sqrt(du²+dv²),同时保留两个有符号分量。汇总每种lag的均值/最小/最大,并给/.002归一结果。样本相互重叠;尤其519只有两个起点,不能声称大量独立样本。 +- 时间均值:521帧等权平均(含两端),保存完整平均rho/u/v场。记录每帧偏离时间均值的分量RMS/max、有符号空间均值、向量指标,以及全时间/空间汇总。 +- 有符号漂移:保存完整首末差u[520]−u[0]、v同理;平均每步漂移场=首末差/520(等于逐步差的时间均值)。报告每个分量的空间有符号均值、最小/最大,以及双分量向量均值;不只报非负RMS或范数。各lag另报告有符号空间均值/L,不能用u的对称抵消掩盖局部变化。 +- 每帧记录总质量M、全部y截面的实际宏观Σrho*v与Σv、顶rho/u/v和完整rho/u/v场。以单个压缩trajectory.h5保留原始完整场、逐步账和汇总数组,results.json保存可读摘要及文件哈希,不拆多份场文本。 + +## 同一520步的真实population账 + +不能调用原population_budget(会额外跑普通/审计轨迹)。只复用它已验证的AUDIT源码与临时构建注入方式,520步全部使用这一审计OneStep,不另跑普通轨迹。记录器仅用FP64累加已计算的FP32 populations,无生产公式改动。 + +逐步保存所有底/顶节点实际incoming、由前一g(t)计算的outgoing,以及每个节点真实collision前后质量差。分账覆盖slot、全部零目标flanks和整个top,核对ΔM=边界净交换+collision舍入。另列未扣舍入的物理残差。目标Q仅作为记录,不用于填补预算。 + +该临时源码SHA须匹配原J3已通过普通/审计逐值对照的源码SHA;同一诊断轨迹的前16步真实账与原J3既有16步记录比较,不增加步数。不会声称新做了520步普通/审计双轨迹对照。若源码或恢复状态不一致、发现明确阻塞,停止解释。 + +RMS对lag的形状只提供相关性/漂移线索,既不证明噪声,也不证明FP32平台;不以约1e−7量级改判J3。保留其原40间隔非单调变化及末段下降。压力库下仍独立记录collision舍入,不推论其消失。 + +固定cwd=/home/frank14f/CelerisLab、解释器/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python、进程PYTHONPATH=/home/frank14f/CelerisLab/src;执行时核对解释器、Python/CUDA实际来源及所有起点源哈希。GPU先核对获准0/1空闲;不杀其他作业,不改网络/全局环境/依赖,不提交推送。完成后停止。当前尚未执行重放或诊断。 + +## 完成结果 + +以上为运行前冻结计划。实际仅重放20760步一次,然后沿同一轨迹推进**520步**,末步21280,程序退出0。没有第二条520步轨迹或其他案例。重放40间隔历史及20760末态完整rho/u/v与原J3逐值一致;原非单调历史、末段下降及失败结论均保留,没有改判。 + +两个真实checkpoint均通过无推进恢复:分别从GPU直接下载DDF/temp/flags,与HDF5数据按字节核对,再加载到新Simulation核对三块缓冲、步数、配置和运行参数。未由macros重建平衡分布。临时审计源码SHA与原J3一致,同一轨迹前16步的质量/边界/舍入账与原J3记录完全匹配;未另跑普通轨迹。 + +### 多lag变化与有符号漂移 + +下表RMS为各合法起点的空间RMS再作算术平均;max为所有起点/格点中的最大绝对分量差。数值均为未归一绝对速度;归一结果除以.002,逐起点数据与全部mean/min/max见trajectory.h5及results.json。 + +| lag | 合法起点数 | u平均RMS | v平均RMS | u最大绝对差 | v最大绝对差 | +| ---: | ---: | ---: | ---: | ---: | ---: | +| 1 | 520 | 4.02775e−8 | 1.34694e−7 | 2.19793e−7 | 8.40133e−7 | +| 16 | 505 | 4.25738e−8 | 4.92469e−8 | 2.10493e−7 | 5.14083e−7 | +| 519 | **2** | 5.32746e−8 | 1.32336e−7 | 2.23534e−7 | 5.84936e−7 | + +lag519两个实际起点为20760、20761,对应v RMS为1.32748121e−7与1.31923248e−7;不能当作大量独立样本。u/v平均RMS除以.002分别为:lag1 (2.01388e−5,6.73470e−5),lag16 (2.12869e−5,2.46235e−5),lag519 (2.66373e−5,6.61678e−5)。向量RMS均值分别1.40599e−7、6.51399e−8、1.42657e−7;其双分量有符号均值在下表。 + +| 量 | u分量 | v分量 | +| --- | ---: | ---: | +| lag1平均有符号空间变化 | +1.56269e−12 | −7.51472e−12 | +| lag16平均有符号空间变化 | −1.43409e−11 | −2.77115e−10 | +| lag519平均有符号空间变化 | +8.47311e−10 | −5.50534e−9 | +| 首末变化的空间有符号均值 | +8.12599e−10 | −3.90766e−9 | +| 平均每步有符号漂移 | +1.56269e−12 | −7.51472e−12 | +| 首末局部变化最小值 | −1.62008e−7 | −2.55195e−7 | +| 首末局部变化最大值 | +1.34117e−7 | +2.57095e−7 | + +完整首末变化与每步平均漂移向量场分别保存在end_minus_start_uv、mean_drift_per_step_uv,分量顺序u/v。不能因全域平均很小而忽略局部变化。相对521帧等权时间均值的全时空RMS为u=3.36455e−8、v=7.37527e−8,最大绝对偏差为u=1.79551e−7、v=4.99302e−7;完整均值场和逐帧偏差统计均保留。 + +解释限度:v在lag16下的差异小于lag1与lag519,提示时间相关/相位结构的线索,不支持仅凭量级宣布独立噪声或FP32平台。不能排除更慢漂移或离散波动。lag519的新两个样本没有延续原J3末段单调下降的简单外推;原40间隔的非单调变化仍须一起看。本包既不修改原519间隔收敛判据,也不把选择较小的lag16当成通过依据。 + +### 质量、宏观流量与真实账 + +M从1583.999700639397变为1583.9996760860085,净变化−2.45534e−5,相对净变化−1.55009e−8;521帧相对质量跨度6.43318e−8。逐帧M及每步有符号ΔM完整保留,没有只报非负变化。 + +| 实际520步平均账 | 每步数值 | +| --- | ---: | +| 底slot incoming / outgoing | 2.67535507278 / 2.65829271536 | +| 底flanks incoming / outgoing | 5.33318304943 / 5.33317602280 | +| 顶全平面 incoming / outgoing | 7.99146266776 / 8.00854370598 | +| 全边界净交换 | −1.16541802597e−5 | +| collision舍入 | +1.16069622051e−5 | +| 全域ΔM | −4.72180545330e−8 | + +逐步预算残差最大值为0;未扣collision时最大相对物理预算残差1.15957e−8。压力库净排出与正collision舍入在这段轨迹中大部分抵消,舍入没有消失。slot/flanks/top的incoming/outgoing全节点数组及每节点collision差均保留,未遗漏零目标flanks;分段population账不直接等于该段宏观穿壁通量。 + +底请求Q仍为.01706689453125。521帧平均宏观底/顶质量流量为.01706952701/.01708118459,平均宏观体积流量为.01706692824/.01708118487。顶rho全窗口范围[.9999996405094862,1.0000003930181265],顶Cartesian v范围[.0002521053106847591,.0004627742200818292]。请求量、宏观面流量和分布交换分别记录,不互相自证。 + +## 持久可恢复状态与数据 + +所有文件均位于本目录,不在TemporaryDirectory中: + +- start-20760.h5,SHA256 `6c4cba5928c77566c2afc32231311a3986831c18fea766faadebb101243399e2`。 +- end-21280.h5,SHA256 `19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588`。 +- trajectory.h5(约17MiB),SHA256 `2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986`。 + +checkpoint版本仍为3,额外diagnostic属性只记录分布阶段和诊断脚本SHA。两块分布缓冲均为真实FP32状态;当前ddf是postcollision g(t),不是到达态f,也不是由均值场生成的feq。配置与运行参数保存在原checkpoint属性中。未来使用同一make_sim参数后load_checkpoint即可恢复;继续推进需要另行明确下一工作包,不能以本次诊断授权追加计算。 + +trajectory.h5存储521×33×48的rho/u/v、逐帧全y截面宏观流量、520×2×48边界incoming/outgoing、520×35×48实际collision差、完整逐步预算和lag/均值/漂移汇总。step数组给出绝对步数,recorded_samples=521;字段first_16_match_j3为true。results.json记录可读统计、重放历史、源/数据哈希和两个checkpoint核验结果。 + +## 执行、检查与文件保留 + +GPU启动前`nvidia-smi -i 0,1`显示两卡无计算任务(各5MiB,只有Xorg);原始输出在gpu-availability.log。仅使用GPU0。科研命令只运行一次,实际命令为: + +```bash +env CUDA_VISIBLE_DEVICES=0 PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python tests/validation/diagnose_j3_lags.py --output-dir research/j3-lag-2026-10-12 > research/j3-lag-2026-10-12/gpu-diagnostic.log 2>&1 +``` + +cwd为/home/frank14f/CelerisLab。脚本启动核对sys.executable、CelerisLab.__file__、kernel_v2.cu路径以及全部224个起点文件SHA。正式运行前用同一解释器和PYTHONPATH做了两次无CUDA初始化的主机解析fixture检查:u(n)=n×1e−8、v(n)=−2n×1e−8、n=0..520,独立核对lag起点数、RMS、带符号漂移、521帧时间均值偏差和归一化汇总;日志保存在host-check.log。fixture临时文件已自动清理。 + +只读复核指出的两项主机侧完善均在GPU前完成:三块缓冲直接GPU下载;各lag全部指标的mean/min/max及/.002汇总完整保存。没有生产更改、额外GPU验收矩阵或重复轨迹。 + +所有224个原有文件哈希保持不变,包括J1/J2/J3原结果、旧脚本、四个配置头及notebook。仅新增diagnose_j3_lags.py和本目录资料;incremental.diff为该独立脚本补丁。git diff --check及新增脚本补丁反向校验通过,唯一checkpoint和原始数据全部保留;无提交、推送或依赖/环境修改。任务到此停止,J3原失败结论不变。 diff --git a/research/j3-lag-2026-10-12/baseline-status.txt b/research/j3-lag-2026-10-12/baseline-status.txt new file mode 100644 index 0000000..6ae6094 --- /dev/null +++ b/research/j3-lag-2026-10-12/baseline-status.txt @@ -0,0 +1,71 @@ + M pyproject.toml + M setup.py + M src/CelerisLab/__init__.py + M src/CelerisLab/body/__init__.py + M src/CelerisLab/body/ddf_patch.py + M src/CelerisLab/body/manager.py + M src/CelerisLab/body/preprocess/flag_overlay.py + M src/CelerisLab/common/__init__.py + M src/CelerisLab/common/checkpoint.py + M src/CelerisLab/config.py + M src/CelerisLab/configs/CONFIG.md + M src/CelerisLab/cuda/__init__.py + M src/CelerisLab/cuda/compiler_v2.py + M src/CelerisLab/cuda/context.py + M src/CelerisLab/lbm/__init__.py + M src/CelerisLab/lbm/curved_links.py + M src/CelerisLab/lbm/field.py + M src/CelerisLab/lbm/initializers.py + M src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh + M src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh + M src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh + M src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh + M src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh + M src/CelerisLab/lbm/kernels/config/config_grid.h + M src/CelerisLab/lbm/kernels/config/config_method.h + M src/CelerisLab/lbm/kernels/config/config_objects.h + M src/CelerisLab/lbm/kernels/config/config_physics.h + M src/CelerisLab/lbm/kernels/kernel_v2.cu + M src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh + M src/CelerisLab/lbm/kernels/operators/collision_trt.cuh + M src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh + M src/CelerisLab/lbm/kernels/step/aux_kernels.cu + M src/CelerisLab/lbm/kernels/step/esopull_sync.cu + M src/CelerisLab/lbm/kernels/step/init_flow.cu + M src/CelerisLab/lbm/kernels/step/one_step_double.cu + M src/CelerisLab/lbm/kernels/step/one_step_esopull.cu + M src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh + M src/CelerisLab/lbm/stepper.py + M src/CelerisLab/simulation.py + M tests/integration/test_body_sync_e2e.py + M tests/integration/test_ddf_patch.py + M tests/integration/test_sync_bodies_skeleton.py + M tests/integration/test_unified_obs.py + M tests/postproc/experiment.ipynb + M tests/validation/run_kan99b_rotating_cylinder.py + M tests/validation/run_sah04_st_matrix.py + M tests/validation/test_sensor_accuracy.py +?? docs/design/ +?? docs/multilevel_grid_architecture_analysis.md +?? research/ +?? src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh +?? "tests/audit/body\345\210\240\345\207\217\345\212\237\350\203\275.md" +?? tests/integration/_cases.py +?? tests/integration/test_numerical_gpu.py +?? tests/integration/test_runtime_contracts_gpu.py +?? tests/integration/test_state_gpu.py +?? tests/unit/cpp/ +?? tests/unit/test_build_contracts.py +?? tests/unit/test_context_ownership.py +?? tests/unit/test_initializers.py +?? tests/unit/test_numerical_operators.py +?? tests/unit/test_planar_velocity.py +?? tests/unit/test_reservoir.py +?? tests/unit/test_simulation_lifecycle.py +?? tests/unit/test_slot_velocity.py +?? tests/unit/test_state_regressions.py +?? tests/validation/multigrid/ +?? tests/validation/run_j1.py +?? tests/validation/run_j2_slot.py +?? tests/validation/run_j3_reservoir.py +?? tests/validation/run_poiseuille.py diff --git a/research/j3-lag-2026-10-12/baseline.json b/research/j3-lag-2026-10-12/baseline.json new file mode 100644 index 0000000..5c289d1 --- /dev/null +++ b/research/j3-lag-2026-10-12/baseline.json @@ -0,0 +1,232 @@ +{ + "head": "6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0", + "python": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "package": "/home/frank14f/CelerisLab/src/CelerisLab/__init__.py", + "cuda_source": "/home/frank14f/CelerisLab/src/CelerisLab/lbm/kernels/kernel_v2.cu", + "hashes": { + "docs/design/README.md": "98242c6960866d9b75aaf363f703edf02c4210bc38da1a340e9f6add49c6a3ce", + "docs/design/integrated_architecture.md": "c26b0d301321fe4b86d83d11c7e0b8d0c0545ee2995afa563966f004e9788132", + "docs/design/multi_level_grid_architecture.md": "e56a67d9129f2e3c311342e21a3fb2ed14bd492dd881949b251d5d9ac577bdee", + "docs/design/multi_level_summary.md": "eebf23e0bec9b154e5ce2128e2806e7558a7d4824b2c700cfd16afd1158b2354", + "docs/design/multi_level_visual_reference.md": "cad4bfbd561e5650ec297334529334b662a1ed35f7373c61f34ee22ecf1f66bd", + "docs/design/spatial_coupling_refinement.md": "36c878c7afad524999d89fa842297a98a0433e0283e78b36ca734ddbf8723ed8", + "docs/multilevel_grid_architecture_analysis.md": "90309730b1759d63531cb258c30db990ab71ca1b56ae47d0bbe2f4e2ae52012c", + "research/audit-2026-10-09/REVIEW.zh-CN.md": "2841fd3aa7a6baedbe1079d90915c8b05212b133824ed6abccaa1f09656eaefe", + "research/audit-2026-10-09/architecture-cpu-results.json": "e1b809210005c8765b13fddbb5ed710d15f6fcbb4c5788a4064f3e88808433ef", + "research/audit-2026-10-09/architecture-report.md": "861079dc3f4ced9fdc41bfb22002d32e190c0d630d3ba2f138f9dc7a949b8371", + "research/audit-2026-10-09/numerical-report.md": "970330b3a593f79f09866ce6ae82bc0ddd81226230d0a6ff06ae8ae756ee80da", + "research/audit-2026-10-09/numerical_collision_results.json": "51e5c263bb8cde82cedef2ccfdbf5ef657742a80218d7896b1ff877516e59693", + "research/audit-2026-10-09/numerical_compile_results.json": "c3b0ae02072a2ec408ada7513b542ec255f6855cb743a3ed7f91bd8f31504f44", + "research/audit-2026-10-09/numerical_semantics_results.json": "b95b065b594aa2911740dab216f87936c9bf7f7fa25acfda93b5738443564035", + "research/audit-2026-10-09/root-initializers-report.md": "ca448457c444949d5d0e1e10fa7121064510b77fc4c3512580900f0299219867", + "research/audit-2026-10-09/state-report.md": "f8708807efc2e109810c5955f7c1884a932668c0b3cb2963c2df3b09f2a3d5c4", + "research/audit-2026-10-09/state_results.json": "da9170df3e11231c73f20e5e79ed68e08966673d1dd52004ea6b6a279afc0dcd", + "research/design-2026-10-09/Contracts.lean": "2442d9a778ef20e8af3fecf23be6fea6d73c6299ff744c9664b652bc5ee3f034", + "research/design-2026-10-09/PLAN.zh-CN.md": "0341dd7ee306a040340c8e5dedb07a109e931c27dbf3c994d072aa78e3b6bc67", + "research/design-2026-10-09/api-architecture-study.md": "d6fb45ec784f0e1db55fb9f34e137b9f551db0b9b39fd4f0ef247a78fc34eedf", + "research/design-2026-10-09/grid-study.md": "4435dc1275ec5e15b118becc6ac391f306195d1e5beaa58037b1aff3bb2465c7", + "research/design-2026-10-09/jet-study.md": "a362142ef04a5ad5dbb4c9db9d221b1199dccec53780c8f2da49a15201cfe529", + "research/design-2026-10-09/jet_closure_check.py": "fde45d0f8518740ef5c0bf0fe7635d6adaf9a2e789927dd4e68e991c138ddc30", + "research/design-2026-10-09/jet_closure_results.json": "12cf7d400a206f9f9ec9ea6ad251fe6bb0232e27bcbed22fbc1ead2c0fc7d249", + "research/design-2026-10-09/math-and-history.md": "64f8c82e4949d6f58b46faa09800958714859c36cad20bbeeae8b449ae7a6099", + "research/design-2026-10-09/math-checks.json": "94750381954317cde8d649db26beaed8ea945666572a05030ca2b4d97d384011", + "research/design-2026-10-09/math_checks.py": "4254983a783fe4bad8888b3d7c243c87d991c7bbf242edb0f56f25cbaefee890", + "research/j1-2026-10-12/REVIEW.md": "13004a4f140acdcf59acb57e9e2dda1bb95763d30060f822a7c206c94b813a9f", + "research/j1-2026-10-12/baseline-status.txt": "ac398360e05b746b89ae0c3acfe202b5122e650a3bb1ff234ab26f874a303e64", + "research/j1-2026-10-12/baseline.json": "ad7afdf7b3913d11c07343e971fe2f43c2d1a2b99e3d5904a6ba89e3bb0b24fb", + "research/j1-2026-10-12/incremental.diff": "a454c23da7b0011645949c0fbf64d0c41ecfdab5642b1b7c5119868005d3c721", + "research/j1-2026-10-12/results.json": "449f8a17dacac0fc6d2489c4b10bac330dbbbdb38fad3ce54f739ac8c6d48e85", + "research/j2-slot-2026-10-12/REVIEW.md": "10c4a94ffc32e0a2c4e0f6593b7cfc28479b5869f279f0b9d0b708fa3a47d1e6", + "research/j2-slot-2026-10-12/baseline-status.txt": "812616e2d941efcf854e1b37d6e662dda1aaf2b69074fcc04017133e13b72166", + "research/j2-slot-2026-10-12/baseline.json": "e82a1844145fd0cbc585c581b29f80b56193f122cfe1dfa7578f26904a720285", + "research/j2-slot-2026-10-12/incremental.diff": "c9e391bc91438cd912c1ed5a419705d4388522f672c67a066cfc055e814e699f", + "research/j2-slot-2026-10-12/results.json": "7d35ca7989aed5380e0a45de7f583972566fc516a051da63c53b35514e267494", + "research/j3-reservoir-2026-10-12/REVIEW.md": "1ea5f860728584ea6cbe40ba3994e40471102d8e2cf6d93e28fe47222cba0cab", + "research/j3-reservoir-2026-10-12/baseline-status.txt": "0ef1a8c9878c4053ebc1a7d4bace6d4ec38bf27ace167b4239ddbb1c6c897e20", + "research/j3-reservoir-2026-10-12/baseline.json": "847fefd1eae971985d34d04d89ee6d6f1c91f6940c54fe351d112faba7bc6838", + "research/j3-reservoir-2026-10-12/incremental.diff": "fae312831d71e46dd477a640b06ed927853a9e735d26bf9f5868927fa31cfa56", + "research/j3-reservoir-2026-10-12/results.json": "49685de7679a14860258abf1753aaa6d116ad709b868d907ddb40e74c9b845ea", + "research/repair-2026-10-10/TRON_HANDOFF.md": "f8aaa3d99cd133c2055d4adf396a0a57d14f6006aea19e87611bd1c2c1b53a88", + "research/repair-2026-10-10/baseline-hashes.json": "d6a7d5f9ec5bceb0e7927d55603d9c5e70105982cd945723454659b19ab476e6", + "research/repair-2026-10-10/baseline-status.txt": "074088d793014e3b8154c58718058c7d300fb45595f5129fa957ef1e4cec38e2", + "research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff": "292b4bafe7a62d4fbbf7c165eb99929336edfcaa16b15f34f72ab71fcd928391", + "research/repair-2026-10-10/classic-results.json": "a5d15305f516fd378b54cf9029102be58a83a55a7bad4b8e058fcfe0cc9898f4", + "research/repair-2026-10-10/classic-signals.npz": "820c9a0b0713d7455f0a5839ac2cd5ee706086d1a26461225dcdb095673421e2", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "research/repair-2026-10-10/provenance.json": "a81b7e32ecf7182c9617df1b39bbb063a05ef89290ad501bac4573cd5e8a6832", + "research/repair-2026-10-10/repair-architecture.md": "49be42ff5c994017f3175e17efda14d84f0b68f8ecd239f66ccee38415b60c5a", + "research/repair-2026-10-10/repair-numerical.md": "0272ebfa8c519aad161c520542cf53156574661609b91fd5ccad7955fdf2bd7b", + "research/repair-2026-10-10/repair-state.md": "4d4aa1ec0c11a87d2c8380912e7ed74cf5c910ae42e5cc529effde36c9020969", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/unit/cpp/reservoir.cpp": "c3eacaf0271400eb45ad559b571a8f7faa2a809d5f1857ffeb5592addce2cd0c", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/cpp/slot_profile.cpp": "31ac58ccab175bf79fa59fc46d4c0842df18ab0a5e5916be84760d9da2b75788", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_planar_velocity.py": "b656da0880b4234b1db805544edbe0d2473cbcc7c2c869c71d8251337f62a982", + "tests/unit/test_reservoir.py": "e718c78a53c3941aba7feb8ae4e8bb0b1726c1145de84febf91220c1917991c9", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_slot_velocity.py": "6a9494de9a32c350389ccbed58af48951f6b25a21a258537d2e8b73eb67cb11d", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/run_j1.py": "51b758a271ff358f931b3140a80082294a67e66c2fec0f8c19319e37f92aadc4", + "tests/validation/run_j2_slot.py": "b7d2d3aa06fcafc3ac62ed4a50892afbdb7f86e5720ce75a39ce317b6f571dad", + "tests/validation/run_j3_reservoir.py": "47535bc3569ce68c888d38978bc4f9077fd763a17829c20c081be52bb18a2903", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + ".cursor/rules/cuda-style.mdc": "5810cf8cff793a11ba5dedafaa8a4e7d7d3debb728d837ca1903ff6dc8d6fdb9", + ".cursor/rules/project-layout.mdc": "aeed1cd9d48447bcfcfb6a77250af7c5a3d500de4c6b2591c5684696fa04c3ec", + ".cursor/rules/python-style.mdc": "ece75cb724d7dc46cb8dab7ecf8d710a90b503001da0d506ea4bf772ce395e21", + ".cursorignore": "9f072faa815a6c6d4dc791a424201404f0f623338681ae3d2fcbdf86db1bd035", + ".gitignore": "de25151f4cfdf29ca64032e509398e1829c7ded2449ccff803b2fd87d859ae6c", + "LICENSE": "e98392425e9a0007d0d69f0f7c912c2dc1b59061a6197223962aac45599c76ea", + "README.md": "982d0df8b766b1d5017ba702b75e8b3cec8d22f57af8f434be27ea251652596c", + "docs/audit/audit_round2.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "docs/audit/body_refactor_notes.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "docs/audit/config_diagnosis.md": "b601652df0cac36a8faf2b317b11853221353716a25184cd9b2dc41373a7f183", + "docs/audit/kernel_layer_audit.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "docs/performance_analysis.md": "ba01aaa4d3c02b61a8dc55fd00518ac291ebbed79b6574190d6b7234a1158fcb", + "docs/tests_overview.md": "ffc9591fd7baa4261b2c1ce9cfa7aa13a3554a8d5df712035806266a5eaade3f", + "docs/validation_specs/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "docs/validation_specs/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "docs/validation_specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "docs/validation_specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "docs/validation_specs/exp_ctrl_matrix.md": "b7250576c23292988b6ef4bcfd080f611d41edc413c3cebd0eadcc8596049470", + "docs/validation_specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "output/round3_compatibility_summary.md": "319f2e6abde4b34cc4ec90ef461d8ebb85dd5a3ac1736cfa7a3fb110f2a69df9", + "pyproject.toml": "f24ab9ad3a6a728a9382b1bce2e721612fc76635f35c6f96dfddaa853b6e5a9c", + "setup.py": "bf07df7ec19de56710d2bb5f61873e09710cd059d46837dc3aa54f3e09ff9e06", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/checkpoint.py": "5b7caf3896167a3f37c539b58837de6eb3f8085fa7bf5f821a09666cc16d43a4", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/config.py": "2f1bba7515f5bc08cb3a8d140bcafe7fa0689e01b3b06494697bb2956a71530e", + "src/CelerisLab/configs/CONFIG.md": "41cafdbe525366c08aa9d0416ea026ccf0026ba7123b8a9b65f968a80d928e3a", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/cuda/compiler_v2.py": "c4cc3ec4445c8d75e6a253dd87963877117a722bc73b9d4811806fc6045d08c1", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "f9f8242b38e8e0cf8425b75e2b0215bc15363c62eaa0fb43c761b8e0931bfdc9", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/simulation.py": "34d69e71844f553790c5a2bed0f8fbfb912a9498e95b500d1ef2ad41cae3b424", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9" + } +} diff --git a/research/j3-lag-2026-10-12/end-21280.h5 b/research/j3-lag-2026-10-12/end-21280.h5 new file mode 100644 index 0000000..f30b209 Binary files /dev/null and b/research/j3-lag-2026-10-12/end-21280.h5 differ diff --git a/research/j3-lag-2026-10-12/incremental.diff b/research/j3-lag-2026-10-12/incremental.diff new file mode 100644 index 0000000..5c6c485 --- /dev/null +++ b/research/j3-lag-2026-10-12/incremental.diff @@ -0,0 +1,279 @@ +--- /dev/null ++++ b/tests/validation/diagnose_j3_lags.py +@@ -0,0 +1,276 @@ ++"""One exact J3 replay and one 520-step audit trajectory; no production edits.""" ++import argparse ++from dataclasses import asdict ++import hashlib ++import json ++import os ++from pathlib import Path ++import sys ++ ++import h5py ++import numpy as np ++import pycuda.driver as cuda ++import CelerisLab ++from CelerisLab.cuda import compiler_v2 as compiler ++from run_j1 import ROOT, AUDIT, make_sim, populations, observables ++from run_j2_slot import targets ++ ++START, LENGTH, SCALE = 20760, 520, .002 ++PHASE = 'postcollision g(t); D2Q9 paired ordering; unshifted FP32 double_buffer; q,y,x' ++ ++ ++def sha(path): ++ return hashlib.sha256(Path(path).read_bytes()).hexdigest() ++ ++ ++def buffers(sim): ++ arrays = dict(ddf=np.empty(sim.field.n*sim.field.nq, dtype=np.float32), ++ temp=np.empty(sim.field.n*sim.field.nq, dtype=np.float32), ++ flag=np.empty(sim.field.n, dtype=np.uint16)) ++ with sim.ctx.activate(): ++ for name, array in arrays.items(): ++ cuda.memcpy_dtoh(array, getattr(sim.field, name+'_gpu')) ++ return arrays ++ ++ ++def save_verified(sim, path): ++ """Persist both real buffers, then restore into a new case without advancing.""" ++ assert not path.exists(), f'Refusing to overwrite {path}' ++ before, config = buffers(sim), asdict(sim.lbm_cfg) ++ params, count = sim.field._runtime_params.copy(), sim.stepper.step_count ++ sim.save_checkpoint(str(path)) ++ with h5py.File(path, 'a') as hf: ++ hf.attrs['distribution_phase'] = PHASE ++ hf.attrs['diagnostic_script_sha256'] = sha(__file__) ++ for name, array in before.items(): ++ assert hf[name][:].tobytes() == array.tobytes(), name ++ assert json.loads(hf.attrs['config_json']) == config ++ assert json.loads(hf.attrs['runtime_params_json']) == params ++ assert int(hf.attrs['step_count']) == count ++ with make_sim(.002, nx=48, top_u=0., slot_width=16, top_mode='reservoir') as restored: ++ restored.load_checkpoint(str(path)) ++ after = buffers(restored) ++ assert all(before[k].tobytes() == after[k].tobytes() for k in before) ++ assert asdict(restored.lbm_cfg) == config ++ assert restored.field._runtime_params == params ++ assert restored.stepper.step_count == count ++ return dict(path=str(path), sha256=sha(path), step=count, phase=PHASE, ++ no_advance_restore='passed', buffers=['ddf', 'temp', 'flag']) ++ ++ ++def replay(sim): ++ sim.initialize() ++ rho, old_u, old_v = observables(populations(sim)) ++ initial_mass = old_mass = float(rho.sum()) ++ history = [dict(step=0, mass=initial_mass)] ++ for _ in range(40): ++ sim.run(519) ++ rho, u, v = observables(populations(sim)) ++ mass = float(rho.sum()) ++ history.append(dict(step=sim.stepper.step_count, mass=mass, ++ u_change=float(np.sqrt(np.mean((u-old_u)**2))/SCALE), ++ v_change=float(np.sqrt(np.mean((v-old_v)**2))/SCALE), ++ mass_change=abs(mass-old_mass)/initial_mass)) ++ old_u, old_v, old_mass = u, v, mass ++ assert sim.stepper.step_count == START ++ return history, (rho, u, v) ++ ++ ++def record_trajectory(sim, path, reference): ++ """Exactly LENGTH advances. Reuses J3's already validated audit source.""" ++ build = compiler.generate_config(sim.lbm_cfg) ++ original_step = sim.stepper.step_fn ++ try: ++ source = Path(build)/'step/one_step_double.cu' ++ code = source.read_text() ++ call, marker = 'collide_dispatch(f, rho_n, ux, uy);', '__global__ __launch_bounds__(NT, 2)' ++ assert code.count(call) == 1 and code.count(marker) == 1 ++ source.write_text(code.replace(call, 'j1_collide_audit(f, rho_n, ux, uy);') ++ .replace(marker, AUDIT+'\n'+marker)) ++ audit_hash = sha(source) ++ assert audit_hash == reference['audit_source_sha256'], 'Audit source changed; stop' ++ ptx = compiler.compile_kernel(build_dir=build) ++ with sim.ctx.activate(), h5py.File(path, 'x') as hf: ++ module = compiler.load_module(ptx) ++ params, size = module.get_global('d_params') ++ cuda.memcpy_dtod(params, sim.field.module.get_global('d_params')[0], size) ++ incoming_ptr, _ = module.get_global('j1_incoming') ++ collision_ptr, size = module.get_global('j1_collision') ++ cuda.memset_d8(collision_ptr, 0, size) ++ incoming = np.empty((2, 48), dtype=np.float64) ++ collision = np.empty((35, 48), dtype=np.float64) ++ hf.attrs.update(phase=PHASE, first_step=START, last_step=START+LENGTH, ++ first_fluid_y=1, velocity_scale=SCALE, rho_scale=1., ++ recorded_samples=0, audit_source_sha256=audit_hash) ++ hf.create_dataset('step', data=np.arange(START, START+LENGTH+1)) ++ for name in ('rho', 'u', 'v'): ++ hf.create_dataset(name, (LENGTH+1, 33, 48), dtype='f8', chunks=(1, 33, 48), ++ compression='gzip') ++ for name in ('mass_flux_by_y', 'volume_flux_by_y'): ++ hf.create_dataset(name, (LENGTH+1, 33), dtype='f8') ++ hf.create_dataset('mass', (LENGTH+1,), dtype='f8') ++ for name in ('incoming', 'outgoing'): ++ hf.create_dataset(name, (LENGTH, 2, 48), dtype='f8', compression='gzip') ++ hf.create_dataset('collision', (LENGTH, 35, 48), dtype='f8', compression='gzip') ++ hf.attrs['boundary_order'] = 'bottom,top; all x including zero-target flanks' ++ bottom, top_guess, slot = targets(.002) ++ hf.create_dataset('bottom_slot_mask', data=slot) ++ hf.create_dataset('bottom_requested_velocity', data=bottom) ++ hf.attrs.update(requested_bottom_volume=float(bottom.sum()), top_initial_guess=float(top_guess)) ++ ++ def store_frame(n, f): ++ rho, u, v = observables(f) ++ for name, array in zip(('rho', 'u', 'v'), (rho, u, v)): ++ hf[name][n] = array ++ hf['mass'][n] = rho.sum() ++ hf['mass_flux_by_y'][n] = (rho*v).sum(axis=1) ++ hf['volume_flux_by_y'][n] = v.sum(axis=1) ++ hf.attrs['recorded_samples'] = n+1 ++ ++ before = populations(sim) ++ store_frame(0, before) ++ sim.stepper.step_fn = module.get_function('OneStep') ++ for n in range(LENGTH): ++ outgoing = np.stack((before[[4,6,7], 1].sum(axis=0), before[[3,5,8], -2].sum(axis=0))) ++ mass = before[:, 1:-1].sum() ++ sim.run(1) ++ after = populations(sim) ++ assert np.isfinite(after).all() ++ cuda.memcpy_dtoh(incoming, incoming_ptr) ++ cuda.memcpy_dtoh(collision, collision_ptr) ++ hf['incoming'][n], hf['outgoing'][n], hf['collision'][n] = incoming, outgoing, collision ++ store_frame(n+1, after) ++ if n < 16: ++ row = reference['steps'][n] ++ measured = dict(mass=mass, delta_mass=after[:, 1:-1].sum()-mass, ++ bottom_net_in=incoming[0].sum()-outgoing[0].sum(), ++ top_net_in=incoming[1].sum()-outgoing[1].sum(), ++ collision_roundoff=collision.sum()) ++ assert all(measured[k] == row[k] for k in measured), 'Prior J3 audit not reproduced' ++ before = after ++ assert sim.stepper.step_count == START+LENGTH ++ hf.attrs['first_16_match_j3'] = True ++ return audit_hash ++ finally: ++ sim.stepper.step_fn = original_step ++ compiler.cleanup_build_dir(build) ++ ++ ++def variation(u, v): ++ """Per-time/per-origin spatial metrics; no assumption of independent samples.""" ++ delta = np.stack((u, v), axis=1) ++ return dict(rms=np.sqrt(np.mean(delta**2, axis=(2, 3))), ++ max_abs=np.max(np.abs(delta), axis=(2, 3)), ++ signed_mean=np.mean(delta, axis=(2, 3)), ++ vector_rms=np.sqrt(np.mean(u*u+v*v, axis=(1, 2))), ++ vector_max=np.sqrt(np.max(u*u+v*v, axis=(1, 2)))) ++ ++ ++def summarize(path): ++ summary = dict(lags={}) ++ with h5py.File(path, 'a') as hf: ++ assert hf.attrs['recorded_samples'] == LENGTH+1 ++ u, v, mass = hf['u'][:], hf['v'][:], hf['mass'][:] ++ for lag in (1, 16, 519): ++ group = hf.create_group(f'lag/{lag}') ++ group.create_dataset('origin_step', data=np.arange(START, START+LENGTH-lag+1)) ++ values = variation(u[lag:]-u[:-lag], v[lag:]-v[:-lag]) ++ for name, array in values.items(): group.create_dataset(name, data=array) ++ summary['lags'][str(lag)] = dict(origins=LENGTH+1-lag, ++ rms_mean=values['rms'].mean(axis=0).tolist(), rms_min=values['rms'].min(axis=0).tolist(), ++ rms_max=values['rms'].max(axis=0).tolist(), max_abs=values['max_abs'].max(axis=0).tolist(), ++ rms_mean_scaled=(values['rms'].mean(axis=0)/SCALE).tolist(), ++ signed_mean_change=values['signed_mean'].mean(axis=0).tolist(), ++ signed_mean_change_per_step=(values['signed_mean'].mean(axis=0)/lag).tolist(), ++ vector_rms_mean=float(values['vector_rms'].mean()), ++ vector_max=float(values['vector_max'].max())) ++ summary['lags'][str(lag)]['metrics'] = { ++ name: {label: func(array, axis=0).tolist() ++ for label, func in (('mean', np.mean), ('minimum', np.min), ('maximum', np.max))} ++ for name, array in values.items()} ++ summary['lags'][str(lag)]['metrics_scaled'] = { ++ name: {label: (np.asarray(value)/SCALE).tolist() for label, value in metrics.items()} ++ for name, metrics in summary['lags'][str(lag)]['metrics'].items()} ++ means = hf.create_group('time_mean') ++ for name in ('rho', 'u', 'v'): means.create_dataset(name, data=hf[name][:].mean(axis=0)) ++ deviation = variation(u-u.mean(axis=0), v-v.mean(axis=0)) ++ group = hf.create_group('deviation') ++ for name, array in deviation.items(): group.create_dataset(name, data=array) ++ summary['time_mean_deviation'] = dict(rms=np.sqrt(np.mean(deviation['rms']**2, axis=0)).tolist(), ++ max_abs=deviation['max_abs'].max(axis=0).tolist()) ++ end_delta = np.stack((u[-1]-u[0], v[-1]-v[0])) ++ hf.create_dataset('end_minus_start_uv', data=end_delta) ++ hf.create_dataset('mean_drift_per_step_uv', data=end_delta/LENGTH) ++ summary['signed_end_change'] = dict(mean=end_delta.mean(axis=(1, 2)).tolist(), ++ minimum=end_delta.min(axis=(1, 2)).tolist(), ++ maximum=end_delta.max(axis=(1, 2)).tolist(), ++ mean_per_step=(end_delta.mean(axis=(1, 2))/LENGTH).tolist()) ++ incoming, outgoing, collision = hf['incoming'][:], hf['outgoing'][:], hf['collision'][:] ++ slot = hf['bottom_slot_mask'][:] ++ groups = hf.create_group('budget') ++ net = incoming.sum(axis=(1, 2))-outgoing.sum(axis=(1, 2)) ++ roundoff, delta = collision.sum(axis=(1, 2)), np.diff(mass) ++ residual = delta-net-roundoff ++ for name, array in dict(delta_mass=delta, net_boundary=net, collision_roundoff=roundoff, ++ physical_residual=delta-net, residual=residual).items(): ++ groups.create_dataset(name, data=array) ++ summary['budget'] = dict(mean_delta_mass=float(delta.mean()), net_boundary=float(net.mean()), ++ collision_roundoff=float(roundoff.mean()), max_residual=float(np.abs(residual).max()), ++ max_relative_residual=float(np.max(np.abs(residual)/mass[:-1])), ++ max_physical_relative_residual=float(np.max(np.abs(delta-net)/mass[:-1])), ++ groups={name:dict(incoming=float(i.mean()), outgoing=float(o.mean()), net=float((i-o).mean())) ++ for name, i, o in ( ++ ('slot', incoming[:, 0, slot].sum(axis=1), outgoing[:, 0, slot].sum(axis=1)), ++ ('flanks', incoming[:, 0, ~slot].sum(axis=1), outgoing[:, 0, ~slot].sum(axis=1)), ++ ('top', incoming[:, 1].sum(axis=1), outgoing[:, 1].sum(axis=1)))}) ++ summary['mass'] = dict(start=float(mass[0]), end=float(mass[-1]), delta=float(mass[-1]-mass[0]), ++ relative_span=float(np.ptp(mass)/mass[0]), ++ relative_delta=float((mass[-1]-mass[0])/mass[0])) ++ return summary ++ ++ ++def main(): ++ parser = argparse.ArgumentParser(description=__doc__) ++ parser.add_argument('--output-dir', type=Path, required=True) ++ args = parser.parse_args() ++ assert Path.cwd() == ROOT == Path('/home/frank14f/CelerisLab') ++ assert sys.executable == '/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python' ++ assert Path(CelerisLab.__file__).resolve() == ROOT/'src/CelerisLab/__init__.py' ++ assert Path(compiler.kernel_path('kernel_v2.cu')).resolve() == ROOT/'src/CelerisLab/lbm/kernels/kernel_v2.cu' ++ assert os.environ.get('CUDA_VISIBLE_DEVICES') in ('0', '1') ++ out = args.output_dir.resolve() ++ assert out == ROOT/'research/j3-lag-2026-10-12' ++ baseline = json.loads((out/'baseline.json').read_text()) ++ assert all(sha(ROOT/name) == digest for name, digest in baseline['hashes'].items()) ++ for name in ('results.json', 'trajectory.h5', 'start-20760.h5', 'end-21280.h5'): ++ assert not (out/name).exists(), f'Refusing to overwrite {name}' ++ original = json.loads((ROOT/'research/j3-reservoir-2026-10-12/results.json').read_text())['cases'][0] ++ report = dict(python=sys.executable, package=CelerisLab.__file__, ++ cuda_source=compiler.kernel_path('kernel_v2.cu'), physical_gpu=os.environ['CUDA_VISIBLE_DEVICES'], ++ script_sha256=sha(__file__), phase=PHASE, velocity_scale=SCALE, ++ replay_steps=START, planned_diagnostic_steps=LENGTH, diagnostic_steps=0, ++ j3_acceptance='failed_unchanged') ++ def save_report(): (out/'results.json').write_text(json.dumps(report, indent=2)+'\n') ++ with make_sim(.002, nx=48, top_u=0., slot_width=16, top_mode='reservoir') as sim: ++ history, fields = replay(sim) ++ report['start_checkpoint'] = save_verified(sim, out/'start-20760.h5') ++ report['replay_history'] = history ++ report['replay_matches_j3'] = bool(history == original['history'] and all( ++ np.array_equal(array, original[name]) for array, name in zip(fields, ('rho', 'u', 'v')))) ++ save_report() ++ assert report['replay_matches_j3'], 'Replay differs from J3; saved real checkpoint, stopping' ++ print('20760 replay and no-advance checkpoint restore passed; matches J3.', flush=True) ++ try: ++ report['audit_source_sha256'] = record_trajectory(sim, out/'trajectory.h5', original['population_budget']) ++ finally: ++ report['diagnostic_steps'] = sim.stepper.step_count-START ++ save_report() ++ report['end_checkpoint'] = save_verified(sim, out/'end-21280.h5') ++ report.update(summarize(out/'trajectory.h5')) ++ report['trajectory_sha256'] = sha(out/'trajectory.h5') ++ save_report() ++ print(json.dumps({k:report[k] for k in ('lags','signed_end_change','mass','budget')}), flush=True) ++ ++ ++if __name__ == '__main__': ++ main() diff --git a/research/j3-lag-2026-10-12/results.json b/research/j3-lag-2026-10-12/results.json new file mode 100644 index 0000000..2bf5893 --- /dev/null +++ b/research/j3-lag-2026-10-12/results.json @@ -0,0 +1,811 @@ +{ + "python": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "package": "/home/frank14f/CelerisLab/src/CelerisLab/__init__.py", + "cuda_source": "/home/frank14f/CelerisLab/src/CelerisLab/lbm/kernels/kernel_v2.cu", + "physical_gpu": "0", + "script_sha256": "286fcd65b3261667a847b9b26e213d0af92cf459faa6bbd774f78c8479ce31d7", + "phase": "postcollision g(t); D2Q9 paired ordering; unshifted FP32 double_buffer; q,y,x", + "velocity_scale": 0.002, + "replay_steps": 20760, + "planned_diagnostic_steps": 520, + "diagnostic_steps": 520, + "j3_acceptance": "failed_unchanged", + "start_checkpoint": { + "path": "/home/frank14f/CelerisLab/research/j3-lag-2026-10-12/start-20760.h5", + "sha256": "6c4cba5928c77566c2afc32231311a3986831c18fea766faadebb101243399e2", + "step": 20760, + "phase": "postcollision g(t); D2Q9 paired ordering; unshifted FP32 double_buffer; q,y,x", + "no_advance_restore": "passed", + "buffers": [ + "ddf", + "temp", + "flag" + ] + }, + "replay_history": [ + { + "step": 0, + "mass": 1584.0000070855021 + }, + { + "step": 519, + "mass": 1583.9996469337493, + "u_change": 0.06561534459555829, + "v_change": 0.07563101850446771, + "mass_change": 2.2736852980967897e-07 + }, + { + "step": 1038, + "mass": 1583.9992240704596, + "u_change": 0.004091811464502968, + "v_change": 0.007100371573204822, + "mass_change": 2.6695914635247474e-07 + }, + { + "step": 1557, + "mass": 1583.9999501202255, + "u_change": 0.0012989347029755969, + "v_change": 0.001350033141922646, + "mass_change": 4.5836474917723265e-07 + }, + { + "step": 2076, + "mass": 1584.0001382622868, + "u_change": 0.00018204402469040087, + "v_change": 0.0005895349237683154, + "mass_change": 1.1877655327773294e-07 + }, + { + "step": 2595, + "mass": 1583.9996214956045, + "u_change": 5.809480866617957e-05, + "v_change": 0.00021318561182048304, + "mass_change": 3.2624159088106285e-07 + }, + { + "step": 3114, + "mass": 1583.9991597849876, + "u_change": 4.699814090961182e-05, + "v_change": 0.00011552034158229156, + "mass_change": 2.914839740409786e-07 + }, + { + "step": 3633, + "mass": 1583.999141126871, + "u_change": 3.5694782975010654e-05, + "v_change": 0.00013715988535341307, + "mass_change": 1.1779113873980783e-08 + }, + { + "step": 4152, + "mass": 1583.9995831716806, + "u_change": 3.9893919452264744e-05, + "v_change": 5.6042645704645876e-05, + "mass_change": 2.7906869159299124e-07 + }, + { + "step": 4671, + "mass": 1583.999707499519, + "u_change": 3.468311928838646e-05, + "v_change": 5.3087535636477326e-05, + "mass_change": 7.848979663177292e-08 + }, + { + "step": 5190, + "mass": 1583.999777322635, + "u_change": 3.704438168064547e-05, + "v_change": 6.0905465821478274e-05, + "mass_change": 4.40802498432708e-08 + }, + { + "step": 5709, + "mass": 1583.99970440194, + "u_change": 3.52997160511705e-05, + "v_change": 8.057747693768765e-05, + "mass_change": 4.6035792058747495e-08 + }, + { + "step": 6228, + "mass": 1583.9996813237667, + "u_change": 3.442221034468917e-05, + "v_change": 7.679125183621527e-05, + "mass_change": 1.4569553848320046e-08 + }, + { + "step": 6747, + "mass": 1583.9996515400708, + "u_change": 2.743911597628324e-05, + "v_change": 7.736367234381354e-05, + "mass_change": 1.88028382594542e-08 + }, + { + "step": 7266, + "mass": 1583.9996322132647, + "u_change": 2.3188639631782733e-05, + "v_change": 8.001923785170945e-05, + "mass_change": 1.2201266402757772e-08 + }, + { + "step": 7785, + "mass": 1583.9996611569077, + "u_change": 2.2556072738397003e-05, + "v_change": 8.415169708447593e-05, + "mass_change": 1.8272501795726005e-08 + }, + { + "step": 8304, + "mass": 1583.9996664077044, + "u_change": 2.4194888184868927e-05, + "v_change": 7.843855259017326e-05, + "mass_change": 3.314896876385328e-09 + }, + { + "step": 8823, + "mass": 1583.9996424242854, + "u_change": 2.146550311385168e-05, + "v_change": 7.416634794061212e-05, + "mass_change": 1.5141047243823157e-08 + }, + { + "step": 9342, + "mass": 1583.9996885638684, + "u_change": 2.426288525348324e-05, + "v_change": 7.294500906009547e-05, + "mass_change": 2.9128524485612257e-08 + }, + { + "step": 9861, + "mass": 1583.9996775966138, + "u_change": 2.5621117244333702e-05, + "v_change": 7.032090932625959e-05, + "mass_change": 6.923771836877194e-09 + }, + { + "step": 10380, + "mass": 1583.999669695273, + "u_change": 2.3454518542673745e-05, + "v_change": 7.5315897132759e-05, + "mass_change": 4.988220131119744e-09 + }, + { + "step": 10899, + "mass": 1583.9996569436044, + "u_change": 2.3944398633507273e-05, + "v_change": 7.837553446563217e-05, + "mass_change": 8.050295855173449e-09 + }, + { + "step": 11418, + "mass": 1583.9996462520212, + "u_change": 2.7900628755626344e-05, + "v_change": 8.237847836807757e-05, + "mass_change": 6.749736811086123e-09 + }, + { + "step": 11937, + "mass": 1583.9996848925948, + "u_change": 2.5210542120365384e-05, + "v_change": 8.584022062656909e-05, + "mass_change": 2.439430141916056e-08 + }, + { + "step": 12456, + "mass": 1583.999675616622, + "u_change": 2.4848734051457032e-05, + "v_change": 8.650365803713056e-05, + "mass_change": 5.856043435402246e-09 + }, + { + "step": 12975, + "mass": 1583.9996992852539, + "u_change": 2.6543553603593834e-05, + "v_change": 8.557191675485277e-05, + "mass_change": 1.4942318058967136e-08 + }, + { + "step": 13494, + "mass": 1583.9996917117387, + "u_change": 2.9725915435600002e-05, + "v_change": 9.138269339860209e-05, + "mass_change": 4.781259559908741e-09 + }, + { + "step": 14013, + "mass": 1583.9996599443257, + "u_change": 2.9288543781269557e-05, + "v_change": 8.891653993969281e-05, + "mass_change": 2.0055184897748055e-08 + }, + { + "step": 14532, + "mass": 1583.9996460303664, + "u_change": 2.6336958196062334e-05, + "v_change": 7.969614869216529e-05, + "mass_change": 8.78406515310337e-09 + }, + { + "step": 15051, + "mass": 1583.9996858648956, + "u_change": 2.7999722288679354e-05, + "v_change": 8.199171977347657e-05, + "mass_change": 2.5148061226809725e-08 + }, + { + "step": 15570, + "mass": 1583.9996842443943, + "u_change": 2.7387563137713212e-05, + "v_change": 8.422964594581822e-05, + "mass_change": 1.0230437326907539e-09 + }, + { + "step": 16089, + "mass": 1583.999651381746, + "u_change": 3.0874858117848734e-05, + "v_change": 8.007793273090845e-05, + "mass_change": 2.0746621351566632e-08 + }, + { + "step": 16608, + "mass": 1583.9997054953128, + "u_change": 3.1560172825332525e-05, + "v_change": 7.197914290293896e-05, + "mass_change": 3.416260519785262e-08 + }, + { + "step": 17127, + "mass": 1583.9996374417096, + "u_change": 2.8870819256496264e-05, + "v_change": 6.798605367415617e-05, + "mass_change": 4.2963133123665955e-08 + }, + { + "step": 17646, + "mass": 1583.9996498413384, + "u_change": 2.438111877467592e-05, + "v_change": 7.075239729723609e-05, + "mass_change": 7.828048423588906e-09 + }, + { + "step": 18165, + "mass": 1583.9996337573975, + "u_change": 2.3756139830342523e-05, + "v_change": 7.216931240419045e-05, + "mass_change": 1.0154003025039838e-08 + }, + { + "step": 18684, + "mass": 1583.9996783100069, + "u_change": 2.6974367376062354e-05, + "v_change": 7.484819030459771e-05, + "mass_change": 2.8126647174977172e-08 + }, + { + "step": 19203, + "mass": 1583.9997132550925, + "u_change": 2.6380600568645015e-05, + "v_change": 7.329552453508398e-05, + "mass_change": 2.206129134369107e-08 + }, + { + "step": 19722, + "mass": 1583.9996701776981, + "u_change": 2.6856874693021987e-05, + "v_change": 6.994044995216545e-05, + "mass_change": 2.719532460452766e-08 + }, + { + "step": 20241, + "mass": 1583.9996661506593, + "u_change": 3.0246782589165754e-05, + "v_change": 6.474203288038336e-05, + "mass_change": 2.5423224713533444e-09 + }, + { + "step": 20760, + "mass": 1583.999700639397, + "u_change": 2.9348816211428822e-05, + "v_change": 6.0219723154669055e-05, + "mass_change": 2.1773192821266666e-08 + } + ], + "replay_matches_j3": true, + "audit_source_sha256": "d6532c48ea0bf972bce6ec3809989e9f2ec52eb1440d58f8945eb59d67dcf1b5", + "end_checkpoint": { + "path": "/home/frank14f/CelerisLab/research/j3-lag-2026-10-12/end-21280.h5", + "sha256": "19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588", + "step": 21280, + "phase": "postcollision g(t); D2Q9 paired ordering; unshifted FP32 double_buffer; q,y,x", + "no_advance_restore": "passed", + "buffers": [ + "ddf", + "temp", + "flag" + ] + }, + "lags": { + "1": { + "origins": 520, + "rms_mean": [ + 4.0277546620540704e-08, + 1.3469390153195036e-07 + ], + "rms_min": [ + 3.5613946463042684e-08, + 1.1668444039738872e-07 + ], + "rms_max": [ + 4.4321430143586373e-08, + 1.4559476578843647e-07 + ], + "max_abs": [ + 2.1979336854958682e-07, + 8.401325054373395e-07 + ], + "rms_mean_scaled": [ + 2.013877331027035e-05, + 6.734695076597517e-05 + ], + "signed_mean_change": [ + 1.5626899307132287e-12, + -7.514721419550792e-12 + ], + "signed_mean_change_per_step": [ + 1.5626899307132287e-12, + -7.514721419550792e-12 + ], + "vector_rms_mean": 1.4059915219621473e-07, + "vector_max": 8.401510886315813e-07, + "metrics": { + "rms": { + "mean": [ + 4.0277546620540704e-08, + 1.3469390153195036e-07 + ], + "minimum": [ + 3.5613946463042684e-08, + 1.1668444039738872e-07 + ], + "maximum": [ + 4.4321430143586373e-08, + 1.4559476578843647e-07 + ] + }, + "max_abs": { + "mean": [ + 1.6618778871572347e-07, + 5.887001333972682e-07 + ], + "minimum": [ + 1.2666043343529778e-07, + 3.595167128574118e-07 + ], + "maximum": [ + 2.1979336854958682e-07, + 8.401325054373395e-07 + ] + }, + "signed_mean": { + "mean": [ + 1.5626899307132287e-12, + -7.514721419550792e-12 + ], + "minimum": [ + -5.703208507038716e-10, + -4.430870805755298e-09 + ], + "maximum": [ + 6.292399246236943e-10, + 4.232913012099081e-09 + ] + }, + "vector_rms": { + "mean": 1.4059915219621473e-07, + "minimum": 1.2206637710789322e-07, + "maximum": 1.5081582316202304e-07 + }, + "vector_max": { + "mean": 5.887479466951068e-07, + "minimum": 3.5952153797976036e-07, + "maximum": 8.401510886315813e-07 + } + }, + "metrics_scaled": { + "rms": { + "mean": [ + 2.013877331027035e-05, + 6.734695076597517e-05 + ], + "minimum": [ + 1.7806973231521342e-05, + 5.834222019869436e-05 + ], + "maximum": [ + 2.2160715071793185e-05, + 7.279738289421823e-05 + ] + }, + "max_abs": { + "mean": [ + 8.309389435786173e-05, + 0.0002943500666986341 + ], + "minimum": [ + 6.333021671764889e-05, + 0.0001797583564287059 + ], + "maximum": [ + 0.00010989668427479341, + 0.00042006625271866975 + ] + }, + "signed_mean": { + "mean": [ + 7.813449653566143e-10, + -3.757360709775396e-09 + ], + "minimum": [ + -2.851604253519358e-07, + -2.215435402877649e-06 + ], + "maximum": [ + 3.1461996231184716e-07, + 2.1164565060495404e-06 + ] + }, + "vector_rms": { + "mean": 7.029957609810737e-05, + "minimum": 6.103318855394661e-05, + "maximum": 7.540791158101151e-05 + }, + "vector_max": { + "mean": 0.0002943739733475534, + "minimum": 0.00017976076898988018, + "maximum": 0.00042007554431579063 + } + } + }, + "16": { + "origins": 505, + "rms_mean": [ + 4.2573773268768244e-08, + 4.9246938297396005e-08 + ], + "rms_min": [ + 3.5752490238467884e-08, + 4.15456452963814e-08 + ], + "rms_max": [ + 4.922887251553379e-08, + 6.028354616847837e-08 + ], + "max_abs": [ + 2.1049279653459008e-07, + 5.140822997298181e-07 + ], + "rms_mean_scaled": [ + 2.1286886634384123e-05, + 2.4623469148698004e-05 + ], + "signed_mean_change": [ + -1.4340868478372708e-11, + -2.771153756690128e-10 + ], + "signed_mean_change_per_step": [ + -8.963042798982943e-13, + -1.73197109793133e-11 + ], + "vector_rms_mean": 6.513989857186454e-08, + "vector_max": 5.141362874229707e-07, + "metrics": { + "rms": { + "mean": [ + 4.2573773268768244e-08, + 4.9246938297396005e-08 + ], + "minimum": [ + 3.5752490238467884e-08, + 4.15456452963814e-08 + ], + "maximum": [ + 4.922887251553379e-08, + 6.028354616847837e-08 + ] + }, + "max_abs": { + "mean": [ + 1.617618216565268e-07, + 2.949783646642018e-07 + ], + "minimum": [ + 1.1921821436473986e-07, + 1.9555178216307256e-07 + ], + "maximum": [ + 2.1049279653459008e-07, + 5.140822997298181e-07 + ] + }, + "signed_mean": { + "mean": [ + -1.4340868478372708e-11, + -2.771153756690128e-10 + ], + "minimum": [ + -2.824590568145705e-09, + -1.0108228450555478e-08 + ], + "maximum": [ + 2.555895444502055e-09, + 8.29972597584945e-09 + ] + }, + "vector_rms": { + "mean": 6.513989857186454e-08, + "minimum": 5.631155107903201e-08, + "maximum": 7.483274242284742e-08 + }, + "vector_max": { + "mean": 2.9507723198925675e-07, + "minimum": 1.9571660448571484e-07, + "maximum": 5.141362874229707e-07 + } + }, + "metrics_scaled": { + "rms": { + "mean": [ + 2.1286886634384123e-05, + 2.4623469148698004e-05 + ], + "minimum": [ + 1.787624511923394e-05, + 2.0772822648190698e-05 + ], + "maximum": [ + 2.4614436257766893e-05, + 3.0141773084239184e-05 + ] + }, + "max_abs": { + "mean": [ + 8.08809108282634e-05, + 0.00014748918233210088 + ], + "minimum": [ + 5.960910718236993e-05, + 9.777589108153628e-05 + ], + "maximum": [ + 0.00010524639826729504, + 0.00025704114986490906 + ] + }, + "signed_mean": { + "mean": [ + -7.170434239186354e-09, + -1.385576878345064e-07 + ], + "minimum": [ + -1.4122952840728525e-06, + -5.0541142252777386e-06 + ], + "maximum": [ + 1.2779477222510275e-06, + 4.149862987924725e-06 + ] + }, + "vector_rms": { + "mean": 3.256994928593227e-05, + "minimum": 2.8155775539516007e-05, + "maximum": 3.741637121142371e-05 + }, + "vector_max": { + "mean": 0.00014753861599462836, + "minimum": 9.785830224285742e-05, + "maximum": 0.0002570681437114853 + } + } + }, + "519": { + "origins": 2, + "rms_mean": [ + 5.327464727147072e-08, + 1.323356843649876e-07 + ], + "rms_min": [ + 5.262509695306072e-08, + 1.319232480540255e-07 + ], + "rms_max": [ + 5.392419758988071e-08, + 1.327481206759497e-07 + ], + "max_abs": [ + 2.23534086413822e-07, + 5.849364221584903e-07 + ], + "rms_mean_scaled": [ + 2.663732363573536e-05, + 6.61678421824938e-05 + ], + "signed_mean_change": [ + 8.473113158655621e-10, + -5.505343398101656e-09 + ], + "signed_mean_change_per_step": [ + 1.6325844236330677e-12, + -1.060759806956003e-11 + ], + "vector_rms_mean": 1.4265736077889644e-07, + "vector_max": 5.849445174428105e-07, + "metrics": { + "rms": { + "mean": [ + 5.327464727147072e-08, + 1.323356843649876e-07 + ], + "minimum": [ + 5.262509695306072e-08, + 1.319232480540255e-07 + ], + "maximum": [ + 5.392419758988071e-08, + 1.327481206759497e-07 + ] + }, + "max_abs": { + "mean": [ + 2.1421154821858062e-07, + 5.84934538498189e-07 + ], + "minimum": [ + 2.0488901002333924e-07, + 5.849326548378877e-07 + ], + "maximum": [ + 2.23534086413822e-07, + 5.849364221584903e-07 + ] + }, + "signed_mean": { + "mean": [ + 8.473113158655621e-10, + -5.505343398101656e-09 + ], + "minimum": [ + 7.775220827408666e-10, + -7.810893553221565e-09 + ], + "maximum": [ + 9.171005489902577e-10, + -3.1997932429817455e-09 + ] + }, + "vector_rms": { + "mean": 1.4265736077889644e-07, + "minimum": 1.420321942604668e-07, + "maximum": 1.4328252729732612e-07 + }, + "vector_max": { + "mean": 5.849404698006504e-07, + "minimum": 5.849364221584903e-07, + "maximum": 5.849445174428105e-07 + } + }, + "metrics_scaled": { + "rms": { + "mean": [ + 2.663732363573536e-05, + 6.61678421824938e-05 + ], + "minimum": [ + 2.631254847653036e-05, + 6.596162402701275e-05 + ], + "maximum": [ + 2.6962098794940355e-05, + 6.637406033797485e-05 + ] + }, + "max_abs": { + "mean": [ + 0.00010710577410929031, + 0.0002924672692490945 + ], + "minimum": [ + 0.00010244450501166962, + 0.00029246632741894386 + ], + "maximum": [ + 0.000111767043206911, + 0.00029246821107924517 + ] + }, + "signed_mean": { + "mean": [ + 4.2365565793278105e-07, + -2.7526716990508278e-06 + ], + "minimum": [ + 3.8876104137043325e-07, + -3.905446776610783e-06 + ], + "maximum": [ + 4.5855027449512885e-07, + -1.5998966214908728e-06 + ] + }, + "vector_rms": { + "mean": 7.132868038944822e-05, + "minimum": 7.10160971302334e-05, + "maximum": 7.164126364866306e-05 + }, + "vector_max": { + "mean": 0.00029247023490032523, + "minimum": 0.00029246821107924517, + "maximum": 0.00029247225872140525 + } + } + } + }, + "time_mean_deviation": { + "rms": [ + 3.3645527747009295e-08, + 7.375265969331026e-08 + ], + "max_abs": [ + 1.795506866009199e-07, + 4.993013225343033e-07 + ] + }, + "signed_end_change": { + "mean": [ + 8.125987639708831e-10, + -3.907655138166418e-09 + ], + "minimum": [ + -1.620077327329681e-07, + -2.551944334978971e-07 + ], + "maximum": [ + 1.3411614495364922e-07, + 2.570943159573144e-07 + ], + "mean_per_step": [ + 1.5626899307132368e-12, + -7.514721419550803e-12 + ] + }, + "budget": { + "mean_delta_mass": -4.7218054533004763e-08, + "net_boundary": -1.165418025965874e-05, + "collision_roundoff": 1.1606962205125735e-05, + "max_residual": 0.0, + "max_relative_residual": 0.0, + "max_physical_relative_residual": 1.159567383649822e-08, + "groups": { + "slot": { + "incoming": 2.6753550727780047, + "outgoing": 2.6582927153624882, + "net": 0.017062357415516788 + }, + "flanks": { + "incoming": 5.3331830494284915, + "outgoing": 5.3331760228038405, + "net": 7.02662465090935e-06 + }, + "top": { + "incoming": 7.9914626677556395, + "outgoing": 8.008543705976066, + "net": -0.017081038220427357 + } + } + }, + "mass": { + "start": 1583.999700639397, + "end": 1583.9996760860085, + "delta": -2.4553388357162476e-05, + "relative_span": 6.433182454705871e-08, + "relative_delta": -1.550087941762316e-08 + }, + "trajectory_sha256": "2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986" +} diff --git a/research/j3-lag-2026-10-12/start-20760.h5 b/research/j3-lag-2026-10-12/start-20760.h5 new file mode 100644 index 0000000..ae0abd0 Binary files /dev/null and b/research/j3-lag-2026-10-12/start-20760.h5 differ diff --git a/research/j3-offline-2026-10-12/REVIEW.md b/research/j3-offline-2026-10-12/REVIEW.md new file mode 100644 index 0000000..a76e1b4 --- /dev/null +++ b/research/j3-offline-2026-10-12/REVIEW.md @@ -0,0 +1,68 @@ +# J3 已存轨迹的 CPU 空间/奇偶分析 + +2026-10-12。运行前固定定义;只读输入为`research/j3-lag-2026-10-12/trajectory.h5`,SHA256 `2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986`。已有numpy 1.26.4、h5py 3.15.1,matplotlib可发现;不安装依赖、不导入CelerisLab/run_j1/pycuda、不初始化CUDA、不增加求解轨迹。只新增独立脚本、本目录小输出和一张图,原数据/checkpoint/报告/生产文件只读。 + +## 固定统计定义 + +输入521帧,绝对step=20760..21280;每帧1584节点,x=0..47、y=1..33。u/v各约6.30MiB,逐组件统计,CPU峰值内存控制远低于1GiB。不复制轨迹或写逐步全场;速度尺度固定.002。 + +1. lag2/4/8合法起点为n=0..520−L,分别519/517/513个。逐起点计算完整空间分量RMS,再对起点取算术均值;最大绝对差取所有起点/节点最大值;同时记录带符号空间均值的起点均值和/.002归一结果。沿用原lag1/16/519定义,仅诊断,不改验收。 +2. 偶/奇按绝对step分组,ne=261、no=260。每节点delta=mean_even−mean_odd。报告每区delta空间RMS、最大绝对值、带符号空间均值。总方差var=mean_t((a−mean_all)^2),分母521;奇偶组间解释方差B=(ne/521)*(no/521)*delta²,等价于按实际帧数加权的两组均值偏差平方。区内解释比例为sum(B)/sum(var),不用不平衡的简单半半权重,不假设独立随机样本。 +3. 固定区域:bottom y=1(48点)、top y=33(48点)、interior y=2..32(1488点),三者构成不交叠全域;另列top4 y=30..33(192点),作为重叠补充而非第四个分区。每区分量RMS=sqrt(mean_region(var));波动能量份额=sum_region(var)/sum_all(var);集中度=份额/节点比例;另报区域奇偶解释比例。 +4. 比较delta的空间有符号均值与RMS,均匀空间分量占delta能量比例为mean(delta)²/mean(delta²)。同时给内部和边界数值;不能将空间平均抵消解释成没有局部波动。 +5. 一张4panel图:u/v每节点时间波动RMS和u/v奇偶delta,坐标为上述格点位置,标出物理top/bottom、底slot及top4范围,颜色单位明确。仅输出小JSON/CSV/报告/原始CPU日志和图,不写新的全场序列。 + +分析前已核对输入SHA、形状及step范围。原J3归一5e−5稳态门槛失败保持,不能选择偶数lag改判;本轮只量化空间集中度/奇偶结构并给下一轮最小功能建议,不继续推导或追加诊断。 + +## 完成结果 + +CPU 分析退出码 0,新增求解步数 0;峰值 RSS 112.63 MiB。脚本末尾检查输入 SHA 未变,且未导入 CelerisLab、run_j1 或 pycuda。本次仅增加独立分析脚本和本目录输出,没有修改生产代码或旧报告。绘图缓存分析后删除。 + +| lag | 合法起点数 | u 平均空间 RMS 差 | v 平均空间 RMS 差 | +| --- | ---: | ---: | ---: | +| 2 | 519 | 2.649281e-8 | 3.051287e-8 | +| 4 | 517 | 3.455162e-8 | 3.931383e-8 | +| 8 | 513 | 4.079962e-8 | 4.646402e-8 | + +下面能量指时间波动方差之和,不是流动总动能;集中度以均匀分布为 1。 + +| 分量/区域 | 节点比例 | 时间波动 RMS | 波动能量份额 | 集中度 | 区内奇偶解释比例 | +| --- | ---: | ---: | ---: | ---: | ---: | +| u 全域 | 100% | 3.364553e-8 | 100% | 1.000 | 18.9417% | +| u 底行 | 3.0303% | 3.283614e-9 | 0.0289% | 0.010 | 0.1648% | +| u 顶行 | 3.0303% | 3.297410e-9 | 0.0291% | 0.010 | 2.0618% | +| u 内部 | 93.9394% | 3.470384e-8 | 99.9420% | 1.064 | 18.9520% | +| u 顶部四行 | 12.1212% | 2.603805e-8 | 7.2595% | 0.599 | 7.8382% | +| v 全域 | 100% | 7.375266e-8 | 100% | 1.000 | 75.6536% | +| v 底行 | 3.0303% | 5.133726e-9 | 0.0147% | 0.005 | 0.1861% | +| v 顶行 | 3.0303% | 1.365301e-7 | 10.3845% | 3.427 | 59.0306% | +| v 内部 | 93.9394% | 7.202938e-8 | 89.6008% | 0.954 | 77.5926% | +| v 顶部四行 | 12.1212% | 1.146411e-7 | 29.2867% | 2.416 | 73.8537% | + +顶部四行与内部、顶行重叠,不能与其他行相加。完整精度、带符号均值、最大差和归一值保留在 results.json、lags.csv、regions.csv。 + +v 的奇偶差空间均值为 2.494708e-9,空间 RMS 为 1.282990e-7;均匀空间分量仅占奇偶差能量的 0.03781%。u 对应比例为 0.00004371%。图中可见延伸到内部的交替空间结构,v 顶部较集中,但内部仍贡献大部分波动能量。这些结果说明奇偶步关联明显,不能据此认定随机噪声、FP32 平台或唯一成因。 + +![时间波动和奇偶差定位](localization.png) + +## 实际建议与停止点 + +全域 v 时间波动 RMS 为喷口幅值 0.002 的 0.00369%。在当前小网格、正幅值案例和这段短窗口内,量级较小,初步判断可用于 Jet 形态演示;这不构成长时间载荷、精度、AMR 或稳态验收证据。原归一 5e-5 稳态门槛仍失败,不以偶数 lag 更小为由改判。 + +建议下一轮依次补以下最小验证,本轮均未执行: + +1. 真实 checkpoint 短续跑一致性:从现有保存点比较连续运行与保存/加载后续跑 8–16 步的状态;不重放前 20760 步。已有无推进恢复检查不足以替代此项。 +2. 零幅值对照:按原有有界判据检查静止态、伪速度和质量,确认无喷流驱动时的行为。 +3. 负幅值:同案例、原判据验证反向流动及边界行为。 + +本轮至此停止,不追加轨迹、频谱诊断或理论推导。 + +## 可复核运行记录 + +工作目录 /home/frank14f/CelerisLab;实际命令如下,仅设置当前进程环境: + +```bash +env PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 MPLCONFIGDIR=/home/frank14f/CelerisLab/research/j3-offline-2026-10-12/.plot-cache /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python tests/validation/analyze_j3_saved_frames.py > research/j3-offline-2026-10-12/cpu-analysis.log 2>&1 +``` + +脚本为 tests/validation/analyze_j3_saved_frames.py;为了保护已存结果,发现 results.json 存在时会拒绝重跑。原始日志保留在 cpu-analysis.log。输入 SHA256 为本文开头值,脚本 SHA256 为 `438f67dac682b94c4950626f8de4fdcde48c3a4e9ecf8fdf1b0ada4b6e0e781a`,图 SHA256 为 `a72907638e32b0ecfc2205bea438e7b408f40aad86217ce6ad9b4877840c9cfc`。 diff --git a/research/j3-offline-2026-10-12/lags.csv b/research/j3-offline-2026-10-12/lags.csv new file mode 100644 index 0000000..dd3136d --- /dev/null +++ b/research/j3-offline-2026-10-12/lags.csv @@ -0,0 +1,7 @@ +lag,component,origins,rms_mean,rms_min,rms_max,max_abs,signed_mean,rms_mean_scaled,max_abs_scaled +2,u,519,2.6492813766059202e-08,2.461473146352545e-08,2.849795388522512e-08,1.5646287510131553e-07,3.2651688472661407e-12,1.3246406883029602e-05,7.823143755065776e-05 +2,v,519,3.051287081372935e-08,2.6733954889534246e-08,3.4557659268310575e-08,3.5202851902612926e-07,-2.1215196139120067e-11,1.5256435406864672e-05,0.00017601425951306463 +4,u,517,3.455162307490817e-08,3.1139903958591546e-08,3.8731579489526506e-08,1.862494269723366e-07,4.2339688862416314e-12,1.7275811537454086e-05,9.31247134861683e-05 +4,v,517,3.931382797274759e-08,3.518804854267616e-08,4.3704653032862594e-08,3.856267414668207e-07,-4.5696832926109425e-11,1.9656913986373794e-05,0.00019281337073341035 +8,u,513,4.0799615492729046e-08,3.58750914226038e-08,4.645758928474569e-08,2.0675658076344802e-07,-6.173440695051871e-13,2.039980774636452e-05,0.00010337829038172401 +8,v,513,4.6464023529891876e-08,4.016596966119118e-08,5.2970822734053424e-08,4.918158945044432e-07,-1.0991623042421445e-10,2.3232011764945938e-05,0.0002459079472522216 diff --git a/research/j3-offline-2026-10-12/localization.png b/research/j3-offline-2026-10-12/localization.png new file mode 100644 index 0000000..74b56f3 Binary files /dev/null and b/research/j3-offline-2026-10-12/localization.png differ diff --git a/research/j3-offline-2026-10-12/regions.csv b/research/j3-offline-2026-10-12/regions.csv new file mode 100644 index 0000000..5d361e6 --- /dev/null +++ b/research/j3-offline-2026-10-12/regions.csv @@ -0,0 +1,11 @@ +component,region,nodes,node_fraction,rms,energy_fraction,parity_explained,parity_delta_rms,parity_delta_max_abs,parity_delta_signed_mean,parity_uniform_fraction,concentration +u,all,1584,1.0,3.3645527747009295e-08,1.0,0.18941666843569935,2.928648412875517e-08,1.1364717707667638e-07,1.9361569921058942e-11,4.370656374404785e-07,1.0 +u,bottom,48,0.030303030303030304,3.2836139139761437e-09,0.0002886260627445179,0.0016480981248000494,2.666087603426525e-10,6.239022467490977e-10,4.799999647026949e-11,0.032414071054183105,0.009524660070569091 +u,top,48,0.030303030303030304,3.297410394391444e-09,0.00029105654902664954,0.02061832468099129,9.469574942246273e-10,4.0992742945658574e-09,6.302827376952781e-11,0.004430062513537537,0.009604866117879435 +u,interior,1488,0.9393939393939394,3.470384179612395e-08,0.9994203173882289,0.1895200531325811,3.021592788038922e-08,1.1364717707667638e-07,1.702914635984348e-11,3.176244205344496e-07,1.063899047542308 +u,top4,192,0.12121212121212122,2.6038049997535274e-08,0.07259526166671483,0.07838237637537482,1.4579695888283803e-08,5.303218823276258e-08,1.5730564306331736e-10,0.00011641037125501579,0.5989109087503973 +v,all,1584,1.0,7.375265969331029e-08,1.0,0.7565362482274425,1.2829902409872445e-07,4.3636847679365395e-07,2.494707772114959e-09,0.00037808779156073426,1.0 +v,bottom,48,0.030303030303030304,5.133726212434883e-09,0.0001468236762463292,0.0018614171322371767,4.429812584321041e-10,1.7038371124145774e-09,5.0775072192602695e-11,0.013138034379758643,0.004845181316128863 +v,top,48,0.030303030303030304,1.3653007708562323e-07,0.10384542253646012,0.5903064517918953,2.0979633448367352e-07,4.3636847679365395e-07,1.6728744722203665e-07,0.6358152143065777,3.426898943703184 +v,interior,1488,0.9393939393939394,7.202938282547825e-08,0.8960077537872935,0.7759255978269721,1.26896758658549e-07,4.062152502893766e-07,-2.7423505101430838e-09,0.0004670300956762181,0.9538147056445382 +v,top4,192,0.12121212121212122,1.1464105051433141e-07,0.2928673734979531,0.7385371810756743,1.9704124137161008e-07,4.3636847679365395e-07,9.974706602856202e-10,2.562630498444098e-05,2.4161558313581133 diff --git a/research/j3-offline-2026-10-12/results.json b/research/j3-offline-2026-10-12/results.json new file mode 100644 index 0000000..bf77b0f --- /dev/null +++ b/research/j3-offline-2026-10-12/results.json @@ -0,0 +1,253 @@ +{ + "input": "/home/frank14f/CelerisLab/research/j3-lag-2026-10-12/trajectory.h5", + "input_sha256": "2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986", + "script_sha256": "438f67dac682b94c4950626f8de4fdcde48c3a4e9ecf8fdf1b0ada4b6e0e781a", + "python": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "velocity_scale": 0.002, + "even_frames": 261, + "odd_frames": 260, + "lags": { + "2": { + "u": { + "origins": 519, + "rms_mean": 2.6492813766059202e-08, + "rms_min": 2.461473146352545e-08, + "rms_max": 2.849795388522512e-08, + "max_abs": 1.5646287510131553e-07, + "signed_mean": 3.2651688472661407e-12, + "rms_mean_scaled": 1.3246406883029602e-05, + "max_abs_scaled": 7.823143755065776e-05 + }, + "v": { + "origins": 519, + "rms_mean": 3.051287081372935e-08, + "rms_min": 2.6733954889534246e-08, + "rms_max": 3.4557659268310575e-08, + "max_abs": 3.5202851902612926e-07, + "signed_mean": -2.1215196139120067e-11, + "rms_mean_scaled": 1.5256435406864672e-05, + "max_abs_scaled": 0.00017601425951306463 + } + }, + "4": { + "u": { + "origins": 517, + "rms_mean": 3.455162307490817e-08, + "rms_min": 3.1139903958591546e-08, + "rms_max": 3.8731579489526506e-08, + "max_abs": 1.862494269723366e-07, + "signed_mean": 4.2339688862416314e-12, + "rms_mean_scaled": 1.7275811537454086e-05, + "max_abs_scaled": 9.31247134861683e-05 + }, + "v": { + "origins": 517, + "rms_mean": 3.931382797274759e-08, + "rms_min": 3.518804854267616e-08, + "rms_max": 4.3704653032862594e-08, + "max_abs": 3.856267414668207e-07, + "signed_mean": -4.5696832926109425e-11, + "rms_mean_scaled": 1.9656913986373794e-05, + "max_abs_scaled": 0.00019281337073341035 + } + }, + "8": { + "u": { + "origins": 513, + "rms_mean": 4.0799615492729046e-08, + "rms_min": 3.58750914226038e-08, + "rms_max": 4.645758928474569e-08, + "max_abs": 2.0675658076344802e-07, + "signed_mean": -6.173440695051871e-13, + "rms_mean_scaled": 2.039980774636452e-05, + "max_abs_scaled": 0.00010337829038172401 + }, + "v": { + "origins": 513, + "rms_mean": 4.6464023529891876e-08, + "rms_min": 4.016596966119118e-08, + "rms_max": 5.2970822734053424e-08, + "max_abs": 4.918158945044432e-07, + "signed_mean": -1.0991623042421445e-10, + "rms_mean_scaled": 2.3232011764945938e-05, + "max_abs_scaled": 0.0002459079472522216 + } + } + }, + "regions": [ + { + "component": "u", + "region": "all", + "nodes": 1584, + "node_fraction": 1.0, + "rms": 3.3645527747009295e-08, + "energy_fraction": 1.0, + "parity_explained": 0.18941666843569935, + "parity_delta_rms": 2.928648412875517e-08, + "parity_delta_max_abs": 1.1364717707667638e-07, + "parity_delta_signed_mean": 1.9361569921058942e-11, + "parity_uniform_fraction": 4.370656374404785e-07, + "concentration": 1.0 + }, + { + "component": "u", + "region": "bottom", + "nodes": 48, + "node_fraction": 0.030303030303030304, + "rms": 3.2836139139761437e-09, + "energy_fraction": 0.0002886260627445179, + "parity_explained": 0.0016480981248000494, + "parity_delta_rms": 2.666087603426525e-10, + "parity_delta_max_abs": 6.239022467490977e-10, + "parity_delta_signed_mean": 4.799999647026949e-11, + "parity_uniform_fraction": 0.032414071054183105, + "concentration": 0.009524660070569091 + }, + { + "component": "u", + "region": "top", + "nodes": 48, + "node_fraction": 0.030303030303030304, + "rms": 3.297410394391444e-09, + "energy_fraction": 0.00029105654902664954, + "parity_explained": 0.02061832468099129, + "parity_delta_rms": 9.469574942246273e-10, + "parity_delta_max_abs": 4.0992742945658574e-09, + "parity_delta_signed_mean": 6.302827376952781e-11, + "parity_uniform_fraction": 0.004430062513537537, + "concentration": 0.009604866117879435 + }, + { + "component": "u", + "region": "interior", + "nodes": 1488, + "node_fraction": 0.9393939393939394, + "rms": 3.470384179612395e-08, + "energy_fraction": 0.9994203173882289, + "parity_explained": 0.1895200531325811, + "parity_delta_rms": 3.021592788038922e-08, + "parity_delta_max_abs": 1.1364717707667638e-07, + "parity_delta_signed_mean": 1.702914635984348e-11, + "parity_uniform_fraction": 3.176244205344496e-07, + "concentration": 1.063899047542308 + }, + { + "component": "u", + "region": "top4", + "nodes": 192, + "node_fraction": 0.12121212121212122, + "rms": 2.6038049997535274e-08, + "energy_fraction": 0.07259526166671483, + "parity_explained": 0.07838237637537482, + "parity_delta_rms": 1.4579695888283803e-08, + "parity_delta_max_abs": 5.303218823276258e-08, + "parity_delta_signed_mean": 1.5730564306331736e-10, + "parity_uniform_fraction": 0.00011641037125501579, + "concentration": 0.5989109087503973 + }, + { + "component": "v", + "region": "all", + "nodes": 1584, + "node_fraction": 1.0, + "rms": 7.375265969331029e-08, + "energy_fraction": 1.0, + "parity_explained": 0.7565362482274425, + "parity_delta_rms": 1.2829902409872445e-07, + "parity_delta_max_abs": 4.3636847679365395e-07, + "parity_delta_signed_mean": 2.494707772114959e-09, + "parity_uniform_fraction": 0.00037808779156073426, + "concentration": 1.0 + }, + { + "component": "v", + "region": "bottom", + "nodes": 48, + "node_fraction": 0.030303030303030304, + "rms": 5.133726212434883e-09, + "energy_fraction": 0.0001468236762463292, + "parity_explained": 0.0018614171322371767, + "parity_delta_rms": 4.429812584321041e-10, + "parity_delta_max_abs": 1.7038371124145774e-09, + "parity_delta_signed_mean": 5.0775072192602695e-11, + "parity_uniform_fraction": 0.013138034379758643, + "concentration": 0.004845181316128863 + }, + { + "component": "v", + "region": "top", + "nodes": 48, + "node_fraction": 0.030303030303030304, + "rms": 1.3653007708562323e-07, + "energy_fraction": 0.10384542253646012, + "parity_explained": 0.5903064517918953, + "parity_delta_rms": 2.0979633448367352e-07, + "parity_delta_max_abs": 4.3636847679365395e-07, + "parity_delta_signed_mean": 1.6728744722203665e-07, + "parity_uniform_fraction": 0.6358152143065777, + "concentration": 3.426898943703184 + }, + { + "component": "v", + "region": "interior", + "nodes": 1488, + "node_fraction": 0.9393939393939394, + "rms": 7.202938282547825e-08, + "energy_fraction": 0.8960077537872935, + "parity_explained": 0.7759255978269721, + "parity_delta_rms": 1.26896758658549e-07, + "parity_delta_max_abs": 4.062152502893766e-07, + "parity_delta_signed_mean": -2.7423505101430838e-09, + "parity_uniform_fraction": 0.0004670300956762181, + "concentration": 0.9538147056445382 + }, + { + "component": "v", + "region": "top4", + "nodes": 192, + "node_fraction": 0.12121212121212122, + "rms": 1.1464105051433141e-07, + "energy_fraction": 0.2928673734979531, + "parity_explained": 0.7385371810756743, + "parity_delta_rms": 1.9704124137161008e-07, + "parity_delta_max_abs": 4.3636847679365395e-07, + "parity_delta_signed_mean": 9.974706602856202e-10, + "parity_uniform_fraction": 2.562630498444098e-05, + "concentration": 2.4161558313581133 + } + ], + "parity": { + "u": { + "component": "u", + "region": "all", + "nodes": 1584, + "node_fraction": 1.0, + "rms": 3.3645527747009295e-08, + "energy_fraction": 1.0, + "parity_explained": 0.18941666843569935, + "parity_delta_rms": 2.928648412875517e-08, + "parity_delta_max_abs": 1.1364717707667638e-07, + "parity_delta_signed_mean": 1.9361569921058942e-11, + "parity_uniform_fraction": 4.370656374404785e-07, + "concentration": 1.0 + }, + "v": { + "component": "v", + "region": "all", + "nodes": 1584, + "node_fraction": 1.0, + "rms": 7.375265969331029e-08, + "energy_fraction": 1.0, + "parity_explained": 0.7565362482274425, + "parity_delta_rms": 1.2829902409872445e-07, + "parity_delta_max_abs": 4.3636847679365395e-07, + "parity_delta_signed_mean": 2.494707772114959e-09, + "parity_uniform_fraction": 0.00037808779156073426, + "concentration": 1.0 + } + }, + "solver_steps": 0, + "j3_acceptance": "failed_unchanged", + "peak_rss_mib": 112.62890625, + "figure_sha256": "a72907638e32b0ecfc2205bea438e7b408f40aad86217ce6ad9b4877840c9cfc" +} diff --git a/research/j3-reservoir-2026-10-12/REVIEW.md b/research/j3-reservoir-2026-10-12/REVIEW.md new file mode 100644 index 0000000..a74b67a --- /dev/null +++ b/research/j3-reservoir-2026-10-12/REVIEW.md @@ -0,0 +1,126 @@ +# J3 顶部压力库:实现前物理契约与冻结门槛 + +2026-10-12。本次是已授权试验的单次恢复。重新读取仓库,HEAD与当前216个文件哈希记录在baseline.json,不沿用历史核对代替现状。root唯一代码写入与测试者。`.agents`为空且无`.agents/skills`;使用现有`.github/skills/lbm-ref-architecture-guard/SKILL.md`。保留J1、J2原始结果/失败和所有旧修改;不提交推送、改环境、访问其他项目或安装依赖。 + +## 参考、推导、范围 + +已读取主源[Zou–He §3与§3.1](https://arxiv.org/html/comp-gas/9611001),并搜索核对本地`ref/OpenLB/src/boundary/zouHeDynamics.hh:67–118`的未知分布重建/切向矩修正,及本库`core/descriptors.cuh:24–25`方向表。参考要点:给定密度及沿边界速度可解法向速度;non-equilibrium法向反射补闭合;边界到达态重建后仍碰撞;方向必须按本库重新编号。仅普通D2Q9:sum(f)=rho、sum(c*f)=rho*u,不采用§3.3 d2q9i的动量定义。论文双精度测试不覆盖本FP32案例。 + +顶部在y=NY−2,未知{4,6,7},已知{0,1,2,3,5,8}。令P=f3+f5+f8、Z=f0+f1+f2、S=Z+2P。已知rho=rho0与切向u=0,由质量与y动量得J_y=S−rho0、v=J_y/rho0。正v沿+y流出,负v流入。闭合为: + +``` +f4 = f3 − (2/3)*J_y +f6 = f5 + (f1−f2)/2 − J_y/6 +f7 = f8 + (f2−f1)/2 − J_y/6 +``` + +独立代回:sum(f)=Z+2P−J_y=rho0;sum(cx*f)=0;sum(cy*f)=J_y。实现直接用J_y避免不必要的v除法再乘rho;不以旧velocity helper重算指定密度。helper只改三个未知方向,无碰撞/存储/全局质量反馈。 + +新增唯一opt-in配置`method.top_wall_bc="reservoir"`,默认`"velocity"`保持J1/J2。仅允许现有on_site_velocity受限组合且physics.velocity=0;固定顶rho使用已有physics.rho,不新增重复密度参数。顶模式、固定rho(仅reservoir)和现有固定切向速度纳入状态签名与checkpoint匹配;旧checkpoint缺top_wall_bc按velocity。checkpoint v3结构不变。 + +底部quartic slot/零速flanks、幅值/归一与y物理面不变。仍是pull g(t)→arrival f(t+dt)→重建未知→SRT→g(t+dt)。仅step顶部选择新helper,无新增生产launch。修改边界限定config、compiler临时宏、planar helper、已有one_step_double、checkpoint、CONFIG及针对性测试/验证器。旧helper公式和初始化数值路径不改。 + +初始化沿J2:rho=rho0、u=0,v由底profile线性插值到顶的均匀Q/NX。这个顶v只是初始猜测;从第一步起由已知populations和rho0局部求v,可随x变化,不同时强制Q/NX。 + +## 冻结验收(任何本包测试运行前) + +- D2Q9/SRT/FP32/unshifted/double-buffer、无物体/力/LES、单GPU单层;NX48/NY35/H32/W16、nu=.1、U=0、rho0=1、先A=+.002。Q=.01706689453125,仅为底部请求体积;top初始猜测.000355560302734375,不作后续目标。 +- 采样519步,至少8间隔,最多40间隔=20760步。沿J2完整u/v场各RMS变化/固定速度尺度max(|A|,.002)≤5e−5,连续末4间隔。每间隔相对初始质量变化≤2e−6;末4间隔质量跨度≤6e−6;初末相对质量偏移≤1e−3。门槛、步数不放宽。 +- 实际新CUDA helper CPUshim:rho0=1/1.04,顶部法向v=0/±.001/±.01,平衡及扰动已知输入;三个未知输入毒化。已知方向逐值保持;独立质量rho0、切向动量0、法向动量S−rho0误差各≤3e−7;平衡保持≤3e−7。不能仅对照helper自身计算值。 +- 新边界GPU宏观检查:底profile法向及底/顶切向最大速度误差≤2e−6;顶部max|rho−rho0|/rho0≤5e−7(明确为本FP32规模容差);顶u=0包含在上述2e−6中。独立记录所有顶节点rho/u/v,不要求顶v均匀或等于旧Q/NX。 +- 内部距底8/16/24处实际Σrho*v,相对rho_bar*Q误差≤.005,三个截面跨度/|rho_bar*Q|≤.002;同时记录各y实际Σv与Σrho*v。所有populations有限,rho最大偏差≤.005、max速度≤.01。零幅值max速度≤2e−6。 +- x镜像rho/v偶、u奇:rho误差/rho0≤2e−5;u/v误差/固定.002≤.002。非零案例内部中心v与A同号,max|u|>1e−5。保留完整实际场、质量历史,不以目标自证实际通量。 +- 每例末态另16步:包括slot、零目标flanks、整个顶部的实际population incoming/outgoing;实际collision舍入单列;独立ΔM预算残差/M≤2e−7;审计版与普通版逐值相同。预算闭合不能替代稳态质量通过。 +- 先CPU和旧路径短回归:原J1全平面与原J2有限slot旧velocity-top同初态64步DDF/flags与本包起点逐值相同;默认关闭7步对照亦逐值相同。新顶模式/固定rho不一致、静态签名改变及旧缺省字段的配置/checkpoint契约在CPU核对。 +- 然后仅跑正例;若正例失败即停止,不运行负例/零幅值/新模式GPU恢复,分别标未测。正例全部通过后才补同参数A=−.002、A=0及正例短checkpoint恢复延续;每项必须有明确通过/失败/未测,null不得算通过。 + +这是新的顶部物理条件;即使通过,压力库可能带走数值舍入新增质量,不能说collision舍入消失,或旧失败全部来自连续模型,也不推论所有2D双速度边界无稳态。未增加clipping、renormalization、动态反馈、FP64、曲面或AMR。 + +运行固定cwd=/home/frank14f/CelerisLab、既有解释器/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python、进程PYTHONPATH=/home/frank14f/CelerisLab/src;核对真实Python/CUDA来源。GPU只在空闲获准0/1中选取,每次启动前检查。保留原始日志、命令和本轮增量,完成后停止。当前尚未执行本包测试。 + +## 结果:正例未通过速度收敛,按约定停止 + +以上为运行前冻结记录。所有模型参数、门槛和最大步数均未调整。新顶部压力库实现完成,但正例在20760步上限内没有满足完整速度场的连续四间隔收敛判据,进程明确退出1。负例、零幅值和新模式GPU checkpoint延续均为 **not_tested**,没有将跳过项计作通过。 + +| 检查 | 结果 | 证据 | +| --- | --- | --- | +| CPU helper/配置/状态/checkpoint契约 | 通过 | 111 passed、13 subtests passed,4.58秒 | +| 原J1 velocity-top,初始化及64步 | 通过 | 与本轮起点DDF/flags逐值相同 | +| 原J2有限slot velocity-top,初始化及64步 | 通过 | 与本轮起点DDF/flags逐值相同 | +| 默认关闭短通道,7步 | 通过 | 与本轮起点DDF/flags逐值相同 | +| reservoir正例完整场稳态 | **失败** | 末4间隔v变化均超过5e−5 | +| 正例质量、流量、范围、边界矩、镜像 | 通过 | 下面列出数值,完整场和历史见results.json | +| 实际16步population预算 | 通过 | 审计/普通版逐值一致,预算残差0 | +| reservoir负例/零幅值/GPU恢复 | **未测** | 正例失败触发预定停止条件 | + +CPU新helper覆盖20组:rho=1/1.04、法向v=0/±.001/±.01、平衡/非平衡。独立检查rho、两个动量矩及已知方向保持;未知输入毒化。配置/checkpoint测试覆盖非法模式、错误边界组合、非零顶切向速度、非法密度、模式/rho/u不一致在写状态前拒绝、旧缺省字段仅对应velocity、同模式host恢复。新模式GPU恢复未运行,不能用host测试代替它。 + +### 实际速度与质量历史 + +底部请求Q=.01706689453125;顶部初猜.000355560302734375。末态顶Cartesian v范围[.0002525877428643851, .00046274994794326185],平均.00035590787330683823,随x变化,未强制旧Q/NX。顶rho范围[.9999998677521944, 1.0000002067536116],最大相对误差2.06754e−7≤5e−7;顶切向max|u|=9.31323e−9。底/顶已指定速度最大误差3.66936e−8≤2e−6。 + +| 最后间隔结束步数 | u场RMS变化/.002 | v场RMS变化/.002 | 质量相对初始增量 | +| ---: | ---: | ---: | ---: | +| 19203 | 2.63806e−5 | **7.32955e−5** | 2.20613e−8 | +| 19722 | 2.68569e−5 | **6.99404e−5** | 2.71953e−8 | +| 20241 | 3.02468e−5 | **6.47420e−5** | 2.54232e−9 | +| 20760 | 2.93488e−5 | **6.02197e−5** | 2.17732e−8 | + +u通过5e−5门槛,v未通过。v的绝对RMS变化约1.20–1.47e−7,仍超过既定1e−7对应阈值。本包没有证明这是纯FP32噪声,也没有区分更慢收敛或离散波动,因此不能将其改判通过。 + +末态M=1583.999700639397;初末相对质量偏移1.93463e−7≤1e−3;末4间隔跨度2.97376e−8≤6e−6;每间隔质量变化也通过2e−6。全部流体rho最大偏差2.45519e−4≤.005,实际最大速度.00198440335≤.01。 + +内部距底8/16/24处实测Σrho*v分别.01707495563、.01707951725、.01708397269;相对rho_bar*Q最大误差.00100084933≤.005,截面跨度相对参照.000528336708≤.002。底/顶宏观质量流量分别.01706953719/.01708357781;底/顶宏观体积流量分别.01706693722/.01708357792。请求、宏观实际流量和population收支分别记录,没有互相替代。 + +镜像误差:rho偶对称/rho0=4.95464e−7≤2e−5,u奇对称/.002=.000202076431≤.002,v偶对称/.002=.000137883793≤.002。内部中心v符号和非零横向u检查通过。全部rho/u/v节点和各y截面流量保留在results.json。 + +### 16步全平面实际收支 + +审计从20760步末态开始,不用于延长稳态搜索。平均每步: + +| 实际量 | 数值 | +| --- | ---: | +| 底slot population净交换 | .01706229161937 | +| 底零目标flanks净交换 | 7.03462865204e−6 | +| 顶全平面净交换 | −.01708168501500 | +| 全边界净交换 | −1.23587669805e−5 | +| collision实际舍入 | +1.20385084301e−5 | +| 全域ΔM | −3.20258550346e−7 | + +每步独立ΔM减去边界真实净交换和collision舍入后残差为0;审计版/普通版DDF逐值相同。未扣collision的最大相对物理预算残差1.15158e−8,说明碰撞舍入仍在。压力库下的净排出与正舍入项在该16步窗口大部分抵消;这不证明舍入消失,也不能反推旧J2失败全部由连续模型造成。slot/flanks分账按节点索引,包含斜向分布与时间变化,不直接等同于各段宏观穿壁通量。 + +## 实际执行与原始证据 + +CPU实际命令: + +```bash +env PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python - <<'PY' > research/j3-reservoir-2026-10-12/cpu.log 2>&1 +from pathlib import Path +import sys, pytest, CelerisLab +from CelerisLab.cuda import compiler_v2 as compiler +root=Path('/home/frank14f/CelerisLab') +assert Path.cwd()==root and sys.executable=='/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python' +assert Path(CelerisLab.__file__).resolve()==root/'src/CelerisLab/__init__.py' +assert Path(compiler.kernel_path('kernel_v2.cu')).resolve()==root/'src/CelerisLab/lbm/kernels/kernel_v2.cu' +print(sys.executable, CelerisLab.__file__, compiler.kernel_path('kernel_v2.cu')) +raise SystemExit(pytest.main(['tests/unit/test_reservoir.py','tests/unit/test_slot_velocity.py','tests/unit/test_planar_velocity.py','tests/unit/test_build_contracts.py','tests/unit/test_state_regressions.py','tests/unit/test_simulation_lifecycle.py','-q','--tb=short','-p','no:cacheprovider'])) +PY +``` + +GPU前的沙箱nvidia-smi驱动访问失败,原始stderr见gpu-availability-sandbox.log。设备读取的首次自动审批超时,按工具允许仅重试一次成功;不是403,也未更改网络/驱动/环境设置。成功的`nvidia-smi -i 0,1`在21:35香港时间显示两卡均0%/5MiB,仅Xorg约4MiB,无计算任务。本轮选GPU0,只运行下列科研命令一次: + +```bash +env CUDA_VISIBLE_DEVICES=0 PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python tests/validation/run_j3_reservoir.py --output research/j3-reservoir-2026-10-12/results.json --baseline-kernels /tmp/celeris-j3-before/src/CelerisLab/lbm/kernels > research/j3-reservoir-2026-10-12/gpu-validation.log 2>&1 +``` + +验证器内部再次核对sys.executable、cwd、CelerisLab.__file__与kernel_v2.cu绝对来源。原始CPU成功/GPU失败日志及完整数值结果均保留。不存在JSON序列化失败或物理重跑;未安装依赖。 + +## 复核、增量与清理 + +architecture只读复核未发现公式、符号、时序、静态配置/checkpoint或验证停止条件的阻塞项,未编辑或运行计算。验收依据实际GPU结果,不能由代码复核替代。 + +incremental.diff相对本轮当前脏树起点:生产5文件+29/−2行,CONFIG说明+20行,测试/验证5文件+222/−11行;共11文件+271/−13行。没有新增生产文件或kernel launch。复用J2场/预算验证,未执行的恢复检查不再计为通过;新模式顶v记录为初猜而非目标。旧物理路径及旧research结果不改。 + +全部原文件仍在;J1/J2 research材料、四个配置头和notebook与本轮起点哈希一致。git diff --check及增量反向校验通过,反向重建逐字节匹配起点;临时重复src/tests备份在验证后清除,审计构建自动清理。保留所有原始结果和日志。因与旧脏树同文件交叠,没有提交或推送。 + +本轮停止交复审。后续复跑需要在临时副本中由本包diff反向重建起点CUDA目录,再作为必需baseline传入,不能在当前脏树直接反向应用。未覆盖负例/零幅值/新模式GPU恢复、长期稳定、精度阶、性能、其他支持组合或曲面/AMR;不得把旧J2失败或本J3正例改称通过。 diff --git a/research/j3-reservoir-2026-10-12/baseline-status.txt b/research/j3-reservoir-2026-10-12/baseline-status.txt new file mode 100644 index 0000000..a318e07 --- /dev/null +++ b/research/j3-reservoir-2026-10-12/baseline-status.txt @@ -0,0 +1,69 @@ + M pyproject.toml + M setup.py + M src/CelerisLab/__init__.py + M src/CelerisLab/body/__init__.py + M src/CelerisLab/body/ddf_patch.py + M src/CelerisLab/body/manager.py + M src/CelerisLab/body/preprocess/flag_overlay.py + M src/CelerisLab/common/__init__.py + M src/CelerisLab/common/checkpoint.py + M src/CelerisLab/config.py + M src/CelerisLab/configs/CONFIG.md + M src/CelerisLab/cuda/__init__.py + M src/CelerisLab/cuda/compiler_v2.py + M src/CelerisLab/cuda/context.py + M src/CelerisLab/lbm/__init__.py + M src/CelerisLab/lbm/curved_links.py + M src/CelerisLab/lbm/field.py + M src/CelerisLab/lbm/initializers.py + M src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh + M src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh + M src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh + M src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh + M src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh + M src/CelerisLab/lbm/kernels/config/config_grid.h + M src/CelerisLab/lbm/kernels/config/config_method.h + M src/CelerisLab/lbm/kernels/config/config_objects.h + M src/CelerisLab/lbm/kernels/config/config_physics.h + M src/CelerisLab/lbm/kernels/kernel_v2.cu + M src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh + M src/CelerisLab/lbm/kernels/operators/collision_trt.cuh + M src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh + M src/CelerisLab/lbm/kernels/step/aux_kernels.cu + M src/CelerisLab/lbm/kernels/step/esopull_sync.cu + M src/CelerisLab/lbm/kernels/step/init_flow.cu + M src/CelerisLab/lbm/kernels/step/one_step_double.cu + M src/CelerisLab/lbm/kernels/step/one_step_esopull.cu + M src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh + M src/CelerisLab/lbm/stepper.py + M src/CelerisLab/simulation.py + M tests/integration/test_body_sync_e2e.py + M tests/integration/test_ddf_patch.py + M tests/integration/test_sync_bodies_skeleton.py + M tests/integration/test_unified_obs.py + M tests/postproc/experiment.ipynb + M tests/validation/run_kan99b_rotating_cylinder.py + M tests/validation/run_sah04_st_matrix.py + M tests/validation/test_sensor_accuracy.py +?? docs/design/ +?? docs/multilevel_grid_architecture_analysis.md +?? research/ +?? src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh +?? "tests/audit/body\345\210\240\345\207\217\345\212\237\350\203\275.md" +?? tests/integration/_cases.py +?? tests/integration/test_numerical_gpu.py +?? tests/integration/test_runtime_contracts_gpu.py +?? tests/integration/test_state_gpu.py +?? tests/unit/cpp/ +?? tests/unit/test_build_contracts.py +?? tests/unit/test_context_ownership.py +?? tests/unit/test_initializers.py +?? tests/unit/test_numerical_operators.py +?? tests/unit/test_planar_velocity.py +?? tests/unit/test_simulation_lifecycle.py +?? tests/unit/test_slot_velocity.py +?? tests/unit/test_state_regressions.py +?? tests/validation/multigrid/ +?? tests/validation/run_j1.py +?? tests/validation/run_j2_slot.py +?? tests/validation/run_poiseuille.py diff --git a/research/j3-reservoir-2026-10-12/baseline.json b/research/j3-reservoir-2026-10-12/baseline.json new file mode 100644 index 0000000..060502e --- /dev/null +++ b/research/j3-reservoir-2026-10-12/baseline.json @@ -0,0 +1,224 @@ +{ + "head": "6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0", + "python": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "package": "/home/frank14f/CelerisLab/src/CelerisLab/__init__.py", + "cuda_source": "/home/frank14f/CelerisLab/src/CelerisLab/lbm/kernels/kernel_v2.cu", + "hashes": { + "docs/design/README.md": "98242c6960866d9b75aaf363f703edf02c4210bc38da1a340e9f6add49c6a3ce", + "docs/design/integrated_architecture.md": "c26b0d301321fe4b86d83d11c7e0b8d0c0545ee2995afa563966f004e9788132", + "docs/design/multi_level_grid_architecture.md": "e56a67d9129f2e3c311342e21a3fb2ed14bd492dd881949b251d5d9ac577bdee", + "docs/design/multi_level_summary.md": "eebf23e0bec9b154e5ce2128e2806e7558a7d4824b2c700cfd16afd1158b2354", + "docs/design/multi_level_visual_reference.md": "cad4bfbd561e5650ec297334529334b662a1ed35f7373c61f34ee22ecf1f66bd", + "docs/design/spatial_coupling_refinement.md": "36c878c7afad524999d89fa842297a98a0433e0283e78b36ca734ddbf8723ed8", + "docs/multilevel_grid_architecture_analysis.md": "90309730b1759d63531cb258c30db990ab71ca1b56ae47d0bbe2f4e2ae52012c", + "research/audit-2026-10-09/REVIEW.zh-CN.md": "2841fd3aa7a6baedbe1079d90915c8b05212b133824ed6abccaa1f09656eaefe", + "research/audit-2026-10-09/architecture-cpu-results.json": "e1b809210005c8765b13fddbb5ed710d15f6fcbb4c5788a4064f3e88808433ef", + "research/audit-2026-10-09/architecture-report.md": "861079dc3f4ced9fdc41bfb22002d32e190c0d630d3ba2f138f9dc7a949b8371", + "research/audit-2026-10-09/numerical-report.md": "970330b3a593f79f09866ce6ae82bc0ddd81226230d0a6ff06ae8ae756ee80da", + "research/audit-2026-10-09/numerical_collision_results.json": "51e5c263bb8cde82cedef2ccfdbf5ef657742a80218d7896b1ff877516e59693", + "research/audit-2026-10-09/numerical_compile_results.json": "c3b0ae02072a2ec408ada7513b542ec255f6855cb743a3ed7f91bd8f31504f44", + "research/audit-2026-10-09/numerical_semantics_results.json": "b95b065b594aa2911740dab216f87936c9bf7f7fa25acfda93b5738443564035", + "research/audit-2026-10-09/root-initializers-report.md": "ca448457c444949d5d0e1e10fa7121064510b77fc4c3512580900f0299219867", + "research/audit-2026-10-09/state-report.md": "f8708807efc2e109810c5955f7c1884a932668c0b3cb2963c2df3b09f2a3d5c4", + "research/audit-2026-10-09/state_results.json": "da9170df3e11231c73f20e5e79ed68e08966673d1dd52004ea6b6a279afc0dcd", + "research/design-2026-10-09/Contracts.lean": "2442d9a778ef20e8af3fecf23be6fea6d73c6299ff744c9664b652bc5ee3f034", + "research/design-2026-10-09/PLAN.zh-CN.md": "0341dd7ee306a040340c8e5dedb07a109e931c27dbf3c994d072aa78e3b6bc67", + "research/design-2026-10-09/api-architecture-study.md": "d6fb45ec784f0e1db55fb9f34e137b9f551db0b9b39fd4f0ef247a78fc34eedf", + "research/design-2026-10-09/grid-study.md": "4435dc1275ec5e15b118becc6ac391f306195d1e5beaa58037b1aff3bb2465c7", + "research/design-2026-10-09/jet-study.md": "a362142ef04a5ad5dbb4c9db9d221b1199dccec53780c8f2da49a15201cfe529", + "research/design-2026-10-09/jet_closure_check.py": "fde45d0f8518740ef5c0bf0fe7635d6adaf9a2e789927dd4e68e991c138ddc30", + "research/design-2026-10-09/jet_closure_results.json": "12cf7d400a206f9f9ec9ea6ad251fe6bb0232e27bcbed22fbc1ead2c0fc7d249", + "research/design-2026-10-09/math-and-history.md": "64f8c82e4949d6f58b46faa09800958714859c36cad20bbeeae8b449ae7a6099", + "research/design-2026-10-09/math-checks.json": "94750381954317cde8d649db26beaed8ea945666572a05030ca2b4d97d384011", + "research/design-2026-10-09/math_checks.py": "4254983a783fe4bad8888b3d7c243c87d991c7bbf242edb0f56f25cbaefee890", + "research/j1-2026-10-12/REVIEW.md": "13004a4f140acdcf59acb57e9e2dda1bb95763d30060f822a7c206c94b813a9f", + "research/j1-2026-10-12/baseline-status.txt": "ac398360e05b746b89ae0c3acfe202b5122e650a3bb1ff234ab26f874a303e64", + "research/j1-2026-10-12/baseline.json": "ad7afdf7b3913d11c07343e971fe2f43c2d1a2b99e3d5904a6ba89e3bb0b24fb", + "research/j1-2026-10-12/incremental.diff": "a454c23da7b0011645949c0fbf64d0c41ecfdab5642b1b7c5119868005d3c721", + "research/j1-2026-10-12/results.json": "449f8a17dacac0fc6d2489c4b10bac330dbbbdb38fad3ce54f739ac8c6d48e85", + "research/j2-slot-2026-10-12/REVIEW.md": "10c4a94ffc32e0a2c4e0f6593b7cfc28479b5869f279f0b9d0b708fa3a47d1e6", + "research/j2-slot-2026-10-12/baseline-status.txt": "812616e2d941efcf854e1b37d6e662dda1aaf2b69074fcc04017133e13b72166", + "research/j2-slot-2026-10-12/baseline.json": "e82a1844145fd0cbc585c581b29f80b56193f122cfe1dfa7578f26904a720285", + "research/j2-slot-2026-10-12/incremental.diff": "c9e391bc91438cd912c1ed5a419705d4388522f672c67a066cfc055e814e699f", + "research/j2-slot-2026-10-12/results.json": "7d35ca7989aed5380e0a45de7f583972566fc516a051da63c53b35514e267494", + "research/repair-2026-10-10/TRON_HANDOFF.md": "f8aaa3d99cd133c2055d4adf396a0a57d14f6006aea19e87611bd1c2c1b53a88", + "research/repair-2026-10-10/baseline-hashes.json": "d6a7d5f9ec5bceb0e7927d55603d9c5e70105982cd945723454659b19ab476e6", + "research/repair-2026-10-10/baseline-status.txt": "074088d793014e3b8154c58718058c7d300fb45595f5129fa957ef1e4cec38e2", + "research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff": "292b4bafe7a62d4fbbf7c165eb99929336edfcaa16b15f34f72ab71fcd928391", + "research/repair-2026-10-10/classic-results.json": "a5d15305f516fd378b54cf9029102be58a83a55a7bad4b8e058fcfe0cc9898f4", + "research/repair-2026-10-10/classic-signals.npz": "820c9a0b0713d7455f0a5839ac2cd5ee706086d1a26461225dcdb095673421e2", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "research/repair-2026-10-10/provenance.json": "a81b7e32ecf7182c9617df1b39bbb063a05ef89290ad501bac4573cd5e8a6832", + "research/repair-2026-10-10/repair-architecture.md": "49be42ff5c994017f3175e17efda14d84f0b68f8ecd239f66ccee38415b60c5a", + "research/repair-2026-10-10/repair-numerical.md": "0272ebfa8c519aad161c520542cf53156574661609b91fd5ccad7955fdf2bd7b", + "research/repair-2026-10-10/repair-state.md": "4d4aa1ec0c11a87d2c8380912e7ed74cf5c910ae42e5cc529effde36c9020969", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "e093248d4060f075d89c97c49438cfbf331ae61820889115688fc5ffab969dd6", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/cpp/slot_profile.cpp": "31ac58ccab175bf79fa59fc46d4c0842df18ab0a5e5916be84760d9da2b75788", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_planar_velocity.py": "b656da0880b4234b1db805544edbe0d2473cbcc7c2c869c71d8251337f62a982", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_slot_velocity.py": "6a9494de9a32c350389ccbed58af48951f6b25a21a258537d2e8b73eb67cb11d", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/run_j1.py": "6038a7fa9b4ce7e4e9598c7a3ea702aedcec2172aa60b05f78ddab69c7254284", + "tests/validation/run_j2_slot.py": "fded399800c09fc3cf028390361a58233cdc3ade6f4694cec993ad82588b2e43", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + ".cursor/rules/cuda-style.mdc": "5810cf8cff793a11ba5dedafaa8a4e7d7d3debb728d837ca1903ff6dc8d6fdb9", + ".cursor/rules/project-layout.mdc": "aeed1cd9d48447bcfcfb6a77250af7c5a3d500de4c6b2591c5684696fa04c3ec", + ".cursor/rules/python-style.mdc": "ece75cb724d7dc46cb8dab7ecf8d710a90b503001da0d506ea4bf772ce395e21", + ".cursorignore": "9f072faa815a6c6d4dc791a424201404f0f623338681ae3d2fcbdf86db1bd035", + ".gitignore": "de25151f4cfdf29ca64032e509398e1829c7ded2449ccff803b2fd87d859ae6c", + "LICENSE": "e98392425e9a0007d0d69f0f7c912c2dc1b59061a6197223962aac45599c76ea", + "README.md": "982d0df8b766b1d5017ba702b75e8b3cec8d22f57af8f434be27ea251652596c", + "docs/audit/audit_round2.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "docs/audit/body_refactor_notes.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "docs/audit/config_diagnosis.md": "b601652df0cac36a8faf2b317b11853221353716a25184cd9b2dc41373a7f183", + "docs/audit/kernel_layer_audit.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "docs/performance_analysis.md": "ba01aaa4d3c02b61a8dc55fd00518ac291ebbed79b6574190d6b7234a1158fcb", + "docs/tests_overview.md": "ffc9591fd7baa4261b2c1ce9cfa7aa13a3554a8d5df712035806266a5eaade3f", + "docs/validation_specs/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "docs/validation_specs/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "docs/validation_specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "docs/validation_specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "docs/validation_specs/exp_ctrl_matrix.md": "b7250576c23292988b6ef4bcfd080f611d41edc413c3cebd0eadcc8596049470", + "docs/validation_specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "output/round3_compatibility_summary.md": "319f2e6abde4b34cc4ec90ef461d8ebb85dd5a3ac1736cfa7a3fb110f2a69df9", + "pyproject.toml": "f24ab9ad3a6a728a9382b1bce2e721612fc76635f35c6f96dfddaa853b6e5a9c", + "setup.py": "bf07df7ec19de56710d2bb5f61873e09710cd059d46837dc3aa54f3e09ff9e06", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/checkpoint.py": "33941bcb1abd9b58ee98e2ee6cfc008f5a5d974947dd6597a88f05449ca0d4f4", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/config.py": "d227de53ef8152e3ab958b358e968a72493124a9c9fbd2eeffe63d72d3130152", + "src/CelerisLab/configs/CONFIG.md": "87ae21e992961b1b101f0a4a35fb0c49285fe369708e45e051cedc71a587c841", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/cuda/compiler_v2.py": "00765fc86218a3b0c99284e0dea99f33fff4921bb1310b6a16a6dc7d540e8b59", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "cdfd93d57a5d7ba9519fa56764d32bfa525d941158ad24417be36f0eb6cefd87", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/simulation.py": "34d69e71844f553790c5a2bed0f8fbfb912a9498e95b500d1ef2ad41cae3b424", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9" + } +} diff --git a/research/j3-reservoir-2026-10-12/incremental.diff b/research/j3-reservoir-2026-10-12/incremental.diff new file mode 100644 index 0000000..8e2c79a --- /dev/null +++ b/research/j3-reservoir-2026-10-12/incremental.diff @@ -0,0 +1,449 @@ +--- a/src/CelerisLab/common/checkpoint.py ++++ b/src/CelerisLab/common/checkpoint.py +@@ -220,6 +220,10 @@ + raise ValueError(f"Checkpoint on-site boundary mismatch on '{key}'") + if saved_cfg.get("wall_slot_width", 0) != lbm_cfg.wall_slot_width: + raise ValueError("Checkpoint on-site boundary mismatch on 'wall_slot_width'") ++ if saved_cfg.get("top_wall_bc", "velocity") != lbm_cfg.top_wall_bc: ++ raise ValueError("Checkpoint on-site boundary mismatch on 'top_wall_bc'") ++ if lbm_cfg.top_wall_bc == "reservoir" and saved_cfg.get("rho") != lbm_cfg.rho: ++ raise ValueError("Checkpoint reservoir boundary mismatch on 'rho'") + for key in ("lattice_model", "nx", "ny", "nz", "store_precision", + "streaming", "ddf_shifting"): + saved_val = saved_cfg.get(key) +--- a/src/CelerisLab/config.py ++++ b/src/CelerisLab/config.py +@@ -35,6 +35,7 @@ + } + OUTLET_MAP = {"neq_extrap": 0, "zero_gradient": 1, "blended": 2} + Y_WALL_BC_MAP = {"bounce_back": 0, "free_slip": 1, "on_site_velocity": 2} ++TOP_WALL_BC_MAP = {"velocity": 0, "reservoir": 1} + DTYPE_MAP = {"FP32": "float", "FP64": "double"} + + +@@ -88,6 +89,7 @@ + y_wall_bc: str = "bounce_back" + wall_normal_velocity: float = 0.0 + wall_slot_width: int = 0 ++ top_wall_bc: str = "velocity" + omega_min: float = 0.01 + omega_max: float = 1.99 + +@@ -112,6 +114,7 @@ + for name, allowed in ( + ("lattice_model", LATTICE_MODEL_MAP), ("collision", COLLISION_MAP), + ("streaming", STREAMING_MAP), ("y_wall_bc", Y_WALL_BC_MAP), ++ ("top_wall_bc", TOP_WALL_BC_MAP), + ("data_type", DTYPE_MAP), ("store_precision", PRECISION_MAP), + ("inlet_profile", INLET_MAP), ("inlet_scheme", INLET_SCHEME_MAP), + ("outlet_mode", OUTLET_MAP), +@@ -157,6 +160,8 @@ + raise ValueError("wall_slot_width must be 0 (disabled) or an integer in [2, nx]") + if self.wall_slot_width and (self.y_wall_bc != "on_site_velocity" or self.velocity != 0): + raise ValueError("wall_slot_width requires on_site_velocity and velocity=0") ++ if self.top_wall_bc == "reservoir" and (self.y_wall_bc != "on_site_velocity" or self.velocity != 0): ++ raise ValueError("reservoir requires on_site_velocity and velocity=0") + if self.y_wall_bc == "on_site_velocity": + if (not self.is_d2q9 or self.collision != "SRT" + or self.streaming != "double_buffer" or self.store_precision != "FP32" +@@ -202,12 +207,13 @@ + self.validate() + return (self.lattice_model, self.nx, self.ny, self.nz, self.data_type, + self.store_precision, bool(self.ddf_shifting), self.streaming, +- (self.velocity, self.wall_normal_velocity, self.wall_slot_width) ++ (self.velocity, self.wall_normal_velocity, self.wall_slot_width, ++ self.top_wall_bc, self.rho if self.top_wall_bc == "reservoir" else None) + if self.y_wall_bc == "on_site_velocity" else None) + + @property + def top_wall_normal_velocity(self) -> float: +- """Uniform top target balancing the bottom's discrete requested volume.""" ++ """Volume-balanced top velocity target, or reservoir initialization guess.""" + if self.wall_slot_width in (0, self.nx): + return self.wall_normal_velocity + weights = (max(0.0, 1.0-((2*x-(self.nx-1))/self.wall_slot_width)**2)**2 +@@ -244,6 +250,7 @@ + "WALL_NORMAL_VELOCITY": _float_literal(self.wall_normal_velocity), + "WALL_SLOT_WIDTH": self.wall_slot_width, + "TOP_WALL_NORMAL_VELOCITY": _float_literal(self.top_wall_normal_velocity), ++ "TOP_WALL_BC": TOP_WALL_BC_MAP[self.top_wall_bc], + "OMEGA_COLLISION_MIN": _float_literal(self.omega_min), + "OMEGA_COLLISION_MAX": _float_literal(self.omega_max), + "TRT_MAGIC_PARAM": _float_literal(self.trt_magic_param), +@@ -314,6 +321,7 @@ + y_wall_bc=m.get("y_wall_bc", "bounce_back"), + wall_normal_velocity=m.get("wall_normal_velocity", 0.0), + wall_slot_width=m.get("wall_slot_width", 0), ++ top_wall_bc=m.get("top_wall_bc", "velocity"), + omega_min=m["omega_guard"]["min"], + omega_max=m["omega_guard"]["max"], + threads_per_block=c["threads_per_block"], +--- a/src/CelerisLab/configs/CONFIG.md ++++ b/src/CelerisLab/configs/CONFIG.md +@@ -143,3 +143,23 @@ + The finite-slot mode is experimental: the bounded W=16, A=±0.002 checks in + `research/j2-slot-2026-10-12/REVIEW.md` exceeded the fixed late-time mass-drift + tolerance. It is not yet validated for steady mass balance or long runs. ++ ++### Opt-in top reservoir ++ ++Set `method.top_wall_bc="reservoir"` with `on_site_velocity` and ++`physics.velocity=0` to fix the top density to `physics.rho` and tangential ++velocity to zero. The top Cartesian normal velocity is solved locally from ++known poststream populations; positive means outflow, negative means inflow. ++It may vary along x and is **not** constrained to the bottom requested Q/NX. ++The bottom slot/flanks and the supported lattice/collision/storage scope stay ++the same. This changes the physical top boundary condition. ++ ++The initializer still uses uniform Q/NX at the top as an initial guess, then ++the density reconstruction applies from the first step. Mode, reservoir density ++and tangential velocity are fixed at construction and checked on restart. ++Missing `top_wall_bc` in older configs/checkpoints means `"velocity"`, which ++remains the default and preserves the previous two-velocity-boundary path. ++This reservoir mode is experimental. The bounded positive-slot test in ++`research/j3-reservoir-2026-10-12/REVIEW.md` passed its mass thresholds but failed ++the frozen full-field velocity convergence criterion; negative/zero cases and ++GPU restart validation were therefore not run. Long-run stability is unverified. +--- a/src/CelerisLab/cuda/compiler_v2.py ++++ b/src/CelerisLab/cuda/compiler_v2.py +@@ -178,6 +178,7 @@ + #define WALL_NORMAL_VELOCITY {m['WALL_NORMAL_VELOCITY']} + #define WALL_SLOT_WIDTH {m['WALL_SLOT_WIDTH']} + #define TOP_WALL_NORMAL_VELOCITY {m['TOP_WALL_NORMAL_VELOCITY']} ++#define TOP_WALL_BC {m['TOP_WALL_BC']} + + #define OMEGA_COLLISION_MIN {m['OMEGA_COLLISION_MIN']} + #define OMEGA_COLLISION_MAX {m['OMEGA_COLLISION_MAX']} +--- a/src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh ++++ b/src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh +@@ -31,4 +31,14 @@ + f[6] = f[5] + 0.5f*(f[1]-f[2]) - 0.5f*rho*u - (1.0f/6.0f)*rho*v; + f[7] = f[8] + 0.5f*(f[2]-f[1]) + 0.5f*rho*u - (1.0f/6.0f)*rho*v; + } ++ ++// Fixed top density and tangential u=0; positive Cartesian v exits upward. ++// J_y=rho*v follows from known poststream populations (ordinary D2Q9). ++__device__ __forceinline__ void reconstruct_top_reservoir(float* f, float rho) ++{ ++ const float jy = f[0]+f[1]+f[2]+2.0f*(f[3]+f[5]+f[8])-rho; ++ f[4] = f[3] - (2.0f/3.0f)*jy; ++ f[6] = f[5] + 0.5f*(f[1]-f[2]) - (1.0f/6.0f)*jy; ++ f[7] = f[8] + 0.5f*(f[2]-f[1]) - (1.0f/6.0f)*jy; ++} + #endif +--- a/src/CelerisLab/lbm/kernels/step/one_step_double.cu ++++ b/src/CelerisLab/lbm/kernels/step/one_step_double.cu +@@ -92,7 +92,11 @@ + // Reconstruct f(t+dt) on the physical plane, then collide below. + // This replaces, rather than compounds, the halfway wall correction. + if (y == 1u) reconstruct_bottom_velocity(f, 0.0f, bottom_wall_normal_velocity(x)); ++#if TOP_WALL_BC == 1 ++ else reconstruct_top_reservoir(f, RHO); ++#else + else reconstruct_top_velocity(f, U0, TOP_WALL_NORMAL_VELOCITY); ++#endif + #elif Y_WALL_BC == 1 + apply_wall_freeslip_d2q9_y_pull(y, f, fi_in, k); + #else +--- /dev/null ++++ b/tests/unit/cpp/reservoir.cpp +@@ -0,0 +1,26 @@ ++#include ++#include ++#define __device__ ++#define __forceinline__ inline ++#define WALL_NORMAL_VELOCITY 0.0f ++#include "boundary/planar_velocity.cuh" ++ ++int main() { ++ const int cy[9]={0,0,0,1,-1,1,-1,-1,1}; ++ const float w[9]={4.f/9,1.f/9,1.f/9,1.f/9,1.f/9,1.f/36,1.f/36,1.f/36,1.f/36}; ++ for (float rho : {1.f,1.04f}) for (float v : {-.01f,-.001f,0.f,.001f,.01f}) ++ for (int neq : {0,1}) { ++ float f[9]; ++ printf("%.9g %.9g %d\n",rho,v,neq); ++ for (int i=0;i<9;++i) { ++ float cu=cy[i]*v; ++ f[i]=w[i]*rho*(1+3*cu+4.5f*cu*cu-1.5f*v*v)+neq*.0001f*(i-4); ++ if (cy[i]==-1) f[i]=-7.f-i; ++ printf("%.9g ",f[i]); ++ } ++ puts(""); ++ reconstruct_top_reservoir(f,rho); ++ for (float value : f) printf("%.9g ",value); ++ puts(""); ++ } ++} +--- /dev/null ++++ b/tests/unit/test_reservoir.py +@@ -0,0 +1,90 @@ ++"""Actual reservoir helper moments and static boundary restart contracts.""" ++import json ++from types import SimpleNamespace ++ ++import h5py ++import numpy as np ++import pytest ++ ++from CelerisLab.config import LBMConfig, load_lbm_config ++from CelerisLab.common.checkpoint import save_checkpoint, load_checkpoint ++from .test_numerical_operators import compile_run, ROOT ++from .test_state_regressions import device, make_field, manager ++ ++ ++def test_reservoir_moments_and_known_populations(tmp_path): ++ lines = compile_run(tmp_path, 'reservoir.cpp', {}) ++ cx = np.array([0,1,-1,0,0,1,-1,1,-1]) ++ cy = np.array([0,0,0,1,-1,1,-1,-1,1]) ++ weights = np.array([4/9]+[1/9]*4+[1/36]*4) ++ for start in range(0, len(lines), 3): ++ rho, v, neq = np.fromstring(lines[start], sep=' ') ++ before, after = [np.fromstring(s, sep=' ') for s in lines[start+1:start+3]] ++ known = cy >= 0 ++ np.testing.assert_array_equal(after[known], before[known]) ++ # The normal momentum reference uses ONLY prescribed rho and original known values. ++ jy = before[cy == 0].sum()+2*before[cy == 1].sum()-rho ++ np.testing.assert_allclose([after.sum(), after@cx, after@cy], [rho, 0., jy], atol=3e-7, rtol=0) ++ if not neq: ++ cu = cy*v ++ expected = weights*rho*(1+3*cu+4.5*cu**2-1.5*v*v) ++ np.testing.assert_allclose(after, expected, atol=3e-7, rtol=0) ++ assert abs(after@cy/rho-v) < 3e-7 ++ ++ ++@pytest.mark.parametrize('override', [dict(top_wall_bc='unknown'), dict(y_wall_bc='bounce_back'), ++ dict(velocity=.01), dict(rho=0.)]) ++def test_reservoir_invalid_configuration(override): ++ cfg = dict(y_wall_bc='on_site_velocity', top_wall_bc='reservoir', velocity=0.) ++ cfg.update(override) ++ with pytest.raises(ValueError): ++ LBMConfig(**cfg).validate_runtime() ++ ++ ++def test_reservoir_json_and_static_signature(tmp_path): ++ data = json.loads((ROOT/'src/CelerisLab/configs/config_lbm.json').read_text()) ++ data['physics']['velocity'] = 0. ++ data['method'].update(y_wall_bc='on_site_velocity', top_wall_bc='reservoir', ++ collision='SRT', streaming='double_buffer', store_precision='FP32', ddf_shifting=False) ++ data['method']['les']['enabled'] = False ++ path = tmp_path/'config.json' ++ path.write_text(json.dumps(data)) ++ cfg = load_lbm_config(path) ++ assert cfg.to_macros()['TOP_WALL_BC'] == 1 ++ before = cfg.allocation_signature() ++ cfg.rho *= 1.01 ++ assert before != cfg.allocation_signature() ++ cfg.rho /= 1.01 ++ cfg.top_wall_bc = 'velocity' ++ assert before != cfg.allocation_signature() ++ ++ ++@pytest.mark.parametrize('mode, damage, accepted', [ ++ ('reservoir', 'mode', False), ('reservoir', 'missing', False), ++ ('reservoir', 'rho', False), ('reservoir', 'u', False), ++ ('reservoir', None, True), ('velocity', 'missing', True), ('velocity', 'mode', False), ++]) ++def test_reservoir_checkpoint_contract(device, tmp_path, mode, damage, accepted): ++ field = make_field(device, velocity=0., y_wall_bc='on_site_velocity', top_wall_bc=mode) ++ bodies = manager(field) ++ bodies.sync_to_gpu(field) ++ path = save_checkpoint(field, SimpleNamespace(step_count=3), field.cfg, bodies, ++ str(tmp_path/'reservoir.h5')) ++ with h5py.File(path, 'a') as hf: ++ assert hf.attrs['ckpt_version'] == 3 ++ cfg = json.loads(hf.attrs['config_json']) ++ if damage == 'missing': cfg.pop('top_wall_bc') ++ elif damage == 'mode': cfg['top_wall_bc'] = 'velocity' if mode == 'reservoir' else 'reservoir' ++ elif damage == 'rho': cfg['rho'] = 1.01 ++ elif damage == 'u': cfg['velocity'] = .01 ++ hf.attrs['config_json'] = json.dumps(cfg) ++ writes, before = device.writes, field.ddf.copy() ++ stepper = SimpleNamespace(_step_count=0) ++ if accepted: ++ load_checkpoint(path, field, stepper, field.cfg, bodies) ++ np.testing.assert_array_equal(field.ddf, before) ++ assert stepper._step_count == 3 ++ else: ++ with pytest.raises(ValueError, match='boundary mismatch'): ++ load_checkpoint(path, field, stepper, field.cfg, bodies) ++ assert device.writes == writes and stepper._step_count == 0 +--- a/tests/validation/run_j1.py ++++ b/tests/validation/run_j1.py +@@ -28,13 +28,14 @@ + u_change=2e-5, v_change=2e-7, budget_relative_residual=2e-7) + + +-def make_sim(v, mode='on_site_velocity', nx=16, top_u=.02, slot_width=0): ++def make_sim(v, mode='on_site_velocity', nx=16, top_u=.02, slot_width=0, top_mode='velocity'): + config = json.loads((ROOT/'src/CelerisLab/configs/config_lbm.json').read_text()) + config['grid'].update(nx=nx, ny=35, nz=1, lattice_model='D2Q9') + config['physics'].update(viscosity=.1, velocity=top_u, rho=1.) + config['method'].update(collision='SRT', streaming='double_buffer', + store_precision='FP32', ddf_shifting=False, +- y_wall_bc=mode, wall_normal_velocity=v, wall_slot_width=slot_width) ++ y_wall_bc=mode, wall_normal_velocity=v, wall_slot_width=slot_width, ++ top_wall_bc=top_mode) + config['method']['les']['enabled'] = False + with TemporaryDirectory(prefix='celeris-j1-config-') as folder: + lbm, body = Path(folder)/'lbm.json', Path(folder)/'body.json' +--- a/tests/validation/run_j2_slot.py ++++ b/tests/validation/run_j2_slot.py +@@ -38,12 +38,12 @@ + return bool(all(np.array_equal(a, b) for a, b in zip(*snapshots))) + + +-def restart_check(sim, amplitude): ++def restart_check(sim, amplitude, top_mode='velocity'): + with TemporaryDirectory(prefix='celeris-j2-checkpoint-') as folder: + path = sim.save_checkpoint(str(Path(folder)/'slot.h5')) + sim.run(7) + expected, flags, count = sim.get_ddf().copy(), sim.get_flags().copy(), sim.stepper.step_count +- with make_sim(amplitude, nx=NX, top_u=0., slot_width=WIDTH) as target: ++ with make_sim(amplitude, nx=NX, top_u=0., slot_width=WIDTH, top_mode=top_mode) as target: + target.load_checkpoint(path) + target.run(7) + equal = (np.array_equal(expected, target.get_ddf()) +@@ -52,10 +52,10 @@ + return bool(equal) + + +-def run_case(amplitude): ++def run_case(amplitude, top_mode='velocity', check_restart=True): + bottom, top, slot = targets(amplitude) + scale = max(abs(amplitude), .002) +- with make_sim(amplitude, nx=NX, top_u=0., slot_width=WIDTH) as sim: ++ with make_sim(amplitude, nx=NX, top_u=0., slot_width=WIDTH, top_mode=top_mode) as sim: + sim.initialize() + rho, ux, uy = observables(populations(sim)) + initial_mass = float(rho.sum()) +@@ -90,13 +90,15 @@ + symmetry = dict(rho=float(np.max(np.abs(rho-rho[:, ::-1]))), + u=float(np.max(np.abs(ux+ux[:, ::-1]))/scale), + v=float(np.max(np.abs(uy-uy[:, ::-1]))/scale)) +- boundary_error = float(max(np.abs(uy[0]-bottom).max(), np.abs(uy[-1]-top).max(), ++ boundary_error = float(max(np.abs(uy[0]-bottom).max(), ++ np.abs(uy[-1]-top).max() if top_mode == 'velocity' else 0., + np.abs(ux[[0, -1]]).max())) ++ top_density_error = float(np.abs(rho[-1]-sim.lbm_cfg.rho).max()/sim.lbm_cfg.rho) + offset = abs(mass-initial_mass)/initial_mass + speed = float(np.hypot(ux, uy).max()) + density_error = float(np.abs(rho-1).max()) + nonuniform = bool(uy[8, NX//2]*amplitude > 0 and np.abs(ux).max() > 1e-5) if amplitude else True +- restart = restart_check(sim, amplitude) if amplitude > 0 else None ++ restart = restart_check(sim, amplitude, top_mode) if check_restart and amplitude > 0 else None + budget = population_budget(sim, bottom_slot=slot) + checks = dict(steady=steady, initialization=initial_error <= GATES['boundary_error'], + boundary=boundary_error <= GATES['boundary_error'], +@@ -105,14 +107,25 @@ + flux=flux_error <= GATES['flux_error'] and flux_span <= GATES['flux_span'], + symmetry=symmetry['rho'] <= GATES['rho_symmetry'] and + max(symmetry['u'], symmetry['v']) <= GATES['velocity_symmetry'], +- zero=bool(amplitude or speed <= GATES['zero_speed']), nonuniform=nonuniform, +- restart=restart is not False, audit=budget['instrumented_matches_plain'] and ++ audit=budget['instrumented_matches_plain'] and + budget['max_relative_residual'] <= GATES['budget_residual']) ++ if amplitude: ++ checks['nonuniform'] = nonuniform ++ else: ++ checks.pop('flux') # Relative flux error has no nonzero reference here. ++ checks['zero_speed'] = speed <= GATES['zero_speed'] ++ if restart is not None: ++ checks['restart'] = restart ++ if top_mode == 'reservoir': ++ checks['top_density'] = top_density_error <= 5e-7 + checks = {name: bool(passed) for name, passed in checks.items()} + return dict(amplitude=amplitude, width=WIDTH, nx=NX, height=32, viscosity=.1, top_u=0., + steps=sim.stepper.step_count-16, max_steps=40*CHUNK, checks=checks, passed=all(checks.values()), +- requested_volume=request_q, top_target=top, bottom_targets=bottom.tolist(), ++ requested_volume=request_q, top_initial_guess=top, ++ top_target=top if top_mode == 'velocity' else None, bottom_targets=bottom.tolist(), + velocity_scale=scale, rho_scale=1., initial_boundary_error=initial_error, ++ top_mode=top_mode, top_density_error=top_density_error, ++ top_velocity_range=[float(uy[-1].min()), float(uy[-1].max())], + boundary_error=boundary_error, mass_offset=offset, mass_window_span=span, + flux_error=flux_error, flux_span=flux_span, section_y=sections, + mass_flux_by_y=actual_mass_flux.tolist(), volume_flux_by_y=actual_volume_flux.tolist(), +--- /dev/null ++++ b/tests/validation/run_j3_reservoir.py +@@ -0,0 +1,81 @@ ++"""Sequential reservoir experiment: stop after a failed positive case.""" ++import argparse ++import json ++import os ++from pathlib import Path ++import sys ++from unittest.mock import patch ++ ++import numpy as np ++import CelerisLab ++from CelerisLab.cuda import compiler_v2 as compiler ++from run_j1 import ROOT, make_sim, off_path_check ++from run_j2_slot import NX, WIDTH, GATES, run_case, restart_check ++ ++ ++def old_velocity_check(baseline, width, top_u): ++ states = [] ++ for source in (baseline, Path(compiler.kernel_path(''))): ++ with patch.object(compiler, '_KERNEL_DIR', str(source)): ++ with make_sim(.002, nx=NX, slot_width=width, top_u=top_u) as sim: ++ sim.initialize() ++ initial = sim.get_ddf().copy() ++ sim.run(64) ++ states.append((initial, sim.get_ddf().copy(), sim.get_flags().copy())) ++ return bool(all(np.array_equal(a, b) for a, b in zip(*states))) ++ ++ ++def checkpoint_check(): ++ with make_sim(.002, nx=NX, top_u=0., slot_width=WIDTH, top_mode='reservoir') as sim: ++ sim.initialize() ++ sim.run(11) ++ return restart_check(sim, .002, top_mode='reservoir') ++ ++ ++def main(): ++ parser = argparse.ArgumentParser(description=__doc__) ++ parser.add_argument('--output', type=Path, required=True) ++ parser.add_argument('--baseline-kernels', type=Path, required=True) ++ args = parser.parse_args() ++ assert Path.cwd() == ROOT == Path('/home/frank14f/CelerisLab') ++ assert sys.executable == '/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python' ++ assert Path(CelerisLab.__file__).resolve() == ROOT/'src/CelerisLab/__init__.py' ++ assert Path(compiler.kernel_path('kernel_v2.cu')).resolve() == ROOT/'src/CelerisLab/lbm/kernels/kernel_v2.cu' ++ assert os.environ.get('CUDA_VISIBLE_DEVICES') in ('0', '1') ++ report = dict(python=sys.executable, package=CelerisLab.__file__, ++ cuda_source=compiler.kernel_path('kernel_v2.cu'), physical_gpu=os.environ['CUDA_VISIBLE_DEVICES'], ++ gates=dict(GATES, top_density_error=5e-7), regressions={}, cases=[], ++ status=dict(positive='not_tested', negative='not_tested', zero='not_tested', ++ checkpoint='not_tested')) ++ ++ def save(): ++ args.output.write_text(json.dumps(report, indent=2)+'\n') ++ ++ for name, result in ( ++ ('j1_velocity_top', old_velocity_check(args.baseline_kernels, 0, .02)), ++ ('j2_velocity_top', old_velocity_check(args.baseline_kernels, WIDTH, 0.)), ++ ('default_off', off_path_check(args.baseline_kernels)), ++ ): ++ report['regressions'][name] = 'passed' if result else 'failed' ++ save() ++ print(json.dumps(report['regressions']), flush=True) ++ if 'failed' in report['regressions'].values(): ++ return 1 ++ for name, amplitude in (('positive', .002), ('negative', -.002), ('zero', 0.)): ++ case = run_case(amplitude, top_mode='reservoir', check_restart=False) ++ report['cases'].append(case) ++ report['status'][name] = 'passed' if case['passed'] else 'failed' ++ save() ++ print(json.dumps({k: case[k] for k in ('amplitude', 'steps', 'checks', 'mass_offset', ++ 'mass_window_span', 'flux_error', 'top_density_error', ++ 'top_velocity_range', 'symmetry')}), flush=True) ++ if not case['passed']: ++ return 1 ++ report['status']['checkpoint'] = 'passed' if checkpoint_check() else 'failed' ++ save() ++ print(json.dumps(report['status']), flush=True) ++ return 0 if all(status == 'passed' for status in report['status'].values()) else 1 ++ ++ ++if __name__ == '__main__': ++ raise SystemExit(main()) diff --git a/research/j3-reservoir-2026-10-12/results.json b/research/j3-reservoir-2026-10-12/results.json new file mode 100644 index 0000000..7fd5e51 --- /dev/null +++ b/research/j3-reservoir-2026-10-12/results.json @@ -0,0 +1,5842 @@ +{ + "python": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "package": "/home/frank14f/CelerisLab/src/CelerisLab/__init__.py", + "cuda_source": "/home/frank14f/CelerisLab/src/CelerisLab/lbm/kernels/kernel_v2.cu", + "physical_gpu": "0", + "gates": { + "velocity_change": 5e-05, + "mass_change": 2e-06, + "mass_window_span": 6e-06, + "mass_offset": 0.001, + "rho_error": 0.005, + "speed": 0.01, + "zero_speed": 2e-06, + "flux_error": 0.005, + "flux_span": 0.002, + "boundary_error": 2e-06, + "rho_symmetry": 2e-05, + "velocity_symmetry": 0.002, + "budget_residual": 2e-07, + "top_density_error": 5e-07 + }, + "regressions": { + "j1_velocity_top": "passed", + "j2_velocity_top": "passed", + "default_off": "passed" + }, + "cases": [ + { + "amplitude": 0.002, + "width": 16, + "nx": 48, + "height": 32, + "viscosity": 0.1, + "top_u": 0.0, + "steps": 20760, + "max_steps": 20760, + "checks": { + "steady": false, + "initialization": true, + "boundary": true, + "mass": true, + "bounded": true, + "flux": true, + "symmetry": true, + "audit": true, + "nonuniform": true, + "top_density": true + }, + "passed": false, + "requested_volume": 0.01706689453125, + "top_initial_guess": 0.00035556030273437505, + "top_target": null, + "bottom_targets": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 2.9327392578125e-05, + 0.000230987548828125, + 0.000556182861328125, + 0.000934600830078125, + 0.0013076477050781251, + 0.0016284484863281251, + 0.001861846923828125, + 0.001984405517578125, + 0.001984405517578125, + 0.001861846923828125, + 0.0016284484863281251, + 0.0013076477050781251, + 0.000934600830078125, + 0.000556182861328125, + 0.000230987548828125, + 2.9327392578125e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "velocity_scale": 0.002, + "rho_scale": 1.0, + "initial_boundary_error": 1.7896178272809593e-08, + "top_mode": "reservoir", + "top_density_error": 2.0675361156463623e-07, + "top_velocity_range": [ + 0.0002525877428643851, + 0.00046274994794326185 + ], + "boundary_error": 3.6693536221749264e-08, + "mass_offset": 1.9346344941350367e-07, + "mass_window_span": 2.9737647075881005e-08, + "flux_error": 0.001000849329310394, + "flux_span": 0.0005283367079496819, + "section_y": [ + 8, + 16, + 24 + ], + "mass_flux_by_y": [ + 0.017069537192583084, + 0.01706956885755062, + 0.017070896923542023, + 0.017070511355996132, + 0.017072392627596855, + 0.017071567475795746, + 0.01707415096461773, + 0.01707199215888977, + 0.017074955627322197, + 0.01707262545824051, + 0.0170767642557621, + 0.017073718830943108, + 0.017078131437301636, + 0.017073582857847214, + 0.01707862876355648, + 0.01707403175532818, + 0.017079517245292664, + 0.017074348405003548, + 0.017080416902899742, + 0.017075225710868835, + 0.017081644386053085, + 0.017076246440410614, + 0.017082776874303818, + 0.01707666553556919, + 0.017083972692489624, + 0.017077645286917686, + 0.017084259539842606, + 0.01707760989665985, + 0.01708413101732731, + 0.017077697440981865, + 0.01708391308784485, + 0.017079144716262817, + 0.017083577811717987 + ], + "volume_flux_by_y": [ + 0.017066937221890666, + 0.017067670069592387, + 0.01706952474412799, + 0.017069514132278633, + 0.017071658002355286, + 0.017071017828197168, + 0.01707373362309134, + 0.017071672234843297, + 0.017074706087444477, + 0.01707243048311169, + 0.017076610723741167, + 0.017073597423437985, + 0.017078034735713434, + 0.017073505777427098, + 0.017078567085763878, + 0.017073982281520017, + 0.0170794766939475, + 0.01707431551762901, + 0.017080390246766285, + 0.017075204536913448, + 0.01708162669987169, + 0.017076231652745723, + 0.017082764957516903, + 0.017076655150046492, + 0.017083964733611255, + 0.017077638869729503, + 0.017084254413358604, + 0.01707760597754336, + 0.017084127906970458, + 0.01707769489302037, + 0.017083911070671195, + 0.017079143603944646, + 0.017083577918728235 + ], + "symmetry": { + "rho": 4.954636096954346e-07, + "u": 0.00020207643052871753, + "v": 0.00013788379324631206 + }, + "max_speed": 0.001984403349076506, + "rho_error": 0.0002455189824104309, + "rho": [ + [ + 0.9999855663627386, + 0.9999855775386095, + 0.9999853484332561, + 0.9999847933650017, + 0.9999841786921024, + 0.999983187764883, + 0.9999820180237293, + 0.999980516731739, + 0.9999788273125887, + 0.9999764878302813, + 0.9999731220304966, + 0.9999686889350414, + 0.9999621734023094, + 0.9999540243297815, + 0.9999434929341078, + 0.9999045990407467, + 0.999834593385458, + 0.9998676404356956, + 0.9999493453651667, + 1.0000333730131388, + 1.0001113153994083, + 1.0001758746802807, + 1.0002220142632723, + 1.0002455189824104, + 1.0002455152571201, + 1.0002218522131443, + 1.0001758728176355, + 1.0001111682504416, + 1.0000335667282343, + 0.9999494347721338, + 0.9998676534742117, + 0.9998345915228128, + 0.9999045766890049, + 0.9999434761703014, + 0.9999541454017162, + 0.9999621585011482, + 0.9999689627438784, + 0.9999732449650764, + 0.9999764934182167, + 0.9999788273125887, + 0.9999806396663189, + 0.9999821186065674, + 0.9999831896275282, + 0.9999841526150703, + 0.9999849461019039, + 0.9999852329492569, + 0.9999854546040297, + 0.9999855402857065 + ], + [ + 0.999985720962286, + 0.9999855905771255, + 0.9999852310866117, + 0.9999849107116461, + 0.9999842718243599, + 0.9999835584312677, + 0.9999823402613401, + 0.9999809730798006, + 0.9999789204448462, + 0.9999767132103443, + 0.999973664060235, + 0.9999695885926485, + 0.9999637883156538, + 0.9999550860375166, + 0.9999422933906317, + 0.9999273866415024, + 0.9999153353273869, + 0.999934833496809, + 0.999976135790348, + 1.0000296868383884, + 1.0000838041305542, + 1.0001301188021898, + 1.0001635234802961, + 1.000181082636118, + 1.000181082636118, + 1.0001633148640394, + 1.0001301113516092, + 1.0000838339328766, + 1.0000297874212265, + 0.9999765306711197, + 0.9999349005520344, + 0.999915536493063, + 0.9999276548624039, + 0.9999423436820507, + 0.9999549705535173, + 0.9999638013541698, + 0.9999696016311646, + 0.9999735448509455, + 0.999976659193635, + 0.9999790135771036, + 0.9999808557331562, + 0.9999821148812771, + 0.9999834131449461, + 0.9999841526150703, + 0.9999847915023565, + 0.9999852403998375, + 0.9999855924397707, + 0.9999856818467379 + ], + [ + 0.9999857675284147, + 0.9999856948852539, + 0.9999855719506741, + 0.9999852403998375, + 0.9999846182763577, + 0.99998364970088, + 0.9999827798455954, + 0.9999813642352819, + 0.999979754909873, + 0.9999774862080812, + 0.9999749213457108, + 0.9999714065343142, + 0.9999670013785362, + 0.9999616853892803, + 0.999954167753458, + 0.9999487716704607, + 0.999954117462039, + 0.9999676458537579, + 0.9999938029795885, + 1.0000296123325825, + 1.0000663828104734, + 1.000098703429103, + 1.0001225229352713, + 1.0001350473612547, + 1.0001350305974483, + 1.0001225285232067, + 1.000098703429103, + 1.000066226348281, + 1.000029694288969, + 0.9999939706176519, + 0.9999676011502743, + 0.9999542683362961, + 0.9999488275498152, + 0.9999541398137808, + 0.9999616369605064, + 0.9999671149998903, + 0.9999715313315392, + 0.9999749641865492, + 0.9999775551259518, + 0.9999795630574226, + 0.9999812990427017, + 0.9999826438724995, + 0.9999836478382349, + 0.9999845400452614, + 0.9999851398169994, + 0.9999854248017073, + 0.9999858234077692, + 0.9999857824295759 + ], + [ + 0.999986095353961, + 0.9999860860407352, + 0.9999857880175114, + 0.9999854471534491, + 0.9999847803264856, + 0.9999841842800379, + 0.9999834187328815, + 0.9999820794910192, + 0.9999809134751558, + 0.9999791327863932, + 0.9999770727008581, + 0.9999745041131973, + 0.999971492215991, + 0.9999686535447836, + 0.9999664537608624, + 0.9999666716903448, + 0.9999734256416559, + 0.9999854732304811, + 1.0000048708170652, + 1.0000288654118776, + 1.0000537373125553, + 1.000076299533248, + 1.0000929553061724, + 1.0001019481569529, + 1.000101923942566, + 1.000093013048172, + 1.000076312571764, + 1.000053958967328, + 1.0000288132578135, + 1.0000048633664846, + 0.9999855030328035, + 0.999973438680172, + 0.999966561794281, + 0.9999664388597012, + 0.9999684896320105, + 0.9999716822057962, + 0.99997453764081, + 0.9999770075082779, + 0.9999792687594891, + 0.9999807346612215, + 0.9999820310622454, + 0.9999834354966879, + 0.9999841768294573, + 0.9999849312007427, + 0.999985359609127, + 0.999985808506608, + 0.9999861940741539, + 0.9999861717224121 + ], + [ + 0.9999866224825382, + 0.9999863673001528, + 0.9999863542616367, + 0.9999858997762203, + 0.9999853372573853, + 0.9999848287552595, + 0.9999841898679733, + 0.9999831710010767, + 0.9999821279197931, + 0.9999809730798006, + 0.9999794084578753, + 0.9999781902879477, + 0.9999766983091831, + 0.9999756440520287, + 0.9999760985374451, + 0.999978793784976, + 0.9999852906912565, + 0.999995632097125, + 1.0000100322067738, + 1.000027073547244, + 1.000044610351324, + 1.0000600647181273, + 1.000071905553341, + 1.0000780187547207, + 1.0000780150294304, + 1.0000715870410204, + 1.0000599678605795, + 1.0000443514436483, + 1.0000271033495665, + 1.0000101905316114, + 0.9999959357082844, + 0.9999852851033211, + 0.9999787956476212, + 0.9999761190265417, + 0.9999756868928671, + 0.9999767001718283, + 0.999978095293045, + 0.9999794270843267, + 0.9999809674918652, + 0.999982126057148, + 0.9999831859022379, + 0.9999841749668121, + 0.9999849312007427, + 0.9999853484332561, + 0.9999861177057028, + 0.9999863225966692, + 0.9999866634607315, + 0.9999867547303438 + ], + [ + 0.9999872017651796, + 0.9999868161976337, + 0.9999867212027311, + 0.9999866429716349, + 0.9999860990792513, + 0.9999856874346733, + 0.9999852050095797, + 0.9999846089631319, + 0.9999836385250092, + 0.9999830909073353, + 0.9999822601675987, + 0.9999815411865711, + 0.9999811481684446, + 0.9999816659837961, + 0.999983336776495, + 0.9999870136380196, + 0.9999928623437881, + 1.0000013709068298, + 1.0000124089419842, + 1.0000246614217758, + 1.0000373516231775, + 1.000048192217946, + 1.0000562854111195, + 1.0000606812536716, + 1.0000605676323175, + 1.0000560451298952, + 1.0000480525195599, + 1.0000368561595678, + 1.0000245552510023, + 1.000012293457985, + 1.000001398846507, + 0.9999927636235952, + 0.9999869856983423, + 0.9999833218753338, + 0.9999816585332155, + 0.9999813698232174, + 0.9999815188348293, + 0.9999823495745659, + 0.9999830853193998, + 0.9999836962670088, + 0.9999845940619707, + 0.9999852310866117, + 0.9999859072268009, + 0.9999863151460886, + 0.9999866001307964, + 0.9999869782477617, + 0.9999872390180826, + 0.9999872129410505 + ], + [ + 0.9999877288937569, + 0.9999875891953707, + 0.9999873675405979, + 0.9999872334301472, + 0.9999870825558901, + 0.99998664483428, + 0.9999863151460886, + 0.9999857153743505, + 0.9999853204935789, + 0.9999851379543543, + 0.999984746798873, + 0.9999846965074539, + 0.9999852608889341, + 0.9999864436686039, + 0.9999886527657509, + 0.9999923780560493, + 0.999997541308403, + 1.0000045485794544, + 1.0000130832195282, + 1.000022092834115, + 1.0000311341136694, + 1.0000389330089092, + 1.0000446736812592, + 1.0000480134040117, + 1.0000476781278849, + 1.0000445451587439, + 1.0000389404594898, + 1.0000310093164444, + 1.0000219568610191, + 1.0000130664557219, + 1.0000045988708735, + 0.999997591599822, + 0.9999923855066299, + 0.9999885112047195, + 0.9999862965196371, + 0.9999852757900953, + 0.9999848902225494, + 0.9999848585575819, + 0.9999851435422897, + 0.9999855682253838, + 0.9999858494848013, + 0.9999864045530558, + 0.999986732378602, + 0.999986931681633, + 0.999987406656146, + 0.9999876171350479, + 0.9999877065420151, + 0.999987717717886 + ], + [ + 0.9999885000288486, + 0.999988492578268, + 0.9999883491545916, + 0.9999880623072386, + 0.9999878257513046, + 0.9999877475202084, + 0.9999874588102102, + 0.9999873861670494, + 0.9999872148036957, + 0.9999870490282774, + 0.9999872483313084, + 0.9999875407665968, + 0.9999885316938162, + 0.9999901466071606, + 0.9999923724681139, + 0.9999958537518978, + 1.000000637024641, + 1.0000062212347984, + 1.0000125709921122, + 1.000019421800971, + 1.00002602301538, + 1.0000318679958582, + 1.000035885721445, + 1.0000381097197533, + 1.000038105994463, + 1.000035848468542, + 1.0000318940728903, + 1.0000260006636381, + 1.0000194367021322, + 1.0000125709921122, + 1.00000611692667, + 1.0000005085021257, + 0.9999958612024784, + 0.9999923724681139, + 0.9999900981783867, + 0.9999885279685259, + 0.9999875128269196, + 0.9999873656779528, + 0.9999872241169214, + 0.9999872297048569, + 0.9999872613698244, + 0.9999875128269196, + 0.999987693503499, + 0.9999881647527218, + 0.9999883808195591, + 0.9999883584678173, + 0.9999884366989136, + 0.9999883249402046 + ], + [ + 0.9999892227351665, + 0.9999891128391027, + 0.9999890848994255, + 0.9999890234321356, + 0.9999889265745878, + 0.9999887552112341, + 0.9999885428696871, + 0.9999886695295572, + 0.9999889265745878, + 0.9999889172613621, + 0.9999894239008427, + 0.9999900199472904, + 0.9999911524355412, + 0.9999928269535303, + 0.9999952968209982, + 0.9999983217567205, + 1.0000022947788239, + 1.0000067092478275, + 1.000011982396245, + 1.0000170338898897, + 1.0000220779329538, + 1.000026447698474, + 1.000029243528843, + 1.0000310521572828, + 1.000030804425478, + 1.0000292398035526, + 1.0000262968242168, + 1.0000219866633415, + 1.0000171717256308, + 1.0000121165066957, + 1.0000067334622145, + 1.000002358108759, + 0.9999984484165907, + 0.9999952707439661, + 0.9999927431344986, + 0.9999910593032837, + 0.9999900441616774, + 0.9999896306544542, + 0.9999889358878136, + 0.9999888092279434, + 0.9999888110905886, + 0.9999887980520725, + 0.9999887365847826, + 0.9999888520687819, + 0.9999891743063927, + 0.9999890420585871, + 0.999989241361618, + 0.9999890979379416 + ], + [ + 0.9999899864196777, + 0.9999898802489042, + 0.9999898876994848, + 0.999989839270711, + 0.9999899994581938, + 0.9999899622052908, + 0.999989977106452, + 0.9999899659305811, + 0.9999900367110968, + 0.9999904856085777, + 0.9999912083148956, + 0.9999920781701803, + 0.9999933429062366, + 0.9999948646873236, + 0.9999972954392433, + 0.9999999944120646, + 1.0000032521784306, + 1.0000067222863436, + 1.0000110436230898, + 1.000015003606677, + 1.0000187121331692, + 1.0000217650085688, + 1.0000240970402956, + 1.0000251680612564, + 1.000025199726224, + 1.000023975968361, + 1.0000217892229557, + 1.000018734484911, + 1.0000150054693222, + 1.0000108368694782, + 1.000006740912795, + 1.000003119930625, + 1.0000000279396772, + 0.9999971687793732, + 0.9999948851764202, + 0.9999933335930109, + 0.999991973862052, + 0.9999911189079285, + 0.9999906811863184, + 0.9999901223927736, + 0.9999901056289673, + 0.9999899808317423, + 0.9999899789690971, + 0.9999898914247751, + 0.9999899119138718, + 0.9999899752438068, + 0.9999899212270975, + 0.9999899957329035 + ], + [ + 0.9999908152967691, + 0.9999906904995441, + 0.9999906308948994, + 0.9999906737357378, + 0.9999908395111561, + 0.9999909717589617, + 0.9999911841005087, + 0.9999911095947027, + 0.9999915491789579, + 0.999992061406374, + 0.9999928064644337, + 0.999993709847331, + 0.9999948907643557, + 0.999996492639184, + 0.9999987296760082, + 1.0000010132789612, + 1.0000037625432014, + 1.0000068061053753, + 1.000009996816516, + 1.0000130534172058, + 1.0000157691538334, + 1.000018524006009, + 1.000019846484065, + 1.000020695850253, + 1.0000206865370274, + 1.000019708648324, + 1.0000181179493666, + 1.000015726312995, + 1.00001304410398, + 1.000009760260582, + 1.0000065863132477, + 1.0000037290155888, + 1.0000009983778, + 0.9999984409660101, + 0.9999965075403452, + 0.999994957819581, + 0.9999934993684292, + 0.999992722645402, + 0.9999920949339867, + 0.9999915733933449, + 0.9999912977218628, + 0.9999910723417997, + 0.9999909345060587, + 0.9999907147139311, + 0.999990563839674, + 0.999990675598383, + 0.9999907221645117, + 0.9999907072633505 + ], + [ + 0.9999915491789579, + 0.9999914318323135, + 0.9999915901571512, + 0.9999915454536676, + 0.9999917037785053, + 0.9999916646629572, + 0.9999921135604382, + 0.9999921731650829, + 0.9999928213655949, + 0.9999932814389467, + 0.999994020909071, + 0.9999950099736452, + 0.9999961908906698, + 0.9999976195394993, + 0.999999575316906, + 1.0000015757977962, + 1.0000038351863623, + 1.0000062733888626, + 1.0000087730586529, + 1.0000114887952805, + 1.0000134874135256, + 1.0000153295695782, + 1.0000165533274412, + 1.0000173021107912, + 1.0000172909349203, + 1.0000164154917002, + 1.000015303492546, + 1.0000133365392685, + 1.0000110622495413, + 1.000008700415492, + 1.0000062938779593, + 1.0000040251761675, + 1.0000015627592802, + 0.9999993555247784, + 0.9999976493418217, + 0.9999960567802191, + 0.9999950248748064, + 0.9999938681721687, + 0.9999932609498501, + 0.9999927189201117, + 0.9999924153089523, + 0.9999919962137938, + 0.9999919217079878, + 0.999991724267602, + 0.999991662800312, + 0.999991649761796, + 0.9999914690852165, + 0.9999916777014732 + ], + [ + 0.9999923538416624, + 0.9999923259019852, + 0.9999922253191471, + 0.9999925512820482, + 0.9999925848096609, + 0.9999927338212729, + 0.9999929200857878, + 0.9999932516366243, + 0.9999937862157822, + 0.9999943450093269, + 0.9999950062483549, + 0.9999960064888, + 0.9999970868229866, + 0.9999984577298164, + 0.9999999906867743, + 1.0000018011778593, + 1.0000038370490074, + 1.000005716457963, + 1.0000078212469816, + 1.0000097695738077, + 1.00001160800457, + 1.0000131763517857, + 1.0000139325857162, + 1.0000145714730024, + 1.0000144448131323, + 1.0000138338655233, + 1.0000127460807562, + 1.0000116154551506, + 1.0000097919255495, + 1.000007752329111, + 1.0000057239085436, + 1.000003844499588, + 1.0000019129365683, + 0.9999999906867743, + 0.9999982547014952, + 0.9999972451478243, + 0.9999961014837027, + 0.9999951217323542, + 0.999994371086359, + 0.9999938607215881, + 0.999993247911334, + 0.999992810189724, + 0.9999928027391434, + 0.9999925494194031, + 0.9999922960996628, + 0.9999923277646303, + 0.9999921843409538, + 0.9999922066926956 + ], + [ + 0.9999929890036583, + 0.9999931156635284, + 0.9999931193888187, + 0.9999932423233986, + 0.9999932050704956, + 0.999993534758687, + 0.9999938625842333, + 0.9999942015856504, + 0.999994870275259, + 0.9999953173100948, + 0.9999961368739605, + 0.9999968949705362, + 0.9999978169798851, + 0.9999990127980709, + 1.000000650063157, + 1.0000019073486328, + 1.0000036899000406, + 1.0000052098184824, + 1.0000067371875048, + 1.000008450821042, + 1.0000099502503872, + 1.0000111013650894, + 1.0000118426978588, + 1.0000121276825666, + 1.0000121593475342, + 1.0000116806477308, + 1.000010833144188, + 1.0000097956508398, + 1.0000084154307842, + 1.0000067260116339, + 1.000005230307579, + 1.0000039115548134, + 1.0000021625310183, + 1.0000005178153515, + 0.9999990090727806, + 0.9999977685511112, + 0.9999966770410538, + 0.9999960083514452, + 0.9999950602650642, + 0.9999948609620333, + 0.9999943803995848, + 0.9999938849359751, + 0.9999934192746878, + 0.99999332241714, + 0.9999930933117867, + 0.9999929610639811, + 0.9999929908663034, + 0.9999931082129478 + ], + [ + 0.9999935291707516, + 0.9999936670064926, + 0.9999938048422337, + 0.999993933364749, + 0.9999939948320389, + 0.9999943543225527, + 0.9999945312738419, + 0.999994907528162, + 0.9999954011291265, + 0.9999961201101542, + 0.9999967254698277, + 0.9999975115060806, + 0.9999984260648489, + 0.9999994393438101, + 1.0000008847564459, + 1.0000018887221813, + 1.0000033490359783, + 1.0000048503279686, + 1.000006077811122, + 1.0000073537230492, + 1.000008413568139, + 1.0000094156712294, + 1.0000099670141935, + 1.0000102277845144, + 1.000010408461094, + 1.0000099539756775, + 1.0000093393027782, + 1.0000082720071077, + 1.000007251277566, + 1.0000060461461544, + 1.0000048149377108, + 1.0000033229589462, + 1.0000021755695343, + 1.0000009573996067, + 0.9999995604157448, + 0.9999984502792358, + 0.9999975357204676, + 0.9999966379255056, + 0.9999960921704769, + 0.9999956022948027, + 0.999995082616806, + 0.9999944940209389, + 0.9999941736459732, + 0.9999938812106848, + 0.9999938253313303, + 0.9999936502426863, + 0.9999936576932669, + 0.9999936055392027 + ], + [ + 0.9999942444264889, + 0.9999942630529404, + 0.999994421377778, + 0.9999945089221001, + 0.9999948721379042, + 0.9999949224293232, + 0.9999952986836433, + 0.9999955613166094, + 0.9999961573630571, + 0.9999965280294418, + 0.9999972861260176, + 0.9999979827553034, + 0.9999987408518791, + 0.9999997485429049, + 1.0000011324882507, + 1.0000019986182451, + 1.0000029299408197, + 1.0000040084123611, + 1.0000052358955145, + 1.0000064596533775, + 1.0000072345137596, + 1.0000079795718193, + 1.0000085942447186, + 1.0000087097287178, + 1.0000088587403297, + 1.0000085979700089, + 1.0000079926103354, + 1.0000072661787271, + 1.0000062845647335, + 1.0000054370611906, + 1.0000041481107473, + 1.0000032503157854, + 1.0000021290034056, + 1.0000009778887033, + 0.9999998509883881, + 0.9999988712370396, + 0.9999980870634317, + 0.9999972563236952, + 0.9999966248869896, + 0.9999960232526064, + 0.9999955538660288, + 0.9999952986836433, + 0.9999949634075165, + 0.999994520097971, + 0.9999944698065519, + 0.9999944381415844, + 0.999994421377778, + 0.9999942667782307 + ], + [ + 0.9999948218464851, + 0.9999949410557747, + 0.9999950435012579, + 0.9999950882047415, + 0.9999953266233206, + 0.9999954309314489, + 0.999995794147253, + 0.9999962579458952, + 0.9999966807663441, + 0.9999971110373735, + 0.9999978560954332, + 0.9999984335154295, + 0.9999993685632944, + 1.0000001322478056, + 1.0000009667128325, + 1.0000020265579224, + 1.0000028926879168, + 1.0000035408884287, + 1.0000045914202929, + 1.0000056140124798, + 1.0000062864273787, + 1.0000068880617619, + 1.0000073686242104, + 1.0000076610594988, + 1.0000077076256275, + 1.0000072438269854, + 1.0000069048255682, + 1.0000063329935074, + 1.0000056307762861, + 1.0000046342611313, + 1.0000037215650082, + 1.0000028684735298, + 1.0000019911676645, + 1.0000012293457985, + 1.0000003073364496, + 0.999999150633812, + 0.9999985378235579, + 0.9999979306012392, + 0.9999972600489855, + 0.9999966714531183, + 0.9999963566660881, + 0.99999581836164, + 0.9999954327940941, + 0.9999953303486109, + 0.9999949559569359, + 0.999994907528162, + 0.9999949466437101, + 0.9999949857592583 + ], + [ + 0.9999953918159008, + 0.9999953843653202, + 0.9999955855309963, + 0.9999955948442221, + 0.9999958425760269, + 0.9999960567802191, + 0.999996455386281, + 0.99999681673944, + 0.9999971780925989, + 0.9999974854290485, + 0.9999982640147209, + 0.9999986737966537, + 0.9999993816018105, + 1.0000003147870302, + 1.0000010021030903, + 1.0000018384307623, + 1.0000026617199183, + 1.0000033881515265, + 1.0000041797757149, + 1.0000045765191317, + 1.0000054836273193, + 1.000006152316928, + 1.0000062752515078, + 1.0000065565109253, + 1.0000064484775066, + 1.0000062957406044, + 1.000005953013897, + 1.0000054650008678, + 1.0000047851353884, + 1.0000041779130697, + 1.0000033546239138, + 1.0000027921050787, + 1.0000019203871489, + 1.000001097097993, + 1.000000324100256, + 0.9999994374811649, + 0.9999989122152328, + 0.9999983981251717, + 0.9999976363033056, + 0.999996991828084, + 0.9999967999756336, + 0.9999964609742165, + 0.9999960102140903, + 0.9999958034604788, + 0.9999958295375109, + 0.9999954104423523, + 0.999995406717062, + 0.9999953713268042 + ], + [ + 0.9999960195273161, + 0.9999961648136377, + 0.9999961610883474, + 0.9999963454902172, + 0.9999964907765388, + 0.9999966267496347, + 0.9999969098716974, + 0.9999971222132444, + 0.9999974817037582, + 0.9999979585409164, + 0.9999983943998814, + 0.9999988600611687, + 0.999999625608325, + 1.0000003054738045, + 1.0000009685754776, + 1.000001696869731, + 1.000002296641469, + 1.0000029765069485, + 1.0000034477561712, + 1.0000041499733925, + 1.0000048223882914, + 1.0000050980597734, + 1.0000053718686104, + 1.0000055003911257, + 1.0000056475400925, + 1.0000053606927395, + 1.0000050868839025, + 1.0000048149377108, + 1.0000042784959078, + 1.0000037122517824, + 1.000002907589078, + 1.0000024307519197, + 1.0000018402934074, + 1.0000010654330254, + 1.0000003594905138, + 0.9999997485429049, + 0.9999992344528437, + 0.9999986477196217, + 0.9999980926513672, + 0.9999975748360157, + 0.9999971054494381, + 0.9999968819320202, + 0.9999964237213135, + 0.9999964907765388, + 0.9999961387366056, + 0.9999961666762829, + 0.9999960288405418, + 0.9999960400164127 + ], + [ + 0.9999964907765388, + 0.9999965727329254, + 0.9999964591115713, + 0.9999967012554407, + 0.9999968837946653, + 0.9999970961362123, + 0.9999971892684698, + 0.9999975617974997, + 0.9999976940453053, + 0.9999982342123985, + 0.999998677521944, + 0.99999925121665, + 0.9999997485429049, + 1.0000002849847078, + 1.0000007133930922, + 1.0000014398247004, + 1.0000020191073418, + 1.0000025182962418, + 1.000003146007657, + 1.0000034663826227, + 1.0000040382146835, + 1.000004405155778, + 1.0000048447400331, + 1.0000047534704208, + 1.0000047460198402, + 1.0000045858323574, + 1.0000044405460358, + 1.0000040140002966, + 1.000003568828106, + 1.0000031050294638, + 1.0000027921050787, + 1.0000019520521164, + 1.0000017154961824, + 1.0000010803341866, + 1.0000006090849638, + 0.9999997094273567, + 0.9999991934746504, + 0.999998701736331, + 0.9999983347952366, + 0.9999979846179485, + 0.9999975599348545, + 0.9999973475933075, + 0.9999970830976963, + 0.9999968819320202, + 0.9999967236071825, + 0.9999966658651829, + 0.9999965000897646, + 0.9999964330345392 + ], + [ + 0.9999970942735672, + 0.9999970961362123, + 0.9999971017241478, + 0.9999971780925989, + 0.9999974239617586, + 0.9999975357204676, + 0.99999756552279, + 0.9999978877604008, + 0.9999982323497534, + 0.9999983664602041, + 0.9999988041818142, + 0.9999991804361343, + 0.9999997448176146, + 1.0000002905726433, + 1.0000008698552847, + 1.0000014379620552, + 1.0000018663704395, + 1.0000024363398552, + 1.0000026617199183, + 1.000003106892109, + 1.000003581866622, + 1.0000036507844925, + 1.0000040475279093, + 1.0000041779130697, + 1.0000040531158447, + 1.0000039711594582, + 1.0000038165599108, + 1.0000034663826227, + 1.0000032894313335, + 1.000002909451723, + 1.000002421438694, + 1.0000019408762455, + 1.0000014379620552, + 1.000000974163413, + 1.0000003036111593, + 1.0000000335276127, + 0.9999995008111, + 0.9999989178031683, + 0.9999985992908478, + 0.9999983757734299, + 0.9999980628490448, + 0.9999975468963385, + 0.9999974556267262, + 0.9999971594661474, + 0.9999970737844706, + 0.9999970067292452, + 0.9999969061464071, + 0.9999971408396959 + ], + [ + 0.9999973233789206, + 0.9999972973018885, + 0.9999973848462105, + 0.999997541308403, + 0.9999975729733706, + 0.9999977368861437, + 0.9999978877604008, + 0.999998077750206, + 0.9999986104667187, + 0.9999986719340086, + 0.9999991878867149, + 0.999999588355422, + 0.9999999329447746, + 1.000000262632966, + 1.0000007469207048, + 1.0000012498348951, + 1.000001609325409, + 1.0000020042061806, + 1.0000024437904358, + 1.0000029057264328, + 1.0000029653310776, + 1.0000032503157854, + 1.0000034905970097, + 1.000003607943654, + 1.0000034924596548, + 1.00000337138772, + 1.0000032242387533, + 1.000003157183528, + 1.0000029187649488, + 1.0000026747584343, + 1.0000020861625671, + 1.000001821666956, + 1.0000014286488295, + 1.00000093691051, + 1.0000004433095455, + 1.0000000279396772, + 0.9999994672834873, + 0.999999163672328, + 0.9999987110495567, + 0.9999985583126545, + 0.9999981559813023, + 0.9999979101121426, + 0.9999977294355631, + 0.9999975692480803, + 0.9999974332749844, + 0.9999975822865963, + 0.9999976232647896, + 0.9999975506216288 + ], + [ + 0.9999976456165314, + 0.999997615814209, + 0.999997865408659, + 0.99999781511724, + 0.9999981131404638, + 0.999998090788722, + 0.9999982062727213, + 0.9999983124434948, + 0.9999986737966537, + 0.9999989122152328, + 0.9999992251396179, + 0.9999997150152922, + 1.0000000279396772, + 1.0000003036111593, + 1.0000008754432201, + 1.0000010710209608, + 1.0000014137476683, + 1.0000017564743757, + 1.000002121552825, + 1.000002445653081, + 1.000002358108759, + 1.0000029262155294, + 1.000002920627594, + 1.00000293366611, + 1.0000029001384974, + 1.0000029485672712, + 1.0000027995556593, + 1.0000026170164347, + 1.000002546235919, + 1.0000023301690817, + 1.000001858919859, + 1.0000015534460545, + 1.00000118650496, + 1.0000008307397366, + 1.0000003091990948, + 1.0000001452863216, + 0.9999997112900019, + 0.9999992605298758, + 0.9999991040676832, + 0.9999986663460732, + 0.9999985489994287, + 0.9999982248991728, + 0.999998178333044, + 0.9999979827553034, + 0.9999979697167873, + 0.9999977182596922, + 0.999997615814209, + 0.9999975264072418 + ], + [ + 0.9999980628490448, + 0.9999981857836246, + 0.9999981597065926, + 0.999998189508915, + 0.9999982696026564, + 0.999998290091753, + 0.9999984297901392, + 0.9999986607581377, + 0.9999988693743944, + 0.9999993462115526, + 0.9999995119869709, + 0.9999997038394213, + 1.000000162050128, + 1.0000004302710295, + 1.0000007580965757, + 1.0000009573996067, + 1.0000012144446373, + 1.000001410022378, + 1.0000018831342459, + 1.0000020433217287, + 1.0000021792948246, + 1.0000023152679205, + 1.0000023860484362, + 1.0000024680048227, + 1.0000024810433388, + 1.0000026039779186, + 1.0000027418136597, + 1.0000024959445, + 1.0000020321458578, + 1.0000019036233425, + 1.0000017080456018, + 1.000001423060894, + 1.0000010877847672, + 1.000000873580575, + 1.0000006183981895, + 1.0000001322478056, + 0.9999996963888407, + 0.9999994859099388, + 0.9999992325901985, + 0.9999988749623299, + 0.9999986849725246, + 0.9999985806643963, + 0.999998277053237, + 0.9999982547014952, + 0.9999983236193657, + 0.9999981597065926, + 0.9999981615692377, + 0.9999979808926582 + ], + [ + 0.9999983236193657, + 0.9999983757734299, + 0.9999982845038176, + 0.9999985229223967, + 0.999998677521944, + 0.9999985098838806, + 0.9999986756592989, + 0.9999988824129105, + 0.9999992214143276, + 0.999999338760972, + 0.9999996088445187, + 0.9999997988343239, + 0.9999999906867743, + 1.000000286847353, + 1.0000006016343832, + 1.0000009909272194, + 1.0000010766088963, + 1.0000014062970877, + 1.0000014416873455, + 1.0000017993152142, + 1.0000017955899239, + 1.0000020414590836, + 1.000002158805728, + 1.0000023376196623, + 1.0000023748725653, + 1.0000020619481802, + 1.0000020414590836, + 1.0000018551945686, + 1.0000016428530216, + 1.0000017080456018, + 1.0000013690441847, + 1.0000010672956705, + 1.0000009592622519, + 1.0000005885958672, + 1.0000002924352884, + 0.9999999981373549, + 0.9999997206032276, + 0.9999994318932295, + 0.9999993275851011, + 0.9999991971999407, + 0.9999988488852978, + 0.9999986812472343, + 0.9999986384063959, + 0.9999985303729773, + 0.9999983087182045, + 0.9999981448054314, + 0.9999983292073011, + 0.9999982584267855 + ], + [ + 0.9999985117465258, + 0.9999986011534929, + 0.9999986328184605, + 0.9999988339841366, + 0.9999988470226526, + 0.9999987352639437, + 0.999998988583684, + 0.9999991375952959, + 0.9999994579702616, + 0.9999994579702616, + 0.9999997336417437, + 0.9999997429549694, + 1.0000001601874828, + 1.0000002458691597, + 1.0000005904585123, + 1.0000008419156075, + 1.0000009909272194, + 1.000000972300768, + 1.0000012125819921, + 1.0000015404075384, + 1.0000017024576664, + 1.0000016633421183, + 1.000001646578312, + 1.0000017900019884, + 1.000001909211278, + 1.0000016931444407, + 1.0000017117708921, + 1.0000016875565052, + 1.000001372769475, + 1.0000014025717974, + 1.0000010654330254, + 1.0000009573996067, + 1.0000007282942533, + 1.0000004768371582, + 1.0000002644956112, + 1.0000001396983862, + 0.9999997746199369, + 0.9999996088445187, + 0.9999994169920683, + 0.9999991841614246, + 0.9999992288649082, + 0.9999989923089743, + 0.9999988302588463, + 0.9999987706542015, + 0.9999986346811056, + 0.999998465180397, + 0.9999985415488482, + 0.9999985154718161 + ], + [ + 0.9999986849725246, + 0.9999987185001373, + 0.9999987967312336, + 0.9999988190829754, + 0.999999113380909, + 0.99999925121665, + 0.9999991785734892, + 0.9999994114041328, + 0.9999995529651642, + 0.9999996777623892, + 0.9999997485429049, + 0.999999787658453, + 1.0000001415610313, + 1.0000002328306437, + 1.000000486150384, + 1.0000006463378668, + 1.0000007599592209, + 1.0000007506459951, + 1.0000009573996067, + 1.0000012069940567, + 1.0000014528632164, + 1.0000016242265701, + 1.000001611188054, + 1.0000015776604414, + 1.00000155903399, + 1.0000015664845705, + 1.0000014584511518, + 1.0000015366822481, + 1.0000011920928955, + 1.0000010840594769, + 1.0000009592622519, + 1.0000010132789612, + 1.0000004414469004, + 1.0000002775341272, + 1.000000050291419, + 0.9999997783452272, + 0.9999996870756149, + 0.9999997057020664, + 0.9999994561076164, + 0.9999994728714228, + 0.999999288469553, + 0.9999992046505213, + 0.9999988544732332, + 0.9999987613409758, + 0.9999988917261362, + 0.9999988600611687, + 0.9999987613409758, + 0.9999984838068485 + ], + [ + 0.9999991673976183, + 0.9999989289790392, + 0.9999991040676832, + 0.9999991077929735, + 0.9999992940574884, + 0.9999992586672306, + 0.9999993033707142, + 0.9999995566904545, + 0.9999996572732925, + 0.9999996982514858, + 0.9999997951090336, + 0.9999998919665813, + 1.0000001192092896, + 1.000000275671482, + 1.0000003073364496, + 1.000000486150384, + 1.0000006146728992, + 1.0000006165355444, + 1.0000007320195436, + 1.0000009760260582, + 1.0000011436641216, + 1.0000010337680578, + 1.000001199543476, + 1.0000012088567019, + 1.0000011958181858, + 1.000001473352313, + 1.0000012069940567, + 1.000001097097993, + 1.0000009555369616, + 1.0000009313225746, + 1.000000897794962, + 1.0000007674098015, + 1.0000004786998034, + 1.0000003091990948, + 1.0000000819563866, + 0.9999998267740011, + 0.9999997112900019, + 0.9999997429549694, + 0.9999996777623892, + 0.9999994710087776, + 0.9999993238598108, + 0.999999176710844, + 0.9999990984797478, + 0.9999989625066519, + 0.9999989848583937, + 0.9999990426003933, + 0.9999991860240698, + 0.9999990202486515 + ], + [ + 0.999999238178134, + 0.9999992568045855, + 0.9999992568045855, + 0.9999992325901985, + 0.9999994281679392, + 0.9999994039535522, + 0.9999994356185198, + 0.9999996442347765, + 0.9999997578561306, + 0.9999998416751623, + 0.9999998547136784, + 0.9999998938292265, + 1.000000135973096, + 1.000000262632966, + 1.000000525265932, + 1.0000004991889, + 1.0000005047768354, + 1.0000004842877388, + 1.0000006146728992, + 1.0000007525086403, + 1.0000008679926395, + 1.0000008326023817, + 1.0000009145587683, + 1.00000093691051, + 1.0000008847564459, + 1.0000009313225746, + 1.0000009778887033, + 1.0000009927898645, + 1.0000007413327694, + 1.0000007655471563, + 1.0000007431954145, + 1.000000661239028, + 1.000000474974513, + 1.0000003203749657, + 0.999999949708581, + 0.9999999888241291, + 0.9999999478459358, + 0.9999996740370989, + 0.9999997317790985, + 0.999999638646841, + 0.9999994188547134, + 0.9999993871897459, + 0.9999993108212948, + 0.9999991729855537, + 0.9999991245567799, + 0.999999150633812, + 0.9999991320073605, + 0.9999991189688444 + ], + [ + 0.9999993462115526, + 0.9999993853271008, + 0.9999994933605194, + 0.9999994058161974, + 0.9999996181577444, + 0.9999995101243258, + 0.999999525025487, + 0.9999996870756149, + 0.9999997597187757, + 0.9999998323619366, + 0.9999998342245817, + 0.9999997913837433, + 1.0000001583248377, + 1.000000275671482, + 1.0000002589076757, + 1.0000003520399332, + 1.0000005047768354, + 1.0000005438923836, + 1.0000006705522537, + 1.0000006146728992, + 1.000000761821866, + 1.0000007580965757, + 1.0000006388872862, + 1.0000005587935448, + 1.0000007022172213, + 1.00000081025064, + 1.000000772997737, + 1.0000008698552847, + 1.0000006072223186, + 1.000000637024641, + 1.0000005140900612, + 1.0000003296881914, + 1.0000003259629011, + 1.000000260770321, + 0.9999999143183231, + 1.0000001471489668, + 0.9999997951090336, + 0.9999996833503246, + 0.9999996870756149, + 0.9999998193234205, + 0.9999997559934855, + 0.999999525025487, + 0.9999995101243258, + 0.9999994151294231, + 0.9999994281679392, + 0.9999993816018105, + 0.9999993834644556, + 0.9999994039535522 + ], + [ + 0.9999995715916157, + 0.9999996423721313, + 0.9999996032565832, + 0.9999997746199369, + 0.9999997410923243, + 0.9999997466802597, + 0.9999997690320015, + 0.9999997969716787, + 0.9999997224658728, + 0.999999912455678, + 0.9999998286366463, + 0.9999997653067112, + 1.0000001322478056, + 0.9999999236315489, + 1.0000002924352884, + 1.0000003203749657, + 1.00000056065619, + 1.0000003762543201, + 1.0000003762543201, + 1.0000003669410944, + 1.000000512227416, + 1.0000003576278687, + 1.0000005271285772, + 1.0000005271285772, + 1.0000003278255463, + 1.0000006575137377, + 1.0000006351619959, + 1.0000004805624485, + 1.0000005196779966, + 1.0000005047768354, + 1.0000003278255463, + 1.0000003408640623, + 1.000000324100256, + 1.000000037252903, + 0.9999999087303877, + 0.999999986961484, + 0.9999997913837433, + 0.9999998174607754, + 0.9999999217689037, + 0.9999999105930328, + 0.9999998733401299, + 0.9999997783452272, + 0.9999997410923243, + 0.9999997690320015, + 0.999999612569809, + 0.9999996963888407, + 0.9999995492398739, + 0.9999997243285179 + ], + [ + 0.9999997317790985, + 0.9999997150152922, + 0.9999997094273567, + 0.9999998267740011, + 0.9999997206032276, + 0.9999997392296791, + 0.999999700114131, + 0.9999999590218067, + 0.9999999906867743, + 1.0000002719461918, + 1.0000001471489668, + 1.0000001452863216, + 1.0000001695007086, + 0.9999998658895493, + 1.000000063329935, + 1.0000003166496754, + 1.0000001098960638, + 0.9999999683350325, + 1.0000001452863216, + 1.000000111758709, + 1.0000003334134817, + 1.0000001341104507, + 1.0000003390014172, + 1.0000003725290298, + 1.0000003688037395, + 1.0000003650784492, + 1.0000003799796104, + 1.0000003967434168, + 1.000000124797225, + 1.0000003147870302, + 1.000000337138772, + 1.0000003576278687, + 1.0000001192092896, + 0.9999999366700649, + 1.0000000800937414, + 0.9999999813735485, + 0.999999986961484, + 0.9999999273568392, + 0.9999997951090336, + 0.9999998807907104, + 0.9999999385327101, + 0.9999998658895493, + 0.9999997206032276, + 0.9999997541308403, + 0.9999997206032276, + 0.9999997038394213, + 0.9999996814876795, + 0.999999700114131 + ], + [ + 0.9999998807907104, + 0.999999912455678, + 0.9999999180436134, + 0.9999999310821295, + 0.9999999161809683, + 0.9999999925494194, + 0.9999999292194843, + 0.9999999832361937, + 1.0000000037252903, + 1.0000001266598701, + 1.0000000149011612, + 0.9999999813735485, + 0.9999999068677425, + 0.9999999403953552, + 0.9999999981373549, + 0.9999999590218067, + 1.000000100582838, + 1.0000001713633537, + 0.9999999795109034, + 1.000000011175871, + 0.9999999441206455, + 1.000000026077032, + 0.9999999459832907, + 1.0000000521540642, + 1.0000000540167093, + 1.0000001545995474, + 0.9999999925494194, + 1.0000000204890966, + 1.0000000204890966, + 0.9999998677521944, + 1.0000000149011612, + 0.9999999888241291, + 0.9999999944120646, + 0.9999999403953552, + 0.9999999236315489, + 0.999999925494194, + 1.000000050291419, + 0.9999999962747097, + 0.9999999739229679, + 1.0000002067536116, + 0.9999999590218067, + 0.9999999329447746, + 0.9999999385327101, + 0.9999999329447746, + 0.9999999571591616, + 1.000000162050128, + 0.9999999329447746, + 0.999999912455678 + ] + ], + "u": [ + [ + -5.588016103090314e-09, + 1.8626720135461558e-09, + 0.0, + 0.0, + -3.72534923835924e-09, + -3.725352929971266e-09, + 0.0, + -3.725362880706289e-09, + 5.588053761808408e-09, + 5.5880668352687015e-09, + 0.0, + 0.0, + -3.7254312188498534e-09, + -5.5881923685823265e-09, + 5.5882512233729725e-09, + 3.725645728638264e-09, + 0.0, + 0.0, + -1.862739505620404e-09, + 5.587748967673157e-09, + -3.7248756624398033e-09, + -3.7246352294317754e-09, + 5.586695121691302e-09, + 3.7243758934824325e-09, + 0.0, + 3.7244640178767716e-09, + 1.8623176181841148e-09, + 5.587314315735724e-09, + 1.8625826284260547e-09, + -5.588218017210277e-09, + -1.8628916964749054e-09, + 1.862953297498967e-09, + 0.0, + -3.725500878039086e-09, + 0.0, + 0.0, + -5.58810888725964e-09, + -3.725389971400703e-09, + 7.450755738722948e-09, + -1.8626845872694694e-09, + 3.725362422721501e-09, + 0.0, + 1.8626764615160694e-09, + 3.725349335506831e-09, + 7.450692758893365e-09, + 3.725345310825155e-09, + 1.8626722425362877e-09, + -5.588016248811296e-09 + ], + [ + -1.2666167875459293e-07, + -2.0116857484000727e-07, + -2.6636219022014414e-07, + -3.4831989880558147e-07, + -5.066474492308894e-07, + -7.096794701007802e-07, + -1.0300609581320435e-06, + -1.4286760127646298e-06, + -2.039639433099822e-06, + -2.8424626895571964e-06, + -4.043909119127384e-06, + -5.8917257826902975e-06, + -8.90190352109513e-06, + -1.3618410342798747e-05, + -2.3435290993657476e-05, + -5.161391965494273e-05, + -0.00011554221036961329, + -0.00019656285075078973, + -0.00025397400169616515, + -0.0002719045921873482, + -0.0002524901925795813, + -0.00020283242824498582, + -0.0001307493474037239, + -4.512372084354429e-05, + 4.510509776436825e-05, + 0.0001307493746757094, + 0.00020272068558623967, + 0.00025240078558296425, + 0.00027179653463851297, + 0.00025393664762705584, + 0.00019652558224107945, + 0.00011551238228471406, + 5.1613905810009053e-05, + 2.3478133123615214e-05, + 1.3633313747793162e-05, + 8.877688141523566e-06, + 5.919666232453499e-06, + 4.043909601211671e-06, + 2.7996210047058946e-06, + 1.931603557201622e-06, + 1.3746584369603826e-06, + 9.797688717780762e-07, + 6.649753481251655e-07, + 4.619433176028471e-07, + 3.5204528728457293e-07, + 2.3469675283333185e-07, + 8.754558333211965e-08, + -9.31335909625771e-09 + ], + [ + -3.8184769022874726e-07, + -1.0132934564608068e-06, + -1.7471863584695993e-06, + -2.507157375505275e-06, + -3.431045140271575e-06, + -4.563555231108924e-06, + -6.122620037984571e-06, + -7.992759286531548e-06, + -1.052974620426352e-05, + -1.4039072562512128e-05, + -1.8973379316887114e-05, + -2.615414837809606e-05, + -3.728021021225326e-05, + -5.538601296075918e-05, + -8.595756268461685e-05, + -0.00013807191959024312, + -0.00021645116031436627, + -0.0003031776588334403, + -0.00036640506057001004, + -0.00038684876613005265, + -0.00035994904446602665, + -0.0002904713296029214, + -0.0001879830559018363, + -6.501802429218729e-05, + 6.494911681623296e-05, + 0.00018796256826507745, + 0.0002903782065370258, + 0.0003598485246034483, + 0.0003867146279577186, + 0.00036633049289100893, + 0.0003030659100570521, + 0.0002163747557122302, + 0.00013805700995071676, + 8.597060420037436e-05, + 5.533013414487773e-05, + 3.7233638316177714e-05, + 2.6137380830438085e-05, + 1.8956614277982172e-05, + 1.403348353407641e-05, + 1.051298407551139e-05, + 7.901488488436536e-06, + 5.9866454146094124e-06, + 4.502086944545221e-06, + 3.330461015601511e-06, + 2.4140239862415235e-06, + 1.5925848148319424e-06, + 9.145717337829356e-07, + 2.7753807315251303e-07 + ], + [ + -8.698673798888752e-07, + -2.4773525182591964e-06, + -4.250616640234301e-06, + -6.13750508488571e-06, + -8.424872233776417e-06, + -1.1129480787406427e-05, + -1.4472992790083991e-05, + -1.8688253685252192e-05, + -2.4246514689244367e-05, + -3.156318068935212e-05, + -4.158078100128722e-05, + -5.557529761395182e-05, + -7.573917356888107e-05, + -0.00010528559210007908, + -0.0001488042622148292, + -0.00020985445925190933, + -0.0002847370921524125, + -0.0003587823326576732, + -0.0004111899523777413, + -0.00042473602642453925, + -0.0003921029862553748, + -0.00031578552811855763, + -0.00020443796650186503, + -7.073418890245035e-05, + 7.066527976820447e-05, + 0.00020439511784425997, + 0.00031570916137780685, + 0.00039204888555376675, + 0.00042460939235484165, + 0.00041107074673153515, + 0.00035866683629152713, + 0.00028464209101389693, + 0.000209785562139771, + 0.00014872230529505164, + 0.00010518129794302825, + 7.56460242839664e-05, + 5.557529575059733e-05, + 4.151558963291054e-05, + 3.150543320080549e-05, + 2.4212990766323165e-05, + 1.8598846016577486e-05, + 1.433329184719249e-05, + 1.1002818995988687e-05, + 8.31124789639466e-06, + 6.027607949447786e-06, + 4.088564125392719e-06, + 2.34323994832951e-06, + 7.748710972127052e-07 + ], + [ + -1.5162134346456968e-06, + -4.461095949190207e-06, + -7.59224523005738e-06, + -1.0997212024210065e-05, + -1.5020590726454181e-05, + -1.9664243171477004e-05, + -2.5298846394956486e-05, + -3.228949706182993e-05, + -4.120803510974511e-05, + -5.2674744413260706e-05, + -6.777001395356703e-05, + -8.794298344178706e-05, + -0.00011515140634792561, + -0.00015173476950050517, + -0.00019973621333965952, + -0.00025900071248991733, + -0.00032365611924300655, + -0.00038197989713933093, + -0.00041925486529859805, + -0.00042252029975399947, + -0.00038519645956306434, + -0.00030840384755493683, + -0.0001991881253972783, + -6.885289405971657e-05, + 6.877839432234355e-05, + 0.00019909320073391534, + 0.0003083554515545018, + 0.00038509039322407346, + 0.00042233030250625356, + 0.00041909275044419304, + 0.00038176930140818596, + 0.00032348289250368396, + 0.00025887591213618173, + 0.00019959650752474176, + 0.00015157270893188134, + 0.00011497445072122677, + 8.782564258120349e-05, + 6.763962484832192e-05, + 5.2576022635771505e-05, + 4.1127940013468955e-05, + 3.214048246319442e-05, + 2.5120030007837242e-05, + 1.952454066562277e-05, + 1.4838048659434086e-05, + 1.0872410670065738e-05, + 7.396665054767388e-06, + 4.254338258992759e-06, + 1.339259601151615e-06 + ], + [ + -2.345100256025529e-06, + -6.761491033869866e-06, + -1.154669060624639e-05, + -1.6702562149750395e-05, + -2.2618414463898436e-05, + -2.9411587861629442e-05, + -3.750491496462294e-05, + -4.727279881972195e-05, + -5.947895806872784e-05, + -7.468960812736783e-05, + -9.397211482826924e-05, + -0.00011849994647217829, + -0.00014967194726649353, + -0.0001885832403317738, + -0.00023548324896608525, + -0.0002881698480251812, + -0.0003407621864242449, + -0.0003839837711079874, + -0.00040705369451695517, + -0.0004008611526309311, + -0.0003604139622651314, + -0.00028626172533329663, + -0.00018408603461125142, + -6.354587115833425e-05, + 6.345088922872199e-05, + 0.00018400971466991174, + 0.0002861108983141282, + 0.00036020925741535336, + 0.0004006581718536475, + 0.0004068525783214403, + 0.00038373602892131036, + 0.0003405182117843121, + 0.000287937022402837, + 0.00023528953414873923, + 0.000188363445577861, + 0.00014944280446866582, + 0.00011830995580438802, + 9.37634864874146e-05, + 7.452755567567999e-05, + 5.9313176513154095e-05, + 4.712006026882396e-05, + 3.7251590504983655e-05, + 2.9221588914360342e-05, + 2.2424691830223197e-05, + 1.6503257163673705e-05, + 1.1274737905138535e-05, + 6.52492922225986e-06, + 2.0843265743962176e-06 + ], + [ + -3.1851622906498066e-06, + -9.266774625553433e-06, + -1.571347297872182e-05, + -2.2698483570304495e-05, + -3.059061643839814e-05, + -3.949978056070697e-05, + -4.9954963883607936e-05, + -6.228215553211193e-05, + -7.725434161995782e-05, + -9.53856130723035e-05, + -0.00011747695881652785, + -0.00014440936309718938, + -0.0001767508660063198, + -0.00021479569987040695, + -0.0002574540086273487, + -0.00030174708878451457, + -0.0003425561863447837, + -0.00037266517049009665, + -0.0003841543601821625, + -0.0003706079054989533, + -0.0003286292906131733, + -0.0002586964382362514, + -0.0001655109792662287, + -5.7014693193609915e-05, + 5.683963201183713e-05, + 0.00016529680588634168, + 0.0002585139041921477, + 0.0003283965081999665, + 0.0003703714051505105, + 0.0003839066380540543, + 0.0003724136958095898, + 0.0003423233379127009, + 0.0003015049408230895, + 0.00025714484242608414, + 0.00021450329218193997, + 0.00017650499059250696, + 0.00014414856086135975, + 0.0001172646009250375, + 9.520120792991379e-05, + 7.709599535869814e-05, + 6.213313345874638e-05, + 4.971653759667262e-05, + 3.9263218030151035e-05, + 3.032798465553735e-05, + 2.249172342297074e-05, + 1.5486223534520823e-05, + 9.007862679462292e-06, + 2.8908607779740727e-06 + ], + [ + -4.015909124581023e-06, + -1.1809306140790391e-05, + -1.9932397971207853e-05, + -2.8701841738268176e-05, + -3.8393309225643236e-05, + -4.9275018518924375e-05, + -6.178285178531161e-05, + -7.625765431082807e-05, + -9.323030697708408e-05, + -0.00011325960512093157, + -0.00013686891087249636, + -0.0001644158731732064, + -0.00019598045694022137, + -0.00023101125294254732, + -0.0002680422694107392, + -0.0003039365197768305, + -0.00033434459130121354, + -0.0003536507837593225, + -0.0003562319945362748, + -0.00033755876175089035, + -0.0002953947950886894, + -0.00023047077818858617, + -0.00014666686638473017, + -5.042360785041634e-05, + 5.017402309893713e-05, + 0.00014640238571853276, + 0.0002302249108606043, + 0.00029516756489120737, + 0.00033727936537903227, + 0.00035592652457186143, + 0.00035333417290928993, + 0.0003339888692294037, + 0.000303664570194995, + 0.00026773679327623634, + 0.00023071323795537086, + 0.00019563772703103867, + 0.00016407500944819924, + 0.00013663978656320322, + 0.00011310684643659686, + 9.308501741081359e-05, + 7.608816095987857e-05, + 6.159471893868551e-05, + 4.9049638343901444e-05, + 3.8169776146780025e-05, + 2.8498801915955454e-05, + 1.9740543101717506e-05, + 1.1533632130899035e-05, + 3.6769044526612557e-06 + ], + [ + -4.7572469812464595e-06, + -1.410969061989649e-05, + -2.3894272782725294e-05, + -3.429353626781931e-05, + -4.5655800818904986e-05, + -5.8199002123206514e-05, + -7.23254771419054e-05, + -8.83742004265286e-05, + -0.00010671025960239272, + -0.00012771554274015, + -0.00015157248941919752, + -0.00017836495429170336, + -0.0002078246086219157, + -0.00023894742165975425, + -0.00026995629377596413, + -0.0002981187190953007, + -0.000319770734836263, + -0.0003306023947339024, + -0.0003266723798896748, + -0.00030472914362695354, + -0.0002635342559376068, + -0.00020388160848066431, + -0.00012906635861502914, + -4.427183781599956e-05, + 4.403530013599685e-05, + 0.00012877952012995815, + 0.000203652539911571, + 0.0002632232250888851, + 0.0003044050069344064, + 0.00032631843778968263, + 0.0003303434807962122, + 0.0003193907358708389, + 0.0002978094817610426, + 0.0002696545508744282, + 0.00023862892705630475, + 0.00020751542611801134, + 0.0001780874130823145, + 0.00015131354772023885, + 0.0001275031964648273, + 0.00010655194551514211, + 8.815811866115555e-05, + 7.214478008208315e-05, + 5.7949405945945076e-05, + 4.545091097001388e-05, + 3.407932458265587e-05, + 2.3653989949119968e-05, + 1.3888031648976364e-05, + 4.505787738367231e-06 + ], + [ + -5.453879609809783e-06, + -1.627409535862521e-05, + -2.74873324273671e-05, + -3.92407440734262e-05, + -5.199625933154738e-05, + -6.583957897404411e-05, + -8.115067458111778e-05, + -9.822385223934802e-05, + -0.0001172379164129773, + -0.00013839585134016097, + -0.00016153745810836977, + -0.0001867670460049932, + -0.00021336369693624387, + -0.0002402396171179123, + -0.0002656027407481886, + -0.0002869535253585513, + -0.0003015202908694225, + -0.0003059467223254575, + -0.0002973400746857695, + -0.0002736538568850286, + -0.0002341636411697805, + -0.00017977300910724064, + -0.00011320698157191166, + -3.874204404186626e-05, + 3.853156921714556e-05, + 0.00011295926941239112, + 0.0001794843010467409, + 0.00023382091564914286, + 0.0002733055469589563, + 0.0002970030010427161, + 0.000305618893290358, + 0.0003011161380083651, + 0.0002866145143299965, + 0.0002652786732159244, + 0.00023992109824593323, + 0.0002131122401518887, + 0.0001864802158311941, + 0.00016131767847145153, + 0.00013809593560912804, + 0.00011704418935875627, + 9.797982958863447e-05, + 8.096440789764762e-05, + 6.561047022106086e-05, + 5.18062732231706e-05, + 3.900045757457283e-05, + 2.7183715818000086e-05, + 1.6009596414726602e-05, + 5.232222568741844e-06 + ], + [ + -6.085317594373707e-06, + -1.8056650175037935e-05, + -3.0491786773665755e-05, + -4.343170200014843e-05, + -5.7220983156552844e-05, + -7.196767037231157e-05, + -8.801262185674021e-05, + -0.00010559242962424941, + -0.00012463622814895046, + -0.00014528374969836552, + -0.00016724066042048957, + -0.0001903430424415587, + -0.00021384579423631278, + -0.00023650274674347064, + -0.0002567138058670156, + -0.0002724227529056788, + -0.0002813477659179137, + -0.000281022811574203, + -0.00026936373547619525, + -0.0002450612981066534, + -0.0002077673395009782, + -0.00015839454674391567, + -9.926397789700983e-05, + -3.3972081795705794e-05, + 3.367965287300794e-05, + 9.906655508425209e-05, + 0.00015814874635477404, + 0.00020744884109019242, + 0.00024468318835577357, + 0.00026904156472943875, + 0.00028070622575056877, + 0.00028099387409214686, + 0.00027212100875217336, + 0.0002564251695347333, + 0.00023621216956119597, + 0.0002136110854245876, + 0.00019013632754941127, + 0.00016698921551343987, + 0.00014494101541055255, + 0.00012442201913374394, + 0.00010527761998966447, + 8.785244278005929e-05, + 7.177768152575192e-05, + 5.697325619250931e-05, + 4.315789535250115e-05, + 3.015650615742397e-05, + 1.7834992774015305e-05, + 5.813369532861932e-06 + ], + [ + -6.56215431633244e-06, + -1.9516963098254523e-05, + -3.2859199418286556e-05, + -4.665779281355735e-05, + -6.114369693030814e-05, + -7.650133658848933e-05, + -9.289457148986996e-05, + -0.00011047434846537607, + -0.0001291045873781289, + -0.0001487537036735735, + -0.00016919252110271293, + -0.00019001124247930684, + -0.00021033255407600307, + -0.00022908727223711818, + -0.0002448559847235019, + -0.0002559531172060647, + -0.00026054021631869415, + -0.0002567677483078534, + -0.0002432742233917263, + -0.00021913768417903032, + -0.0001842857628814708, + -0.0001396887942426342, + -8.722064061121435e-05, + -2.979994414061099e-05, + 2.950937685455132e-05, + 8.700458934261301e-05, + 0.0001394317567882803, + 0.0001839859088154377, + 0.00021877456586408118, + 0.000242955731514428, + 0.000256456683264798, + 0.000260186265665069, + 0.0002556271581515936, + 0.0002445505645396101, + 0.0002287631643919525, + 0.000210075536239725, + 0.00018971694025014975, + 0.00016894295096433643, + 0.0001484500935160338, + 0.0001288717682654823, + 0.00011019492282294806, + 9.267292584397337e-05, + 7.625544577812467e-05, + 6.089223650136362e-05, + 4.633554704097762e-05, + 3.256117174724665e-05, + 1.9285992402295028e-05, + 6.310694285076234e-06 + ], + [ + -6.882526451295395e-06, + -2.057866153136922e-05, + -3.4585864024975226e-05, + -4.8907837984048015e-05, + -6.383891057726556e-05, + -7.944425551600898e-05, + -9.584308471449651e-05, + -0.00011307263683930649, + -0.0001308888879517656, + -0.00014933283137991292, + -0.00016798721696013337, + -0.0001864254468980397, + -0.00020375907175091695, + -0.00021907720974819673, + -0.00023113377607552127, + -0.00023849451798163562, + -0.0002397922911269223, + -0.00023371033881412854, + -0.00021920740520228735, + -0.00019581238359966878, + -0.00016353462050155743, + -0.00012331293464507966, + -7.678461382368318e-05, + -2.61492942163187e-05, + 2.584010289982336e-05, + 7.649219016079545e-05, + 0.00012303918235539486, + 0.0001632775772382102, + 0.0001954584801099637, + 0.00021892243781092358, + 0.00023344584297561, + 0.00023950916836611275, + 0.0002382486226384799, + 0.00023082085168753613, + 0.00021877736783473502, + 0.0002035038564022698, + 0.00018615161928411418, + 0.00016775995374344077, + 0.0001489938241603535, + 0.00013062810627787987, + 0.0001127820626552722, + 9.565124141758656e-05, + 7.914063669633157e-05, + 6.357627791373367e-05, + 4.855953313825477e-05, + 3.423754316650387e-05, + 2.0340244002014088e-05, + 6.68322287985036e-06 + ], + [ + -7.122804988618898e-06, + -2.120449835774662e-05, + -3.561029498359127e-05, + -5.022842852163813e-05, + -6.53196839358788e-05, + -8.091569106721076e-05, + -9.700156677544587e-05, + -0.00011353074278906416, + -0.00013037465336135655, + -0.00014745885638811618, + -0.00016431201395227934, + -0.00018040333079612336, + -0.0001951125053164665, + -0.0002074765227037613, + -0.0002163963848308878, + -0.00022089439221498067, + -0.00021978945396298858, + -0.00021210388605563102, + -0.00019728073186351517, + -0.000174906489344794, + -0.00014519174468833929, + -0.00010898960832866721, + -6.768027262543635e-05, + -2.3008976482887043e-05, + 2.275379647168635e-05, + 6.739157696705468e-05, + 0.00010872514481573879, + 0.00014492913674129152, + 0.0001745805353767074, + 0.00019698643811414385, + 0.0002118896786380231, + 0.00021950069637696745, + 0.0002206354287308962, + 0.00021611887946529595, + 0.00020714497231156615, + 0.00019480704027942242, + 0.00018014446157537298, + 0.0001640270492247613, + 0.00014713851774362673, + 0.00013008966840318426, + 0.00011324014821187995, + 9.674824331790733e-05, + 8.059159802294489e-05, + 6.509429470272084e-05, + 4.995276262023262e-05, + 3.5332764540831e-05, + 2.09679434120116e-05, + 6.888109233238106e-06 + ], + [ + -7.264363088453876e-06, + -2.155094085857071e-05, + -3.6020055045752005e-05, + -5.069964589317641e-05, + -6.569588892822323e-05, + -8.100503222318864e-05, + -9.645574389782563e-05, + -0.00011219513926936456, + -0.00012796244758979064, + -0.00014360118493673992, + -0.00015864200683803862, + -0.00017266390971650068, + -0.0001849181135293207, + -0.0001947825003965434, + -0.00020126049295303569, + -0.00020352340047670887, + -0.0002006918921246714, + -0.00019206386034508732, + -0.0001773134273035204, + -0.00015623007566418736, + -0.00012901503078472976, + -9.639656676976937e-05, + -5.965806687191905e-05, + -2.0293311345255753e-05, + 1.9985974428010912e-05, + 5.940661305759069e-05, + 9.617119617317316e-05, + 0.00012870585251098312, + 0.00015590040586836628, + 0.00017708432894995106, + 0.0001918347628920114, + 0.00020039760040246115, + 0.0002032588470609237, + 0.00020098666975805861, + 0.0001944825908129875, + 0.0001846368491982269, + 0.00017238264542490225, + 0.0001583756615744329, + 0.00014329757660313643, + 0.00012765322139348035, + 0.00011188591900994291, + 9.615772262630627e-05, + 8.06716314346774e-05, + 6.547051495060625e-05, + 5.044260475269473e-05, + 3.576115129471712e-05, + 2.132183425285971e-05, + 6.994277259993988e-06 + ], + [ + -7.245731333847756e-06, + -2.1480147091398094e-05, + -3.584308056165703e-05, + -5.034384953541389e-05, + -6.498243454218339e-05, + -7.974769434372853e-05, + -9.45259604296165e-05, + -0.00010936569537679122, + -0.000123991176101931, + -0.00013820502462641505, + -0.00015158433627035086, + -0.00016362811850244614, + -0.00017378501124431863, + -0.00018156883215865558, + -0.00018601843509970505, + -0.00018660128075038222, + -0.00018259270634813778, + -0.00017357548040443317, + -0.0001592385626964276, + -0.00013947024255469222, + -0.00011460400163765558, + -8.533826919431756e-05, + -5.272730573306111e-05, + -1.7922215528264996e-05, + 1.7620467016583063e-05, + 5.2466537457822065e-05, + 8.505328565156324e-05, + 0.00011432274063488242, + 0.00013916479508947836, + 0.00015895913540997308, + 0.00017338360450177038, + 0.00018235050476783735, + 0.00018634793721941813, + 0.00018580798516200443, + 0.00018129127938915483, + 0.00017355029503159, + 0.00016336360531751562, + 0.00015131239385000642, + 0.0001379442400391455, + 0.00012366336588056043, + 0.0001090453198015287, + 9.425773826713001e-05, + 7.948319413244154e-05, + 6.475707612059628e-05, + 5.011101957339256e-05, + 3.560279740011885e-05, + 2.1280839547728087e-05, + 7.007311225876125e-06 + ], + [ + -7.092989456859771e-06, + -2.1129953468132054e-05, + -3.516132675910463e-05, + -4.928397007627243e-05, + -6.340287454018783e-05, + -7.748825490230559e-05, + -9.14376349489758e-05, + -0.00010527896043924898, + -0.00011874402240262911, + -0.00013159439731931359, + -0.00014338114304783875, + -0.00015378208706292364, + -0.00016214895056280166, + -0.0001681130157112626, + -0.0001710819289246181, + -0.00017042050991670268, + -0.0001656426913233481, + -0.00015647840226917954, + -0.00014275060616388135, + -0.0001244202721813687, + -0.00010181340645952746, + -7.565639954551027e-05, + -4.664774138766354e-05, + -1.5800697750840617e-05, + 1.5552967119630537e-05, + 4.632178666921639e-05, + 7.533788815596812e-05, + 0.00010158429781605942, + 0.00012414273753111148, + 0.00014249541884548574, + 0.00015627907170805098, + 0.00016543221703616112, + 0.0001701914110507473, + 0.00017081180077830607, + 0.0001679229965297609, + 0.00016191242976499343, + 0.0001534989485455204, + 0.00014317624097467163, + 0.0001313410572757856, + 0.00011848138966829207, + 0.00010496416186895336, + 9.112656969418557e-05, + 7.718836751929886e-05, + 6.316072930385986e-05, + 4.908467255773635e-05, + 3.493967563858851e-05, + 2.0885945602451302e-05, + 6.884370991451124e-06 + ], + [ + -6.902994733320494e-06, + -2.049291651965517e-05, + -3.403067710381883e-05, + -4.761500770131725e-05, + -6.1005607553787644e-05, + -7.436640082610873e-05, + -8.74123840513953e-05, + -0.00010021994128055805, + -0.00011252829894492943, + -0.0001240897318742015, + -0.00013448321323535355, + -0.0001433419102047385, + -0.00015027830357178446, + -0.00015478017524285314, + -0.00015651791504279098, + -0.00015495875301903256, + -0.00014978048571140677, + -0.00014076520492898716, + -0.00012774339568581448, + -0.00011091069782602683, + -9.049798096333453e-05, + -6.705295019616466e-05, + -4.122566638650362e-05, + -1.4003274419296616e-05, + 1.3697804097462845e-05, + 4.0970484762939624e-05, + 6.674935420800736e-05, + 9.021113686361246e-05, + 0.00011063127925292328, + 0.00012757017064859576, + 0.00014055286881380392, + 0.0001496538066658076, + 0.00015480972899341845, + 0.00015634094907935892, + 0.00015461812372588826, + 0.0001500436017535026, + 0.00014315561131178774, + 0.0001342559521274992, + 0.00012385688195821494, + 0.000112245196990656, + 9.995358385193545e-05, + 8.710504602564024e-05, + 7.40478906977584e-05, + 6.0709448118482924e-05, + 4.739147817626528e-05, + 3.3818340540660714e-05, + 2.028057353923907e-05, + 6.6813390760265364e-06 + ], + [ + -6.588202116988458e-06, + -1.9559711727213945e-05, + -3.251259589280958e-05, + -4.53481245283416e-05, + -5.798062167221909e-05, + -7.049576876282176e-05, + -8.260297968675066e-05, + -9.446804589243774e-05, + -0.00010563459772239648, + -0.00011596107314030856, + -0.0001250321190388624, + -0.0001326130352153956, + -0.00013832566850531728, + -0.00014169137321899607, + -0.00014249966647508262, + -0.00014037801346858912, + -0.0001350246994095773, + -0.00012629069050303955, + -0.00011406613302154052, + -9.881664037057246e-05, + -8.041186596020876e-05, + -5.944974214966546e-05, + -3.649274772948688e-05, + -1.2433087984269824e-05, + 1.20698724019283e-05, + 3.619472651104834e-05, + 5.9136820020795845e-05, + 8.007659204678528e-05, + 9.845713869473416e-05, + 0.00011390964123995044, + 0.00012608022091682095, + 0.00013488684589539862, + 0.00014023456992254577, + 0.00014232828950177582, + 0.00014153304078452872, + 0.00013808350757001624, + 0.00013244348472780032, + 0.0001248830755522714, + 0.00011577479271849197, + 0.0001053738169310794, + 9.420168844875665e-05, + 8.235897471927792e-05, + 7.022942386659575e-05, + 5.7731026346336374e-05, + 4.513020358031992e-05, + 3.2257412347485516e-05, + 1.939766361530652e-05, + 6.370271636541e-06 + ], + [ + -6.1691023830117464e-06, + -1.849985502610588e-05, + -3.064248385161497e-05, + -4.268637969638862e-05, + -5.4447150025669475e-05, + -6.607007794687807e-05, + -7.732420541760694e-05, + -8.817597371032384e-05, + -9.82063293073991e-05, + -0.00010746736429456873, + -0.00011534259075902298, + -0.00012182453456048461, + -0.00012640471954762403, + -0.00012895647486608352, + -0.0001290830793998774, + -0.00012658704472373134, + -0.00012123560268544906, + -0.00011296541853017014, + -0.00010172431950946217, + -8.779920005367827e-05, + -7.1312944206478e-05, + -5.268468596174885e-05, + -3.234467631484737e-05, + -1.0974653051580139e-05, + 1.0691532414360732e-05, + 3.198147055063304e-05, + 5.231029408473317e-05, + 7.097580851452919e-05, + 8.749558098328642e-05, + 0.00010151198279024044, + 0.00011274000816555277, + 0.00012106052251266764, + 0.0001264156467675964, + 0.0001289433337987706, + 0.0001288260479902519, + 0.00012623522373418305, + 0.00012162523840317173, + 0.00011518053762770207, + 0.00010722148391605657, + 9.806846475243357e-05, + 8.796176915972978e-05, + 7.718076911832247e-05, + 6.588195109951389e-05, + 5.4229219965104425e-05, + 4.244795938201352e-05, + 3.0428272609800047e-05, + 1.8319179158169103e-05, + 6.014502640389943e-06 + ], + [ + -5.77421674091018e-06, + -1.7272358625395405e-05, + -2.8498553379902727e-05, + -3.973219579882293e-05, + -5.0651040022053475e-05, + -6.138734745878855e-05, + -7.165054538708706e-05, + -8.155422747599698e-05, + -9.055637929216763e-05, + -9.874084330297928e-05, + -0.00010549662211692221, + -0.00011099511541025858, + -0.0001147333825351175, + -0.00011662017890671658, + -0.00011625689586257494, + -0.00011354295973635294, + -0.00010834986610977754, + -0.00010064592278587259, + -9.043304393287789e-05, + -7.790675396385489e-05, + -6.314530702601111e-05, + -4.658085983528704e-05, + -2.856727302692032e-05, + -9.691302222030453e-06, + 9.436122080308111e-06, + 2.8252489428394547e-05, + 4.620646186724237e-05, + 6.276533602496545e-05, + 7.756401416277697e-05, + 9.017411460733597e-05, + 0.00010046711078426983, + 0.00010818222029903242, + 0.00011340884947845378, + 0.00011608552054925404, + 0.00011644322615071039, + 0.00011457129928789403, + 0.00011081254053443832, + 0.00010530848276657702, + 9.845583520603938e-05, + 9.039059061667885e-05, + 8.138284951106364e-05, + 7.155368893632354e-05, + 6.12178512356892e-05, + 5.044243656977223e-05, + 3.9538484280852236e-05, + 2.8340230775532977e-05, + 1.7007865477473585e-05, + 5.578638172167529e-06 + ], + [ + -5.295514333348902e-06, + -1.5953598820924553e-05, + -2.625591468681436e-05, + -3.661969367041373e-05, + -4.662025858871069e-05, + -5.654072146299589e-05, + -6.584837040314831e-05, + -7.4777895902821e-05, + -8.273881249717274e-05, + -8.991186340741554e-05, + -9.573258783558067e-05, + -0.00010035377401520323, + -0.00010338798858591837, + -0.00010471602014273621, + -0.00010406404411479516, + -0.00010129610454722094, + -9.639173134703956e-05, + -8.936953514512662e-05, + -8.007864456031162e-05, + -6.884316467617285e-05, + -5.571527648955552e-05, + -4.1043252459772786e-05, + -2.5097193136550603e-05, + -8.540197196673658e-06, + 8.298055159201057e-06, + 2.4821525575665212e-05, + 4.065209930989164e-05, + 5.536322697872347e-05, + 6.855072934368088e-05, + 7.98439334036999e-05, + 8.913110973901505e-05, + 9.61868202859345e-05, + 0.00010113589918010929, + 0.00010385913356925513, + 0.00010453905001227948, + 0.00010321102748035377, + 0.00010019546124320834, + 9.559289165066249e-05, + 8.964550129079613e-05, + 8.256000262022397e-05, + 7.456182281711062e-05, + 6.571798349838235e-05, + 5.633955575138044e-05, + 4.651595038048038e-05, + 3.6399904934817925e-05, + 2.611062282992235e-05, + 1.571331182529384e-05, + 5.1427758536306165e-06 + ], + [ + -4.835438191879307e-06, + -1.4517490905501618e-05, + -2.391268946964691e-05, + -3.345131732224528e-05, + -4.2548483426894456e-05, + -5.148174756912749e-05, + -5.9867385127194e-05, + -6.784882670461571e-05, + -7.490823666502629e-05, + -8.112200978259317e-05, + -8.614740490414285e-05, + -9.007195715049178e-05, + -9.244121352840549e-05, + -9.339858736103449e-05, + -9.249887713329447e-05, + -8.989674655603381e-05, + -8.519168075083627e-05, + -7.885121860224913e-05, + -7.05065572504537e-05, + -6.052650609742383e-05, + -4.892039683978558e-05, + -3.601413857524898e-05, + -2.200522552394565e-05, + -7.504575290333326e-06, + 7.240080697823974e-06, + 2.175376855541836e-05, + 3.562671403037163e-05, + 4.8534817637095636e-05, + 6.024710394853522e-05, + 7.032400374239557e-05, + 7.864073201371255e-05, + 8.506314653406999e-05, + 8.967321902170681e-05, + 9.232379276973833e-05, + 9.319555858063935e-05, + 9.224189967872915e-05, + 8.990431937420648e-05, + 8.599280219365372e-05, + 8.09189657159569e-05, + 7.474432423140136e-05, + 6.76867602914316e-05, + 5.972582272944797e-05, + 5.127126377689834e-05, + 4.239202646643792e-05, + 3.3248283417204254e-05, + 2.378044488103125e-05, + 1.4342401844029055e-05, + 4.67897618874978e-06 + ], + [ + -4.380949877552451e-06, + -1.3116770937545025e-05, + -2.1584371710865293e-05, + -3.016373015781066e-05, + -3.836496852534965e-05, + -4.638366881796713e-05, + -5.385846905911233e-05, + -6.083593469306276e-05, + -6.705343853949978e-05, + -7.249233395757008e-05, + -7.678572110432932e-05, + -8.005464957782865e-05, + -8.196568650935828e-05, + -8.262504062357474e-05, + -8.152232844459326e-05, + -7.906921088402273e-05, + -7.484471649163374e-05, + -6.914315309120921e-05, + -6.170745494545075e-05, + -5.2837546984126717e-05, + -4.263212926761947e-05, + -3.1312855106072696e-05, + -1.9194512463788564e-05, + -6.5397309788622945e-06, + 6.329252513937003e-06, + 1.8890897912019342e-05, + 3.099060502244049e-05, + 4.2389972503179396e-05, + 5.25991294800299e-05, + 6.149324989672491e-05, + 6.888236260949352e-05, + 7.474039289791104e-05, + 7.89127385522438e-05, + 8.141428570579738e-05, + 8.24145463078667e-05, + 8.178687504144735e-05, + 7.986466031137785e-05, + 7.658083203492619e-05, + 7.229303901033861e-05, + 6.693236609389842e-05, + 6.07260370116348e-05, + 5.3737388826702326e-05, + 4.621789371883811e-05, + 3.821223192822433e-05, + 2.9984911878445542e-05, + 2.147261279624224e-05, + 1.2917467857786968e-05, + 4.198410643408331e-06 + ], + [ + -3.8817589983029265e-06, + -1.1667628165654393e-05, + -1.923556945465406e-05, + -2.6883597148009646e-05, + -3.4093901899960545e-05, + -4.121667327981186e-05, + -4.7786224588762375e-05, + -5.3890109684440886e-05, + -5.927314008804514e-05, + -6.392416114560739e-05, + -6.761032007293257e-05, + -7.03148685284067e-05, + -7.186271317175322e-05, + -7.230041337336663e-05, + -7.123682087381717e-05, + -6.889917579598441e-05, + -6.50695755887503e-05, + -5.997150153204118e-05, + -5.347273985314994e-05, + -4.578001010512978e-05, + -3.682070319511391e-05, + -2.7015750092897376e-05, + -1.6493687189773743e-05, + -5.664290657854126e-06, + 5.4370482783083714e-06, + 1.629624880860107e-05, + 2.6781057283210042e-05, + 3.6597183997192864e-05, + 4.548944510204609e-05, + 5.3288324055460914e-05, + 5.985974521019919e-05, + 6.497458139353406e-05, + 6.8725952144963e-05, + 7.10933982105668e-05, + 7.208248355062694e-05, + 7.172860218533986e-05, + 7.019566470636e-05, + 6.744828181662774e-05, + 6.379377661189689e-05, + 5.9148344198123274e-05, + 5.380070442116881e-05, + 4.7691229293849954e-05, + 4.109187058761231e-05, + 3.4039890128138126e-05, + 2.6729003097740585e-05, + 1.9088422902057338e-05, + 1.1501853013713198e-05, + 3.723434137945844e-06 + ], + [ + -3.3956071605721884e-06, + -1.0201721752980792e-05, + -1.687931341941664e-05, + -2.3517785076300534e-05, + -2.9886175877494492e-05, + -3.6032915984000926e-05, + -4.1706529719095e-05, + -4.695546206157456e-05, + -5.155245773823038e-05, + -5.552734464119615e-05, + -5.8626771687769055e-05, + -6.0908512036082635e-05, + -6.208940345851948e-05, + -6.235016839537354e-05, + -6.134990705564518e-05, + -5.9254417600116215e-05, + -5.591655197067997e-05, + -5.1427582567188704e-05, + -4.578935018020316e-05, + -3.9135976945137727e-05, + -3.1437671307415564e-05, + -2.3057645949576363e-05, + -1.4074123573442477e-05, + -4.826104942919966e-06, + 4.613763225996296e-06, + 1.391207306445685e-05, + 2.284902893331351e-05, + 3.123650643923351e-05, + 3.891991696510687e-05, + 4.563660479269287e-05, + 5.127856632445019e-05, + 5.582342167712982e-05, + 5.914452834891047e-05, + 6.125864445750978e-05, + 6.229056260500124e-05, + 6.199440984133493e-05, + 6.078743814542893e-05, + 5.846845410461605e-05, + 5.5460291652141674e-05, + 5.1472378046999844e-05, + 4.6882814559126695e-05, + 4.162829838862536e-05, + 3.5963994609915866e-05, + 2.9772556666075064e-05, + 2.3396717663470742e-05, + 1.6748930888472222e-05, + 1.0127216446419205e-05, + 3.2726723855731848e-06 + ], + [ + -2.9206314347047224e-06, + -8.761894010348393e-06, + -1.449884728762386e-05, + -2.0202273145767253e-05, + -2.5630019977482986e-05, + -3.087895440559773e-05, + -3.570879948806125e-05, + -4.015865305463665e-05, + -4.3973346340662096e-05, + -4.7238558851686645e-05, + -4.9846259372765226e-05, + -5.1703315031114804e-05, + -5.265324562481294e-05, + -5.27407851208036e-05, + -5.1824350792624885e-05, + -5.001385257615364e-05, + -4.7132337037486e-05, + -4.327107698052372e-05, + -3.8471036080061375e-05, + -3.2849570202601156e-05, + -2.6423445697338053e-05, + -1.933049996160722e-05, + -1.1837090851583357e-05, + -4.047521523664276e-06, + 3.846356236561816e-06, + 1.1676904148838689e-05, + 1.9187079698809602e-05, + 2.625021774986825e-05, + 3.272291097293976e-05, + 3.841515191342977e-05, + 4.319656221898358e-05, + 4.705781936747257e-05, + 4.995053291641865e-05, + 5.183181218255308e-05, + 5.275569590850959e-05, + 5.255081924339289e-05, + 5.157293503033572e-05, + 4.9710288372310924e-05, + 4.7214354922234335e-05, + 4.391188254032798e-05, + 4.008415213254488e-05, + 3.563801798491493e-05, + 3.083985106369183e-05, + 2.549778103087914e-05, + 2.0088650198181847e-05, + 1.437218635487938e-05, + 8.674349204529488e-06, + 2.8535766951952686e-06 + ], + [ + -2.4121274765971712e-06, + -7.26246121509969e-06, + -1.2109066964054871e-05, + -1.688116804897691e-05, + -2.140367051957385e-05, + -2.570079682193163e-05, + -2.9724111998114523e-05, + -3.3371165287377944e-05, + -3.6504132145569316e-05, + -3.916771401682807e-05, + -4.125014792665145e-05, + -4.272163375812538e-05, + -4.346295673096696e-05, + -4.345177406284481e-05, + -4.271230278996758e-05, + -4.11290475452665e-05, + -3.8694566545622494e-05, + -3.54964067240979e-05, + -3.1499169060637354e-05, + -2.6889119129817142e-05, + -2.163646130862228e-05, + -1.581570361235085e-05, + -9.6931937291906e-06, + -3.3322681437395042e-06, + 3.118064251174686e-06, + 9.5348664706957e-06, + 1.5731881942116657e-05, + 2.152284108669795e-05, + 2.6809026015865904e-05, + 3.1441420836913555e-05, + 3.543492950566854e-05, + 3.8664758336021685e-05, + 4.112159727467131e-05, + 4.273651708986268e-05, + 4.350766183000594e-05, + 4.343130446804932e-05, + 4.257821775902762e-05, + 4.112721546656589e-05, + 3.912859925860106e-05, + 3.642590780734609e-05, + 3.3291079261641525e-05, + 2.964215930892977e-05, + 2.5674723883283064e-05, + 2.1247215261122026e-05, + 1.672843306697164e-05, + 1.2002896833212994e-05, + 7.217755828349473e-06, + 2.402814596668776e-06 + ], + [ + -1.987443888307643e-06, + -5.839396882652037e-06, + -9.728602844686313e-06, + -1.3537715333586032e-05, + -1.7119581356107212e-05, + -2.0567339996898174e-05, + -2.3810206380658844e-05, + -2.6641423047542203e-05, + -2.910942544085031e-05, + -3.121980028912988e-05, + -3.2804911134360484e-05, + -3.394298615818882e-05, + -3.451294727726811e-05, + -3.444216240878236e-05, + -3.381816756590595e-05, + -3.258137268608831e-05, + -3.0590205844592704e-05, + -2.799554303504305e-05, + -2.4873748033611382e-05, + -2.1163358259952185e-05, + -1.7091617053945462e-05, + -1.2485300040004555e-05, + -7.627524910280982e-06, + -2.6654427112682096e-06, + 2.475453213154755e-06, + 7.536255255103805e-06, + 1.2395891346329903e-05, + 1.701524654566048e-05, + 2.1155907921397403e-05, + 2.4767573588578505e-05, + 2.794524440513455e-05, + 3.0567849331374254e-05, + 3.260186256193564e-05, + 3.3900130855250156e-05, + 3.452785486774907e-05, + 3.4496188549282276e-05, + 3.3885242322062676e-05, + 3.272482329391702e-05, + 3.117323757884318e-05, + 2.9042373661362547e-05, + 2.6591137603735427e-05, + 2.3668646415666994e-05, + 2.0533814276589608e-05, + 1.7013414863415432e-05, + 1.339243034728293e-05, + 9.626158307358972e-06, + 5.804007322839298e-06, + 1.942740602262886e-06 + ], + [ + -1.4696279835690226e-06, + -4.414471717133497e-06, + -7.301572684250344e-06, + -1.0149559448863313e-05, + -1.2876470833414273e-05, + -1.540594557628722e-05, + -1.7790132270164284e-05, + -1.9937759916379425e-05, + -2.1776189672068632e-05, + -2.3350123505128764e-05, + -2.450682629106108e-05, + -2.5313352858825624e-05, + -2.5717537503706872e-05, + -2.5670968369947153e-05, + -2.5158741516871247e-05, + -2.4287021550821003e-05, + -2.275964958990917e-05, + -2.083926259527974e-05, + -1.843644932448537e-05, + -1.571699010840294e-05, + -1.2623136559756747e-05, + -9.259202017457744e-06, + -5.705278447064557e-06, + -2.0042050606356596e-06, + 1.7825501560766085e-06, + 5.537639541787653e-06, + 9.16606969401441e-06, + 1.2593332899573326e-05, + 1.5664836192994195e-05, + 1.8406647639212214e-05, + 2.0798285044121234e-05, + 2.271867539509098e-05, + 2.4234868136976056e-05, + 2.523138461188628e-05, + 2.5715681133645275e-05, + 2.571381250137242e-05, + 2.534315509301994e-05, + 2.4449087970601313e-05, + 2.329424752562043e-05, + 2.1746386046334072e-05, + 1.995824764395215e-05, + 1.7793857562232164e-05, + 1.5379868531423478e-05, + 1.2818731414306282e-05, + 1.008622925071489e-05, + 7.260595281641248e-06, + 4.345553812344208e-06, + 1.4305123272611661e-06 + ], + [ + -9.611253087573145e-07, + -2.980233304584016e-06, + -4.8782695812572185e-06, + -6.766991352301005e-06, + -8.6221866281404e-06, + -1.0296704993307365e-05, + -1.1850151176413048e-05, + -1.3289975838004362e-05, + -1.4519322967862938e-05, + -1.553259925922782e-05, + -1.6339126048981393e-05, + -1.683086551854211e-05, + -1.7086041694304048e-05, + -1.7045067062317857e-05, + -1.6739587060892642e-05, + -1.6093248933481396e-05, + -1.509673047044152e-05, + -1.3787294207078535e-05, + -1.2200321137039234e-05, + -1.037306702976263e-05, + -8.331607484832297e-06, + -6.07967159282985e-06, + -3.760678573936156e-06, + -1.2945376963277012e-06, + 1.173466059323351e-06, + 3.5930401303932704e-06, + 6.0293785184285144e-06, + 8.30366808484054e-06, + 1.032463669670068e-05, + 1.2213358078487144e-05, + 1.3843174210938325e-05, + 1.5107909655668834e-05, + 1.6104424740802673e-05, + 1.674890455793945e-05, + 1.7074869641416916e-05, + 1.7082318886325196e-05, + 1.6856942117172327e-05, + 1.627952157592981e-05, + 1.553818705045405e-05, + 1.4498831137910288e-05, + 1.3269485723832677e-05, + 1.1852013711611986e-05, + 1.024268832753166e-05, + 8.57562024775317e-06, + 6.727876885604844e-06, + 4.807488589772284e-06, + 2.8722001147874217e-06, + 9.797516185850643e-07 + ], + [ + -4.842878686961775e-07, + -1.49197918972525e-06, + -2.4773187683182357e-06, + -3.3956026952547035e-06, + -4.28781033153003e-06, + -5.196781321520703e-06, + -5.958603619290856e-06, + -6.675720488402714e-06, + -7.269904085154683e-06, + -7.800755763593426e-06, + -8.171423067259746e-06, + -8.404253692306974e-06, + -8.525325402981394e-06, + -8.545817090755013e-06, + -8.400529091026654e-06, + -8.04289920759785e-06, + -7.545574670305652e-06, + -6.871298173092434e-06, + -6.1057499120971314e-06, + -5.18560351592263e-06, + -4.148109364301755e-06, + -3.017484737077912e-06, + -1.8775456739341605e-06, + -6.705520039230571e-07, + 6.072220947035127e-07, + 1.7732375346970618e-06, + 2.9839563952254044e-06, + 4.118306791038538e-06, + 5.168839644059062e-06, + 6.126237967360362e-06, + 6.91972439648562e-06, + 7.5921389131049225e-06, + 8.102505433260747e-06, + 8.407980736105414e-06, + 8.581205515206163e-06, + 8.564442555689115e-06, + 8.394941797041507e-06, + 8.149073119859866e-06, + 7.797034192222657e-06, + 7.282943401687551e-06, + 6.6366050746440285e-06, + 5.938113532111373e-06, + 5.122275591532399e-06, + 4.3250630999139125e-06, + 3.356487496705958e-06, + 2.4121261826307758e-06, + 1.4696274908376875e-06, + 4.339964499202155e-07 + ], + [ + 0.0, + 9.31322656147489e-09, + 0.0, + 1.862645277600503e-09, + -9.313226526780416e-09, + 0.0, + 3.7252905621399014e-09, + -1.86264518045598e-09, + 3.7252902845841263e-09, + 0.0, + 0.0, + -3.725290367850855e-09, + -3.7252906454066415e-09, + -3.725290520506532e-09, + -1.862645152700404e-09, + 7.450580902235173e-09, + 0.0, + 0.0, + 1.8626451873948743e-09, + -7.450580513657102e-09, + 0.0, + 0.0, + -1.862645249844924e-09, + 0.0, + -1.8626450486170008e-09, + 5.587934583800713e-09, + 0.0, + -1.8626451110670414e-09, + 5.587935333201124e-09, + 1.8626453955617233e-09, + 0.0, + -3.725290340095278e-09, + 1.862645159639298e-09, + 3.725290520506532e-09, + 1.862645291478293e-09, + -7.450581152035382e-09, + 5.587935166667682e-09, + 7.450580624679404e-09, + 0.0, + 1.862644764122425e-09, + 0.0, + 0.0, + 1.8626452637227135e-09, + 0.0, + -1.8626452290282402e-09, + -1.8626448473891212e-09, + 0.0, + -5.587935936884934e-09 + ] + ], + "v": [ + [ + 1.862672034363438e-09, + 1.8626720135461558e-09, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + -1.8626845872694694e-09, + -1.862688945089567e-09, + 0.0, + 0.0, + 0.0, + -1.8627307895274423e-09, + -1.862750407790991e-09, + 0.0, + 2.933033666118269e-05, + 0.00023098739602484092, + 0.000556197251722702, + 0.0009346162052479584, + 0.00130764367542913, + 0.0016284626672007844, + 0.0018618462252670373, + 0.001984395892934055, + 0.001984403349076506, + 0.0018618223178964194, + 0.0016284608079158809, + 0.0013076457302642625, + 0.0009346085738742542, + 0.0005562195548643468, + 0.0002309669012040482, + 2.932847376252624e-05, + 0.0, + 0.0, + 0.0, + 0.0, + 1.8627029624198802e-09, + 0.0, + 0.0, + 1.8626845872694694e-09, + 0.0, + 0.0, + -1.8626764615160694e-09, + 0.0, + 0.0, + 0.0, + 1.8626722425362877e-09, + 1.8626720829370986e-09 + ], + [ + -3.3528091435039305e-08, + 7.450687957037306e-09, + 1.676405392993914e-08, + -1.8626732556448206e-09, + 2.980279113122879e-08, + 4.6566894363568255e-08, + 8.382051196372868e-08, + 1.1362351600866025e-07, + 1.9185649462034855e-07, + 3.390093115985647e-07, + 4.675362454633687e-07, + 6.538083306115379e-07, + 1.1120394229114443e-06, + 2.4085083536094622e-06, + 4.878549170367135e-06, + 1.8709766457854944e-05, + 8.610992513697068e-05, + 0.0002763972990883624, + 0.0005772251550269987, + 0.0009332208453233675, + 0.0012871363929648097, + 0.00159328002154368, + 0.001816912538244119, + 0.001934472349411128, + 0.0019344797986427984, + 0.0018168793950816963, + 0.0015933210062752453, + 0.0012872145791467684, + 0.0009332952550468618, + 0.0005772547301083792, + 0.00027637865288912967, + 8.605402373850429e-05, + 1.8672505840895436e-05, + 4.865509657163039e-06, + 2.401057715658613e-06, + 1.099000420373249e-06, + 6.407694096803032e-07, + 4.4890935692861017e-07, + 3.55773527544129e-07, + 2.7753995180621185e-07, + 1.6391591118226782e-07, + 7.823249546516957e-08, + 4.656690112921326e-08, + 1.4901397342027325e-08, + -1.862673477696153e-09, + 3.72534528306876e-09, + -1.86267198578978e-09, + -5.029213911979164e-08 + ], + [ + 3.0361548052334537e-07, + 3.4273161027350817e-07, + 4.0606250122214566e-07, + 4.8056954151587e-07, + 6.742879157319816e-07, + 8.19577265995072e-07, + 1.0263351508760263e-06, + 1.432400813643151e-06, + 1.95022895380575e-06, + 2.773541070131426e-06, + 4.0196890404322e-06, + 6.025829357107097e-06, + 9.656271097247971e-06, + 1.720032433172968e-05, + 3.369679514941097e-05, + 7.4481681864143e-05, + 0.00017395854950128097, + 0.0003555569351165797, + 0.0006198791085515063, + 0.0009311012874389669, + 0.0012435590490681124, + 0.001516261420754814, + 0.0017166474473617225, + 0.0018224322575964545, + 0.0018224080770255328, + 0.0017166530250212328, + 0.00151630984474908, + 0.0012435815938868174, + 0.0009311794399048557, + 0.0006199684121417815, + 0.0003555047952577634, + 0.00017397156236655865, + 7.44742267400608e-05, + 3.3680031515762117e-05, + 1.7218952330839273e-05, + 9.661858119266286e-06, + 6.035142095967745e-06, + 4.025276943570745e-06, + 2.7716781920235862e-06, + 1.9818949426548756e-06, + 1.4305382270436726e-06, + 1.0319233228667126e-06, + 8.102638894816595e-07, + 6.258584458848477e-07, + 4.842949355114168e-07, + 3.967491994844488e-07, + 3.4459423777972115e-07, + 2.8871410294388936e-07 + ], + [ + 1.3578871947301713e-06, + 1.5013128794864001e-06, + 1.6726791160957064e-06, + 1.931591129901815e-06, + 2.3376552406344026e-06, + 2.903909715073911e-06, + 3.676922492615933e-06, + 4.889531139617961e-06, + 6.528695858170201e-06, + 8.972548915940347e-06, + 1.276499987465042e-05, + 1.8761040272413285e-05, + 2.892584113403886e-05, + 4.6960618906199135e-05, + 8.066641688750712e-05, + 0.00014382893877327717, + 0.0002566476568432901, + 0.0004295527005223769, + 0.0006601945936514765, + 0.0009249200420716927, + 0.0011906095797449803, + 0.001423494311799306, + 0.0015952836486874376, + 0.001686321017503271, + 0.0016863750695366318, + 0.0015954008923117844, + 0.001423604180918462, + 0.0011907154808998737, + 0.0009250057695168096, + 0.0006602281260199155, + 0.0004295489623762186, + 0.0002566085369097746, + 0.00014380846479825687, + 8.059936061367307e-05, + 4.6915921711637814e-05, + 2.887368009715996e-05, + 1.879084272462883e-05, + 1.2792941026508866e-05, + 9.026565525074106e-06, + 6.562225284233903e-06, + 4.882080661937866e-06, + 3.682510458986297e-06, + 2.848029498030591e-06, + 2.298538750370015e-06, + 1.8850244885170455e-06, + 1.588858860574027e-06, + 1.4342565661476334e-06, + 1.3336723692410985e-06 + ], + [ + 3.59495322956535e-06, + 3.846414670178612e-06, + 4.217086163113324e-06, + 4.813142932005218e-06, + 5.662524281798203e-06, + 6.949634486386351e-06, + 8.713591771138745e-06, + 1.120027377172099e-05, + 1.4772902701052681e-05, + 1.987666457915432e-05, + 2.74466414425916e-05, + 3.897297444670982e-05, + 5.7110031035706876e-05, + 8.639531155134336e-05, + 0.00013424404453407873, + 0.0002110216812823739, + 0.0003271840210486468, + 0.0004882368164422634, + 0.000688855144802835, + 0.000912084696533039, + 0.0011339166065627202, + 0.0013279769136169304, + 0.001471335441929474, + 0.0015473723165004534, + 0.0015473760472641074, + 0.0014713377730462113, + 0.001328003117702204, + 0.001133956013942793, + 0.0009121181960555337, + 0.000688868074124244, + 0.0004883130369690184, + 0.00032722686434579704, + 0.00021104962115900083, + 0.00013422727757678518, + 8.637109287432449e-05, + 5.711934437207645e-05, + 3.895621397546744e-05, + 2.7405661895006207e-05, + 1.9807745507999513e-05, + 1.475241326570082e-05, + 1.1196548251884188e-05, + 8.717317250235673e-06, + 6.9924752584189935e-06, + 5.658798873633035e-06, + 4.796377843998505e-06, + 4.196596919766035e-06, + 3.822198821126594e-06, + 3.589364744671992e-06 + ], + [ + 7.225293004863404e-06, + 7.599692401704973e-06, + 8.227412874300742e-06, + 9.33756485521342e-06, + 1.0917114977592747e-05, + 1.3143012283195526e-05, + 1.6266720754211678e-05, + 2.058068301190385e-05, + 2.6550578363761954e-05, + 3.494753922105031e-05, + 4.70661525764263e-05, + 6.461262760896162e-05, + 9.058400392663431e-05, + 0.00012935376396234832, + 0.0001867444638460382, + 0.00026982255504066823, + 0.0003839497851125459, + 0.0005307637329360331, + 0.0007044660055031466, + 0.000892334031867642, + 0.001076075102139221, + 0.0012357552113112392, + 0.00135352294751177, + 0.0014159155493662372, + 0.0014158952223789951, + 0.0013534655339560448, + 0.0012356901944882471, + 0.00107599740706255, + 0.0008922354088362405, + 0.0007044698121012005, + 0.0005307469543237934, + 0.00038393305908876387, + 0.000269798347877444, + 0.00018674819198122436, + 0.00012933886349161865, + 9.068270588000158e-05, + 6.464988264466748e-05, + 4.704379623199458e-05, + 3.494195138637077e-05, + 2.6526362048922133e-05, + 2.055088053705715e-05, + 1.624064291279326e-05, + 1.3102030623636577e-05, + 1.0872408523383404e-05, + 9.309625203616387e-06, + 8.22368542064871e-06, + 7.5531224653907314e-06, + 7.240194275851741e-06 + ], + [ + 1.2513403665839416e-05, + 1.2992111158439235e-05, + 1.4059423191487946e-05, + 1.5832685897553605e-05, + 1.834170371240982e-05, + 2.1782063278171615e-05, + 2.6474137800727827e-05, + 3.290409658386689e-05, + 4.168102236117651e-05, + 5.369526973843061e-05, + 7.025818404605455e-05, + 9.341680912767312e-05, + 0.00012593343204119752, + 0.00017141038090875792, + 0.00023421538405142659, + 0.00031858552927521206, + 0.00042700872505366255, + 0.0005589958930984681, + 0.0007090773795554153, + 0.0008669732452004006, + 0.001018945068741545, + 0.0011497474610406334, + 0.0012457037773739611, + 0.0012964672985718486, + 0.001296430482098739, + 0.0012456350226671116, + 0.0011496580489889306, + 0.0010188055018447437, + 0.0008669267979765412, + 0.000709053177371548, + 0.0005589828265298182, + 0.0004270440939218056, + 0.0003185892522202117, + 0.00023419679054208857, + 0.00017144579687477574, + 0.00012595205689037168, + 9.342051637774121e-05, + 7.02842536209108e-05, + 5.364870261783168e-05, + 4.1653071954849186e-05, + 3.2892916141979265e-05, + 2.647786077466941e-05, + 2.1810001419186796e-05, + 1.830259042042194e-05, + 1.5819644474641035e-05, + 1.413765174729529e-05, + 1.3042401671132127e-05, + 1.2509678469635227e-05 + ], + [ + 1.9315852329269575e-05, + 2.006836977300878e-05, + 2.1597622135889643e-05, + 2.404517327531338e-05, + 2.7485526437686377e-05, + 3.23545426655219e-05, + 3.887202912079556e-05, + 4.7509226449730836e-05, + 5.909503554613141e-05, + 7.454588695904618e-05, + 9.52866903183645e-05, + 0.00012307953700241262, + 0.00016041470258184483, + 0.0002100451125551861, + 0.0002748633279750646, + 0.00035731270048408077, + 0.0004581731619402368, + 0.0005757325832791103, + 0.0007050973201136785, + 0.0008379374869648803, + 0.0009636050788191032, + 0.001070727931178781, + 0.0011488830030338159, + 0.0011900731382958414, + 0.0011900694175806924, + 0.0011488681452044797, + 0.0010707465291157029, + 0.0009635901995830313, + 0.0008378815962104938, + 0.0007050339909747148, + 0.0005757102917272634, + 0.0004581080282787015, + 0.0003572307410961142, + 0.0002748223494692167, + 0.0002100153201100262, + 0.00016043705517765664, + 0.0001230776777728494, + 9.528481646796708e-05, + 7.456450059620587e-05, + 5.9095034665535514e-05, + 4.7481292345669775e-05, + 3.8780756269004246e-05, + 3.2278175022271224e-05, + 2.7485517119943687e-05, + 2.4009774947494498e-05, + 2.1588308600576134e-05, + 2.007209622780491e-05, + 1.931958104508741e-05 + ], + [ + 2.7887823728747843e-05, + 2.8876902136007294e-05, + 3.091279631291776e-05, + 3.412217103308793e-05, + 3.871178280850648e-05, + 4.491819286929509e-05, + 5.318099095723662e-05, + 6.406640581031617e-05, + 7.83195078549426e-05, + 9.681764257135484e-05, + 0.00012090557534593495, + 0.00015207531828350456, + 0.00019246510082712197, + 0.00024403993002655085, + 0.0003084759766270239, + 0.00038698939360202035, + 0.00047942886006765886, + 0.0005835218320681916, + 0.0006949129134886479, + 0.0008069306996068956, + 0.0009112026533390395, + 0.0009992175029789566, + 0.0010629171732820188, + 0.0010963840823265975, + 0.0010964495444995036, + 0.0010630177571387001, + 0.000999241867481386, + 0.0009112269503568821, + 0.0008069380388375743, + 0.0006949090950495316, + 0.0005835013289799834, + 0.00047941392857947653, + 0.0003869334651447394, + 0.00030846853405536704, + 0.0002440082852845629, + 0.00019250982263525697, + 0.00015209952922907421, + 0.0001208887863678368, + 9.681391543644983e-05, + 7.828412639169276e-05, + 6.409247406477426e-05, + 5.323872003268875e-05, + 4.495172169629689e-05, + 3.870433502913481e-05, + 3.4176183178977364e-05, + 3.088485765385922e-05, + 2.8826606464533023e-05, + 2.7844985903617914e-05 + ], + [ + 3.7785997870423924e-05, + 3.9065652049495994e-05, + 4.1610050762008105e-05, + 4.5577527257448416e-05, + 5.118041259727484e-05, + 5.875028037514713e-05, + 6.871180560109381e-05, + 8.153438423895816e-05, + 9.808600817258976e-05, + 0.00011907631203867848, + 0.00014562660336041425, + 0.0001792269987099348, + 0.00022121293584822252, + 0.0002729068555016082, + 0.0003353925179502667, + 0.0004088785522182205, + 0.0004927164683435974, + 0.0005845593108338252, + 0.0006805490050929577, + 0.0007752156921431418, + 0.0008621948554934593, + 0.0009347723372005668, + 0.0009870682476052655, + 0.0010143337665538235, + 0.001014354223016122, + 0.0009870888557140702, + 0.0009348524065623954, + 0.0008621873857812468, + 0.0007752212785508111, + 0.0006805435579225049, + 0.0005845443988848858, + 0.0004926774180779694, + 0.00040885618676833287, + 0.0003354037363336966, + 0.0002728826353991717, + 0.00022119617399034408, + 0.0001792419186857112, + 0.00014571974946514787, + 0.00011915265791257384, + 9.8138154347674e-05, + 8.162564336400022e-05, + 6.870808001749668e-05, + 5.8785670002744746e-05, + 5.121767140608788e-05, + 4.555330931530008e-05, + 4.160818445542592e-05, + 3.905074913725924e-05, + 3.778786018229469e-05 + ], + [ + 4.927300469053188e-05, + 5.069422231935552e-05, + 5.373781603055938e-05, + 5.848946581921607e-05, + 6.51186709359729e-05, + 7.393836673211967e-05, + 8.53117625798514e-05, + 9.987033285405247e-05, + 0.00011815044292911806, + 0.00014098473056577457, + 0.00016923370506720424, + 0.00020407082354122977, + 0.0002464124484161772, + 0.00029702775050560796, + 0.0003564362285463286, + 0.0004244293442190378, + 0.0004999656045240888, + 0.000580835859525519, + 0.0006636743211372168, + 0.0007439419374892527, + 0.0008168128968440282, + 0.0008770940402518393, + 0.000920178732826564, + 0.0009425739330445042, + 0.0009425683540028715, + 0.0009201453327056665, + 0.0008770906711724429, + 0.0008168520467694274, + 0.0007439847846972807, + 0.0006636577144890578, + 0.0005807912839986753, + 0.0004999134674169835, + 0.00042442935054352155, + 0.0003564866229506273, + 0.00029706872441593235, + 0.00024643105843826234, + 0.00020406155320782345, + 0.0001692691097676975, + 0.0001409810005191084, + 0.00011818955594590138, + 9.988335269507726e-05, + 8.534530002628085e-05, + 7.393836948656345e-05, + 6.512799237490071e-05, + 5.8439180353447184e-05, + 5.3737813628269404e-05, + 5.071098467598608e-05, + 4.925065806421094e-05 + ], + [ + 6.15516291181395e-05, + 6.325224593343454e-05, + 6.674845026666849e-05, + 7.213899388703193e-05, + 7.965109267452131e-05, + 8.949153213688417e-05, + 0.00010212591365188062, + 0.00011795478993286806, + 0.00013756478237858283, + 0.00016155761245322995, + 0.0001908850162120574, + 0.000226042430042606, + 0.0002678438047702997, + 0.0003165870990572732, + 0.0003724211545885042, + 0.00043478912146464595, + 0.0005025341460149611, + 0.0005736911069757337, + 0.0006452928495978534, + 0.0007137164432499148, + 0.0007750566821816644, + 0.0008253701165391894, + 0.0008610512089690303, + 0.000879598463717607, + 0.0008796021987736016, + 0.0008611034808587715, + 0.0008253589623621949, + 0.0007750139588491147, + 0.0007136664568165559, + 0.0006452128034289836, + 0.0005735737493155543, + 0.0005024632703082131, + 0.00043473138522425256, + 0.00037235418117520714, + 0.00031657218842599875, + 0.0002678661925210237, + 0.00022609085568911497, + 0.00019088504536742223, + 0.000161630259413791, + 0.00013762626420905217, + 0.00011805907029013004, + 0.00010216131617720353, + 8.944680528863247e-05, + 7.960452452842608e-05, + 7.212222147558504e-05, + 6.672981968108869e-05, + 6.324479293292693e-05, + 6.156093451055771e-05 + ], + [ + 7.493664997620163e-05, + 7.68198007672637e-05, + 8.07053164839577e-05, + 8.667883766567674e-05, + 9.486335823504093e-05, + 0.00010558480748223884, + 0.00011917846835657624, + 0.00013596842552275523, + 0.00015639238380825592, + 0.00018111346263526484, + 0.00021066063042944331, + 0.00024551251228680155, + 0.0002860211717656118, + 0.00033232620948199455, + 0.0003841873294132513, + 0.00044113876934872946, + 0.0005018207547240803, + 0.0005644099187589424, + 0.0006264343291563016, + 0.0006849941000453109, + 0.0007368538676327037, + 0.0007791528259830717, + 0.0008089802206083199, + 0.0008243705163699583, + 0.0008244078731479938, + 0.0008090156902381565, + 0.0007791550238470953, + 0.0007368538621427784, + 0.0006849046786429442, + 0.0006263431034237212, + 0.0005643242333673515, + 0.0005017909487774256, + 0.0004410604891011076, + 0.0003841724282519187, + 0.0003323095131181437, + 0.00028601181322982866, + 0.00024555160466490045, + 0.00021069413387763618, + 0.00018112463384614043, + 0.00015639982278238217, + 0.00013596097539837624, + 0.00011917661879537357, + 0.00010559783881539327, + 9.48428723430063e-05, + 8.667699712526073e-05, + 8.075932533975891e-05, + 7.685706483618179e-05, + 7.49385236628037e-05 + ], + [ + 8.867743198173862e-05, + 9.07486964150927e-05, + 9.486889549661421e-05, + 0.00010128015176279582, + 0.0001100607244326225, + 0.00012145456218865767, + 0.00013563678958121997, + 0.00015295199330813281, + 0.00017383411291827815, + 0.0001987935970855934, + 0.00022816373633516795, + 0.00026219233325611716, + 0.0003009370578420009, + 0.00034450401102588667, + 0.00039251681978186574, + 0.0004442102185054426, + 0.0004984326895416566, + 0.000553606919127418, + 0.0006074510567812764, + 0.0006578006140116867, + 0.0007020276966840855, + 0.0007377818279346554, + 0.0007629192422320282, + 0.0007758251365321429, + 0.0007757859968934436, + 0.0007628690750301452, + 0.0007377820258210186, + 0.000702092997157812, + 0.0006578099504385962, + 0.0006074436130395407, + 0.0005535975946075364, + 0.0004984195405970602, + 0.00044421569307442817, + 0.00039245912972160044, + 0.0003444816605453257, + 0.00030095569890910257, + 0.00026223150607386015, + 0.00022817307892238374, + 0.00019878992287605156, + 0.00017383970250140727, + 0.00015296686720296434, + 0.00013563678654948295, + 0.00012148810404813216, + 0.00011009610201143792, + 0.00010132114533112736, + 9.491920228985223e-05, + 9.076547166420123e-05, + 8.868859735840974e-05 + ], + [ + 0.00010298259139344562, + 0.00010517678708038493, + 0.00010963224738250448, + 0.00011635828573058662, + 0.00012550950915116353, + 0.00013726840924573768, + 0.0001517654314326247, + 0.00016939353779318243, + 0.00019042095197239968, + 0.00021522016879843849, + 0.00024395143402110972, + 0.0002766966254761287, + 0.0003134035781510613, + 0.00035407227757527595, + 0.00039825739493172134, + 0.00044511547061225923, + 0.000493632838964752, + 0.0005422245488451324, + 0.0005891976457984778, + 0.0006325868937129967, + 0.0006704404421532951, + 0.000700901182265065, + 0.0007221533651600462, + 0.0007330011112445931, + 0.0007329991161840758, + 0.0007220807321380218, + 0.0007009142741855779, + 0.0006705150422504123, + 0.0006326447000991227, + 0.0005891995270891769, + 0.0005422264306706874, + 0.0004935881485021544, + 0.0004451190682145363, + 0.0003982555033577071, + 0.00035408154793688154, + 0.00031340915850628146, + 0.00027668358022789775, + 0.00024390116378963112, + 0.000215184784415509, + 0.00019036503406585274, + 0.00016935625504797944, + 0.00015176543708635872, + 0.00013723676889503951, + 0.00012550393544217186, + 0.00011633594642144141, + 0.00010963412698868458, + 0.00010521217854221898, + 0.00010299189681407392 + ], + [ + 0.00011719458202134528, + 0.00011946329464567361, + 0.00012402864446079388, + 0.0001309334970860731, + 0.00014031564125597547, + 0.00015223103572019073, + 0.0001668192838353522, + 0.00018442690277343488, + 0.0002053332023367219, + 0.00022968357080626483, + 0.00025748717628198834, + 0.000288794399731485, + 0.00032340030859896653, + 0.0003612396284329702, + 0.0004017274002539751, + 0.00044407420513849314, + 0.0004874472194267881, + 0.0005304345088171531, + 0.0005715813362689013, + 0.000609181611534527, + 0.0006418367980157519, + 0.0006678013860040575, + 0.000685961609656239, + 0.0006952560487812681, + 0.0006953043735258272, + 0.0006859616071008548, + 0.000667877745137728, + 0.0006419056950619139, + 0.0006092711245999217, + 0.0005716259245275078, + 0.0005305406050497154, + 0.000487517843547022, + 0.00044411512534397047, + 0.00040174795143739414, + 0.0003612377287801696, + 0.0003234114423158281, + 0.0002887831937155499, + 0.0002574648321526083, + 0.0002296872738624741, + 0.00020535185639972503, + 0.0001844231788406668, + 0.00016691614183847234, + 0.0001522459307182518, + 0.00014032127861902434, + 0.0001309763432829887, + 0.00012402677972608107, + 0.00011944651183169882, + 0.00011716850222023172 + ], + [ + 0.00013157048405324233, + 0.00013384290694694084, + 0.00013846786406447416, + 0.0001454453608755332, + 0.00015485917877718723, + 0.00016677642073959127, + 0.00018134416914569946, + 0.00019882134987431, + 0.00021935699674145912, + 0.00024294737132521892, + 0.00026968365610742604, + 0.0002993070552446571, + 0.0003317391731954733, + 0.0003667566440259633, + 0.0004037856877506302, + 0.0004420793038191599, + 0.0004808572181104501, + 0.0005188621834721215, + 0.000554952085098457, + 0.00058775437717942, + 0.000615974741215349, + 0.000638379974795232, + 0.0006539959698765412, + 0.0006620032287774981, + 0.0006620125111047719, + 0.0006540724193907548, + 0.0006385122109860813, + 0.0006160808826331032, + 0.000587841911155549, + 0.0005550470557863362, + 0.0005189384578931352, + 0.0004809186968676873, + 0.00044209235795451205, + 0.00040379116963190593, + 0.0003667267774978312, + 0.00033172248167069937, + 0.00029926977106699775, + 0.00026962775654427247, + 0.00024290263151707306, + 0.00021935513613303802, + 0.00019877103864429814, + 0.00018135720332511043, + 0.00016675220593141194, + 0.00015480702389256823, + 0.00014541371498320285, + 0.00013848092147491744, + 0.00013385967009008854, + 0.0001315592865601171 + ], + [ + 0.00014521621030737515, + 0.00014752590203505987, + 0.00015212290087952295, + 0.0001590724591284354, + 0.00016840244806234553, + 0.00018020976614966045, + 0.00019463779478468647, + 0.00021181881799988442, + 0.0002317975297072111, + 0.00025447894548359586, + 0.00027991507366457703, + 0.0003079291791572712, + 0.00033816343596253684, + 0.0003705004926499291, + 0.0004043761313811714, + 0.00043897436323073413, + 0.0004737383183612359, + 0.0005075374185842193, + 0.0005393713519921268, + 0.0005681283848519594, + 0.0005926606342328578, + 0.0006121191720857743, + 0.000625589662023687, + 0.0006325054421664096, + 0.0006325092357639704, + 0.0006256473908421006, + 0.0006122254642237282, + 0.0005927090737811802, + 0.0005681021894244019, + 0.0005394141936562278, + 0.0005076640950459332, + 0.00047382021275069766, + 0.0004390227559349288, + 0.0004044375601900314, + 0.0003705358794457409, + 0.0003381336147270196, + 0.0003079179298581016, + 0.00027992993731004387, + 0.0002544621432432156, + 0.00023179757288299539, + 0.00021183558541077325, + 0.00019465455756273003, + 0.00018029731921266346, + 0.000168460196891471, + 0.00015909477363004938, + 0.0001521117515924497, + 0.00014753334935240354, + 0.00014520690001388367 + ], + [ + 0.00015867750922932703, + 0.00016095737258201492, + 0.00016552832192531132, + 0.0001723660867330845, + 0.0001815787369279943, + 0.00019319234391923032, + 0.00020742294213671423, + 0.00022408616955044112, + 0.0002433812786852732, + 0.00026509219881342707, + 0.000289150046645366, + 0.00031540578795288175, + 0.00034354081200753004, + 0.00037335220495283305, + 0.0004042867380583588, + 0.00043565147206468314, + 0.00046683554424303386, + 0.0004969373455161636, + 0.0005250350165370561, + 0.0005502975991683994, + 0.0005718497922288029, + 0.0005888554981024967, + 0.0006005061196914889, + 0.000606479512650518, + 0.0006065110881968971, + 0.0006005918076201857, + 0.0005889151090250113, + 0.000571898225030095, + 0.0005503403690982092, + 0.0005250423282210526, + 0.0004969206160063267, + 0.00046681312994820146, + 0.00043563837109001236, + 0.0004042494460368843, + 0.00037331306925151057, + 0.00034350351686212194, + 0.00031539263134146387, + 0.000289105269853819, + 0.0002649953055292235, + 0.00024325832114058385, + 0.00022402470583914383, + 0.0002072757985064512, + 0.00019316444336572896, + 0.00018154520919765185, + 0.0001723456331947774, + 0.0001654817546931117, + 0.00016093690528996675, + 0.0001586607421054276 + ], + [ + 0.00017113298627463382, + 0.00017337932999798506, + 0.00017783667532265146, + 0.00018460178175895567, + 0.00019353129673350497, + 0.00020496047946324104, + 0.00021878505152956164, + 0.0002349229669462214, + 0.0002534134569128224, + 0.00027411479476993053, + 0.0002968315235346215, + 0.000321384759986165, + 0.0003474858531925644, + 0.0003749559496189276, + 0.00040325307390479874, + 0.00043171768315551976, + 0.00045971479577787476, + 0.0004867228529429116, + 0.0005117806337820544, + 0.0005341097824679591, + 0.0005531363204130109, + 0.0005680465261823788, + 0.0005782572477178624, + 0.0005834484678497725, + 0.0005835565051027108, + 0.0005783300402601079, + 0.0005680520939897894, + 0.0005531866250239742, + 0.0005341488431595573, + 0.0005118067317049545, + 0.00048672085703431683, + 0.0004598228598118628, + 0.00043176226755036335, + 0.0004032994920132582, + 0.0003749521028076529, + 0.0003475063558872631, + 0.0003213978170701392, + 0.0002968371042897211, + 0.00027405888775111295, + 0.00025333142672591603, + 0.00023488757703961046, + 0.00021872727473758017, + 0.0002049176411722341, + 0.00019353315974494334, + 0.00018454217279270654, + 0.00017784967711367093, + 0.00017334395221115314, + 0.0001711087816829177 + ], + [ + 0.0001831581550216709, + 0.00018533931848406328, + 0.00018966997997181274, + 0.00019619482985728837, + 0.00020504236886947628, + 0.00021614746369997873, + 0.0002294691277968698, + 0.0002450426628410437, + 0.0002626762711997728, + 0.0002823197238042909, + 0.00030367112710487766, + 0.00032665979811979674, + 0.00035095782593120293, + 0.0003762095073448808, + 0.0004020646442394911, + 0.00042799798694542437, + 0.0004532999280718566, + 0.0004775177229322836, + 0.0004998227316016639, + 0.0005197173601229551, + 0.0005365348760847622, + 0.0005496757526612371, + 0.0005587037390782963, + 0.0005633006552544055, + 0.0005633063134652784, + 0.0005587466224137713, + 0.0005496849747290589, + 0.0005365461138778963, + 0.000519724715810552, + 0.0004997983934635472, + 0.0004774432244222765, + 0.0004532402897693553, + 0.00042794583295624136, + 0.0004020385252942355, + 0.0003761405845900713, + 0.00035085900441657363, + 0.0003266000887915935, + 0.00030366177936549076, + 0.0002823103448327245, + 0.0002626706455811913, + 0.0002450016416641089, + 0.00022943560437614277, + 0.000216063661767099, + 0.00020496046648307031, + 0.00019615759731006878, + 0.0001896420582286782, + 0.00018531700188580925, + 0.00018313765733745697 + ], + [ + 0.00019398197299259751, + 0.00019611284986090875, + 0.00020031683378822103, + 0.00020667588862063917, + 0.00021533161509240879, + 0.00022609769312422192, + 0.00023894807503953034, + 0.00025383431828956396, + 0.0002706054632955708, + 0.00028913692786289297, + 0.0003093036540903024, + 0.00033066249094234874, + 0.00035320597275237555, + 0.00037657273356475786, + 0.00040036223727230513, + 0.00042401387446874795, + 0.00044698568769612504, + 0.0004687635146276248, + 0.0004888500247686496, + 0.0005067162393083176, + 0.0005216806558601482, + 0.0005333387652856383, + 0.0005413200437393748, + 0.0005454084715690288, + 0.0005453712817818795, + 0.0005412977566031004, + 0.0005332978011323255, + 0.0005216377150715757, + 0.0005066882931058196, + 0.0004888722635422452, + 0.0004687970037522834, + 0.00044699304334969, + 0.0004240696779239122, + 0.00040041058993613957, + 0.0003765894293258261, + 0.0003532562306172336, + 0.000330675569499308, + 0.00030931670010685613, + 0.00028914622979087947, + 0.0002705533232693974, + 0.00025377469367710264, + 0.0002388996408235226, + 0.00022601946353488798, + 0.00021523848341074, + 0.00020666100974915815, + 0.0002003242448361028, + 0.00019611464858481959, + 0.0001940005554086163 + ], + [ + 0.00020427677446201989, + 0.00020624001321795755, + 0.00021043837286974362, + 0.00021663169210585736, + 0.00022496884296357246, + 0.00023530654830711338, + 0.00024771176007841705, + 0.00026200383412739955, + 0.00027794055248363573, + 0.0002954568202547413, + 0.00031438121717904945, + 0.0003343802898380614, + 0.0003553572942868631, + 0.00037694524705023455, + 0.00039883295548802416, + 0.000420519631730787, + 0.0004413810837860357, + 0.00046108768357767607, + 0.0004791923876849384, + 0.0004951774139554341, + 0.0005085977839589221, + 0.0005189966124600206, + 0.000526147289203574, + 0.0005297440395748944, + 0.0005297552331743798, + 0.0005260783568359187, + 0.0005189855023562722, + 0.0005085659873947273, + 0.0004951922652724635, + 0.0004792369910972642, + 0.00046107459784960626, + 0.0004413381813540249, + 0.00042047860502289345, + 0.00039880317101960205, + 0.0003768912282512637, + 0.00035532186233418943, + 0.0003343430381699855, + 0.00031433463988984385, + 0.0002953803950510361, + 0.0002778846751254562, + 0.0002619646565438573, + 0.0002476558760107492, + 0.00023530093976169655, + 0.00022489809163777762, + 0.00021655901530632133, + 0.00021039928819821782, + 0.00020630334330402208, + 0.00020430287591036262 + ], + [ + 0.00021323602975433867, + 0.0002152364880597952, + 0.00021922256162742318, + 0.00022527988808611636, + 0.0002333470001432358, + 0.00024338480723510133, + 0.00025523307763316563, + 0.00026884897295834787, + 0.00028395498611158984, + 0.00030051377691391057, + 0.0003183373872272586, + 0.0003370550528015073, + 0.0003566089439671894, + 0.00037670305554120644, + 0.00039696849590879334, + 0.000416952717464982, + 0.0004360782274547884, + 0.0004540172523054108, + 0.00047040083338461343, + 0.00048488093183490967, + 0.0004970010714768364, + 0.0005063980269194628, + 0.0005127682222871245, + 0.0005159570208880069, + 0.0005159514262391259, + 0.0005126991928490408, + 0.0005063214426764034, + 0.0004969599360109973, + 0.0004849032889502342, + 0.0004704101369545609, + 0.00045399849057827917, + 0.0004360408836319389, + 0.00041690050909314806, + 0.00039697590063941216, + 0.00037672719904514017, + 0.0003566201304643801, + 0.0003370625058956229, + 0.0003183448461129843, + 0.00030051939899845495, + 0.0002839568471721107, + 0.00026881357614395163, + 0.00025520882470370164, + 0.00024338667305684198, + 0.0002333842565883853, + 0.00022533573732183053, + 0.0002192709904904265, + 0.00021526070770308097, + 0.00021321742074132725 + ], + [ + 0.00022163651785415796, + 0.00022360718806361404, + 0.00022753925912763487, + 0.00023341027106036423, + 0.00024122031641458098, + 0.00025085397191937554, + 0.0002622030422582534, + 0.0002751726007155337, + 0.00028955586447259663, + 0.0003053641103287398, + 0.0003221632310269, + 0.00033963478483363385, + 0.0003579352084354983, + 0.0003766379170078054, + 0.0003954113876114074, + 0.00041381601216249455, + 0.0004314179544158696, + 0.0004479040612139437, + 0.0004628741028447531, + 0.0004759981114153273, + 0.00048696534813457055, + 0.0004954253454018784, + 0.0005012348649442039, + 0.0005041814730544599, + 0.0005041591025835726, + 0.0005012647157534206, + 0.000495488675207667, + 0.00048698022024277717, + 0.00047601681231180496, + 0.00046287584219659254, + 0.00044791152847004415, + 0.00043140119464530696, + 0.00041381043733586514, + 0.00039537972781808305, + 0.0003766248763909459, + 0.00035792775518806233, + 0.0003396087343642677, + 0.0003220235895685755, + 0.00030519275027249536, + 0.0002895391076642189, + 0.00027513908229014435, + 0.000262216079326317, + 0.000250848351735892, + 0.00024121848926206683, + 0.00023343826078239975, + 0.00022752252707711787, + 0.00022359415993832325, + 0.00022161976846770106 + ], + [ + 0.0002286828732446129, + 0.00023060883057719425, + 0.00023447009194837415, + 0.00024019582264606836, + 0.0002477563048920645, + 0.0002569876136157469, + 0.00026795481424678885, + 0.0002803078476014239, + 0.0002939944817729186, + 0.00030899995922853825, + 0.0003248733402358138, + 0.00034140431715882526, + 0.0003585926613975896, + 0.000376116391928189, + 0.00039368285835261253, + 0.0004107874153630589, + 0.0004271711646484964, + 0.0004423926939647901, + 0.0004561295789846109, + 0.00046820680199745064, + 0.00047824077846096545, + 0.00048598752545777664, + 0.0004912643986237638, + 0.000493955845587761, + 0.0004939297097214452, + 0.0004912364361175887, + 0.00048597260078635045, + 0.0004782333350192727, + 0.00046819197934588647, + 0.0004561704704605709, + 0.00044239265276380373, + 0.00042713765138992514, + 0.00041079304996862533, + 0.0003936363369768443, + 0.0003761163849224771, + 0.00035860943254882946, + 0.00034142852074066365, + 0.00032487896871675445, + 0.000309003697183276, + 0.00029402995255797956, + 0.0002803134099575723, + 0.0002679548132485784, + 0.0002570527818596866, + 0.0002477693623449265, + 0.0002402051837563509, + 0.00023447385655056275, + 0.0002306386466884247, + 0.00022870522416767414 + ], + [ + 0.00023517788580728206, + 0.00023706287722896697, + 0.0002408254064120586, + 0.0002463872660128896, + 0.0002537073954282705, + 0.00026266669033469544, + 0.0002731440969864778, + 0.00028502957908315026, + 0.0002981686434903637, + 0.0003125053906132143, + 0.00032756672095788145, + 0.0003431812657465493, + 0.00035936752834928753, + 0.0003758686650850193, + 0.0003923082679650598, + 0.0004083455694915492, + 0.0004236396907921995, + 0.00043779392460183874, + 0.00045052872677936115, + 0.00046163369130598016, + 0.0004708871854618105, + 0.00047810670564128586, + 0.0004829514441024528, + 0.00048542877443475286, + 0.0004853840800626669, + 0.0004829030369940137, + 0.0004780602188386929, + 0.00047088900863485016, + 0.00046162252232727726, + 0.000450528669715513, + 0.0004377901079842716, + 0.00042364703404905923, + 0.0004082934991166754, + 0.0003923269762532423, + 0.0003758799095661239, + 0.00035939559856071367, + 0.0003431738496817774, + 0.0003275387953056575, + 0.0003124588937275055, + 0.00029809229888044407, + 0.00028501843824431936, + 0.0002731627163299916, + 0.00026269100896077327, + 0.0002537018968011464, + 0.000246370484289598, + 0.00024084029233876412, + 0.00023706100442552556, + 0.0002351406801576049 + ], + [ + 0.00024029073754318, + 0.000242145991388606, + 0.00024586751733399155, + 0.0002512691921702457, + 0.0002583844548607401, + 0.0002670848859470051, + 0.00027718041774905516, + 0.0002886318949878048, + 0.0003012457032300707, + 0.00031491005982352364, + 0.00032930455398466613, + 0.00034419078372989866, + 0.000359609680222311, + 0.0003753005423685903, + 0.00039091880526095094, + 0.00040599497786780964, + 0.00042036522418162977, + 0.0004337147929526931, + 0.0004456207619440566, + 0.0004560644943680706, + 0.00046469590566440284, + 0.0004714070602675556, + 0.0004759685946185609, + 0.0004782838553074336, + 0.0004782931747581471, + 0.00047595915108232105, + 0.0004714013906789922, + 0.00046469406466036276, + 0.00045607381692925827, + 0.00044569331622373664, + 0.00043377241291421835, + 0.0004204620174498275, + 0.0004060359590663733, + 0.00039092811775567465, + 0.00037534904383987577, + 0.00035968615384923724, + 0.00034424858793342695, + 0.000329382802275618, + 0.00031496780829398115, + 0.00030128301226417623, + 0.00028862637425097423, + 0.00027721770579037434, + 0.00026712590696092504, + 0.00025842179347004547, + 0.00025129157482443057, + 0.00024582469156736784, + 0.00024214592914613157, + 0.0002402702837850326 + ], + [ + 0.0002449361610764449, + 0.00024675037423781924, + 0.00025030802911688314, + 0.00025556628646945584, + 0.00026251204421966814, + 0.0002708958213900455, + 0.00028073617268923733, + 0.00029182258199548936, + 0.00030408807011591106, + 0.00031729233818100533, + 0.0003311336521588729, + 0.00034544061811662323, + 0.00036014052798923377, + 0.00037506026610080613, + 0.00038997063418530145, + 0.00040435398301693156, + 0.00041797922314634647, + 0.00043063962465840873, + 0.0004419495429036223, + 0.0004517507133869674, + 0.0004598531605832785, + 0.00046607626911980603, + 0.0004704236407242574, + 0.0004725507689769626, + 0.00047257687063140133, + 0.0004704105943342724, + 0.0004660836519786766, + 0.00045978046010623644, + 0.00045167248739739883, + 0.00044190291013178215, + 0.00043064137580635224, + 0.000417979157748444, + 0.00040432977843267193, + 0.00038998188995405085, + 0.00037510508695214495, + 0.0003601275424673506, + 0.0003454461873927959, + 0.0003311467505072827, + 0.00031722345516118695, + 0.00030398752349164253, + 0.00029177980690319046, + 0.0002807250104072102, + 0.00027089584661920226, + 0.00026252514973500087, + 0.0002556110176018966, + 0.0002502950171651837, + 0.00024674481709130994, + 0.0002449250143943947 + ], + [ + 0.00024810263343904974, + 0.00024988890153046235, + 0.00025342790211064625, + 0.00025867127350743163, + 0.0002654437989294134, + 0.00027363574498556726, + 0.0002831687633097817, + 0.00029397020002267063, + 0.00030590414900637274, + 0.00031866511084113264, + 0.00033210037193621153, + 0.0003459789580658885, + 0.0003602299268924747, + 0.0003746523420353483, + 0.00038895932200300366, + 0.0004028434378329483, + 0.0004160010949963764, + 0.00042810267767686046, + 0.00043892458451380876, + 0.00044829370838231635, + 0.00045598822366598347, + 0.0004619635864735028, + 0.000466020480086981, + 0.0004681159920342311, + 0.0004681177875392029, + 0.0004660166749409333, + 0.00046192260142810716, + 0.00045593229509818963, + 0.00044820803009752594, + 0.00043883519231968415, + 0.0004281026904353079, + 0.00041600116783342006, + 0.0004028471736269903, + 0.00038895373334452013, + 0.00037458914747666715, + 0.0003601852274413538, + 0.00034594915444852224, + 0.00033209855939588526, + 0.0003187024100534709, + 0.00030591158135500436, + 0.00029399811944692144, + 0.0002832358185670036, + 0.0002736767231989246, + 0.0002654494407607697, + 0.00025864891597110256, + 0.0002534130292630302, + 0.0002498199840829051, + 0.0002480262506164614 + ], + [ + 0.0002507791997477709, + 0.00025251144260577296, + 0.0002559703858973313, + 0.00026114849671529254, + 0.0002678279527054828, + 0.00027585409119009304, + 0.00028520456583307343, + 0.00029574154361305434, + 0.000307483683927113, + 0.0003200080525882141, + 0.0003331490431906878, + 0.00034670167357551095, + 0.00036055031120949964, + 0.00037456492959924434, + 0.00038847129607574366, + 0.0004018879139335431, + 0.0004146376162657095, + 0.00042641519357288426, + 0.0004369279588396704, + 0.00044601207996834116, + 0.0004534029873352097, + 0.0004591418650835043, + 0.00046307010380767404, + 0.000465070583643438, + 0.0004650390113762282, + 0.00046303651583960264, + 0.0004591100727086239, + 0.00045337878731689017, + 0.00044586672559973514, + 0.00043682173196470483, + 0.00042635560959840697, + 0.0004145855533533613, + 0.0004018804618582123, + 0.00038839875204865813, + 0.00037454630872750495, + 0.0003605391877214877, + 0.0003467016645345584, + 0.00033310434342217755, + 0.00031997265934730263, + 0.00030739608175123467, + 0.0002957284825100318, + 0.00028518779936683944, + 0.00027576282309560554, + 0.0002677180491332674, + 0.00026112432463813484, + 0.00025592565856107015, + 0.0002524518614511014, + 0.0002507456338225935 + ], + [ + 0.00025190419754796557, + 0.0002537016548520945, + 0.000257246271018718, + 0.0002623629279430067, + 0.00026897721057121004, + 0.0002768934495096708, + 0.00028620855152528137, + 0.0002966486039129445, + 0.00030820630777819366, + 0.0003204940878001287, + 0.00033343019645477547, + 0.00034682075110819454, + 0.0003605055943019519, + 0.0003743395711340925, + 0.00038805601523461843, + 0.0004012061875219422, + 0.00041368412895619196, + 0.0004253070936169859, + 0.00043553480138682854, + 0.0004444010059087344, + 0.0004517453147798565, + 0.00045743578498181605, + 0.00046129136540921684, + 0.00046325457719915465, + 0.00046325830421383633, + 0.00046126900164648085, + 0.0004574356725125067, + 0.00045180861608081456, + 0.000444481093845827, + 0.00043555521665358614, + 0.0004252436068484693, + 0.0004136933396959282, + 0.00040121371731594594, + 0.00038798155857505836, + 0.0003741848914139898, + 0.0003604181177992023, + 0.00034678541576023755, + 0.00033339674212499136, + 0.00032048306475046485, + 0.0003082529077831397, + 0.0002967063519941822, + 0.00028623271846912006, + 0.00027691208112391117, + 0.00026892504747604257, + 0.0002623312908219055, + 0.00025718107985666337, + 0.0002537500921474132, + 0.00025198802458135776 + ], + [ + 0.00025282058153397815, + 0.00025437588236418827, + 0.0002577267798408462, + 0.00026300365055191343, + 0.00026954899007399484, + 0.0002775192281418981, + 0.0002865828776548604, + 0.00029704161486285654, + 0.0003085322666595419, + 0.0003209374438528974, + 0.0003339238415073776, + 0.00034715608408965326, + 0.0003608242013327965, + 0.0003743134662099759, + 0.00038791634214653883, + 0.0004010014400296503, + 0.0004133954228398337, + 0.0004248618351532354, + 0.00043513067958212917, + 0.00044407322506524743, + 0.00045132639545908545, + 0.0004569180190621833, + 0.0004608799021048791, + 0.00046274808616014865, + 0.00046274994794326185, + 0.0004606041345183865, + 0.00045679137451046237, + 0.0004513282236370994, + 0.00044406390770393797, + 0.00043525738809867677, + 0.0004251189466548123, + 0.000413395469040373, + 0.0004010032884832655, + 0.00038779156731316846, + 0.0003743116098396033, + 0.0003605895013056324, + 0.00034700146062478527, + 0.00033378973727594963, + 0.00032081455828883465, + 0.0003085303413740026, + 0.0002970360341198607, + 0.0002865903271683525, + 0.0002773944458999051, + 0.0002694204630314124, + 0.0002628583573656943, + 0.00025773975546777487, + 0.0002542510799188891, + 0.0002525877428643851 + ] + ], + "history": [ + { + "step": 0, + "mass": 1584.0000070855021 + }, + { + "step": 519, + "mass": 1583.9996469337493, + "u_change": 0.06561534459555829, + "v_change": 0.07563101850446771, + "mass_change": 2.2736852980967897e-07 + }, + { + "step": 1038, + "mass": 1583.9992240704596, + "u_change": 0.004091811464502968, + "v_change": 0.007100371573204822, + "mass_change": 2.6695914635247474e-07 + }, + { + "step": 1557, + "mass": 1583.9999501202255, + "u_change": 0.0012989347029755969, + "v_change": 0.001350033141922646, + "mass_change": 4.5836474917723265e-07 + }, + { + "step": 2076, + "mass": 1584.0001382622868, + "u_change": 0.00018204402469040087, + "v_change": 0.0005895349237683154, + "mass_change": 1.1877655327773294e-07 + }, + { + "step": 2595, + "mass": 1583.9996214956045, + "u_change": 5.809480866617957e-05, + "v_change": 0.00021318561182048304, + "mass_change": 3.2624159088106285e-07 + }, + { + "step": 3114, + "mass": 1583.9991597849876, + "u_change": 4.699814090961182e-05, + "v_change": 0.00011552034158229156, + "mass_change": 2.914839740409786e-07 + }, + { + "step": 3633, + "mass": 1583.999141126871, + "u_change": 3.5694782975010654e-05, + "v_change": 0.00013715988535341307, + "mass_change": 1.1779113873980783e-08 + }, + { + "step": 4152, + "mass": 1583.9995831716806, + "u_change": 3.9893919452264744e-05, + "v_change": 5.6042645704645876e-05, + "mass_change": 2.7906869159299124e-07 + }, + { + "step": 4671, + "mass": 1583.999707499519, + "u_change": 3.468311928838646e-05, + "v_change": 5.3087535636477326e-05, + "mass_change": 7.848979663177292e-08 + }, + { + "step": 5190, + "mass": 1583.999777322635, + "u_change": 3.704438168064547e-05, + "v_change": 6.0905465821478274e-05, + "mass_change": 4.40802498432708e-08 + }, + { + "step": 5709, + "mass": 1583.99970440194, + "u_change": 3.52997160511705e-05, + "v_change": 8.057747693768765e-05, + "mass_change": 4.6035792058747495e-08 + }, + { + "step": 6228, + "mass": 1583.9996813237667, + "u_change": 3.442221034468917e-05, + "v_change": 7.679125183621527e-05, + "mass_change": 1.4569553848320046e-08 + }, + { + "step": 6747, + "mass": 1583.9996515400708, + "u_change": 2.743911597628324e-05, + "v_change": 7.736367234381354e-05, + "mass_change": 1.88028382594542e-08 + }, + { + "step": 7266, + "mass": 1583.9996322132647, + "u_change": 2.3188639631782733e-05, + "v_change": 8.001923785170945e-05, + "mass_change": 1.2201266402757772e-08 + }, + { + "step": 7785, + "mass": 1583.9996611569077, + "u_change": 2.2556072738397003e-05, + "v_change": 8.415169708447593e-05, + "mass_change": 1.8272501795726005e-08 + }, + { + "step": 8304, + "mass": 1583.9996664077044, + "u_change": 2.4194888184868927e-05, + "v_change": 7.843855259017326e-05, + "mass_change": 3.314896876385328e-09 + }, + { + "step": 8823, + "mass": 1583.9996424242854, + "u_change": 2.146550311385168e-05, + "v_change": 7.416634794061212e-05, + "mass_change": 1.5141047243823157e-08 + }, + { + "step": 9342, + "mass": 1583.9996885638684, + "u_change": 2.426288525348324e-05, + "v_change": 7.294500906009547e-05, + "mass_change": 2.9128524485612257e-08 + }, + { + "step": 9861, + "mass": 1583.9996775966138, + "u_change": 2.5621117244333702e-05, + "v_change": 7.032090932625959e-05, + "mass_change": 6.923771836877194e-09 + }, + { + "step": 10380, + "mass": 1583.999669695273, + "u_change": 2.3454518542673745e-05, + "v_change": 7.5315897132759e-05, + "mass_change": 4.988220131119744e-09 + }, + { + "step": 10899, + "mass": 1583.9996569436044, + "u_change": 2.3944398633507273e-05, + "v_change": 7.837553446563217e-05, + "mass_change": 8.050295855173449e-09 + }, + { + "step": 11418, + "mass": 1583.9996462520212, + "u_change": 2.7900628755626344e-05, + "v_change": 8.237847836807757e-05, + "mass_change": 6.749736811086123e-09 + }, + { + "step": 11937, + "mass": 1583.9996848925948, + "u_change": 2.5210542120365384e-05, + "v_change": 8.584022062656909e-05, + "mass_change": 2.439430141916056e-08 + }, + { + "step": 12456, + "mass": 1583.999675616622, + "u_change": 2.4848734051457032e-05, + "v_change": 8.650365803713056e-05, + "mass_change": 5.856043435402246e-09 + }, + { + "step": 12975, + "mass": 1583.9996992852539, + "u_change": 2.6543553603593834e-05, + "v_change": 8.557191675485277e-05, + "mass_change": 1.4942318058967136e-08 + }, + { + "step": 13494, + "mass": 1583.9996917117387, + "u_change": 2.9725915435600002e-05, + "v_change": 9.138269339860209e-05, + "mass_change": 4.781259559908741e-09 + }, + { + "step": 14013, + "mass": 1583.9996599443257, + "u_change": 2.9288543781269557e-05, + "v_change": 8.891653993969281e-05, + "mass_change": 2.0055184897748055e-08 + }, + { + "step": 14532, + "mass": 1583.9996460303664, + "u_change": 2.6336958196062334e-05, + "v_change": 7.969614869216529e-05, + "mass_change": 8.78406515310337e-09 + }, + { + "step": 15051, + "mass": 1583.9996858648956, + "u_change": 2.7999722288679354e-05, + "v_change": 8.199171977347657e-05, + "mass_change": 2.5148061226809725e-08 + }, + { + "step": 15570, + "mass": 1583.9996842443943, + "u_change": 2.7387563137713212e-05, + "v_change": 8.422964594581822e-05, + "mass_change": 1.0230437326907539e-09 + }, + { + "step": 16089, + "mass": 1583.999651381746, + "u_change": 3.0874858117848734e-05, + "v_change": 8.007793273090845e-05, + "mass_change": 2.0746621351566632e-08 + }, + { + "step": 16608, + "mass": 1583.9997054953128, + "u_change": 3.1560172825332525e-05, + "v_change": 7.197914290293896e-05, + "mass_change": 3.416260519785262e-08 + }, + { + "step": 17127, + "mass": 1583.9996374417096, + "u_change": 2.8870819256496264e-05, + "v_change": 6.798605367415617e-05, + "mass_change": 4.2963133123665955e-08 + }, + { + "step": 17646, + "mass": 1583.9996498413384, + "u_change": 2.438111877467592e-05, + "v_change": 7.075239729723609e-05, + "mass_change": 7.828048423588906e-09 + }, + { + "step": 18165, + "mass": 1583.9996337573975, + "u_change": 2.3756139830342523e-05, + "v_change": 7.216931240419045e-05, + "mass_change": 1.0154003025039838e-08 + }, + { + "step": 18684, + "mass": 1583.9996783100069, + "u_change": 2.6974367376062354e-05, + "v_change": 7.484819030459771e-05, + "mass_change": 2.8126647174977172e-08 + }, + { + "step": 19203, + "mass": 1583.9997132550925, + "u_change": 2.6380600568645015e-05, + "v_change": 7.329552453508398e-05, + "mass_change": 2.206129134369107e-08 + }, + { + "step": 19722, + "mass": 1583.9996701776981, + "u_change": 2.6856874693021987e-05, + "v_change": 6.994044995216545e-05, + "mass_change": 2.719532460452766e-08 + }, + { + "step": 20241, + "mass": 1583.9996661506593, + "u_change": 3.0246782589165754e-05, + "v_change": 6.474203288038336e-05, + "mass_change": 2.5423224713533444e-09 + }, + { + "step": 20760, + "mass": 1583.999700639397, + "u_change": 2.9348816211428822e-05, + "v_change": 6.0219723154669055e-05, + "mass_change": 2.1773192821266666e-08 + } + ], + "checkpoint_bitwise_equal": null, + "population_budget": { + "steps": [ + { + "step": 20761, + "mass": 1583.999700639397, + "delta_mass": 1.043081283569336e-07, + "bottom_net_in": 0.01706962287425995, + "top_net_in": -0.01708163134753704, + "collision_roundoff": 1.2112781405448914e-05, + "physical_residual": 1.2112781405448914e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6753552611917257, + "outgoing": 2.6582929138094187 + }, + "flanks": { + "incoming": 5.333183525130153, + "outgoing": 5.3331762496382 + }, + "top": { + "incoming": 7.991463312879205, + "outgoing": 8.008544944226742 + } + } + }, + { + "step": 20762, + "mass": 1583.999700743705, + "delta_mass": -5.520880222320557e-06, + "bottom_net_in": 0.017069434747099876, + "top_net_in": -0.01708293706178665, + "collision_roundoff": 7.981434464454651e-06, + "physical_residual": 7.981434464454651e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6753551438450813, + "outgoing": 2.6582928895950317 + }, + "flanks": { + "incoming": 5.333183387294412, + "outgoing": 5.333176206797361 + }, + "top": { + "incoming": 7.991460207849741, + "outgoing": 8.008543144911528 + } + } + }, + { + "step": 20763, + "mass": 1583.9996952228248, + "delta_mass": 6.489455699920654e-06, + "bottom_net_in": 0.017069606110453606, + "top_net_in": -0.017081357538700104, + "collision_roundoff": 1.8240883946418762e-05, + "physical_residual": 1.8240883946418762e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.675355227664113, + "outgoing": 2.6582928989082575 + }, + "flanks": { + "incoming": 5.33318354934454, + "outgoing": 5.333176271989942 + }, + "top": { + "incoming": 7.991464305669069, + "outgoing": 8.00854566320777 + } + } + }, + { + "step": 20764, + "mass": 1583.9997017122805, + "delta_mass": 5.966052412986755e-06, + "bottom_net_in": 0.017069317400455475, + "top_net_in": -0.01708134263753891, + "collision_roundoff": 1.7991289496421814e-05, + "physical_residual": 1.7991289496421814e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6753552984446287, + "outgoing": 2.6582928970456123 + }, + "flanks": { + "incoming": 5.33318330347538, + "outgoing": 5.333176387473941 + }, + "top": { + "incoming": 7.9914607889950275, + "outgoing": 8.008542131632566 + } + } + }, + { + "step": 20765, + "mass": 1583.999707678333, + "delta_mass": -3.166496753692627e-07, + "bottom_net_in": 0.017069315537810326, + "top_net_in": -0.01708090491592884, + "collision_roundoff": 1.1272728443145752e-05, + "physical_residual": 1.1272728443145752e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.675355276092887, + "outgoing": 2.658292904496193 + }, + "flanks": { + "incoming": 5.333183413371444, + "outgoing": 5.333176469430327 + }, + "top": { + "incoming": 7.991464568302035, + "outgoing": 8.008545473217964 + } + } + }, + { + "step": 20766, + "mass": 1583.9997073616832, + "delta_mass": 1.9744038581848145e-07, + "bottom_net_in": 0.017068814486265182, + "top_net_in": -0.017081236466765404, + "collision_roundoff": 1.2619420886039734e-05, + "physical_residual": 1.2619420886039734e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6753550991415977, + "outgoing": 2.6582929771393538 + }, + "flanks": { + "incoming": 5.33318311162293, + "outgoing": 5.333176419138908 + }, + "top": { + "incoming": 7.991460846737027, + "outgoing": 8.008542083203793 + } + } + }, + { + "step": 20767, + "mass": 1583.9997075591236, + "delta_mass": 2.766028046607971e-06, + "bottom_net_in": 0.01706909015774727, + "top_net_in": -0.017080916091799736, + "collision_roundoff": 1.4591962099075317e-05, + "physical_residual": 1.4591962099075317e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6753550972789526, + "outgoing": 2.658292965963483 + }, + "flanks": { + "incoming": 5.333183249458671, + "outgoing": 5.333176290616393 + }, + "top": { + "incoming": 7.991464538499713, + "outgoing": 8.008545454591513 + } + } + }, + { + "step": 20768, + "mass": 1583.9997103251517, + "delta_mass": -9.313225746154785e-07, + "bottom_net_in": 0.017069203779101372, + "top_net_in": -0.017081918194890022, + "collision_roundoff": 1.1783093214035034e-05, + "physical_residual": 1.1783093214035034e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.675355037674308, + "outgoing": 2.6582929231226444 + }, + "flanks": { + "incoming": 5.333183197304606, + "outgoing": 5.3331761080771685 + }, + "top": { + "incoming": 7.991460248827934, + "outgoing": 8.008542167022824 + } + } + }, + { + "step": 20769, + "mass": 1583.999709393829, + "delta_mass": 3.5800039768218994e-06, + "bottom_net_in": 0.017069650813937187, + "top_net_in": -0.017080914229154587, + "collision_roundoff": 1.4843419194221497e-05, + "physical_residual": 1.4843419194221497e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6753550972789526, + "outgoing": 2.658292818814516 + }, + "flanks": { + "incoming": 5.333183417096734, + "outgoing": 5.333176044747233 + }, + "top": { + "incoming": 7.991464933380485, + "outgoing": 8.00854584760964 + } + } + }, + { + "step": 20770, + "mass": 1583.999712973833, + "delta_mass": -4.868954420089722e-06, + "bottom_net_in": 0.01706944964826107, + "top_net_in": -0.017081450670957565, + "collision_roundoff": 7.1320682764053345e-06, + "physical_residual": 7.1320682764053345e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6753551568835974, + "outgoing": 2.6582928095012903 + }, + "flanks": { + "incoming": 5.333183249458671, + "outgoing": 5.333176147192717 + }, + "top": { + "incoming": 7.991460371762514, + "outgoing": 8.008541822433472 + } + } + }, + { + "step": 20771, + "mass": 1583.9997081048787, + "delta_mass": -4.284083843231201e-08, + "bottom_net_in": 0.017069190740585327, + "top_net_in": -0.01708231121301651, + "collision_roundoff": 1.307763159275055e-05, + "physical_residual": 1.307763159275055e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6753550227731466, + "outgoing": 2.658292803913355 + }, + "flanks": { + "incoming": 5.333183320239186, + "outgoing": 5.333176348358393 + }, + "top": { + "incoming": 7.991463586688042, + "outgoing": 8.008545897901058 + } + } + }, + { + "step": 20772, + "mass": 1583.9997080620378, + "delta_mass": -2.9746443033218384e-06, + "bottom_net_in": 0.017068829387426376, + "top_net_in": -0.017081815749406815, + "collision_roundoff": 1.0011717677116394e-05, + "physical_residual": 1.0011717677116394e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6753549091517925, + "outgoing": 2.658292753621936 + }, + "flanks": { + "incoming": 5.333183083683252, + "outgoing": 5.333176409825683 + }, + "top": { + "incoming": 7.991460802033544, + "outgoing": 8.00854261778295 + } + } + }, + { + "step": 20773, + "mass": 1583.9997050873935, + "delta_mass": -1.7937272787094116e-06, + "bottom_net_in": 0.017069268971681595, + "top_net_in": -0.01708190143108368, + "collision_roundoff": 1.0838732123374939e-05, + "physical_residual": 1.0838732123374939e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.675354978069663, + "outgoing": 2.65829267911613 + }, + "flanks": { + "incoming": 5.33318330347538, + "outgoing": 5.3331763334572315 + }, + "top": { + "incoming": 7.991463778540492, + "outgoing": 8.008545679971576 + } + } + }, + { + "step": 20774, + "mass": 1583.9997032936662, + "delta_mass": -4.533678293228149e-06, + "bottom_net_in": 0.017069442197680473, + "top_net_in": -0.017082935199141502, + "collision_roundoff": 8.959323167800903e-06, + "physical_residual": 8.959323167800903e-06, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6753550451248884, + "outgoing": 2.658292654901743 + }, + "flanks": { + "incoming": 5.333183256909251, + "outgoing": 5.333176204934716 + }, + "top": { + "incoming": 7.9914597272872925, + "outgoing": 8.008542662486434 + } + } + }, + { + "step": 20775, + "mass": 1583.999698759988, + "delta_mass": -2.0936131477355957e-06, + "bottom_net_in": 0.017069607973098755, + "top_net_in": -0.017081813886761665, + "collision_roundoff": 1.0112300515174866e-05, + "physical_residual": 1.0112300515174866e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.675355026498437, + "outgoing": 2.6582926008850336 + }, + "flanks": { + "incoming": 5.333183420822024, + "outgoing": 5.333176238462329 + }, + "top": { + "incoming": 7.991464434191585, + "outgoing": 8.008546248078346 + } + } + }, + { + "step": 20776, + "mass": 1583.9996966663748, + "delta_mass": -1.1511147022247314e-06, + "bottom_net_in": 0.0170693751424551, + "top_net_in": -0.017081573605537415, + "collision_roundoff": 1.1047348380088806e-05, + "physical_residual": 1.1047348380088806e-05, + "budget_residual": 0.0, + "exchange": { + "slot": { + "incoming": 2.6753550712019205, + "outgoing": 2.658292591571808 + }, + "flanks": { + "incoming": 5.333183182403445, + "outgoing": 5.333176286891103 + }, + "top": { + "incoming": 7.991460628807545, + "outgoing": 8.008542202413082 + } + } + } + ], + "instrumented_matches_plain": true, + "audit_source_sha256": "d6532c48ea0bf972bce6ec3809989e9f2ec52eb1440d58f8945eb59d67dcf1b5", + "max_relative_residual": 0.0, + "max_physical_relative_residual": 1.1515711777869235e-08 + } + } + ], + "status": { + "positive": "failed", + "negative": "not_tested", + "zero": "not_tested", + "checkpoint": "not_tested" + } +} diff --git a/research/refinement_example_20261013/baseline.json b/research/refinement_example_20261013/baseline.json new file mode 100644 index 0000000..5914781 --- /dev/null +++ b/research/refinement_example_20261013/baseline.json @@ -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" + } +} diff --git a/research/refinement_example_20261013/before.json b/research/refinement_example_20261013/before.json new file mode 100644 index 0000000..7ab0962 --- /dev/null +++ b/research/refinement_example_20261013/before.json @@ -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" +} diff --git a/research/refinement_example_20261013/incremental.patch b/research/refinement_example_20261013/incremental.patch new file mode 100644 index 0000000..7ad8719 --- /dev/null +++ b/research/refinement_example_20261013/incremental.patch @@ -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() diff --git a/research/refinement_example_20261013/manifest.json b/research/refinement_example_20261013/manifest.json new file mode 100644 index 0000000..bf1eee8 --- /dev/null +++ b/research/refinement_example_20261013/manifest.json @@ -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" + } + } +} diff --git a/research/refinement_example_20261013/notes.txt b/research/refinement_example_20261013/notes.txt new file mode 100644 index 0000000..7ff019a --- /dev/null +++ b/research/refinement_example_20261013/notes.txt @@ -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. diff --git a/research/refinement_example_20261013/results.json b/research/refinement_example_20261013/results.json new file mode 100644 index 0000000..94697b0 --- /dev/null +++ b/research/refinement_example_20261013/results.json @@ -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 +} diff --git a/research/refinement_example_20261013/stdout.txt b/research/refinement_example_20261013/stdout.txt new file mode 100644 index 0000000..501446f --- /dev/null +++ b/research/refinement_example_20261013/stdout.txt @@ -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 diff --git a/research/refinement_followup_20261013/README.txt b/research/refinement_followup_20261013/README.txt new file mode 100644 index 0000000..af65e88 --- /dev/null +++ b/research/refinement_followup_20261013/README.txt @@ -0,0 +1,72 @@ +Joint-review followup — 2026-10-13 + +Completed only the requested gaps. No transport kernel, pinned reference, +geometric module, algorithm, tau pair or tolerance changes. No audit rerun, +32-step/Jet/dynamic-AMR run, dependency/environment change or Git push/commit. + +Code: download device-read exceptions mark the backend failed; close activation +failure preserves references in failed state and permits a second close attempt. +Explicit checks (also effective under python -O) enforce HALO=4, each validated +omega=1/tau, and d_params size=struct.calcsize('=ffffI') before upload. +The existing GPU test's RSS assertion is now 256MiB, not 512MiB. + +Executed checks (real stdout retained): + cpu_stdout.txt: three new CPU fault/contract tests plus the original mock + cleanup test pass. Both coarse and fine read failure are injected; close + context-manager entry failure is followed by a successful cleanup retry. + CPU parent/children use 256MiB RLIMIT_AS, 2MiB RLIMIT_FSIZE, core=0. + Peak child RSS 46,380KiB. First CPU attempt exposed an incorrectly configured + test Mock, corrected before rerunning; that failed stdout is also retained. + gpu_seed1_stdout.txt: ordinary non-instrumented build, identical seed1 initial + state, eight coarse steps, FP32 G versus pinned FP64 C(F_ref): + maximum population error 1.67235548e-7 (limit 3e-6) + maximum leaf mass/momentum drift 2.23806128e-5 (limit 2e-4) + maximum leaf reference discrepancy 2.20813948e-5 (limit 2e-4). + These match the preceding audit-build observations. No audit was rerun. + gpu_rectangle_stdout.txt: ordinary build, ONE coarse step on 17x13 coarse, + bounds=(2,2,6,5), fine=16x14 including halo. Offcenter/non-square, x/y margin2, + distinct layer dimensions. Asymmetric nonequilibrium G0, compared with a + small independent scalar G-to-G oracle using closed-midpoint geometry and + no production exchange tables. Maximum population error 1.14050047e-7; + full raw fine halo NaN/valid mask and public leaf mask match. Device arrays + 35,288 bytes. This adds bounded rectangle coverage, not a general accuracy + or arbitrary-grid certification. + +Resource handling, including unsuccessful starts: + Every actual job has its own immediately preceding gpu_*_before.json with + physical UUID, utilization, memory and compute-apps. Only physical GPU0 used: + GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c. Successful starts: 0%, 5MiB, no apps. + Initial launcher stopped before starting on a units-parsing mistake; snapshot + retained. After correction, original compile-inside-context test was killed by + our monitor at 268,984,320 bytes summed process-group RSS (256.52MiB), while + compiling the second module: no flow steps had run. gpu_results.json records + the -9 exit and contributing Python/nvcc/cicc processes. Its residual build + was identified by exact source/config metadata plus in-job timestamp and + removed; cleanup.json records that check. + No budget increase: test-only normal_backend now compiles normal refinement.cu + before creating a context, then matches exact generated source digest and + architecture when loading. Each case runs in a fresh process. Ordinary compiler + flags, kernel and production loading/transport behavior remain unchanged. + Successful seed1/rectangle sampled process-group peaks: 194,113,536 and + 194,244,608 bytes (~185MiB), including any live compiler children. Device arrays + remain below 128KiB. One rectangle launch was refused at utilization 6% despite + no listed apps; a new idle snapshot preceded the later successful launch. + RSS polling at 20ms is a monitoring threshold, NOT an OS hard memory limit; + summing RSS conservatively double-counts shared pages. CUDA virtual address + mappings are not limited with RLIMIT_AS. Output/core use OS limits, combined + raw stdout is also watched against 2MiB, and elapsed time against 120s. + Only the test's own new process group is terminated on a threshold violation. + The runner itself is outside that group. All new per-job temporary directories + were cleaned. run_gpu.py records the exact reproducible harness and skips + already successful cases when resuming these evidence files. + +Existing pycuda_3_10 Python and explicit /home/frank14f/CelerisLab/src used; +package/kernel/source paths asserted. Full commands, process-only settings, +snapshots, times and RSS are in the JSON records; no DynamisLab access. + +incremental.patch is relative to THIS round's frozen start: two small existing +file changes and one new followup test. Baseline verification is limited to the +15 relevant source/reference/prior-evidence files, preserving unrelated dirty +work; the 13 outside the intended two edits remain byte-identical. Prior-round +validation files are untouched. Independent read-only agent review found no +remaining blocker. No long-time interface/stress accuracy claim is added. diff --git a/research/refinement_followup_20261013/baseline.json b/research/refinement_followup_20261013/baseline.json new file mode 100644 index 0000000..7c60ad8 --- /dev/null +++ b/research/refinement_followup_20261013/baseline.json @@ -0,0 +1,22 @@ +{ + "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-followup-baseline-4muj_3na", + "hashes": { + "src/CelerisLab/lbm/refinement_stepper.py": "51a0582f048ba76752b32aa5134b2caeaa39d659d2807ee6a70c3af202a9def3", + "src/CelerisLab/lbm/kernels/refinement.cu": "e8e769b7c6a61190675eafee99369ce9d8f4836f6ec74bed2d45f9077cbb3407", + "src/CelerisLab/lbm/refinement.py": "554735c5613129eb29f339c6aeeb4f3a3bbc5aba67558be51fbf7c2fb6ac442a", + "tests/validation/multigrid/test_refinement_gpu.py": "6c25bb0ce7a0dc3e9d11b56dd4a583524893b47b90c31ba9745829c2f39ad2ff", + "tests/validation/multigrid/cpu_reference.py": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "tests/unit/test_refinement.py": "90751142f920f1c5e988577a45afa94871a6617009cdc78323a87fc7795f4634", + "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" + } +} diff --git a/research/refinement_followup_20261013/cleanup.json b/research/refinement_followup_20261013/cleanup.json new file mode 100644 index 0000000..15cf342 --- /dev/null +++ b/research/refinement_followup_20261013/cleanup.json @@ -0,0 +1,42 @@ +{ + "removed": "/tmp/celeris-build-98r2eru2", + "matched_source_sha256": "4b3f3dcaac0b42fc1675eec3df8517a8a39591c67dc28be3d1870d0be07f33f7", + "matched_config": { + "collision": "SRT", + "compute_capability": "auto", + "data_type": "FP32", + "ddf_shifting": false, + "dim": 2, + "inlet_profile": "parabolic", + "inlet_regularized_neq_damp": 0.5, + "inlet_scheme": "zou_he_local", + "inlet_trt_neq_damp": 0.5, + "lattice_model": "D2Q9", + "les_closed_form": true, + "les_cs": 0.16, + "les_enabled": false, + "nq": 9, + "nx": 24, + "ny": 24, + "nz": 1, + "omega": 0.9090909090909091, + "omega_max": 1.99, + "omega_min": 0.01, + "outlet_backflow_clamp": true, + "outlet_blend_alpha": 0.7, + "outlet_mode": "neq_extrap", + "outlet_srt_neq_damp": 0.5, + "rho": 1.0, + "store_precision": "FP32", + "streaming": "double_buffer", + "threads_per_block": 256, + "top_wall_bc": "velocity", + "trt_magic_param": 0.1875, + "velocity": 0.03, + "viscosity": 0.2, + "wall_normal_velocity": 0.0, + "wall_slot_width": 0, + "y_wall_bc": "bounce_back" + }, + "reason": "Only residual build created during killed job: fine 24x24 module, identical source/config metadata and timestamp within that job." +} diff --git a/research/refinement_followup_20261013/cpu_results.json b/research/refinement_followup_20261013/cpu_results.json new file mode 100644 index 0000000..1166dff --- /dev/null +++ b/research/refinement_followup_20261013/cpu_results.json @@ -0,0 +1,42 @@ +{ + "cwd": "/home/frank14f/CelerisLab", + "environment": { + "OPENBLAS_NUM_THREADS": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONNOUSERSITE": "1", + "PYTHONPATH": "/home/frank14f/CelerisLab/src" + }, + "runs": [ + { + "command": [ + "/usr/bin/prlimit", + "--as=268435456", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "tests/validation/multigrid/test_refinement_followup.py", + "FaultGuardsCPU" + ], + "exit_code": 0, + "elapsed": 0.2821588449878618 + }, + { + "command": [ + "/usr/bin/prlimit", + "--as=268435456", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "tests/validation/multigrid/test_refinement_gpu.py", + "CoupledGPU.test_cleanup_attempts_every_allocation" + ], + "exit_code": 0, + "elapsed": 0.2626215670024976 + } + ], + "peak_child_rss_kib": 46380 +} diff --git a/research/refinement_followup_20261013/cpu_results_attempt1.json b/research/refinement_followup_20261013/cpu_results_attempt1.json new file mode 100644 index 0000000..d139d55 --- /dev/null +++ b/research/refinement_followup_20261013/cpu_results_attempt1.json @@ -0,0 +1,27 @@ +{ + "cwd": "/home/frank14f/CelerisLab", + "environment": { + "OPENBLAS_NUM_THREADS": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONNOUSERSITE": "1", + "PYTHONPATH": "/home/frank14f/CelerisLab/src" + }, + "runs": [ + { + "command": [ + "/usr/bin/prlimit", + "--as=268435456", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "tests/validation/multigrid/test_refinement_followup.py", + "FaultGuardsCPU" + ], + "exit_code": 1, + "elapsed": 0.284473450970836 + } + ], + "peak_child_rss_kib": 46444 +} diff --git a/research/refinement_followup_20261013/cpu_stdout.txt b/research/refinement_followup_20261013/cpu_stdout.txt new file mode 100644 index 0000000..d1b33ea --- /dev/null +++ b/research/refinement_followup_20261013/cpu_stdout.txt @@ -0,0 +1,14 @@ +test_activation_failure_retains_resources_for_retry (__main__.FaultGuardsCPU) ... ok +test_failed_download_blocks_read_and_step (__main__.FaultGuardsCPU) ... ok +test_kernel_contracts_reject_before_upload (__main__.FaultGuardsCPU) ... ok + +---------------------------------------------------------------------- +Ran 3 tests in 0.017s + +OK +test_cleanup_attempts_every_allocation (__main__.CoupledGPU) ... ok + +---------------------------------------------------------------------- +Ran 1 test in 0.002s + +OK diff --git a/research/refinement_followup_20261013/cpu_stdout_attempt1.txt b/research/refinement_followup_20261013/cpu_stdout_attempt1.txt new file mode 100644 index 0000000..6a9fe7f --- /dev/null +++ b/research/refinement_followup_20261013/cpu_stdout_attempt1.txt @@ -0,0 +1,16 @@ +test_activation_failure_retains_resources_for_retry (__main__.FaultGuardsCPU) ... FAIL +test_failed_download_blocks_read_and_step (__main__.FaultGuardsCPU) ... ok +test_kernel_contracts_reject_before_upload (__main__.FaultGuardsCPU) ... ok + +====================================================================== +FAIL: test_activation_failure_retains_resources_for_retry (__main__.FaultGuardsCPU) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/home/frank14f/CelerisLab/tests/validation/multigrid/test_refinement_followup.py", line 101, in test_activation_failure_retains_resources_for_retry + with self.assertRaisesRegex(RuntimeError, "activation failed"): +AssertionError: RuntimeError not raised + +---------------------------------------------------------------------- +Ran 3 tests in 0.016s + +FAILED (failures=1) diff --git a/research/refinement_followup_20261013/gpu_before.json b/research/refinement_followup_20261013/gpu_before.json new file mode 100644 index 0000000..46762a0 --- /dev/null +++ b/research/refinement_followup_20261013/gpu_before.json @@ -0,0 +1,7 @@ +{ + "utc": "2026-10-13T10:03:05.128000+00:00", + "gpus": "index, uuid, name, memory.used [MiB], utilization.gpu [%]\n0, GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n1, GPU-f1c9fd5a-e917-56e0-21fb-24035ba44a36, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n2, GPU-b8c11c01-c91f-aa0b-abf6-dad35085cc76, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n3, GPU-8b71b032-1b75-2891-935c-ce106a53034a, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n", + "compute_apps": "gpu_uuid, pid, process_name, used_gpu_memory [MiB]\n", + "physical_device": 0, + "uuid": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c" +} diff --git a/research/refinement_followup_20261013/gpu_before_no_launch.json b/research/refinement_followup_20261013/gpu_before_no_launch.json new file mode 100644 index 0000000..074982d --- /dev/null +++ b/research/refinement_followup_20261013/gpu_before_no_launch.json @@ -0,0 +1,7 @@ +{ + "utc": "2026-10-13T10:02:13.061965+00:00", + "gpus": "index, uuid, name, memory.used [MiB], utilization.gpu [%]\n0, GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n1, GPU-f1c9fd5a-e917-56e0-21fb-24035ba44a36, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n2, GPU-b8c11c01-c91f-aa0b-abf6-dad35085cc76, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n3, GPU-8b71b032-1b75-2891-935c-ce106a53034a, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n", + "compute_apps": "gpu_uuid, pid, process_name, used_gpu_memory [MiB]\n", + "physical_device": 0, + "uuid": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c" +} diff --git a/research/refinement_followup_20261013/gpu_rectangle_before.json b/research/refinement_followup_20261013/gpu_rectangle_before.json new file mode 100644 index 0000000..831e379 --- /dev/null +++ b/research/refinement_followup_20261013/gpu_rectangle_before.json @@ -0,0 +1,7 @@ +{ + "utc": "2026-10-13T10:08:24.981497+00:00", + "physical_device": 0, + "uuid": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c", + "gpus": "index, uuid, name, memory.used [MiB], utilization.gpu [%]\n0, GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n1, GPU-f1c9fd5a-e917-56e0-21fb-24035ba44a36, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n2, GPU-b8c11c01-c91f-aa0b-abf6-dad35085cc76, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n3, GPU-8b71b032-1b75-2891-935c-ce106a53034a, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n", + "compute_apps": "gpu_uuid, pid, process_name, used_gpu_memory [MiB]\n" +} diff --git a/research/refinement_followup_20261013/gpu_rectangle_before_no_launch_1791886104981638567.json b/research/refinement_followup_20261013/gpu_rectangle_before_no_launch_1791886104981638567.json new file mode 100644 index 0000000..c33885d --- /dev/null +++ b/research/refinement_followup_20261013/gpu_rectangle_before_no_launch_1791886104981638567.json @@ -0,0 +1,7 @@ +{ + "utc": "2026-10-13T10:07:15.648180+00:00", + "physical_device": 0, + "uuid": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c", + "gpus": "index, uuid, name, memory.used [MiB], utilization.gpu [%]\n0, GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, Tesla V100-SXM2-16GB, 5 MiB, 6 %\n1, GPU-f1c9fd5a-e917-56e0-21fb-24035ba44a36, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n2, GPU-b8c11c01-c91f-aa0b-abf6-dad35085cc76, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n3, GPU-8b71b032-1b75-2891-935c-ce106a53034a, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n", + "compute_apps": "gpu_uuid, pid, process_name, used_gpu_memory [MiB]\n" +} diff --git a/research/refinement_followup_20261013/gpu_rectangle_results.json b/research/refinement_followup_20261013/gpu_rectangle_results.json new file mode 100644 index 0000000..9c6da21 --- /dev/null +++ b/research/refinement_followup_20261013/gpu_rectangle_results.json @@ -0,0 +1,34 @@ +{ + "command": [ + "/usr/bin/prlimit", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "/home/frank14f/CelerisLab/tests/validation/multigrid/test_refinement_followup.py", + "NormalBuildGPU.test_offcenter_rectangle_margin_two_one_step" + ], + "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-followup-gpu-e24mokhk" + }, + "exit_code": 0, + "elapsed_seconds": 2.0801221019937657, + "peak_sampled_gpu_rss_bytes": 194244608, + "peak_sampled_group_rss_bytes": 194244608, + "peak_group_members": { + "475514": { + "rss": 194244608, + "name": "python" + } + }, + "termination_reason": null, + "monitor": "20ms RSS sum polling of own process group, NOT an OS hard limit" +} diff --git a/research/refinement_followup_20261013/gpu_rectangle_stdout.txt b/research/refinement_followup_20261013/gpu_rectangle_stdout.txt new file mode 100644 index 0000000..9185bf3 --- /dev/null +++ b/research/refinement_followup_20261013/gpu_rectangle_stdout.txt @@ -0,0 +1,8 @@ +test_offcenter_rectangle_margin_two_one_step (__main__.NormalBuildGPU) ... normal rectangle 17x13 bounds=(2, 2, 6, 5) fine=16x14 steps=1: max_population=1.14050047e-07 device_arrays=35288; halo/stride PASS +host_peak_rss=185.004 MiB +ok + +---------------------------------------------------------------------- +Ran 1 test in 1.756s + +OK diff --git a/research/refinement_followup_20261013/gpu_results.json b/research/refinement_followup_20261013/gpu_results.json new file mode 100644 index 0000000..53e4f1c --- /dev/null +++ b/research/refinement_followup_20261013/gpu_results.json @@ -0,0 +1,46 @@ +{ + "command": [ + "/usr/bin/prlimit", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "/home/frank14f/CelerisLab/tests/validation/multigrid/test_refinement_followup.py", + "NormalBuildGPU" + ], + "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" + }, + "exit_code": -9, + "elapsed_seconds": 1.8715177840203978, + "peak_sampled_gpu_rss_bytes": 192253952, + "peak_sampled_group_rss_bytes": 268984320, + "peak_group_members": { + "475223": { + "rss": 192253952, + "name": "python" + }, + "475238": { + "rss": 3534848, + "name": "nvcc" + }, + "475244": { + "rss": 1810432, + "name": "sh" + }, + "475245": { + "rss": 71385088, + "name": "cicc" + } + }, + "termination_reason": "sampled process-group RSS >256MiB or walltime >120s", + "monitor": "20ms polling of RSS sum in our new process group; not an OS memory hard limit", + "output_bytes": 68 +} diff --git a/research/refinement_followup_20261013/gpu_seed1_before.json b/research/refinement_followup_20261013/gpu_seed1_before.json new file mode 100644 index 0000000..c77ea34 --- /dev/null +++ b/research/refinement_followup_20261013/gpu_seed1_before.json @@ -0,0 +1,7 @@ +{ + "utc": "2026-10-13T10:07:12.985447+00:00", + "physical_device": 0, + "uuid": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c", + "gpus": "index, uuid, name, memory.used [MiB], utilization.gpu [%]\n0, GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n1, GPU-f1c9fd5a-e917-56e0-21fb-24035ba44a36, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n2, GPU-b8c11c01-c91f-aa0b-abf6-dad35085cc76, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n3, GPU-8b71b032-1b75-2891-935c-ce106a53034a, Tesla V100-SXM2-16GB, 5 MiB, 0 %\n", + "compute_apps": "gpu_uuid, pid, process_name, used_gpu_memory [MiB]\n" +} diff --git a/research/refinement_followup_20261013/gpu_seed1_results.json b/research/refinement_followup_20261013/gpu_seed1_results.json new file mode 100644 index 0000000..b718e8a --- /dev/null +++ b/research/refinement_followup_20261013/gpu_seed1_results.json @@ -0,0 +1,34 @@ +{ + "command": [ + "/usr/bin/prlimit", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "/home/frank14f/CelerisLab/tests/validation/multigrid/test_refinement_followup.py", + "NormalBuildGPU.test_nonequilibrium_seed1_eight_steps" + ], + "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-followup-gpu-m0poob97" + }, + "exit_code": 0, + "elapsed_seconds": 2.3270061850198545, + "peak_sampled_gpu_rss_bytes": 194113536, + "peak_sampled_group_rss_bytes": 194113536, + "peak_group_members": { + "475401": { + "rss": 194113536, + "name": "python" + } + }, + "termination_reason": null, + "monitor": "20ms RSS sum polling of own process group, NOT an OS hard limit" +} diff --git a/research/refinement_followup_20261013/gpu_seed1_stdout.txt b/research/refinement_followup_20261013/gpu_seed1_stdout.txt new file mode 100644 index 0000000..4d7de08 --- /dev/null +++ b/research/refinement_followup_20261013/gpu_seed1_stdout.txt @@ -0,0 +1,8 @@ +test_nonequilibrium_seed1_eight_steps (__main__.NormalBuildGPU) ... normal seed1 steps=8: max_population=1.67235548e-07 max_leaf_drift=2.23806128e-05 max_leaf_error=2.20813948e-05 +host_peak_rss=184.527 MiB +ok + +---------------------------------------------------------------------- +Ran 1 test in 2.028s + +OK diff --git a/research/refinement_followup_20261013/gpu_stdout.txt b/research/refinement_followup_20261013/gpu_stdout.txt new file mode 100644 index 0000000..b0956fe --- /dev/null +++ b/research/refinement_followup_20261013/gpu_stdout.txt @@ -0,0 +1 @@ +test_nonequilibrium_seed1_eight_steps (__main__.NormalBuildGPU) ... \ No newline at end of file diff --git a/research/refinement_followup_20261013/incremental.patch b/research/refinement_followup_20261013/incremental.patch new file mode 100644 index 0000000..9df25d8 --- /dev/null +++ b/research/refinement_followup_20261013/incremental.patch @@ -0,0 +1,340 @@ +diff --git a/src/CelerisLab/lbm/refinement_stepper.py b/src/CelerisLab/lbm/refinement_stepper.py +--- a/src/CelerisLab/lbm/refinement_stepper.py ++++ b/src/CelerisLab/lbm/refinement_stepper.py +@@ -14,7 +14,7 @@ + import pycuda.driver as cuda + + from ..cuda import compiler_v2 as compiler +-from .refinement import ACTIVE, FixedPatch2D ++from .refinement import ACTIVE, HALO, FixedPatch2D + + + @dataclass +@@ -37,6 +37,8 @@ + it, rather than pretending the partially advanced fine buffer rolled back. + """ + def __init__(self, cfg, bounds, *, context): ++ if HALO != 4: ++ raise RuntimeError("refinement.cu requires a four-cell fine halo") + self.patch = FixedPatch2D.from_config(cfg, bounds) + self.ctx = context + self._lock = RLock() +@@ -51,9 +53,11 @@ + with self.ctx.activate(): + try: + self._stream = cuda.Stream() +- for config, name in ((replace(cfg), "PatchCoarseStep"), +- (fine_cfg, "PatchFineStep")): ++ for config, name, tau in ((replace(cfg), "PatchCoarseStep", self.patch.tau_coarse), ++ (fine_cfg, "PatchFineStep", self.patch.tau_fine)): + config.validate() ++ if not np.isclose(config.omega, 1 / tau, rtol=1e-14, atol=0): ++ raise RuntimeError("level omega/tau mismatch") + build = compiler.generate_config(config, n_objects=0) + try: + ptx = compiler.compile_kernel(self.ctx.sm_arch, source="refinement.cu", +@@ -61,7 +65,9 @@ + module = compiler.load_module(ptx) + finally: + compiler.cleanup_build_dir(build) +- ptr, _ = module.get_global("d_params") ++ ptr, size = module.get_global("d_params") ++ if size != struct.calcsize("=ffffI"): ++ raise RuntimeError("LBMParams host/device layout mismatch") + cuda.memcpy_htod(ptr, struct.pack("=ffffI", config.omega, 0, 0, 0, 0)) + shape = (9, config.ny, config.nx) + size = int(np.prod(shape)) * 4 +@@ -166,18 +172,23 @@ + with self._lock, self.ctx.activate(): + self._require("ready") + arrays = [np.empty(level.shape, np.float32) for level in self._levels] +- for level, array in zip(self._levels, arrays): +- cuda.memcpy_dtoh(array, level.current) ++ try: ++ for level, array in zip(self._levels, arrays): ++ cuda.memcpy_dtoh(array, level.current) ++ except BaseException: ++ self._status = "failed" ++ raise + self._mask_nonleaves(*arrays) + return tuple(arrays) + + def close(self): +- """Release owned allocations/modules; the caller's context stays open.""" ++ """Release owned resources; retain them for retry if context activation fails.""" + with self._lock: + if self._status == "closed": + return +- self._status = "closed" ++ self._status = "failed" + with self.ctx.activate(): ++ self._status = "closed" + error = None + try: + if self._stream is not None: +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,7 @@ + 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, 512) ++ 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 +new file mode 100644 +--- /dev/null ++++ b/tests/validation/multigrid/test_refinement_followup.py +@@ -0,0 +1,249 @@ ++"""Only review gaps: CPU fault guards, normal-build seed1/8 and rectangle/1. ++ ++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 dataclasses import replace ++import json ++from pathlib import Path ++import resource ++from threading import RLock ++import unittest ++from unittest.mock import MagicMock, Mock, patch ++ ++import numpy as np ++import pycuda.driver as cuda ++ ++import CelerisLab ++from CelerisLab.lbm import refinement_stepper as implementation ++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): ++ """Independent G→G single interval, geometric links, no production tables.""" ++ _, ny, nx = coarse.shape ++ _, fy, fx = fine.shape ++ x0, y0, x1, y1 = bounds ++ cx, cy = (0, 1, -1, 0, 0, 1, -1, 1, -1), (0, 0, 0, 1, -1, 1, -1, -1, 1) ++ weights = (4/9, 1/9, 1/9, 1/9, 1/9, 1/36, 1/36, 1/36, 1/36) ++ ++ def collide(values, tau): ++ rho = sum(values) ++ ux = sum(c * v for c, v in zip(cx, values)) / rho ++ uy = sum(c * v for c, v in zip(cy, values)) / rho ++ equilibrium = [w * rho * (1 + 3*(a*ux+b*uy) + 4.5*(a*ux+b*uy)**2 ++ - 1.5*(ux*ux+uy*uy)) for w, a, b in zip(weights, cx, cy)] ++ return [v - (v-e)/tau for v, e in zip(values, equilibrium)] ++ ++ current = fine.astype(np.float64).copy() ++ for y in range(fy): ++ for x in range(fx): ++ if not (4 <= x < fx-4 and 4 <= y < fy-4): ++ current[:, y, x] = coarse[:, y0+(y-4)//2, x0+(x-4)//2] ++ for _ in range(2): ++ out = np.full_like(current, np.nan) ++ for y in range(2, fy-2): ++ for x in range(2, fx-2): ++ values = [current[q, y-cy[q], x-cx[q]] for q in range(9)] ++ out[:, y, x] = (collide(values, 1.1) ++ if 4 <= x < fx-4 and 4 <= y < fy-4 else values) ++ current = out ++ result = np.full(coarse.shape, np.nan) ++ for y in range(ny): ++ for x in range(nx): ++ if x0 <= x < x1 and y0 <= y < y1: ++ continue ++ values = [] ++ for q in range(9): ++ mx, my = x+.5-cx[q]/2, y+.5-cy[q]/2 ++ if x0 <= mx <= x1 and y0 <= my <= y1: ++ a, b = 4+2*(x-x0), 4+2*(y-y0) ++ value = sum(current[q, b+dy, a+dx] for dy in (0, 1) for dx in (0, 1))/4 ++ else: ++ value = coarse[q, (y-cy[q]) % ny, (x-cx[q]) % nx] ++ values.append(value) ++ result[:, y, x] = collide(values, .8) ++ return result, current ++ ++ ++class FaultGuardsCPU(unittest.TestCase): ++ def fake_backend(self): ++ backend = PeriodicPatchStepper.__new__(PeriodicPatchStepper) ++ backend.ctx = Mock(activate=nullcontext) ++ backend._lock = RLock() ++ backend._status = "ready" ++ backend._stream = Mock() ++ backend._levels = [Mock(shape=(9, 1, 1)), Mock(shape=(9, 1, 1))] ++ backend._allocations = [Mock(), Mock()] ++ return backend ++ ++ def test_failed_download_blocks_read_and_step(self): ++ # Fail on each level separately, including after coarse data was read. ++ for failed_read in (0, 1): ++ backend = self.fake_backend() ++ reads = [None] * failed_read + [RuntimeError("device read failed")] ++ with patch.object(cuda, "memcpy_dtoh", side_effect=reads) as read: ++ with self.assertRaisesRegex(RuntimeError, "device read failed"): ++ backend.download() ++ calls = read.call_count ++ for operation in (backend.download, backend.step): ++ with self.assertRaisesRegex(RuntimeError, "failed"): ++ operation() ++ self.assertEqual(read.call_count, calls) ++ backend.close() ++ ++ def test_activation_failure_retains_resources_for_retry(self): ++ backend = self.fake_backend() ++ levels, allocations, stream = backend._levels[:], backend._allocations[:], backend._stream ++ unavailable = MagicMock() ++ unavailable.__enter__.side_effect = RuntimeError("activation failed") ++ backend.ctx.activate = Mock(side_effect=[unavailable, nullcontext()]) ++ with self.assertRaisesRegex(RuntimeError, "activation failed"): ++ backend.close() ++ self.assertEqual(backend._status, "failed") ++ self.assertEqual(backend._levels, levels) ++ self.assertEqual(backend._allocations, allocations) ++ self.assertIs(backend._stream, stream) ++ for allocation in allocations: ++ allocation.free.assert_not_called() ++ backend.close() ++ self.assertEqual(backend._status, "closed") ++ for allocation in allocations: ++ allocation.free.assert_called_once() ++ ++ def test_kernel_contracts_reject_before_upload(self): ++ cfg = LBMConfig(nx=16, ny=16, viscosity=.1) ++ context = Mock(activate=nullcontext, sm_arch="sm_70") ++ with patch.object(implementation, "HALO", 2): ++ with self.assertRaisesRegex(RuntimeError, "four-cell"): ++ PeriodicPatchStepper(cfg, (4, 4, 12, 12), context=context) ++ p = implementation.FixedPatch2D.from_config(cfg, (4, 4, 12, 12)) ++ with patch.object(cuda, "Stream"), patch.object(implementation.FixedPatch2D, "from_config", ++ return_value=replace(p, tau_coarse=.9)): ++ with self.assertRaisesRegex(RuntimeError, "omega/tau"): ++ PeriodicPatchStepper(cfg, p.bounds, context=context) ++ module = Mock() ++ module.get_global.return_value = (Mock(), 16) ++ with patch.object(cuda, "Stream"), patch.object(compiler, "generate_config"), \ ++ patch.object(compiler, "compile_kernel"), patch.object(compiler, "cleanup_build_dir"), \ ++ patch.object(compiler, "load_module", return_value=module), \ ++ patch.object(cuda, "memcpy_htod") as upload: ++ with self.assertRaisesRegex(RuntimeError, "layout mismatch"): ++ PeriodicPatchStepper(cfg, p.bounds, context=context) ++ upload.assert_not_called() ++ ++ ++class NormalBuildGPU(unittest.TestCase): ++ def setUp(self): ++ self.assertEqual(Path(CelerisLab.__file__).resolve(), ROOT / "src/CelerisLab/__init__.py") ++ self.assertEqual(Path(compiler._KERNEL_DIR).resolve(), ROOT / "src/CelerisLab/lbm/kernels") ++ self.assertEqual(Path(implementation.__file__).resolve(), ++ ROOT / "src/CelerisLab/lbm/refinement_stepper.py") ++ ++ 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): ++ spec = ref.make_spec(collision="srt") ++ maps = ref.build_maps(spec) ++ initial = ref.make_state(spec, velocity=(.03, -.02)) ++ rng = np.random.default_rng(1) ++ 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: ++ backend.initialize(*postcollision(state, spec, maps)) ++ before = totals(backend.download(), maps) ++ for step in range(1, 9): ++ state, _ = ref.advance_coarse_once(spec, maps, state) ++ backend.step() ++ actual, expected = backend.download(), postcollision(state, spec, maps) ++ self.assertEqual(backend.step_count, step) ++ for got, want in zip(actual, expected): ++ np.testing.assert_array_equal(np.isnan(got), np.isnan(want)) ++ max_pop = max(max_pop, float(np.nanmax(np.abs(got-want)))) ++ max_drift = max(max_drift, float(np.max(np.abs(totals(actual, maps)-before)))) ++ max_moment = max(max_moment, float(np.max(np.abs(totals(actual, maps)-totals(expected, maps))))) ++ self.assertLessEqual(max_pop, POP_ATOL) ++ self.assertLessEqual(max_drift, MOMENT_ATOL) ++ self.assertLessEqual(max_moment, MOMENT_ATOL) ++ print(f"normal seed1 steps=8: max_population={max_pop:.9g} " ++ f"max_leaf_drift={max_drift:.9g} max_leaf_error={max_moment:.9g}", flush=True) ++ ++ def test_offcenter_rectangle_margin_two_one_step(self): ++ cfg, bounds = LBMConfig(nx=17, ny=13, viscosity=.1), (2, 2, 6, 5) ++ rng = np.random.default_rng(7) ++ # Explicit asymmetric, nonequilibrium G0, not an arrival array to collide again. ++ initial = [ref.W[:, None, None] * (1+1e-3*rng.standard_normal((9, ny, nx))) ++ for ny, nx in ((13, 17), (14, 16))] ++ initial = [np.array(a, dtype=np.float32) for a in initial] ++ initial[0][:, 2:5, 2:6] = np.nan ++ fine_mask = np.zeros((14, 16), bool) ++ 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: ++ 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 ++ (p.ghost_fine, p.ghost_coarse, p.coalesce_coarse, p.coalesce_fine)) ++ self.assertLess(allocated, 128*1024) ++ backend.initialize(*initial) ++ backend.step() ++ coarse, fine = backend.download() ++ raw_fine = np.empty((9, 14, 16), np.float32) ++ cuda.memcpy_dtoh(raw_fine, backend._levels[1].current) ++ max_error = 0.0 ++ for got, want in zip((coarse, raw_fine), expected): ++ np.testing.assert_array_equal(np.isnan(got), np.isnan(want)) ++ max_error = max(max_error, float(np.nanmax(np.abs(got-want)))) ++ self.assertLessEqual(max_error, POP_ATOL) ++ self.assertTrue(np.isnan(fine[:, ~fine_mask]).all()) ++ print(f"normal rectangle 17x13 bounds={bounds} fine=16x14 steps=1: " ++ f"max_population={max_error:.9g} device_arrays={allocated}; halo/stride PASS", flush=True) ++ ++ ++if __name__ == "__main__": ++ unittest.main(verbosity=2) diff --git a/research/refinement_followup_20261013/manifest.json b/research/refinement_followup_20261013/manifest.json new file mode 100644 index 0000000..177704d --- /dev/null +++ b/research/refinement_followup_20261013/manifest.json @@ -0,0 +1,104 @@ +{ + "checked_baseline_files": 15, + "unchanged_required_files": 13, + "intended_modified_files": [ + "src/CelerisLab/lbm/refinement_stepper.py", + "tests/validation/multigrid/test_refinement_gpu.py" + ], + "new_code_file": "tests/validation/multigrid/test_refinement_followup.py", + "raw_stdout_bytes": 2084, + "files": { + "research/refinement_followup_20261013/README.txt": { + "bytes": 4887, + "sha256": "c553e889c6d66bb81d17d2691150cadf6fecdaa336de941281e7c85a6ff1eb12" + }, + "research/refinement_followup_20261013/baseline.json": { + "bytes": 5343, + "sha256": "77694a29bbea2e61eb69eb5fe37eca7a8d5e82114bd59c7ff23e89d3db53a019" + }, + "research/refinement_followup_20261013/cleanup.json": { + "bytes": 1253, + "sha256": "ce1fb34fcbf2fadf7786234a8dd5dd9d0e520d9353a08b5df4c6777a35beed88" + }, + "research/refinement_followup_20261013/cpu_results.json": { + "bytes": 1056, + "sha256": "a1a57b35c0839a82a7b653a062e852edf693d2c318da77dc1cb79373661bc780" + }, + "research/refinement_followup_20261013/cpu_results_attempt1.json": { + "bytes": 642, + "sha256": "a91976e3ff92f7fe458a4432dae31d6b751bee92450d9a07e1dd5ee1cf5e915a" + }, + "research/refinement_followup_20261013/cpu_stdout.txt": { + "bytes": 499, + "sha256": "f9bcee3a2b43599e99c2e3b3a250aa4d4f4db1a73d1bf7cf1db0ab1fa585c54b" + }, + "research/refinement_followup_20261013/cpu_stdout_attempt1.txt": { + "bytes": 879, + "sha256": "6ac5f889a9f6b6ecfa8abb74e98b07deaadc71c7f5488112eca26e4ed255e7ba" + }, + "research/refinement_followup_20261013/gpu_before.json": { + "bytes": 589, + "sha256": "236cc69740cb40640cf4cd96cd94ff80644c2cf07c471b276092303edd3003e1" + }, + "research/refinement_followup_20261013/gpu_before_no_launch.json": { + "bytes": 589, + "sha256": "396664d587d2e7791e972def03c7199845f7a162ab4626733fae1e54e1262da5" + }, + "research/refinement_followup_20261013/gpu_rectangle_before.json": { + "bytes": 589, + "sha256": "aeab9314117b7eaa0950566094d20ecb5a304cc55b85887b6281694d3a6b8660" + }, + "research/refinement_followup_20261013/gpu_rectangle_before_no_launch_1791886104981638567.json": { + "bytes": 589, + "sha256": "831b08511b78e8e631a17a638212b1c511e6f3fdb86019d7a77cc0f44d4015d2" + }, + "research/refinement_followup_20261013/gpu_rectangle_results.json": { + "bytes": 1003, + "sha256": "9a06af9ec07de80d049889f321b7ea5f03036f4e461af2a43cdfb76d02ee1d6a" + }, + "research/refinement_followup_20261013/gpu_rectangle_stdout.txt": { + "bytes": 332, + "sha256": "fea29f48685d84966b51d41b33e59bc01bef7d9dbc5e75b3d7c316de761f5bd5" + }, + "research/refinement_followup_20261013/gpu_results.json": { + "bytes": 1189, + "sha256": "be369bb072139b3fbfac4cbb3ab5eade7d2fb1ab67549ae2e4e0d0f48f640dfc" + }, + "research/refinement_followup_20261013/gpu_seed1_before.json": { + "bytes": 589, + "sha256": "4dc6de02770a8e985f62d902ab9067cf5910084e4506ece059979640adb5575f" + }, + "research/refinement_followup_20261013/gpu_seed1_results.json": { + "bytes": 996, + "sha256": "ac54f5071b6e6095437078d4f8ed1cbc851a4b727ce6336281c1f27472f3dbe4" + }, + "research/refinement_followup_20261013/gpu_seed1_stdout.txt": { + "bytes": 306, + "sha256": "8453a1b7221085691b39439428e39aaf52215abbbe9b1f84fc54c4a695260a9e" + }, + "research/refinement_followup_20261013/gpu_stdout.txt": { + "bytes": 68, + "sha256": "3147d3ab0b58ac9aa67c495491979ebb455db0fc2e89e7004facbd8c55c67b4e" + }, + "research/refinement_followup_20261013/incremental.patch": { + "bytes": 16836, + "sha256": "b638544a02cbf7dd7acfcad545fcac50dc9640e193a9672f27916275c134253f" + }, + "research/refinement_followup_20261013/run_gpu.py": { + "bytes": 5237, + "sha256": "16b1520adbfee1651539f04dd694f5f02e9dc8ae4f4fc55d374a0ac06b50b4b8" + }, + "src/CelerisLab/lbm/refinement_stepper.py": { + "bytes": 9533, + "sha256": "0e670ab38a1ce95839ceeef844b551427f61603ab873530905c745125052f5df" + }, + "tests/validation/multigrid/test_refinement_followup.py": { + "bytes": 12270, + "sha256": "fa7ec6200416f8a31cf0b2db5299a6ea4a529da18f3e9121c8b855270746287d" + }, + "tests/validation/multigrid/test_refinement_gpu.py": { + "bytes": 12494, + "sha256": "3078ea8752e225330cfe89fe37ce24ece96fa05b96cfa185687909a09d721088" + } + } +} diff --git a/research/refinement_followup_20261013/run_gpu.py b/research/refinement_followup_20261013/run_gpu.py new file mode 100644 index 0000000..b5af3f0 --- /dev/null +++ b/research/refinement_followup_20261013/run_gpu.py @@ -0,0 +1,97 @@ +"""Two missing ordinary-build checks, each in its own monitored process group. + +RSS polling is not an OS hard limit. prlimit enforces output/core limits only. +No driver/context address-space limit is imposed. Never kill another job. +""" +import csv +import datetime +import io +import json +import os +from pathlib import Path +import shutil +import signal +import subprocess +import tempfile +import time + +OUT = Path(__file__).resolve().parent +ROOT = OUT.parents[1] +PYTHON = "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python" +TEST = ROOT / "tests/validation/multigrid/test_refinement_followup.py" + +for name, selector in (("seed1", "test_nonequilibrium_seed1_eight_steps"), + ("rectangle", "test_offcenter_rectangle_margin_two_one_step")): + previous = OUT / f"gpu_{name}_results.json" + if previous.exists() and json.loads(previous.read_text())["exit_code"] == 0: + continue # Resume missing cases without repeating completed flow runs. + gpus = subprocess.check_output(["nvidia-smi", "--query-gpu=index,uuid,name,memory.used,utilization.gpu", + "--format=csv"], text=True) + apps = subprocess.check_output(["nvidia-smi", "--query-compute-apps=gpu_uuid,pid,process_name,used_memory", + "--format=csv"], text=True) + gpu = next(r for r in csv.DictReader(io.StringIO(gpus), skipinitialspace=True) if r["index"] == "0") + before = dict(utc=datetime.datetime.now(datetime.timezone.utc).isoformat(), + physical_device=0, uuid=gpu["uuid"], gpus=gpus, compute_apps=apps) + before_path = OUT / f"gpu_{name}_before.json" + if before_path.exists(): + before_path.rename(OUT / f"gpu_{name}_before_no_launch_{time.time_ns()}.json") + before_path.write_text(json.dumps(before, indent=2) + "\n") + if (gpu["uuid"] in apps or int(gpu["utilization.gpu [%]"].split()[0]) != 0 + or int(gpu["memory.used [MiB]"].split()[0]) > 16): + raise SystemExit("Physical GPU 0 occupied; no job launched") + command = ["/usr/bin/prlimit", "--fsize=2097152", "--core=0", "--", PYTHON, + "-B", str(TEST), "NormalBuildGPU." + selector] + scratch = tempfile.mkdtemp(prefix="celeris-followup-gpu-") + settings = dict(PYTHONPATH=str(ROOT / "src"), CUDA_VISIBLE_DEVICES="0", CUDA_CACHE_DISABLE="1", + OPENBLAS_NUM_THREADS="1", PYTHONDONTWRITEBYTECODE="1", PYTHONNOUSERSITE="1", + TMPDIR=scratch) + env = dict(os.environ, **settings) + start = time.monotonic() + peak_group = peak_gpu = 0 + peak_members = {} + reason = None + process = None + try: + with (OUT / f"gpu_{name}_stdout.txt").open("w") as log: + process = subprocess.Popen(command, cwd=ROOT, env=env, stdout=log, + stderr=subprocess.STDOUT, start_new_session=True) + while process.poll() is None: + group = {} + for proc in Path("/proc").iterdir(): + if not proc.name.isdigit(): + continue + try: + fields = (proc / "stat").read_text().rsplit(") ", 1)[1].split() + if int(fields[2]) != process.pid: + continue + status = (proc / "status").read_text() + rss = next(int(v.split()[1])*1024 for v in status.splitlines() if v.startswith("VmRSS:")) + group[int(proc.name)] = dict(rss=rss, name=(proc / "comm").read_text().strip()) + except (OSError, StopIteration, ValueError, IndexError): + pass + total = sum(v["rss"] for v in group.values()) + peak_gpu = max(peak_gpu, group.get(process.pid, {}).get("rss", 0)) + if total > peak_group: + peak_group, peak_members = total, group + output_bytes = sum(p.stat().st_size for p in OUT.glob("*stdout*.txt")) + if total > 256*1024**2 or time.monotonic()-start > 120 or output_bytes > 2*1024**2: + reason = "process-group RSS >256MiB, 120s or combined stdout >2MiB" + os.killpg(process.pid, signal.SIGKILL) + process.wait() + break + time.sleep(.02) + result = dict(command=command, cwd=str(ROOT), environment=settings, + exit_code=process.returncode, elapsed_seconds=time.monotonic()-start, + peak_sampled_gpu_rss_bytes=peak_gpu, peak_sampled_group_rss_bytes=peak_group, + peak_group_members=peak_members, termination_reason=reason, + monitor="20ms RSS sum polling of own process group, NOT an OS hard limit") + (OUT / f"gpu_{name}_results.json").write_text(json.dumps(result, indent=2) + "\n") + print((OUT / f"gpu_{name}_stdout.txt").read_text(), flush=True) + print(json.dumps(result), flush=True) + finally: + if process is not None and process.poll() is None: + os.killpg(process.pid, signal.SIGKILL) + process.wait() + shutil.rmtree(scratch) + if process.returncode: + raise SystemExit(process.returncode) diff --git a/research/refinement_prepare_20261013/README.txt b/research/refinement_prepare_20261013/README.txt new file mode 100644 index 0000000..8e210c2 --- /dev/null +++ b/research/refinement_prepare_20261013/README.txt @@ -0,0 +1,137 @@ +Fixed 2:1 patch preparation — implementation handoff, 2026-10-13 + +Delivered: one production module, src/CelerisLab/lbm/refinement.py (138 lines), +and tests/unit/test_refinement.py (167 lines). No existing code was modified. +The API produces real layer geometry and compact exchange tables. It does not +advance a coupled simulation; numerical coupling remains a joint review item. + +Usage (existing config, no CUDA required): + from CelerisLab.config import load_lbm_config + from CelerisLab.lbm.refinement import FixedPatch2D + cfg = load_lbm_config() + patch = FixedPatch2D.from_config(cfg, (4, 4, 12, 12)) + patch.check_synchronization(0, 0, phase="postcollision_g") +The supplied configuration must satisfy the documented initial backend subset. +Bounds are (x0,y0,x1,y1), half-open, in coarse cells. Shapes are (ny,nx). + +Current architecture and data path + Simulation + -> LBMConfig -> compiler_v2 -> generated per-domain module + -> LBMField: Q-major GPU DDF buffers, flags, host mirror, macro buffers + -> LBMStepper: OneStep + buffer swap, completed coarse-step count + -> pull -> physical BC -> collision -> stored postcollision_g + + New opt-in preparation path (no change to the above path): + LBMConfig -> FixedPatch2D.from_config + -> copied/validated config; coarse/fine tau and layer dimensions + -> fine_kind: active / inner halo / outer halo (uint8) + -> paired ghost_fine/ghost_coarse cell indices (uint32) + -> coalesce_coarse + four coalesce_fine population slots (uint64) + -> future transfer/step kernels (not implemented in this increment) + +Choices and actual implementation +The initial contract is D2Q9/SRT/FP32/unshifted/double_buffer, without LES. +Existing Python lattice descriptors and CUDA Q-major index conventions are +reused. Existing configuration is copied before validation; both layers must +respect its omega guards. Fixed 2:1 acoustic scaling gives tau_f=.5+2*(tau_c-.5). +Fine coordinates use the patch's physical offset, dx=dt=.5 and a four-cell halo. +Only the outer coarse ring is searched for closed-midpoint coalescence targets; +all eight corner-pass links are included. No coarse-domain-sized masks or DDF +arrays are allocated. Standard [4,12)^2 patch tables total 7136 bytes; enlarging +only the coarse grid leaves table size unchanged. Arrays are contiguous/read-only. +An explicit import enables the API; no eager package imports or default-path +branches were added. No tree, dynamic AMR framework, new solver, field hierarchy, +fake stepper, fine LBMField allocation or premature config/runtime switches. + +The synchronization method checks count/phase metadata only. It does not inspect +populations or prove that a caller's buffer really holds g. Two coarse cells of +geometric margin certify donor indices, not fluid ownership or physical BC safety. +Runtime forcing, objects and domain BCs still need explicit coupling validation. + +Numerical coupling proposal for Claude/Grok joint review — NOT implemented +Let F_n be the reference arrival state and G_n=C(F_n) the production state. +Start from stored G_n, without re-colliding it: + 1. Explode coarse G_n into fine halo once (unscaled, as in pinned CPUREF). + 2. Fine hop 1 -> arrival F_(n+1/2); collide fine active cells once. + 3. Fine hop 2 -> arrival F_(n+1); fine halo ghosts never collide. + 4. Coarse pull -> provisional arrival; replace incoming interface populations + with the four-child fine-halo average, including corner-pass links. + 5. Collide coarse active cells once and fine active cells a second time, + publishing synchronized G_(n+1). Equivalent fusion may preserve this order. +Thus each coarse interval has one coarse collision and two fine collisions. +Initialization must establish G_0 consistently; no extra per-step collision may +be added to match a reference plot. Comparing C(F_ref) to production G is a test +observation conversion, not a production step. Do not overwrite postcollision +coarse slots with uncollided coalescence after ordinary OneStep has finished. +The current fused kernel therefore needs a reviewed insertion point before its +collision, with masks preserving covered/halo semantics. Its normal inlet ghost +collision behavior is separate from the fine-halo rule above. + +First numerical scope proposed: fixed, unforced, object-free doubly periodic +patch, same baseline tau pair; <=8-step same-phase CPU/GPU comparison after +the coupling design is jointly reviewed. Reuse existing collision/layout +helpers rather than reproduce a solver. Simulation currently constructs channel +flags/wall corrections, so reusing its default initializer does NOT create this +periodic fixture. Boundary selection and level-module ownership must be agreed +before attaching a coupled backend to Simulation. No GPU budget was requested +or consumed in this architecture-only increment; any later GPU run needs an +occupancy check and a specific allocation budget before execution. + +The observed ~2.9% excess shear decay does not block topology preparation or a +bounded equivalence implementation, but remains an interface-accuracy concern. +Neither a future <=8-step comparison nor this geometry test establishes 32-step +accuracy, convergence or a stress-transfer mechanism. No nonequilibrium scaling +or time-interpolated ghosts were mixed into the pinned route. Claude's previous +local_stress implementation-code review remains incomplete. + +Reference/architecture guard traceability +Read .github/skills/lbm-ref-architecture-guard/SKILL.md; no applicable AGENTS.md +was found in the project/source/test ancestor paths. Concrete source findings: + - src/CelerisLab/lbm/descriptors.py and kernels/core/layout.cuh define paired + D2Q9 and q*N+y*nx+x; maps use them rather than a second direction convention. + - src/CelerisLab/lbm/kernels/step/one_step_double.cu fuses pull/BC/collision; + src/CelerisLab/lbm/stepper.py swaps the stored g buffers afterward. + - src/CelerisLab/lbm/field.py builds channel topology and allocates full field + resources: unsuitable as an implicit fine-patch initializer. + - ref/lbmpy/src/lbmpy/relaxationrates.py: relaxation_rate_scaling agrees with + tau_f=.5+2*(tau_c-.5); no population rescaling is inferred from this formula. + - ref/palabos/src/multiGrid/multiGridGenerator2D.hh: two fine substeps and + separate interface processors support keeping topology separate from steps. + Its interpolation/rescaling is a different scheme and was NOT adopted. + - Pinned CPUREF-0.3 supplies the reviewed closed-corner volumetric geometry. + Its SHA remains bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e. + +Review and validation +Independent local subagent /root/refinement_review read the production module +and related sources and found no blocking issue. Its two suggestions were +adopted: explicitly distinguish fine halo ghosts from inlet ghosts, and cover +the smallest 1x1 patch at the two-coarse-cell margin. This is not a completed +Claude/Grok review of the new coupling proposal. +Ran only tests/unit/test_refinement.py: 9/9 passed, no numerical advance. +Coverage: all exchange maps against pinned reference, eight corner passes, +400 unique fine-slot reads, translated rectangle geometry/child centers, +minimal halo edges, tau/config isolation, compact read-only arrays, index +overflow rejection before allocation, unsupported backend/omega guards, +phase/count rejection, exact source provenance and no CUDA/Simulation imports. +No old diagnostics, physical matrix, Jet replay or GPU tests were rerun. +Python 3.10.13 / NumPy 1.26.4 from existing pycuda_3_10 environment. +PYTHONPATH=/home/frank14f/CelerisLab/src; process-only BLAS thread=1, bytecode +disabled, user site disabled, assertions enabled. Parent and child limited by +prlimit to 256 MiB address space, 2 MiB output file and core=0. +Peak child RSS 36.00390625 MiB, parent 18.5 MiB; child elapsed .274485 s; +combined test stdout/stderr 873 bytes. Full commands, times and source hash +are in validation.json; actual unittest output is validation.txt. + +Audit artifacts +baseline.json freezes HEAD, full dirty status and 303 old-file hashes, including +all preceding validation materials. Scope excludes read-only ref, symlinks and +bytecode, as stated in the baseline. incremental.patch is only the two new code +files, relative to the preserved starting tree. manifest.json records final old +file checks and new paths/sizes/SHA. No staging, commit, push or DynamisLab work. +Stopped at the numerical coupling joint-review point. + +Authorization, verbatim as relayed by the coordinating thread + +user(Sentinel_ed1ee5edd5e88191a1aaa4d710ce523f): 推进吧,~/CelerisLab就是开发环境,可以改动,只要符合架构风格。遇到问题可以用undermind看文献,也可以让grok搜索互联网信息,还可以参考开源项目。 +user(Sentinel_d0d3a42b2c088191aa8aebc105fb1b27): 允许,你用GPU验证都行 + diff --git a/research/refinement_prepare_20261013/baseline.json b/research/refinement_prepare_20261013/baseline.json new file mode 100644 index 0000000..d5f2572 --- /dev/null +++ b/research/refinement_prepare_20261013/baseline.json @@ -0,0 +1,311 @@ +{ + "created_utc": "2026-10-13T07:06:32.791804+00:00", + "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/README.md\n?? docs/design/integrated_architecture.md\n?? docs/design/multi_level_grid_architecture.md\n?? docs/design/multi_level_summary.md\n?? docs/design/multi_level_visual_reference.md\n?? docs/design/spatial_coupling_refinement.md\n?? docs/multilevel_grid_architecture_analysis.md\n?? research/audit-2026-10-09/REVIEW.zh-CN.md\n?? research/audit-2026-10-09/architecture-cpu-results.json\n?? research/audit-2026-10-09/architecture-report.md\n?? research/audit-2026-10-09/numerical-report.md\n?? research/audit-2026-10-09/numerical_collision_results.json\n?? research/audit-2026-10-09/numerical_compile_results.json\n?? research/audit-2026-10-09/numerical_semantics_results.json\n?? research/audit-2026-10-09/root-initializers-report.md\n?? research/audit-2026-10-09/state-report.md\n?? research/audit-2026-10-09/state_results.json\n?? research/design-2026-10-09/Contracts.lean\n?? research/design-2026-10-09/PLAN.zh-CN.md\n?? research/design-2026-10-09/api-architecture-study.md\n?? research/design-2026-10-09/grid-study.md\n?? research/design-2026-10-09/jet-study.md\n?? research/design-2026-10-09/jet_closure_check.py\n?? research/design-2026-10-09/jet_closure_results.json\n?? research/design-2026-10-09/math-and-history.md\n?? research/design-2026-10-09/math-checks.json\n?? research/design-2026-10-09/math_checks.py\n?? research/j1-2026-10-12/REVIEW.md\n?? research/j1-2026-10-12/baseline-status.txt\n?? research/j1-2026-10-12/baseline.json\n?? research/j1-2026-10-12/incremental.diff\n?? research/j1-2026-10-12/results.json\n?? research/j2-slot-2026-10-12/REVIEW.md\n?? research/j2-slot-2026-10-12/baseline-status.txt\n?? research/j2-slot-2026-10-12/baseline.json\n?? research/j2-slot-2026-10-12/incremental.diff\n?? research/j2-slot-2026-10-12/results.json\n?? research/j3-coverage-2026-10-12/REVIEW.md\n?? research/j3-coverage-2026-10-12/baseline-status.txt\n?? research/j3-coverage-2026-10-12/baseline.json\n?? research/j3-coverage-2026-10-12/incremental.diff\n?? research/j3-coverage-2026-10-12/negative-budget-20744.h5\n?? research/j3-coverage-2026-10-12/negative-end-20760.h5\n?? research/j3-coverage-2026-10-12/restart-21280.h5\n?? research/j3-coverage-2026-10-12/restart-reference-21296.h5\n?? research/j3-coverage-2026-10-12/results.json\n?? research/j3-coverage-2026-10-12/verification.json\n?? research/j3-lag-2026-10-12/REVIEW.md\n?? research/j3-lag-2026-10-12/baseline-status.txt\n?? research/j3-lag-2026-10-12/baseline.json\n?? research/j3-lag-2026-10-12/end-21280.h5\n?? research/j3-lag-2026-10-12/incremental.diff\n?? research/j3-lag-2026-10-12/results.json\n?? research/j3-lag-2026-10-12/start-20760.h5\n?? research/j3-lag-2026-10-12/trajectory.h5\n?? research/j3-offline-2026-10-12/REVIEW.md\n?? research/j3-offline-2026-10-12/lags.csv\n?? research/j3-offline-2026-10-12/localization.png\n?? research/j3-offline-2026-10-12/regions.csv\n?? research/j3-offline-2026-10-12/results.json\n?? research/j3-reservoir-2026-10-12/REVIEW.md\n?? research/j3-reservoir-2026-10-12/baseline-status.txt\n?? research/j3-reservoir-2026-10-12/baseline.json\n?? research/j3-reservoir-2026-10-12/incremental.diff\n?? research/j3-reservoir-2026-10-12/results.json\n?? research/repair-2026-10-10/TRON_HANDOFF.md\n?? research/repair-2026-10-10/baseline-hashes.json\n?? research/repair-2026-10-10/baseline-status.txt\n?? research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff\n?? research/repair-2026-10-10/classic-results.json\n?? research/repair-2026-10-10/classic-signals.npz\n?? research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h\n?? research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h\n?? research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h\n?? research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h\n?? research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb\n?? research/repair-2026-10-10/provenance.json\n?? research/repair-2026-10-10/repair-architecture.md\n?? research/repair-2026-10-10/repair-numerical.md\n?? research/repair-2026-10-10/repair-state.md\n?? src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh\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/collision_regression.cpp\n?? tests/unit/cpp/planar_velocity.cpp\n?? tests/unit/cpp/reservoir.cpp\n?? tests/unit/cpp/semantic_regression.cpp\n?? tests/unit/cpp/slot_profile.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_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/MULTIGRID_VERIFICATION_STRATEGY.md\n?? tests/validation/multigrid/cpu_reference.py\n?? tests/validation/multigrid/cpu_reference_v0.2.py\n?? tests/validation/multigrid/cpuref_0_3_evidence/README.txt\n?? tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md\n?? tests/validation/multigrid/cpuref_0_3_evidence/baseline.json\n?? tests/validation/multigrid/cpuref_0_3_evidence/manifest.json\n?? tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json\n?? tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt\n?? tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt\n?? tests/validation/multigrid/local_stress_observable_v1.py\n?? tests/validation/multigrid/local_stress_v1_evidence/README.txt\n?? tests/validation/multigrid/local_stress_v1_evidence/TABLE_local_stress_observable_v1.md\n?? tests/validation/multigrid/local_stress_v1_evidence/baseline.json\n?? tests/validation/multigrid/local_stress_v1_evidence/comparison.json\n?? tests/validation/multigrid/local_stress_v1_evidence/manifest.json\n?? tests/validation/multigrid/local_stress_v1_evidence/results_horsea.json\n?? tests/validation/multigrid/local_stress_v1_evidence/run_once.py\n?? tests/validation/multigrid/local_stress_v1_evidence/source_manifest.json\n?? tests/validation/multigrid/local_stress_v1_evidence/stdout_horsea.txt\n?? tests/validation/multigrid/local_stress_v1_evidence/stdout_local_stress_observable_v1.txt\n?? tests/validation/multigrid/shear_diagnostic_v0_2.py\n?? tests/validation/multigrid/shear_v0_2_evidence/README.txt\n?? tests/validation/multigrid/shear_v0_2_evidence/baseline.json\n?? tests/validation/multigrid/shear_v0_2_evidence/comparison.json\n?? tests/validation/multigrid/shear_v0_2_evidence/joint_report.md\n?? tests/validation/multigrid/shear_v0_2_evidence/manifest.json\n?? tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json\n?? tests/validation/multigrid/shear_v0_2_evidence/run_once.py\n?? tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json\n?? tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt\n?? tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt\n?? tests/validation/multigrid/test_cpu_reference.py\n?? tests/validation/multigrid/test_open_corner_negative_control.py\n?? tests/validation/multigrid/test_tron_additions.py\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", + "hash_scope": "Tracked/nonignored regular project files plus prior baseline; excludes ref, symlinks, bytecode.", + "hashes": { + ".cursor/rules/cuda-style.mdc": "5810cf8cff793a11ba5dedafaa8a4e7d7d3debb728d837ca1903ff6dc8d6fdb9", + ".cursor/rules/project-layout.mdc": "aeed1cd9d48447bcfcfb6a77250af7c5a3d500de4c6b2591c5684696fa04c3ec", + ".cursor/rules/python-style.mdc": "ece75cb724d7dc46cb8dab7ecf8d710a90b503001da0d506ea4bf772ce395e21", + ".cursorignore": "9f072faa815a6c6d4dc791a424201404f0f623338681ae3d2fcbdf86db1bd035", + ".gitignore": "de25151f4cfdf29ca64032e509398e1829c7ded2449ccff803b2fd87d859ae6c", + "LICENSE": "e98392425e9a0007d0d69f0f7c912c2dc1b59061a6197223962aac45599c76ea", + "README.md": "982d0df8b766b1d5017ba702b75e8b3cec8d22f57af8f434be27ea251652596c", + "docs/audit/audit_round2.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "docs/audit/body_refactor_notes.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "docs/audit/config_diagnosis.md": "b601652df0cac36a8faf2b317b11853221353716a25184cd9b2dc41373a7f183", + "docs/audit/kernel_layer_audit.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "docs/design/README.md": "98242c6960866d9b75aaf363f703edf02c4210bc38da1a340e9f6add49c6a3ce", + "docs/design/integrated_architecture.md": "c26b0d301321fe4b86d83d11c7e0b8d0c0545ee2995afa563966f004e9788132", + "docs/design/multi_level_grid_architecture.md": "e56a67d9129f2e3c311342e21a3fb2ed14bd492dd881949b251d5d9ac577bdee", + "docs/design/multi_level_summary.md": "eebf23e0bec9b154e5ce2128e2806e7558a7d4824b2c700cfd16afd1158b2354", + "docs/design/multi_level_visual_reference.md": "cad4bfbd561e5650ec297334529334b662a1ed35f7373c61f34ee22ecf1f66bd", + "docs/design/spatial_coupling_refinement.md": "36c878c7afad524999d89fa842297a98a0433e0283e78b36ca734ddbf8723ed8", + "docs/multilevel_grid_architecture_analysis.md": "90309730b1759d63531cb258c30db990ab71ca1b56ae47d0bbe2f4e2ae52012c", + "docs/performance_analysis.md": "ba01aaa4d3c02b61a8dc55fd00518ac291ebbed79b6574190d6b7234a1158fcb", + "docs/tests_overview.md": "ffc9591fd7baa4261b2c1ce9cfa7aa13a3554a8d5df712035806266a5eaade3f", + "docs/validation_specs/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "docs/validation_specs/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "docs/validation_specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "docs/validation_specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "docs/validation_specs/exp_ctrl_matrix.md": "b7250576c23292988b6ef4bcfd080f611d41edc413c3cebd0eadcc8596049470", + "docs/validation_specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "output/round3_compatibility_summary.md": "319f2e6abde4b34cc4ec90ef461d8ebb85dd5a3ac1736cfa7a3fb110f2a69df9", + "pyproject.toml": "f24ab9ad3a6a728a9382b1bce2e721612fc76635f35c6f96dfddaa853b6e5a9c", + "research/audit-2026-10-09/REVIEW.zh-CN.md": "2841fd3aa7a6baedbe1079d90915c8b05212b133824ed6abccaa1f09656eaefe", + "research/audit-2026-10-09/architecture-cpu-results.json": "e1b809210005c8765b13fddbb5ed710d15f6fcbb4c5788a4064f3e88808433ef", + "research/audit-2026-10-09/architecture-report.md": "861079dc3f4ced9fdc41bfb22002d32e190c0d630d3ba2f138f9dc7a949b8371", + "research/audit-2026-10-09/numerical-report.md": "970330b3a593f79f09866ce6ae82bc0ddd81226230d0a6ff06ae8ae756ee80da", + "research/audit-2026-10-09/numerical_collision_results.json": "51e5c263bb8cde82cedef2ccfdbf5ef657742a80218d7896b1ff877516e59693", + "research/audit-2026-10-09/numerical_compile_results.json": "c3b0ae02072a2ec408ada7513b542ec255f6855cb743a3ed7f91bd8f31504f44", + "research/audit-2026-10-09/numerical_semantics_results.json": "b95b065b594aa2911740dab216f87936c9bf7f7fa25acfda93b5738443564035", + "research/audit-2026-10-09/root-initializers-report.md": "ca448457c444949d5d0e1e10fa7121064510b77fc4c3512580900f0299219867", + "research/audit-2026-10-09/state-report.md": "f8708807efc2e109810c5955f7c1884a932668c0b3cb2963c2df3b09f2a3d5c4", + "research/audit-2026-10-09/state_results.json": "da9170df3e11231c73f20e5e79ed68e08966673d1dd52004ea6b6a279afc0dcd", + "research/design-2026-10-09/Contracts.lean": "2442d9a778ef20e8af3fecf23be6fea6d73c6299ff744c9664b652bc5ee3f034", + "research/design-2026-10-09/PLAN.zh-CN.md": "0341dd7ee306a040340c8e5dedb07a109e931c27dbf3c994d072aa78e3b6bc67", + "research/design-2026-10-09/api-architecture-study.md": "d6fb45ec784f0e1db55fb9f34e137b9f551db0b9b39fd4f0ef247a78fc34eedf", + "research/design-2026-10-09/grid-study.md": "4435dc1275ec5e15b118becc6ac391f306195d1e5beaa58037b1aff3bb2465c7", + "research/design-2026-10-09/jet-study.md": "a362142ef04a5ad5dbb4c9db9d221b1199dccec53780c8f2da49a15201cfe529", + "research/design-2026-10-09/jet_closure_check.py": "fde45d0f8518740ef5c0bf0fe7635d6adaf9a2e789927dd4e68e991c138ddc30", + "research/design-2026-10-09/jet_closure_results.json": "12cf7d400a206f9f9ec9ea6ad251fe6bb0232e27bcbed22fbc1ead2c0fc7d249", + "research/design-2026-10-09/math-and-history.md": "64f8c82e4949d6f58b46faa09800958714859c36cad20bbeeae8b449ae7a6099", + "research/design-2026-10-09/math-checks.json": "94750381954317cde8d649db26beaed8ea945666572a05030ca2b4d97d384011", + "research/design-2026-10-09/math_checks.py": "4254983a783fe4bad8888b3d7c243c87d991c7bbf242edb0f56f25cbaefee890", + "research/j1-2026-10-12/REVIEW.md": "13004a4f140acdcf59acb57e9e2dda1bb95763d30060f822a7c206c94b813a9f", + "research/j1-2026-10-12/baseline-status.txt": "ac398360e05b746b89ae0c3acfe202b5122e650a3bb1ff234ab26f874a303e64", + "research/j1-2026-10-12/baseline.json": "ad7afdf7b3913d11c07343e971fe2f43c2d1a2b99e3d5904a6ba89e3bb0b24fb", + "research/j1-2026-10-12/checkpoint-gpu.log": "adfe3d77d2e6c6f6184dccc0267b4404b20a7709505d5ff5affed0ed4a618083", + "research/j1-2026-10-12/cpu.log": "60cac097f7c4f11401df2aacb43a248640555e7628d2829c4680c71db34e9640", + "research/j1-2026-10-12/gpu-validation.log": "d1e9f2aea17a85eddcd94b81c700738ce073214857b55c28abd1219ff1edbed7", + "research/j1-2026-10-12/gpu.log": "8659a78ea52bbf8eb923d46ea71636ce63cd322352d5c98a74f631e666dd8cfb", + "research/j1-2026-10-12/incremental.diff": "a454c23da7b0011645949c0fbf64d0c41ecfdab5642b1b7c5119868005d3c721", + "research/j1-2026-10-12/results.json": "449f8a17dacac0fc6d2489c4b10bac330dbbbdb38fad3ce54f739ac8c6d48e85", + "research/j2-slot-2026-10-12/REVIEW.md": "10c4a94ffc32e0a2c4e0f6593b7cfc28479b5869f279f0b9d0b708fa3a47d1e6", + "research/j2-slot-2026-10-12/baseline-status.txt": "812616e2d941efcf854e1b37d6e662dda1aaf2b69074fcc04017133e13b72166", + "research/j2-slot-2026-10-12/baseline.json": "e82a1844145fd0cbc585c581b29f80b56193f122cfe1dfa7578f26904a720285", + "research/j2-slot-2026-10-12/cli.log": "9482ad7101d501f27f92e204b2f3ae5c6d91bd887b525aa31cb4a2a188f3cb92", + "research/j2-slot-2026-10-12/cpu.log": "91aba5961006909fbbb860429a9d3cfc930112a0d74c7788bc51c0a5897b47e5", + "research/j2-slot-2026-10-12/gpu-serialization-failure.log": "df804e53b35e7ddaad79a17842b4b5fd9d834e29ca2d56edb00e835848d09200", + "research/j2-slot-2026-10-12/gpu-validation.log": "223351b52c70fa4523289f3a1b3db435a11286379253280470900ffe397580a6", + "research/j2-slot-2026-10-12/incremental.diff": "c9e391bc91438cd912c1ed5a419705d4388522f672c67a066cfc055e814e699f", + "research/j2-slot-2026-10-12/results.json": "7d35ca7989aed5380e0a45de7f583972566fc516a051da63c53b35514e267494", + "research/j3-coverage-2026-10-12/REVIEW.md": "7293f3f3442855c8521698605aab504e026915a7bf1e77f5a24710d89a812443", + "research/j3-coverage-2026-10-12/baseline-status.txt": "31c949b11b20d7cd4202dba16882b5712aa1653da0cb2da2f0ebd69bf488040e", + "research/j3-coverage-2026-10-12/baseline.json": "d8844104f2665a25bfc417ee29becf89ab3955fac9105b5ddb12cfb1fe2a55b0", + "research/j3-coverage-2026-10-12/gpu-validation.log": "505cd5a5db46d7984aefb2a614151c25c4ace0e7d2a52e02c3e4f9792fd8eb95", + "research/j3-coverage-2026-10-12/incremental.diff": "98aa7855d5d6b91b4509a924c8a5aabab4339ba29c7e7dc2d91262c48e3848ca", + "research/j3-coverage-2026-10-12/negative-budget-20744.h5": "c09d75fc4a2cff68039a0956bd9d32b79b9cd3a6b386c72b4db54c214b110cd8", + "research/j3-coverage-2026-10-12/negative-end-20760.h5": "bd0bd063579d625e358762b1fdde5ac11bfcf739646a847fb77a4a2031011b9b", + "research/j3-coverage-2026-10-12/restart-21280.h5": "3e89c12c16f91f76ca9acd909e0fa7d42df6fbb5e870b299aa08ca42bc3e3dc9", + "research/j3-coverage-2026-10-12/restart-reference-21296.h5": "7192f510dd7820675aa1de130f55514136fba782cf77f92545189918a7e0c328", + "research/j3-coverage-2026-10-12/results.json": "02460981ad49c9cc13b4246abad1d8afd2599c61bfb545a6e32da9bbcd5c0db1", + "research/j3-coverage-2026-10-12/verification.json": "205986efd2b41635721b7fd20288be982348c765180102c7102750ba088f3a28", + "research/j3-lag-2026-10-12/REVIEW.md": "f388b64b0cc0413dc9865afda90ed24de666dda0d6cdb821b4363ce1b73631b3", + "research/j3-lag-2026-10-12/baseline-status.txt": "e0b69879084f54afac1a3bc3701f1de9819068190c815ae84421f02f83cad9f7", + "research/j3-lag-2026-10-12/baseline.json": "5e9a920813fe3d775110af85af92970d5245a7040ace804445e432353b77e489", + "research/j3-lag-2026-10-12/end-21280.h5": "19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588", + "research/j3-lag-2026-10-12/gpu-availability.log": "b227a519b8286849cfdf842573bd451803da048c6b27af9517f6b8964cd3aa39", + "research/j3-lag-2026-10-12/gpu-diagnostic.log": "97956b517072b7c34e2e29e2a23f87eafb19b9eda786a4b8149e4a2eaed76ee9", + "research/j3-lag-2026-10-12/host-check.log": "b2b6d262934b3abf9e0f0bdbde14b339cb977f7bffe391c17b51b5d067862dda", + "research/j3-lag-2026-10-12/incremental.diff": "ebdf66c72daf17b926482f79a1a30bf0eb2d27fc930a7bb62e5449ebcf72fcc7", + "research/j3-lag-2026-10-12/results.json": "00435ac7e402943e55e702fac1beb5af8cafe71967999658bcde2b29077b1fa8", + "research/j3-lag-2026-10-12/start-20760.h5": "6c4cba5928c77566c2afc32231311a3986831c18fea766faadebb101243399e2", + "research/j3-lag-2026-10-12/trajectory.h5": "2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986", + "research/j3-offline-2026-10-12/REVIEW.md": "d9902c58498e73c29e054b23adb968f7e1e14421cba5c58d03bbc5a50159ae79", + "research/j3-offline-2026-10-12/cpu-analysis.log": "bc02a9b197fc15ae1b503ca54655a7622d4361f9b45b7848ff9c387ea3665f11", + "research/j3-offline-2026-10-12/lags.csv": "fbd9addd413f24c47f4411317e872265bb774e8e1724fe169412befa860ae94d", + "research/j3-offline-2026-10-12/localization.png": "a72907638e32b0ecfc2205bea438e7b408f40aad86217ce6ad9b4877840c9cfc", + "research/j3-offline-2026-10-12/regions.csv": "3a8fc640b61d70e3b7f73d2bf8ac2bd3f720adf39a90dfda6180430e0489efae", + "research/j3-offline-2026-10-12/results.json": "cdb857bea6f4e06ed15acf773505ce6d5147f8cb8ce0a53cc368ee267cde6361", + "research/j3-reservoir-2026-10-12/REVIEW.md": "1ea5f860728584ea6cbe40ba3994e40471102d8e2cf6d93e28fe47222cba0cab", + "research/j3-reservoir-2026-10-12/baseline-status.txt": "0ef1a8c9878c4053ebc1a7d4bace6d4ec38bf27ace167b4239ddbb1c6c897e20", + "research/j3-reservoir-2026-10-12/baseline.json": "847fefd1eae971985d34d04d89ee6d6f1c91f6940c54fe351d112faba7bc6838", + "research/j3-reservoir-2026-10-12/cpu.log": "b33f6c1a1b0ee67968c4cff85d491e46e30e0d6c796b552629714ab8b5dcead0", + "research/j3-reservoir-2026-10-12/gpu-availability-sandbox.log": "1d58470512e583a0acfabf6896ee5f31e5b493b8231aed54b864f64eb275b02c", + "research/j3-reservoir-2026-10-12/gpu-validation.log": "ff04024db197e332f37c912a96413e3251fd0186947348ffbc33af6f4a899f2c", + "research/j3-reservoir-2026-10-12/incremental.diff": "fae312831d71e46dd477a640b06ed927853a9e735d26bf9f5868927fa31cfa56", + "research/j3-reservoir-2026-10-12/results.json": "49685de7679a14860258abf1753aaa6d116ad709b868d907ddb40e74c9b845ea", + "research/repair-2026-10-10/TRON_HANDOFF.md": "f8aaa3d99cd133c2055d4adf396a0a57d14f6006aea19e87611bd1c2c1b53a88", + "research/repair-2026-10-10/baseline-hashes.json": "d6a7d5f9ec5bceb0e7927d55603d9c5e70105982cd945723454659b19ab476e6", + "research/repair-2026-10-10/baseline-status.txt": "074088d793014e3b8154c58718058c7d300fb45595f5129fa957ef1e4cec38e2", + "research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff": "292b4bafe7a62d4fbbf7c165eb99929336edfcaa16b15f34f72ab71fcd928391", + "research/repair-2026-10-10/classic-results.json": "a5d15305f516fd378b54cf9029102be58a83a55a7bad4b8e058fcfe0cc9898f4", + "research/repair-2026-10-10/classic-signals.npz": "820c9a0b0713d7455f0a5839ac2cd5ee706086d1a26461225dcdb095673421e2", + "research/repair-2026-10-10/final-gpu.log": "988bb97256d17b88c14f3793b15880d727ecb285abe62e7d2ae27a16729651c3", + "research/repair-2026-10-10/final-unit.log": "a892a39ecf88125558538cadce2cb5dc46d106b993b164e03da4ebb0eee68cef", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "research/repair-2026-10-10/provenance.json": "a81b7e32ecf7182c9617df1b39bbb063a05ef89290ad501bac4573cd5e8a6832", + "research/repair-2026-10-10/repair-architecture.md": "49be42ff5c994017f3175e17efda14d84f0b68f8ecd239f66ccee38415b60c5a", + "research/repair-2026-10-10/repair-numerical.md": "0272ebfa8c519aad161c520542cf53156574661609b91fd5ccad7955fdf2bd7b", + "research/repair-2026-10-10/repair-state.md": "4d4aa1ec0c11a87d2c8380912e7ed74cf5c910ae42e5cc529effde36c9020969", + "research/repair-2026-10-10/simplification-checks.log": "c9f15e870d02003480adf1a7f2fe4a9aca66c1934c4477619f05c8a4798ba85b", + "setup.py": "bf07df7ec19de56710d2bb5f61873e09710cd059d46837dc3aa54f3e09ff9e06", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/checkpoint.py": "5b7caf3896167a3f37c539b58837de6eb3f8085fa7bf5f821a09666cc16d43a4", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/config.py": "2f1bba7515f5bc08cb3a8d140bcafe7fa0689e01b3b06494697bb2956a71530e", + "src/CelerisLab/configs/CONFIG.md": "41cafdbe525366c08aa9d0416ea026ccf0026ba7123b8a9b65f968a80d928e3a", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/cuda/compiler_v2.py": "c4cc3ec4445c8d75e6a253dd87963877117a722bc73b9d4811806fc6045d08c1", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "f9f8242b38e8e0cf8425b75e2b0215bc15363c62eaa0fb43c761b8e0931bfdc9", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/simulation.py": "34d69e71844f553790c5a2bed0f8fbfb912a9498e95b500d1ef2ad41cae3b424", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/unit/cpp/reservoir.cpp": "c3eacaf0271400eb45ad559b571a8f7faa2a809d5f1857ffeb5592addce2cd0c", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/cpp/slot_profile.cpp": "31ac58ccab175bf79fa59fc46d4c0842df18ab0a5e5916be84760d9da2b75788", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_planar_velocity.py": "b656da0880b4234b1db805544edbe0d2473cbcc7c2c869c71d8251337f62a982", + "tests/unit/test_reservoir.py": "e718c78a53c3941aba7feb8ae4e8bb0b1726c1145de84febf91220c1917991c9", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_slot_velocity.py": "6a9494de9a32c350389ccbed58af48951f6b25a21a258537d2e8b73eb67cb11d", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/validation/analyze_j3_saved_frames.py": "438f67dac682b94c4950626f8de4fdcde48c3a4e9ecf8fdf1b0ada4b6e0e781a", + "tests/validation/diagnose_j3_lags.py": "286fcd65b3261667a847b9b26e213d0af92cf459faa6bbd774f78c8479ce31d7", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/multigrid/cpu_reference.py": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "tests/validation/multigrid/cpu_reference_v0.2.py": "b6adbad7da625ef6a6b97958ea9625030ed92676d0cada48e061c87bcf7ca8c9", + "tests/validation/multigrid/cpuref_0_3_evidence/README.txt": "1947ee0232b88b3cc2c506d0b0af5ba051ecc94aa8f7f09228ef3939cc95919b", + "tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md": "065947e15b2242bce7d3eb05a3acdbb59939c621dcd5d31540ad4a1bd4416818", + "tests/validation/multigrid/cpuref_0_3_evidence/baseline.json": "0daaccee41cabeb17a00e2405e2c7fd0b80d36f2d01778eb39c9fd22b13d2d47", + "tests/validation/multigrid/cpuref_0_3_evidence/manifest.json": "2850ecaf2e19d010ba35eb54162371d82cc1a092831e08a03b6adf75a614988b", + "tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json": "914389afc39752bcd4132aa21fc8d5cbcf0ca75b1efd6a49becab15c2fa3361b", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt": "73e4ef01138842981daaa534390f1463839e63833c11f4e8872f94f8eaadc717", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt": "457f1d2173496554c87ca6e61df518c0b8f1e0a28cdfd94b94ebbb61bc459d70", + "tests/validation/multigrid/local_stress_observable_v1.py": "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456", + "tests/validation/multigrid/local_stress_v1_evidence/README.txt": "4f62314876047ee437bb9ecbf84798d2a9f6e85f6a3aef260277b85bcdb35fae", + "tests/validation/multigrid/local_stress_v1_evidence/TABLE_local_stress_observable_v1.md": "d8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501", + "tests/validation/multigrid/local_stress_v1_evidence/baseline.json": "64f6541447afbd15b1b15d802ad6f1b5042aaf84e7d4d2414e4ed4c52cf70507", + "tests/validation/multigrid/local_stress_v1_evidence/comparison.json": "be236671a501c31c06f7e266f6e0c0c2a89aede321a483452050ff37bf84c84a", + "tests/validation/multigrid/local_stress_v1_evidence/manifest.json": "3a9fa8c7d691c1b8c24f05940eb724d30b890dd8ed636551068d2633d7db2f70", + "tests/validation/multigrid/local_stress_v1_evidence/results_horsea.json": "f17b4644d19eb75d55deb7021ab679cb9e7922a2b46f1cacf8b6da6bfb9a2690", + "tests/validation/multigrid/local_stress_v1_evidence/run_once.py": "e629800291ef65ffea8555f66ec80bf15200552540b2a493a677bfb53d0830b3", + "tests/validation/multigrid/local_stress_v1_evidence/source_manifest.json": "d2cf90b73458f493c665c9a281d06aef0c190cf0d143639fb77ab838c78f020c", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_horsea.txt": "882f2cfb1dbdf82cce63c011397e7c2e6307bbcfec42a3510648d328cd6ddcfe", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_local_stress_observable_v1.txt": "6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4", + "tests/validation/multigrid/shear_diagnostic_v0_2.py": "a8b1cf2f7abd00efc4d068bbd27bb2317144a6ca4c545d9b2e0dcf421eadebc6", + "tests/validation/multigrid/shear_v0_2_evidence/README.txt": "4306a34b6896bd6e7a5c2ca71d68e18450359239d0c7ad7a67a4e83e7155959a", + "tests/validation/multigrid/shear_v0_2_evidence/baseline.json": "98a7853341ea732762c7506694e3a867a7259bf110e9e461ea84f741fd9ab829", + "tests/validation/multigrid/shear_v0_2_evidence/comparison.json": "41c00372099dd04b6d323785e9eaf4fec09da1753d3d150ffa230800f904142f", + "tests/validation/multigrid/shear_v0_2_evidence/joint_report.md": "1860b8082108c8b8a87998af90cd0b81dce1c04e9f6c67b41e0912f9fef6cc9c", + "tests/validation/multigrid/shear_v0_2_evidence/manifest.json": "e42aa19e91608164698bea42da88fbbfab8b0f87cc37b27c5baf165453a4fdb0", + "tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json": "c2d7ce8d16a0f47baff0788a153353dcf67088da974d9cd3d521b04ecd91ee05", + "tests/validation/multigrid/shear_v0_2_evidence/run_once.py": "6698a2e040c56be949b809387d4518eb0ba82d34cc9d99640da4f8bf3c35c23f", + "tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json": "56fbd0259ff3d4dbd14ace52f64e249a435e9df91732b0e4027def2c344c2e6a", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt": "28ddd1267ca91a772f5a6bfc65d949c9a4ea7dac5c9ba3a0bdb168492810b670", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt": "0577df5b3f5cb3c7b6e1ef2de71344f8fd3e6d959117487a06cbaf7f2afa3dea", + "tests/validation/multigrid/test_cpu_reference.py": "ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca", + "tests/validation/multigrid/test_open_corner_negative_control.py": "59a6f8ca80cdd63cb7827fbebf9b4b555c3793f19dd6bca801544ec10b5cbe1b", + "tests/validation/multigrid/test_tron_additions.py": "8e7a6a90b85e64c7326719e7b8bca2f6d34fb4c80690f0685f7e291ab93bd2a4", + "tests/validation/run_j1.py": "51b758a271ff358f931b3140a80082294a67e66c2fec0f8c19319e37f92aadc4", + "tests/validation/run_j2_slot.py": "b7d2d3aa06fcafc3ac62ed4a50892afbdb7f86e5720ce75a39ce317b6f571dad", + "tests/validation/run_j3_coverage.py": "329869519b7078e854d96241a7aad8ef93f35ac9be83f0be502c3a93523c3b13", + "tests/validation/run_j3_reservoir.py": "47535bc3569ce68c888d38978bc4f9077fd763a17829c20c081be52bb18a2903", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9" + } +} diff --git a/research/refinement_prepare_20261013/incremental.patch b/research/refinement_prepare_20261013/incremental.patch new file mode 100644 index 0000000..0ddb325 --- /dev/null +++ b/research/refinement_prepare_20261013/incremental.patch @@ -0,0 +1,317 @@ +diff --git a/src/CelerisLab/lbm/refinement.py b/src/CelerisLab/lbm/refinement.py +new file mode 100644 +index 0000000..0a6f563 +--- /dev/null ++++ b/src/CelerisLab/lbm/refinement.py +@@ -0,0 +1,138 @@ ++"""CPU preparation for one fixed D2Q9 2:1 patch; no coupled stepper yet. ++ ++Cell indices use y*nx+x; population slots use q*(nx*ny)+cell, matching ++core/layout.cuh. Bounds are half-open (x0, y0, x1, y1) in coarse cells. ++The four fine halo cells implement the pinned CPUREF volumetric geometry. ++Topology does not encode physical boundary conditions or obstacle safety. ++""" ++from dataclasses import dataclass, replace ++from numbers import Integral ++ ++import numpy as np ++ ++from ..config import LBMConfig ++from .descriptors import D2Q9_EX, D2Q9_EY ++ ++ACTIVE, INNER_GHOST, OUTER_GHOST = 0, 1, 2 ++HALO = 4 ++ ++ ++def _readonly(values, dtype): ++ array = np.ascontiguousarray(values, dtype=dtype) ++ array.setflags(write=False) ++ return array ++ ++ ++@dataclass(frozen=True, eq=False) ++class FixedPatch2D: ++ """Layer metadata and compact exchange tables, constructed by from_config. ++ ++ Shapes are (ny, nx), including the fine halo. ``fine_origin`` is its lower ++ cell edge in coarse physical units, with coarse dx=dt=1 and fine dx=dt=.5. ++ ``ghost_fine`` and ``ghost_coarse`` pair fine cells with coarse donors. ++ ``coalesce_coarse`` contains incoming population slots; each corresponding ++ row of ``coalesce_fine`` contains four fine slots in (dy, dx) row order. ++ Weights are all 1/4. Closed corner links are included even when the coarse ++ donor is uncovered. These tables contain no DDF data and allocate no GPU. ++ ++ This is preparation, not permission to advance these levels with OneStep: ++ its channel boundaries and fused collision do not implement patch coupling. ++ """ ++ coarse_shape: tuple[int, int] ++ bounds: tuple[int, int, int, int] ++ tau_coarse: float ++ tau_fine: float ++ fine_kind: np.ndarray ++ ghost_fine: np.ndarray ++ ghost_coarse: np.ndarray ++ coalesce_coarse: np.ndarray ++ coalesce_fine: np.ndarray ++ ++ @classmethod ++ def from_config(cls, cfg: LBMConfig, bounds) -> "FixedPatch2D": ++ """Prepare maps without changing cfg or allocating coarse-sized tables. ++ ++ The initial backend contract is D2Q9/SRT/FP32/unshifted/double_buffer, ++ without LES. Two coarse cells of margin keep all halo donors in bounds; ++ this does NOT certify that those donors are fluid or periodic. ++ """ ++ checked = replace(cfg) ++ checked.validate() ++ if (not checked.is_d2q9 or checked.collision != "SRT" ++ or checked.streaming != "double_buffer" ++ or checked.store_precision != "FP32" ++ or checked.ddf_shifting or checked.les_enabled): ++ raise ValueError("FixedPatch2D requires D2Q9/SRT/FP32/unshifted/double_buffer without LES") ++ bounds = tuple(bounds) ++ if len(bounds) != 4 or any(isinstance(v, (bool, np.bool_)) ++ or not isinstance(v, Integral) for v in bounds): ++ raise ValueError("bounds must be four integers: (x0, y0, x1, y1)") ++ x0, y0, x1, y1 = bounds = tuple(map(int, bounds)) ++ nx, ny = checked.nx, checked.ny ++ if not (2 <= x0 < x1 <= nx - 2 and 2 <= y0 < y1 <= ny - 2): ++ raise ValueError("patch must be nonempty with a two-coarse-cell margin") ++ fx, fy = 2 * (x1 - x0) + 2 * HALO, 2 * (y1 - y0) + 2 * HALO ++ if max(nx * ny, fx * fy) > np.iinfo(np.uint32).max: ++ raise ValueError("layer cell counts exceed uint32 indexing") ++ tau_c = 3.0 * checked.viscosity + 0.5 ++ tau_f = 6.0 * checked.viscosity + 0.5 ++ if not checked.omega_min <= 1.0 / tau_f <= checked.omega_max: ++ raise ValueError("fine relaxation rate lies outside configured omega guards") ++ ++ kind = np.full((fy, fx), OUTER_GHOST, dtype=np.uint8) ++ kind[2:-2, 2:-2] = INNER_GHOST ++ kind[HALO:-HALO, HALO:-HALO] = ACTIVE ++ gy, gx = np.nonzero(kind != ACTIVE) ++ ghost_fine = gy * fx + gx ++ ghost_coarse = (y0 + (gy - HALO) // 2) * nx + x0 + (gx - HALO) // 2 ++ ++ targets, sources = [], [] ++ # Only the outside ring can receive fine-to-coarse populations. ++ # Integer doubled midpoints include all eight diagonal corner passes. ++ for y in range(y0 - 1, y1 + 1): ++ xs = range(x0 - 1, x1 + 1) if y in (y0 - 1, y1) else (x0 - 1, x1) ++ for x in xs: ++ for q in range(1, 9): ++ mx, my = 2 * x + 1 - D2Q9_EX[q], 2 * y + 1 - D2Q9_EY[q] ++ if 2 * x0 <= mx <= 2 * x1 and 2 * y0 <= my <= 2 * y1: ++ targets.append(q * nx * ny + y * nx + x) ++ a, b = HALO + 2 * (x - x0), HALO + 2 * (y - y0) ++ sources.append([q * fx * fy + (b + dy) * fx + a + dx ++ for dy in (0, 1) for dx in (0, 1)]) ++ return cls((ny, nx), bounds, tau_c, tau_f, ++ _readonly(kind, np.uint8), ++ _readonly(ghost_fine, np.uint32), ++ _readonly(ghost_coarse, np.uint32), ++ _readonly(targets, np.uint64), ++ _readonly(sources, np.uint64).reshape(-1, 4)) ++ ++ @property ++ def fine_shape(self) -> tuple[int, int]: ++ return self.fine_kind.shape ++ ++ @property ++ def fine_origin(self) -> tuple[float, float]: ++ return self.bounds[0] - HALO / 2, self.bounds[1] - HALO / 2 ++ ++ @property ++ def table_bytes(self) -> int: ++ return sum(a.nbytes for a in (self.fine_kind, self.ghost_fine, ++ self.ghost_coarse, self.coalesce_coarse, ++ self.coalesce_fine)) ++ ++ def check_synchronization(self, coarse_steps: int, fine_steps: int, *, phase: str) -> None: ++ """Check a proposed backend handoff; does not convert or collide data. ++ ++ Production storage is g=C(f), while CPUREF returns arrival_f. A future ++ g-to-g coarse step must collide coarse cells once and fine cells twice; ++ fine halo ghosts never collide. Coalescence must precede coarse collision. ++ Converting reference f to g for comparison is an observation operation, ++ not an additional production collision. Counts here are completed steps. ++ """ ++ if phase != "postcollision_g": ++ raise ValueError("patch backend handoff requires postcollision_g") ++ for value in (coarse_steps, fine_steps): ++ if isinstance(value, (bool, np.bool_)) or not isinstance(value, Integral) or value < 0: ++ raise ValueError("step counts must be nonnegative integers") ++ if fine_steps != 2 * coarse_steps: ++ raise ValueError("levels are not synchronized: fine_steps must equal 2*coarse_steps") +diff --git a/tests/unit/test_refinement.py b/tests/unit/test_refinement.py +new file mode 100644 +index 0000000..bfe8e74 +--- /dev/null ++++ b/tests/unit/test_refinement.py +@@ -0,0 +1,167 @@ ++"""CPU geometry/contracts only: no time stepping, CUDA or reference edits.""" ++import hashlib ++import importlib.util ++from pathlib import Path ++import sys ++import unittest ++ ++import numpy as np ++ ++from CelerisLab.config import LBMConfig ++from CelerisLab.lbm import refinement ++from CelerisLab.lbm.descriptors import D2Q9_EX, D2Q9_EY ++from CelerisLab.lbm.refinement import ACTIVE, INNER_GHOST, OUTER_GHOST, FixedPatch2D ++ ++ROOT = Path(__file__).resolve().parents[2] ++ ++ ++def config(**kwargs): ++ return LBMConfig(**dict(nx=16, ny=16, viscosity=.1, **kwargs)) ++ ++ ++class FixedPatchTests(unittest.TestCase): ++ def test_source_and_cpu_import_boundary(self): ++ self.assertEqual(Path(refinement.__file__).resolve(), ++ ROOT / "src/CelerisLab/lbm/refinement.py") ++ self.assertFalse(any(name == "pycuda" or name.startswith("pycuda.") for name in sys.modules)) ++ self.assertNotIn("CelerisLab.simulation", sys.modules) ++ self.assertNotIn("CelerisLab.lbm.field", sys.modules) ++ ++ def test_all_tables_match_pinned_reference_without_advancing(self): ++ path = ROOT / "tests/validation/multigrid/cpu_reference.py" ++ self.assertEqual(hashlib.sha256(path.read_bytes()).hexdigest(), ++ "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e") ++ spec = importlib.util.spec_from_file_location("refinement_geometry_reference", path) ++ ref = importlib.util.module_from_spec(spec) ++ sys.modules[spec.name] = ref ++ spec.loader.exec_module(ref) ++ maps = ref.build_maps(ref.make_spec(collision="srt")) ++ p = FixedPatch2D.from_config(config(), (4, 4, 12, 12)) ++ np.testing.assert_array_equal(p.fine_kind, maps.fine_class) ++ gy, gx = np.nonzero(~maps.fine_active) ++ np.testing.assert_array_equal(p.ghost_fine, gy * 24 + gx) ++ np.testing.assert_array_equal(p.ghost_coarse, ++ maps.fine_parent[gy] * 16 + maps.fine_parent[gx]) ++ targets = [q * 256 + y * 16 + x for q, y, x in maps.coalesce] ++ sources = [[q * 576 + b * 24 + a ++ for b in (4 + 2 * (y - 4), 5 + 2 * (y - 4)) ++ for a in (4 + 2 * (x - 4), 5 + 2 * (x - 4))] ++ for q, y, x in maps.coalesce] ++ np.testing.assert_array_equal(p.coalesce_coarse, targets) ++ np.testing.assert_array_equal(p.coalesce_fine, sources) ++ self.assertEqual(len(targets), 100) ++ self.assertEqual(len(set(p.coalesce_fine.ravel().tolist())), 400) ++ self.assertEqual(np.count_nonzero(p.fine_kind == ACTIVE), 256) ++ self.assertEqual(len(p.ghost_fine), 320) ++ self.assertEqual(self.corner_pass_count(p), 8) ++ ++ @staticmethod ++ def corner_pass_count(p): ++ ny, nx = p.coarse_shape ++ x0, y0, x1, y1 = p.bounds ++ count = 0 ++ for slot in p.coalesce_coarse.tolist(): ++ q, cell = divmod(slot, nx * ny) ++ y, x = divmod(cell, nx) ++ sx, sy = x - D2Q9_EX[q], y - D2Q9_EY[q] ++ count += not (x0 <= sx < x1 and y0 <= sy < y1) ++ return count ++ ++ def test_rectangular_shifted_patch_against_geometric_definition(self): ++ p = FixedPatch2D.from_config(LBMConfig(nx=22, ny=18, viscosity=.1), (7, 6, 13, 10)) ++ expected = set() ++ for y in range(18): ++ for x in range(22): ++ if 7 <= x < 13 and 6 <= y < 10: ++ continue ++ for q, (cx, cy) in enumerate(zip(D2Q9_EX, D2Q9_EY)): ++ if q and 7 <= x + .5 - cx / 2 <= 13 and 6 <= y + .5 - cy / 2 <= 10: ++ expected.add(q * 22 * 18 + y * 22 + x) ++ self.assertEqual(set(p.coalesce_coarse.tolist()), expected) ++ self.assertEqual(p.fine_shape, (16, 20)) ++ self.assertEqual(p.fine_origin, (5., 4.)) ++ fy, fx = p.fine_shape ++ for coarse_slot, children in zip(p.coalesce_coarse.tolist(), p.coalesce_fine.tolist()): ++ q, cell = divmod(coarse_slot, 22 * 18) ++ y, x = divmod(cell, 22) ++ centers = [] ++ for slot in children: ++ fq, fine_cell = divmod(slot, fy * fx) ++ b, a = divmod(fine_cell, fx) ++ self.assertEqual(fq, q) ++ self.assertEqual(p.fine_kind[b, a], INNER_GHOST) ++ centers.append((p.fine_origin[0] + (a + .5) / 2, ++ p.fine_origin[1] + (b + .5) / 2)) ++ np.testing.assert_array_equal(np.mean(centers, axis=0), (x + .5, y + .5)) ++ self.assertEqual(self.corner_pass_count(p), 8) ++ ++ def test_smallest_patch_and_extreme_halo_margin(self): ++ p = FixedPatch2D.from_config(LBMConfig(nx=5, ny=5, viscosity=.1), (2, 2, 3, 3)) ++ self.assertEqual(p.fine_shape, (10, 10)) ++ self.assertEqual(p.fine_origin, (0., 0.)) ++ self.assertEqual((int(p.ghost_coarse.min()), int(p.ghost_coarse.max())), (0, 24)) ++ self.assertEqual(np.count_nonzero(p.fine_kind == ACTIVE), 4) ++ self.assertEqual(self.corner_pass_count(p), 8) ++ self.assertTrue(np.all(p.fine_kind.ravel()[p.coalesce_fine % 100] == INNER_GHOST)) ++ ++ def test_config_and_level_scaling_are_isolated(self): ++ cfg = config() ++ before = vars(cfg).copy() ++ p = FixedPatch2D.from_config(cfg, (4, 4, 12, 12)) ++ self.assertEqual(vars(cfg), before) ++ self.assertAlmostEqual(p.tau_coarse, .8) ++ self.assertAlmostEqual(p.tau_fine, 1.1) ++ self.assertAlmostEqual((p.tau_coarse - .5) / 3, ++ (p.tau_fine - .5) / 3 * .5) ++ cfg.nx = 999 ++ self.assertEqual(p.coarse_shape, (16, 16)) ++ ++ def test_tables_are_compact_contiguous_and_readonly(self): ++ small = FixedPatch2D.from_config(config(), (4, 4, 12, 12)) ++ large = FixedPatch2D.from_config(LBMConfig(nx=512, ny=256, viscosity=.1), (4, 4, 12, 12)) ++ self.assertEqual(small.table_bytes, large.table_bytes) ++ self.assertEqual(small.table_bytes, 7136) ++ for name, dtype in (("fine_kind", np.uint8), ("ghost_fine", np.uint32), ++ ("ghost_coarse", np.uint32), ("coalesce_coarse", np.uint64), ++ ("coalesce_fine", np.uint64)): ++ array = getattr(small, name) ++ self.assertEqual(array.dtype, dtype) ++ self.assertTrue(array.flags.c_contiguous) ++ with self.assertRaises(ValueError): ++ array.flat[0] = 0 ++ ++ def test_invalid_geometry_and_index_overflow_rejected_before_allocation(self): ++ for bounds in ((4, 4, 4, 12), (12, 4, 4, 12), (1, 4, 12, 12), ++ (4, 4, 15, 12), (4., 4, 12, 12), (True, 4, 12, 12), ++ (np.bool_(True), 4, 12, 12), (4, 4, 12)): ++ with self.subTest(bounds=bounds), self.assertRaises(ValueError): ++ FixedPatch2D.from_config(config(), bounds) ++ for nx, ny, bounds in ((2**32, 10, (2, 2, 3, 3)), ++ (50000, 50000, (2, 2, 49998, 49998))): ++ with self.assertRaisesRegex(ValueError, "uint32"): ++ FixedPatch2D.from_config(LBMConfig(nx=nx, ny=ny, viscosity=.1), bounds) ++ ++ def test_unsupported_backend_and_fine_relaxation_rejected(self): ++ for kwargs in ({"collision": "TRT"}, {"collision": "MRT"}, {"streaming": "esopull"}, ++ {"ddf_shifting": True}, {"les_enabled": True}, ++ {"store_precision": "FP16S"}, {"lattice_model": "D3Q19"}, ++ {"data_type": "FP64"}, {"omega_min": 1.0}): ++ cfg = config(**kwargs) ++ before = vars(cfg).copy() ++ with self.subTest(kwargs=kwargs), self.assertRaises(ValueError): ++ FixedPatch2D.from_config(cfg, (4, 4, 12, 12)) ++ self.assertEqual(vars(cfg), before) ++ ++ def test_handoff_rejects_wrong_phase_and_unsynchronized_counts(self): ++ p = FixedPatch2D.from_config(config(), (4, 4, 12, 12)) ++ p.check_synchronization(0, 0, phase="postcollision_g") ++ p.check_synchronization(8, 16, phase="postcollision_g") ++ for c, f, phase in ((8, 16, "arrival_f"), (8, 15, "postcollision_g"), ++ (-1, -2, "postcollision_g"), (1., 2, "postcollision_g"), ++ (True, 2, "postcollision_g"), (1, np.bool_(True), "postcollision_g")): ++ with self.subTest(c=c, f=f, phase=phase), self.assertRaises(ValueError): ++ p.check_synchronization(c, f, phase=phase) ++ ++ ++if __name__ == "__main__": ++ unittest.main(verbosity=2) diff --git a/research/refinement_prepare_20261013/manifest.json b/research/refinement_prepare_20261013/manifest.json new file mode 100644 index 0000000..9fd94cc --- /dev/null +++ b/research/refinement_prepare_20261013/manifest.json @@ -0,0 +1,59 @@ +{ + "verified_utc": "2026-10-13T07:17:04.249396+00:00", + "head": "6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0", + "old_files_checked": 303, + "old_files_changed": [], + "old_git_status_entries_removed": [], + "only_authorized_new_paths": true, + "reference_sha256": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "tests_passed": 9, + "numerical_steps": 0, + "gpu_used": false, + "numerical_coupling_implemented": false, + "single_grid_path_modified": false, + "review": "Independent local subagent review completed; numerical coupling proposal awaits coordinating Claude/Grok joint review. Prior Claude local_stress code review remains incomplete.", + "new_files_except_this_manifest": [ + { + "path": "research/refinement_prepare_20261013/README.txt", + "bytes": 8939, + "lines": 137, + "sha256": "eee46f01add6ed7a5da76da76c98da628e13b930cfc49785399d7afbedbfd95f" + }, + { + "path": "research/refinement_prepare_20261013/baseline.json", + "bytes": 46348, + "lines": 311, + "sha256": "5cc3c35faac9bb43a0017d83ddfca330d7da93f1e6407391da56b2e9df3b28b6" + }, + { + "path": "research/refinement_prepare_20261013/incremental.patch", + "bytes": 15751, + "lines": 317, + "sha256": "df01345b8e2c33ebf6cdcbbb5104f02c4d7c239a6e6cafab1833228791bfa9a7" + }, + { + "path": "research/refinement_prepare_20261013/validation.json", + "bytes": 3567, + "lines": 55, + "sha256": "945f4c3604ae0eae91c29741a39588207cfff3e05646e03a12d074a299956c2f" + }, + { + "path": "research/refinement_prepare_20261013/validation.txt", + "bytes": 873, + "lines": 14, + "sha256": "5b5a8e9d455d37064c6709dcfd14e89ba66f51f09a11a9863b5cab67ac651d42" + }, + { + "path": "src/CelerisLab/lbm/refinement.py", + "bytes": 6593, + "lines": 138, + "sha256": "554735c5613129eb29f339c6aeeb4f3a3bbc5aba67558be51fbf7c2fb6ac442a" + }, + { + "path": "tests/unit/test_refinement.py", + "bytes": 8470, + "lines": 167, + "sha256": "90751142f920f1c5e988577a45afa94871a6617009cdc78323a87fc7795f4634" + } + ] +} diff --git a/research/refinement_prepare_20261013/validation.json b/research/refinement_prepare_20261013/validation.json new file mode 100644 index 0000000..f057e7c --- /dev/null +++ b/research/refinement_prepare_20261013/validation.json @@ -0,0 +1,55 @@ +{ + "started_utc": "2026-10-13T07:13:02.579165+00:00", + "parent_command": [ + "env", + "PYTHONPATH=/home/frank14f/CelerisLab/src", + "OPENBLAS_NUM_THREADS=1", + "PYTHONDONTWRITEBYTECODE=1", + "PYTHONNOUSERSITE=1", + "PYTHONOPTIMIZE=0", + "/usr/bin/prlimit", + "--as=268435456", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "-c", + "\nimport datetime,hashlib,importlib.metadata,json,os,resource,subprocess,sys,time\nfrom pathlib import Path\nroot=Path('/home/frank14f/CelerisLab'); e=root/'research/refinement_prepare_20261013'\nlimits=['/usr/bin/prlimit','--as=268435456','--fsize=2097152','--core=0','--']\nenv={k:os.environ[k] for k in ('PYTHONPATH','OPENBLAS_NUM_THREADS','PYTHONDONTWRITEBYTECODE','PYTHONNOUSERSITE','PYTHONOPTIMIZE')}\nassert env['PYTHONPATH']==str(root/'src')\nassert resource.getrlimit(resource.RLIMIT_AS)==(268435456,268435456)\nassert resource.getrlimit(resource.RLIMIT_FSIZE)==(2097152,2097152)\ncommand=limits+[sys.executable,'-B',str(root/'tests/unit/test_refinement.py')]\nresult={'started_utc':datetime.datetime.now(datetime.timezone.utc).isoformat(),'parent_command':['env']+[k+'='+v for k,v in env.items()]+limits+sys.orig_argv,'command':command,'cwd':str(root),'environment':env,'python':sys.version,'numpy':importlib.metadata.version('numpy'),'limits':{'address_space_bytes':268435456,'file_bytes':2097152,'core_bytes':0},'numerical_steps':0,'GPU_used':False,'kernel_source_read_only':str(root/'src/CelerisLab/lbm/kernels'),'source_sha256':hashlib.sha256((root/'src/CelerisLab/lbm/refinement.py').read_bytes()).hexdigest()}\nwith (e/'validation.txt').open('xb',buffering=0) as log:\n start=time.monotonic()\n run=subprocess.run(command,cwd=root,stdout=log,stderr=subprocess.STDOUT,check=False)\n result.update(returncode=run.returncode,elapsed_seconds=time.monotonic()-start,child_peak_rss_MiB=resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss/1024,parent_peak_rss_MiB=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024,completed_utc=datetime.datetime.now(datetime.timezone.utc).isoformat())\nresult['stdout_bytes']=(e/'validation.txt').stat().st_size\nwith (e/'validation.json').open('x') as f:json.dump(result,f,indent=2);f.write('\\n')\nprint(json.dumps({k:v for k,v in result.items() if k not in ('parent_command','environment')},indent=2))\nassert result['stdout_bytes']<2097152\nsys.exit(run.returncode)\n" + ], + "command": [ + "/usr/bin/prlimit", + "--as=268435456", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "/home/frank14f/CelerisLab/tests/unit/test_refinement.py" + ], + "cwd": "/home/frank14f/CelerisLab", + "environment": { + "PYTHONPATH": "/home/frank14f/CelerisLab/src", + "OPENBLAS_NUM_THREADS": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONNOUSERSITE": "1", + "PYTHONOPTIMIZE": "0" + }, + "python": "3.10.13 (main, Sep 11 2023, 13:44:35) [GCC 11.2.0]", + "numpy": "1.26.4", + "limits": { + "address_space_bytes": 268435456, + "file_bytes": 2097152, + "core_bytes": 0 + }, + "numerical_steps": 0, + "GPU_used": false, + "kernel_source_read_only": "/home/frank14f/CelerisLab/src/CelerisLab/lbm/kernels", + "source_sha256": "554735c5613129eb29f339c6aeeb4f3a3bbc5aba67558be51fbf7c2fb6ac442a", + "returncode": 0, + "elapsed_seconds": 0.2744845859706402, + "child_peak_rss_MiB": 36.00390625, + "parent_peak_rss_MiB": 18.5, + "completed_utc": "2026-10-13T07:13:02.866335+00:00", + "stdout_bytes": 873 +} diff --git a/research/refinement_prepare_20261013/validation.txt b/research/refinement_prepare_20261013/validation.txt new file mode 100644 index 0000000..594daa4 --- /dev/null +++ b/research/refinement_prepare_20261013/validation.txt @@ -0,0 +1,14 @@ +test_all_tables_match_pinned_reference_without_advancing (__main__.FixedPatchTests) ... ok +test_config_and_level_scaling_are_isolated (__main__.FixedPatchTests) ... ok +test_handoff_rejects_wrong_phase_and_unsynchronized_counts (__main__.FixedPatchTests) ... ok +test_invalid_geometry_and_index_overflow_rejected_before_allocation (__main__.FixedPatchTests) ... ok +test_rectangular_shifted_patch_against_geometric_definition (__main__.FixedPatchTests) ... ok +test_smallest_patch_and_extreme_halo_margin (__main__.FixedPatchTests) ... ok +test_source_and_cpu_import_boundary (__main__.FixedPatchTests) ... ok +test_tables_are_compact_contiguous_and_readonly (__main__.FixedPatchTests) ... ok +test_unsupported_backend_and_fine_relaxation_rejected (__main__.FixedPatchTests) ... ok + +---------------------------------------------------------------------- +Ran 9 tests in 0.072s + +OK diff --git a/research/refinement_slot_20261013/baseline.json b/research/refinement_slot_20261013/baseline.json new file mode 100644 index 0000000..d498081 --- /dev/null +++ b/research/refinement_slot_20261013/baseline.json @@ -0,0 +1,521 @@ +{ + "head": "6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0", + "copy_dir": "/tmp/celeris-slot-baseline-008mfgni", + "hashes": { + "src/CelerisLab.egg-info/PKG-INFO": "0b9a8a4e8d60bc531473688723ddef0aab02c7ccc4997e31c9b6a6c35011ca77", + "src/CelerisLab.egg-info/top_level.txt": "cd51958ca03afabbaa9618c60b8280e486f8cc0b0359b839e10f886e7c3948f8", + "src/CelerisLab.egg-info/dependency_links.txt": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "src/CelerisLab.egg-info/requires.txt": "36e1404178e5ea590b2fc04e8ba4d748ec9a82e7693136ccf0dfd204fe265c04", + "src/CelerisLab.egg-info/SOURCES.txt": "f36b29c1b34c4bd6b2acc3ccdd21c24ee5077df7e2a20a652d9fae77eedb8e21", + "src/CelerisLab/simulation.py": "34d69e71844f553790c5a2bed0f8fbfb912a9498e95b500d1ef2ad41cae3b424", + "src/CelerisLab/config.py": "2f1bba7515f5bc08cb3a8d140bcafe7fa0689e01b3b06494697bb2956a71530e", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/cuda/compiler_v2.py": "c4cc3ec4445c8d75e6a253dd87963877117a722bc73b9d4811806fc6045d08c1", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/lbm/refinement_stepper.py": "0e670ab38a1ce95839ceeef844b551427f61603ab873530905c745125052f5df", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/refinement.py": "554735c5613129eb29f339c6aeeb4f3a3bbc5aba67558be51fbf7c2fb6ac442a", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/refinement.cu": "e8e769b7c6a61190675eafee99369ce9d8f4836f6ec74bed2d45f9077cbb3407", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/kernel_v2.ptx": "a599ee30ae66800f4d4220eb79dfed35ff32991661260f01ea58023ef780f0ca", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "f9f8242b38e8e0cf8425b75e2b0215bc15363c62eaa0fb43c761b8e0931bfdc9", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/common/checkpoint.py": "5b7caf3896167a3f37c539b58837de6eb3f8085fa7bf5f821a09666cc16d43a4", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/CONFIG.md": "41cafdbe525366c08aa9d0416ea026ccf0026ba7123b8a9b65f968a80d928e3a", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_j1.py": "51b758a271ff358f931b3140a80082294a67e66c2fec0f8c19319e37f92aadc4", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_j2_slot.py": "b7d2d3aa06fcafc3ac62ed4a50892afbdb7f86e5720ce75a39ce317b6f571dad", + "tests/validation/run_j3_coverage.py": "329869519b7078e854d96241a7aad8ef93f35ac9be83f0be502c3a93523c3b13", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/analyze_j3_saved_frames.py": "438f67dac682b94c4950626f8de4fdcde48c3a4e9ecf8fdf1b0ada4b6e0e781a", + "tests/validation/diagnose_j3_lags.py": "286fcd65b3261667a847b9b26e213d0af92cf459faa6bbd774f78c8479ce31d7", + "tests/validation/run_j3_reservoir.py": "47535bc3569ce68c888d38978bc4f9077fd763a17829c20c081be52bb18a2903", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9", + "tests/validation/multigrid/test_cpu_reference.py": "ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca", + "tests/validation/multigrid/cpu_reference.py": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "tests/validation/multigrid/cpu_reference_v0.2.py": "b6adbad7da625ef6a6b97958ea9625030ed92676d0cada48e061c87bcf7ca8c9", + "tests/validation/multigrid/test_open_corner_negative_control.py": "59a6f8ca80cdd63cb7827fbebf9b4b555c3793f19dd6bca801544ec10b5cbe1b", + "tests/validation/multigrid/test_refinement_followup.py": "d2df924dfd5267e732036c6df27bb8809f59f1d371da75f506c67aad5997f322", + "tests/validation/multigrid/local_stress_observable_v1.py": "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456", + "tests/validation/multigrid/test_refinement_gpu.py": "0021a39b3a131347196845cff6507c90c387b46b772fe1319d634178c5e13354", + "tests/validation/multigrid/shear_diagnostic_v0_2.py": "a8b1cf2f7abd00efc4d068bbd27bb2317144a6ca4c545d9b2e0dcf421eadebc6", + "tests/validation/multigrid/test_tron_additions.py": "8e7a6a90b85e64c7326719e7b8bca2f6d34fb4c80690f0685f7e291ab93bd2a4", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt": "0577df5b3f5cb3c7b6e1ef2de71344f8fd3e6d959117487a06cbaf7f2afa3dea", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt": "28ddd1267ca91a772f5a6bfc65d949c9a4ea7dac5c9ba3a0bdb168492810b670", + "tests/validation/multigrid/shear_v0_2_evidence/run_once.py": "6698a2e040c56be949b809387d4518eb0ba82d34cc9d99640da4f8bf3c35c23f", + "tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json": "56fbd0259ff3d4dbd14ace52f64e249a435e9df91732b0e4027def2c344c2e6a", + "tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json": "c2d7ce8d16a0f47baff0788a153353dcf67088da974d9cd3d521b04ecd91ee05", + "tests/validation/multigrid/shear_v0_2_evidence/comparison.json": "41c00372099dd04b6d323785e9eaf4fec09da1753d3d150ffa230800f904142f", + "tests/validation/multigrid/shear_v0_2_evidence/baseline.json": "98a7853341ea732762c7506694e3a867a7259bf110e9e461ea84f741fd9ab829", + "tests/validation/multigrid/shear_v0_2_evidence/manifest.json": "e42aa19e91608164698bea42da88fbbfab8b0f87cc37b27c5baf165453a4fdb0", + "tests/validation/multigrid/shear_v0_2_evidence/README.txt": "4306a34b6896bd6e7a5c2ca71d68e18450359239d0c7ad7a67a4e83e7155959a", + "tests/validation/multigrid/shear_v0_2_evidence/joint_report.md": "1860b8082108c8b8a87998af90cd0b81dce1c04e9f6c67b41e0912f9fef6cc9c", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_horsea.txt": "882f2cfb1dbdf82cce63c011397e7c2e6307bbcfec42a3510648d328cd6ddcfe", + "tests/validation/multigrid/local_stress_v1_evidence/run_once.py": "e629800291ef65ffea8555f66ec80bf15200552540b2a493a677bfb53d0830b3", + "tests/validation/multigrid/local_stress_v1_evidence/source_manifest.json": "d2cf90b73458f493c665c9a281d06aef0c190cf0d143639fb77ab838c78f020c", + "tests/validation/multigrid/local_stress_v1_evidence/results_horsea.json": "f17b4644d19eb75d55deb7021ab679cb9e7922a2b46f1cacf8b6da6bfb9a2690", + "tests/validation/multigrid/local_stress_v1_evidence/comparison.json": "be236671a501c31c06f7e266f6e0c0c2a89aede321a483452050ff37bf84c84a", + "tests/validation/multigrid/local_stress_v1_evidence/baseline.json": "64f6541447afbd15b1b15d802ad6f1b5042aaf84e7d4d2414e4ed4c52cf70507", + "tests/validation/multigrid/local_stress_v1_evidence/manifest.json": "3a9fa8c7d691c1b8c24f05940eb724d30b890dd8ed636551068d2633d7db2f70", + "tests/validation/multigrid/local_stress_v1_evidence/README.txt": "4f62314876047ee437bb9ecbf84798d2a9f6e85f6a3aef260277b85bcdb35fae", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_local_stress_observable_v1.txt": "6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4", + "tests/validation/multigrid/local_stress_v1_evidence/TABLE_local_stress_observable_v1.md": "d8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt": "457f1d2173496554c87ca6e61df518c0b8f1e0a28cdfd94b94ebbb61bc459d70", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt": "73e4ef01138842981daaa534390f1463839e63833c11f4e8872f94f8eaadc717", + "tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json": "914389afc39752bcd4132aa21fc8d5cbcf0ca75b1efd6a49becab15c2fa3361b", + "tests/validation/multigrid/cpuref_0_3_evidence/baseline.json": "0daaccee41cabeb17a00e2405e2c7fd0b80d36f2d01778eb39c9fd22b13d2d47", + "tests/validation/multigrid/cpuref_0_3_evidence/manifest.json": "2850ecaf2e19d010ba35eb54162371d82cc1a092831e08a03b6adf75a614988b", + "tests/validation/multigrid/cpuref_0_3_evidence/README.txt": "1947ee0232b88b3cc2c506d0b0af5ba051ecc94aa8f7f09228ef3939cc95919b", + "tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md": "065947e15b2242bce7d3eb05a3acdbb59939c621dcd5d31540ad4a1bd4416818", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_planar_velocity.py": "b656da0880b4234b1db805544edbe0d2473cbcc7c2c869c71d8251337f62a982", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_reservoir.py": "e718c78a53c3941aba7feb8ae4e8bb0b1726c1145de84febf91220c1917991c9", + "tests/unit/test_refinement.py": "90751142f920f1c5e988577a45afa94871a6617009cdc78323a87fc7795f4634", + "tests/unit/test_slot_velocity.py": "6a9494de9a32c350389ccbed58af48951f6b25a21a258537d2e8b73eb67cb11d", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/cpp/reservoir.cpp": "c3eacaf0271400eb45ad559b571a8f7faa2a809d5f1857ffeb5592addce2cd0c", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/slot_profile.cpp": "31ac58ccab175bf79fa59fc46d4c0842df18ab0a5e5916be84760d9da2b75788", + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C4_deceit_f1p5.json": "11dab8440d8c4f385061d2536403f4313c6f026b4e0b7672681327a9f4f37ebb", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C6_deceit_f2.json": "e0c4e8bcc55da5dc8de1e2fe88029aa3e67453734faa44451f5a6dfa9131557f", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C6_deceit_f2.png": "e0a66708ce2a29c4c6b854d2596b3ffca181dc6e35d99cc94e08af3e2d8c024e", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C3_deceit_multi.json": "24c8e433aab6d207dab67546c4079868c4244c2948c32c94cd08e4f331991807", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C0_no_ctrl.json": "cf3af733a08f081cc5f879e8da79d7c60104099f4452af5b2a4a96c0e6bd5889", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C5_deceit_multi_f1p5.json": "a4cb4ff4481b39b9ee61b1d7209416237a7fe86b22c5068d713ccec9c3f7afe4", + "tests/output/exp_ctrl_matrix_streak_ny300/manifest.json": "d8a20dacc92321d98354684976f771a9ca8989fc63ddcd78e15c7768c6617671", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C3_deceit_multi.png": "c6fed617cc6ffe6677157a9b58811d5f4613725eb98a5aec830fd07dc1aac38e", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C2_deceit.json": "7526a6b20a158461b85b1a64070b46c2b21be1e01c5ee025e6746fcf47ea3397", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C1_stealth.json": "63d34a0ab33e9fa8fe7311363efbd1b2875691f5b4958bb645b8c7ac38f1ad6b", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C0_no_ctrl.png": "0cfd7ce8f9d743bf22a7a694b4e5a3616557cb8f1db2f4ddf49cc4bef96efef2", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C4_deceit_f1p5.png": "4dcfc186928dcb83d28e9eb4cb2ecb4b163eb6f121d57036b4c05ab162be0951", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C1_stealth.png": "5e3cbbefda06fcef243d7d06d74a473972350cfa4ae88bdfdb349dce13943151", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C2_deceit.png": "22f1db77499bdbd1b3cd35f5b58b1a884dd94a86fdcfef07abd4157e6aaf8d19", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C5_deceit_multi_f1p5.png": "823e475cc901af3d6f4d0c56eb07822b3e73a2b9d0aa23e20e3741023fe90092", + "tests/output/kan99b_validation_esopull/summary_runs.json": "fe3294a953580204319fb1143434e15096d8455b6073100dfe0d5491b76af394", + "tests/output/kan99b_validation_esopull/summary_runs.csv": "1a44bb27ee0a7fe0270905248c37364834248cdc8710bd68142a6a79bbdad82b", + "tests/output/kan99b_validation_esopull/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "9fbc7d507c129ed85c68a9a313e3eb3431470d091bd7723e63f8afd8a3d2b737", + "tests/output/kan99b_validation_esopull/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "8faac43f42d6e0c70085c6e616bfff4df8de897e315fc0d2b4aa8bd635c3fa05", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C4_deceit_f1p5.json": "b613ae55fcfbd45a1a922d6d529e5274ba9d2987fdf5620fe866b889b931e48c", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C6_deceit_f2.json": "dbf54f9a183072547b22fa14334f0167e6eefb21c1208c4e8584bc196545a399", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C3_deceit_multi.json": "2100c6cc5c358a249804ce8f6f98531f3bc868e27af6d21a9d441b1b6a9e479e", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C0_no_ctrl.json": "a8b4697b7c0caeb958f80e282e32d673deac8c914008d64e6b38f7883eacc57e", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C6_deceit_f2.h5": "8d0c28566d2230b422691b738cc453705496bd150be038a576c0c0fba218fc1f", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C5_deceit_multi_f1p5.h5": "608767ca11d104fa4506b57204a0c8dbd739688224ebd924fe517ce9e21db823", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C1_stealth.h5": "a83c988cc8b1173a7b2f13b132ed7243e98304dccab2965aa16cf4d32f8df007", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C5_deceit_multi_f1p5.json": "6f6b9300782178e0ac9308a677bd9cb1565a383a78dff4cd52dea0bd464db31d", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C6_deceit_f2.png": "21bbe2dac1ab06ca1b172ec62d00daa7bcd65d99adac0ed03c5e30bed59e871a", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C5_deceit_multi_f1p5.png": "602a6586277699968b4cb167b134c8c406577038af088aa70baff682691398c4", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C1_stealth.png": "c1e1d04f266deac5fb2815a8283da80f9139ffaccbec2219d98544296bf3152c", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C4_deceit_f1p5.png": "96dee924e89b90091192a8d7b43321f109a5491511b8a83da77cfc611ae0d93b", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C2_deceit.h5": "aa5800a0cd594eeb7cf5449d6469d55e0c9033ced0ee0a3b5d59152e68c7e263", + "tests/output/exp_ctrl_matrix_vort_nx1500/manifest.json": "5d28f0f5428d7f0341e20d5d1f19c17bbc6f0f9b2a441d3c95f5422f3f2b4bd4", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C2_deceit.png": "1dcb6fb959f944d7ad89c4abaaef4d1fd4a77db8901804530e86fb336b883eb5", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C2_deceit.json": "b88ff5049aef59876b349d105f1c3467c17c9ba9022a48a77a6984f20da34345", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C1_stealth.json": "515689cbfaa30a9e39d9907939ee194a4836b644a5e9124586e6b7221d2b394b", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C3_deceit_multi.png": "d69694a1a1b2f2ea0adc7b74b7526504e2ad0b5d6317bac9b3159b2e7e88cf90", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C0_no_ctrl.h5": "3a858d6be0a946e1d26bbfa192c2f0ca3910c0f140b42575ec9d9529dd99155a", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C4_deceit_f1p5.h5": "660e4619ea530dcd18c3afb2e7fa22cafd9cdba1be7888e31ab5b76a0902d2fc", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C0_no_ctrl.png": "6d4d3934f1c8b20c2a5c742ae080a7143f0c139741966adf009a227c27e9bb1f", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C3_deceit_multi.h5": "1e72126f11b2995437cecb8cc0eeffb8807efbfa43d8f346f28711fea98ddc90", + "tests/output/kan99b_validation_ref/summary_runs.json": "449316c30585a8de9997538dead5d4e35a59bf00a2ac22d01b101ab600a4bc06", + "tests/output/kan99b_validation_ref/summary_runs.csv": "e8b9620f3772e5e421026103e456e6e844a91292f40affb96174c9dbde9b6e4e", + "tests/output/kan99b_validation_ref/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "4391f41d17ebeea1092f13b901923ced4ee2a1c5b346b79ef791d692847286b5", + "tests/output/kan99b_validation_ref/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "105c6eb21f1943d9d935246eab1602ff2016c415a139e24fee2793e88e006ead", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C4_deceit_f1p5.json": "0085a679a423621003eea81d4ac83bfe2edef2879eed7809d2a3675a212f791a", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C6_deceit_f2.json": "e820cf73f0e90bf93c34b24416e7692a6c2e51352ccf490fa6714d0812331ca2", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C3_deceit_multi.json": "571370c74ad9af589f3dc214669bff3d857efe6fc4fa13815b5d793d12b53770", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C0_no_ctrl.json": "ec5b89961033d8ebe0d66ce1ec7940dc2faf98130c38319bc9984ef654e60b50", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C6_deceit_f2.h5": "2792be74d8564fa29fd0636fc8493630fba2779c165b44330197095b3e296b18", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C5_deceit_multi_f1p5.h5": "2c64ee6c7a4ea2c42ed8f3d274402bec62de0e02ea0340e16022f0cdc92af724", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C1_stealth.h5": "100727d94fe6c2e46d7807eed0442555bdd1e26ec9b04b4c457171a2bbba3255", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C5_deceit_multi_f1p5.json": "f86166f121b4eeb6d74d8176c9265e7a3ccfe2540d040f554b6f96e6a6222c16", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C6_deceit_f2.png": "fef4de0e3ac8203742f35c16a02445b19c3f556b11f73abd5d8e3ca05ca33d78", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C5_deceit_multi_f1p5.png": "9136448e6d7565ca5af3666f9cf6e154342d8a3475076abfdbdd1ff9faec34f3", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C1_stealth.png": "544537a9c500a05937fd3be17c25e7d887461d9b83a15564f9ab7063208f40f6", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C4_deceit_f1p5.png": "51e7056db99dd653affbe913d52fa41df6ec0db921109384e3c679bda06b5a83", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C2_deceit.h5": "39d6c162085acae1612650da37d2314757715931e83a854e08bb01407d0f8efc", + "tests/output/exp_ctrl_matrix_vort_ny300/manifest.json": "05fbc2e7bbad4267a38e1094bbdd6bee6ad270412bdb5e92b0dfc9fa56969517", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C2_deceit.png": "07fc5817eba30371272b87ee2e023c0a1144077d1bef77efb2fd5dc284badcb7", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C2_deceit.json": "b1fcf76039c91a9080b830352dee2e95316d754b968cc27a8f68c51527661e76", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C1_stealth.json": "b78851637b9b7b93070524a2933cae1dab6d682f8894579b2849c64921e6c29e", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C3_deceit_multi.png": "2658f0747ed7287f7912fe15cc58a086e01ba284277cb98689bac01ecb6ec12b", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C0_no_ctrl.h5": "57f73f5f8dc4b32b156bc82300b1efd1e4eddadd9b8dc51cb7e6b41fa5c966bd", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C4_deceit_f1p5.h5": "2864b9dd086709ee8b8c3f262118a5130b0d40c86838f3ca0deab5bb898dafa8", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C0_no_ctrl.png": "2c7f3a8be2ee540afdfb66299e43a65583434bee84bde590124524a82868c900", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C3_deceit_multi.h5": "39e0d9b032dfff8cf057b410a98973729285e7d03e89f9a6a002aaf7de3d7519", + "tests/output/stealth_sweep_fix_check/summary_stealth_s150_w0.02709.json": "8b1032e13975bb05c6a810fde175c8da51bacdb3dc745fd11c1049ca63bbf136", + "tests/output/stealth_sweep_fix_check/summary_stealth_s050_w0.00903.json": "fa7da24d5dab9fd3a3c2dea6b50d0224c7a99cd9141796e137304a6040b1ac8a", + "tests/output/stealth_sweep_fix_check/streakline_stealth_s050_w0.00903.png": "640928f7eb159e7caea32036123f86c281723d083cca46839ba86bce8361ada7", + "tests/output/stealth_sweep_fix_check/state_stealth_s050_w0.00903.h5": "187ac365f9f7370c888c4c65570c47e42465b2fccd432056c176528d45cf0c2f", + "tests/output/stealth_sweep_fix_check/manifest.json": "83a3f12a942fb644e470bd07a72f24921f2147d7df429110268c5c96a9953d1a", + "tests/output/stealth_sweep_fix_check/state_stealth_s150_w0.02709.h5": "e057e9db26b2546c0704e2c959cc7d2aac91e6a49b4c7ee75a409597a5db8716", + "tests/output/stealth_sweep_fix_check/vorticity_stealth_s150_w0.02709.png": "d2d202088624cf30868228f9c913ee30e1b386aaa2c22b0ea89be43dedc0712d", + "tests/output/stealth_sweep_fix_check/streakline_stealth_s150_w0.02709.png": "0edc7caa9caaffb754490bf1f6ac7ad7180e45a991439a3f4f83ed949a082a1a", + "tests/output/stealth_sweep_fix_check/vorticity_stealth_s050_w0.00903.png": "4088359b17c46ed4d7c8401d244808fe67723273b1d16d0671b69f9478c68c1a", + "tests/output/final_validation_round/validation_summary_report.md": "881cb7052e5a555afc87168a37268ee66e8e3fba172533706e858d996fabc7b9", + "tests/output/final_validation_round/sah04_mixed/s2_d48.json": "83c6c01201d90aae5c49e73ebeca88d1c7ded6cc83c13f4892a9188e6289483f", + "tests/output/final_validation_round/sah04_mixed/s4_reg_d96.json": "b32f03e6b347fc709cea2ecd488df0f85849c733bf6a4b9cf65ea69401c93a1d", + "tests/output/final_validation_round/sah04_mixed/s1_d48.json": "120e8e878f5712dc89b7cf78c7f8d0e3368d34ad5ef7494977e083b188a54c18", + "tests/output/final_validation_round/sah04_mixed/s3_stablecfg.json": "b38a3d197a188e65c163d974113af18f332b3abed083e2654e998d9980f6be9f", + "tests/output/final_validation_round/sah04_mixed/vorticity/s3_mrt_laststep.png": "dc96fcd05d458684cfb40d4cb741172213083e2f2665e2bae7e1f0267bb3575d", + "tests/output/final_validation_round/sah04_mixed/vorticity/s1_mrt_laststep.png": "73a3580ba3c7fe6ffeee4676a9a51b5bf678d6fb523456a61e185598389ea1e1", + "tests/output/final_validation_round/sah04_mixed/vorticity/s4_mrt_laststep.png": "57f2a82761f2de1a9fc2b78ee86159ca542c966494b9c704deb451da857da778", + "tests/output/final_validation_round/sah04_mixed/vorticity/s2_mrt_laststep.png": "786f492b96ed932254b5452e2d06ff088727f2d88c7e7c7b47d386eddfe07862", + "tests/output/final_validation_round/kan99b/full_summary_runs.json": "8c4a11cbf555e08a66698439170b850c57d537d8e75e4dd75beb767bbf7e38cf", + "tests/output/final_validation_round/kan99b/summary_runs.csv": "3fa92fdd3114f0472de44bc03006af1d4b694dfc69b06704c1667cd3627b6dab", + "tests/output/final_validation_round/kan99b/force_csv/k5_baseline_domM_re160_a2p000_regularized_mrt.csv": "de05e9699146f2adffc9d7c9991f9e48396aacd142afc3c08b2b64727c83c69a", + "tests/output/final_validation_round/kan99b/force_csv/k3_baseline_domM_re60_a1p600_regularized_mrt.csv": "53cd0dc47328b7b370eced1130508655e6815a29b727bf1fe4e4e125e4918905", + "tests/output/final_validation_round/kan99b/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "4cac1ccfdb7451de3e26d921a6406cc55d1d4630e10ec0d7ec9350a4abd49404", + "tests/output/final_validation_round/kan99b/force_csv/k4_baseline_domM_re100_a2p000_regularized_mrt.csv": "392c98de52011ddb344a5761c4520e870f4e49bbba3e144e5a02818ba2f9250b", + "tests/output/final_validation_round/kan99b/force_csv/k1_baseline_domM_re100_a0p500_regularized_mrt.csv": "9e83c5175aec644c0b97c081e610deefa731b87aef04da6297abf662a71c0702", + "tests/output/final_validation_round/kan99b/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "55b071f278e153aa353aa2bef85f0bce35b910a7b08103032023fe3a28169b89", + "tests/output/final_validation_round/kan99b/vorticity/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.png": "b91b332e7deb787975d3f08fa3325facd4a972b536694fcda52e6c01943c42cb", + "tests/output/final_validation_round/kan99b/vorticity/k1_baseline_domM_re100_a0p500_regularized_mrt.png": "6e7c3f6567c0ff0d00d75da8373031f5ba2a17a624cb8c5d5d6ae4f8749c33c0", + "tests/output/final_validation_round/kan99b/vorticity/k5_baseline_domM_re160_a2p000_regularized_mrt.png": "c4d232df2e6f7466acca711191d976aa9411ec0ade81572b531463f42a7d633a", + "tests/output/final_validation_round/kan99b/vorticity/k3_baseline_domM_re60_a1p600_regularized_mrt.png": "b2314c60491d20933422e1697998555dec2436d39545c71f990e9906884685b2", + "tests/output/final_validation_round/kan99b/vorticity/k2_baseline_domM_re100_a1p000_regularized_mrt.png": "2b2797b8f53170d04d1a70d1cdf898f7e41b3a76b9f3c1f276dfec952520ab04", + "tests/output/final_validation_round/kan99b/vorticity/k4_baseline_domM_re100_a2p000_regularized_mrt.png": "8135f470404fe11ac97968fa580ee35232e90dcace3c6ad94de17ef7aace24d6", + "tests/output/kan99b_validation/summary_runs.json": "d7239aac64884202558741074f2d644ade9e2365d94d0b7556fba68dac94868d", + "tests/output/kan99b_validation/summary_runs.csv": "c44da69563d58b917291a9fd402d1f57055861bffab6f9e32d7db91297428d45", + "tests/output/kan99b_validation/force_csv/k5_baseline_domM_re160_a2p000_regularized_mrt.csv": "27b64460923d235d34b760f2a2371ad01611a70e38edb03d6fd6a2fe7a7de6e0", + "tests/output/kan99b_validation/force_csv/k3_baseline_domM_re60_a1p600_regularized_mrt.csv": "76ff52f4494b7ef7650c05968732a8caaba94d2b151234c02cf624f5b3a712ab", + "tests/output/kan99b_validation/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "28a83436ca8bdad38865ba21ce1bda679562a5ae1cfc6ee8fc6e86ff760ec66d", + "tests/output/kan99b_validation/force_csv/k4_baseline_domM_re100_a2p000_regularized_mrt.csv": "823ae04870fd951879024a18169ac5cba8db4b3201726f6a00f320f1958d04c6", + "tests/output/kan99b_validation/force_csv/k1_baseline_domM_re100_a0p500_regularized_mrt.csv": "a591daf2cdecd6ac3689fa2a2aba917b23053ad26e3ef1f635c81aecc451475f", + "tests/output/kan99b_validation/force_csv/k0_baseline_domM_re100_a0p000_regularized_mrt.csv": "e95c27c646c0c9baf8f455f876c115c8dbdb23cef9d9d550f455098bf0c03b55", + "tests/output/kan99b_validation/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "3c2ea79a0e27f561215febee2e165d24b3617a648bf908981c068ba59d549c51", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s125_w0.02257.png": "a892f18c74fe13efd839bfd5068097ca0ae07acebf6c06eed89e1b867e41fcb2", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s125_w0.02257.json": "7e542f59746429022ce1794854c6fb36e8ac658dd0aea3bc1140a45e83a3f1c9", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s100_w0.01806.json": "b76216e0fbee00ef754edbafe5790a99ce7d53638af629947ddd9615598e4c08", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s150_w0.02709.json": "42cb241d9cfb01308ce28e129756b6cb3fe2a8e9679518da84bcb8b607fe92ac", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s075_w0.01354.h5": "558be308dbf334832bc1d29419ba5be142969117a11b124864f6b221c8fee509", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s050_w0.00903.json": "53b579811a0b651ba7cc466c230c115b9f88486c6675e0465d0715d3377a75cd", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s075_w0.01354.png": "9f4a7d89b2471becaf31e84c14402441c5fd96fc7190cea5e8a9fdd06ee62002", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s050_w0.00903.png": "5f18f56b0ff2af3350216b65540a2bc664c569520624cfc6cc2439a3c5369560", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s100_w0.01806.h5": "30776f333959e0e9eb5ca96b269e6a8052c5b94941a4e3b36d8a6af8076920ce", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s075_w0.01354.png": "b5393474d99191e88dafea4144b6a8eccfbdf75107125ce4b05383b17007d06a", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s125_w0.02257.h5": "4ed9d8587f75ad4625ec5501fa99fb733cde037180ac53f92a210ffbb08375de", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s075_w0.01354.json": "ff1c1cc649e589b5425787493c2b0d04b6c39b43043b1968d65509cb0a426e82", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s050_w0.00903.h5": "4de51584b24095f8cf4480b8941593a5f913332f9396061ed077c9d49eb2ee11", + "tests/output/stealth_steady_sweep_nx1500/manifest.json": "0dfbb2c1b5bf9093fef169e4dc6319edb5c87a1e967e8d558613e2c64a2ca734", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s100_w0.01806.png": "60824cbdf21170cb4ffd8af0a49e8522c2d79cb2694690ab67995ee973265efa", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s150_w0.02709.h5": "b22d54a05cbd3138a1fe585a825246989fcff7c00f51aa9312a4185d963db933", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s125_w0.02257.png": "c1e1d04f266deac5fb2815a8283da80f9139ffaccbec2219d98544296bf3152c", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s150_w0.02709.png": "bcf098083a73798dc3906807218058cc571435a010234a5a350b585ba9915c78", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s150_w0.02709.png": "3bac21cc75a01429399cec308d6bf5fc8918917def1bf5d7fec1cb6003390a41", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s050_w0.00903.png": "a675f41df763f0a1ac0a06386315806b24f2571f5dabc8693fcd871a13ed22ba", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s100_w0.01806.png": "92515588596596cc1d691c643fa48cf828492c2eaed96355dcec58109de4b5aa", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C4_deceit_f1p5.json": "0393661f08b748428fc366eeecec3b34b9d9a013aa6b151a15b33c7e3c0e1818", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step080000.png": "bffef412087e426b614d8c05e59bd7580ee49bb77319279ddc4c1bf825678c49", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C6_deceit_f2.json": "de067f01ef5c11249d67bbe5e02db6f2b4c5590214de02609bca115edf8dee64", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2.png": "846badbae81b75f765d89e5a7c4f88aeb5d57f2387511e4f2f84c72a192ea9f2", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C3_deceit_multi.json": "eb21d1c69e51f01c1a6be1ce59fe86763089ea5aa667b8872d0186af035b24b2", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C0_no_ctrl.json": "780a0d329cb86990a17a088f49084410abb1fad24f659255918e5ddda6b3dabd", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step080000.png": "ff7836b8229d9a5dd3900f499fe3e7f0c73a61c7109b6e6e79b11a0fb459bb63", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step040000.png": "f2b56a7e30bcc363ed69fc19705403181ac5de90800eef03039a389a65869e30", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C5_deceit_multi_f1p5.json": "261b698723f19526a447679a2be8666c8d0cbf6df81b0c9de6d051960d77308b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step060000.png": "0697e0ae06a01154afdcf00330ba870bd8f36d21561a33846ad7ba63fb731179", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step040000.png": "1de3d7f54e91c5d5850f4358d1872e16fefb36d32a1b6293facb54524e32315c", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step100000.png": "91f0bf6ed3e854f7f83623a3f19bb12c83b4aac239e3eaa849fbe50e7baddff5", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step080000.png": "303c1d2d4c49b4a7495365c8cb2bcbfe9bdda7cbc0a7c7dd1f01e8aa62b3573b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step040000.png": "dd5945458a35d81b31a0e2f3a693a5023d6960474263e7dc86c22367a56cc13c", + "tests/output/exp_ctrl_matrix_streak_nx1500/manifest.json": "0d97efed02f775c25dd8a2d7439f310b715d142ff8d603c9da6ddab197570ce8", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi.png": "69022ef9175acf910374ec73848640548b85fc7beb7e6950843f52c10ed7d61b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step060000.png": "16ba30b8cca0d49e6b76be0bb4f0d14bbf276ca6ec47ebf56907c7534e15c4e0", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step100000.png": "8548b6dff635cf9c92e2baa119866277e3994366eb31aeb30641b03b3d80ee9f", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step060000.png": "56100f169c3e378b84bfc89c5477d2c142ca043d9f28eaa70bc5448c49c7f4d5", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C2_deceit.json": "587cd42d81b1325bbc766d9ca6c1fd3d076bf5a772efd45d056c2c4e3db742b6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step060000.png": "e43e95e7126de8cb857154353f161914c225f8c9f17eb44b1ff744249368a4d5", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step080000.png": "676d21ffc7180d34a6725a8bf49503ce59f48d65500450c3975d01e65162899e", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C1_stealth.json": "73040aeb7ef07c538d4687b101c599210e660202eb1c2c3e0894dfbde682d137", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step100000.png": "e22171ef86979c4398c45ada9cd0f5e4c4e5b034f271df5fa8ac9a762a8554cd", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step100000.png": "0d73042be73b0de8d0a591e56c01e3c802483aa22a97f27e0300cba82c708066", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step040000.png": "a6e95fd5c24052db20d5ece200edcfe5e261c00950ca964c89df9f7335579634", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl.png": "d74061347ac3505fad878e330f6cb04d23bdb13082bfa1afa2fda0872f80f388", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5.png": "3156400eb59fae0638556c2711345f12ca49d951ff09e6464a2271249409a6a7", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step100000.png": "d69e34c82da98b28eef7f1af29f5d11f400e90f628049f6f5f4a3a419a4a4340", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step040000.png": "ce1f372b517dd52fc3f3eb066145e04ab6841e43b67cb0f6bfbdb42a6738eca6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step100000.png": "07cce6c99dfa7b56dd4d3aa452873a676a5a00e9f046555fa9dda30f16dde488", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth.png": "a892f18c74fe13efd839bfd5068097ca0ae07acebf6c06eed89e1b867e41fcb2", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step060000.png": "80b63bd309ef11a3ebb2f1ef301b49cd8f09bcc25562097d382f859306c9fe6d", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit.png": "1edb30dc35e29ad991695353f4b84e0507792935ec75ae9a7904ebdc007a471a", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step060000.png": "93ab8e09e58a64c5dd2eedfdafd27cf4dcfe4e8fae1af64ac71eac509e6ffdaf", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step060000.png": "f773bdef1c8d718d01b6d6d7735182c04564dd8b5692b359e1dd2f721c774b1a", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step080000.png": "5570fe6a25c92e5c6aa9a5129aa1797ba8ee7418170c7a351f9e35b931a366c7", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step080000.png": "32d3e700286eb4b46b3bcf757669481affd6ff6b53792d730b5a21da92cc57d6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step100000.png": "5acfe36694bb4e628309ff8ae1e839ca0a1f684607165bbc2883436b85208bf4", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step040000.png": "2c6f2b8d61cc2aaa63631eb6c98d3de26dcef705fa6b66c823ce7b9eef50e00c", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5.png": "adbefd0021e2c981d026718de8c63594b9c8e5971901d1dc40835cb69d95b93e", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step080000.png": "ce8b18e4dd976ed590fcc44075f3fb058ca7b23e15a1624726c181c4dd0c11da", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step040000.png": "168d21ef24ae198fbfd642f8ca315faad4c7bff2e2c09e16ff7c97e7360ea883", + "tests/output/screening/screening_summary.csv": "3a23c4f2bd54ed5ee9bdb5b6dcdc58eed04519fcf1b4790e0abd1e6c5288fb96", + "tests/output/screening/screening_summary.json": "caf64530f152b6b8ccec82a3c7ba44fa0b3aeb0e0221ef6121857bf62c031ecd", + "tests/output/screening/B1/force_hist.csv": "854bfebe63fb2d140823fc5dbc434a70c317c6ab0bedbd5220cec45665b524c8", + "tests/output/screening/B1/summary.json": "35b4d958bc0fdd6ab6c9c0d1ed50e85d89b04f7be3e34632d6c3ea95b89acb47", + "tests/output/screening/custom/force_hist.csv": "06da0f67b564d5c114332ef3b39167b1ba222fc50045f95303c75c14755b51d5", + "tests/output/screening/custom/summary.json": "1701ed75e5e9ca16127f495ccff1d87de245d81df581e94114c8fca6fbbe77fd", + "tests/output/screening/MR1/force_hist.csv": "f70fbfa748fd0709e225523aaaa72b761db56df4f1d48f105384b94cbc44b31f", + "tests/output/screening/MR1/summary.json": "3d9a0fc19710820e3634ab2143b913b282beb159336567ab9ebf3de2092947bd", + "tests/output/screening/MR2/force_hist.csv": "c947b3c16b8e8f8f85a203cea8cd912bdfc07f96985c1c24a470b644170195ea", + "tests/output/screening/MR2/summary.json": "d2344e9e2517ec76c8b56bfbe3763dd465e24721856992401c57c414763481bb", + "tests/output/screening/MR3/force_hist.csv": "7df1536c83ee466b7195d9c521d3d3b1309acaf142f2855bba51fb279c7612e4", + "tests/output/screening/MR3/summary.json": "ad188eb1b271a6cd0fb4025b456eccac5450776f60db58466f804fc5a0e0ec61", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "examples/fixed_periodic_patch.py": "6732e440a47c237ea341703f2d80717903d34c68fd061bdc97189e5d877be46c", + "research/j3-lag-2026-10-12/host-check.log": "b2b6d262934b3abf9e0f0bdbde14b339cb977f7bffe391c17b51b5d067862dda", + "research/j3-lag-2026-10-12/REVIEW.md": "f388b64b0cc0413dc9865afda90ed24de666dda0d6cdb821b4363ce1b73631b3", + "research/j3-lag-2026-10-12/trajectory.h5": "2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986", + "research/j3-lag-2026-10-12/baseline-status.txt": "e0b69879084f54afac1a3bc3701f1de9819068190c815ae84421f02f83cad9f7", + "research/j3-lag-2026-10-12/baseline.json": "5e9a920813fe3d775110af85af92970d5245a7040ace804445e432353b77e489", + "research/j3-lag-2026-10-12/gpu-diagnostic.log": "97956b517072b7c34e2e29e2a23f87eafb19b9eda786a4b8149e4a2eaed76ee9", + "research/j3-lag-2026-10-12/gpu-availability.log": "b227a519b8286849cfdf842573bd451803da048c6b27af9517f6b8964cd3aa39", + "research/j3-lag-2026-10-12/results.json": "00435ac7e402943e55e702fac1beb5af8cafe71967999658bcde2b29077b1fa8", + "research/j3-lag-2026-10-12/incremental.diff": "ebdf66c72daf17b926482f79a1a30bf0eb2d27fc930a7bb62e5449ebcf72fcc7", + "research/j3-lag-2026-10-12/end-21280.h5": "19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588", + "research/j3-lag-2026-10-12/start-20760.h5": "6c4cba5928c77566c2afc32231311a3986831c18fea766faadebb101243399e2", + "research/refinement_prepare_20261013/incremental.patch": "df01345b8e2c33ebf6cdcbbb5104f02c4d7c239a6e6cafab1833228791bfa9a7", + "research/refinement_prepare_20261013/baseline.json": "5cc3c35faac9bb43a0017d83ddfca330d7da93f1e6407391da56b2e9df3b28b6", + "research/refinement_prepare_20261013/manifest.json": "5d479557cd01d61d8b652a3cf456fa57665bf624ce3b4a42c747523b74dec548", + "research/refinement_prepare_20261013/README.txt": "eee46f01add6ed7a5da76da76c98da628e13b930cfc49785399d7afbedbfd95f", + "research/refinement_prepare_20261013/validation.json": "945f4c3604ae0eae91c29741a39588207cfff3e05646e03a12d074a299956c2f", + "research/refinement_prepare_20261013/validation.txt": "5b5a8e9d455d37064c6709dcfd14e89ba66f51f09a11a9863b5cab67ac651d42", + "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", + "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/repair-2026-10-10/simplification-checks.log": "c9f15e870d02003480adf1a7f2fe4a9aca66c1934c4477619f05c8a4798ba85b", + "research/repair-2026-10-10/repair-state.md": "4d4aa1ec0c11a87d2c8380912e7ed74cf5c910ae42e5cc529effde36c9020969", + "research/repair-2026-10-10/TRON_HANDOFF.md": "f8aaa3d99cd133c2055d4adf396a0a57d14f6006aea19e87611bd1c2c1b53a88", + "research/repair-2026-10-10/final-gpu.log": "988bb97256d17b88c14f3793b15880d727ecb285abe62e7d2ae27a16729651c3", + "research/repair-2026-10-10/baseline-status.txt": "074088d793014e3b8154c58718058c7d300fb45595f5129fa957ef1e4cec38e2", + "research/repair-2026-10-10/repair-architecture.md": "49be42ff5c994017f3175e17efda14d84f0b68f8ecd239f66ccee38415b60c5a", + "research/repair-2026-10-10/classic-results.json": "a5d15305f516fd378b54cf9029102be58a83a55a7bad4b8e058fcfe0cc9898f4", + "research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff": "292b4bafe7a62d4fbbf7c165eb99929336edfcaa16b15f34f72ab71fcd928391", + "research/repair-2026-10-10/repair-numerical.md": "0272ebfa8c519aad161c520542cf53156574661609b91fd5ccad7955fdf2bd7b", + "research/repair-2026-10-10/provenance.json": "a81b7e32ecf7182c9617df1b39bbb063a05ef89290ad501bac4573cd5e8a6832", + "research/repair-2026-10-10/classic-signals.npz": "820c9a0b0713d7455f0a5839ac2cd5ee706086d1a26461225dcdb095673421e2", + "research/repair-2026-10-10/baseline-hashes.json": "d6a7d5f9ec5bceb0e7927d55603d9c5e70105982cd945723454659b19ab476e6", + "research/repair-2026-10-10/final-unit.log": "a892a39ecf88125558538cadce2cb5dc46d106b993b164e03da4ebb0eee68cef", + "research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "research/j1-2026-10-12/REVIEW.md": "13004a4f140acdcf59acb57e9e2dda1bb95763d30060f822a7c206c94b813a9f", + "research/j1-2026-10-12/gpu.log": "8659a78ea52bbf8eb923d46ea71636ce63cd322352d5c98a74f631e666dd8cfb", + "research/j1-2026-10-12/baseline-status.txt": "ac398360e05b746b89ae0c3acfe202b5122e650a3bb1ff234ab26f874a303e64", + "research/j1-2026-10-12/baseline.json": "ad7afdf7b3913d11c07343e971fe2f43c2d1a2b99e3d5904a6ba89e3bb0b24fb", + "research/j1-2026-10-12/checkpoint-gpu.log": "adfe3d77d2e6c6f6184dccc0267b4404b20a7709505d5ff5affed0ed4a618083", + "research/j1-2026-10-12/cpu.log": "60cac097f7c4f11401df2aacb43a248640555e7628d2829c4680c71db34e9640", + "research/j1-2026-10-12/gpu-validation.log": "d1e9f2aea17a85eddcd94b81c700738ce073214857b55c28abd1219ff1edbed7", + "research/j1-2026-10-12/results.json": "449f8a17dacac0fc6d2489c4b10bac330dbbbdb38fad3ce54f739ac8c6d48e85", + "research/j1-2026-10-12/incremental.diff": "a454c23da7b0011645949c0fbf64d0c41ecfdab5642b1b7c5119868005d3c721", + "research/j3-coverage-2026-10-12/restart-21280.h5": "3e89c12c16f91f76ca9acd909e0fa7d42df6fbb5e870b299aa08ca42bc3e3dc9", + "research/j3-coverage-2026-10-12/REVIEW.md": "7293f3f3442855c8521698605aab504e026915a7bf1e77f5a24710d89a812443", + "research/j3-coverage-2026-10-12/restart-reference-21296.h5": "7192f510dd7820675aa1de130f55514136fba782cf77f92545189918a7e0c328", + "research/j3-coverage-2026-10-12/negative-end-20760.h5": "bd0bd063579d625e358762b1fdde5ac11bfcf739646a847fb77a4a2031011b9b", + "research/j3-coverage-2026-10-12/baseline-status.txt": "31c949b11b20d7cd4202dba16882b5712aa1653da0cb2da2f0ebd69bf488040e", + "research/j3-coverage-2026-10-12/baseline.json": "d8844104f2665a25bfc417ee29becf89ab3955fac9105b5ddb12cfb1fe2a55b0", + "research/j3-coverage-2026-10-12/verification.json": "205986efd2b41635721b7fd20288be982348c765180102c7102750ba088f3a28", + "research/j3-coverage-2026-10-12/negative-budget-20744.h5": "c09d75fc4a2cff68039a0956bd9d32b79b9cd3a6b386c72b4db54c214b110cd8", + "research/j3-coverage-2026-10-12/gpu-validation.log": "505cd5a5db46d7984aefb2a614151c25c4ace0e7d2a52e02c3e4f9792fd8eb95", + "research/j3-coverage-2026-10-12/results.json": "02460981ad49c9cc13b4246abad1d8afd2599c61bfb545a6e32da9bbcd5c0db1", + "research/j3-coverage-2026-10-12/incremental.diff": "98aa7855d5d6b91b4509a924c8a5aabab4339ba29c7e7dc2d91262c48e3848ca", + "research/audit-2026-10-09/numerical_semantics_results.json": "b95b065b594aa2911740dab216f87936c9bf7f7fa25acfda93b5738443564035", + "research/audit-2026-10-09/REVIEW.zh-CN.md": "2841fd3aa7a6baedbe1079d90915c8b05212b133824ed6abccaa1f09656eaefe", + "research/audit-2026-10-09/root-initializers-report.md": "ca448457c444949d5d0e1e10fa7121064510b77fc4c3512580900f0299219867", + "research/audit-2026-10-09/numerical-report.md": "970330b3a593f79f09866ce6ae82bc0ddd81226230d0a6ff06ae8ae756ee80da", + "research/audit-2026-10-09/numerical_collision_results.json": "51e5c263bb8cde82cedef2ccfdbf5ef657742a80218d7896b1ff877516e59693", + "research/audit-2026-10-09/architecture-cpu-results.json": "e1b809210005c8765b13fddbb5ed710d15f6fcbb4c5788a4064f3e88808433ef", + "research/audit-2026-10-09/numerical_compile_results.json": "c3b0ae02072a2ec408ada7513b542ec255f6855cb743a3ed7f91bd8f31504f44", + "research/audit-2026-10-09/state_results.json": "da9170df3e11231c73f20e5e79ed68e08966673d1dd52004ea6b6a279afc0dcd", + "research/audit-2026-10-09/architecture-report.md": "861079dc3f4ced9fdc41bfb22002d32e190c0d630d3ba2f138f9dc7a949b8371", + "research/audit-2026-10-09/state-report.md": "f8708807efc2e109810c5955f7c1884a932668c0b3cb2963c2df3b09f2a3d5c4", + "research/j3-offline-2026-10-12/REVIEW.md": "d9902c58498e73c29e054b23adb968f7e1e14421cba5c58d03bbc5a50159ae79", + "research/j3-offline-2026-10-12/lags.csv": "fbd9addd413f24c47f4411317e872265bb774e8e1724fe169412befa860ae94d", + "research/j3-offline-2026-10-12/localization.png": "a72907638e32b0ecfc2205bea438e7b408f40aad86217ce6ad9b4877840c9cfc", + "research/j3-offline-2026-10-12/results.json": "cdb857bea6f4e06ed15acf773505ce6d5147f8cb8ce0a53cc368ee267cde6361", + "research/j3-offline-2026-10-12/cpu-analysis.log": "bc02a9b197fc15ae1b503ca54655a7622d4361f9b45b7848ff9c387ea3665f11", + "research/j3-offline-2026-10-12/regions.csv": "3a8fc640b61d70e3b7f73d2bf8ac2bd3f720adf39a90dfda6180430e0489efae", + "research/j2-slot-2026-10-12/REVIEW.md": "10c4a94ffc32e0a2c4e0f6593b7cfc28479b5869f279f0b9d0b708fa3a47d1e6", + "research/j2-slot-2026-10-12/gpu-serialization-failure.log": "df804e53b35e7ddaad79a17842b4b5fd9d834e29ca2d56edb00e835848d09200", + "research/j2-slot-2026-10-12/baseline-status.txt": "812616e2d941efcf854e1b37d6e662dda1aaf2b69074fcc04017133e13b72166", + "research/j2-slot-2026-10-12/baseline.json": "e82a1844145fd0cbc585c581b29f80b56193f122cfe1dfa7578f26904a720285", + "research/j2-slot-2026-10-12/cli.log": "9482ad7101d501f27f92e204b2f3ae5c6d91bd887b525aa31cb4a2a188f3cb92", + "research/j2-slot-2026-10-12/cpu.log": "91aba5961006909fbbb860429a9d3cfc930112a0d74c7788bc51c0a5897b47e5", + "research/j2-slot-2026-10-12/gpu-validation.log": "223351b52c70fa4523289f3a1b3db435a11286379253280470900ffe397580a6", + "research/j2-slot-2026-10-12/results.json": "7d35ca7989aed5380e0a45de7f583972566fc516a051da63c53b35514e267494", + "research/j2-slot-2026-10-12/incremental.diff": "c9e391bc91438cd912c1ed5a419705d4388522f672c67a066cfc055e814e699f", + "research/design-2026-10-09/math-and-history.md": "64f8c82e4949d6f58b46faa09800958714859c36cad20bbeeae8b449ae7a6099", + "research/design-2026-10-09/math-checks.json": "94750381954317cde8d649db26beaed8ea945666572a05030ca2b4d97d384011", + "research/design-2026-10-09/Contracts.lean": "2442d9a778ef20e8af3fecf23be6fea6d73c6299ff744c9664b652bc5ee3f034", + "research/design-2026-10-09/jet-study.md": "a362142ef04a5ad5dbb4c9db9d221b1199dccec53780c8f2da49a15201cfe529", + "research/design-2026-10-09/PLAN.zh-CN.md": "0341dd7ee306a040340c8e5dedb07a109e931c27dbf3c994d072aa78e3b6bc67", + "research/design-2026-10-09/jet_closure_results.json": "12cf7d400a206f9f9ec9ea6ad251fe6bb0232e27bcbed22fbc1ead2c0fc7d249", + "research/design-2026-10-09/grid-study.md": "4435dc1275ec5e15b118becc6ac391f306195d1e5beaa58037b1aff3bb2465c7", + "research/design-2026-10-09/jet_closure_check.py": "fde45d0f8518740ef5c0bf0fe7635d6adaf9a2e789927dd4e68e991c138ddc30", + "research/design-2026-10-09/api-architecture-study.md": "d6fb45ec784f0e1db55fb9f34e137b9f551db0b9b39fd4f0ef247a78fc34eedf", + "research/design-2026-10-09/math_checks.py": "4254983a783fe4bad8888b3d7c243c87d991c7bbf242edb0f56f25cbaefee890", + "research/refinement_example_20261013/incremental.patch": "6acd05df6669ccdcf234ac1680c6e76c75a2587974adb6728f7edda6fd625b69", + "research/refinement_example_20261013/baseline.json": "ae0af15ddb40709d1e348655a665264984a240ded1e28af816a8000d08e784be", + "research/refinement_example_20261013/manifest.json": "6da85ac513065dcf49200bc0872bec38b6c7ba61f7d82036c2189cabe5ac29ce", + "research/refinement_example_20261013/before.json": "d95cd518f080eab92af5e53e1e9b6b6fad626eae51990e510d2d2f2ae9d0ec7b", + "research/refinement_example_20261013/notes.txt": "f111f8cba94b43d1127945fa41615037e1740efcfc529e802338dd8c4ff02795", + "research/refinement_example_20261013/stdout.txt": "9c59fb315a5552cce4ceab171003e425bf64d747137c89bd86d8779a34adcbd1", + "research/refinement_example_20261013/results.json": "8ab13bbc022f2a66898aa07ed94f43cb6716570e7a360a809b7fcd097316db7e", + "research/j3-reservoir-2026-10-12/gpu-availability-sandbox.log": "1d58470512e583a0acfabf6896ee5f31e5b493b8231aed54b864f64eb275b02c", + "research/j3-reservoir-2026-10-12/REVIEW.md": "1ea5f860728584ea6cbe40ba3994e40471102d8e2cf6d93e28fe47222cba0cab", + "research/j3-reservoir-2026-10-12/baseline-status.txt": "0ef1a8c9878c4053ebc1a7d4bace6d4ec38bf27ace167b4239ddbb1c6c897e20", + "research/j3-reservoir-2026-10-12/baseline.json": "847fefd1eae971985d34d04d89ee6d6f1c91f6940c54fe351d112faba7bc6838", + "research/j3-reservoir-2026-10-12/cpu.log": "b33f6c1a1b0ee67968c4cff85d491e46e30e0d6c796b552629714ab8b5dcead0", + "research/j3-reservoir-2026-10-12/gpu-validation.log": "ff04024db197e332f37c912a96413e3251fd0186947348ffbc33af6f4a899f2c", + "research/j3-reservoir-2026-10-12/results.json": "49685de7679a14860258abf1753aaa6d116ad709b868d907ddb40e74c9b845ea", + "research/j3-reservoir-2026-10-12/incremental.diff": "fae312831d71e46dd477a640b06ed927853a9e735d26bf9f5868927fa31cfa56" + }, + "test_baseline_note": "Previous round manifest pins original test; delegate began edits before this snapshot." +} diff --git a/research/refinement_slot_20261013/before.json b/research/refinement_slot_20261013/before.json new file mode 100644 index 0000000..430e76b --- /dev/null +++ b/research/refinement_slot_20261013/before.json @@ -0,0 +1,8 @@ +{ + "utc": "2026-10-13T11:02:08.062659+00:00", + "physical_device": 0, + "uuid": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c", + "gpus": "index, uuid, name, memory.used [MiB], memory.free [MiB], utilization.gpu [%]\n0, GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, Tesla V100-SXM2-16GB, 5 MiB, 16140 MiB, 0 %\n1, GPU-f1c9fd5a-e917-56e0-21fb-24035ba44a36, Tesla V100-SXM2-16GB, 5 MiB, 16140 MiB, 0 %\n2, GPU-b8c11c01-c91f-aa0b-abf6-dad35085cc76, Tesla V100-SXM2-16GB, 5 MiB, 16140 MiB, 0 %\n3, GPU-8b71b032-1b75-2891-935c-ce106a53034a, Tesla V100-SXM2-16GB, 5 MiB, 16140 MiB, 0 %\n", + "compute_apps": "gpu_uuid, pid, process_name, used_gpu_memory [MiB]\n", + "ram_available_bytes": 64039014400 +} diff --git a/research/refinement_slot_20261013/cpu_results.json b/research/refinement_slot_20261013/cpu_results.json new file mode 100644 index 0000000..4f6bc4d --- /dev/null +++ b/research/refinement_slot_20261013/cpu_results.json @@ -0,0 +1,32 @@ +{ + "environment": { + "PYTHONPATH": "/home/frank14f/CelerisLab/src", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONNOUSERSITE": "1", + "OPENBLAS_NUM_THREADS": "1" + }, + "python": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "commands": [ + [ + "-m", + "unittest", + "discover", + "-s", + "tests/unit", + "-p", + "test_refinement.py", + "-v" + ], + [ + "tests/validation/multigrid/test_refinement_followup.py", + "FaultGuardsCPU", + "-v" + ] + ], + "exit_codes": [ + 0, + 0 + ], + "passed": 13, + "tool_output_summary": "Geometry tests: test_all_tables_match_pinned_reference_without_advancing, test_config_and_level_scaling_are_isolated, test_handoff_rejects_wrong_phase_and_unsynchronized_counts, test_invalid_geometry_and_index_overflow_rejected_before_allocation, test_rectangular_shifted_patch_against_geometric_definition, test_smallest_patch_and_extreme_halo_margin, test_source_and_cpu_import_boundary, test_tables_are_compact_contiguous_and_readonly, test_unsupported_backend_and_fine_relaxation_rejected: all OK. Ran 9 tests in 0.072s. Exit 0.\nFaultGuardsCPU: test_activation_failure_retains_resources_for_retry, test_boundary_mode_and_margin_contract, test_failed_download_blocks_read_and_step, test_kernel_contracts_reject_before_upload: all OK. Ran 4 tests in 0.020s. Exit 0.\nRecorded from tool output, not a second test run.\n" +} diff --git a/research/refinement_slot_20261013/incremental.patch b/research/refinement_slot_20261013/incremental.patch new file mode 100644 index 0000000..67a3e8c --- /dev/null +++ b/research/refinement_slot_20261013/incremental.patch @@ -0,0 +1,359 @@ +--- a/src/CelerisLab/lbm/refinement_stepper.py ++++ b/src/CelerisLab/lbm/refinement_stepper.py +@@ -1,5 +1,5 @@ + # CelerisLab/lbm/refinement_stepper.py +-"""Opt-in fixed periodic patch backend; no Simulation/channel/objects adapter. ++"""Opt-in fixed patch backend; no Simulation/objects adapter. + + The caller owns the CudaContext and must close this backend before that context. + Only synchronized postcollision_g leaf populations are public. No checkpoint, +@@ -27,8 +27,12 @@ + grid: tuple + + +-class PeriodicPatchStepper: +- """D2Q9/SRT/FP32, one unforced 2:1 patch in a doubly periodic coarse box. ++class FixedPatchStepper: ++ """D2Q9/SRT/FP32, one unforced internal 2:1 patch in an x-periodic box. ++ ++ ``coarse_boundary`` is ``periodic`` (default) or ``slot_reservoir``: ++ a bottom on-site slot and top fixed-density reservoir from ``cfg``. ++ Physical walls remain coarse; fine halo donors must be ordinary fluid. + + ``initialize(coarse_g, fine_g)`` accepts physical Q-major (9,ny,nx) arrays + already in postcollision phase. It does not collide or build channel flags. +@@ -36,10 +40,20 @@ + On a device/launch failure the instance becomes unusable: close and recreate + it, rather than pretending the partially advanced fine buffer rolled back. + """ +- def __init__(self, cfg, bounds, *, context): ++ def __init__(self, cfg, bounds, *, context, coarse_boundary="periodic"): + if HALO != 4: + raise RuntimeError("refinement.cu requires a four-cell fine halo") ++ if coarse_boundary not in ("periodic", "slot_reservoir"): ++ raise ValueError("coarse_boundary must be periodic or slot_reservoir") + self.patch = FixedPatch2D.from_config(cfg, bounds) ++ self._wall_aware = coarse_boundary == "slot_reservoir" ++ if self._wall_aware: ++ if (cfg.y_wall_bc != "on_site_velocity" or cfg.top_wall_bc != "reservoir" ++ or cfg.velocity != 0 or not 2 <= cfg.wall_slot_width < cfg.nx): ++ raise ValueError("slot_reservoir requires on_site_velocity, reservoir, " ++ "velocity=0 and 2 <= wall_slot_width < nx") ++ if self.patch.bounds[1] < 4 or self.patch.bounds[3] > cfg.ny - 4: ++ raise ValueError("slot_reservoir requires y0 >= 4 and y1 <= ny-4") + self.ctx = context + self._lock = RLock() + self._status = "new" +@@ -50,6 +64,9 @@ + self._block = (cfg.threads_per_block, 1, 1) + fine_cfg = replace(cfg, nx=self.patch.fine_shape[1], ny=self.patch.fine_shape[0], + viscosity=2 * cfg.viscosity) ++ if self._wall_aware: ++ fine_cfg = replace(fine_cfg, y_wall_bc="bounce_back", top_wall_bc="velocity", ++ wall_slot_width=0, wall_normal_velocity=0.0, velocity=0.0) + with self.ctx.activate(): + try: + self._stream = cuda.Stream() +@@ -102,7 +119,7 @@ + + def _require(self, *states): + if self._status not in states: +- raise RuntimeError(f"Periodic patch is {self._status}; expected {' or '.join(states)}") ++ raise RuntimeError(f"Fixed patch is {self._status}; expected {' or '.join(states)}") + + @property + def step_count(self): +@@ -111,10 +128,12 @@ + def _mask_nonleaves(self, coarse, fine): + x0, y0, x1, y1 = self.patch.bounds + coarse[:, y0:y1, x0:x1] = np.nan ++ if self._wall_aware: ++ coarse[:, (0, -1), :] = np.nan + fine[:, self.patch.fine_kind != ACTIVE] = np.nan + + def initialize(self, coarse_g, fine_g): +- """Upload an explicit periodic G_0; invalid non-leaves are discarded.""" ++ """Upload an explicit G_0; invalid non-leaves are discarded.""" + with self._lock, self.ctx.activate(): + self._require("new", "ready") + arrays = [np.array(a, dtype=np.float32, order="C", copy=True) +@@ -124,6 +143,8 @@ + x0, y0, x1, y1 = self.patch.bounds + leaf = np.ones(self.patch.coarse_shape, dtype=bool) + leaf[y0:y1, x0:x1] = False ++ if self._wall_aware: ++ leaf[[0, -1]] = False + for array, mask in zip(arrays, (leaf, self.patch.fine_kind == ACTIVE)): + if not np.isfinite(array[:, mask]).all() or (array[:, mask].sum(axis=0) <= 0).any(): + raise ValueError("Leaf populations must be finite with positive density") +@@ -158,7 +179,8 @@ + f.kernel(f.spare, f.current, grid=f.grid, **kw) + c.kernel(c.current, c.spare, f.current, self._targets, self._children, + np.uint32(len(p.coalesce_coarse)), +- *(np.uint32(v) for v in p.bounds), grid=c.grid, **kw) ++ *(np.uint32(v) for v in p.bounds), np.uint32(self._wall_aware), ++ grid=c.grid, **kw) + self._stream.synchronize() + c.current, c.spare = c.spare, c.current + self._step_count += 1 +@@ -216,3 +238,7 @@ + except Exception: + if exc[0] is None: + raise ++ ++ ++# Preserve the original entry point and its periodic default. ++PeriodicPatchStepper = FixedPatchStepper +--- a/src/CelerisLab/lbm/kernels/refinement.cu ++++ b/src/CelerisLab/lbm/kernels/refinement.cu +@@ -1,4 +1,4 @@ +-// Fixed, unforced, doubly periodic 2:1 patch. Separate compilation entry; ++// Fixed, unforced internal 2:1 patch. Separate compilation entry; + // default OneStep/channel kernels are deliberately not included. + #include + #include +@@ -10,6 +10,7 @@ + #include "operators/macro.cuh" + #include "operators/collision_srt.cuh" + #include "streaming/pull_double_buffer.cuh" ++#include "boundary/planar_velocity.cuh" + + #if DIM != 2 || NQ != 9 || COLLISION_MODEL != 0 || STORE_PRECISION != 0 || USE_DDF_SHIFTING || USE_LES || STREAMING_MODEL != 0 + #error "Refinement requires unshifted FP32 D2Q9 SRT double buffers without LES" +@@ -69,13 +70,15 @@ + extern "C" __global__ void PatchCoarseStep( + const float* in, float* out, const float* fine, + const uint64_t* targets, const uint64_t* children, unsigned int count, +- unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1) ++ unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1, ++ unsigned int wall_aware) + { + unsigned int x, y; unsigned long k; + index_from_thread(x, y, k); + if (x >= NX || y >= NY) return; + // Both buffers were poisoned at initialization; covered cells stay invalid. + if (x >= x0 && x < x1 && y >= y0 && y < y1) return; ++ if (wall_aware && (y == 0 || y == NY - 1)) return; + unsigned long j[NQ]; + compute_neighbors(x, y, j); + float f[NQ]; +@@ -100,6 +103,10 @@ + } + // Includes the eight grazing-corner links with UNCOVERED coarse donors. + // All replacement arrivals must be in place before computing rho/u. ++ if (wall_aware) { ++ if (y == 1) reconstruct_bottom_velocity(f, 0.0f, bottom_wall_normal_velocity(x)); ++ else if (y == NY - 2) reconstruct_top_reservoir(f, RHO); ++ } + patch_collide(f, k); + stream_pull_store(k, f, out); + } +--- a/tests/validation/multigrid/test_refinement_followup.py ++++ b/tests/validation/multigrid/test_refinement_followup.py +@@ -1,10 +1,11 @@ +-"""Only review gaps: CPU fault guards, normal-build seed1/8 and rectangle/1. ++"""Bounded fixed-patch checks: fault guards, periodic geometry and coarse slot BC. + + Use the existing bounded runner/environment; no audit-build rerun. The scalar +-rectangle oracle covers one interval, not a second general-purpose reference. ++oracle covers the fixed tau pair and two boundary modes used by these cases. + """ + from contextlib import nullcontext + from dataclasses import replace ++import json + from pathlib import Path + import resource + from threading import RLock +@@ -21,8 +22,8 @@ + PeriodicPatchStepper) + + +-def scalar_interval(coarse, fine, bounds): +- """Independent G→G single interval, geometric links, no production tables.""" ++def scalar_interval(coarse, fine, bounds, slot=None): ++ """Independent G→G interval; optional (amplitude, width) bottom slot/top rho=1.""" + _, ny, nx = coarse.shape + _, fy, fx = fine.shape + x0, y0, x1, y1 = bounds +@@ -53,7 +54,7 @@ + result = np.full(coarse.shape, np.nan) + for y in range(ny): + for x in range(nx): +- if x0 <= x < x1 and y0 <= y < y1: ++ if (x0 <= x < x1 and y0 <= y < y1) or (slot is not None and y in (0, ny-1)): + continue + values = [] + for q in range(9): +@@ -64,11 +65,45 @@ + else: + value = coarse[q, (y-cy[q]) % ny, (x-cx[q]) % nx] + values.append(value) ++ if slot is not None and y == 1: ++ amplitude, width = slot ++ s = 2*((x+.5)-nx/2)/width ++ v = amplitude * max(0.0, 1-s*s)**2 ++ rho = (values[0]+values[1]+values[2] ++ + 2*(values[4]+values[6]+values[7]))/(1-v) ++ values[3] = values[4] + 2*rho*v/3 ++ values[5] = values[6] + (values[2]-values[1])/2 + rho*v/6 ++ values[8] = values[7] + (values[1]-values[2])/2 + rho*v/6 ++ elif slot is not None and y == ny-2: ++ jy = values[0]+values[1]+values[2]+2*(values[3]+values[5]+values[8])-1 ++ values[4] = values[3] - 2*jy/3 ++ values[6] = values[5] + (values[1]-values[2])/2 - jy/6 ++ values[7] = values[8] + (values[2]-values[1])/2 - jy/6 + result[:, y, x] = collide(values, .8) + return result, current + + + class FaultGuardsCPU(unittest.TestCase): ++ def test_boundary_mode_and_margin_contract(self): ++ cfg = LBMConfig(nx=32, ny=24, viscosity=.1, velocity=0, wall_normal_velocity=.001, ++ wall_slot_width=8, y_wall_bc="on_site_velocity", top_wall_bc="reservoir") ++ context = Mock() ++ context.activate.side_effect = RuntimeError("validated before CUDA") ++ for mode, bounds in (("unknown", (12, 4, 20, 10)), ++ ("slot_reservoir", (12, 3, 20, 10)), ++ ("slot_reservoir", (12, 4, 20, 21))): ++ with self.subTest(mode=mode, bounds=bounds): ++ with self.assertRaises(ValueError): ++ implementation.FixedPatchStepper(cfg, bounds, context=context, coarse_boundary=mode) ++ context.activate.assert_not_called() ++ # Both exact channel limits and the original periodic two-cell margin ++ # must reach context activation, with no allocation or device required. ++ for mode, bounds in (("slot_reservoir", (12, 4, 20, 20)), ++ ("periodic", (2, 2, 6, 5))): ++ with self.subTest(mode=mode, bounds=bounds): ++ with self.assertRaisesRegex(RuntimeError, "validated before CUDA"): ++ implementation.FixedPatchStepper(cfg, bounds, context=context, coarse_boundary=mode) ++ + def fake_backend(self): + backend = PeriodicPatchStepper.__new__(PeriodicPatchStepper) + backend.ctx = Mock(activate=nullcontext) +@@ -145,6 +180,126 @@ + def tearDown(self): + rss = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1024 + print(f"host_peak_rss={rss:.3f} MiB", flush=True) ++ ++ def test_slot_reservoir_eight_steps(self): ++ nx, ny, bounds, amplitude, width = 32, 24, (12, 4, 20, 10), .001, 8 ++ x0, y0, x1, y1 = bounds ++ fx, fy = 2*(x1-x0)+8, 2*(y1-y0)+8 ++ cfg = LBMConfig(nx=nx, ny=ny, viscosity=.1, velocity=0, rho=1, ++ wall_normal_velocity=amplitude, wall_slot_width=width, ++ y_wall_bc="on_site_velocity", top_wall_bc="reservoir") ++ cx = np.array((0, 1, -1, 0, 0, 1, -1, 1, -1)) ++ cy = np.array((0, 0, 0, 1, -1, 1, -1, -1, 1)) ++ weights = np.array((4/9, 1/9, 1/9, 1/9, 1/9, 1/36, 1/36, 1/36, 1/36)) ++ ++ def slot_velocity(x): ++ return amplitude * np.maximum(0, 1-(2*(x-nx/2)/width)**2)**2 ++ ++ def equilibrium(shape, origin, dx): ++ ys = origin[1] + dx*(np.arange(shape[0])+.5) ++ xs = origin[0] + dx*(np.arange(shape[1])+.5) ++ v = slot_velocity(xs)[None, :] * (1-(ys[:, None]-1.5)/(ny-3)) ++ cu = cy[:, None, None] * v ++ return np.array(weights[:, None, None]*(1+3*cu+4.5*cu*cu-1.5*v*v), np.float32) ++ ++ coarse_leaf = np.ones((ny, nx), bool) ++ coarse_leaf[[0, -1]] = False ++ coarse_leaf[y0:y1, x0:x1] = False ++ fine_leaf = np.zeros((fy, fx), bool) ++ fine_leaf[4:-4, 4:-4] = True ++ initial = [equilibrium((ny, nx), (0, 0), 1), ++ equilibrium((fy, fx), (x0-2, y0-2), .5)] ++ initial[0][:, ~coarse_leaf] = np.nan ++ initial[1][:, ~fine_leaf] = np.nan ++ # A postcollision zero-mass/zero-momentum perturbation at a grazing ++ # source distinguishes closed-corner coupling from ordinary coarse pull. ++ initial[0][[5, 6], y0-1, x0] += 1e-5 ++ initial[0][[7, 8], y0-1, x0] -= 1e-5 ++ expected = tuple(a.astype(np.float64) for a in initial) ++ ++ def discrete_mass(arrays): ++ return (arrays[0][:, coarse_leaf].sum(dtype=np.float64) ++ + .25*arrays[1][:, fine_leaf].sum(dtype=np.float64)) ++ ++ # Observe the actual generated headers, without changing generation or ++ # compilation. In particular the fine module must have slot BC disabled. ++ generated = [] ++ generate = compiler.generate_config ++ ++ def record_config(*args, **kwargs): ++ build = generate(*args, **kwargs) ++ metadata = json.loads((Path(build)/".celeris-build").read_text()) ++ definitions = {} ++ for line in (Path(build)/"config/config_method.h").read_text().splitlines(): ++ parts = line.split() ++ if len(parts) == 3 and parts[0] == "#define": ++ definitions[parts[1]] = parts[2] ++ generated.append((metadata["config"], definitions)) ++ return build ++ ++ max_error = max_bc_error = 0.0 ++ with CudaContext(0) as context: ++ with patch.object(compiler, "generate_config", side_effect=record_config): ++ backend = implementation.FixedPatchStepper(cfg, bounds, context=context, ++ coarse_boundary="slot_reservoir") ++ with backend: ++ self.assertEqual(len(generated), 2) ++ fine_config, fine_defines = generated[1] ++ self.assertEqual((fine_config["nx"], fine_config["ny"]), (fx, fy)) ++ for name in ("Y_WALL_BC", "TOP_WALL_BC", "WALL_SLOT_WIDTH", ++ "WALL_NORMAL_VELOCITY", "TOP_WALL_NORMAL_VELOCITY"): ++ self.assertEqual(float(fine_defines[name].removesuffix("f")), 0, name) ++ self.assertEqual(int(generated[0][1]["Y_WALL_BC"]), 2) ++ self.assertEqual(int(generated[0][1]["TOP_WALL_BC"]), 1) ++ # Independently derive all target links, including the eight ++ # whose coarse sources are uncovered, from physical midpoints. ++ targets, corners = set(), set() ++ for y, x in np.argwhere(coarse_leaf): ++ for q in range(1, 9): ++ if x0 <= x+.5-cx[q]/2 <= x1 and y0 <= y+.5-cy[q]/2 <= y1: ++ target = q*nx*ny+y*nx+x ++ targets.add(target) ++ sx, sy = x-cx[q], y-cy[q] ++ if not (x0 <= sx < x1 and y0 <= sy < y1): ++ corners.add(target) ++ self.assertEqual(len(corners), 8) ++ self.assertEqual(set(backend.patch.coalesce_coarse.tolist()), targets) ++ backend.initialize(*initial) ++ before = discrete_mass(initial) ++ for step in range(1, 9): ++ expected = scalar_interval(*expected, bounds, slot=(amplitude, width)) ++ backend.step() ++ self.assertEqual(backend.step_count, step) ++ raw = [np.empty(a.shape, np.float32) for a in initial] ++ for level, array in zip(backend._levels, raw): ++ cuda.memcpy_dtoh(array, level.current) ++ # Read raw storage before masking: active NaNs cannot be ++ # hidden by the public download's non-leaf cleanup. ++ self.assertTrue(np.isfinite(raw[0][:, coarse_leaf]).all()) ++ self.assertTrue(np.isfinite(raw[1][:, fine_leaf]).all()) ++ self.assertTrue(np.isnan(raw[0][:, ~coarse_leaf]).all()) ++ for got, want in zip(raw, expected): ++ np.testing.assert_array_equal(np.isnan(got), np.isnan(want)) ++ max_error = max(max_error, float(np.nanmax(np.abs(got-want)))) ++ self.assertLessEqual(max_error, POP_ATOL) ++ public = backend.download() ++ np.testing.assert_array_equal(public[0], raw[0]) ++ np.testing.assert_array_equal(public[1][:, fine_leaf], raw[1][:, fine_leaf]) ++ self.assertTrue(np.isnan(public[1][:, ~fine_leaf]).all()) ++ walls = raw[0][:, [1, ny-2], :].astype(np.float64) ++ rho = walls.sum(axis=0) ++ ux = np.einsum("q,qyx->yx", cx, walls)/rho ++ vy = np.einsum("q,qyx->yx", cy, walls)/rho ++ max_bc_error = max(max_bc_error, float(np.abs(ux).max()), ++ float(np.abs(vy[0]-slot_velocity(np.arange(nx)+.5)).max()), ++ float(np.abs(rho[1]-1).max())) ++ self.assertLessEqual(max_bc_error, 2e-6) ++ change = discrete_mass(raw)-before ++ bottom_flux, top_flux = (rho*vy).sum(axis=1) ++ print(f"slot/reservoir steps=8 max_population={max_error:.9g} " ++ f"max_BC_error={max_bc_error:.9g} discrete_leaf_mass_change={change:+.9g} " ++ f"final_sum_rho_v_bottom={bottom_flux:.9g} top={top_flux:.9g}; " ++ "raw halos/corners/fine BC isolation PASS", flush=True) + + def test_nonequilibrium_seed1_eight_steps(self): + spec = ref.make_spec(collision="srt") diff --git a/research/refinement_slot_20261013/manifest.json b/research/refinement_slot_20261013/manifest.json new file mode 100644 index 0000000..6515458 --- /dev/null +++ b/research/refinement_slot_20261013/manifest.json @@ -0,0 +1,65 @@ +{ + "baseline_files_checked": 514, + "required_files_unchanged": 511, + "changed_files": [ + "src/CelerisLab/lbm/refinement_stepper.py", + "src/CelerisLab/lbm/kernels/refinement.cu", + "tests/validation/multigrid/test_refinement_followup.py" + ], + "diff_line_counts": { + "src/CelerisLab/lbm/refinement_stepper.py": { + "added": 33, + "removed": 7 + }, + "src/CelerisLab/lbm/kernels/refinement.cu": { + "added": 9, + "removed": 2 + }, + "tests/validation/multigrid/test_refinement_followup.py": { + "added": 160, + "removed": 5 + } + }, + "files": { + "src/CelerisLab/lbm/refinement_stepper.py": { + "bytes": 11001, + "sha256": "6ab5c86b67b215a13b8250c3de0e16552756c81e2124f9ce10b8fba1b5ea6dba" + }, + "src/CelerisLab/lbm/kernels/refinement.cu": { + "bytes": 4264, + "sha256": "025c59dc9c207a831e78e1635cb3f14fe60b64c021004a0d66e5d01fda8554b5" + }, + "tests/validation/multigrid/test_refinement_followup.py": { + "bytes": 19842, + "sha256": "6643e26cd877bf0d0f030e974f00a1d1c0f0350cc76d1c8affed3e8ba2f4393b" + }, + "research/refinement_slot_20261013/incremental.patch": { + "bytes": 18676, + "sha256": "2daca4c9751190df27e18ea79e46685a8fe3cbb6d42b34135b1219b8f53ea3fc" + }, + "research/refinement_slot_20261013/baseline.json": { + "bytes": 67717, + "sha256": "17b1a8cb7e8232979cd1fc9976cb6b78aa58a7005449526ec15cc0bfd45f8139" + }, + "research/refinement_slot_20261013/before.json": { + "bytes": 690, + "sha256": "482b02da26207ce32deb9368b6eb63f9de7b4ab670078c02f458f512fb182b53" + }, + "research/refinement_slot_20261013/notes.txt": { + "bytes": 2612, + "sha256": "8c70efe2acef9f179c453d297b27047b7632a2d55e0739fff4bccf74e0867511" + }, + "research/refinement_slot_20261013/stdout.txt": { + "bytes": 643, + "sha256": "1cabbc8a87a2a237ffa649feac0b1b8e0ae8d769af8c298e600e249d2a525f58" + }, + "research/refinement_slot_20261013/results.json": { + "bytes": 1160, + "sha256": "6245de38106d7a7b0bfea0aa5100b9c9e393ab5436fc594ce0295b4526964b8f" + }, + "research/refinement_slot_20261013/cpu_results.json": { + "bytes": 1421, + "sha256": "2a891c1adcb3b25390ee7967e5171396aedb9cb4da5ae85f7444450d758671d5" + } + } +} diff --git a/research/refinement_slot_20261013/notes.txt b/research/refinement_slot_20261013/notes.txt new file mode 100644 index 0000000..08a713b --- /dev/null +++ b/research/refinement_slot_20261013/notes.txt @@ -0,0 +1,10 @@ +Scope: approved A, coarse slot/reservoir with an internal fixed patch. Only the three files in incremental.patch changed; all other baseline files retain their hashes. No dependencies installed, no DynamisLab access, no commit/push. +API: FixedPatchStepper(cfg, bounds, context=ctx, coarse_boundary="slot_reservoir"). PeriodicPatchStepper remains an alias with periodic default. +Order: coarse pull -> coalescence -> existing planar BC -> collision. Fine retains four-cell halo and no physical BC. Fine coarse-only settings are neutralized. Wall-aware patch requires y0>=4, y1<=ny-4; periodic margin2 unchanged. Covered coarse, outside-wall rows and fine halo are not public leaves. +References consulted before implementation/design: ref/lbmpy/src/lbmpy/relaxationrates.py:61 (acoustic tau scaling); ref/palabos/src/multiGrid/multiGridGenerator2D.hh:190 (two fine substeps); existing boundary/planar_velocity.cuh closures reused unchanged. +Validation: 13 CPU tests; prescribed 32x24, bounds(12,4,20,10), W8/A1e-3, tau0.8/1.1, 8 coarse/16 fine steps against independent scalar FP64 G-to-G reference; one existing 17x13 margin2 rectangular periodic step. No old eight-step matrix rerun. Both GPU cases in one job after fresh GPU0 UUID/occupancy/RAM precheck, exact command and resource monitor in results.json. +Population tolerance fixed in advance 3e-6, BC tolerance 2e-6; measured maxima 1.78241457e-7 and 2.21654773e-7. Periodic max error 1.14050047e-7. Raw arrays/NaN masks, eight corner links, actual fine generated macros and public leaves checked. No active NaN hidden by masks. +Open-domain discrete leaf mass change +0.0309633738; final summed bottom/top rho*v 0.00426894613/0.000960694626. This is reporting, not an assertion of constant mass or proof of global discrete flux balance. Coarse owns the nozzle; no wall-touching fine patch, steady jet or convergence claim. +Two read-only agent reviews found no blocker; oracle uses independent scalar transport/collision and the same analytic BC model, plus independent macro checks. +Baseline provenance: production snapshots taken before edits. Test edits began before snapshot; test baseline reconstructed from delegate's exact edits and matches prior example manifest SHA256 d2df924dfd5267e732036c6df27bb8809f59f1d371da75f506c67aad5997f322. Prior evidence retained unchanged. +Resources: live RAM/VRAM reserves, no fixed 256MiB RSS cap; combined temporary budget 2,000,000,000 bytes. Peak monitored temporary bytes 1,548,161; GPU job exit0. All task-owned compilation scratch and baseline copies removed after diff; monitor is sampled, not an OS hard limit. diff --git a/research/refinement_slot_20261013/results.json b/research/refinement_slot_20261013/results.json new file mode 100644 index 0000000..03e6830 --- /dev/null +++ b/research/refinement_slot_20261013/results.json @@ -0,0 +1,34 @@ +{ + "command": [ + "/usr/bin/prlimit", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "/home/frank14f/CelerisLab/tests/validation/multigrid/test_refinement_followup.py", + "NormalBuildGPU.test_slot_reservoir_eight_steps", + "NormalBuildGPU.test_offcenter_rectangle_margin_two_one_step", + "-v" + ], + "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-slot-run-w08ggv2y" + }, + "exit_code": 0, + "elapsed_seconds": 4.192506395978853, + "peak_sampled_group_rss_bytes": 292327424, + "min_ram_available_bytes": 63762022400, + "min_gpu_free_mib": 15826, + "ram_reserve_bytes": 6403901440, + "vram_reserve_mib": 1614, + "peak_combined_temporary_bytes": 1548161, + "temporary_budget_bytes": 2000000000, + "termination_reason": null, + "monitor": "Own process group RSS recorded, not capped; live RAM/VRAM headroom and temp bytes sampled, not OS hard limits" +} diff --git a/research/refinement_slot_20261013/stdout.txt b/research/refinement_slot_20261013/stdout.txt new file mode 100644 index 0000000..d57b917 --- /dev/null +++ b/research/refinement_slot_20261013/stdout.txt @@ -0,0 +1,11 @@ +test_slot_reservoir_eight_steps (__main__.NormalBuildGPU) ... slot/reservoir steps=8 max_population=1.78241457e-07 max_BC_error=2.21654773e-07 discrete_leaf_mass_change=+0.0309633738 final_sum_rho_v_bottom=0.00426894613 top=0.000960694626; raw halos/corners/fine BC isolation PASS +host_peak_rss=184.383 MiB +ok +test_offcenter_rectangle_margin_two_one_step (__main__.NormalBuildGPU) ... normal rectangle 17x13 bounds=(2, 2, 6, 5) fine=16x14 steps=1: max_population=1.14050047e-07 device_arrays=35288; halo/stride PASS +host_peak_rss=190.262 MiB +ok + +---------------------------------------------------------------------- +Ran 2 tests in 3.892s + +OK diff --git a/research/refinement_slot_followup_20261013/baseline.json b/research/refinement_slot_followup_20261013/baseline.json new file mode 100644 index 0000000..89a26ce --- /dev/null +++ b/research/refinement_slot_followup_20261013/baseline.json @@ -0,0 +1,527 @@ +{ + "copy_dir": "/tmp/celeris-slot-final-baseline-24iw9lnj", + "hashes": { + "src/CelerisLab.egg-info/PKG-INFO": "0b9a8a4e8d60bc531473688723ddef0aab02c7ccc4997e31c9b6a6c35011ca77", + "src/CelerisLab.egg-info/top_level.txt": "cd51958ca03afabbaa9618c60b8280e486f8cc0b0359b839e10f886e7c3948f8", + "src/CelerisLab.egg-info/dependency_links.txt": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "src/CelerisLab.egg-info/requires.txt": "36e1404178e5ea590b2fc04e8ba4d748ec9a82e7693136ccf0dfd204fe265c04", + "src/CelerisLab.egg-info/SOURCES.txt": "f36b29c1b34c4bd6b2acc3ccdd21c24ee5077df7e2a20a652d9fae77eedb8e21", + "src/CelerisLab/simulation.py": "34d69e71844f553790c5a2bed0f8fbfb912a9498e95b500d1ef2ad41cae3b424", + "src/CelerisLab/config.py": "2f1bba7515f5bc08cb3a8d140bcafe7fa0689e01b3b06494697bb2956a71530e", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/cuda/compiler_v2.py": "c4cc3ec4445c8d75e6a253dd87963877117a722bc73b9d4811806fc6045d08c1", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/lbm/refinement_stepper.py": "6ab5c86b67b215a13b8250c3de0e16552756c81e2124f9ce10b8fba1b5ea6dba", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/refinement.py": "554735c5613129eb29f339c6aeeb4f3a3bbc5aba67558be51fbf7c2fb6ac442a", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/refinement.cu": "025c59dc9c207a831e78e1635cb3f14fe60b64c021004a0d66e5d01fda8554b5", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/kernel_v2.ptx": "a599ee30ae66800f4d4220eb79dfed35ff32991661260f01ea58023ef780f0ca", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "f9f8242b38e8e0cf8425b75e2b0215bc15363c62eaa0fb43c761b8e0931bfdc9", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/common/checkpoint.py": "5b7caf3896167a3f37c539b58837de6eb3f8085fa7bf5f821a09666cc16d43a4", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/CONFIG.md": "41cafdbe525366c08aa9d0416ea026ccf0026ba7123b8a9b65f968a80d928e3a", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_j1.py": "51b758a271ff358f931b3140a80082294a67e66c2fec0f8c19319e37f92aadc4", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_j2_slot.py": "b7d2d3aa06fcafc3ac62ed4a50892afbdb7f86e5720ce75a39ce317b6f571dad", + "tests/validation/run_j3_coverage.py": "329869519b7078e854d96241a7aad8ef93f35ac9be83f0be502c3a93523c3b13", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/analyze_j3_saved_frames.py": "438f67dac682b94c4950626f8de4fdcde48c3a4e9ecf8fdf1b0ada4b6e0e781a", + "tests/validation/diagnose_j3_lags.py": "286fcd65b3261667a847b9b26e213d0af92cf459faa6bbd774f78c8479ce31d7", + "tests/validation/run_j3_reservoir.py": "47535bc3569ce68c888d38978bc4f9077fd763a17829c20c081be52bb18a2903", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9", + "tests/validation/multigrid/test_cpu_reference.py": "ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca", + "tests/validation/multigrid/cpu_reference.py": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "tests/validation/multigrid/cpu_reference_v0.2.py": "b6adbad7da625ef6a6b97958ea9625030ed92676d0cada48e061c87bcf7ca8c9", + "tests/validation/multigrid/test_open_corner_negative_control.py": "59a6f8ca80cdd63cb7827fbebf9b4b555c3793f19dd6bca801544ec10b5cbe1b", + "tests/validation/multigrid/test_refinement_followup.py": "6643e26cd877bf0d0f030e974f00a1d1c0f0350cc76d1c8affed3e8ba2f4393b", + "tests/validation/multigrid/local_stress_observable_v1.py": "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456", + "tests/validation/multigrid/test_refinement_gpu.py": "0021a39b3a131347196845cff6507c90c387b46b772fe1319d634178c5e13354", + "tests/validation/multigrid/shear_diagnostic_v0_2.py": "a8b1cf2f7abd00efc4d068bbd27bb2317144a6ca4c545d9b2e0dcf421eadebc6", + "tests/validation/multigrid/test_tron_additions.py": "8e7a6a90b85e64c7326719e7b8bca2f6d34fb4c80690f0685f7e291ab93bd2a4", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt": "0577df5b3f5cb3c7b6e1ef2de71344f8fd3e6d959117487a06cbaf7f2afa3dea", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt": "28ddd1267ca91a772f5a6bfc65d949c9a4ea7dac5c9ba3a0bdb168492810b670", + "tests/validation/multigrid/shear_v0_2_evidence/run_once.py": "6698a2e040c56be949b809387d4518eb0ba82d34cc9d99640da4f8bf3c35c23f", + "tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json": "56fbd0259ff3d4dbd14ace52f64e249a435e9df91732b0e4027def2c344c2e6a", + "tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json": "c2d7ce8d16a0f47baff0788a153353dcf67088da974d9cd3d521b04ecd91ee05", + "tests/validation/multigrid/shear_v0_2_evidence/comparison.json": "41c00372099dd04b6d323785e9eaf4fec09da1753d3d150ffa230800f904142f", + "tests/validation/multigrid/shear_v0_2_evidence/baseline.json": "98a7853341ea732762c7506694e3a867a7259bf110e9e461ea84f741fd9ab829", + "tests/validation/multigrid/shear_v0_2_evidence/manifest.json": "e42aa19e91608164698bea42da88fbbfab8b0f87cc37b27c5baf165453a4fdb0", + "tests/validation/multigrid/shear_v0_2_evidence/README.txt": "4306a34b6896bd6e7a5c2ca71d68e18450359239d0c7ad7a67a4e83e7155959a", + "tests/validation/multigrid/shear_v0_2_evidence/joint_report.md": "1860b8082108c8b8a87998af90cd0b81dce1c04e9f6c67b41e0912f9fef6cc9c", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_horsea.txt": "882f2cfb1dbdf82cce63c011397e7c2e6307bbcfec42a3510648d328cd6ddcfe", + "tests/validation/multigrid/local_stress_v1_evidence/run_once.py": "e629800291ef65ffea8555f66ec80bf15200552540b2a493a677bfb53d0830b3", + "tests/validation/multigrid/local_stress_v1_evidence/source_manifest.json": "d2cf90b73458f493c665c9a281d06aef0c190cf0d143639fb77ab838c78f020c", + "tests/validation/multigrid/local_stress_v1_evidence/results_horsea.json": "f17b4644d19eb75d55deb7021ab679cb9e7922a2b46f1cacf8b6da6bfb9a2690", + "tests/validation/multigrid/local_stress_v1_evidence/comparison.json": "be236671a501c31c06f7e266f6e0c0c2a89aede321a483452050ff37bf84c84a", + "tests/validation/multigrid/local_stress_v1_evidence/baseline.json": "64f6541447afbd15b1b15d802ad6f1b5042aaf84e7d4d2414e4ed4c52cf70507", + "tests/validation/multigrid/local_stress_v1_evidence/manifest.json": "3a9fa8c7d691c1b8c24f05940eb724d30b890dd8ed636551068d2633d7db2f70", + "tests/validation/multigrid/local_stress_v1_evidence/README.txt": "4f62314876047ee437bb9ecbf84798d2a9f6e85f6a3aef260277b85bcdb35fae", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_local_stress_observable_v1.txt": "6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4", + "tests/validation/multigrid/local_stress_v1_evidence/TABLE_local_stress_observable_v1.md": "d8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt": "457f1d2173496554c87ca6e61df518c0b8f1e0a28cdfd94b94ebbb61bc459d70", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt": "73e4ef01138842981daaa534390f1463839e63833c11f4e8872f94f8eaadc717", + "tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json": "914389afc39752bcd4132aa21fc8d5cbcf0ca75b1efd6a49becab15c2fa3361b", + "tests/validation/multigrid/cpuref_0_3_evidence/baseline.json": "0daaccee41cabeb17a00e2405e2c7fd0b80d36f2d01778eb39c9fd22b13d2d47", + "tests/validation/multigrid/cpuref_0_3_evidence/manifest.json": "2850ecaf2e19d010ba35eb54162371d82cc1a092831e08a03b6adf75a614988b", + "tests/validation/multigrid/cpuref_0_3_evidence/README.txt": "1947ee0232b88b3cc2c506d0b0af5ba051ecc94aa8f7f09228ef3939cc95919b", + "tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md": "065947e15b2242bce7d3eb05a3acdbb59939c621dcd5d31540ad4a1bd4416818", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_planar_velocity.py": "b656da0880b4234b1db805544edbe0d2473cbcc7c2c869c71d8251337f62a982", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_reservoir.py": "e718c78a53c3941aba7feb8ae4e8bb0b1726c1145de84febf91220c1917991c9", + "tests/unit/test_refinement.py": "90751142f920f1c5e988577a45afa94871a6617009cdc78323a87fc7795f4634", + "tests/unit/test_slot_velocity.py": "6a9494de9a32c350389ccbed58af48951f6b25a21a258537d2e8b73eb67cb11d", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/cpp/reservoir.cpp": "c3eacaf0271400eb45ad559b571a8f7faa2a809d5f1857ffeb5592addce2cd0c", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/slot_profile.cpp": "31ac58ccab175bf79fa59fc46d4c0842df18ab0a5e5916be84760d9da2b75788", + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C4_deceit_f1p5.json": "11dab8440d8c4f385061d2536403f4313c6f026b4e0b7672681327a9f4f37ebb", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C6_deceit_f2.json": "e0c4e8bcc55da5dc8de1e2fe88029aa3e67453734faa44451f5a6dfa9131557f", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C6_deceit_f2.png": "e0a66708ce2a29c4c6b854d2596b3ffca181dc6e35d99cc94e08af3e2d8c024e", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C3_deceit_multi.json": "24c8e433aab6d207dab67546c4079868c4244c2948c32c94cd08e4f331991807", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C0_no_ctrl.json": "cf3af733a08f081cc5f879e8da79d7c60104099f4452af5b2a4a96c0e6bd5889", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C5_deceit_multi_f1p5.json": "a4cb4ff4481b39b9ee61b1d7209416237a7fe86b22c5068d713ccec9c3f7afe4", + "tests/output/exp_ctrl_matrix_streak_ny300/manifest.json": "d8a20dacc92321d98354684976f771a9ca8989fc63ddcd78e15c7768c6617671", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C3_deceit_multi.png": "c6fed617cc6ffe6677157a9b58811d5f4613725eb98a5aec830fd07dc1aac38e", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C2_deceit.json": "7526a6b20a158461b85b1a64070b46c2b21be1e01c5ee025e6746fcf47ea3397", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C1_stealth.json": "63d34a0ab33e9fa8fe7311363efbd1b2875691f5b4958bb645b8c7ac38f1ad6b", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C0_no_ctrl.png": "0cfd7ce8f9d743bf22a7a694b4e5a3616557cb8f1db2f4ddf49cc4bef96efef2", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C4_deceit_f1p5.png": "4dcfc186928dcb83d28e9eb4cb2ecb4b163eb6f121d57036b4c05ab162be0951", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C1_stealth.png": "5e3cbbefda06fcef243d7d06d74a473972350cfa4ae88bdfdb349dce13943151", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C2_deceit.png": "22f1db77499bdbd1b3cd35f5b58b1a884dd94a86fdcfef07abd4157e6aaf8d19", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C5_deceit_multi_f1p5.png": "823e475cc901af3d6f4d0c56eb07822b3e73a2b9d0aa23e20e3741023fe90092", + "tests/output/kan99b_validation_esopull/summary_runs.json": "fe3294a953580204319fb1143434e15096d8455b6073100dfe0d5491b76af394", + "tests/output/kan99b_validation_esopull/summary_runs.csv": "1a44bb27ee0a7fe0270905248c37364834248cdc8710bd68142a6a79bbdad82b", + "tests/output/kan99b_validation_esopull/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "9fbc7d507c129ed85c68a9a313e3eb3431470d091bd7723e63f8afd8a3d2b737", + "tests/output/kan99b_validation_esopull/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "8faac43f42d6e0c70085c6e616bfff4df8de897e315fc0d2b4aa8bd635c3fa05", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C4_deceit_f1p5.json": "b613ae55fcfbd45a1a922d6d529e5274ba9d2987fdf5620fe866b889b931e48c", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C6_deceit_f2.json": "dbf54f9a183072547b22fa14334f0167e6eefb21c1208c4e8584bc196545a399", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C3_deceit_multi.json": "2100c6cc5c358a249804ce8f6f98531f3bc868e27af6d21a9d441b1b6a9e479e", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C0_no_ctrl.json": "a8b4697b7c0caeb958f80e282e32d673deac8c914008d64e6b38f7883eacc57e", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C6_deceit_f2.h5": "8d0c28566d2230b422691b738cc453705496bd150be038a576c0c0fba218fc1f", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C5_deceit_multi_f1p5.h5": "608767ca11d104fa4506b57204a0c8dbd739688224ebd924fe517ce9e21db823", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C1_stealth.h5": "a83c988cc8b1173a7b2f13b132ed7243e98304dccab2965aa16cf4d32f8df007", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C5_deceit_multi_f1p5.json": "6f6b9300782178e0ac9308a677bd9cb1565a383a78dff4cd52dea0bd464db31d", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C6_deceit_f2.png": "21bbe2dac1ab06ca1b172ec62d00daa7bcd65d99adac0ed03c5e30bed59e871a", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C5_deceit_multi_f1p5.png": "602a6586277699968b4cb167b134c8c406577038af088aa70baff682691398c4", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C1_stealth.png": "c1e1d04f266deac5fb2815a8283da80f9139ffaccbec2219d98544296bf3152c", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C4_deceit_f1p5.png": "96dee924e89b90091192a8d7b43321f109a5491511b8a83da77cfc611ae0d93b", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C2_deceit.h5": "aa5800a0cd594eeb7cf5449d6469d55e0c9033ced0ee0a3b5d59152e68c7e263", + "tests/output/exp_ctrl_matrix_vort_nx1500/manifest.json": "5d28f0f5428d7f0341e20d5d1f19c17bbc6f0f9b2a441d3c95f5422f3f2b4bd4", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C2_deceit.png": "1dcb6fb959f944d7ad89c4abaaef4d1fd4a77db8901804530e86fb336b883eb5", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C2_deceit.json": "b88ff5049aef59876b349d105f1c3467c17c9ba9022a48a77a6984f20da34345", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C1_stealth.json": "515689cbfaa30a9e39d9907939ee194a4836b644a5e9124586e6b7221d2b394b", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C3_deceit_multi.png": "d69694a1a1b2f2ea0adc7b74b7526504e2ad0b5d6317bac9b3159b2e7e88cf90", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C0_no_ctrl.h5": "3a858d6be0a946e1d26bbfa192c2f0ca3910c0f140b42575ec9d9529dd99155a", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C4_deceit_f1p5.h5": "660e4619ea530dcd18c3afb2e7fa22cafd9cdba1be7888e31ab5b76a0902d2fc", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C0_no_ctrl.png": "6d4d3934f1c8b20c2a5c742ae080a7143f0c139741966adf009a227c27e9bb1f", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C3_deceit_multi.h5": "1e72126f11b2995437cecb8cc0eeffb8807efbfa43d8f346f28711fea98ddc90", + "tests/output/kan99b_validation_ref/summary_runs.json": "449316c30585a8de9997538dead5d4e35a59bf00a2ac22d01b101ab600a4bc06", + "tests/output/kan99b_validation_ref/summary_runs.csv": "e8b9620f3772e5e421026103e456e6e844a91292f40affb96174c9dbde9b6e4e", + "tests/output/kan99b_validation_ref/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "4391f41d17ebeea1092f13b901923ced4ee2a1c5b346b79ef791d692847286b5", + "tests/output/kan99b_validation_ref/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "105c6eb21f1943d9d935246eab1602ff2016c415a139e24fee2793e88e006ead", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C4_deceit_f1p5.json": "0085a679a423621003eea81d4ac83bfe2edef2879eed7809d2a3675a212f791a", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C6_deceit_f2.json": "e820cf73f0e90bf93c34b24416e7692a6c2e51352ccf490fa6714d0812331ca2", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C3_deceit_multi.json": "571370c74ad9af589f3dc214669bff3d857efe6fc4fa13815b5d793d12b53770", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C0_no_ctrl.json": "ec5b89961033d8ebe0d66ce1ec7940dc2faf98130c38319bc9984ef654e60b50", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C6_deceit_f2.h5": "2792be74d8564fa29fd0636fc8493630fba2779c165b44330197095b3e296b18", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C5_deceit_multi_f1p5.h5": "2c64ee6c7a4ea2c42ed8f3d274402bec62de0e02ea0340e16022f0cdc92af724", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C1_stealth.h5": "100727d94fe6c2e46d7807eed0442555bdd1e26ec9b04b4c457171a2bbba3255", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C5_deceit_multi_f1p5.json": "f86166f121b4eeb6d74d8176c9265e7a3ccfe2540d040f554b6f96e6a6222c16", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C6_deceit_f2.png": "fef4de0e3ac8203742f35c16a02445b19c3f556b11f73abd5d8e3ca05ca33d78", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C5_deceit_multi_f1p5.png": "9136448e6d7565ca5af3666f9cf6e154342d8a3475076abfdbdd1ff9faec34f3", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C1_stealth.png": "544537a9c500a05937fd3be17c25e7d887461d9b83a15564f9ab7063208f40f6", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C4_deceit_f1p5.png": "51e7056db99dd653affbe913d52fa41df6ec0db921109384e3c679bda06b5a83", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C2_deceit.h5": "39d6c162085acae1612650da37d2314757715931e83a854e08bb01407d0f8efc", + "tests/output/exp_ctrl_matrix_vort_ny300/manifest.json": "05fbc2e7bbad4267a38e1094bbdd6bee6ad270412bdb5e92b0dfc9fa56969517", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C2_deceit.png": "07fc5817eba30371272b87ee2e023c0a1144077d1bef77efb2fd5dc284badcb7", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C2_deceit.json": "b1fcf76039c91a9080b830352dee2e95316d754b968cc27a8f68c51527661e76", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C1_stealth.json": "b78851637b9b7b93070524a2933cae1dab6d682f8894579b2849c64921e6c29e", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C3_deceit_multi.png": "2658f0747ed7287f7912fe15cc58a086e01ba284277cb98689bac01ecb6ec12b", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C0_no_ctrl.h5": "57f73f5f8dc4b32b156bc82300b1efd1e4eddadd9b8dc51cb7e6b41fa5c966bd", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C4_deceit_f1p5.h5": "2864b9dd086709ee8b8c3f262118a5130b0d40c86838f3ca0deab5bb898dafa8", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C0_no_ctrl.png": "2c7f3a8be2ee540afdfb66299e43a65583434bee84bde590124524a82868c900", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C3_deceit_multi.h5": "39e0d9b032dfff8cf057b410a98973729285e7d03e89f9a6a002aaf7de3d7519", + "tests/output/stealth_sweep_fix_check/summary_stealth_s150_w0.02709.json": "8b1032e13975bb05c6a810fde175c8da51bacdb3dc745fd11c1049ca63bbf136", + "tests/output/stealth_sweep_fix_check/summary_stealth_s050_w0.00903.json": "fa7da24d5dab9fd3a3c2dea6b50d0224c7a99cd9141796e137304a6040b1ac8a", + "tests/output/stealth_sweep_fix_check/streakline_stealth_s050_w0.00903.png": "640928f7eb159e7caea32036123f86c281723d083cca46839ba86bce8361ada7", + "tests/output/stealth_sweep_fix_check/state_stealth_s050_w0.00903.h5": "187ac365f9f7370c888c4c65570c47e42465b2fccd432056c176528d45cf0c2f", + "tests/output/stealth_sweep_fix_check/manifest.json": "83a3f12a942fb644e470bd07a72f24921f2147d7df429110268c5c96a9953d1a", + "tests/output/stealth_sweep_fix_check/state_stealth_s150_w0.02709.h5": "e057e9db26b2546c0704e2c959cc7d2aac91e6a49b4c7ee75a409597a5db8716", + "tests/output/stealth_sweep_fix_check/vorticity_stealth_s150_w0.02709.png": "d2d202088624cf30868228f9c913ee30e1b386aaa2c22b0ea89be43dedc0712d", + "tests/output/stealth_sweep_fix_check/streakline_stealth_s150_w0.02709.png": "0edc7caa9caaffb754490bf1f6ac7ad7180e45a991439a3f4f83ed949a082a1a", + "tests/output/stealth_sweep_fix_check/vorticity_stealth_s050_w0.00903.png": "4088359b17c46ed4d7c8401d244808fe67723273b1d16d0671b69f9478c68c1a", + "tests/output/final_validation_round/validation_summary_report.md": "881cb7052e5a555afc87168a37268ee66e8e3fba172533706e858d996fabc7b9", + "tests/output/final_validation_round/sah04_mixed/s2_d48.json": "83c6c01201d90aae5c49e73ebeca88d1c7ded6cc83c13f4892a9188e6289483f", + "tests/output/final_validation_round/sah04_mixed/s4_reg_d96.json": "b32f03e6b347fc709cea2ecd488df0f85849c733bf6a4b9cf65ea69401c93a1d", + "tests/output/final_validation_round/sah04_mixed/s1_d48.json": "120e8e878f5712dc89b7cf78c7f8d0e3368d34ad5ef7494977e083b188a54c18", + "tests/output/final_validation_round/sah04_mixed/s3_stablecfg.json": "b38a3d197a188e65c163d974113af18f332b3abed083e2654e998d9980f6be9f", + "tests/output/final_validation_round/sah04_mixed/vorticity/s3_mrt_laststep.png": "dc96fcd05d458684cfb40d4cb741172213083e2f2665e2bae7e1f0267bb3575d", + "tests/output/final_validation_round/sah04_mixed/vorticity/s1_mrt_laststep.png": "73a3580ba3c7fe6ffeee4676a9a51b5bf678d6fb523456a61e185598389ea1e1", + "tests/output/final_validation_round/sah04_mixed/vorticity/s4_mrt_laststep.png": "57f2a82761f2de1a9fc2b78ee86159ca542c966494b9c704deb451da857da778", + "tests/output/final_validation_round/sah04_mixed/vorticity/s2_mrt_laststep.png": "786f492b96ed932254b5452e2d06ff088727f2d88c7e7c7b47d386eddfe07862", + "tests/output/final_validation_round/kan99b/full_summary_runs.json": "8c4a11cbf555e08a66698439170b850c57d537d8e75e4dd75beb767bbf7e38cf", + "tests/output/final_validation_round/kan99b/summary_runs.csv": "3fa92fdd3114f0472de44bc03006af1d4b694dfc69b06704c1667cd3627b6dab", + "tests/output/final_validation_round/kan99b/force_csv/k5_baseline_domM_re160_a2p000_regularized_mrt.csv": "de05e9699146f2adffc9d7c9991f9e48396aacd142afc3c08b2b64727c83c69a", + "tests/output/final_validation_round/kan99b/force_csv/k3_baseline_domM_re60_a1p600_regularized_mrt.csv": "53cd0dc47328b7b370eced1130508655e6815a29b727bf1fe4e4e125e4918905", + "tests/output/final_validation_round/kan99b/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "4cac1ccfdb7451de3e26d921a6406cc55d1d4630e10ec0d7ec9350a4abd49404", + "tests/output/final_validation_round/kan99b/force_csv/k4_baseline_domM_re100_a2p000_regularized_mrt.csv": "392c98de52011ddb344a5761c4520e870f4e49bbba3e144e5a02818ba2f9250b", + "tests/output/final_validation_round/kan99b/force_csv/k1_baseline_domM_re100_a0p500_regularized_mrt.csv": "9e83c5175aec644c0b97c081e610deefa731b87aef04da6297abf662a71c0702", + "tests/output/final_validation_round/kan99b/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "55b071f278e153aa353aa2bef85f0bce35b910a7b08103032023fe3a28169b89", + "tests/output/final_validation_round/kan99b/vorticity/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.png": "b91b332e7deb787975d3f08fa3325facd4a972b536694fcda52e6c01943c42cb", + "tests/output/final_validation_round/kan99b/vorticity/k1_baseline_domM_re100_a0p500_regularized_mrt.png": "6e7c3f6567c0ff0d00d75da8373031f5ba2a17a624cb8c5d5d6ae4f8749c33c0", + "tests/output/final_validation_round/kan99b/vorticity/k5_baseline_domM_re160_a2p000_regularized_mrt.png": "c4d232df2e6f7466acca711191d976aa9411ec0ade81572b531463f42a7d633a", + "tests/output/final_validation_round/kan99b/vorticity/k3_baseline_domM_re60_a1p600_regularized_mrt.png": "b2314c60491d20933422e1697998555dec2436d39545c71f990e9906884685b2", + "tests/output/final_validation_round/kan99b/vorticity/k2_baseline_domM_re100_a1p000_regularized_mrt.png": "2b2797b8f53170d04d1a70d1cdf898f7e41b3a76b9f3c1f276dfec952520ab04", + "tests/output/final_validation_round/kan99b/vorticity/k4_baseline_domM_re100_a2p000_regularized_mrt.png": "8135f470404fe11ac97968fa580ee35232e90dcace3c6ad94de17ef7aace24d6", + "tests/output/kan99b_validation/summary_runs.json": "d7239aac64884202558741074f2d644ade9e2365d94d0b7556fba68dac94868d", + "tests/output/kan99b_validation/summary_runs.csv": "c44da69563d58b917291a9fd402d1f57055861bffab6f9e32d7db91297428d45", + "tests/output/kan99b_validation/force_csv/k5_baseline_domM_re160_a2p000_regularized_mrt.csv": "27b64460923d235d34b760f2a2371ad01611a70e38edb03d6fd6a2fe7a7de6e0", + "tests/output/kan99b_validation/force_csv/k3_baseline_domM_re60_a1p600_regularized_mrt.csv": "76ff52f4494b7ef7650c05968732a8caaba94d2b151234c02cf624f5b3a712ab", + "tests/output/kan99b_validation/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "28a83436ca8bdad38865ba21ce1bda679562a5ae1cfc6ee8fc6e86ff760ec66d", + "tests/output/kan99b_validation/force_csv/k4_baseline_domM_re100_a2p000_regularized_mrt.csv": "823ae04870fd951879024a18169ac5cba8db4b3201726f6a00f320f1958d04c6", + "tests/output/kan99b_validation/force_csv/k1_baseline_domM_re100_a0p500_regularized_mrt.csv": "a591daf2cdecd6ac3689fa2a2aba917b23053ad26e3ef1f635c81aecc451475f", + "tests/output/kan99b_validation/force_csv/k0_baseline_domM_re100_a0p000_regularized_mrt.csv": "e95c27c646c0c9baf8f455f876c115c8dbdb23cef9d9d550f455098bf0c03b55", + "tests/output/kan99b_validation/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "3c2ea79a0e27f561215febee2e165d24b3617a648bf908981c068ba59d549c51", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s125_w0.02257.png": "a892f18c74fe13efd839bfd5068097ca0ae07acebf6c06eed89e1b867e41fcb2", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s125_w0.02257.json": "7e542f59746429022ce1794854c6fb36e8ac658dd0aea3bc1140a45e83a3f1c9", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s100_w0.01806.json": "b76216e0fbee00ef754edbafe5790a99ce7d53638af629947ddd9615598e4c08", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s150_w0.02709.json": "42cb241d9cfb01308ce28e129756b6cb3fe2a8e9679518da84bcb8b607fe92ac", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s075_w0.01354.h5": "558be308dbf334832bc1d29419ba5be142969117a11b124864f6b221c8fee509", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s050_w0.00903.json": "53b579811a0b651ba7cc466c230c115b9f88486c6675e0465d0715d3377a75cd", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s075_w0.01354.png": "9f4a7d89b2471becaf31e84c14402441c5fd96fc7190cea5e8a9fdd06ee62002", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s050_w0.00903.png": "5f18f56b0ff2af3350216b65540a2bc664c569520624cfc6cc2439a3c5369560", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s100_w0.01806.h5": "30776f333959e0e9eb5ca96b269e6a8052c5b94941a4e3b36d8a6af8076920ce", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s075_w0.01354.png": "b5393474d99191e88dafea4144b6a8eccfbdf75107125ce4b05383b17007d06a", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s125_w0.02257.h5": "4ed9d8587f75ad4625ec5501fa99fb733cde037180ac53f92a210ffbb08375de", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s075_w0.01354.json": "ff1c1cc649e589b5425787493c2b0d04b6c39b43043b1968d65509cb0a426e82", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s050_w0.00903.h5": "4de51584b24095f8cf4480b8941593a5f913332f9396061ed077c9d49eb2ee11", + "tests/output/stealth_steady_sweep_nx1500/manifest.json": "0dfbb2c1b5bf9093fef169e4dc6319edb5c87a1e967e8d558613e2c64a2ca734", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s100_w0.01806.png": "60824cbdf21170cb4ffd8af0a49e8522c2d79cb2694690ab67995ee973265efa", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s150_w0.02709.h5": "b22d54a05cbd3138a1fe585a825246989fcff7c00f51aa9312a4185d963db933", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s125_w0.02257.png": "c1e1d04f266deac5fb2815a8283da80f9139ffaccbec2219d98544296bf3152c", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s150_w0.02709.png": "bcf098083a73798dc3906807218058cc571435a010234a5a350b585ba9915c78", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s150_w0.02709.png": "3bac21cc75a01429399cec308d6bf5fc8918917def1bf5d7fec1cb6003390a41", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s050_w0.00903.png": "a675f41df763f0a1ac0a06386315806b24f2571f5dabc8693fcd871a13ed22ba", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s100_w0.01806.png": "92515588596596cc1d691c643fa48cf828492c2eaed96355dcec58109de4b5aa", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C4_deceit_f1p5.json": "0393661f08b748428fc366eeecec3b34b9d9a013aa6b151a15b33c7e3c0e1818", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step080000.png": "bffef412087e426b614d8c05e59bd7580ee49bb77319279ddc4c1bf825678c49", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C6_deceit_f2.json": "de067f01ef5c11249d67bbe5e02db6f2b4c5590214de02609bca115edf8dee64", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2.png": "846badbae81b75f765d89e5a7c4f88aeb5d57f2387511e4f2f84c72a192ea9f2", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C3_deceit_multi.json": "eb21d1c69e51f01c1a6be1ce59fe86763089ea5aa667b8872d0186af035b24b2", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C0_no_ctrl.json": "780a0d329cb86990a17a088f49084410abb1fad24f659255918e5ddda6b3dabd", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step080000.png": "ff7836b8229d9a5dd3900f499fe3e7f0c73a61c7109b6e6e79b11a0fb459bb63", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step040000.png": "f2b56a7e30bcc363ed69fc19705403181ac5de90800eef03039a389a65869e30", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C5_deceit_multi_f1p5.json": "261b698723f19526a447679a2be8666c8d0cbf6df81b0c9de6d051960d77308b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step060000.png": "0697e0ae06a01154afdcf00330ba870bd8f36d21561a33846ad7ba63fb731179", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step040000.png": "1de3d7f54e91c5d5850f4358d1872e16fefb36d32a1b6293facb54524e32315c", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step100000.png": "91f0bf6ed3e854f7f83623a3f19bb12c83b4aac239e3eaa849fbe50e7baddff5", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step080000.png": "303c1d2d4c49b4a7495365c8cb2bcbfe9bdda7cbc0a7c7dd1f01e8aa62b3573b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step040000.png": "dd5945458a35d81b31a0e2f3a693a5023d6960474263e7dc86c22367a56cc13c", + "tests/output/exp_ctrl_matrix_streak_nx1500/manifest.json": "0d97efed02f775c25dd8a2d7439f310b715d142ff8d603c9da6ddab197570ce8", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi.png": "69022ef9175acf910374ec73848640548b85fc7beb7e6950843f52c10ed7d61b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step060000.png": "16ba30b8cca0d49e6b76be0bb4f0d14bbf276ca6ec47ebf56907c7534e15c4e0", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step100000.png": "8548b6dff635cf9c92e2baa119866277e3994366eb31aeb30641b03b3d80ee9f", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step060000.png": "56100f169c3e378b84bfc89c5477d2c142ca043d9f28eaa70bc5448c49c7f4d5", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C2_deceit.json": "587cd42d81b1325bbc766d9ca6c1fd3d076bf5a772efd45d056c2c4e3db742b6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step060000.png": "e43e95e7126de8cb857154353f161914c225f8c9f17eb44b1ff744249368a4d5", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step080000.png": "676d21ffc7180d34a6725a8bf49503ce59f48d65500450c3975d01e65162899e", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C1_stealth.json": "73040aeb7ef07c538d4687b101c599210e660202eb1c2c3e0894dfbde682d137", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step100000.png": "e22171ef86979c4398c45ada9cd0f5e4c4e5b034f271df5fa8ac9a762a8554cd", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step100000.png": "0d73042be73b0de8d0a591e56c01e3c802483aa22a97f27e0300cba82c708066", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step040000.png": "a6e95fd5c24052db20d5ece200edcfe5e261c00950ca964c89df9f7335579634", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl.png": "d74061347ac3505fad878e330f6cb04d23bdb13082bfa1afa2fda0872f80f388", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5.png": "3156400eb59fae0638556c2711345f12ca49d951ff09e6464a2271249409a6a7", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step100000.png": "d69e34c82da98b28eef7f1af29f5d11f400e90f628049f6f5f4a3a419a4a4340", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step040000.png": "ce1f372b517dd52fc3f3eb066145e04ab6841e43b67cb0f6bfbdb42a6738eca6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step100000.png": "07cce6c99dfa7b56dd4d3aa452873a676a5a00e9f046555fa9dda30f16dde488", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth.png": "a892f18c74fe13efd839bfd5068097ca0ae07acebf6c06eed89e1b867e41fcb2", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step060000.png": "80b63bd309ef11a3ebb2f1ef301b49cd8f09bcc25562097d382f859306c9fe6d", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit.png": "1edb30dc35e29ad991695353f4b84e0507792935ec75ae9a7904ebdc007a471a", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step060000.png": "93ab8e09e58a64c5dd2eedfdafd27cf4dcfe4e8fae1af64ac71eac509e6ffdaf", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step060000.png": "f773bdef1c8d718d01b6d6d7735182c04564dd8b5692b359e1dd2f721c774b1a", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step080000.png": "5570fe6a25c92e5c6aa9a5129aa1797ba8ee7418170c7a351f9e35b931a366c7", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step080000.png": "32d3e700286eb4b46b3bcf757669481affd6ff6b53792d730b5a21da92cc57d6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step100000.png": "5acfe36694bb4e628309ff8ae1e839ca0a1f684607165bbc2883436b85208bf4", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step040000.png": "2c6f2b8d61cc2aaa63631eb6c98d3de26dcef705fa6b66c823ce7b9eef50e00c", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5.png": "adbefd0021e2c981d026718de8c63594b9c8e5971901d1dc40835cb69d95b93e", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step080000.png": "ce8b18e4dd976ed590fcc44075f3fb058ca7b23e15a1624726c181c4dd0c11da", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step040000.png": "168d21ef24ae198fbfd642f8ca315faad4c7bff2e2c09e16ff7c97e7360ea883", + "tests/output/screening/screening_summary.csv": "3a23c4f2bd54ed5ee9bdb5b6dcdc58eed04519fcf1b4790e0abd1e6c5288fb96", + "tests/output/screening/screening_summary.json": "caf64530f152b6b8ccec82a3c7ba44fa0b3aeb0e0221ef6121857bf62c031ecd", + "tests/output/screening/B1/force_hist.csv": "854bfebe63fb2d140823fc5dbc434a70c317c6ab0bedbd5220cec45665b524c8", + "tests/output/screening/B1/summary.json": "35b4d958bc0fdd6ab6c9c0d1ed50e85d89b04f7be3e34632d6c3ea95b89acb47", + "tests/output/screening/custom/force_hist.csv": "06da0f67b564d5c114332ef3b39167b1ba222fc50045f95303c75c14755b51d5", + "tests/output/screening/custom/summary.json": "1701ed75e5e9ca16127f495ccff1d87de245d81df581e94114c8fca6fbbe77fd", + "tests/output/screening/MR1/force_hist.csv": "f70fbfa748fd0709e225523aaaa72b761db56df4f1d48f105384b94cbc44b31f", + "tests/output/screening/MR1/summary.json": "3d9a0fc19710820e3634ab2143b913b282beb159336567ab9ebf3de2092947bd", + "tests/output/screening/MR2/force_hist.csv": "c947b3c16b8e8f8f85a203cea8cd912bdfc07f96985c1c24a470b644170195ea", + "tests/output/screening/MR2/summary.json": "d2344e9e2517ec76c8b56bfbe3763dd465e24721856992401c57c414763481bb", + "tests/output/screening/MR3/force_hist.csv": "7df1536c83ee466b7195d9c521d3d3b1309acaf142f2855bba51fb279c7612e4", + "tests/output/screening/MR3/summary.json": "ad188eb1b271a6cd0fb4025b456eccac5450776f60db58466f804fc5a0e0ec61", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "examples/fixed_periodic_patch.py": "6732e440a47c237ea341703f2d80717903d34c68fd061bdc97189e5d877be46c", + "research/j3-lag-2026-10-12/host-check.log": "b2b6d262934b3abf9e0f0bdbde14b339cb977f7bffe391c17b51b5d067862dda", + "research/j3-lag-2026-10-12/REVIEW.md": "f388b64b0cc0413dc9865afda90ed24de666dda0d6cdb821b4363ce1b73631b3", + "research/j3-lag-2026-10-12/trajectory.h5": "2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986", + "research/j3-lag-2026-10-12/baseline-status.txt": "e0b69879084f54afac1a3bc3701f1de9819068190c815ae84421f02f83cad9f7", + "research/j3-lag-2026-10-12/baseline.json": "5e9a920813fe3d775110af85af92970d5245a7040ace804445e432353b77e489", + "research/j3-lag-2026-10-12/gpu-diagnostic.log": "97956b517072b7c34e2e29e2a23f87eafb19b9eda786a4b8149e4a2eaed76ee9", + "research/j3-lag-2026-10-12/gpu-availability.log": "b227a519b8286849cfdf842573bd451803da048c6b27af9517f6b8964cd3aa39", + "research/j3-lag-2026-10-12/results.json": "00435ac7e402943e55e702fac1beb5af8cafe71967999658bcde2b29077b1fa8", + "research/j3-lag-2026-10-12/incremental.diff": "ebdf66c72daf17b926482f79a1a30bf0eb2d27fc930a7bb62e5449ebcf72fcc7", + "research/j3-lag-2026-10-12/end-21280.h5": "19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588", + "research/j3-lag-2026-10-12/start-20760.h5": "6c4cba5928c77566c2afc32231311a3986831c18fea766faadebb101243399e2", + "research/refinement_slot_20261013/incremental.patch": "2daca4c9751190df27e18ea79e46685a8fe3cbb6d42b34135b1219b8f53ea3fc", + "research/refinement_slot_20261013/baseline.json": "17b1a8cb7e8232979cd1fc9976cb6b78aa58a7005449526ec15cc0bfd45f8139", + "research/refinement_slot_20261013/manifest.json": "9f28f275533e8a1a761ec748152170b40845612058236ce331c47ae6c5d68713", + "research/refinement_slot_20261013/before.json": "482b02da26207ce32deb9368b6eb63f9de7b4ab670078c02f458f512fb182b53", + "research/refinement_slot_20261013/notes.txt": "8c70efe2acef9f179c453d297b27047b7632a2d55e0739fff4bccf74e0867511", + "research/refinement_slot_20261013/stdout.txt": "1cabbc8a87a2a237ffa649feac0b1b8e0ae8d769af8c298e600e249d2a525f58", + "research/refinement_slot_20261013/results.json": "6245de38106d7a7b0bfea0aa5100b9c9e393ab5436fc594ce0295b4526964b8f", + "research/refinement_slot_20261013/cpu_results.json": "2a891c1adcb3b25390ee7967e5171396aedb9cb4da5ae85f7444450d758671d5", + "research/refinement_prepare_20261013/incremental.patch": "df01345b8e2c33ebf6cdcbbb5104f02c4d7c239a6e6cafab1833228791bfa9a7", + "research/refinement_prepare_20261013/baseline.json": "5cc3c35faac9bb43a0017d83ddfca330d7da93f1e6407391da56b2e9df3b28b6", + "research/refinement_prepare_20261013/manifest.json": "5d479557cd01d61d8b652a3cf456fa57665bf624ce3b4a42c747523b74dec548", + "research/refinement_prepare_20261013/README.txt": "eee46f01add6ed7a5da76da76c98da628e13b930cfc49785399d7afbedbfd95f", + "research/refinement_prepare_20261013/validation.json": "945f4c3604ae0eae91c29741a39588207cfff3e05646e03a12d074a299956c2f", + "research/refinement_prepare_20261013/validation.txt": "5b5a8e9d455d37064c6709dcfd14e89ba66f51f09a11a9863b5cab67ac651d42", + "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", + "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/repair-2026-10-10/simplification-checks.log": "c9f15e870d02003480adf1a7f2fe4a9aca66c1934c4477619f05c8a4798ba85b", + "research/repair-2026-10-10/repair-state.md": "4d4aa1ec0c11a87d2c8380912e7ed74cf5c910ae42e5cc529effde36c9020969", + "research/repair-2026-10-10/TRON_HANDOFF.md": "f8aaa3d99cd133c2055d4adf396a0a57d14f6006aea19e87611bd1c2c1b53a88", + "research/repair-2026-10-10/final-gpu.log": "988bb97256d17b88c14f3793b15880d727ecb285abe62e7d2ae27a16729651c3", + "research/repair-2026-10-10/baseline-status.txt": "074088d793014e3b8154c58718058c7d300fb45595f5129fa957ef1e4cec38e2", + "research/repair-2026-10-10/repair-architecture.md": "49be42ff5c994017f3175e17efda14d84f0b68f8ecd239f66ccee38415b60c5a", + "research/repair-2026-10-10/classic-results.json": "a5d15305f516fd378b54cf9029102be58a83a55a7bad4b8e058fcfe0cc9898f4", + "research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff": "292b4bafe7a62d4fbbf7c165eb99929336edfcaa16b15f34f72ab71fcd928391", + "research/repair-2026-10-10/repair-numerical.md": "0272ebfa8c519aad161c520542cf53156574661609b91fd5ccad7955fdf2bd7b", + "research/repair-2026-10-10/provenance.json": "a81b7e32ecf7182c9617df1b39bbb063a05ef89290ad501bac4573cd5e8a6832", + "research/repair-2026-10-10/classic-signals.npz": "820c9a0b0713d7455f0a5839ac2cd5ee706086d1a26461225dcdb095673421e2", + "research/repair-2026-10-10/baseline-hashes.json": "d6a7d5f9ec5bceb0e7927d55603d9c5e70105982cd945723454659b19ab476e6", + "research/repair-2026-10-10/final-unit.log": "a892a39ecf88125558538cadce2cb5dc46d106b993b164e03da4ebb0eee68cef", + "research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "research/j1-2026-10-12/REVIEW.md": "13004a4f140acdcf59acb57e9e2dda1bb95763d30060f822a7c206c94b813a9f", + "research/j1-2026-10-12/gpu.log": "8659a78ea52bbf8eb923d46ea71636ce63cd322352d5c98a74f631e666dd8cfb", + "research/j1-2026-10-12/baseline-status.txt": "ac398360e05b746b89ae0c3acfe202b5122e650a3bb1ff234ab26f874a303e64", + "research/j1-2026-10-12/baseline.json": "ad7afdf7b3913d11c07343e971fe2f43c2d1a2b99e3d5904a6ba89e3bb0b24fb", + "research/j1-2026-10-12/checkpoint-gpu.log": "adfe3d77d2e6c6f6184dccc0267b4404b20a7709505d5ff5affed0ed4a618083", + "research/j1-2026-10-12/cpu.log": "60cac097f7c4f11401df2aacb43a248640555e7628d2829c4680c71db34e9640", + "research/j1-2026-10-12/gpu-validation.log": "d1e9f2aea17a85eddcd94b81c700738ce073214857b55c28abd1219ff1edbed7", + "research/j1-2026-10-12/results.json": "449f8a17dacac0fc6d2489c4b10bac330dbbbdb38fad3ce54f739ac8c6d48e85", + "research/j1-2026-10-12/incremental.diff": "a454c23da7b0011645949c0fbf64d0c41ecfdab5642b1b7c5119868005d3c721", + "research/j3-coverage-2026-10-12/restart-21280.h5": "3e89c12c16f91f76ca9acd909e0fa7d42df6fbb5e870b299aa08ca42bc3e3dc9", + "research/j3-coverage-2026-10-12/REVIEW.md": "7293f3f3442855c8521698605aab504e026915a7bf1e77f5a24710d89a812443", + "research/j3-coverage-2026-10-12/restart-reference-21296.h5": "7192f510dd7820675aa1de130f55514136fba782cf77f92545189918a7e0c328", + "research/j3-coverage-2026-10-12/negative-end-20760.h5": "bd0bd063579d625e358762b1fdde5ac11bfcf739646a847fb77a4a2031011b9b", + "research/j3-coverage-2026-10-12/baseline-status.txt": "31c949b11b20d7cd4202dba16882b5712aa1653da0cb2da2f0ebd69bf488040e", + "research/j3-coverage-2026-10-12/baseline.json": "d8844104f2665a25bfc417ee29becf89ab3955fac9105b5ddb12cfb1fe2a55b0", + "research/j3-coverage-2026-10-12/verification.json": "205986efd2b41635721b7fd20288be982348c765180102c7102750ba088f3a28", + "research/j3-coverage-2026-10-12/negative-budget-20744.h5": "c09d75fc4a2cff68039a0956bd9d32b79b9cd3a6b386c72b4db54c214b110cd8", + "research/j3-coverage-2026-10-12/gpu-validation.log": "505cd5a5db46d7984aefb2a614151c25c4ace0e7d2a52e02c3e4f9792fd8eb95", + "research/j3-coverage-2026-10-12/results.json": "02460981ad49c9cc13b4246abad1d8afd2599c61bfb545a6e32da9bbcd5c0db1", + "research/j3-coverage-2026-10-12/incremental.diff": "98aa7855d5d6b91b4509a924c8a5aabab4339ba29c7e7dc2d91262c48e3848ca", + "research/audit-2026-10-09/numerical_semantics_results.json": "b95b065b594aa2911740dab216f87936c9bf7f7fa25acfda93b5738443564035", + "research/audit-2026-10-09/REVIEW.zh-CN.md": "2841fd3aa7a6baedbe1079d90915c8b05212b133824ed6abccaa1f09656eaefe", + "research/audit-2026-10-09/root-initializers-report.md": "ca448457c444949d5d0e1e10fa7121064510b77fc4c3512580900f0299219867", + "research/audit-2026-10-09/numerical-report.md": "970330b3a593f79f09866ce6ae82bc0ddd81226230d0a6ff06ae8ae756ee80da", + "research/audit-2026-10-09/numerical_collision_results.json": "51e5c263bb8cde82cedef2ccfdbf5ef657742a80218d7896b1ff877516e59693", + "research/audit-2026-10-09/architecture-cpu-results.json": "e1b809210005c8765b13fddbb5ed710d15f6fcbb4c5788a4064f3e88808433ef", + "research/audit-2026-10-09/numerical_compile_results.json": "c3b0ae02072a2ec408ada7513b542ec255f6855cb743a3ed7f91bd8f31504f44", + "research/audit-2026-10-09/state_results.json": "da9170df3e11231c73f20e5e79ed68e08966673d1dd52004ea6b6a279afc0dcd", + "research/audit-2026-10-09/architecture-report.md": "861079dc3f4ced9fdc41bfb22002d32e190c0d630d3ba2f138f9dc7a949b8371", + "research/audit-2026-10-09/state-report.md": "f8708807efc2e109810c5955f7c1884a932668c0b3cb2963c2df3b09f2a3d5c4", + "research/j3-offline-2026-10-12/REVIEW.md": "d9902c58498e73c29e054b23adb968f7e1e14421cba5c58d03bbc5a50159ae79", + "research/j3-offline-2026-10-12/lags.csv": "fbd9addd413f24c47f4411317e872265bb774e8e1724fe169412befa860ae94d", + "research/j3-offline-2026-10-12/localization.png": "a72907638e32b0ecfc2205bea438e7b408f40aad86217ce6ad9b4877840c9cfc", + "research/j3-offline-2026-10-12/results.json": "cdb857bea6f4e06ed15acf773505ce6d5147f8cb8ce0a53cc368ee267cde6361", + "research/j3-offline-2026-10-12/cpu-analysis.log": "bc02a9b197fc15ae1b503ca54655a7622d4361f9b45b7848ff9c387ea3665f11", + "research/j3-offline-2026-10-12/regions.csv": "3a8fc640b61d70e3b7f73d2bf8ac2bd3f720adf39a90dfda6180430e0489efae", + "research/j2-slot-2026-10-12/REVIEW.md": "10c4a94ffc32e0a2c4e0f6593b7cfc28479b5869f279f0b9d0b708fa3a47d1e6", + "research/j2-slot-2026-10-12/gpu-serialization-failure.log": "df804e53b35e7ddaad79a17842b4b5fd9d834e29ca2d56edb00e835848d09200", + "research/j2-slot-2026-10-12/baseline-status.txt": "812616e2d941efcf854e1b37d6e662dda1aaf2b69074fcc04017133e13b72166", + "research/j2-slot-2026-10-12/baseline.json": "e82a1844145fd0cbc585c581b29f80b56193f122cfe1dfa7578f26904a720285", + "research/j2-slot-2026-10-12/cli.log": "9482ad7101d501f27f92e204b2f3ae5c6d91bd887b525aa31cb4a2a188f3cb92", + "research/j2-slot-2026-10-12/cpu.log": "91aba5961006909fbbb860429a9d3cfc930112a0d74c7788bc51c0a5897b47e5", + "research/j2-slot-2026-10-12/gpu-validation.log": "223351b52c70fa4523289f3a1b3db435a11286379253280470900ffe397580a6", + "research/j2-slot-2026-10-12/results.json": "7d35ca7989aed5380e0a45de7f583972566fc516a051da63c53b35514e267494", + "research/j2-slot-2026-10-12/incremental.diff": "c9e391bc91438cd912c1ed5a419705d4388522f672c67a066cfc055e814e699f", + "research/design-2026-10-09/math-and-history.md": "64f8c82e4949d6f58b46faa09800958714859c36cad20bbeeae8b449ae7a6099", + "research/design-2026-10-09/math-checks.json": "94750381954317cde8d649db26beaed8ea945666572a05030ca2b4d97d384011", + "research/design-2026-10-09/Contracts.lean": "2442d9a778ef20e8af3fecf23be6fea6d73c6299ff744c9664b652bc5ee3f034", + "research/design-2026-10-09/jet-study.md": "a362142ef04a5ad5dbb4c9db9d221b1199dccec53780c8f2da49a15201cfe529", + "research/design-2026-10-09/PLAN.zh-CN.md": "0341dd7ee306a040340c8e5dedb07a109e931c27dbf3c994d072aa78e3b6bc67", + "research/design-2026-10-09/jet_closure_results.json": "12cf7d400a206f9f9ec9ea6ad251fe6bb0232e27bcbed22fbc1ead2c0fc7d249", + "research/design-2026-10-09/grid-study.md": "4435dc1275ec5e15b118becc6ac391f306195d1e5beaa58037b1aff3bb2465c7", + "research/design-2026-10-09/jet_closure_check.py": "fde45d0f8518740ef5c0bf0fe7635d6adaf9a2e789927dd4e68e991c138ddc30", + "research/design-2026-10-09/api-architecture-study.md": "d6fb45ec784f0e1db55fb9f34e137b9f551db0b9b39fd4f0ef247a78fc34eedf", + "research/design-2026-10-09/math_checks.py": "4254983a783fe4bad8888b3d7c243c87d991c7bbf242edb0f56f25cbaefee890", + "research/refinement_example_20261013/incremental.patch": "6acd05df6669ccdcf234ac1680c6e76c75a2587974adb6728f7edda6fd625b69", + "research/refinement_example_20261013/baseline.json": "ae0af15ddb40709d1e348655a665264984a240ded1e28af816a8000d08e784be", + "research/refinement_example_20261013/manifest.json": "6da85ac513065dcf49200bc0872bec38b6c7ba61f7d82036c2189cabe5ac29ce", + "research/refinement_example_20261013/before.json": "d95cd518f080eab92af5e53e1e9b6b6fad626eae51990e510d2d2f2ae9d0ec7b", + "research/refinement_example_20261013/notes.txt": "f111f8cba94b43d1127945fa41615037e1740efcfc529e802338dd8c4ff02795", + "research/refinement_example_20261013/stdout.txt": "9c59fb315a5552cce4ceab171003e425bf64d747137c89bd86d8779a34adcbd1", + "research/refinement_example_20261013/results.json": "8ab13bbc022f2a66898aa07ed94f43cb6716570e7a360a809b7fcd097316db7e", + "research/j3-reservoir-2026-10-12/gpu-availability-sandbox.log": "1d58470512e583a0acfabf6896ee5f31e5b493b8231aed54b864f64eb275b02c", + "research/j3-reservoir-2026-10-12/REVIEW.md": "1ea5f860728584ea6cbe40ba3994e40471102d8e2cf6d93e28fe47222cba0cab", + "research/j3-reservoir-2026-10-12/baseline-status.txt": "0ef1a8c9878c4053ebc1a7d4bace6d4ec38bf27ace167b4239ddbb1c6c897e20", + "research/j3-reservoir-2026-10-12/baseline.json": "847fefd1eae971985d34d04d89ee6d6f1c91f6940c54fe351d112faba7bc6838", + "research/j3-reservoir-2026-10-12/cpu.log": "b33f6c1a1b0ee67968c4cff85d491e46e30e0d6c796b552629714ab8b5dcead0", + "research/j3-reservoir-2026-10-12/gpu-validation.log": "ff04024db197e332f37c912a96413e3251fd0186947348ffbc33af6f4a899f2c", + "research/j3-reservoir-2026-10-12/results.json": "49685de7679a14860258abf1753aaa6d116ad709b868d907ddb40e74c9b845ea", + "research/j3-reservoir-2026-10-12/incremental.diff": "fae312831d71e46dd477a640b06ed927853a9e735d26bf9f5868927fa31cfa56" + } +} diff --git a/research/refinement_slot_followup_20261013/before.json b/research/refinement_slot_followup_20261013/before.json new file mode 100644 index 0000000..e707df1 --- /dev/null +++ b/research/refinement_slot_followup_20261013/before.json @@ -0,0 +1,8 @@ +{ + "utc": "2026-10-13T11:15:07.563984+00:00", + "physical_device": 0, + "uuid": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c", + "gpus": "index, uuid, name, memory.used [MiB], memory.free [MiB], utilization.gpu [%]\n0, GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, Tesla V100-SXM2-16GB, 5 MiB, 16140 MiB, 0 %\n1, GPU-f1c9fd5a-e917-56e0-21fb-24035ba44a36, Tesla V100-SXM2-16GB, 5 MiB, 16140 MiB, 0 %\n2, GPU-b8c11c01-c91f-aa0b-abf6-dad35085cc76, Tesla V100-SXM2-16GB, 5 MiB, 16140 MiB, 0 %\n3, GPU-8b71b032-1b75-2891-935c-ce106a53034a, Tesla V100-SXM2-16GB, 5 MiB, 16140 MiB, 0 %\n", + "compute_apps": "gpu_uuid, pid, process_name, used_gpu_memory [MiB]\n", + "ram_available_bytes": 64053366784 +} diff --git a/research/refinement_slot_followup_20261013/incremental.patch b/research/refinement_slot_followup_20261013/incremental.patch new file mode 100644 index 0000000..c6f6fa1 --- /dev/null +++ b/research/refinement_slot_followup_20261013/incremental.patch @@ -0,0 +1,10 @@ +--- a/src/CelerisLab/lbm/refinement_stepper.py ++++ b/src/CelerisLab/lbm/refinement_stepper.py +@@ -32,6 +32,7 @@ + + ``coarse_boundary`` is ``periodic`` (default) or ``slot_reservoir``: + a bottom on-site slot and top fixed-density reservoir from ``cfg``. ++ Periodic mode does not apply the wall/slot boundary fields in ``cfg``. + Physical walls remain coarse; fine halo donors must be ordinary fluid. + + ``initialize(coarse_g, fine_g)`` accepts physical Q-major (9,ny,nx) arrays diff --git a/research/refinement_slot_followup_20261013/manifest.json b/research/refinement_slot_followup_20261013/manifest.json new file mode 100644 index 0000000..4840243 --- /dev/null +++ b/research/refinement_slot_followup_20261013/manifest.json @@ -0,0 +1,52 @@ +{ + "baseline_files_checked": 522, + "unchanged_baseline_files": 521, + "changed_files": [ + "src/CelerisLab/lbm/refinement_stepper.py" + ], + "diff": { + "added": 1, + "removed": 0 + }, + "test_count": 7, + "exit_code": 0, + "helper_sha256": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "files": { + "src/CelerisLab/lbm/refinement_stepper.py": { + "bytes": 11076, + "sha256": "ad57a6a3887b007488b4954b24ff06cd8cde2b12674bdafb97bfda1961ae1da4" + }, + "research/refinement_slot_followup_20261013/planar_velocity.sha256": { + "bytes": 251, + "sha256": "326639a3e66b2b8dbd21ecd76b32a331f3194a82d1b5888219eee4a1782f6366" + }, + "research/refinement_slot_followup_20261013/incremental.patch": { + "bytes": 495, + "sha256": "b734b4b540ece11a037a0f119a9846c39c09c8247d3cc89877880a27c3d082c4" + }, + "research/refinement_slot_followup_20261013/planar_velocity.cuh": { + "bytes": 1911, + "sha256": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1" + }, + "research/refinement_slot_followup_20261013/baseline.json": { + "bytes": 68536, + "sha256": "7ee505b7371a5258db7cb197c999be8859d14641915e3085f1969deb465880a4" + }, + "research/refinement_slot_followup_20261013/before.json": { + "bytes": 690, + "sha256": "809c4a6f330d4a29e92415fd0eb820f34dec38484e3560a8b9287b09553c2d87" + }, + "research/refinement_slot_followup_20261013/notes.txt": { + "bytes": 1549, + "sha256": "c04644a287aa936c9c6de0ca9d8bd83cee2d80aab9544ca284c9f7c029bfeff9" + }, + "research/refinement_slot_followup_20261013/stdout.txt": { + "bytes": 1160, + "sha256": "acb72f2b14e1abfe750330d84a38afe9bbe944bf028dde9700a291d5edff4be4" + }, + "research/refinement_slot_followup_20261013/results.json": { + "bytes": 1050, + "sha256": "dc38c3f5f88fac2ebf49be11df84e9f3da9d25504d400b6a506240a91735e4e1" + } + } +} diff --git a/research/refinement_slot_followup_20261013/notes.txt b/research/refinement_slot_followup_20261013/notes.txt new file mode 100644 index 0000000..4b77583 --- /dev/null +++ b/research/refinement_slot_followup_20261013/notes.txt @@ -0,0 +1,7 @@ +Final followup closure: only one documentation line added, explicitly stating that periodic mode does not apply wall/slot boundary fields. Numerical code, helper, defaults, tolerances and tests are unchanged. +Full test_refinement_followup.py invoked once without selectors, via real production compilation. 7 tests passed (4 CPU guards, 3 GPU cases), exit0. stdout.txt is the unmodified merged stdout/stderr stream directly redirected from the test process, not reconstructed text. +GPU cases: periodic nonequilibrium seed1 eight steps max_population=1.67235548e-7; rectangular one step=1.14050047e-7; slot/reservoir eight steps=1.78241457e-7 and max_BC_error=2.21654773e-7. No other numerical cases/matrices rerun. +Fresh device UUID, utilization, VRAM, compute-apps and available RAM captured before launch in before.json. Command/environment/exit/resource samples in results.json; no fixed RSS cap or precompilation bypass. PYTHONPATH explicitly selects /home/frank14f/CelerisLab/src. +Unmodified actual helper copied byte-for-byte to planar_velocity.cuh; hashes in planar_velocity.sha256. No BC source edits. +Combined temporary files plus existing refinement evidence peaked at 1,864,916 bytes (below 2,000,000,000). Own temporary compilation tree, baseline copy and runner removed after final diff. Prior dirty tree and historical evidence retained. No DynamisLab, dependency/environment/system edits, commit or push. +Short correctness coverage only: nozzle remains coarse; no new steady jet, convergence or open-domain global flux balance claim. diff --git a/research/refinement_slot_followup_20261013/planar_velocity.cuh b/research/refinement_slot_followup_20261013/planar_velocity.cuh new file mode 100644 index 0000000..87db746 --- /dev/null +++ b/research/refinement_slot_followup_20261013/planar_velocity.cuh @@ -0,0 +1,44 @@ +// On-site D2Q9 Zou-He velocity closure, paired lattice ordering. +// Input is poststream f at the arrival time. Only unknown populations change; +// the caller owns collision/store. No force, shifting or off-lattice walls. +#ifndef CELERIS_BOUNDARY_PLANAR_VELOCITY_CUH +#define CELERIS_BOUNDARY_PLANAR_VELOCITY_CUH + +__device__ __forceinline__ float bottom_wall_normal_velocity(unsigned int x) +{ +#if WALL_SLOT_WIDTH > 0 && WALL_SLOT_WIDTH < NX + // C1 compact profile centered at (NX-1)/2; amplitude is its continuous peak. + const float s = (2.0f*(float)x-(float)(NX-1))/(float)WALL_SLOT_WIDTH; + const float w = fmaxf(0.0f, 1.0f-s*s); + return WALL_NORMAL_VELOCITY*w*w; +#else + return WALL_NORMAL_VELOCITY; // Disabled or explicitly uniform full width. +#endif +} + +__device__ __forceinline__ void reconstruct_bottom_velocity(float* f, float u, float v) +{ + const float rho = (f[0] + f[1] + f[2] + 2.0f*(f[4] + f[6] + f[7])) / (1.0f-v); + f[3] = f[4] + (2.0f/3.0f)*rho*v; + f[5] = f[6] + 0.5f*(f[2]-f[1]) + 0.5f*rho*u + (1.0f/6.0f)*rho*v; + f[8] = f[7] + 0.5f*(f[1]-f[2]) - 0.5f*rho*u + (1.0f/6.0f)*rho*v; +} + +__device__ __forceinline__ void reconstruct_top_velocity(float* f, float u, float v) +{ + const float rho = (f[0] + f[1] + f[2] + 2.0f*(f[3] + f[5] + f[8])) / (1.0f+v); + f[4] = f[3] - (2.0f/3.0f)*rho*v; + f[6] = f[5] + 0.5f*(f[1]-f[2]) - 0.5f*rho*u - (1.0f/6.0f)*rho*v; + f[7] = f[8] + 0.5f*(f[2]-f[1]) + 0.5f*rho*u - (1.0f/6.0f)*rho*v; +} + +// Fixed top density and tangential u=0; positive Cartesian v exits upward. +// J_y=rho*v follows from known poststream populations (ordinary D2Q9). +__device__ __forceinline__ void reconstruct_top_reservoir(float* f, float rho) +{ + const float jy = f[0]+f[1]+f[2]+2.0f*(f[3]+f[5]+f[8])-rho; + f[4] = f[3] - (2.0f/3.0f)*jy; + f[6] = f[5] + 0.5f*(f[1]-f[2]) - (1.0f/6.0f)*jy; + f[7] = f[8] + 0.5f*(f[2]-f[1]) - (1.0f/6.0f)*jy; +} +#endif diff --git a/research/refinement_slot_followup_20261013/planar_velocity.sha256 b/research/refinement_slot_followup_20261013/planar_velocity.sha256 new file mode 100644 index 0000000..6694c4a --- /dev/null +++ b/research/refinement_slot_followup_20261013/planar_velocity.sha256 @@ -0,0 +1,2 @@ +0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1 src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh +0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1 research/refinement_slot_followup_20261013/planar_velocity.cuh diff --git a/research/refinement_slot_followup_20261013/results.json b/research/refinement_slot_followup_20261013/results.json new file mode 100644 index 0000000..6ef6eda --- /dev/null +++ b/research/refinement_slot_followup_20261013/results.json @@ -0,0 +1,31 @@ +{ + "command": [ + "/usr/bin/prlimit", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "/home/frank14f/CelerisLab/tests/validation/multigrid/test_refinement_followup.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-slot-final-run-e1k5hxjw" + }, + "exit_code": 0, + "elapsed_seconds": 6.951829997007735, + "peak_sampled_group_rss_bytes": 293773312, + "min_ram_available_bytes": 63788609536, + "min_gpu_free_mib": 15826, + "ram_reserve_bytes": 6405336678, + "vram_reserve_mib": 1614, + "peak_combined_temporary_and_refinement_evidence_bytes": 1864916, + "temporary_budget_bytes": 2000000000, + "termination_reason": null, + "monitor": "Own process group RSS recorded, not capped; live RAM/VRAM and temp bytes sampled, not OS hard limits" +} diff --git a/research/refinement_slot_followup_20261013/stdout.txt b/research/refinement_slot_followup_20261013/stdout.txt new file mode 100644 index 0000000..4618603 --- /dev/null +++ b/research/refinement_slot_followup_20261013/stdout.txt @@ -0,0 +1,18 @@ +test_activation_failure_retains_resources_for_retry (__main__.FaultGuardsCPU) ... ok +test_boundary_mode_and_margin_contract (__main__.FaultGuardsCPU) ... ok +test_failed_download_blocks_read_and_step (__main__.FaultGuardsCPU) ... ok +test_kernel_contracts_reject_before_upload (__main__.FaultGuardsCPU) ... ok +test_nonequilibrium_seed1_eight_steps (__main__.NormalBuildGPU) ... normal seed1 steps=8: max_population=1.67235548e-07 max_leaf_drift=2.23806128e-05 max_leaf_error=2.20813948e-05 +host_peak_rss=185.887 MiB +ok +test_offcenter_rectangle_margin_two_one_step (__main__.NormalBuildGPU) ... normal rectangle 17x13 bounds=(2, 2, 6, 5) fine=16x14 steps=1: max_population=1.14050047e-07 device_arrays=35288; halo/stride PASS +host_peak_rss=190.754 MiB +ok +test_slot_reservoir_eight_steps (__main__.NormalBuildGPU) ... slot/reservoir steps=8 max_population=1.78241457e-07 max_BC_error=2.21654773e-07 discrete_leaf_mass_change=+0.0309633738 final_sum_rho_v_bottom=0.00426894613 top=0.000960694626; raw halos/corners/fine BC isolation PASS +host_peak_rss=191.754 MiB +ok + +---------------------------------------------------------------------- +Ran 7 tests in 6.591s + +OK diff --git a/research/refinement_step_20261013/README.txt b/research/refinement_step_20261013/README.txt new file mode 100644 index 0000000..88d6f24 --- /dev/null +++ b/research/refinement_step_20261013/README.txt @@ -0,0 +1,162 @@ +Fixed periodic 2:1 coupled backend — bounded implementation, 2026-10-13 + +Decision: A, directional arrival override between coarse pull and collision. +Implemented and locally checked; no Simulation/Jet/general-AMR integration. +Default single-grid source files, existing geometry and all prior evidence are +unchanged. This increment adds 312 production lines and 222 test lines only. + +A/B comparison against the active tree + OneStep currently pulls, applies channel BC, computes moments, collides, and + stores. LBMStepper runs Curved before OneStep, immediately swaps after launch, + then runs force/sensor readers. LBMField macros/snapshot read current data; + checkpoint saves BOTH current and spare buffers without a phase guard. + All-FLUID flags do not remove OneStep's y=1/NY-2 wall correction. InitTubeFlow + reconstructs channel flags. Reserved bits in active core/flags.cuh are only + reservations: is_fluid does not exclude AMR and no skip-collision contract + exists in init, body overlays or checkpoint. No old clone behavior was assumed. + + A keeps coarse source G immutable and replaces local incoming components. + It needs the existing compact target/children tables (sorted together at + upload), no source backup or full coarse override array. Only boundary-ring + targets binary-search this table; performance optimization is not claimed. + + B could map incoming (q,K) to source (q,K-cq) because periodic pull is a + bijection for each q. It is algebraically valid even for the eight corner-pass + links, whose sources are UNCOVERED. But these overwritten source vectors no + longer form consistent postcollision G. A safe B needs sparse backups (100 + floats for this patch), source-slot indices, exclusion of all macro, donor, + snapshot, checkpoint and BC readers, same-stream scatter AFTER Curved and + before OneStep, restoration to the captured old allocation before reuse or + publication, and a failed-state policy if asynchronous errors prevent restore. + Swapping pointers does not remove contamination from checkpoint's spare read. + B also still needs true periodic and covered-cell behavior. A is clearer here. + +Implementation and ownership + src/CelerisLab/lbm/refinement_stepper.py: PeriodicPatchStepper(cfg, bounds, + context=caller_owned_CudaContext), initialize(coarse_g,fine_g), step(n), + download(), close(). Use its context-manager scope before closing context. + src/CelerisLab/lbm/kernels/refinement.cu: separate compile entry, reusing active + layout, pull, macro/equilibrium and unforced SRT operators. No channel + kernels, physical flags, Curved, body, force or sensor dispatch. + + Each level owns two FP32 Q-major (9,ny,nx) arrays and its own module with fixed + dimensions and omega. Both d_params force vectors and n_objects are zero. + Coarse/fine viscosity gives tau .8/1.1 here; configs are copied, modules are + separate, so async parameter mutation is unnecessary. One caller-owned CUDA + context, one backend-owned stream; private compiler directories are removed + after module loading. Allocations and modules are released on close; partial + construction preserves the original exception while attempting cleanup. + + Explicit initial G arrays define the periodic state. initialize does NOT + collide, invent channel flags, or run a channel initializer. The test constructs + G0=C(F0) once. Each interval is: + explode original coarse G into ALL fine halo once; + fine pull + ACTIVE collision; inner halo only pulls, outer becomes NaN; + fine pull + ACTIVE collision again; same halo policy; + coarse periodic pull + ALL specified arrival overrides + ACTIVE collision; + synchronize, publish coarse buffer swap and completed step count. + The backend alone updates ghosts. At the second fine output, active cells hold + G while inner ghosts retain F2 for coalescence. Some inner-ghost directions + are legitimately invalid; all actual coalescence reads must be valid. Public + downloads mask every halo cell back to NaN and return synchronized leaf G. + No time-interpolated ghosts or nonequilibrium transfer scaling were added. + + Covered coarse cells are skipped and permanently NaN in BOTH buffers. + Every uncovered arrival whose donor was covered is overridden before moments; + the closed map also replaces eight grazing-corner links with uncovered donors. + Explosion parents lie outside the patch. No BC/donor reader accesses covered + values; this backend exposes no old LBMField macro/cache/checkpoint interface. + Public arrays mark non-leaves NaN. There is no claim of complete multilevel + restart, snapshot, object coupling or a ready Simulation adapter. + + Methods serialize via a lock. A failed interval can have overwritten fine G: + no transactional rollback is claimed. The instance becomes failed, rejects + download/step/initialize, and must be closed/recreated. Publishing happens only + after stream synchronization. Cleanup tries all allocations even after an + earlier free fails and does not replace a preexisting operation exception. + +Reference basis + Pinned CPUREF-0.3, tests/validation/multigrid/cpu_reference.py: + SHA256 bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e. + Its stored phase is arrival_f. Test-only C(F_ref) is compared to production G; + that observation conversion is not an additional production collision. + ref/lbmpy/src/lbmpy/relaxationrates.py:61 confirms acoustic tau scaling. + ref/palabos/src/multiGrid/multiGridGenerator2D.hh:190 uses two fine substeps + and distinct interface processing. Its interpolation/rescaling is a different + method and was not imported into the pinned volumetric algorithm. + Applied local .github/skills/lbm-ref-architecture-guard/SKILL.md: reference + search, actual data-path map and scope were completed before editing. + Independent local agent /root/coupling_review found no numerical-path blocker. + Its cleanup and partial-failure test suggestions were implemented. This does + not replace Claude/Grok/TRON review; Claude's earlier local_stress code review + remains incomplete. + +Validation plan fixed before running + No force/objects, double periodic 16x16 coarse, [4,12)^2 patch, 24x24 fine + including halo4, SRT tau .8/1.1. FP32 GPU (existing fast_math/FMA) versus FP64 + pinned reference. Rest and seed1 nonequilibrium (u=.03,-.02, relative random + perturbation amplitude 1e-3) each <=8 coarse steps. Populations/corner packets + max absolute tolerance 3e-6, leaf mass/momentum absolute drift AND reference + discrepancy 2e-4. No tolerance was changed after results. + Actual device-write instrumentation checks collision count per leaf, zero + halo/covered collision, explosion per ghost and per-slot coalescence ownership. + The audit entry defines one diagnostic macro in a PRIVATE build and includes + the real refinement.cu; ordinary compile entry is separately smoke-tested. + No old 7x32 matrix, Jet replay, physical stability sweep or large datasets. + +Observed results + CPU geometry: 9/9 pass under 256MiB address-space/2MiB file/core0 limits. + CPU cleanup fault-injection: 1/1 pass under the same limits. + GPU audit, rest 8 steps: + max population error 2.11927626e-7 + max leaf drift 4.43765894e-5; max leaf reference error 4.62839387e-5 + max corner packet error 7.65754117e-9 + GPU audit, nonequilibrium seed1 8 steps: + max population error 1.67235548e-7 + max leaf drift 2.23806128e-5; max leaf reference error 2.20813948e-5 + max corner packet error 1.09677929e-8 + At every step: coarse leaf count=step, fine leaf count=2*step, halo/covered + count=0, explosion writes/ghost=step, coalescence writes/slot=step; PASS. + Hop2 finite mask, all coalescence reads and all eight corner packets PASS. + Normal entry: rest 1 step PASS. Eight-step equivalence evidence comes from + the audit build of the same kernel, not an eight-step normal-entry run. + Failure after explosion+two fine hops actually completed: 0 coarse steps + published, download/step rejected, close passed. Separate targeted test; + eight-step cases were not rerun to add this failure test. + +Budgets and provenance + Before each GPU run: physical GPU 0/1 idle (0%, 5MiB, no compute processes). + Used only physical GPU0, UUID GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c. + Exact Python /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python; runtime asserts + CelerisLab package and kernel root are from /home/frank14f/CelerisLab/src. + PYTHONPATH explicit, no user site/bytecode, BLAS one thread, CUDA cache disabled. + Production arrays 66,464 bytes, audit-only arrays 36,608 bytes: total 103,072 + (<128KiB). This excludes CUDA context/module overhead, not measured as arrays. + GPU child watched at 50ms intervals, killed if sampled RSS exceeds 512MiB or + 120s. CUDA virtual address space was NOT restricted to 256MiB; driver mapping + needs more. Largest sampled RSS 194,355,200 bytes (~185.35MiB); child getrusage + 184.902MiB. Full first run 3.77s; partial-failure check 2.29s. GPU logs total + 880 bytes (<2MiB); no data dumps, plots, dependency installs or system changes. + CPU logs summarized from tool executions in cpu_validation.json. Exact GPU + commands, environment, exit status, wall time and RSS are in gpu*.json; actual + stdout/stderr in gpu*.txt. Compiler scratch cleaned on every build. + +Audit and next boundary + baseline.json contains the pre-edit tree and 311 preserved old-file hashes + (including the prior evidence hash scope). incremental.patch contains only the + THREE new code/test files; existing dirty changes are not folded into it. + manifest.json records unchanged-baseline verification and artifact hashes. + No commit/staging/push, DynamisLab or old file cleanup/modification occurred. + + This validates bounded implementation equivalence, NOT interface accuracy, + stress transfer, long-time stability or 32-step production performance. The + prior ~2.9% excess shear decay remains a research concern. Next joint decisions + are whether/how to expose this narrow periodic backend through Simulation and + when to implement an explicit two-level restart schema; neither is silently + included here. No generic hierarchy or minimal flat-wall Jet work was started. + +Authorization, verbatim as relayed by the coordinating thread + +user(Sentinel_ed1ee5edd5e88191a1aaa4d710ce523f): 推进吧,~/CelerisLab就是开发环境,可以改动,只要符合架构风格。遇到问题可以用undermind看文献,也可以让grok搜索互联网信息,还可以参考开源项目。 +user(Sentinel_d0d3a42b2c088191aa8aebc105fb1b27): 允许,你用GPU验证都行 + diff --git a/research/refinement_step_20261013/baseline.json b/research/refinement_step_20261013/baseline.json new file mode 100644 index 0000000..20f6155 --- /dev/null +++ b/research/refinement_step_20261013/baseline.json @@ -0,0 +1,317 @@ +{ + "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/refinement.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", + "hashes": { + ".cursor/rules/cuda-style.mdc": "5810cf8cff793a11ba5dedafaa8a4e7d7d3debb728d837ca1903ff6dc8d6fdb9", + ".cursor/rules/project-layout.mdc": "aeed1cd9d48447bcfcfb6a77250af7c5a3d500de4c6b2591c5684696fa04c3ec", + ".cursor/rules/python-style.mdc": "ece75cb724d7dc46cb8dab7ecf8d710a90b503001da0d506ea4bf772ce395e21", + ".cursorignore": "9f072faa815a6c6d4dc791a424201404f0f623338681ae3d2fcbdf86db1bd035", + ".gitignore": "de25151f4cfdf29ca64032e509398e1829c7ded2449ccff803b2fd87d859ae6c", + "LICENSE": "e98392425e9a0007d0d69f0f7c912c2dc1b59061a6197223962aac45599c76ea", + "README.md": "982d0df8b766b1d5017ba702b75e8b3cec8d22f57af8f434be27ea251652596c", + "docs/audit/audit_round2.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "docs/audit/body_refactor_notes.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "docs/audit/config_diagnosis.md": "b601652df0cac36a8faf2b317b11853221353716a25184cd9b2dc41373a7f183", + "docs/audit/kernel_layer_audit.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "docs/design/README.md": "98242c6960866d9b75aaf363f703edf02c4210bc38da1a340e9f6add49c6a3ce", + "docs/design/integrated_architecture.md": "c26b0d301321fe4b86d83d11c7e0b8d0c0545ee2995afa563966f004e9788132", + "docs/design/multi_level_grid_architecture.md": "e56a67d9129f2e3c311342e21a3fb2ed14bd492dd881949b251d5d9ac577bdee", + "docs/design/multi_level_summary.md": "eebf23e0bec9b154e5ce2128e2806e7558a7d4824b2c700cfd16afd1158b2354", + "docs/design/multi_level_visual_reference.md": "cad4bfbd561e5650ec297334529334b662a1ed35f7373c61f34ee22ecf1f66bd", + "docs/design/spatial_coupling_refinement.md": "36c878c7afad524999d89fa842297a98a0433e0283e78b36ca734ddbf8723ed8", + "docs/multilevel_grid_architecture_analysis.md": "90309730b1759d63531cb258c30db990ab71ca1b56ae47d0bbe2f4e2ae52012c", + "docs/performance_analysis.md": "ba01aaa4d3c02b61a8dc55fd00518ac291ebbed79b6574190d6b7234a1158fcb", + "docs/tests_overview.md": "ffc9591fd7baa4261b2c1ce9cfa7aa13a3554a8d5df712035806266a5eaade3f", + "docs/validation_specs/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "docs/validation_specs/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "docs/validation_specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "docs/validation_specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "docs/validation_specs/exp_ctrl_matrix.md": "b7250576c23292988b6ef4bcfd080f611d41edc413c3cebd0eadcc8596049470", + "docs/validation_specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "output/round3_compatibility_summary.md": "319f2e6abde4b34cc4ec90ef461d8ebb85dd5a3ac1736cfa7a3fb110f2a69df9", + "pyproject.toml": "f24ab9ad3a6a728a9382b1bce2e721612fc76635f35c6f96dfddaa853b6e5a9c", + "research/audit-2026-10-09/REVIEW.zh-CN.md": "2841fd3aa7a6baedbe1079d90915c8b05212b133824ed6abccaa1f09656eaefe", + "research/audit-2026-10-09/architecture-cpu-results.json": "e1b809210005c8765b13fddbb5ed710d15f6fcbb4c5788a4064f3e88808433ef", + "research/audit-2026-10-09/architecture-report.md": "861079dc3f4ced9fdc41bfb22002d32e190c0d630d3ba2f138f9dc7a949b8371", + "research/audit-2026-10-09/numerical-report.md": "970330b3a593f79f09866ce6ae82bc0ddd81226230d0a6ff06ae8ae756ee80da", + "research/audit-2026-10-09/numerical_collision_results.json": "51e5c263bb8cde82cedef2ccfdbf5ef657742a80218d7896b1ff877516e59693", + "research/audit-2026-10-09/numerical_compile_results.json": "c3b0ae02072a2ec408ada7513b542ec255f6855cb743a3ed7f91bd8f31504f44", + "research/audit-2026-10-09/numerical_semantics_results.json": "b95b065b594aa2911740dab216f87936c9bf7f7fa25acfda93b5738443564035", + "research/audit-2026-10-09/root-initializers-report.md": "ca448457c444949d5d0e1e10fa7121064510b77fc4c3512580900f0299219867", + "research/audit-2026-10-09/state-report.md": "f8708807efc2e109810c5955f7c1884a932668c0b3cb2963c2df3b09f2a3d5c4", + "research/audit-2026-10-09/state_results.json": "da9170df3e11231c73f20e5e79ed68e08966673d1dd52004ea6b6a279afc0dcd", + "research/design-2026-10-09/Contracts.lean": "2442d9a778ef20e8af3fecf23be6fea6d73c6299ff744c9664b652bc5ee3f034", + "research/design-2026-10-09/PLAN.zh-CN.md": "0341dd7ee306a040340c8e5dedb07a109e931c27dbf3c994d072aa78e3b6bc67", + "research/design-2026-10-09/api-architecture-study.md": "d6fb45ec784f0e1db55fb9f34e137b9f551db0b9b39fd4f0ef247a78fc34eedf", + "research/design-2026-10-09/grid-study.md": "4435dc1275ec5e15b118becc6ac391f306195d1e5beaa58037b1aff3bb2465c7", + "research/design-2026-10-09/jet-study.md": "a362142ef04a5ad5dbb4c9db9d221b1199dccec53780c8f2da49a15201cfe529", + "research/design-2026-10-09/jet_closure_check.py": "fde45d0f8518740ef5c0bf0fe7635d6adaf9a2e789927dd4e68e991c138ddc30", + "research/design-2026-10-09/jet_closure_results.json": "12cf7d400a206f9f9ec9ea6ad251fe6bb0232e27bcbed22fbc1ead2c0fc7d249", + "research/design-2026-10-09/math-and-history.md": "64f8c82e4949d6f58b46faa09800958714859c36cad20bbeeae8b449ae7a6099", + "research/design-2026-10-09/math-checks.json": "94750381954317cde8d649db26beaed8ea945666572a05030ca2b4d97d384011", + "research/design-2026-10-09/math_checks.py": "4254983a783fe4bad8888b3d7c243c87d991c7bbf242edb0f56f25cbaefee890", + "research/j1-2026-10-12/REVIEW.md": "13004a4f140acdcf59acb57e9e2dda1bb95763d30060f822a7c206c94b813a9f", + "research/j1-2026-10-12/baseline-status.txt": "ac398360e05b746b89ae0c3acfe202b5122e650a3bb1ff234ab26f874a303e64", + "research/j1-2026-10-12/baseline.json": "ad7afdf7b3913d11c07343e971fe2f43c2d1a2b99e3d5904a6ba89e3bb0b24fb", + "research/j1-2026-10-12/incremental.diff": "a454c23da7b0011645949c0fbf64d0c41ecfdab5642b1b7c5119868005d3c721", + "research/j1-2026-10-12/results.json": "449f8a17dacac0fc6d2489c4b10bac330dbbbdb38fad3ce54f739ac8c6d48e85", + "research/j2-slot-2026-10-12/REVIEW.md": "10c4a94ffc32e0a2c4e0f6593b7cfc28479b5869f279f0b9d0b708fa3a47d1e6", + "research/j2-slot-2026-10-12/baseline-status.txt": "812616e2d941efcf854e1b37d6e662dda1aaf2b69074fcc04017133e13b72166", + "research/j2-slot-2026-10-12/baseline.json": "e82a1844145fd0cbc585c581b29f80b56193f122cfe1dfa7578f26904a720285", + "research/j2-slot-2026-10-12/incremental.diff": "c9e391bc91438cd912c1ed5a419705d4388522f672c67a066cfc055e814e699f", + "research/j2-slot-2026-10-12/results.json": "7d35ca7989aed5380e0a45de7f583972566fc516a051da63c53b35514e267494", + "research/j3-coverage-2026-10-12/REVIEW.md": "7293f3f3442855c8521698605aab504e026915a7bf1e77f5a24710d89a812443", + "research/j3-coverage-2026-10-12/baseline-status.txt": "31c949b11b20d7cd4202dba16882b5712aa1653da0cb2da2f0ebd69bf488040e", + "research/j3-coverage-2026-10-12/baseline.json": "d8844104f2665a25bfc417ee29becf89ab3955fac9105b5ddb12cfb1fe2a55b0", + "research/j3-coverage-2026-10-12/incremental.diff": "98aa7855d5d6b91b4509a924c8a5aabab4339ba29c7e7dc2d91262c48e3848ca", + "research/j3-coverage-2026-10-12/negative-budget-20744.h5": "c09d75fc4a2cff68039a0956bd9d32b79b9cd3a6b386c72b4db54c214b110cd8", + "research/j3-coverage-2026-10-12/negative-end-20760.h5": "bd0bd063579d625e358762b1fdde5ac11bfcf739646a847fb77a4a2031011b9b", + "research/j3-coverage-2026-10-12/restart-21280.h5": "3e89c12c16f91f76ca9acd909e0fa7d42df6fbb5e870b299aa08ca42bc3e3dc9", + "research/j3-coverage-2026-10-12/restart-reference-21296.h5": "7192f510dd7820675aa1de130f55514136fba782cf77f92545189918a7e0c328", + "research/j3-coverage-2026-10-12/results.json": "02460981ad49c9cc13b4246abad1d8afd2599c61bfb545a6e32da9bbcd5c0db1", + "research/j3-coverage-2026-10-12/verification.json": "205986efd2b41635721b7fd20288be982348c765180102c7102750ba088f3a28", + "research/j3-lag-2026-10-12/REVIEW.md": "f388b64b0cc0413dc9865afda90ed24de666dda0d6cdb821b4363ce1b73631b3", + "research/j3-lag-2026-10-12/baseline-status.txt": "e0b69879084f54afac1a3bc3701f1de9819068190c815ae84421f02f83cad9f7", + "research/j3-lag-2026-10-12/baseline.json": "5e9a920813fe3d775110af85af92970d5245a7040ace804445e432353b77e489", + "research/j3-lag-2026-10-12/end-21280.h5": "19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588", + "research/j3-lag-2026-10-12/incremental.diff": "ebdf66c72daf17b926482f79a1a30bf0eb2d27fc930a7bb62e5449ebcf72fcc7", + "research/j3-lag-2026-10-12/results.json": "00435ac7e402943e55e702fac1beb5af8cafe71967999658bcde2b29077b1fa8", + "research/j3-lag-2026-10-12/start-20760.h5": "6c4cba5928c77566c2afc32231311a3986831c18fea766faadebb101243399e2", + "research/j3-lag-2026-10-12/trajectory.h5": "2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986", + "research/j3-offline-2026-10-12/REVIEW.md": "d9902c58498e73c29e054b23adb968f7e1e14421cba5c58d03bbc5a50159ae79", + "research/j3-offline-2026-10-12/lags.csv": "fbd9addd413f24c47f4411317e872265bb774e8e1724fe169412befa860ae94d", + "research/j3-offline-2026-10-12/localization.png": "a72907638e32b0ecfc2205bea438e7b408f40aad86217ce6ad9b4877840c9cfc", + "research/j3-offline-2026-10-12/regions.csv": "3a8fc640b61d70e3b7f73d2bf8ac2bd3f720adf39a90dfda6180430e0489efae", + "research/j3-offline-2026-10-12/results.json": "cdb857bea6f4e06ed15acf773505ce6d5147f8cb8ce0a53cc368ee267cde6361", + "research/j3-reservoir-2026-10-12/REVIEW.md": "1ea5f860728584ea6cbe40ba3994e40471102d8e2cf6d93e28fe47222cba0cab", + "research/j3-reservoir-2026-10-12/baseline-status.txt": "0ef1a8c9878c4053ebc1a7d4bace6d4ec38bf27ace167b4239ddbb1c6c897e20", + "research/j3-reservoir-2026-10-12/baseline.json": "847fefd1eae971985d34d04d89ee6d6f1c91f6940c54fe351d112faba7bc6838", + "research/j3-reservoir-2026-10-12/incremental.diff": "fae312831d71e46dd477a640b06ed927853a9e735d26bf9f5868927fa31cfa56", + "research/j3-reservoir-2026-10-12/results.json": "49685de7679a14860258abf1753aaa6d116ad709b868d907ddb40e74c9b845ea", + "research/refinement_prepare_20261013/README.txt": "eee46f01add6ed7a5da76da76c98da628e13b930cfc49785399d7afbedbfd95f", + "research/refinement_prepare_20261013/baseline.json": "5cc3c35faac9bb43a0017d83ddfca330d7da93f1e6407391da56b2e9df3b28b6", + "research/refinement_prepare_20261013/incremental.patch": "df01345b8e2c33ebf6cdcbbb5104f02c4d7c239a6e6cafab1833228791bfa9a7", + "research/refinement_prepare_20261013/manifest.json": "5d479557cd01d61d8b652a3cf456fa57665bf624ce3b4a42c747523b74dec548", + "research/refinement_prepare_20261013/validation.json": "945f4c3604ae0eae91c29741a39588207cfff3e05646e03a12d074a299956c2f", + "research/refinement_prepare_20261013/validation.txt": "5b5a8e9d455d37064c6709dcfd14e89ba66f51f09a11a9863b5cab67ac651d42", + "research/repair-2026-10-10/TRON_HANDOFF.md": "f8aaa3d99cd133c2055d4adf396a0a57d14f6006aea19e87611bd1c2c1b53a88", + "research/repair-2026-10-10/baseline-hashes.json": "d6a7d5f9ec5bceb0e7927d55603d9c5e70105982cd945723454659b19ab476e6", + "research/repair-2026-10-10/baseline-status.txt": "074088d793014e3b8154c58718058c7d300fb45595f5129fa957ef1e4cec38e2", + "research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff": "292b4bafe7a62d4fbbf7c165eb99929336edfcaa16b15f34f72ab71fcd928391", + "research/repair-2026-10-10/classic-results.json": "a5d15305f516fd378b54cf9029102be58a83a55a7bad4b8e058fcfe0cc9898f4", + "research/repair-2026-10-10/classic-signals.npz": "820c9a0b0713d7455f0a5839ac2cd5ee706086d1a26461225dcdb095673421e2", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "research/repair-2026-10-10/provenance.json": "a81b7e32ecf7182c9617df1b39bbb063a05ef89290ad501bac4573cd5e8a6832", + "research/repair-2026-10-10/repair-architecture.md": "49be42ff5c994017f3175e17efda14d84f0b68f8ecd239f66ccee38415b60c5a", + "research/repair-2026-10-10/repair-numerical.md": "0272ebfa8c519aad161c520542cf53156574661609b91fd5ccad7955fdf2bd7b", + "research/repair-2026-10-10/repair-state.md": "4d4aa1ec0c11a87d2c8380912e7ed74cf5c910ae42e5cc529effde36c9020969", + "setup.py": "bf07df7ec19de56710d2bb5f61873e09710cd059d46837dc3aa54f3e09ff9e06", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/checkpoint.py": "5b7caf3896167a3f37c539b58837de6eb3f8085fa7bf5f821a09666cc16d43a4", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/config.py": "2f1bba7515f5bc08cb3a8d140bcafe7fa0689e01b3b06494697bb2956a71530e", + "src/CelerisLab/configs/CONFIG.md": "41cafdbe525366c08aa9d0416ea026ccf0026ba7123b8a9b65f968a80d928e3a", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/cuda/compiler_v2.py": "c4cc3ec4445c8d75e6a253dd87963877117a722bc73b9d4811806fc6045d08c1", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "f9f8242b38e8e0cf8425b75e2b0215bc15363c62eaa0fb43c761b8e0931bfdc9", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/refinement.py": "554735c5613129eb29f339c6aeeb4f3a3bbc5aba67558be51fbf7c2fb6ac442a", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/simulation.py": "34d69e71844f553790c5a2bed0f8fbfb912a9498e95b500d1ef2ad41cae3b424", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/unit/cpp/reservoir.cpp": "c3eacaf0271400eb45ad559b571a8f7faa2a809d5f1857ffeb5592addce2cd0c", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/cpp/slot_profile.cpp": "31ac58ccab175bf79fa59fc46d4c0842df18ab0a5e5916be84760d9da2b75788", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_planar_velocity.py": "b656da0880b4234b1db805544edbe0d2473cbcc7c2c869c71d8251337f62a982", + "tests/unit/test_refinement.py": "90751142f920f1c5e988577a45afa94871a6617009cdc78323a87fc7795f4634", + "tests/unit/test_reservoir.py": "e718c78a53c3941aba7feb8ae4e8bb0b1726c1145de84febf91220c1917991c9", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_slot_velocity.py": "6a9494de9a32c350389ccbed58af48951f6b25a21a258537d2e8b73eb67cb11d", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/validation/analyze_j3_saved_frames.py": "438f67dac682b94c4950626f8de4fdcde48c3a4e9ecf8fdf1b0ada4b6e0e781a", + "tests/validation/diagnose_j3_lags.py": "286fcd65b3261667a847b9b26e213d0af92cf459faa6bbd774f78c8479ce31d7", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/multigrid/cpu_reference.py": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "tests/validation/multigrid/cpu_reference_v0.2.py": "b6adbad7da625ef6a6b97958ea9625030ed92676d0cada48e061c87bcf7ca8c9", + "tests/validation/multigrid/cpuref_0_3_evidence/README.txt": "1947ee0232b88b3cc2c506d0b0af5ba051ecc94aa8f7f09228ef3939cc95919b", + "tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md": "065947e15b2242bce7d3eb05a3acdbb59939c621dcd5d31540ad4a1bd4416818", + "tests/validation/multigrid/cpuref_0_3_evidence/baseline.json": "0daaccee41cabeb17a00e2405e2c7fd0b80d36f2d01778eb39c9fd22b13d2d47", + "tests/validation/multigrid/cpuref_0_3_evidence/manifest.json": "2850ecaf2e19d010ba35eb54162371d82cc1a092831e08a03b6adf75a614988b", + "tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json": "914389afc39752bcd4132aa21fc8d5cbcf0ca75b1efd6a49becab15c2fa3361b", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt": "73e4ef01138842981daaa534390f1463839e63833c11f4e8872f94f8eaadc717", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt": "457f1d2173496554c87ca6e61df518c0b8f1e0a28cdfd94b94ebbb61bc459d70", + "tests/validation/multigrid/local_stress_observable_v1.py": "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456", + "tests/validation/multigrid/local_stress_v1_evidence/README.txt": "4f62314876047ee437bb9ecbf84798d2a9f6e85f6a3aef260277b85bcdb35fae", + "tests/validation/multigrid/local_stress_v1_evidence/TABLE_local_stress_observable_v1.md": "d8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501", + "tests/validation/multigrid/local_stress_v1_evidence/baseline.json": "64f6541447afbd15b1b15d802ad6f1b5042aaf84e7d4d2414e4ed4c52cf70507", + "tests/validation/multigrid/local_stress_v1_evidence/comparison.json": "be236671a501c31c06f7e266f6e0c0c2a89aede321a483452050ff37bf84c84a", + "tests/validation/multigrid/local_stress_v1_evidence/manifest.json": "3a9fa8c7d691c1b8c24f05940eb724d30b890dd8ed636551068d2633d7db2f70", + "tests/validation/multigrid/local_stress_v1_evidence/results_horsea.json": "f17b4644d19eb75d55deb7021ab679cb9e7922a2b46f1cacf8b6da6bfb9a2690", + "tests/validation/multigrid/local_stress_v1_evidence/run_once.py": "e629800291ef65ffea8555f66ec80bf15200552540b2a493a677bfb53d0830b3", + "tests/validation/multigrid/local_stress_v1_evidence/source_manifest.json": "d2cf90b73458f493c665c9a281d06aef0c190cf0d143639fb77ab838c78f020c", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_horsea.txt": "882f2cfb1dbdf82cce63c011397e7c2e6307bbcfec42a3510648d328cd6ddcfe", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_local_stress_observable_v1.txt": "6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4", + "tests/validation/multigrid/shear_diagnostic_v0_2.py": "a8b1cf2f7abd00efc4d068bbd27bb2317144a6ca4c545d9b2e0dcf421eadebc6", + "tests/validation/multigrid/shear_v0_2_evidence/README.txt": "4306a34b6896bd6e7a5c2ca71d68e18450359239d0c7ad7a67a4e83e7155959a", + "tests/validation/multigrid/shear_v0_2_evidence/baseline.json": "98a7853341ea732762c7506694e3a867a7259bf110e9e461ea84f741fd9ab829", + "tests/validation/multigrid/shear_v0_2_evidence/comparison.json": "41c00372099dd04b6d323785e9eaf4fec09da1753d3d150ffa230800f904142f", + "tests/validation/multigrid/shear_v0_2_evidence/joint_report.md": "1860b8082108c8b8a87998af90cd0b81dce1c04e9f6c67b41e0912f9fef6cc9c", + "tests/validation/multigrid/shear_v0_2_evidence/manifest.json": "e42aa19e91608164698bea42da88fbbfab8b0f87cc37b27c5baf165453a4fdb0", + "tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json": "c2d7ce8d16a0f47baff0788a153353dcf67088da974d9cd3d521b04ecd91ee05", + "tests/validation/multigrid/shear_v0_2_evidence/run_once.py": "6698a2e040c56be949b809387d4518eb0ba82d34cc9d99640da4f8bf3c35c23f", + "tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json": "56fbd0259ff3d4dbd14ace52f64e249a435e9df91732b0e4027def2c344c2e6a", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt": "28ddd1267ca91a772f5a6bfc65d949c9a4ea7dac5c9ba3a0bdb168492810b670", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt": "0577df5b3f5cb3c7b6e1ef2de71344f8fd3e6d959117487a06cbaf7f2afa3dea", + "tests/validation/multigrid/test_cpu_reference.py": "ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca", + "tests/validation/multigrid/test_open_corner_negative_control.py": "59a6f8ca80cdd63cb7827fbebf9b4b555c3793f19dd6bca801544ec10b5cbe1b", + "tests/validation/multigrid/test_tron_additions.py": "8e7a6a90b85e64c7326719e7b8bca2f6d34fb4c80690f0685f7e291ab93bd2a4", + "tests/validation/run_j1.py": "51b758a271ff358f931b3140a80082294a67e66c2fec0f8c19319e37f92aadc4", + "tests/validation/run_j2_slot.py": "b7d2d3aa06fcafc3ac62ed4a50892afbdb7f86e5720ce75a39ce317b6f571dad", + "tests/validation/run_j3_coverage.py": "329869519b7078e854d96241a7aad8ef93f35ac9be83f0be502c3a93523c3b13", + "tests/validation/run_j3_reservoir.py": "47535bc3569ce68c888d38978bc4f9077fd763a17829c20c081be52bb18a2903", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9", + "research/j1-2026-10-12/checkpoint-gpu.log": "adfe3d77d2e6c6f6184dccc0267b4404b20a7709505d5ff5affed0ed4a618083", + "research/j1-2026-10-12/cpu.log": "60cac097f7c4f11401df2aacb43a248640555e7628d2829c4680c71db34e9640", + "research/j1-2026-10-12/gpu-validation.log": "d1e9f2aea17a85eddcd94b81c700738ce073214857b55c28abd1219ff1edbed7", + "research/j1-2026-10-12/gpu.log": "8659a78ea52bbf8eb923d46ea71636ce63cd322352d5c98a74f631e666dd8cfb", + "research/j2-slot-2026-10-12/cli.log": "9482ad7101d501f27f92e204b2f3ae5c6d91bd887b525aa31cb4a2a188f3cb92", + "research/j2-slot-2026-10-12/cpu.log": "91aba5961006909fbbb860429a9d3cfc930112a0d74c7788bc51c0a5897b47e5", + "research/j2-slot-2026-10-12/gpu-serialization-failure.log": "df804e53b35e7ddaad79a17842b4b5fd9d834e29ca2d56edb00e835848d09200", + "research/j2-slot-2026-10-12/gpu-validation.log": "223351b52c70fa4523289f3a1b3db435a11286379253280470900ffe397580a6", + "research/j3-coverage-2026-10-12/gpu-validation.log": "505cd5a5db46d7984aefb2a614151c25c4ace0e7d2a52e02c3e4f9792fd8eb95", + "research/j3-lag-2026-10-12/gpu-availability.log": "b227a519b8286849cfdf842573bd451803da048c6b27af9517f6b8964cd3aa39", + "research/j3-lag-2026-10-12/gpu-diagnostic.log": "97956b517072b7c34e2e29e2a23f87eafb19b9eda786a4b8149e4a2eaed76ee9", + "research/j3-lag-2026-10-12/host-check.log": "b2b6d262934b3abf9e0f0bdbde14b339cb977f7bffe391c17b51b5d067862dda", + "research/j3-offline-2026-10-12/cpu-analysis.log": "bc02a9b197fc15ae1b503ca54655a7622d4361f9b45b7848ff9c387ea3665f11", + "research/j3-reservoir-2026-10-12/cpu.log": "b33f6c1a1b0ee67968c4cff85d491e46e30e0d6c796b552629714ab8b5dcead0", + "research/j3-reservoir-2026-10-12/gpu-availability-sandbox.log": "1d58470512e583a0acfabf6896ee5f31e5b493b8231aed54b864f64eb275b02c", + "research/j3-reservoir-2026-10-12/gpu-validation.log": "ff04024db197e332f37c912a96413e3251fd0186947348ffbc33af6f4a899f2c", + "research/repair-2026-10-10/final-gpu.log": "988bb97256d17b88c14f3793b15880d727ecb285abe62e7d2ae27a16729651c3", + "research/repair-2026-10-10/final-unit.log": "a892a39ecf88125558538cadce2cb5dc46d106b993b164e03da4ebb0eee68cef", + "research/repair-2026-10-10/simplification-checks.log": "c9f15e870d02003480adf1a7f2fe4a9aca66c1934c4477619f05c8a4798ba85b" + } +} diff --git a/research/refinement_step_20261013/cpu_validation.json b/research/refinement_step_20261013/cpu_validation.json new file mode 100644 index 0000000..7999fd3 --- /dev/null +++ b/research/refinement_step_20261013/cpu_validation.json @@ -0,0 +1,46 @@ +{ + "note": "Results captured from successful tool executions; no solver steps in either CPU test.", + "commands": [ + { + "command": [ + "env", + "OPENBLAS_NUM_THREADS=1", + "PYTHONDONTWRITEBYTECODE=1", + "PYTHONNOUSERSITE=1", + "PYTHONPATH=/home/frank14f/CelerisLab/src", + "/usr/bin/prlimit", + "--as=268435456", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "tests/unit/test_refinement.py" + ], + "tests": 9, + "exit_code": 0, + "unittest_seconds": 0.073 + }, + { + "command": [ + "env", + "OPENBLAS_NUM_THREADS=1", + "PYTHONDONTWRITEBYTECODE=1", + "PYTHONNOUSERSITE=1", + "PYTHONPATH=/home/frank14f/CelerisLab/src", + "/usr/bin/prlimit", + "--as=268435456", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "tests/validation/multigrid/test_refinement_gpu.py", + "CoupledGPU.test_cleanup_attempts_every_allocation" + ], + "tests": 1, + "exit_code": 0, + "unittest_seconds": 0.002 + } + ] +} diff --git a/research/refinement_step_20261013/gpu_failure_validation.json b/research/refinement_step_20261013/gpu_failure_validation.json new file mode 100644 index 0000000..5f6db65 --- /dev/null +++ b/research/refinement_step_20261013/gpu_failure_validation.json @@ -0,0 +1,28 @@ +{ + "command": [ + "/usr/bin/prlimit", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "/home/frank14f/CelerisLab/tests/validation/multigrid/test_refinement_gpu.py", + "CoupledGPU.test_partial_advance_cannot_be_published" + ], + "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" + }, + "exit_code": 0, + "elapsed_seconds": 2.289288223022595, + "peak_sampled_rss_bytes": 192962560, + "termination_reason": null, + "gpu_process_query": "gpu_uuid, pid, process_name, used_gpu_memory [MiB]\n", + "gpu_uuid": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c", + "output_bytes": 248 +} diff --git a/research/refinement_step_20261013/gpu_failure_validation.txt b/research/refinement_step_20261013/gpu_failure_validation.txt new file mode 100644 index 0000000..d9a570a --- /dev/null +++ b/research/refinement_step_20261013/gpu_failure_validation.txt @@ -0,0 +1,7 @@ +test_partial_advance_cannot_be_published (__main__.CoupledGPU) ... partial failure: two fine hops completed, no coarse step published; cleanup PASS +ok + +---------------------------------------------------------------------- +Ran 1 test in 1.995s + +OK diff --git a/research/refinement_step_20261013/gpu_validation.json b/research/refinement_step_20261013/gpu_validation.json new file mode 100644 index 0000000..2028f59 --- /dev/null +++ b/research/refinement_step_20261013/gpu_validation.json @@ -0,0 +1,25 @@ +{ + "command": [ + "/usr/bin/prlimit", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "/home/frank14f/CelerisLab/tests/validation/multigrid/test_refinement_gpu.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" + }, + "exit_code": 0, + "elapsed_seconds": 3.773645655019209, + "peak_sampled_rss_bytes": 194355200, + "termination_reason": null, + "output_bytes": 632 +} diff --git a/research/refinement_step_20261013/gpu_validation.txt b/research/refinement_step_20261013/gpu_validation.txt new file mode 100644 index 0000000..9699918 --- /dev/null +++ b/research/refinement_step_20261013/gpu_validation.txt @@ -0,0 +1,11 @@ +test_bounded_equivalence_and_ownership (__main__.CoupledGPU) ... device_arrays=66464 audit_arrays=36608 bytes +rest: steps=8 max_population=2.11927626e-07 max_leaf_drift=4.43765894e-05 max_leaf_error=4.62839387e-05 max_corner_packet=7.65754117e-09; ownership/counts PASS +nonequilibrium_seed1: steps=8 max_population=1.67235548e-07 max_leaf_drift=2.23806128e-05 max_leaf_error=2.20813948e-05 max_corner_packet=1.09677929e-08; ownership/counts PASS +normal-build rest: steps=1 PASS; source/kernel paths pinned +host_peak_rss=184.902 MiB +ok + +---------------------------------------------------------------------- +Ran 1 test in 3.454s + +OK diff --git a/research/refinement_step_20261013/incremental.patch b/research/refinement_step_20261013/incremental.patch new file mode 100644 index 0000000..d95f934 --- /dev/null +++ b/research/refinement_step_20261013/incremental.patch @@ -0,0 +1,549 @@ +diff --git a/src/CelerisLab/lbm/refinement_stepper.py b/src/CelerisLab/lbm/refinement_stepper.py +new file mode 100644 +--- /dev/null ++++ b/src/CelerisLab/lbm/refinement_stepper.py +@@ -0,0 +1,207 @@ ++# CelerisLab/lbm/refinement_stepper.py ++"""Opt-in fixed periodic patch backend; no Simulation/channel/objects adapter. ++ ++The caller owns the CudaContext and must close this backend before that context. ++Only synchronized postcollision_g leaf populations are public. No checkpoint, ++snapshot, forcing, runtime parameter mutation or dynamic refinement is offered. ++""" ++from dataclasses import dataclass, replace ++from numbers import Integral ++import struct ++from threading import RLock ++ ++import numpy as np ++import pycuda.driver as cuda ++ ++from ..cuda import compiler_v2 as compiler ++from .refinement import ACTIVE, FixedPatch2D ++ ++ ++@dataclass ++class _Level: ++ shape: tuple ++ module: object ++ current: object ++ spare: object ++ kernel: object ++ grid: tuple ++ ++ ++class PeriodicPatchStepper: ++ """D2Q9/SRT/FP32, one unforced 2:1 patch in a doubly periodic coarse box. ++ ++ ``initialize(coarse_g, fine_g)`` accepts physical Q-major (9,ny,nx) arrays ++ already in postcollision phase. It does not collide or build channel flags. ++ Every ``step()`` publishes only after both levels complete on one stream. ++ On a device/launch failure the instance becomes unusable: close and recreate ++ it, rather than pretending the partially advanced fine buffer rolled back. ++ """ ++ def __init__(self, cfg, bounds, *, context): ++ self.patch = FixedPatch2D.from_config(cfg, bounds) ++ self.ctx = context ++ self._lock = RLock() ++ self._status = "new" ++ self._step_count = 0 ++ self._allocations = [] ++ self._levels = [] ++ self._stream = None ++ self._block = (cfg.threads_per_block, 1, 1) ++ fine_cfg = replace(cfg, nx=self.patch.fine_shape[1], ny=self.patch.fine_shape[0], ++ viscosity=2 * cfg.viscosity) ++ with self.ctx.activate(): ++ try: ++ self._stream = cuda.Stream() ++ for config, name in ((replace(cfg), "PatchCoarseStep"), ++ (fine_cfg, "PatchFineStep")): ++ config.validate() ++ build = compiler.generate_config(config, n_objects=0) ++ try: ++ ptx = compiler.compile_kernel(self.ctx.sm_arch, source="refinement.cu", ++ build_dir=build) ++ module = compiler.load_module(ptx) ++ finally: ++ compiler.cleanup_build_dir(build) ++ ptr, _ = module.get_global("d_params") ++ cuda.memcpy_htod(ptr, struct.pack("=ffffI", config.omega, 0, 0, 0, 0)) ++ shape = (9, config.ny, config.nx) ++ size = int(np.prod(shape)) * 4 ++ self._levels.append(_Level(shape, module, self._allocate(size), ++ self._allocate(size), module.get_function(name), ++ ((config.nx + self._block[0] - 1) // self._block[0], ++ config.ny, 1))) ++ p = self.patch ++ order = np.argsort(p.coalesce_coarse) ++ self._ghosts = self._upload(p.ghost_fine) ++ self._donors = self._upload(p.ghost_coarse) ++ self._targets = self._upload(p.coalesce_coarse[order]) ++ self._children = self._upload(p.coalesce_fine[order]) ++ self._explode = self._levels[1].module.get_function("PatchExplode") ++ except BaseException: ++ try: ++ self.close() ++ except Exception: ++ pass # Preserve the original construction failure. ++ raise ++ ++ def _allocate(self, size): ++ pointer = cuda.mem_alloc(size) ++ self._allocations.append(pointer) ++ return pointer ++ ++ def _upload(self, array): ++ array = np.ascontiguousarray(array) ++ pointer = self._allocate(array.nbytes) ++ cuda.memcpy_htod(pointer, array) ++ return pointer ++ ++ def _require(self, *states): ++ if self._status not in states: ++ raise RuntimeError(f"Periodic patch is {self._status}; expected {' or '.join(states)}") ++ ++ @property ++ def step_count(self): ++ return self._step_count ++ ++ def _mask_nonleaves(self, coarse, fine): ++ x0, y0, x1, y1 = self.patch.bounds ++ coarse[:, y0:y1, x0:x1] = np.nan ++ fine[:, self.patch.fine_kind != ACTIVE] = np.nan ++ ++ def initialize(self, coarse_g, fine_g): ++ """Upload an explicit periodic G_0; invalid non-leaves are discarded.""" ++ with self._lock, self.ctx.activate(): ++ self._require("new", "ready") ++ arrays = [np.array(a, dtype=np.float32, order="C", copy=True) ++ for a in (coarse_g, fine_g)] ++ if any(a.shape != level.shape for a, level in zip(arrays, self._levels)): ++ raise ValueError("Expected Q-major (9,ny,nx) arrays for both levels") ++ x0, y0, x1, y1 = self.patch.bounds ++ leaf = np.ones(self.patch.coarse_shape, dtype=bool) ++ leaf[y0:y1, x0:x1] = False ++ for array, mask in zip(arrays, (leaf, self.patch.fine_kind == ACTIVE)): ++ if not np.isfinite(array[:, mask]).all() or (array[:, mask].sum(axis=0) <= 0).any(): ++ raise ValueError("Leaf populations must be finite with positive density") ++ self._mask_nonleaves(*arrays) ++ try: ++ for level, array in zip(self._levels, arrays): ++ cuda.memcpy_htod(level.current, array) ++ cuda.memcpy_htod(level.spare, array) ++ self._step_count = 0 ++ self._status = "ready" ++ except BaseException: ++ self._status = "failed" ++ raise ++ ++ def step(self, n=1): ++ """Advance G→G: one explosion, two fine collisions, one coarse collision.""" ++ if isinstance(n, bool) or not isinstance(n, Integral) or n < 0: ++ raise ValueError("n must be a nonnegative integer") ++ with self._lock, self.ctx.activate(): ++ self._require("ready") ++ c, f = self._levels ++ p = self.patch ++ kw = dict(block=self._block, stream=self._stream) ++ try: ++ self._status = "advancing" ++ for _ in range(n): ++ self._explode(c.current, f.current, self._ghosts, self._donors, ++ np.uint32(len(p.ghost_fine)), np.uint64(np.prod(p.coarse_shape)), ++ grid=((len(p.ghost_fine) + self._block[0] - 1) // self._block[0], 1), ++ **kw) ++ f.kernel(f.current, f.spare, grid=f.grid, **kw) ++ f.kernel(f.spare, f.current, grid=f.grid, **kw) ++ c.kernel(c.current, c.spare, f.current, self._targets, self._children, ++ np.uint32(len(p.coalesce_coarse)), ++ *(np.uint32(v) for v in p.bounds), grid=c.grid, **kw) ++ self._stream.synchronize() ++ c.current, c.spare = c.spare, c.current ++ self._step_count += 1 ++ self._status = "ready" ++ except BaseException: ++ self._status = "failed" ++ raise ++ ++ def download(self): ++ """Return two synchronized G arrays, NaN on all non-leaves; no host cache.""" ++ with self._lock, self.ctx.activate(): ++ self._require("ready") ++ arrays = [np.empty(level.shape, np.float32) for level in self._levels] ++ for level, array in zip(self._levels, arrays): ++ cuda.memcpy_dtoh(array, level.current) ++ self._mask_nonleaves(*arrays) ++ return tuple(arrays) ++ ++ def close(self): ++ """Release owned allocations/modules; the caller's context stays open.""" ++ with self._lock: ++ if self._status == "closed": ++ return ++ self._status = "closed" ++ with self.ctx.activate(): ++ error = None ++ try: ++ if self._stream is not None: ++ self._stream.synchronize() ++ except Exception as exc: ++ error = exc ++ self._levels.clear() ++ self._explode = None ++ for pointer in self._allocations: ++ try: ++ pointer.free() ++ except Exception as exc: ++ error = error or exc ++ self._allocations.clear() ++ self._stream = None ++ if error is not None: ++ raise error ++ ++ def __enter__(self): ++ return self ++ ++ def __exit__(self, *exc): ++ try: ++ self.close() ++ except Exception: ++ if exc[0] is None: ++ raise +diff --git a/src/CelerisLab/lbm/kernels/refinement.cu b/src/CelerisLab/lbm/kernels/refinement.cu +new file mode 100644 +--- /dev/null ++++ b/src/CelerisLab/lbm/kernels/refinement.cu +@@ -0,0 +1,105 @@ ++// Fixed, unforced, doubly periodic 2:1 patch. Separate compilation entry; ++// default OneStep/channel kernels are deliberately not included. ++#include ++#include ++#include "config.h" ++#include "core/precision.cuh" ++#include "core/descriptors.cuh" ++#include "core/layout.cuh" ++#include "core/params.cuh" ++#include "operators/macro.cuh" ++#include "operators/collision_srt.cuh" ++#include "streaming/pull_double_buffer.cuh" ++ ++#if DIM != 2 || NQ != 9 || COLLISION_MODEL != 0 || STORE_PRECISION != 0 || USE_DDF_SHIFTING || USE_LES || STREAMING_MODEL != 0 ++#error "Refinement requires unshifted FP32 D2Q9 SRT double buffers without LES" ++#endif ++ ++// Enabled only in the validation build; no diagnostic arrays in normal builds. ++#ifdef CELERIS_REFINEMENT_AUDIT ++extern "C" { ++__device__ unsigned int collision_counts[TOTAL_CELLS]; ++__device__ unsigned int explosion_counts[TOTAL_CELLS]; ++__device__ unsigned int incoming_counts[NQ * TOTAL_CELLS]; ++} ++#endif ++ ++__device__ __forceinline__ void patch_collide(float* f, unsigned long k) { ++ float rho, ux, uy, feq[NQ]; ++ compute_rho_u(f, rho, ux, uy); ++ compute_feq(rho, ux, uy, feq); ++ collide_srt_no_force(f, feq, d_params.omega); ++#ifdef CELERIS_REFINEMENT_AUDIT ++ ++collision_counts[k]; ++#endif ++} ++ ++extern "C" __global__ void PatchExplode( ++ const float* coarse, float* fine, const uint32_t* targets, ++ const uint32_t* donors, unsigned int count, unsigned long coarse_cells) ++{ ++ unsigned int row = blockIdx.x * blockDim.x + threadIdx.x; ++ if (row >= count) return; ++ for (unsigned int q = 0; q < NQ; ++q) ++ fine[index_f(targets[row], q)] = coarse[q * coarse_cells + donors[row]]; ++#ifdef CELERIS_REFINEMENT_AUDIT ++ ++explosion_counts[targets[row]]; ++#endif ++} ++ ++extern "C" __global__ void PatchFineStep(const float* in, float* out) { ++ unsigned int x, y; unsigned long k; ++ index_from_thread(x, y, k); ++ if (x >= NX || y >= NY) return; ++ float f[NQ]; ++ // Outer halo is invalid after EACH hop, including when reusing the buffer ++ // that held explosion data. Inner halo only streams; it never collides. ++ if (x < 2 || y < 2 || x >= NX - 2 || y >= NY - 2) { ++ for (int q = 0; q < NQ; ++q) f[q] = NAN; ++ } else { ++ unsigned long j[NQ]; ++ compute_neighbors(x, y, j); // These interior targets never wrap. ++ stream_pull_load(k, f, in, j); ++ if (x >= 4 && y >= 4 && x < NX - 4 && y < NY - 4) ++ patch_collide(f, k); ++ } ++ stream_pull_store(k, f, out); ++} ++ ++extern "C" __global__ void PatchCoarseStep( ++ const float* in, float* out, const float* fine, ++ const uint64_t* targets, const uint64_t* children, unsigned int count, ++ unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1) ++{ ++ unsigned int x, y; unsigned long k; ++ index_from_thread(x, y, k); ++ if (x >= NX || y >= NY) return; ++ // Both buffers were poisoned at initialization; covered cells stay invalid. ++ if (x >= x0 && x < x1 && y >= y0 && y < y1) return; ++ unsigned long j[NQ]; ++ compute_neighbors(x, y, j); ++ float f[NQ]; ++ stream_pull_load(k, f, in, j); ++ if (x >= x0 - 1 && x <= x1 && y >= y0 - 1 && y <= y1) { ++ for (unsigned int q = 1; q < NQ; ++q) { ++ uint64_t slot = index_f(k, q); ++ unsigned int lo = 0, hi = count; ++ while (lo < hi) { ++ unsigned int mid = lo + (hi - lo) / 2; ++ if (targets[mid] < slot) lo = mid + 1; ++ else hi = mid; ++ } ++ if (lo < count && targets[lo] == slot) { ++ const uint64_t* s = children + 4ul * lo; ++ f[q] = 0.25f * (fine[s[0]] + fine[s[1]] + fine[s[2]] + fine[s[3]]); ++#ifdef CELERIS_REFINEMENT_AUDIT ++ ++incoming_counts[slot]; ++#endif ++ } ++ } ++ } ++ // Includes the eight grazing-corner links with UNCOVERED coarse donors. ++ // All replacement arrivals must be in place before computing rho/u. ++ patch_collide(f, k); ++ stream_pull_store(k, f, out); ++} +diff --git a/tests/validation/multigrid/test_refinement_gpu.py b/tests/validation/multigrid/test_refinement_gpu.py +new file mode 100644 +--- /dev/null ++++ b/tests/validation/multigrid/test_refinement_gpu.py +@@ -0,0 +1,222 @@ ++"""Bounded FP32 GPU / pinned FP64 CPUREF-0.3 equivalence, not accuracy validation. ++ ++Run explicitly in pycuda_3_10 with PYTHONPATH=/src, one BLAS thread, ++and CUDA_VISIBLE_DEVICES=0 (or 1) only after checking the physical GPU is idle. ++At most eight coarse steps per case. No files, plots or flow arrays are saved. ++""" ++import hashlib ++import importlib.util ++from contextlib import nullcontext ++from pathlib import Path ++import resource ++import sys ++from threading import RLock ++import unittest ++from unittest.mock import Mock, patch ++ ++import numpy as np ++import pycuda.driver as cuda ++ ++import CelerisLab ++from CelerisLab.config import LBMConfig ++from CelerisLab.cuda import compiler_v2 as compiler ++from CelerisLab.cuda.context import CudaContext ++from CelerisLab.lbm.refinement_stepper import PeriodicPatchStepper ++ ++ROOT = Path(__file__).resolve().parents[3] ++POP_ATOL = 3e-6 ++MOMENT_ATOL = 2e-4 ++REFERENCE_SHA = "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e" ++REF_PATH = Path(__file__).with_name("cpu_reference.py") ++assert hashlib.sha256(REF_PATH.read_bytes()).hexdigest() == REFERENCE_SHA ++loader = importlib.util.spec_from_file_location("pinned_patch_reference", REF_PATH) ++ref = importlib.util.module_from_spec(loader) ++sys.modules[loader.name] = ref ++loader.loader.exec_module(ref) ++ ++ ++def postcollision(state, spec, maps): ++ # Observation conversion only. Never applied to production G. ++ return tuple(ref._collide(spec, a, np.isfinite(a), tau, mask, ++ np.zeros(mask.shape, dtype=np.int64)) ++ for a, tau, mask in ((state.coarse_f, spec.tau_coarse, maps.coarse_active), ++ (state.fine_f, spec.tau_fine, maps.fine_active))) ++ ++ ++def totals(arrays, maps): ++ # Leaf sum independent of the reference's flux/budget bookkeeping helpers. ++ c, f = arrays ++ populations = c[:, maps.coarse_active].astype(np.float64).sum(axis=1) ++ populations += .25 * f[:, maps.fine_active].astype(np.float64).sum(axis=1) ++ return np.array([populations.sum(), populations @ ref.CX, populations @ ref.CY]) ++ ++ ++def global_array(module, name, shape): ++ out = np.empty(shape, dtype=np.uint32) ++ ptr, size = module.get_global(name) ++ assert size == out.nbytes ++ cuda.memcpy_dtoh(out, ptr) ++ return out ++ ++ ++class CoupledGPU(unittest.TestCase): ++ def test_cleanup_attempts_every_allocation(self): ++ backend = PeriodicPatchStepper.__new__(PeriodicPatchStepper) ++ backend.ctx = Mock(activate=nullcontext) ++ backend._lock = RLock() ++ backend._status = "failed" ++ backend._stream = Mock() ++ backend._stream.synchronize.side_effect = RuntimeError("original stream failure") ++ first, second = Mock(), Mock() ++ first.free.side_effect = RuntimeError("secondary free failure") ++ backend._allocations = [first, second] ++ backend._levels = [Mock()] ++ with self.assertRaisesRegex(RuntimeError, "original stream failure"): ++ backend.close() ++ first.free.assert_called_once() ++ second.free.assert_called_once() ++ self.assertEqual(backend._allocations, []) ++ self.assertEqual(backend._levels, []) ++ backend.close() ++ ++ def test_partial_advance_cannot_be_published(self): ++ spec = ref.make_spec(collision="srt") ++ maps = ref.build_maps(spec) ++ with CudaContext(0) as context: ++ with PeriodicPatchStepper(LBMConfig(nx=16, ny=16, viscosity=.1), ++ (4, 4, 12, 12), context=context) as backend: ++ backend.initialize(*postcollision(ref.make_state(spec), spec, maps)) ++ coarse, fine = backend._levels ++ ++ def fail_after_fine(*args, **kwargs): ++ # Ensure both queued fine hops actually completed before failing. ++ backend._stream.synchronize() ++ raise RuntimeError("coarse launch failed after two fine hops") ++ ++ with patch.object(coarse, "kernel", side_effect=fail_after_fine): ++ with self.assertRaisesRegex(RuntimeError, "after two fine hops"): ++ backend.step() ++ self.assertEqual(backend.step_count, 0) ++ for operation in (backend.download, backend.step): ++ with self.assertRaisesRegex(RuntimeError, "failed"): ++ operation() ++ raw = np.empty(fine.shape, np.float32) ++ cuda.memcpy_dtoh(raw, fine.current) ++ self.assertTrue(np.isfinite(raw.ravel()[backend.patch.coalesce_fine]).all()) ++ self.assertFalse(context.is_closed) ++ print("partial failure: two fine hops completed, no coarse step published; cleanup PASS", flush=True) ++ ++ def test_bounded_equivalence_and_ownership(self): ++ self.assertEqual(Path(CelerisLab.__file__).resolve(), ROOT / "src/CelerisLab/__init__.py") ++ self.assertEqual(Path(compiler._KERNEL_DIR).resolve(), ROOT / "src/CelerisLab/lbm/kernels") ++ spec = ref.make_spec(collision="srt") ++ maps = ref.build_maps(spec) ++ cfg = LBMConfig(nx=16, ny=16, viscosity=.1) ++ compile_original = compiler.compile_kernel ++ ++ def audit_compile(*args, **kwargs): ++ # Only this private build's entry differs. Production source unchanged. ++ entry = Path(kwargs["build_dir"]) / "refinement_audit.cu" ++ entry.write_text('#define CELERIS_REFINEMENT_AUDIT\n#include "refinement.cu"\n') ++ kwargs["source"] = entry.name ++ return compile_original(*args, **kwargs) ++ ++ with CudaContext(0) as context: ++ with patch.object(compiler, "compile_kernel", audit_compile): ++ backend = PeriodicPatchStepper(cfg, (4, 4, 12, 12), context=context) ++ with backend: ++ # Production allocations: four DDF arrays and four compact tables. ++ device_bytes = 2 * 9 * (16**2 + 24**2) * 4 ++ p = backend.patch ++ device_bytes += sum(a.nbytes for a in (p.ghost_fine, p.ghost_coarse, ++ p.coalesce_coarse, p.coalesce_fine)) ++ audit_bytes = sum((2 + 9) * np.prod(level.shape[1:]) * 4 ++ for level in backend._levels) ++ self.assertLess(device_bytes + audit_bytes, 128 * 1024) ++ print(f"device_arrays={device_bytes} audit_arrays={audit_bytes} bytes", flush=True) ++ for case in ("rest", "nonequilibrium_seed1"): ++ with self.subTest(case=case): ++ state = ref.make_state(spec, velocity=(0, 0) if case == "rest" else (.03, -.02)) ++ if case != "rest": ++ rng = np.random.default_rng(1) ++ state = ref.State(*(a * (1 + 1e-3 * rng.standard_normal(a.shape)) ++ for a in (state.coarse_f, state.fine_f))) ++ initial = postcollision(state, spec, maps) ++ backend.initialize(*initial) ++ for level in backend._levels: ++ for name in ("collision_counts", "explosion_counts", "incoming_counts"): ++ ptr, size = level.module.get_global(name) ++ cuda.memset_d8(ptr, 0, size) ++ before = totals(backend.download(), maps) ++ max_error = max_drift = max_moment_error = max_corner = 0.0 ++ for step in range(1, 9): ++ state, diagnostic = ref.advance_coarse_once(spec, maps, state) ++ backend.step() ++ actual = backend.download() ++ expected = postcollision(state, spec, maps) ++ self.assertEqual(backend.step_count, step) ++ p.check_synchronization(step, state.tick, phase="postcollision_g") ++ for got, want in zip(actual, expected): ++ np.testing.assert_array_equal(np.isnan(got), np.isnan(want)) ++ error = float(np.nanmax(np.abs(got - want))) ++ self.assertLessEqual(error, POP_ATOL) ++ max_error = max(max_error, error) ++ drift = float(np.max(np.abs(totals(actual, maps) - before))) ++ moment_error = float(np.max(np.abs(totals(actual, maps) - totals(expected, maps)))) ++ self.assertLessEqual(drift, MOMENT_ATOL) ++ self.assertLessEqual(moment_error, MOMENT_ATOL) ++ max_drift, max_moment_error = max(max_drift, drift), max(max_moment_error, moment_error) ++ c, f = backend._levels ++ np.testing.assert_array_equal(global_array(c.module, "collision_counts", (16, 16)), ++ step * maps.coarse_active) ++ np.testing.assert_array_equal(global_array(f.module, "collision_counts", (24, 24)), ++ 2 * step * maps.fine_active) ++ np.testing.assert_array_equal(global_array(f.module, "explosion_counts", (24, 24)), ++ step * ~maps.fine_active) ++ owners = np.zeros((9, 16, 16), np.uint32) ++ owners.ravel()[p.coalesce_coarse] = step ++ np.testing.assert_array_equal(global_array(c.module, "incoming_counts", owners.shape), owners) ++ raw = np.empty(f.shape, np.float32) ++ cuda.memcpy_dtoh(raw, f.current) ++ np.testing.assert_array_equal(np.isfinite(raw), diagnostic["hop2_valid"]) ++ self.assertTrue(np.isfinite(raw.ravel()[p.coalesce_fine]).all()) ++ self.assertEqual(len(diagnostic["corner_packets"]), 8) ++ for packet in diagnostic["corner_packets"].values(): ++ sx, sy = packet["source_coarse_xy"] ++ self.assertTrue(maps.coarse_active[sy, sx]) ++ values = [raw[packet["direction"], y, x] ++ for y, x in packet["children_fine_yx"]] ++ error = float(np.max(np.abs(np.array(values) - packet["packets"]))) ++ self.assertLessEqual(error, POP_ATOL) ++ max_corner = max(max_corner, error) ++ print(f"{case}: steps=8 max_population={max_error:.9g} " ++ f"max_leaf_drift={max_drift:.9g} max_leaf_error={max_moment_error:.9g} " ++ f"max_corner_packet={max_corner:.9g}; ownership/counts PASS", flush=True) ++ ++ # Fail before any additional time step; no stale synchronized export. ++ with patch.object(backend, "_explode", side_effect=RuntimeError("injected launch failure")): ++ with self.assertRaisesRegex(RuntimeError, "injected"): ++ backend.step() ++ with self.assertRaisesRegex(RuntimeError, "failed"): ++ backend.download() ++ with self.assertRaisesRegex(RuntimeError, "failed"): ++ backend.step() ++ self.assertFalse(context.is_closed) ++ with self.assertRaisesRegex(RuntimeError, "closed"): ++ backend.download() ++ ++ # Compile and execute the actual non-audited entry as well: one step. ++ with PeriodicPatchStepper(cfg, (4, 4, 12, 12), context=context) as plain: ++ rest = postcollision(ref.make_state(spec), spec, maps) ++ plain.initialize(*rest) ++ plain.step() ++ for got, expected in zip(plain.download(), rest): ++ 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, 512) ++ print(f"host_peak_rss={rss:.3f} MiB", flush=True) ++ ++ ++if __name__ == "__main__": ++ unittest.main(verbosity=2) diff --git a/research/refinement_step_20261013/manifest.json b/research/refinement_step_20261013/manifest.json new file mode 100644 index 0000000..32a7f1a --- /dev/null +++ b/research/refinement_step_20261013/manifest.json @@ -0,0 +1,52 @@ +{ + "prior_files_checked": 311, + "prior_files_changed": [], + "reference_sha256": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "new_code_lines": 534, + "files": { + "research/refinement_step_20261013/README.txt": { + "bytes": 10671, + "sha256": "922d6fc6c742203f69e174a12cac6b19e8ae15be74257134c08d72990b16d517" + }, + "research/refinement_step_20261013/baseline.json": { + "bytes": 40620, + "sha256": "68bd37982acb433bea235a94f211c907be483e905742f98166235929f79ba95d" + }, + "research/refinement_step_20261013/cpu_validation.json": { + "bytes": 1231, + "sha256": "cf7200fc4b763f5a2133d8affeea306578a247179bb82ce2f5ae0d8e244c576b" + }, + "research/refinement_step_20261013/gpu_failure_validation.json": { + "bytes": 868, + "sha256": "5e7d58863659af3c29f10aac11ff43516fedd39a30a40e5ead62732ba80fcbd3" + }, + "research/refinement_step_20261013/gpu_failure_validation.txt": { + "bytes": 248, + "sha256": "d6ec00e0e8c69015565135a67fac6de47701e9eebc3cbacc379abf8166ac61be" + }, + "research/refinement_step_20261013/gpu_validation.json": { + "bytes": 672, + "sha256": "2f0218854a2a307dd15a891a781fa3c2b7e865c201630a36ca180134b1ee6436" + }, + "research/refinement_step_20261013/gpu_validation.txt": { + "bytes": 632, + "sha256": "1714ee85e6235528bf29dac85bca1298a673bdb9bf0c9c364961bf364a83f0d2" + }, + "research/refinement_step_20261013/incremental.patch": { + "bytes": 26516, + "sha256": "c3d2d813b64f8a2305f54153508d71b546d86af7be1005cff96e0ef8c91297bb" + }, + "src/CelerisLab/lbm/kernels/refinement.cu": { + "bytes": 3965, + "sha256": "e8e769b7c6a61190675eafee99369ce9d8f4836f6ec74bed2d45f9077cbb3407" + }, + "src/CelerisLab/lbm/refinement_stepper.py": { + "bytes": 8905, + "sha256": "51a0582f048ba76752b32aa5134b2caeaa39d659d2807ee6a70c3af202a9def3" + }, + "tests/validation/multigrid/test_refinement_gpu.py": { + "bytes": 12494, + "sha256": "6c25bb0ce7a0dc3e9d11b56dd4a583524893b47b90c31ba9745829c2f39ad2ff" + } + } +} diff --git a/research/repair-2026-10-10/TRON_HANDOFF.md b/research/repair-2026-10-10/TRON_HANDOFF.md new file mode 100644 index 0000000..a339786 --- /dev/null +++ b/research/repair-2026-10-10/TRON_HANDOFF.md @@ -0,0 +1,193 @@ +# CelerisLab 修复交接:供 TRON 独立复核 + +2026-10-10。用户授权本轮修复现有错误、组织 subagents 并实际运行检查。没有实现壁面 jet、AMR/多层网格,也没有开展全面重构。保持当前模块边界和主要公共接口。 + +## 工作树与来源 + +基线为 `main` 的 `6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0`,没有提交或推送。修复前已有用户改动,见 `baseline-status.txt`、`baseline-hashes.json`。四个生成配置头和 `tests/postproc/experiment.ipynb` 是原有改动,**不是本轮补丁**;修复后逐字节哈希与本轮开始时一致。原副本保存在 `original-user-files/`。 + +唯一运行来源为 `/home/frank14f/CelerisLab/src`,解释器为 `/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python`(Python 3.10.13)。包、compiler 和 CUDA 源文件的实测路径见 `provenance.json`,永久 GPU 测试也断言源码来源。未修改 DynamisLab 下的副本、全局安装或环境配置。 + +运行采用 Tesla V100-SXM2-16GB;物理 GPU 限定0、1,进程内映射为 device 0。编译使用临时独立源码副本和配置头,Simulation 关闭时清理;测试没有覆盖仓库内生成头或 PTX。 + +## 分工与独立复核 + +- numerical:CUDA 算子、边界、EsoPull 映射与 stepper;报告 `repair-numerical.md`。 +- state:对象、局部流场修补、传输、快照和检查点;报告 `repair-state.md`。 +- architecture:配置、隔离编译、上下文与资源、CPU 导入和包声明;报告 `repair-architecture.md`。 +- root:Simulation 集成、涡初始化修复、现有测试门槛、实际 GPU 验证和交接。仅就 close/constructor 异常清理授权 architecture 协助修改 Simulation 对应区域。 + +实施时共享任务说明明确物理与兼容约束(完成后已清理过程文件),接口变更先互通。state/numerical 相互核查同时间 EsoPull 映射与恢复阶段,并独立运行对方测试。architecture 对检查点进行交叉审查,发现定期保存时 obs 计数落后;root 修正为逐批累计,保存前等待对应 stream 完成。 + +## 实施的修复 + +| 范围 | 修复结果 | 核查重点 | +|---|---|---| +| 全局外力 | TRT 按偶/奇松弛率修正源项;MRT 使用各矩对应的修正 | 除质量、动量外,D2 全分布与独立矩阵公式对照 | +| 稀疏 force_region | 保留原来的步后独立冲量;用中点速度源项消除错误碰撞系数 | 单步 Δj=F;二次平衡下等价于局部平衡分布差,不声称与全局 Guo 在所有阶数等价 | +| EsoPull | 同一 completed count 的编码成为解码逆;同步不再隐含碰撞;壁面供体在原地写之前统一读取 | 首步、后续奇偶步、非均匀场、闭域与双缓冲同空间阶段比较 | +| 移动壁和入口 | Bouzidi 反射修正符号及可压缩密度因子;shifted 入口密度常数修正 | 各方向、q 两分支和 fallback;不改既有入口方法 | +| 物体增删 | Q-major 访问、精度/shift 编码与字节偏移一致;补丁外数据保持;立即删除也维持 dense IDs | FP32/FP16S,奇偶步、cache、增删后继续运行 | +| 对象控制与叠加 | 控制不被其他对象刷新覆盖;sensor/force 标记不改变 solid occupancy;过滤无效采样点 | 多个 force_region 的实际流体 footprint 重叠提前拒绝,避免同 cell 并行写 | +| 快照与检查点 | field-only 快照跨 EsoPull 奇偶恢复;v2 检查几何/投影并恢复控制、设备已应用 action、runtime params、obs 和缓存 | 保存 host 待上传目标与 device 已应用 action 的区别,保留 upload_act=False;相同 count 不代表同几何 | +| CUDA 传输与资源 | 异步 host 缓冲使用 pinned memory 并保持生命周期;操作作用域绑定所属 context;多实例非逆序关闭 | 构造失败保留原始异常;关闭失败可重试;外部 stream 必须在对应实例 context 下创建 | +| 配置与构建 | 独立临时编译目录;浮点宏不再按展示精度截断;显式路径缺失报错;分配结构变化拒绝;重编译同步新黏性 omega | 编译失败不读取旧隐式 PTX;CPU 工具可独立导入;Python 最低版本声明 3.10 | +| 涡初始化 | 复用标准可压缩平衡分布,补齐 rho;Oseen 中心使用解析极限及近中心稳定展开 | rho≠1 的零强度不变;中心/近中心有限、远处保持原公式;没有时间信息的 EsoPull 初始化明确拒绝 | +| 检查本身 | 集成测试固定小网格、显式空对象配置;传感器数值比较成为 pytest assert | 原来只返回结果的 validation 不能再静默通过 | + +## 经复核保留的设计 + +1. `snapshot()/restore()` 只保存/恢复流场,不回退时钟和控制。EsoPull 保存 next-pull 物理分布,并按恢复时的 count 重编码。需要精确续跑用 checkpoint。 +2. `run()` 仍丢弃未 `sync_bodies()` 的暂存编辑;runtime sync 仍重编号。立即删除现也明确会压紧 IDs,调用者需重新取得剩余 ID。 +3. 公共 `recompile()` 仍禁止初始化后调用;运行中拓扑改变经 `sync_bodies()`。root 新测试曾误期望公开入口能越过此限制,修正了测试而没有改变 API。 +4. checkpoint 仍允许 collision/LES 等参数研究;改变黏性时使用新配置 omega。v1 内置 circle/sensor 的匹配几何可以安全读回;无法恢复真实控制的 v1 force_region 及未知自定义几何明确拒绝。 +5. force_region 仍是稀疏步后冲量;LES 原有模型选择、BFS 新流体填充策略没有替换。 +6. EsoPull `get_ddf()` 仍返回已解码精度/shift 的 backing 排列,不冒充物理节点分布。EsoPull 宏观诊断是当前 count 的 next-pull 阶段;双缓冲诊断是空间 postcollision 阶段。已移除文档中不适用于这些阶段的历史“bit-identical”断言。 + +## 复现检查 + +从 `/home/frank14f/CelerisLab` 执行: + +```bash +env PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 \ + /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -m pytest tests/unit -q -p no:cacheprovider + +env PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 \ + /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -m pytest tests/integration tests/validation/test_sensor_accuracy.py -q -p no:cacheprovider +``` + +数值 unit suite 包含真实头文件/辅助 kernel 的 CPU shim 和 12 个独立 nvcc 编译组合;状态 unit suite 用真实 Python 方法与 HDF5,driver double 检查地址边界和 pinned 约束。两者不能替代 GPU。GPU suite 使用真实编译入口与设备,覆盖守恒、奇偶步、双布局、FP16S 状态修补、bitwise checkpoint 续跑、多实例上下文,以及约 1000 步后的 sensor 与宏观采样直接对比。 + +最终结果以同目录 `final-unit.log` 和 `final-gpu.log` 为准,汇总在本文件尾部。 + +## 尚未证明或未实现的边界 + +- **D3Q19 完整求解器仍未实现。** 全入口仍有维度不完整的 aux/sync 调用;Simulation 在分配/编译前明确拒绝。D3 局部 collision/shift 修复与测试不代表三维求解器可运行。 +- 未做长时间高 Re、生产工况、LES 全组合、曲壁力/力矩网格收敛验证。小算例有限值、守恒和续跑一致性不能证明这些性质。 +- EsoPull 入口/出口已在后续轮统一为预暂存 spatial postcollision 供体;原始失败与后续验证分开保留,见末节。仍不将有限回归扩大为所有边界组合的正确性证明。 +- 壁面正确性引入每步一次小规模 prepass 和 `4*(6*nx+2*ny*nq)` 字节 scratch(已合并入口/出口准备);没有进行性能基准,不能宣称绝无性能变化。可后续基于性能实测合并兼容的边界准备工作。 +- 编译成功后若发生设备 OOM/重绑定失败,runtime topology sync 尚不是通用事务回滚机制;不要将正常路径测试描述成所有设备故障下的原子恢复。 +- 动态拓扑仍使用现有 BFS/equilibrium 初始化,未新增严格守恒移动边界算法。jet/网格方向需以后单独设计与验证。 + +建议 TRON 顺序:检查本轮与基线的差异归属 → 同 count/空间阶段映射与移动壁符号 → 力源项全向量 → checkpoint host/device 控制时序与兼容性 → 独立复现 GPU 测试 → 原地入口/出口读写与性能复核。 + +## 最终实测结果 + +合并所有修复后重新运行,两个进程均 exit 0: + +- `tests/unit`:**124 passed,8 subtests passed**,26.72 秒。日志 `final-unit.log`。 +- `tests/integration` + `tests/validation/test_sensor_accuracy.py`:**66 passed**,190.25 秒,真实 V100 GPU。日志 `final-gpu.log`。 +- `git diff --check`:通过。 +- 原有四个配置头和 notebook:最终哈希与修复开始时一致。见 `provenance.json`。 + +这些结果是本轮受测范围的证据;TRON 的独立复核仍有必要,尤其是上面列明的数值阶段、入口/出口并发与性能边界。 + +## 整理与精简(稳定性验证轮) + +删除了 17 个由本轮研究/修复产生的旧复现脚本、调度记录、重复哈希和重复 baseline diff,共 3718875 字节。保留原始失败结果、正式研究、永久测试与当前交接。用户原文件未修改,`original-user-files/` 备份与哈希保护链保留;没有清理 `ref/`、用户原有研究文档或实验结果。旧报告中的复现命令是历史记录,现行命令以本交接及永久测试为准。 + +生产代码消除了重复参数打包、独立构建目录内多余的临时文件写入,以及手写配置字段清单;没有新增插件、注册器或通用框架。经典验证复用原有圆柱脚本,补齐作用域 context 和临时目录清理;Poiseuille 只有一个独立验证脚本。 + +## 经典案例与稳定性:后续修复前的基线(2026-10-10) + +本轮只用物理 GPU **0、1**;进程内均为映射后的 device 0,固定前述独立源码和解释器。结果集中在 `classic-results.json`,可复算频率/受力的时序集中在 `classic-signals.npz`。不保存重复的整场快照与多套 CSV/报告。 + +| 案例与范围 | 实际运行 | 结果 | +|---|---|---| +| Sah04 S2,MRT/双缓冲,Re_nom=200,β=.5,2402×62 | 120000 步,burn 45000 | St=.3566902,对 .3513 误差 **1.534%**,通过原 5% 门槛;Re_real=204.881,ρ范围 .9820–1.0512 | +| Kan99b K2,MRT/双缓冲,Re=100,α=1,1351×601 | 280000 步(burn 80000 + 200000) | 五项均通过原有门槛:St=.169641(2.502%),mean Cl=−2.57953(3.675%),mean Cd=1.14603(3.807%),Cl振幅=.355069(2.212%),Cd振幅=.098919(.384%) | +| 相同 K2,EsoPull | 同样 280000 步,无 NaN/Inf | **五项均未通过**:St=.138851(16.102%),mean Cl=−2.32464,mean Cd=.823321;不应把“没发散”算作精度合格 | +| 解析 Poiseuille,SRT/TRT/MRT×两布局×H16/32/64,FP32+shift | 共 18 个基准组合、299754 步,Re=4.8,Ma≤.052 | **16/18 通过**预设误差/质量/稳态门槛;各碰撞模型的双布局剖面逐值一致。H64 弱力 MRT 两布局误差 .6977%,超过 .15% 门槛 | + +Poiseuille 采用 x 周期、半程无滑移壁,解析式 `u(s)=F*s*(H-s)/(2*rho*nu)`;参考 `ref/lbmpy/src/lbmpy/analytical_solutions.py::poiseuille_flow` 及 `ref/lbmpy/tests/poiseuille.py`。公开宏观读取阶段不同,本验证统一回到 spatial postcollision 分布并按该阶段减去半力动量;没有把两种阶段的速度直接比较。原门槛为 H16/32/64 相对 L2≤1%/.3%/.15%,质量漂移≤5e−4,稳态相对残差≤2e−5,横向速度≤1e−5。H64 MRT 将外力提高4倍、仍保持 Ma≈.052 后误差降到 .00776%;这是另一参数诊断,**没有替换失败的原案例**。它提示弱力/FP32敏感性,未证明具体误差机制;TRT 误差也非单调下降,不能概括为所有组合已验证二阶收敛。 + +Sah04 的现有提取器带目标频段筛选,因此另用全部非零频率中的全局主峰复算,得到完全相同 St=.3566902,排除了本次结果因目标加权挑峰而“通过”。K2 保留原文升力符号,没有取绝对值或翻转观测量来通过门槛。参考全文已在 `tests/specs/sah04.md`、`tests/specs/kan99b.md`,阈值来自既有对应 validation spec,没有事后放宽。历史记忆中的 K2 升力符号问题在**当前双缓冲配置**不再出现;不能据此替旧结果重新定性。 + +### EsoPull 新发现的边界限制 + +64×32 小域、共同 spatial count=1 初态、圆柱 omega=0/.002,运行20步:x 周期时两布局分布逐值相同(力仅有原子归约舍入差);regularized/uniform/free-slip 开放边界时,首步误差出现在入口/出口(约6.8e−5),20步最大约 .0068,初期圆柱附近无差异。额外只读 CPU 检查在没有并发的情况下也产生边界输出差异。 + +源码原因:`boundary/inlet_outlet.cuh` 的 EsoPull regularized/channel/outlet 从邻居读 `load_f_esopull(...,t)` 的 next-pull 状态,双缓冲却读 spatial postcollision 供体。阶段不一致已经复现;原地核同时读取邻居多方向值还存在并发风险,但本次实验没有单独测定其贡献。这是两个实现尚未统一离散边界语义的证据,不能简单把不同公式都归为存储差别。 + +在已有 `tests/integration/test_numerical_gpu.py` 增加了周期曲壁的2项通过回归,以及开放边界的2项 **strict xfail(已知未修,不能算通过)**;root 在 GPU0 独立复跑得到 `2 passed, 2 xfailed`。后续修复应在原地推进前取同一明确阶段的供体,并统一入口、出口和自由滑移交角读取;优先考虑复用现有边界准备过程。仅换一个 load helper 不能解决读写时序。上述为修复前基线;后续实施与结果见末节。 + +### D3 支持边界的准确解释 + +当前绕过 runtime 检查、对无对象 D3Q19/SRT/双缓冲进行隔离 nvcc 编译,仍有 **18 个错误**,来自 `aux_kernels.cu` 和 `esopull_sync.cu` 的二维 `coordinates/compute_neighbors` 调用;统一入口无条件 include 这些文件,所以即使不使用 EsoPull 或对象也被阻断。原审计为20个错误;提前报错没有撤掉原本能运行的三维功能。 + +已有 D3 descriptors、局部碰撞、双缓冲主步、部分初始化和双缓冲 host 宏观诊断。缺的是完整链:对象 mask/links/sensor 仍按 nx×ny 构建(16×8×4 的 CPU 实测产生512/128长度错误);D3 EsoPull 初始化布局、墙面处理和宏观诊断未闭合;对象控制及局部补值仍偏二维。最小扩展可先做“无对象、双缓冲、明确 z 周期边界”的受限 D3,再验证均匀态、剪切波、平行板流与重启;不必以一次实现所有三维功能为前提,也没有在本轮开启这项实现。 + +### 精简后的复查与复现 + +本轮生产逻辑共去掉约37行重复;相对最初 HEAD、扣除原有用户修改后,生产代码/元数据净增约384行,主要用于已复现的恢复、所有权和配置缺陷。不能把新增测试与生产路径混算,也不能用净行数代替可读性审查。没有新增生产模块、注册器或抽象层。 + +精简后的检查:`tests/unit` 加状态/配置 GPU 回归,**141 passed,8 subtests passed**;日志 `simplification-checks.log`。经典 runner 使用作用域 context 和 TemporaryDirectory;其原本不论验收结果都返回0的行为也已修正:非 smoke 模式验收失败返回非零。利用本次已保存的真实结果重放 CLI 报告路径,验证好/坏结果分别返回0/1;这是报告层检查,没有伪称重跑物理。 + +经典运行命令(同样设置固定 PYTHONPATH 与 PYTHONDONTWRITEBYTECODE): + +```bash +CUDA_VISIBLE_DEVICES=0 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python tests/validation/run_sah04_st_matrix.py --case S2 --json-out /tmp/sah04.json --dump-npz-dir /tmp/sah04 +CUDA_VISIBLE_DEVICES=0 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python tests/validation/run_kan99b_rotating_cylinder.py --case K2 --no-k2-control --domain M --out-dir /tmp/k2-double +CUDA_VISIBLE_DEVICES=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python tests/validation/run_kan99b_rotating_cylinder.py --case K2 --no-k2-control --domain M --streaming esopull --out-dir /tmp/k2-esopull +CUDA_VISIBLE_DEVICES=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python tests/validation/run_poiseuille.py --output /tmp/poiseuille.json +``` + +上述基线中的 EsoPull 开放边界与弱力 MRT 问题已进入后续修复;最新状态见末节。任何有限案例均不能扩展成全部模型、全部入口和整个稳定性范围已通过。 + + +## 二维后续修复:MRT 精度与开放边界(2026-10-10) + +此节是最新实现状态;上方经典表格保留修复前结果。继续采用相同模型、Re/Ma、网格、采样长度与门槛。numerical 负责边界和初始化,state 负责 MRT,architecture 独立核对,root 负责公共入口、整体验证和结果整理。 + +- **EsoPull 开放边界**:原 `PrepareEsoPullWalls` 扩为 `PrepareEsoPullBoundaries`,同时读取 y 壁和 x 入口/出口的供体,仍只有原来的一次准备启动。scratch 为 `[6*nx][2*ny*nq]` 个 float;在曲壁及原地写入前暂存同阶段 spatial postcollision,首步保留初始化语义。入口/出口和 free-slip 已知方向修补均改读这份供体,移除 live-fi、t 参数和重复邻居计算。原两项 strict xfail 已改为正常断言并通过,覆盖静止/旋转圆柱、开放/周期 x 边界;额外覆盖 ny>nx、首步和后续奇偶步、实际边界头文件检查。 +- **D2 shifted MRT**:直接变换 `g=f-w`,以 `M*w=(1,-2,1,0,0,0,0,0,0)` 移除平衡矩背景。保留 LL 矩阵、固定 1.2 松弛率、shear omega、Guo 半前半后源项。旧式在 rho=1、u=F=0 单次碰撞就产生约1e−8的分布漂移;新式精确保持静止。独立 FP64 全九分量 oracle 覆盖54种弱力/密度/非平衡组合。原18项 Poiseuille 全通过,H64 MRT L2 从 .6977% 降为 .02085%,质量漂移从4.927e−4降至3.896e−7;SRT/TRT原数值不变,9对双布局剖面逐值一致。这是精度修复,不是最优 MRT 或所有参数收敛性证明。 +- **初始化与入口契约**:初始化复用 `compute_feq` 和现有同时间 EsoPull 编码,删去重复公式;shifted u=1e−9不再归零。成功重新初始化后 step_count 归0,再以0解码;不新增重复 obs 清零(既有流程已完成)。两布局各先跑3/4步后重初始化,与新实例的初态及下一步逐值一致,host/device obs与累计窗口均清零。`run` 在修改状态前拒绝负数/非整数步数及 checkpoint_interval,保留 run(0) 与整数协议。runtime 拒绝 nx<3、ny<4:否则供体越界或上下壁相邻行重合;局部算子配置仍可独立研究。 + +参考与复核:`ref/lbmpy/src/lbmpy/moment_transforms/` 的 background_distribution 变换与 `forcemodels.py::Guo` 支持背景矩、松弛和源项推导;`ref/FluidX3D/src/kernel.cpp` 的 paired EsoPull load/store 支持布局映射。边界阶段以本项目双缓冲 ghost scheme 和 `load_physical_dir_pre_streaming` 契约为准,不照搬其他库的入口模型。初始化使用同一标准二次平衡分布。两位非作者独立核对了代数/映射;没有新增生产模块、注册器或通用框架。 + +最终源码的经典长跑(仅GPU0/1): + +| 案例 | 步数 | 原门槛结果 | +|---|---:|---| +| Kan99b K2,MRT、regularized/uniform/free-slip,双缓冲 | 280000 | 五项全过 | +| 相同 K2,EsoPull | 280000 | 五项全过,修复前五项全败 | +| Sah04 S2,MRT、channel_stabilized/parabolic,双缓冲 | 120000 | St=.356690202,误差1.53436%,通过5%门槛 | +| Poiseuille,3碰撞×2布局×3网格,shifted FP32 | 18组合 | 18/18通过;保留修复前16/18结果 | + +K2 最终指标(不改升力符号、不放宽阈值): + +| 指标 | 双缓冲 | EsoPull | +|---|---:|---:| +| St | 0.169640991 | 0.169640966 | +| mean_cl | -2.57953058 | -2.57953222 | +| mean_cd | 1.146032 | 1.14603163 | +| amp_cl | 0.355069886 | 0.355078089 | +| amp_cd | 0.0989277137 | 0.0989264594 | + +Sah04 另用无目标加权的全局 FFT 主峰复算,St完全一致;St归一化沿用原spec的标称 Umax=.1,同时单独报告实际 Re。K2 两布局长期统计接近,但由于原子归约和诊断阶段,不声称所有时序/宏观字段逐位一致。 + +后续原始结果已合入 `classic-results.json::d2_followup`;长跑受力/升力时序合入 `classic-signals.npz` 的 `repaired_*` 项。原始失败数据仍保留。没有遍历所有入口/出口模式,未验证 FP16 长期稳定性、全部LES组合或高Re极限,也没有新增性能基准。修复后相对原HEAD生产/元数据为+1008/−685、净+323行(剔除用户原有生成头改动);比此前净增约384行减少约61行。测试和证据文件不计入生产行数。 + +最终整体验证:**130 unit passed、13 subtests passed;74 GPU integration/sensor passed**,无 xfail/skip。日志为已更新的 `final-unit.log`(33.12s)和 `final-gpu.log`(242.15s,物理GPU0)。root重新验证当前生产源码哈希与记录一致、git diff --check通过、原有四个配置头与实验notebook哈希未变。临时经典报告、重复CSV与整场快照已清除,仅保留上述合并结果和必要时序;没有提交或推送。 + + +## 2026-10-12 小步修复:x 周期 Poiseuille checkpoint + +依据用户指定的 [TRON 独立审查](https://drive.google.com/file/d/16VkxhdfJAmv4_4X6EkQjUldXNOdywkZu/view) 中 checkpoint 覆盖缺口;此轮仅修复该问题,不推进 Jet/AMR。起点是10月10日修复后的脏工作树,不是HEAD;本次增量见 `checkpoint-domain-2026-10-12.diff`。生产仅改 `src/CelerisLab/common/checkpoint.py`(+42/−8,净+34行),补充两份既有状态测试(unit +116/−2,GPU +39/−1)。其余既有src/tests/research文件在整理本节前逐文件哈希未变。未改DynamisLab、安装依赖、提交或推送。 + +复现:新增默认/周期域×有/无对象4个CPU用例,旧实现默认2项通过、周期2项因flags与默认channel不符而拒绝。保存读实际GPU flags;几何计算/加载却重建默认入口出口,是根因。参考 `ref/lbmpy/src/lbmpy/scenarios.py::create_channel` 区分force-driven x周期与velocity-driven入口;本项目 `merge_flag_masks` 与curved donor的domain_flags约定要求几何投影使用真实域。 + +修复:checkpoint升为v3,保存独立 `domain_flag`。从实际GPU flags去除注册对象overlay,固体覆盖下不可辨识的底域规范为FLUID;重叠加当前对象必须严格等于实际flags,且compact ownership有效,校验完成后才打开目标文件。加载以所存域重建geometry/projection,仍严格比较对象类型、角色、mask/hash及完整flags,另校验domain_flag形状/类型和规范化往返;全部在host/device恢复写入前完成。独立agent只读复核接受。 + +兼容范围:v3提供固定几何恢复,不是通用base-domain所有权系统。load之后再调用initialize(重新初始化)或sync_bodies,仍可能重建默认域;本补丁不承诺这类后续操作保留周期域。旧v1/v2仍限default-channel并按原规则严格验证,不猜测旧周期文件缺失的base-domain。隐藏underlay规范为FLUID仅是固定几何restart约定,不代表恢复或猜测被遮住的真实墙面。 + +验证:现有pycuda_3_10环境,固定 `PYTHONPATH=/home/frank14f/CelerisLab/src`、`PYTHONDONTWRITEBYTECODE=1`、`PYTEST_DISABLE_PLUGIN_AUTOLOAD=1`。单元测试 `tests/unit/test_state_regressions.py` **43 passed / 0.87s**。实际GPU测试前两次查询GPU0/1:均0%利用率、5MiB显存、无计算进程;仅使用物理GPU0。`tests/integration/test_state_gpu.py -k checkpoint` **10 passed、8 deselected / 33.41s**。新GPU案例D2Q9 MRT、FP32 shifted、16×18、nu=.1、Umax=.03(周期Poiseuille Re=4.8、Ma约.052),只推进3+4步:同实例/新实例恢复后,默认和周期域在两布局下与未中断续跑逐值相同。保留几何不匹配前写入拒绝、controls及obs恢复回归。CPU另覆盖旧版本、异常domain元数据、额外对象标记、无OBSTACLE的自定义SOLID掩码,以及保存失败不覆盖旧文件。没有重复经典长跑或宣称重新验证整个工程。 + +复现命令(仓库根目录;GPU命令前须重新确认设备空闲): + +```bash +env PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -m pytest tests/unit/test_state_regressions.py -q -p no:cacheprovider +env CUDA_VISIBLE_DEVICES=0 PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -m pytest tests/integration/test_state_gpu.py -k checkpoint -q -p no:cacheprovider +``` + +本轮验收后停在checkpoint修复,最小平壁Jet留待下一步讨论。 diff --git a/research/repair-2026-10-10/baseline-hashes.json b/research/repair-2026-10-10/baseline-hashes.json new file mode 100644 index 0000000..9b4e24c --- /dev/null +++ b/research/repair-2026-10-10/baseline-hashes.json @@ -0,0 +1,144 @@ +{ + ".cursor/rules/cuda-style.mdc": "5810cf8cff793a11ba5dedafaa8a4e7d7d3debb728d837ca1903ff6dc8d6fdb9", + ".cursor/rules/project-layout.mdc": "aeed1cd9d48447bcfcfb6a77250af7c5a3d500de4c6b2591c5684696fa04c3ec", + ".cursor/rules/python-style.mdc": "ece75cb724d7dc46cb8dab7ecf8d710a90b503001da0d506ea4bf772ce395e21", + ".cursorignore": "9f072faa815a6c6d4dc791a424201404f0f623338681ae3d2fcbdf86db1bd035", + ".gitignore": "de25151f4cfdf29ca64032e509398e1829c7ded2449ccff803b2fd87d859ae6c", + "LICENSE": "e98392425e9a0007d0d69f0f7c912c2dc1b59061a6197223962aac45599c76ea", + "README.md": "982d0df8b766b1d5017ba702b75e8b3cec8d22f57af8f434be27ea251652596c", + "docs/audit/audit_round2.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "docs/audit/body_refactor_notes.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "docs/audit/config_diagnosis.md": "b601652df0cac36a8faf2b317b11853221353716a25184cd9b2dc41373a7f183", + "docs/audit/kernel_layer_audit.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "docs/performance_analysis.md": "ba01aaa4d3c02b61a8dc55fd00518ac291ebbed79b6574190d6b7234a1158fcb", + "docs/tests_overview.md": "ffc9591fd7baa4261b2c1ce9cfa7aa13a3554a8d5df712035806266a5eaade3f", + "docs/validation_specs/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "docs/validation_specs/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "docs/validation_specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "docs/validation_specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "docs/validation_specs/exp_ctrl_matrix.md": "b7250576c23292988b6ef4bcfd080f611d41edc413c3cebd0eadcc8596049470", + "docs/validation_specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "output/round3_compatibility_summary.md": "319f2e6abde4b34cc4ec90ef461d8ebb85dd5a3ac1736cfa7a3fb110f2a69df9", + "pyproject.toml": "5d40e4737f0af7e36b23e73cee9e597db142e7ca90a94f902750fa8e67dc2577", + "setup.py": "bfba291a4cff6e421c2fb7b5701fd7955a8890368fb9d782b7440b323c7d2743", + "src/CelerisLab/__init__.py": "47cdf11387ee6a0bf66b94537723e5d76babb906841f4d5aba7aa82201e9f083", + "src/CelerisLab/body/__init__.py": "de683d712fb870a11b899f9bdb0db0460f1e38e179d05f9c751bfda902a69cd2", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/ddf_patch.py": "98a1fff54b589a1a0f24de93c465befba23240f925f28bfb92ec36c34507e173", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/manager.py": "ceab1f8ec7ced8026289bcb48078164899e080097044240827051cf069f9d22b", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/preprocess/flag_overlay.py": "87a82c94ea4a9695f483f503599d3987ce028c1dca75491b7eb5538268fa813f", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/common/__init__.py": "3ba9d3aada34502d5b0f214751c83170941a3e37cf8a884b15d5666ef0be65e3", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/checkpoint.py": "74bceedd843a215a9102254be0c41d31303fa273a286fd620a4a2ffe3d7db8a6", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/config.py": "af8006cc06fc882aa5251ed6e0cf17022ffc2401b698a5ce44fbd88ebe732fe9", + "src/CelerisLab/configs/CONFIG.md": "551b84600ecd8f1626f008fa343caf4abfad1ec37522422abbd5b4e376e9529a", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/cuda/__init__.py": "5099f1cc04f940511af76ab5bd329b246d23e69c5560915203a466c03d98e036", + "src/CelerisLab/cuda/compiler_v2.py": "3327d58d8155257f30dcc1c1f6baa326e9ae6c512f5ef35a5a746aac7fd0d399", + "src/CelerisLab/cuda/context.py": "f5c3dda74668c0f90ac0ab5f8dd652cac882d65d4c42789b19075206ef41be4f", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/lbm/__init__.py": "516ac70c821c1af854e0d1c77f081aff78b8945aa57bd7a862c0e9b40816f661", + "src/CelerisLab/lbm/curved_links.py": "65453fba581c6c93ef03c88666ad40ddac48fb06e5f196094b65e9bce5fd585b", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/field.py": "126ddf3e64e456678c6fea4a51c5c4c7daff00aac1ed60da3ff214fef1fea56d", + "src/CelerisLab/lbm/initializers.py": "2fd7d26328edb396f2cb968250992b30cf86c2c53d4f4d9c693954452253b23f", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "f5a3d5961519945131495110955ad03fcae4dcc3e9fbea02a6b176ebe10c0ec8", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "42ca4b276999a9eaf4986d3437637aa9d6e129333bd930e8d02ff37802b9e7c0", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "c9caf12a7de68fc4ffde1692055e8928df3b4a9012cf778dc9cfca805a143e90", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "9386216086ea6499e9a1d0cd8375c3f6d02b18b751eb75f531916f608bc88c61", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "337398c3a6996aa69a9aa4e56ce072e25ca8bac3bf86e90036fe80d3254b619f", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "5bcc192e2c38371d4b24b6725f75fec7d00364557c4b4536b064edf2ec9c75c5", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "c3330d33cd007575a20ce36971e5a8fc684b76fa7d877d3aa71076b2f8d25fd7", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "795f86cc28952eee34084882390b640d0641d0438f6d1ba8d60aeefa6f091051", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "b57869d4b3db6fab51da25668330729a5c5b3afb0372d495e341a0700916fe3d", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "5084f7f90bdaab9b315aba648229040056029bca41a9ad13fbd0e8c282d81e18", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "4d8b35df434f7bd907d4f60d0b1104289c6f566952af653c1a73ce222fe12f87", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "1aedad5549d0ee9e6618967e9e3a1b44a5442180758cf515f8ff1006f4385a4a", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "9bbf48e0c907dc5e0bf9e8fb653acd09f49ebed7208dd595c802d07f7439e289", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "d17a57ba7d1fac3ba55f6df82d8e5a3e02c563ac742d181b1b31478e8fc6c193", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "e094dac9e4e713abc29eac59aa0ad74e6a2a44dae4fc224629b561ae41e62065", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/stepper.py": "9f252d2dae22a2e279b6fba6013005bc51179a4954c87b54430100153ee00e66", + "src/CelerisLab/simulation.py": "7162864caceccc94709057962eea23adabed9467f31dbccab9e1fd7bb987e6fc", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/test_body_sync_e2e.py": "110b6a01f92809967f1e440c8ace3b30382fac72e9d07e7dc7b526629bd099c6", + "tests/integration/test_ddf_patch.py": "bec543c35561cf4dd64657598bf1b75cff5697f93f562a00e866de57d6c1817b", + "tests/integration/test_sync_bodies_skeleton.py": "b7b61b52ec411347389dcd8c75b8015a06aeb3caca1df2638a6436a3a1be3d1a", + "tests/integration/test_unified_obs.py": "ed27d4f4bdae432c88e90850fa15f8ba4a414ff3595beef647b9a81654047468", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/validation/run_kan99b_rotating_cylinder.py": "0b3591ec17f80e18642fb8bd9f975435410769a071a95667c8a94ff2b4961e5c", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_sah04_st_matrix.py": "6c995625d34b9bf642f7be32d5ecccfc7bf1f07b632192e7c80520d938e4a5fd", + "tests/validation/test_sensor_accuracy.py": "8e091a6a80621ee9d722d0f161389548d55faead1f2b8142f5fc46b26c786ff9" +} diff --git a/research/repair-2026-10-10/baseline-status.txt b/research/repair-2026-10-10/baseline-status.txt new file mode 100644 index 0000000..515be24 --- /dev/null +++ b/research/repair-2026-10-10/baseline-status.txt @@ -0,0 +1,10 @@ + M src/CelerisLab/lbm/kernels/config/config_grid.h + M src/CelerisLab/lbm/kernels/config/config_method.h + M src/CelerisLab/lbm/kernels/config/config_objects.h + M src/CelerisLab/lbm/kernels/config/config_physics.h + M tests/postproc/experiment.ipynb +?? docs/design/ +?? docs/multilevel_grid_architecture_analysis.md +?? research/ +?? "tests/audit/body\345\210\240\345\207\217\345\212\237\350\203\275.md" +?? tests/validation/multigrid/ diff --git a/research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff b/research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff new file mode 100644 index 0000000..035ed63 --- /dev/null +++ b/research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff @@ -0,0 +1,308 @@ +--- a/src/CelerisLab/common/checkpoint.py ++++ b/src/CelerisLab/common/checkpoint.py +@@ -21,8 +21,10 @@ + import numpy as np + import pycuda.driver as cuda + ++from ..lbm.descriptors import FLUID, SOLID, OBSTACLE, SENSOR_FLAG, FRC_REGION ++ + # File format version — bump on incompatible layout changes. +-CKPT_VERSION = 2 ++CKPT_VERSION = 3 + _SUPPORTED_STORE_PRECISIONS = ("FP32", "FP16S") + + +@@ -35,10 +37,25 @@ + ) + + +-def _geometry_records(field, bodies): ++def _domain_flags(field, bodies, flags): ++ """Keep actual domain boundaries, removing only registered object overlays. ++ ++ A solid object's hidden underlay is unknowable from merged flags: use FLUID ++ there canonically. This base is for fixed-geometry restart, not body removal. ++ """ ++ base = flags & np.uint16(0xffff ^ (SENSOR_FLAG | FRC_REGION)) ++ for obj in bodies.objects: ++ mask = obj.get_flag_mask(field.nx, field.ny, field.nz) ++ base[(mask & SOLID) != 0] = FLUID ++ if np.any(base & OBSTACLE): ++ raise ValueError("Checkpoint flags contain an unregistered obstacle") ++ return base ++ ++ ++def _geometry_records(field, bodies, base_flags=None): + """Describe actual geometry/projection, not just the number of objects.""" + records = [] +- flags = bodies.build_flags(field.build_channel_flags()) ++ flags = bodies.build_flags(field.build_channel_flags() if base_flags is None else base_flags) + for obj in bodies.objects: + digest = hashlib.sha256() + digest.update(obj.get_flag_mask(field.nx, field.ny, field.nz).tobytes()) +@@ -108,6 +125,11 @@ + cuda.memcpy_dtoh(tmp_buf, field.temp_gpu) + flag_buf = np.empty(field.n, dtype=np.uint16) + cuda.memcpy_dtoh(flag_buf, field.flag_gpu) ++ domain_flags = _domain_flags(field, bodies, flag_buf) ++ geometry, expected_flags = _geometry_records(field, bodies, domain_flags) ++ if not np.array_equal(flag_buf, expected_flags): ++ raise ValueError("Checkpoint flags do not match current object/domain geometry") ++ bodies.build_compact_lists_for(bodies.objects, domain_flags=expected_flags) + + with h5py.File(path, "w") as hf: + # Version and metadata +@@ -130,8 +152,9 @@ + compression_opts=4) + hf.create_dataset("flag", data=flag_buf, compression="gzip", + compression_opts=4) +- +- geometry, _ = _geometry_records(field, bodies) ++ hf.create_dataset("domain_flag", data=domain_flags, compression="gzip", ++ compression_opts=4) ++ + hf.attrs["geometry_json"] = json.dumps(geometry) + hf.attrs["runtime_params_json"] = json.dumps(field._runtime_params) + hf.attrs["obs_accum_steps"] = bodies._obs_accum_steps +@@ -167,6 +190,8 @@ + The current config's lattice_model, nx, ny, nz, and + store_precision must match the checkpoint. Other parameters + (collision, LES, …) may differ for parameter-study restarts. ++ v3 restores the saved domain boundaries; v1/v2 retain their default-channel ++ validation. Object geometry and roles must match in every version. + + Args: + path: HDF5 checkpoint file path. +@@ -181,7 +206,7 @@ + with h5py.File(path, "r") as hf: + # Version check + ver = hf.attrs.get("ckpt_version", 0) +- if ver not in (1, CKPT_VERSION): ++ if ver not in (1, 2, CKPT_VERSION): + raise ValueError( + f"Checkpoint version mismatch: file={ver}, " + f"expected={CKPT_VERSION}. " +@@ -218,7 +243,14 @@ + if (len(obj_data) != bodies.count + or [od.get("obj_id") for od in obj_data] != list(range(bodies.count))): + raise ValueError("Checkpoint object IDs must match the dense current registry") +- geometry, expected_flags = _geometry_records(field, bodies) ++ domain_flags = None ++ if ver >= 3: ++ if "domain_flag" not in hf: ++ raise ValueError("Checkpoint is missing domain_flag") ++ domain_flags = hf["domain_flag"][:] ++ if domain_flags.shape != (field.n,) or domain_flags.dtype != np.uint16: ++ raise ValueError("Invalid checkpoint domain_flag shape/dtype") ++ geometry, expected_flags = _geometry_records(field, bodies, domain_flags) + if ver == 1: + _validate_legacy_objects(obj_data, bodies) + elif json.loads(hf.attrs["geometry_json"]) != geometry: +@@ -236,7 +268,9 @@ + if array.shape != shape or array.dtype != expected_dtype: + raise ValueError(f"Invalid checkpoint {name} shape/dtype") + if not np.array_equal(flag_buf, expected_flags): +- raise ValueError("Checkpoint flags do not match current object/channel geometry") ++ raise ValueError("Checkpoint flags do not match current object/domain geometry") ++ if ver >= 3 and not np.array_equal(domain_flags, _domain_flags(field, bodies, flag_buf)): ++ raise ValueError("Checkpoint domain_flag is not a canonical object-free domain") + restored_step = int(hf.attrs["step_count"]) + if restored_step < 0: + raise ValueError("Checkpoint step_count must be nonnegative") +--- a/tests/unit/test_state_regressions.py ++++ b/tests/unit/test_state_regressions.py +@@ -18,7 +18,7 @@ + from CelerisLab.body.ddf_patch import patch_ddf_for_body_sync, upload_patched_ddf + from CelerisLab.common.checkpoint import save_checkpoint, load_checkpoint + from CelerisLab.lbm.field import LBMField +-from CelerisLab.lbm.descriptors import FLUID, SOLID, SENSOR_FLAG, FRC_REGION ++from CelerisLab.lbm.descriptors import FLUID, SOLID, OBSTACLE, SENSOR_FLAG, FRC_REGION + from CelerisLab.lbm.equilibrium import compute_feq_d2q9 + + W = np.array([4/9] + [1/9]*4 + [1/36]*4, dtype=np.float32) +@@ -306,11 +306,42 @@ + assert field._runtime_params['fx'] == .0002 + + ++@pytest.mark.parametrize("periodic_x", [False, True]) ++@pytest.mark.parametrize("with_objects", [False, True]) ++def test_checkpoint_restores_actual_domain(device, tmp_path, periodic_x, with_objects): ++ source = make_field(device) ++ objects = [obj(x=2, r=1), obj(x=10, r=2, is_sensor=True)] if with_objects else [] ++ bodies = manager(source, objects) ++ base = source.build_channel_flags() ++ if periodic_x: ++ base.reshape(source.ny, source.nx)[1:-1, [0, -1]] = FLUID ++ source.flag = bodies.build_flags(base) ++ source.upload_flags() ++ bodies.sync_to_gpu(source, rebuild_flags=False) ++ saved_flags = source.flag.copy() ++ # The device, not a possibly stale host mirror, is authoritative at save. ++ source.flag = source.build_channel_flags() ++ path = save_checkpoint(source, SimpleNamespace(step_count=3), source.cfg, ++ bodies, str(tmp_path / 'domain.h5')) ++ target = make_field(device) ++ target_bodies = manager(target, objects) ++ stepper = SimpleNamespace(_step_count=0) ++ load_checkpoint(path, target, stepper, target.cfg, target_bodies) ++ assert stepper._step_count == 3 ++ np.testing.assert_array_equal(target.flag, saved_flags) ++ np.testing.assert_array_equal(np.frombuffer(target.flag_gpu.data, np.uint16), saved_flags) ++ assert target.ddf_gpu.data == source.ddf_gpu.data ++ ++ ++@pytest.mark.parametrize("periodic_x", [False, True]) + @pytest.mark.parametrize("change", ["geometry", "role", "ddf_shape"]) +-def test_checkpoint_rejects_before_device_writes(device,tmp_path,change): ++def test_checkpoint_rejects_before_device_writes(device,tmp_path,change,periodic_x): + field = make_field(device) + bodies = manager(field,[obj()]) + bodies.sync_to_gpu(field) ++ if periodic_x: ++ field.flag.reshape(field.ny, field.nx)[1:-1, [0, -1]] = FLUID ++ field.upload_flags() + path = save_checkpoint(field,SimpleNamespace(step_count=3),field.cfg,bodies,str(tmp_path/'state.h5')) + if change == 'geometry': + bodies.get(0).geometry = CircleGeometry(6,5,2) +@@ -335,6 +366,89 @@ + field.cfg.validate() + load_checkpoint(path,field,SimpleNamespace(_step_count=0),field.cfg,bodies) + assert field._runtime_params['omega'] == field.cfg.omega ++ ++ ++@pytest.mark.parametrize('version', [1, 2]) ++def test_legacy_checkpoint_default_domain(device, tmp_path, version): ++ field = make_field(device) ++ bodies = manager(field, [obj()]) ++ bodies.sync_to_gpu(field) ++ path = save_checkpoint(field, SimpleNamespace(step_count=3), field.cfg, ++ bodies, str(tmp_path / 'legacy-domain.h5')) ++ with h5py.File(path, 'a') as hf: ++ hf.attrs['ckpt_version'] = version ++ del hf['domain_flag'] ++ load_checkpoint(path, field, SimpleNamespace(_step_count=0), field.cfg, bodies) ++ # Legacy files have no authoritative base-domain record. Keep their check. ++ with h5py.File(path, 'a') as hf: ++ hf['flag'][field.nx] = FLUID ++ writes = device.writes ++ with pytest.raises(ValueError, match='geometry'): ++ load_checkpoint(path, field, SimpleNamespace(_step_count=0), field.cfg, bodies) ++ assert device.writes == writes ++ ++ ++@pytest.mark.parametrize('damage', ['missing', 'shape', 'dtype', 'boundary', 'hidden', 'annotation']) ++def test_checkpoint_rejects_invalid_domain_before_writes(device, tmp_path, damage): ++ field = make_field(device) ++ bodies = manager(field, [obj()]) ++ bodies.sync_to_gpu(field) ++ path = save_checkpoint(field, SimpleNamespace(step_count=3), field.cfg, ++ bodies, str(tmp_path / 'invalid-domain.h5')) ++ with h5py.File(path, 'a') as hf: ++ if damage in ('missing', 'shape', 'dtype'): ++ del hf['domain_flag'] ++ if damage != 'missing': ++ hf.create_dataset('domain_flag', data=np.ones( ++ 2 if damage == 'shape' else field.n, ++ dtype=np.uint16 if damage == 'shape' else np.float32)) ++ elif damage == 'boundary': ++ hf['domain_flag'][field.nx] = FLUID ++ elif damage == 'hidden': ++ hf['domain_flag'][5 + 5 * field.nx] = SOLID ++ else: ++ # Mutate both records: overlay idempotence alone would accept this. ++ for name in ('domain_flag', 'flag'): ++ hf[name][field.nx + 1] = FLUID | SENSOR_FLAG ++ before = bytes(field.ddf_gpu.data), field.flag.copy() ++ writes = device.writes ++ with pytest.raises(ValueError): ++ load_checkpoint(path, field, SimpleNamespace(_step_count=0), field.cfg, bodies) ++ assert device.writes == writes ++ assert bytes(field.ddf_gpu.data) == before[0] ++ np.testing.assert_array_equal(field.flag, before[1]) ++ ++ ++@pytest.mark.parametrize('extra', [OBSTACLE | SOLID, SENSOR_FLAG, FRC_REGION]) ++def test_checkpoint_save_rejects_unregistered_overlay(device, tmp_path, extra): ++ field = make_field(device) ++ bodies = manager(field) ++ field.flag[field.nx + 1] |= extra ++ field.upload_flags() ++ path = tmp_path / 'unchanged.h5' ++ path.write_bytes(b'existing checkpoint') ++ with pytest.raises(ValueError): ++ save_checkpoint(field, SimpleNamespace(step_count=0), field.cfg, bodies, str(path)) ++ assert path.read_bytes() == b'existing checkpoint' ++ ++ ++def test_checkpoint_domain_handles_plain_solid_mask(device, tmp_path): ++ class PlainSolidCircle(CircleGeometry): ++ def build_flag_mask(self, nx, ny): ++ mask = super().build_flag_mask(nx, ny) ++ mask[(mask & SOLID) != 0] = SOLID ++ return mask ++ ++ field = make_field(device) ++ body = obj() ++ body.geometry = PlainSolidCircle(5, 5, 2) ++ bodies = manager(field, [body]) ++ bodies.sync_to_gpu(field) ++ path = save_checkpoint(field, SimpleNamespace(step_count=3), field.cfg, ++ bodies, str(tmp_path / 'plain-solid.h5')) ++ with h5py.File(path) as hf: ++ assert hf['domain_flag'][5 + 5 * field.nx] == FLUID ++ load_checkpoint(path, field, SimpleNamespace(_step_count=0), field.cfg, bodies) + + + @pytest.mark.parametrize("kind",['circle','sensor','force_region']) +--- a/tests/integration/test_state_gpu.py ++++ b/tests/integration/test_state_gpu.py +@@ -91,10 +91,48 @@ + np.testing.assert_array_equal(sim.get_ddf(),expected) + + +-def test_checkpoint_geometry_mismatch_leaves_device_unchanged(tmp_path): ++@pytest.mark.parametrize('streaming', ['double_buffer', 'esopull']) ++@pytest.mark.parametrize('periodic_x', [False, True]) ++def test_checkpoint_domain_exact_continuation(streaming, periodic_x, tmp_path): ++ # Same low-Mach forced channel as the Poiseuille runner, bounded to 7 steps. ++ kwargs = dict(nx=16, ny=18, streaming=streaming, collision='MRT', ++ shifted=True, viscosity=.1, velocity=0.) ++ with make_sim(**kwargs) as source: ++ source.initialize() ++ if periodic_x: ++ source.field.flag.reshape(18, 16)[1:-1, [0, -1]] = FLUID ++ source.field.upload_flags() ++ source.update_runtime_params(fx=8 * .1 * .03 / 16**2) ++ source.run(3) ++ flags = source.get_flags().copy() ++ saved = source.get_ddf().copy() ++ path = source.save_checkpoint(str(tmp_path / 'domain.h5')) ++ source.run(4) ++ expected = source.get_ddf().copy() ++ # Restore into this instance and also a fresh default-domain instance. ++ source.load_checkpoint(path) ++ np.testing.assert_array_equal(source.get_flags(), flags) ++ np.testing.assert_array_equal(source.get_ddf(), saved) ++ source.run(4) ++ np.testing.assert_array_equal(source.get_ddf(), expected) ++ with make_sim(**kwargs) as target: ++ target.initialize() ++ target.load_checkpoint(path) ++ assert target.stepper.step_count == 3 ++ np.testing.assert_array_equal(target.get_flags(), flags) ++ np.testing.assert_array_equal(target.get_ddf(), saved) ++ target.run(4) ++ np.testing.assert_array_equal(target.get_ddf(), expected) ++ ++ ++@pytest.mark.parametrize('periodic_x', [False, True]) ++def test_checkpoint_geometry_mismatch_leaves_device_unchanged(tmp_path, periodic_x): + with make_sim(nx=48,ny=24) as source: + source.add_body('circle',center=(14,12),radius=3) + source.initialize() ++ if periodic_x: ++ source.field.flag.reshape(24, 48)[1:-1, [0, -1]] = FLUID ++ source.field.upload_flags() + source.run(2) + path = source.save_checkpoint(str(tmp_path/'geometry.h5')) + with make_sim(nx=48,ny=24) as target: diff --git a/research/repair-2026-10-10/classic-results.json b/research/repair-2026-10-10/classic-results.json new file mode 100644 index 0000000..7297aa0 --- /dev/null +++ b/research/repair-2026-10-10/classic-results.json @@ -0,0 +1,8169 @@ +{ + "source": "/home/frank14f/CelerisLab/src/CelerisLab/__init__.py", + "python": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "physical_gpus": [ + 0, + 1 + ], + "poiseuille": { + "package": "/home/frank14f/CelerisLab/src/CelerisLab/__init__.py", + "cuda_visible_devices": "1", + "device_id": 0, + "reference": "ref/lbmpy/tests/poiseuille.py", + "results": [ + { + "height": 16, + "collision": "SRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.03, + "force_density": 9.375e-05, + "re": 4.8, + "ma": 0.05196152422706631, + "steps": 2730, + "diffusion_times": 10.525007818349199, + "relative_l2": 0.002799706487109596, + "relative_l2_limit": 0.01, + "mass_drift": 7.518664801864361e-09, + "max_transverse": 2.3719621681755437e-09, + "steady_residual": 1.0459841868160935e-05, + "profile": [ + 0.003571814197816471, + 0.010134196507667972, + 0.01575908574030793, + 0.0204464893770341, + 0.02419640663418603, + 0.027008831688127805, + 0.028883776006727615, + 0.029821241151624957, + 0.029821240447057643, + 0.028883776022279244, + 0.027008810424881086, + 0.024196375462344082, + 0.020446462260000253, + 0.015759069673445703, + 0.010134192200503872, + 0.0035718146052010624 + ], + "analytic_profile": [ + 0.0036328124999999998, + 0.0101953125, + 0.0158203125, + 0.0205078125, + 0.0242578125, + 0.027070312500000002, + 0.028945312499999997, + 0.029882812499999998, + 0.029882812499999998, + 0.028945312499999997, + 0.027070312500000002, + 0.0242578125, + 0.0205078125, + 0.0158203125, + 0.0101953125, + 0.0036328124999999998 + ], + "history": [ + { + "step": 130, + "residual": 0.2878048051460747 + }, + { + "step": 260, + "residual": 0.17426911343159265 + }, + { + "step": 390, + "residual": 0.10546468355080464 + }, + { + "step": 520, + "residual": 0.0638257552082222 + }, + { + "step": 650, + "residual": 0.03862647258755094 + }, + { + "step": 780, + "residual": 0.02337579189520886 + }, + { + "step": 910, + "residual": 0.014146746973263583 + }, + { + "step": 1040, + "residual": 0.008561426329841505 + }, + { + "step": 1170, + "residual": 0.005181206406086535 + }, + { + "step": 1300, + "residual": 0.0031354726542277556 + }, + { + "step": 1430, + "residual": 0.0018978198183278294 + }, + { + "step": 1560, + "residual": 0.0011479873886740162 + }, + { + "step": 1690, + "residual": 0.0006951450610510553 + }, + { + "step": 1820, + "residual": 0.000420588397959876 + }, + { + "step": 1950, + "residual": 0.00025450450793119793 + }, + { + "step": 2080, + "residual": 0.00015415564231798868 + }, + { + "step": 2210, + "residual": 9.284097481750565e-05 + }, + { + "step": 2340, + "residual": 5.692826586926697e-05 + }, + { + "step": 2470, + "residual": 3.45996659683643e-05 + }, + { + "step": 2600, + "residual": 2.0726190618412637e-05 + }, + { + "step": 2730, + "residual": 1.0459841868160935e-05 + } + ], + "seconds": 2.2073914560023695, + "passed": true + }, + { + "height": 16, + "collision": "SRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.03, + "force_density": 9.375e-05, + "re": 4.8, + "ma": 0.05196152422706631, + "steps": 2730, + "diffusion_times": 10.525007818349199, + "relative_l2": 0.002799706487109596, + "relative_l2_limit": 0.01, + "mass_drift": 7.518664801864361e-09, + "max_transverse": 2.3719621681755437e-09, + "steady_residual": 1.0459841868160935e-05, + "profile": [ + 0.003571814197816471, + 0.010134196507667972, + 0.01575908574030793, + 0.0204464893770341, + 0.02419640663418603, + 0.027008831688127805, + 0.028883776006727615, + 0.029821241151624957, + 0.029821240447057643, + 0.028883776022279244, + 0.027008810424881086, + 0.024196375462344082, + 0.020446462260000253, + 0.015759069673445703, + 0.010134192200503872, + 0.0035718146052010624 + ], + "analytic_profile": [ + 0.0036328124999999998, + 0.0101953125, + 0.0158203125, + 0.0205078125, + 0.0242578125, + 0.027070312500000002, + 0.028945312499999997, + 0.029882812499999998, + 0.029882812499999998, + 0.028945312499999997, + 0.027070312500000002, + 0.0242578125, + 0.0205078125, + 0.0158203125, + 0.0101953125, + 0.0036328124999999998 + ], + "history": [ + { + "step": 130, + "residual": 0.2878048051460747 + }, + { + "step": 260, + "residual": 0.17426911343159265 + }, + { + "step": 390, + "residual": 0.10546468355080464 + }, + { + "step": 520, + "residual": 0.0638257552082222 + }, + { + "step": 650, + "residual": 0.03862647258755094 + }, + { + "step": 780, + "residual": 0.02337579189520886 + }, + { + "step": 910, + "residual": 0.014146746973263583 + }, + { + "step": 1040, + "residual": 0.008561426329841505 + }, + { + "step": 1170, + "residual": 0.005181206406086535 + }, + { + "step": 1300, + "residual": 0.0031354726542277556 + }, + { + "step": 1430, + "residual": 0.0018978198183278294 + }, + { + "step": 1560, + "residual": 0.0011479873886740162 + }, + { + "step": 1690, + "residual": 0.0006951450610510553 + }, + { + "step": 1820, + "residual": 0.000420588397959876 + }, + { + "step": 1950, + "residual": 0.00025450450793119793 + }, + { + "step": 2080, + "residual": 0.00015415564231798868 + }, + { + "step": 2210, + "residual": 9.284097481750565e-05 + }, + { + "step": 2340, + "residual": 5.692826586926697e-05 + }, + { + "step": 2470, + "residual": 3.45996659683643e-05 + }, + { + "step": 2600, + "residual": 2.0726190618412637e-05 + }, + { + "step": 2730, + "residual": 1.0459841868160935e-05 + } + ], + "seconds": 1.242776852013776, + "passed": true + }, + { + "height": 16, + "collision": "TRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.03, + "force_density": 9.375e-05, + "re": 4.8, + "ma": 0.05196152422706631, + "steps": 2730, + "diffusion_times": 10.525007818349199, + "relative_l2": 2.875694805205679e-05, + "relative_l2_limit": 0.01, + "mass_drift": 7.420819514436516e-09, + "max_transverse": 1.084117676869864e-09, + "steady_residual": 1.2681079490640334e-05, + "profile": [ + 0.0036327292869031253, + 0.010195065194117968, + 0.015819909740837912, + 0.02050726353650097, + 0.02425712885273835, + 0.02706952030993295, + 0.0289444538491265, + 0.029881915629718234, + 0.02988191653190658, + 0.02894445106274034, + 0.027069517285498088, + 0.024257126175185967, + 0.020507261905492798, + 0.015819909733010774, + 0.010195063214213727, + 0.0036327280201631515 + ], + "analytic_profile": [ + 0.0036328124999999998, + 0.0101953125, + 0.0158203125, + 0.0205078125, + 0.0242578125, + 0.027070312500000002, + 0.028945312499999997, + 0.029882812499999998, + 0.029882812499999998, + 0.028945312499999997, + 0.027070312500000002, + 0.0242578125, + 0.0205078125, + 0.0158203125, + 0.0101953125, + 0.0036328124999999998 + ], + "history": [ + { + "step": 130, + "residual": 0.28803331094539764 + }, + { + "step": 260, + "residual": 0.17458926764096636 + }, + { + "step": 390, + "residual": 0.10579198284708476 + }, + { + "step": 520, + "residual": 0.06410324904334079 + }, + { + "step": 650, + "residual": 0.038841975760865545 + }, + { + "step": 780, + "residual": 0.023536018048343172 + }, + { + "step": 910, + "residual": 0.014261300601718992 + }, + { + "step": 1040, + "residual": 0.008641509609715813 + }, + { + "step": 1170, + "residual": 0.005236298518065204 + }, + { + "step": 1300, + "residual": 0.003172516591692521 + }, + { + "step": 1430, + "residual": 0.0019224324623150367 + }, + { + "step": 1560, + "residual": 0.001164991197850531 + }, + { + "step": 1690, + "residual": 0.0007059060669633253 + }, + { + "step": 1820, + "residual": 0.00042800647985940594 + }, + { + "step": 1950, + "residual": 0.0002590335488094803 + }, + { + "step": 2080, + "residual": 0.00015695074553266755 + }, + { + "step": 2210, + "residual": 9.5181478420129e-05 + }, + { + "step": 2340, + "residual": 5.75357744042225e-05 + }, + { + "step": 2470, + "residual": 3.5062464529560005e-05 + }, + { + "step": 2600, + "residual": 2.1292411441451214e-05 + }, + { + "step": 2730, + "residual": 1.2681079490640334e-05 + } + ], + "seconds": 1.6219800469989423, + "passed": true + }, + { + "height": 16, + "collision": "TRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.03, + "force_density": 9.375e-05, + "re": 4.8, + "ma": 0.05196152422706631, + "steps": 2730, + "diffusion_times": 10.525007818349199, + "relative_l2": 2.875694805205679e-05, + "relative_l2_limit": 0.01, + "mass_drift": 7.420819514436516e-09, + "max_transverse": 1.084117676869864e-09, + "steady_residual": 1.2681079490640334e-05, + "profile": [ + 0.0036327292869031253, + 0.010195065194117968, + 0.015819909740837912, + 0.02050726353650097, + 0.02425712885273835, + 0.02706952030993295, + 0.0289444538491265, + 0.029881915629718234, + 0.02988191653190658, + 0.02894445106274034, + 0.027069517285498088, + 0.024257126175185967, + 0.020507261905492798, + 0.015819909733010774, + 0.010195063214213727, + 0.0036327280201631515 + ], + "analytic_profile": [ + 0.0036328124999999998, + 0.0101953125, + 0.0158203125, + 0.0205078125, + 0.0242578125, + 0.027070312500000002, + 0.028945312499999997, + 0.029882812499999998, + 0.029882812499999998, + 0.028945312499999997, + 0.027070312500000002, + 0.0242578125, + 0.0205078125, + 0.0158203125, + 0.0101953125, + 0.0036328124999999998 + ], + "history": [ + { + "step": 130, + "residual": 0.28803331094539764 + }, + { + "step": 260, + "residual": 0.17458926764096636 + }, + { + "step": 390, + "residual": 0.10579198284708476 + }, + { + "step": 520, + "residual": 0.06410324904334079 + }, + { + "step": 650, + "residual": 0.038841975760865545 + }, + { + "step": 780, + "residual": 0.023536018048343172 + }, + { + "step": 910, + "residual": 0.014261300601718992 + }, + { + "step": 1040, + "residual": 0.008641509609715813 + }, + { + "step": 1170, + "residual": 0.005236298518065204 + }, + { + "step": 1300, + "residual": 0.003172516591692521 + }, + { + "step": 1430, + "residual": 0.0019224324623150367 + }, + { + "step": 1560, + "residual": 0.001164991197850531 + }, + { + "step": 1690, + "residual": 0.0007059060669633253 + }, + { + "step": 1820, + "residual": 0.00042800647985940594 + }, + { + "step": 1950, + "residual": 0.0002590335488094803 + }, + { + "step": 2080, + "residual": 0.00015695074553266755 + }, + { + "step": 2210, + "residual": 9.5181478420129e-05 + }, + { + "step": 2340, + "residual": 5.75357744042225e-05 + }, + { + "step": 2470, + "residual": 3.5062464529560005e-05 + }, + { + "step": 2600, + "residual": 2.1292411441451214e-05 + }, + { + "step": 2730, + "residual": 1.2681079490640334e-05 + } + ], + "seconds": 1.392930141009856, + "passed": true + }, + { + "height": 16, + "collision": "MRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.03, + "force_density": 9.375e-05, + "re": 4.8, + "ma": 0.05196152422706631, + "steps": 2730, + "diffusion_times": 10.525007818349199, + "relative_l2": 0.002526712781666438, + "relative_l2_limit": 0.01, + "mass_drift": 1.2185308150947094e-05, + "max_transverse": 1.9371746182276799e-07, + "steady_residual": 1.4832550283659448e-05, + "profile": [ + 0.0035780528552891875, + 0.01014040176104183, + 0.015765193096672587, + 0.02045253127338975, + 0.024202367062736797, + 0.027014659744538885, + 0.028889500130265654, + 0.029826908035845322, + 0.029826907649917023, + 0.02888951261848497, + 0.027014683808261265, + 0.024202378794059655, + 0.020452523902960287, + 0.01576520421394936, + 0.010140420689936333, + 0.003578050372801255 + ], + "analytic_profile": [ + 0.0036328124999999998, + 0.0101953125, + 0.0158203125, + 0.0205078125, + 0.0242578125, + 0.027070312500000002, + 0.028945312499999997, + 0.029882812499999998, + 0.029882812499999998, + 0.028945312499999997, + 0.027070312500000002, + 0.0242578125, + 0.0205078125, + 0.0158203125, + 0.0101953125, + 0.0036328124999999998 + ], + "history": [ + { + "step": 130, + "residual": 0.2878274568509754 + }, + { + "step": 260, + "residual": 0.17430094853027248 + }, + { + "step": 390, + "residual": 0.10549723726563646 + }, + { + "step": 520, + "residual": 0.06385341123349692 + }, + { + "step": 650, + "residual": 0.038647594730515135 + }, + { + "step": 780, + "residual": 0.02339343844330326 + }, + { + "step": 910, + "residual": 0.014155792900301388 + }, + { + "step": 1040, + "residual": 0.008570020178349314 + }, + { + "step": 1170, + "residual": 0.0051876086867783935 + }, + { + "step": 1300, + "residual": 0.0031326845703116063 + }, + { + "step": 1430, + "residual": 0.001911752374054842 + }, + { + "step": 1560, + "residual": 0.001139642225368878 + }, + { + "step": 1690, + "residual": 0.0006888064461179861 + }, + { + "step": 1820, + "residual": 0.0004179079551393827 + }, + { + "step": 1950, + "residual": 0.0002544581680328784 + }, + { + "step": 2080, + "residual": 0.00015565859043961742 + }, + { + "step": 2210, + "residual": 9.504001999825456e-05 + }, + { + "step": 2340, + "residual": 5.845981441274591e-05 + }, + { + "step": 2470, + "residual": 3.587192610644525e-05 + }, + { + "step": 2600, + "residual": 2.2131541266893816e-05 + }, + { + "step": 2730, + "residual": 1.4832550283659448e-05 + } + ], + "seconds": 1.621353201015154, + "passed": true + }, + { + "height": 16, + "collision": "MRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.03, + "force_density": 9.375e-05, + "re": 4.8, + "ma": 0.05196152422706631, + "steps": 2730, + "diffusion_times": 10.525007818349199, + "relative_l2": 0.002526712781666438, + "relative_l2_limit": 0.01, + "mass_drift": 1.2185308150947094e-05, + "max_transverse": 1.9371746182276799e-07, + "steady_residual": 1.4832550283659448e-05, + "profile": [ + 0.0035780528552891875, + 0.01014040176104183, + 0.015765193096672587, + 0.02045253127338975, + 0.024202367062736797, + 0.027014659744538885, + 0.028889500130265654, + 0.029826908035845322, + 0.029826907649917023, + 0.02888951261848497, + 0.027014683808261265, + 0.024202378794059655, + 0.020452523902960287, + 0.01576520421394936, + 0.010140420689936333, + 0.003578050372801255 + ], + "analytic_profile": [ + 0.0036328124999999998, + 0.0101953125, + 0.0158203125, + 0.0205078125, + 0.0242578125, + 0.027070312500000002, + 0.028945312499999997, + 0.029882812499999998, + 0.029882812499999998, + 0.028945312499999997, + 0.027070312500000002, + 0.0242578125, + 0.0205078125, + 0.0158203125, + 0.0101953125, + 0.0036328124999999998 + ], + "history": [ + { + "step": 130, + "residual": 0.2878274568509754 + }, + { + "step": 260, + "residual": 0.17430094853027248 + }, + { + "step": 390, + "residual": 0.10549723726563646 + }, + { + "step": 520, + "residual": 0.06385341123349692 + }, + { + "step": 650, + "residual": 0.038647594730515135 + }, + { + "step": 780, + "residual": 0.02339343844330326 + }, + { + "step": 910, + "residual": 0.014155792900301388 + }, + { + "step": 1040, + "residual": 0.008570020178349314 + }, + { + "step": 1170, + "residual": 0.0051876086867783935 + }, + { + "step": 1300, + "residual": 0.0031326845703116063 + }, + { + "step": 1430, + "residual": 0.001911752374054842 + }, + { + "step": 1560, + "residual": 0.001139642225368878 + }, + { + "step": 1690, + "residual": 0.0006888064461179861 + }, + { + "step": 1820, + "residual": 0.0004179079551393827 + }, + { + "step": 1950, + "residual": 0.0002544581680328784 + }, + { + "step": 2080, + "residual": 0.00015565859043961742 + }, + { + "step": 2210, + "residual": 9.504001999825456e-05 + }, + { + "step": 2340, + "residual": 5.845981441274591e-05 + }, + { + "step": 2470, + "residual": 3.587192610644525e-05 + }, + { + "step": 2600, + "residual": 2.2131541266893816e-05 + }, + { + "step": 2730, + "residual": 1.4832550283659448e-05 + } + ], + "seconds": 1.7467889889958315, + "passed": true + }, + { + "height": 32, + "collision": "SRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.015, + "force_density": 1.171875e-05, + "re": 4.8, + "ma": 0.025980762113533156, + "steps": 10380, + "diffusion_times": 10.004540398760502, + "relative_l2": 0.000780149256765261, + "relative_l2_limit": 0.003, + "mass_drift": 7.4411876660462895e-09, + "max_transverse": 2.5956978591474787e-09, + "steady_residual": 1.0903528878604553e-05, + "profile": [ + 0.0009151653227246929, + 0.002672840454473577, + 0.004313328662562868, + 0.005836630675806899, + 0.00724274733476979, + 0.008531676814872834, + 0.00970342950090171, + 0.010758010105952613, + 0.011695411362451395, + 0.012515642507239085, + 0.01321869105437823, + 0.013804564654676162, + 0.014273260305773883, + 0.014624780562041662, + 0.014859127032782951, + 0.01497630348377952, + 0.01497629954489127, + 0.014859119817844029, + 0.014624763329115857, + 0.01427324296882229, + 0.01380455044623163, + 0.013218683020086046, + 0.012515639494942565, + 0.011695417121095397, + 0.01075801447240774, + 0.009703436894042386, + 0.008531676927936044, + 0.007242740347050959, + 0.005836623080073482, + 0.004313323074242032, + 0.0026728374564815773, + 0.0009151645732213808 + ], + "analytic_profile": [ + 0.0009228515625, + 0.0026806640625, + 0.0043212890625, + 0.0058447265625, + 0.007250976562499999, + 0.0085400390625, + 0.0097119140625, + 0.0107666015625, + 0.011704101562500001, + 0.0125244140625, + 0.0132275390625, + 0.0138134765625, + 0.014282226562499998, + 0.0146337890625, + 0.014868164062500001, + 0.014985351562499999, + 0.014985351562499999, + 0.0148681640625, + 0.0146337890625, + 0.0142822265625, + 0.013813476562499998, + 0.0132275390625, + 0.012524414062500001, + 0.011704101562500001, + 0.0107666015625, + 0.009711914062499999, + 0.0085400390625, + 0.0072509765625, + 0.0058447265625, + 0.0043212890625, + 0.0026806640624999997, + 0.0009228515625 + ], + "history": [ + { + "step": 519, + "residual": 0.2882602963769065 + }, + { + "step": 1038, + "residual": 0.1741798430044709 + }, + { + "step": 1557, + "residual": 0.1055873695917836 + }, + { + "step": 2076, + "residual": 0.06401044748720629 + }, + { + "step": 2595, + "residual": 0.03880591335000284 + }, + { + "step": 3114, + "residual": 0.02352539589870147 + }, + { + "step": 3633, + "residual": 0.014261869506153952 + }, + { + "step": 4152, + "residual": 0.008645779793337178 + }, + { + "step": 4671, + "residual": 0.005241820613642954 + }, + { + "step": 5190, + "residual": 0.003177469667860243 + }, + { + "step": 5709, + "residual": 0.0019265541207326533 + }, + { + "step": 6228, + "residual": 0.001167666670098696 + }, + { + "step": 6747, + "residual": 0.0007076206641575654 + }, + { + "step": 7266, + "residual": 0.00042986891541188244 + }, + { + "step": 7785, + "residual": 0.0002605778358761455 + }, + { + "step": 8304, + "residual": 0.00015807677666675694 + }, + { + "step": 8823, + "residual": 9.578527195462091e-05 + }, + { + "step": 9342, + "residual": 5.647212168631071e-05 + }, + { + "step": 9861, + "residual": 3.0023114782125723e-05 + }, + { + "step": 10380, + "residual": 1.0903528878604553e-05 + } + ], + "seconds": 1.7724427359935362, + "passed": true + }, + { + "height": 32, + "collision": "SRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.015, + "force_density": 1.171875e-05, + "re": 4.8, + "ma": 0.025980762113533156, + "steps": 10380, + "diffusion_times": 10.004540398760502, + "relative_l2": 0.000780149256765261, + "relative_l2_limit": 0.003, + "mass_drift": 7.4411876660462895e-09, + "max_transverse": 2.5956978591474787e-09, + "steady_residual": 1.0903528878604553e-05, + "profile": [ + 0.0009151653227246929, + 0.002672840454473577, + 0.004313328662562868, + 0.005836630675806899, + 0.00724274733476979, + 0.008531676814872834, + 0.00970342950090171, + 0.010758010105952613, + 0.011695411362451395, + 0.012515642507239085, + 0.01321869105437823, + 0.013804564654676162, + 0.014273260305773883, + 0.014624780562041662, + 0.014859127032782951, + 0.01497630348377952, + 0.01497629954489127, + 0.014859119817844029, + 0.014624763329115857, + 0.01427324296882229, + 0.01380455044623163, + 0.013218683020086046, + 0.012515639494942565, + 0.011695417121095397, + 0.01075801447240774, + 0.009703436894042386, + 0.008531676927936044, + 0.007242740347050959, + 0.005836623080073482, + 0.004313323074242032, + 0.0026728374564815773, + 0.0009151645732213808 + ], + "analytic_profile": [ + 0.0009228515625, + 0.0026806640625, + 0.0043212890625, + 0.0058447265625, + 0.007250976562499999, + 0.0085400390625, + 0.0097119140625, + 0.0107666015625, + 0.011704101562500001, + 0.0125244140625, + 0.0132275390625, + 0.0138134765625, + 0.014282226562499998, + 0.0146337890625, + 0.014868164062500001, + 0.014985351562499999, + 0.014985351562499999, + 0.0148681640625, + 0.0146337890625, + 0.0142822265625, + 0.013813476562499998, + 0.0132275390625, + 0.012524414062500001, + 0.011704101562500001, + 0.0107666015625, + 0.009711914062499999, + 0.0085400390625, + 0.0072509765625, + 0.0058447265625, + 0.0043212890625, + 0.0026806640624999997, + 0.0009228515625 + ], + "history": [ + { + "step": 519, + "residual": 0.2882602963769065 + }, + { + "step": 1038, + "residual": 0.1741798430044709 + }, + { + "step": 1557, + "residual": 0.1055873695917836 + }, + { + "step": 2076, + "residual": 0.06401044748720629 + }, + { + "step": 2595, + "residual": 0.03880591335000284 + }, + { + "step": 3114, + "residual": 0.02352539589870147 + }, + { + "step": 3633, + "residual": 0.014261869506153952 + }, + { + "step": 4152, + "residual": 0.008645779793337178 + }, + { + "step": 4671, + "residual": 0.005241820613642954 + }, + { + "step": 5190, + "residual": 0.003177469667860243 + }, + { + "step": 5709, + "residual": 0.0019265541207326533 + }, + { + "step": 6228, + "residual": 0.001167666670098696 + }, + { + "step": 6747, + "residual": 0.0007076206641575654 + }, + { + "step": 7266, + "residual": 0.00042986891541188244 + }, + { + "step": 7785, + "residual": 0.0002605778358761455 + }, + { + "step": 8304, + "residual": 0.00015807677666675694 + }, + { + "step": 8823, + "residual": 9.578527195462091e-05 + }, + { + "step": 9342, + "residual": 5.647212168631071e-05 + }, + { + "step": 9861, + "residual": 3.0023114782125723e-05 + }, + { + "step": 10380, + "residual": 1.0903528878604553e-05 + } + ], + "seconds": 1.8990138480148744, + "passed": true + }, + { + "height": 32, + "collision": "TRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.015, + "force_density": 1.171875e-05, + "re": 4.8, + "ma": 0.025980762113533156, + "steps": 10380, + "diffusion_times": 10.004540398760502, + "relative_l2": 0.00010058095585801747, + "relative_l2_limit": 0.003, + "mass_drift": 7.35723371114716e-09, + "max_transverse": 3.883542348518773e-09, + "steady_residual": 1.3924339746809186e-05, + "profile": [ + 0.0009227822314536397, + 0.002680456941497137, + 0.004320944929274313, + 0.005844247988276556, + 0.007250362474280337, + 0.008539291369414326, + 0.009711037131540293, + 0.010765602552856761, + 0.01170298236067967, + 0.012523179707929473, + 0.01322620799028411, + 0.01381207087591135, + 0.014280755589590896, + 0.014632265831848864, + 0.014866607089434943, + 0.014983779456268324, + 0.01498377026098426, + 0.014866592633328995, + 0.0146322441796638, + 0.014280727773602604, + 0.013812037356087355, + 0.013226178299180668, + 0.012523146765423303, + 0.011702945229578066, + 0.010765559002717164, + 0.0097109994056633, + 0.008539258540992785, + 0.0072503338930859215, + 0.005844226362453722, + 0.00432092991188851, + 0.0026804487778570615, + 0.0009227797795450615 + ], + "analytic_profile": [ + 0.0009228515625, + 0.0026806640625, + 0.0043212890625, + 0.0058447265625, + 0.007250976562499999, + 0.0085400390625, + 0.0097119140625, + 0.0107666015625, + 0.011704101562500001, + 0.0125244140625, + 0.0132275390625, + 0.0138134765625, + 0.014282226562499998, + 0.0146337890625, + 0.014868164062500001, + 0.014985351562499999, + 0.014985351562499999, + 0.0148681640625, + 0.0146337890625, + 0.0142822265625, + 0.013813476562499998, + 0.0132275390625, + 0.012524414062500001, + 0.011704101562500001, + 0.0107666015625, + 0.009711914062499999, + 0.0085400390625, + 0.0072509765625, + 0.0058447265625, + 0.0043212890625, + 0.0026806640624999997, + 0.0009228515625 + ], + "history": [ + { + "step": 519, + "residual": 0.28831567045310763 + }, + { + "step": 1038, + "residual": 0.17426300768284883 + }, + { + "step": 1557, + "residual": 0.1056745496485929 + }, + { + "step": 2076, + "residual": 0.06407809651147704 + }, + { + "step": 2595, + "residual": 0.03885491713816356 + }, + { + "step": 3114, + "residual": 0.02356145455512296 + }, + { + "step": 3633, + "residual": 0.01428759072163264 + }, + { + "step": 4152, + "residual": 0.008664381177395463 + }, + { + "step": 4671, + "residual": 0.005254228270992071 + }, + { + "step": 5190, + "residual": 0.0031860617300601573 + }, + { + "step": 5709, + "residual": 0.0019320261487455357 + }, + { + "step": 6228, + "residual": 0.0011712565161373465 + }, + { + "step": 6747, + "residual": 0.0007102661882423618 + }, + { + "step": 7266, + "residual": 0.00043141399282712857 + }, + { + "step": 7785, + "residual": 0.0002617120188704865 + }, + { + "step": 8304, + "residual": 0.00015928460953685137 + }, + { + "step": 8823, + "residual": 9.590785072779178e-05 + }, + { + "step": 9342, + "residual": 5.865602946689298e-05 + }, + { + "step": 9861, + "residual": 3.3053246639438755e-05 + }, + { + "step": 10380, + "residual": 1.3924339746809186e-05 + } + ], + "seconds": 1.735989137989236, + "passed": true + }, + { + "height": 32, + "collision": "TRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.015, + "force_density": 1.171875e-05, + "re": 4.8, + "ma": 0.025980762113533156, + "steps": 10380, + "diffusion_times": 10.004540398760502, + "relative_l2": 0.00010058095585801747, + "relative_l2_limit": 0.003, + "mass_drift": 7.35723371114716e-09, + "max_transverse": 3.883542348518773e-09, + "steady_residual": 1.3924339746809186e-05, + "profile": [ + 0.0009227822314536397, + 0.002680456941497137, + 0.004320944929274313, + 0.005844247988276556, + 0.007250362474280337, + 0.008539291369414326, + 0.009711037131540293, + 0.010765602552856761, + 0.01170298236067967, + 0.012523179707929473, + 0.01322620799028411, + 0.01381207087591135, + 0.014280755589590896, + 0.014632265831848864, + 0.014866607089434943, + 0.014983779456268324, + 0.01498377026098426, + 0.014866592633328995, + 0.0146322441796638, + 0.014280727773602604, + 0.013812037356087355, + 0.013226178299180668, + 0.012523146765423303, + 0.011702945229578066, + 0.010765559002717164, + 0.0097109994056633, + 0.008539258540992785, + 0.0072503338930859215, + 0.005844226362453722, + 0.00432092991188851, + 0.0026804487778570615, + 0.0009227797795450615 + ], + "analytic_profile": [ + 0.0009228515625, + 0.0026806640625, + 0.0043212890625, + 0.0058447265625, + 0.007250976562499999, + 0.0085400390625, + 0.0097119140625, + 0.0107666015625, + 0.011704101562500001, + 0.0125244140625, + 0.0132275390625, + 0.0138134765625, + 0.014282226562499998, + 0.0146337890625, + 0.014868164062500001, + 0.014985351562499999, + 0.014985351562499999, + 0.0148681640625, + 0.0146337890625, + 0.0142822265625, + 0.013813476562499998, + 0.0132275390625, + 0.012524414062500001, + 0.011704101562500001, + 0.0107666015625, + 0.009711914062499999, + 0.0085400390625, + 0.0072509765625, + 0.0058447265625, + 0.0043212890625, + 0.0026806640624999997, + 0.0009228515625 + ], + "history": [ + { + "step": 519, + "residual": 0.28831567045310763 + }, + { + "step": 1038, + "residual": 0.17426300768284883 + }, + { + "step": 1557, + "residual": 0.1056745496485929 + }, + { + "step": 2076, + "residual": 0.06407809651147704 + }, + { + "step": 2595, + "residual": 0.03885491713816356 + }, + { + "step": 3114, + "residual": 0.02356145455512296 + }, + { + "step": 3633, + "residual": 0.01428759072163264 + }, + { + "step": 4152, + "residual": 0.008664381177395463 + }, + { + "step": 4671, + "residual": 0.005254228270992071 + }, + { + "step": 5190, + "residual": 0.0031860617300601573 + }, + { + "step": 5709, + "residual": 0.0019320261487455357 + }, + { + "step": 6228, + "residual": 0.0011712565161373465 + }, + { + "step": 6747, + "residual": 0.0007102661882423618 + }, + { + "step": 7266, + "residual": 0.00043141399282712857 + }, + { + "step": 7785, + "residual": 0.0002617120188704865 + }, + { + "step": 8304, + "residual": 0.00015928460953685137 + }, + { + "step": 8823, + "residual": 9.590785072779178e-05 + }, + { + "step": 9342, + "residual": 5.865602946689298e-05 + }, + { + "step": 9861, + "residual": 3.3053246639438755e-05 + }, + { + "step": 10380, + "residual": 1.3924339746809186e-05 + } + ], + "seconds": 1.6631985350104515, + "passed": true + }, + { + "height": 32, + "collision": "MRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.015, + "force_density": 1.171875e-05, + "re": 4.8, + "ma": 0.025980762113533156, + "steps": 10899, + "diffusion_times": 10.504767418698528, + "relative_l2": 0.000573107383946417, + "relative_l2_limit": 0.003, + "mass_drift": 3.8665777537971735e-05, + "max_transverse": 1.0803760476085215e-07, + "steady_residual": 1.4946088205019793e-05, + "profile": [ + 0.0009161574862371694, + 0.0026741541528258264, + 0.004314841717040519, + 0.005838366656155106, + 0.0072447525968309555, + 0.008533975796896475, + 0.00970591564890128, + 0.010760655940002093, + 0.011698139236944296, + 0.012518417864606186, + 0.013221428340172215, + 0.013807285797526023, + 0.014275951999277652, + 0.014627359378598973, + 0.014861600763183574, + 0.01497871824603483, + 0.014978727866533065, + 0.01486161138582754, + 0.014627371699262922, + 0.014275963654237797, + 0.013807283651899076, + 0.013221443273173709, + 0.012518431533218959, + 0.011698149192987424, + 0.010760667557273932, + 0.009705921146655904, + 0.00853396863216253, + 0.00724474133955771, + 0.005838347068908401, + 0.004314845008458961, + 0.0026741547505690186, + 0.0009161538529556305 + ], + "analytic_profile": [ + 0.0009228515625, + 0.0026806640625, + 0.0043212890625, + 0.0058447265625, + 0.007250976562499999, + 0.0085400390625, + 0.0097119140625, + 0.0107666015625, + 0.011704101562500001, + 0.0125244140625, + 0.0132275390625, + 0.0138134765625, + 0.014282226562499998, + 0.0146337890625, + 0.014868164062500001, + 0.014985351562499999, + 0.014985351562499999, + 0.0148681640625, + 0.0146337890625, + 0.0142822265625, + 0.013813476562499998, + 0.0132275390625, + 0.012524414062500001, + 0.011704101562500001, + 0.0107666015625, + 0.009711914062499999, + 0.0085400390625, + 0.0072509765625, + 0.0058447265625, + 0.0043212890625, + 0.0026806640624999997, + 0.0009228515625 + ], + "history": [ + { + "step": 519, + "residual": 0.2882697540815136 + }, + { + "step": 1038, + "residual": 0.17419091397163303 + }, + { + "step": 1557, + "residual": 0.10559580419512438 + }, + { + "step": 2076, + "residual": 0.06403202007055157 + }, + { + "step": 2595, + "residual": 0.038795585880498286 + }, + { + "step": 3114, + "residual": 0.023492743199600843 + }, + { + "step": 3633, + "residual": 0.014334108134948627 + }, + { + "step": 4152, + "residual": 0.008715646373614765 + }, + { + "step": 4671, + "residual": 0.005267967032104095 + }, + { + "step": 5190, + "residual": 0.00320001646807803 + }, + { + "step": 5709, + "residual": 0.001941758287099169 + }, + { + "step": 6228, + "residual": 0.0011428055408031434 + }, + { + "step": 6747, + "residual": 0.0006763218826654964 + }, + { + "step": 7266, + "residual": 0.00041091342117607476 + }, + { + "step": 7785, + "residual": 0.00025035215438234823 + }, + { + "step": 8304, + "residual": 0.00015196092048059103 + }, + { + "step": 8823, + "residual": 9.428458999057078e-05 + }, + { + "step": 9342, + "residual": 5.573938331786447e-05 + }, + { + "step": 9861, + "residual": 3.5857495996614466e-05 + }, + { + "step": 10380, + "residual": 2.213985258716324e-05 + }, + { + "step": 10899, + "residual": 1.4946088205019793e-05 + } + ], + "seconds": 1.7496721240167972, + "passed": true + }, + { + "height": 32, + "collision": "MRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.015, + "force_density": 1.171875e-05, + "re": 4.8, + "ma": 0.025980762113533156, + "steps": 10899, + "diffusion_times": 10.504767418698528, + "relative_l2": 0.000573107383946417, + "relative_l2_limit": 0.003, + "mass_drift": 3.8665777537971735e-05, + "max_transverse": 1.0803760476085215e-07, + "steady_residual": 1.4946088205019793e-05, + "profile": [ + 0.0009161574862371694, + 0.0026741541528258264, + 0.004314841717040519, + 0.005838366656155106, + 0.0072447525968309555, + 0.008533975796896475, + 0.00970591564890128, + 0.010760655940002093, + 0.011698139236944296, + 0.012518417864606186, + 0.013221428340172215, + 0.013807285797526023, + 0.014275951999277652, + 0.014627359378598973, + 0.014861600763183574, + 0.01497871824603483, + 0.014978727866533065, + 0.01486161138582754, + 0.014627371699262922, + 0.014275963654237797, + 0.013807283651899076, + 0.013221443273173709, + 0.012518431533218959, + 0.011698149192987424, + 0.010760667557273932, + 0.009705921146655904, + 0.00853396863216253, + 0.00724474133955771, + 0.005838347068908401, + 0.004314845008458961, + 0.0026741547505690186, + 0.0009161538529556305 + ], + "analytic_profile": [ + 0.0009228515625, + 0.0026806640625, + 0.0043212890625, + 0.0058447265625, + 0.007250976562499999, + 0.0085400390625, + 0.0097119140625, + 0.0107666015625, + 0.011704101562500001, + 0.0125244140625, + 0.0132275390625, + 0.0138134765625, + 0.014282226562499998, + 0.0146337890625, + 0.014868164062500001, + 0.014985351562499999, + 0.014985351562499999, + 0.0148681640625, + 0.0146337890625, + 0.0142822265625, + 0.013813476562499998, + 0.0132275390625, + 0.012524414062500001, + 0.011704101562500001, + 0.0107666015625, + 0.009711914062499999, + 0.0085400390625, + 0.0072509765625, + 0.0058447265625, + 0.0043212890625, + 0.0026806640624999997, + 0.0009228515625 + ], + "history": [ + { + "step": 519, + "residual": 0.2882697540815136 + }, + { + "step": 1038, + "residual": 0.17419091397163303 + }, + { + "step": 1557, + "residual": 0.10559580419512438 + }, + { + "step": 2076, + "residual": 0.06403202007055157 + }, + { + "step": 2595, + "residual": 0.038795585880498286 + }, + { + "step": 3114, + "residual": 0.023492743199600843 + }, + { + "step": 3633, + "residual": 0.014334108134948627 + }, + { + "step": 4152, + "residual": 0.008715646373614765 + }, + { + "step": 4671, + "residual": 0.005267967032104095 + }, + { + "step": 5190, + "residual": 0.00320001646807803 + }, + { + "step": 5709, + "residual": 0.001941758287099169 + }, + { + "step": 6228, + "residual": 0.0011428055408031434 + }, + { + "step": 6747, + "residual": 0.0006763218826654964 + }, + { + "step": 7266, + "residual": 0.00041091342117607476 + }, + { + "step": 7785, + "residual": 0.00025035215438234823 + }, + { + "step": 8304, + "residual": 0.00015196092048059103 + }, + { + "step": 8823, + "residual": 9.428458999057078e-05 + }, + { + "step": 9342, + "residual": 5.573938331786447e-05 + }, + { + "step": 9861, + "residual": 3.5857495996614466e-05 + }, + { + "step": 10380, + "residual": 2.213985258716324e-05 + }, + { + "step": 10899, + "residual": 1.4946088205019793e-05 + } + ], + "seconds": 1.704289750981843, + "passed": true + }, + { + "height": 64, + "collision": "SRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.0075, + "force_density": 1.46484375e-06, + "re": 4.8, + "ma": 0.012990381056766578, + "steps": 35292, + "diffusion_times": 8.503859338946427, + "relative_l2": 0.0003963696916771394, + "relative_l2_limit": 0.0015, + "mass_drift": 7.471121721280838e-09, + "max_transverse": 2.4133441721387433e-09, + "steady_residual": 1.6901519426561357e-05, + "profile": [ + 0.0002315500066595129, + 0.0006855678148152185, + 0.0011249373897331114, + 0.0015496590139576145, + 0.0019597333643966504, + 0.0023551597572840244, + 0.0027359382066502375, + 0.003102068916835336, + 0.003453553924357987, + 0.00379039100436295, + 0.004112580126565679, + 0.004420123121285932, + 0.004713018279590703, + 0.004991264022842769, + 0.005254863551546779, + 0.005503816900629029, + 0.005738125409129715, + 0.005957787469133619, + 0.0061628021226289844, + 0.006353174409769752, + 0.006528901243027017, + 0.006689983082032009, + 0.006836417841067422, + 0.0069682137795022475, + 0.0070853628644593466, + 0.00718786865358165, + 0.007275728750888121, + 0.00734894478781432, + 0.00740751467446019, + 0.007451442779218801, + 0.007480725013356117, + 0.0074953641242673, + 0.007495363950080606, + 0.007480725071863139, + 0.007451442489624011, + 0.0074075147331596584, + 0.007348944730087895, + 0.007275728925167007, + 0.007187871155497765, + 0.0070853673474802585, + 0.006968217969934121, + 0.006836423603576068, + 0.006689988669596258, + 0.006528908927406097, + 0.006353182035233292, + 0.006162808469861912, + 0.005957788106432249, + 0.005738123544524922, + 0.00550381358309022, + 0.005254855372283201, + 0.004991251187275102, + 0.004713002010013788, + 0.004420104380298641, + 0.004112559142082237, + 0.003790368623145182, + 0.0034535308454085186, + 0.0031020465067386387, + 0.0027359173978274746, + 0.002355140316031988, + 0.0019597154657521507, + 0.0015496436761840676, + 0.0011249257335794315, + 0.0006855606734550381, + 0.00023154756558035658 + ], + "analytic_profile": [ + 0.0002325439453125, + 0.0006866455078125001, + 0.0011260986328125, + 0.0015509033203125002, + 0.0019610595703124997, + 0.0023565673828125, + 0.0027374267578125, + 0.0031036376953124997, + 0.0034552001953125, + 0.0037921142578124997, + 0.0041143798828125, + 0.0044219970703125, + 0.004714965820312499, + 0.0049932861328125, + 0.005256958007812501, + 0.0055059814453125005, + 0.005740356445312501, + 0.005960083007812499, + 0.0061651611328125, + 0.0063555908203125, + 0.0065313720703125, + 0.0066925048828124995, + 0.0068389892578125, + 0.0069708251953125005, + 0.0070880126953125, + 0.0071905517578125, + 0.0072784423828125, + 0.007351684570312499, + 0.007410278320312501, + 0.007454223632812499, + 0.007483520507812499, + 0.0074981689453125, + 0.0074981689453125, + 0.0074835205078125, + 0.007454223632812501, + 0.0074102783203125, + 0.007351684570312499, + 0.0072784423828125, + 0.0071905517578125, + 0.007088012695312501, + 0.0069708251953125, + 0.0068389892578125, + 0.0066925048828124995, + 0.0065313720703125, + 0.0063555908203125, + 0.0061651611328125, + 0.0059600830078125, + 0.005740356445312501, + 0.005505981445312499, + 0.0052569580078125, + 0.004993286132812499, + 0.004714965820312499, + 0.0044219970703125, + 0.0041143798828125, + 0.0037921142578124997, + 0.0034552001953125, + 0.0031036376953124997, + 0.0027374267578125, + 0.0023565673828125, + 0.0019610595703124997, + 0.0015509033203124998, + 0.0011260986328125, + 0.0006866455078125, + 0.0002325439453125 + ], + "history": [ + { + "step": 2076, + "residual": 0.2884814603909511 + }, + { + "step": 4152, + "residual": 0.1742015177050324 + }, + { + "step": 6228, + "residual": 0.1056299750542472 + }, + { + "step": 8304, + "residual": 0.06405226884116197 + }, + { + "step": 10380, + "residual": 0.03884118298591981 + }, + { + "step": 12456, + "residual": 0.023552234509759306 + }, + { + "step": 14532, + "residual": 0.014282037474048109 + }, + { + "step": 16608, + "residual": 0.00865672042552521 + }, + { + "step": 18684, + "residual": 0.00525218020004053 + }, + { + "step": 20760, + "residual": 0.003185006995088164 + }, + { + "step": 22836, + "residual": 0.0019290306683866472 + }, + { + "step": 24912, + "residual": 0.0011708555457155888 + }, + { + "step": 26988, + "residual": 0.0007046355814745517 + }, + { + "step": 29064, + "residual": 0.00043155018690484875 + }, + { + "step": 31140, + "residual": 0.000257245881209543 + }, + { + "step": 33216, + "residual": 0.0001466616695611254 + }, + { + "step": 35292, + "residual": 1.6901519426561357e-05 + } + ], + "seconds": 2.2586528009851463, + "passed": true + }, + { + "height": 64, + "collision": "SRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.0075, + "force_density": 1.46484375e-06, + "re": 4.8, + "ma": 0.012990381056766578, + "steps": 35292, + "diffusion_times": 8.503859338946427, + "relative_l2": 0.0003963696916771394, + "relative_l2_limit": 0.0015, + "mass_drift": 7.471121721280838e-09, + "max_transverse": 2.4133441721387433e-09, + "steady_residual": 1.6901519426561357e-05, + "profile": [ + 0.0002315500066595129, + 0.0006855678148152185, + 0.0011249373897331114, + 0.0015496590139576145, + 0.0019597333643966504, + 0.0023551597572840244, + 0.0027359382066502375, + 0.003102068916835336, + 0.003453553924357987, + 0.00379039100436295, + 0.004112580126565679, + 0.004420123121285932, + 0.004713018279590703, + 0.004991264022842769, + 0.005254863551546779, + 0.005503816900629029, + 0.005738125409129715, + 0.005957787469133619, + 0.0061628021226289844, + 0.006353174409769752, + 0.006528901243027017, + 0.006689983082032009, + 0.006836417841067422, + 0.0069682137795022475, + 0.0070853628644593466, + 0.00718786865358165, + 0.007275728750888121, + 0.00734894478781432, + 0.00740751467446019, + 0.007451442779218801, + 0.007480725013356117, + 0.0074953641242673, + 0.007495363950080606, + 0.007480725071863139, + 0.007451442489624011, + 0.0074075147331596584, + 0.007348944730087895, + 0.007275728925167007, + 0.007187871155497765, + 0.0070853673474802585, + 0.006968217969934121, + 0.006836423603576068, + 0.006689988669596258, + 0.006528908927406097, + 0.006353182035233292, + 0.006162808469861912, + 0.005957788106432249, + 0.005738123544524922, + 0.00550381358309022, + 0.005254855372283201, + 0.004991251187275102, + 0.004713002010013788, + 0.004420104380298641, + 0.004112559142082237, + 0.003790368623145182, + 0.0034535308454085186, + 0.0031020465067386387, + 0.0027359173978274746, + 0.002355140316031988, + 0.0019597154657521507, + 0.0015496436761840676, + 0.0011249257335794315, + 0.0006855606734550381, + 0.00023154756558035658 + ], + "analytic_profile": [ + 0.0002325439453125, + 0.0006866455078125001, + 0.0011260986328125, + 0.0015509033203125002, + 0.0019610595703124997, + 0.0023565673828125, + 0.0027374267578125, + 0.0031036376953124997, + 0.0034552001953125, + 0.0037921142578124997, + 0.0041143798828125, + 0.0044219970703125, + 0.004714965820312499, + 0.0049932861328125, + 0.005256958007812501, + 0.0055059814453125005, + 0.005740356445312501, + 0.005960083007812499, + 0.0061651611328125, + 0.0063555908203125, + 0.0065313720703125, + 0.0066925048828124995, + 0.0068389892578125, + 0.0069708251953125005, + 0.0070880126953125, + 0.0071905517578125, + 0.0072784423828125, + 0.007351684570312499, + 0.007410278320312501, + 0.007454223632812499, + 0.007483520507812499, + 0.0074981689453125, + 0.0074981689453125, + 0.0074835205078125, + 0.007454223632812501, + 0.0074102783203125, + 0.007351684570312499, + 0.0072784423828125, + 0.0071905517578125, + 0.007088012695312501, + 0.0069708251953125, + 0.0068389892578125, + 0.0066925048828124995, + 0.0065313720703125, + 0.0063555908203125, + 0.0061651611328125, + 0.0059600830078125, + 0.005740356445312501, + 0.005505981445312499, + 0.0052569580078125, + 0.004993286132812499, + 0.004714965820312499, + 0.0044219970703125, + 0.0041143798828125, + 0.0037921142578124997, + 0.0034552001953125, + 0.0031036376953124997, + 0.0027374267578125, + 0.0023565673828125, + 0.0019610595703124997, + 0.0015509033203124998, + 0.0011260986328125, + 0.0006866455078125, + 0.0002325439453125 + ], + "history": [ + { + "step": 2076, + "residual": 0.2884814603909511 + }, + { + "step": 4152, + "residual": 0.1742015177050324 + }, + { + "step": 6228, + "residual": 0.1056299750542472 + }, + { + "step": 8304, + "residual": 0.06405226884116197 + }, + { + "step": 10380, + "residual": 0.03884118298591981 + }, + { + "step": 12456, + "residual": 0.023552234509759306 + }, + { + "step": 14532, + "residual": 0.014282037474048109 + }, + { + "step": 16608, + "residual": 0.00865672042552521 + }, + { + "step": 18684, + "residual": 0.00525218020004053 + }, + { + "step": 20760, + "residual": 0.003185006995088164 + }, + { + "step": 22836, + "residual": 0.0019290306683866472 + }, + { + "step": 24912, + "residual": 0.0011708555457155888 + }, + { + "step": 26988, + "residual": 0.0007046355814745517 + }, + { + "step": 29064, + "residual": 0.00043155018690484875 + }, + { + "step": 31140, + "residual": 0.000257245881209543 + }, + { + "step": 33216, + "residual": 0.0001466616695611254 + }, + { + "step": 35292, + "residual": 1.6901519426561357e-05 + } + ], + "seconds": 2.6812996080261655, + "passed": true + }, + { + "height": 64, + "collision": "TRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.0075, + "force_density": 1.46484375e-06, + "re": 4.8, + "ma": 0.012990381056766578, + "steps": 37368, + "diffusion_times": 9.004086358884452, + "relative_l2": 0.00019309691579672675, + "relative_l2_limit": 0.0015, + "mass_drift": 7.506348875807589e-09, + "max_transverse": 2.1286723333541315e-09, + "steady_residual": 1.089235504050361e-05, + "profile": [ + 0.00023250678144308288, + 0.0006865340256119351, + 0.0011259129718975314, + 0.001550644280355248, + 0.001960728919314011, + 0.0023561664588974086, + 0.0027369566810718973, + 0.0031030989884097368, + 0.0034545948813580617, + 0.003791443253391098, + 0.004113645499316158, + 0.004421199877686454, + 0.0047141064990831654, + 0.004992367521479674, + 0.00525598084692498, + 0.005504949622585436, + 0.005739274045420422, + 0.00595895296227944, + 0.006163985774619699, + 0.006354372035776424, + 0.006530112657587643, + 0.00669120858395798, + 0.0068376603400963345, + 0.00696946413837726, + 0.007086622715844642, + 0.007189134494613074, + 0.007277001873570306, + 0.007350227393498817, + 0.007408808340879525, + 0.007452744296915545, + 0.00748203556277865, + 0.007496682176056331, + 0.007496680954070462, + 0.007482035500583334, + 0.007452744238057174, + 0.007408809853436413, + 0.0073502276254269845, + 0.007276999253424757, + 0.007189128852569632, + 0.007086613633657829, + 0.006969452963292446, + 0.006837648756709716, + 0.00669119612571122, + 0.006530097294114927, + 0.006354355328319829, + 0.0061639689515294565, + 0.005958939631253757, + 0.005739265318134029, + 0.005504943364806323, + 0.005255975990631841, + 0.004992362952073895, + 0.004714102395046513, + 0.004421193969127392, + 0.004113639532984194, + 0.0037914376360216866, + 0.003454589409725653, + 0.00310309342935344, + 0.002736951456800572, + 0.0023561617585275718, + 0.001960725136061056, + 0.0015506411516393772, + 0.001125910789088391, + 0.0006865325122122846, + 0.00023250628030548168 + ], + "analytic_profile": [ + 0.0002325439453125, + 0.0006866455078125001, + 0.0011260986328125, + 0.0015509033203125002, + 0.0019610595703124997, + 0.0023565673828125, + 0.0027374267578125, + 0.0031036376953124997, + 0.0034552001953125, + 0.0037921142578124997, + 0.0041143798828125, + 0.0044219970703125, + 0.004714965820312499, + 0.0049932861328125, + 0.005256958007812501, + 0.0055059814453125005, + 0.005740356445312501, + 0.005960083007812499, + 0.0061651611328125, + 0.0063555908203125, + 0.0065313720703125, + 0.0066925048828124995, + 0.0068389892578125, + 0.0069708251953125005, + 0.0070880126953125, + 0.0071905517578125, + 0.0072784423828125, + 0.007351684570312499, + 0.007410278320312501, + 0.007454223632812499, + 0.007483520507812499, + 0.0074981689453125, + 0.0074981689453125, + 0.0074835205078125, + 0.007454223632812501, + 0.0074102783203125, + 0.007351684570312499, + 0.0072784423828125, + 0.0071905517578125, + 0.007088012695312501, + 0.0069708251953125, + 0.0068389892578125, + 0.0066925048828124995, + 0.0065313720703125, + 0.0063555908203125, + 0.0061651611328125, + 0.0059600830078125, + 0.005740356445312501, + 0.005505981445312499, + 0.0052569580078125, + 0.004993286132812499, + 0.004714965820312499, + 0.0044219970703125, + 0.0041143798828125, + 0.0037921142578124997, + 0.0034552001953125, + 0.0031036376953124997, + 0.0027374267578125, + 0.0023565673828125, + 0.0019610595703124997, + 0.0015509033203124998, + 0.0011260986328125, + 0.0006866455078125, + 0.0002325439453125 + ], + "history": [ + { + "step": 2076, + "residual": 0.2884903514929979 + }, + { + "step": 4152, + "residual": 0.17420549777859068 + }, + { + "step": 6228, + "residual": 0.1056400781992352 + }, + { + "step": 8304, + "residual": 0.06406081892647358 + }, + { + "step": 10380, + "residual": 0.03884724566460372 + }, + { + "step": 12456, + "residual": 0.02355707425139268 + }, + { + "step": 14532, + "residual": 0.014285179459461849 + }, + { + "step": 16608, + "residual": 0.008663284641419695 + }, + { + "step": 18684, + "residual": 0.0052527999379981235 + }, + { + "step": 20760, + "residual": 0.0031856451941576656 + }, + { + "step": 22836, + "residual": 0.0019321555185594925 + }, + { + "step": 24912, + "residual": 0.001171606692210917 + }, + { + "step": 26988, + "residual": 0.0007107258821416077 + }, + { + "step": 29064, + "residual": 0.0004307324480797304 + }, + { + "step": 31140, + "residual": 0.00026251258077496285 + }, + { + "step": 33216, + "residual": 0.00015496164826095737 + }, + { + "step": 35292, + "residual": 7.726582070590044e-05 + }, + { + "step": 37368, + "residual": 1.089235504050361e-05 + } + ], + "seconds": 2.2658962089917623, + "passed": true + }, + { + "height": 64, + "collision": "TRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.0075, + "force_density": 1.46484375e-06, + "re": 4.8, + "ma": 0.012990381056766578, + "steps": 37368, + "diffusion_times": 9.004086358884452, + "relative_l2": 0.00019309691579672675, + "relative_l2_limit": 0.0015, + "mass_drift": 7.506348875807589e-09, + "max_transverse": 2.1286723333541315e-09, + "steady_residual": 1.089235504050361e-05, + "profile": [ + 0.00023250678144308288, + 0.0006865340256119351, + 0.0011259129718975314, + 0.001550644280355248, + 0.001960728919314011, + 0.0023561664588974086, + 0.0027369566810718973, + 0.0031030989884097368, + 0.0034545948813580617, + 0.003791443253391098, + 0.004113645499316158, + 0.004421199877686454, + 0.0047141064990831654, + 0.004992367521479674, + 0.00525598084692498, + 0.005504949622585436, + 0.005739274045420422, + 0.00595895296227944, + 0.006163985774619699, + 0.006354372035776424, + 0.006530112657587643, + 0.00669120858395798, + 0.0068376603400963345, + 0.00696946413837726, + 0.007086622715844642, + 0.007189134494613074, + 0.007277001873570306, + 0.007350227393498817, + 0.007408808340879525, + 0.007452744296915545, + 0.00748203556277865, + 0.007496682176056331, + 0.007496680954070462, + 0.007482035500583334, + 0.007452744238057174, + 0.007408809853436413, + 0.0073502276254269845, + 0.007276999253424757, + 0.007189128852569632, + 0.007086613633657829, + 0.006969452963292446, + 0.006837648756709716, + 0.00669119612571122, + 0.006530097294114927, + 0.006354355328319829, + 0.0061639689515294565, + 0.005958939631253757, + 0.005739265318134029, + 0.005504943364806323, + 0.005255975990631841, + 0.004992362952073895, + 0.004714102395046513, + 0.004421193969127392, + 0.004113639532984194, + 0.0037914376360216866, + 0.003454589409725653, + 0.00310309342935344, + 0.002736951456800572, + 0.0023561617585275718, + 0.001960725136061056, + 0.0015506411516393772, + 0.001125910789088391, + 0.0006865325122122846, + 0.00023250628030548168 + ], + "analytic_profile": [ + 0.0002325439453125, + 0.0006866455078125001, + 0.0011260986328125, + 0.0015509033203125002, + 0.0019610595703124997, + 0.0023565673828125, + 0.0027374267578125, + 0.0031036376953124997, + 0.0034552001953125, + 0.0037921142578124997, + 0.0041143798828125, + 0.0044219970703125, + 0.004714965820312499, + 0.0049932861328125, + 0.005256958007812501, + 0.0055059814453125005, + 0.005740356445312501, + 0.005960083007812499, + 0.0061651611328125, + 0.0063555908203125, + 0.0065313720703125, + 0.0066925048828124995, + 0.0068389892578125, + 0.0069708251953125005, + 0.0070880126953125, + 0.0071905517578125, + 0.0072784423828125, + 0.007351684570312499, + 0.007410278320312501, + 0.007454223632812499, + 0.007483520507812499, + 0.0074981689453125, + 0.0074981689453125, + 0.0074835205078125, + 0.007454223632812501, + 0.0074102783203125, + 0.007351684570312499, + 0.0072784423828125, + 0.0071905517578125, + 0.007088012695312501, + 0.0069708251953125, + 0.0068389892578125, + 0.0066925048828124995, + 0.0065313720703125, + 0.0063555908203125, + 0.0061651611328125, + 0.0059600830078125, + 0.005740356445312501, + 0.005505981445312499, + 0.0052569580078125, + 0.004993286132812499, + 0.004714965820312499, + 0.0044219970703125, + 0.0041143798828125, + 0.0037921142578124997, + 0.0034552001953125, + 0.0031036376953124997, + 0.0027374267578125, + 0.0023565673828125, + 0.0019610595703124997, + 0.0015509033203124998, + 0.0011260986328125, + 0.0006866455078125, + 0.0002325439453125 + ], + "history": [ + { + "step": 2076, + "residual": 0.2884903514929979 + }, + { + "step": 4152, + "residual": 0.17420549777859068 + }, + { + "step": 6228, + "residual": 0.1056400781992352 + }, + { + "step": 8304, + "residual": 0.06406081892647358 + }, + { + "step": 10380, + "residual": 0.03884724566460372 + }, + { + "step": 12456, + "residual": 0.02355707425139268 + }, + { + "step": 14532, + "residual": 0.014285179459461849 + }, + { + "step": 16608, + "residual": 0.008663284641419695 + }, + { + "step": 18684, + "residual": 0.0052527999379981235 + }, + { + "step": 20760, + "residual": 0.0031856451941576656 + }, + { + "step": 22836, + "residual": 0.0019321555185594925 + }, + { + "step": 24912, + "residual": 0.001171606692210917 + }, + { + "step": 26988, + "residual": 0.0007107258821416077 + }, + { + "step": 29064, + "residual": 0.0004307324480797304 + }, + { + "step": 31140, + "residual": 0.00026251258077496285 + }, + { + "step": 33216, + "residual": 0.00015496164826095737 + }, + { + "step": 35292, + "residual": 7.726582070590044e-05 + }, + { + "step": 37368, + "residual": 1.089235504050361e-05 + } + ], + "seconds": 3.0287086729949806, + "passed": true + }, + { + "height": 64, + "collision": "MRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.0075, + "force_density": 1.46484375e-06, + "re": 4.8, + "ma": 0.012990381056766578, + "steps": 37368, + "diffusion_times": 9.004086358884452, + "relative_l2": 0.006977043935708942, + "relative_l2_limit": 0.0015, + "mass_drift": 0.0004926890542265028, + "max_transverse": 2.3830113453085015e-07, + "steady_residual": 3.7383188280291845e-06, + "profile": [ + 0.00023076451014300613, + 0.0006829856360750851, + 0.0011204543750599138, + 0.0015431822466373706, + 0.0019511669834912117, + 0.0023443914794267304, + 0.0027228750765612257, + 0.0030866262154156878, + 0.003435622964503067, + 0.0037698695560440926, + 0.0040893870309735274, + 0.004394321668007393, + 0.004684723922250874, + 0.004960623792627583, + 0.005221989314506083, + 0.005468821808186208, + 0.005701131991124882, + 0.005918942554962884, + 0.006122229600290346, + 0.006310995225110159, + 0.006485244903582286, + 0.0066449682600057194, + 0.0067901852444001865, + 0.006920856129618597, + 0.007037025898249802, + 0.007138666921996448, + 0.007225786117701261, + 0.0072983832029248985, + 0.007356454840226301, + 0.007400028674703558, + 0.00742906490031131, + 0.007443573526430372, + 0.007443564647385038, + 0.0074290444627963656, + 0.007400008622778867, + 0.007356446120502636, + 0.007298359639075386, + 0.007225754293446839, + 0.007138642918886401, + 0.0070369974207001905, + 0.006920833737343819, + 0.006790153683522495, + 0.006644950824044445, + 0.006485237360080772, + 0.006311006677460231, + 0.00612224209281827, + 0.005918953284550792, + 0.005701144864011107, + 0.005468832084066476, + 0.005221990481136981, + 0.004960627885496905, + 0.004684740106883328, + 0.004394340318010947, + 0.004089406013692502, + 0.003769876257165687, + 0.003435622619108564, + 0.0030866275542160643, + 0.002722885881940019, + 0.002344391723845406, + 0.0019511594857233906, + 0.001543182235145428, + 0.0011204526155450803, + 0.0006829967632094447, + 0.0002307886838197379 + ], + "analytic_profile": [ + 0.0002325439453125, + 0.0006866455078125001, + 0.0011260986328125, + 0.0015509033203125002, + 0.0019610595703124997, + 0.0023565673828125, + 0.0027374267578125, + 0.0031036376953124997, + 0.0034552001953125, + 0.0037921142578124997, + 0.0041143798828125, + 0.0044219970703125, + 0.004714965820312499, + 0.0049932861328125, + 0.005256958007812501, + 0.0055059814453125005, + 0.005740356445312501, + 0.005960083007812499, + 0.0061651611328125, + 0.0063555908203125, + 0.0065313720703125, + 0.0066925048828124995, + 0.0068389892578125, + 0.0069708251953125005, + 0.0070880126953125, + 0.0071905517578125, + 0.0072784423828125, + 0.007351684570312499, + 0.007410278320312501, + 0.007454223632812499, + 0.007483520507812499, + 0.0074981689453125, + 0.0074981689453125, + 0.0074835205078125, + 0.007454223632812501, + 0.0074102783203125, + 0.007351684570312499, + 0.0072784423828125, + 0.0071905517578125, + 0.007088012695312501, + 0.0069708251953125, + 0.0068389892578125, + 0.0066925048828124995, + 0.0065313720703125, + 0.0063555908203125, + 0.0061651611328125, + 0.0059600830078125, + 0.005740356445312501, + 0.005505981445312499, + 0.0052569580078125, + 0.004993286132812499, + 0.004714965820312499, + 0.0044219970703125, + 0.0041143798828125, + 0.0037921142578124997, + 0.0034552001953125, + 0.0031036376953124997, + 0.0027374267578125, + 0.0023565673828125, + 0.0019610595703124997, + 0.0015509033203124998, + 0.0011260986328125, + 0.0006866455078125, + 0.0002325439453125 + ], + "history": [ + { + "step": 2076, + "residual": 0.2905263379364549 + }, + { + "step": 4152, + "residual": 0.17462346717174204 + }, + { + "step": 6228, + "residual": 0.1035978444049743 + }, + { + "step": 8304, + "residual": 0.062371918099544635 + }, + { + "step": 10380, + "residual": 0.037663169290918015 + }, + { + "step": 12456, + "residual": 0.02272314588248638 + }, + { + "step": 14532, + "residual": 0.013755452372547893 + }, + { + "step": 16608, + "residual": 0.008332577465801785 + }, + { + "step": 18684, + "residual": 0.005043824651993849 + }, + { + "step": 20760, + "residual": 0.0030473158949083654 + }, + { + "step": 22836, + "residual": 0.0018425335061717063 + }, + { + "step": 24912, + "residual": 0.001104378382804165 + }, + { + "step": 26988, + "residual": 0.0006612133811008524 + }, + { + "step": 29064, + "residual": 0.0003921061932562846 + }, + { + "step": 31140, + "residual": 0.00021449404102801066 + }, + { + "step": 33216, + "residual": 7.718901824269877e-05 + }, + { + "step": 35292, + "residual": 2.039770464193431e-05 + }, + { + "step": 37368, + "residual": 3.7383188280291845e-06 + } + ], + "seconds": 2.3882043180055916, + "passed": false + }, + { + "height": 64, + "collision": "MRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.0075, + "force_density": 1.46484375e-06, + "re": 4.8, + "ma": 0.012990381056766578, + "steps": 37368, + "diffusion_times": 9.004086358884452, + "relative_l2": 0.006977043935708942, + "relative_l2_limit": 0.0015, + "mass_drift": 0.0004926890542265028, + "max_transverse": 2.3830113453085015e-07, + "steady_residual": 3.7383188280291845e-06, + "profile": [ + 0.00023076451014300613, + 0.0006829856360750851, + 0.0011204543750599138, + 0.0015431822466373706, + 0.0019511669834912117, + 0.0023443914794267304, + 0.0027228750765612257, + 0.0030866262154156878, + 0.003435622964503067, + 0.0037698695560440926, + 0.0040893870309735274, + 0.004394321668007393, + 0.004684723922250874, + 0.004960623792627583, + 0.005221989314506083, + 0.005468821808186208, + 0.005701131991124882, + 0.005918942554962884, + 0.006122229600290346, + 0.006310995225110159, + 0.006485244903582286, + 0.0066449682600057194, + 0.0067901852444001865, + 0.006920856129618597, + 0.007037025898249802, + 0.007138666921996448, + 0.007225786117701261, + 0.0072983832029248985, + 0.007356454840226301, + 0.007400028674703558, + 0.00742906490031131, + 0.007443573526430372, + 0.007443564647385038, + 0.0074290444627963656, + 0.007400008622778867, + 0.007356446120502636, + 0.007298359639075386, + 0.007225754293446839, + 0.007138642918886401, + 0.0070369974207001905, + 0.006920833737343819, + 0.006790153683522495, + 0.006644950824044445, + 0.006485237360080772, + 0.006311006677460231, + 0.00612224209281827, + 0.005918953284550792, + 0.005701144864011107, + 0.005468832084066476, + 0.005221990481136981, + 0.004960627885496905, + 0.004684740106883328, + 0.004394340318010947, + 0.004089406013692502, + 0.003769876257165687, + 0.003435622619108564, + 0.0030866275542160643, + 0.002722885881940019, + 0.002344391723845406, + 0.0019511594857233906, + 0.001543182235145428, + 0.0011204526155450803, + 0.0006829967632094447, + 0.0002307886838197379 + ], + "analytic_profile": [ + 0.0002325439453125, + 0.0006866455078125001, + 0.0011260986328125, + 0.0015509033203125002, + 0.0019610595703124997, + 0.0023565673828125, + 0.0027374267578125, + 0.0031036376953124997, + 0.0034552001953125, + 0.0037921142578124997, + 0.0041143798828125, + 0.0044219970703125, + 0.004714965820312499, + 0.0049932861328125, + 0.005256958007812501, + 0.0055059814453125005, + 0.005740356445312501, + 0.005960083007812499, + 0.0061651611328125, + 0.0063555908203125, + 0.0065313720703125, + 0.0066925048828124995, + 0.0068389892578125, + 0.0069708251953125005, + 0.0070880126953125, + 0.0071905517578125, + 0.0072784423828125, + 0.007351684570312499, + 0.007410278320312501, + 0.007454223632812499, + 0.007483520507812499, + 0.0074981689453125, + 0.0074981689453125, + 0.0074835205078125, + 0.007454223632812501, + 0.0074102783203125, + 0.007351684570312499, + 0.0072784423828125, + 0.0071905517578125, + 0.007088012695312501, + 0.0069708251953125, + 0.0068389892578125, + 0.0066925048828124995, + 0.0065313720703125, + 0.0063555908203125, + 0.0061651611328125, + 0.0059600830078125, + 0.005740356445312501, + 0.005505981445312499, + 0.0052569580078125, + 0.004993286132812499, + 0.004714965820312499, + 0.0044219970703125, + 0.0041143798828125, + 0.0037921142578124997, + 0.0034552001953125, + 0.0031036376953124997, + 0.0027374267578125, + 0.0023565673828125, + 0.0019610595703124997, + 0.0015509033203124998, + 0.0011260986328125, + 0.0006866455078125, + 0.0002325439453125 + ], + "history": [ + { + "step": 2076, + "residual": 0.2905263379364549 + }, + { + "step": 4152, + "residual": 0.17462346717174204 + }, + { + "step": 6228, + "residual": 0.1035978444049743 + }, + { + "step": 8304, + "residual": 0.062371918099544635 + }, + { + "step": 10380, + "residual": 0.037663169290918015 + }, + { + "step": 12456, + "residual": 0.02272314588248638 + }, + { + "step": 14532, + "residual": 0.013755452372547893 + }, + { + "step": 16608, + "residual": 0.008332577465801785 + }, + { + "step": 18684, + "residual": 0.005043824651993849 + }, + { + "step": 20760, + "residual": 0.0030473158949083654 + }, + { + "step": 22836, + "residual": 0.0018425335061717063 + }, + { + "step": 24912, + "residual": 0.001104378382804165 + }, + { + "step": 26988, + "residual": 0.0006612133811008524 + }, + { + "step": 29064, + "residual": 0.0003921061932562846 + }, + { + "step": 31140, + "residual": 0.00021449404102801066 + }, + { + "step": 33216, + "residual": 7.718901824269877e-05 + }, + { + "step": 35292, + "residual": 2.039770464193431e-05 + }, + { + "step": 37368, + "residual": 3.7383188280291845e-06 + } + ], + "seconds": 2.571909101010533, + "passed": false + } + ], + "diagnostic": [ + { + "height": 64, + "collision": "SRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.03, + "force_density": 5.859375e-06, + "re": 19.2, + "ma": 0.05196152422706631, + "steps": 35292, + "diffusion_times": 8.503859338946427, + "relative_l2": 0.00045954245764063303, + "relative_l2_limit": 0.0015, + "mass_drift": 7.4468149424689045e-09, + "max_transverse": 1.8599166504646769e-09, + "steady_residual": 0.0, + "profile": [ + 0.0009261336698607297, + 0.0027420733389089667, + 0.004499421471619854, + 0.006198181106931408, + 0.00783835195996046, + 0.009419934484832342, + 0.010942931240359824, + 0.012407334441019366, + 0.013813157835223357, + 0.015160394866921657, + 0.016449048421104843, + 0.01767911426675437, + 0.018850599186769755, + 0.019963498430572733, + 0.0210178430270915, + 0.022013609877847295, + 0.022950787963194996, + 0.02382938941364377, + 0.02464941973252684, + 0.02541088736325076, + 0.026113781674543392, + 0.02675810952465484, + 0.027343842699078483, + 0.02787100509130524, + 0.02833959787386987, + 0.028749623385056967, + 0.029101075664349024, + 0.02939396723772544, + 0.029628287364651167, + 0.02980403229901383, + 0.02992119850782639, + 0.029979787051714255, + 0.02997978938394704, + 0.02992121431766866, + 0.029804061023490282, + 0.029628343606621924, + 0.029394039474252405, + 0.029101170419644714, + 0.02874974236277012, + 0.028339740600290406, + 0.0278711515137943, + 0.0273439826688912, + 0.02675825107828693, + 0.02611395067310868, + 0.02541108803774911, + 0.02464965944442451, + 0.023829647929517396, + 0.02295105327022831, + 0.02201387728255847, + 0.021018110183125348, + 0.019963765132262595, + 0.018850845072935305, + 0.01767934824701407, + 0.01644926984579791, + 0.015160601837422974, + 0.013813344910925477, + 0.012407502082602216, + 0.01094307453533852, + 0.009420065504750066, + 0.00783846406810698, + 0.006198269523451648, + 0.004499485033330327, + 0.002742111289860618, + 0.0009261464137210718 + ], + "analytic_profile": [ + 0.00093017578125, + 0.0027465820312500004, + 0.00450439453125, + 0.006203613281250001, + 0.007844238281249999, + 0.00942626953125, + 0.01094970703125, + 0.012414550781249999, + 0.01382080078125, + 0.015168457031249999, + 0.01645751953125, + 0.01768798828125, + 0.018859863281249997, + 0.01997314453125, + 0.021027832031250002, + 0.022023925781250002, + 0.022961425781250003, + 0.023840332031249994, + 0.02466064453125, + 0.02542236328125, + 0.02612548828125, + 0.026770019531249998, + 0.02735595703125, + 0.027883300781250002, + 0.02835205078125, + 0.02876220703125, + 0.02911376953125, + 0.029406738281249997, + 0.029641113281250003, + 0.029816894531249995, + 0.029934082031249996, + 0.02999267578125, + 0.02999267578125, + 0.02993408203125, + 0.029816894531250002, + 0.02964111328125, + 0.029406738281249997, + 0.02911376953125, + 0.02876220703125, + 0.028352050781250002, + 0.02788330078125, + 0.02735595703125, + 0.026770019531249998, + 0.02612548828125, + 0.02542236328125, + 0.02466064453125, + 0.02384033203125, + 0.022961425781250003, + 0.022023925781249995, + 0.02102783203125, + 0.019973144531249997, + 0.018859863281249997, + 0.01768798828125, + 0.01645751953125, + 0.015168457031249999, + 0.01382080078125, + 0.012414550781249999, + 0.01094970703125, + 0.00942626953125, + 0.007844238281249999, + 0.006203613281249999, + 0.00450439453125, + 0.00274658203125, + 0.00093017578125 + ], + "history": [ + { + "step": 2076, + "residual": 0.2884814505173015 + }, + { + "step": 4152, + "residual": 0.1742016538959916 + }, + { + "step": 6228, + "residual": 0.10563019689544578 + }, + { + "step": 8304, + "residual": 0.06405253199547858 + }, + { + "step": 10380, + "residual": 0.03884010945763738 + }, + { + "step": 12456, + "residual": 0.023552055439872568 + }, + { + "step": 14532, + "residual": 0.014280454942360908 + }, + { + "step": 16608, + "residual": 0.008660280845783706 + }, + { + "step": 18684, + "residual": 0.005249748862629501 + }, + { + "step": 20760, + "residual": 0.0031832377972668175 + }, + { + "step": 22836, + "residual": 0.0019319549799093974 + }, + { + "step": 24912, + "residual": 0.0011729768361619047 + }, + { + "step": 26988, + "residual": 0.0007088731041767971 + }, + { + "step": 29064, + "residual": 0.00043043724295163005 + }, + { + "step": 31140, + "residual": 0.00025887425408190794 + }, + { + "step": 33216, + "residual": 0.00011004180497398245 + }, + { + "step": 35292, + "residual": 0.0 + } + ], + "seconds": 2.0848807059810497, + "passed": true + }, + { + "height": 64, + "collision": "MRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.03, + "force_density": 5.859375e-06, + "re": 19.2, + "ma": 0.05196152422706631, + "steps": 43596, + "diffusion_times": 10.504767418698528, + "relative_l2": 7.757225479150884e-05, + "relative_l2_limit": 0.0015, + "mass_drift": 2.4987413780763745e-05, + "max_transverse": 2.980306547849345e-07, + "steady_residual": 1.8065370714027405e-05, + "profile": [ + 0.0009267955146847399, + 0.0027433091144370533, + 0.004501254721339427, + 0.006200651968613217, + 0.007841468689822599, + 0.009423686520602525, + 0.010947198212590764, + 0.012412121689783128, + 0.013818477944179569, + 0.01516627193002717, + 0.01645552104453637, + 0.01768620567245485, + 0.01885832099034791, + 0.019971883071182823, + 0.021026842589119913, + 0.022023106427049688, + 0.022960752023308294, + 0.023839848731238313, + 0.024660340024738703, + 0.025422150498823525, + 0.026125345502262056, + 0.02676999004314801, + 0.02735606544562953, + 0.02788358937714764, + 0.028352471192884244, + 0.028762626403767488, + 0.029114029798328455, + 0.0294068239504261, + 0.029641062256960057, + 0.029816733462115132, + 0.029933841104015133, + 0.02999239123276378, + 0.02999239516251887, + 0.0299338318236212, + 0.029816709554710746, + 0.02964101770347572, + 0.02940678883316336, + 0.029113980899130112, + 0.028762580854417276, + 0.02835242935440406, + 0.027883537889884964, + 0.027356014162124156, + 0.026769943261965568, + 0.02612528735603494, + 0.025422077427666338, + 0.024660310630399838, + 0.023839824555908894, + 0.022960719801556586, + 0.022023074768931172, + 0.021026806475680202, + 0.019971851402802374, + 0.01885827986967447, + 0.01768615670025593, + 0.01645547768860238, + 0.015166255081052482, + 0.013818458648034007, + 0.012412099984838991, + 0.010947184011448162, + 0.009423670971623471, + 0.007841469683046977, + 0.006200640099468928, + 0.004501255408864473, + 0.002743301592131694, + 0.0009267955802854462 + ], + "analytic_profile": [ + 0.00093017578125, + 0.0027465820312500004, + 0.00450439453125, + 0.006203613281250001, + 0.007844238281249999, + 0.00942626953125, + 0.01094970703125, + 0.012414550781249999, + 0.01382080078125, + 0.015168457031249999, + 0.01645751953125, + 0.01768798828125, + 0.018859863281249997, + 0.01997314453125, + 0.021027832031250002, + 0.022023925781250002, + 0.022961425781250003, + 0.023840332031249994, + 0.02466064453125, + 0.02542236328125, + 0.02612548828125, + 0.026770019531249998, + 0.02735595703125, + 0.027883300781250002, + 0.02835205078125, + 0.02876220703125, + 0.02911376953125, + 0.029406738281249997, + 0.029641113281250003, + 0.029816894531249995, + 0.029934082031249996, + 0.02999267578125, + 0.02999267578125, + 0.02993408203125, + 0.029816894531250002, + 0.02964111328125, + 0.029406738281249997, + 0.02911376953125, + 0.02876220703125, + 0.028352050781250002, + 0.02788330078125, + 0.02735595703125, + 0.026770019531249998, + 0.02612548828125, + 0.02542236328125, + 0.02466064453125, + 0.02384033203125, + 0.022961425781250003, + 0.022023925781249995, + 0.02102783203125, + 0.019973144531249997, + 0.018859863281249997, + 0.01768798828125, + 0.01645751953125, + 0.015168457031249999, + 0.01382080078125, + 0.012414550781249999, + 0.01094970703125, + 0.00942626953125, + 0.007844238281249999, + 0.006203613281249999, + 0.00450439453125, + 0.00274658203125, + 0.00093017578125 + ], + "history": [ + { + "step": 2076, + "residual": 0.28848582503497144 + }, + { + "step": 4152, + "residual": 0.17418318728910562 + }, + { + "step": 6228, + "residual": 0.10561685753794413 + }, + { + "step": 8304, + "residual": 0.06405390488601037 + }, + { + "step": 10380, + "residual": 0.03879075147161601 + }, + { + "step": 12456, + "residual": 0.023502132918661902 + }, + { + "step": 14532, + "residual": 0.014443922759525319 + }, + { + "step": 16608, + "residual": 0.008676785915328585 + }, + { + "step": 18684, + "residual": 0.005220152505133412 + }, + { + "step": 20760, + "residual": 0.0031328331147457604 + }, + { + "step": 22836, + "residual": 0.0018918875041265433 + }, + { + "step": 24912, + "residual": 0.001158820493296847 + }, + { + "step": 26988, + "residual": 0.0007062973091260488 + }, + { + "step": 29064, + "residual": 0.00042962397540944854 + }, + { + "step": 31140, + "residual": 0.0002622513510034511 + }, + { + "step": 33216, + "residual": 0.00018755538815105554 + }, + { + "step": 35292, + "residual": 0.00013498988402946022 + }, + { + "step": 37368, + "residual": 8.206544459462764e-05 + }, + { + "step": 39444, + "residual": 5.000252999963933e-05 + }, + { + "step": 41520, + "residual": 3.109413911422763e-05 + }, + { + "step": 43596, + "residual": 1.8065370714027405e-05 + } + ], + "seconds": 2.202074992994312, + "passed": true + } + ], + "baseline_passed": 16, + "baseline_cases": 18, + "layout_profiles_bitwise_equal": true + }, + "sah04_s2": { + "requested": { + "case": "S2", + "outlet": "neq_extrap", + "inlet_profile": "parabolic", + "inlet_scheme": "channel_stabilized", + "record_every": 5, + "smoke": false, + "steps_override": null, + "burn_override": null, + "gate_pct": 5.0 + }, + "rows": [ + { + "case_id": "S2", + "collision": "MRT", + "inlet_scheme": "channel_stabilized", + "inlet_profile": "parabolic", + "grid": { + "nx": 2402, + "ny": 62, + "diameter": 30, + "h_fluid": 60 + }, + "steps": 120000, + "burn_in": 45000, + "Re_nominal": 200.0, + "Re_real": 204.88089323043823, + "beta_nominal": 0.5, + "beta_real": 0.5, + "wall_gap_cells": 15.0, + "target_St": 0.3513, + "St": 0.3566902119173242, + "St_error_pct": 1.5343614908409322, + "gate_pct": 5.0, + "gate_pass": true, + "mean_Cd": 2.580107343342569, + "U_max_real": 0.10244044661521912, + "rho_min_final": 0.982046365737915, + "rho_max_final": 1.0512210130691528, + "n_curved": 292, + "fallback_links": 0, + "low_q_links": 72, + "n_lift_samples": 24000 + } + ], + "evaluation": { + "gate_pct": 5.0, + "cases_total": 1, + "cases_completed": 1, + "cases_failed": 0, + "cases_within_gate": 1, + "pass_gate_all_completed": true + }, + "unguided_dominant_st": 0.3566902119173242 + }, + "kan99b_k2_double_buffer": { + "contract": { + "collision": "MRT", + "primary_inlet_scheme": "regularized", + "k2_control_inlet_scheme": "zou_he_local", + "inlet_profile": "uniform", + "y_wall_bc": "free_slip", + "outlet_mode": "neq_extrap", + "streaming": "double_buffer", + "store_precision": "FP32", + "les_enabled": false + }, + "requested": { + "case": "K2", + "include_k0": false, + "include_k2_control": false, + "domain": "M", + "smoke": false, + "steps_override": 0, + "burn_override": 0, + "record_every": 100, + "field_every": 0, + "save_vorticity": false + }, + "counts": { + "requested_runs": 1, + "completed_runs": 1, + "failed_runs": 0 + }, + "k2_gate": [ + { + "run_id": "k2_baseline_domM_re100_a1p000_regularized_mrt", + "variant": "baseline", + "inlet_scheme": "regularized", + "rel_err": { + "St": 0.025021087219073212, + "mean_cl": 0.03674720642765572, + "mean_cd": 0.03807060246730365, + "amp_cl": 0.022118392645478612, + "amp_cd": 0.003840347791096809 + }, + "pass_bands": { + "St": true, + "mean_cl": true, + "mean_cd": true, + "amp_cl": true, + "amp_cd": true + }, + "pass_all": true + } + ], + "rows": [ + { + "run_id": "k2_baseline_domM_re100_a1p000_regularized_mrt", + "case_id": "K2", + "variant": "baseline", + "collision": "MRT", + "inlet_scheme": "regularized", + "inlet_profile": "uniform", + "domain": "M", + "re": 100.0, + "alpha": 1.0, + "omega_body": 0.002, + "nu": 0.009, + "steps": 200000, + "burn_in": 80000, + "total_steps": 280000, + "record_every": 100, + "n_samples": 2800, + "St": 0.16964098993475663, + "st": 0.16964098993475663, + "mean_cl": -2.5795307243126504, + "mean_cd": 1.1460299451239033, + "amp_cl": 0.3550688116304267, + "amp_cd": 0.09891865346434409, + "rho_min_final": 0.9944697618484497, + "rho_max_final": 1.0029971599578857, + "grid": { + "nx": 1351, + "ny": 601, + "diameter": 30 + }, + "beta_real": null, + "Re_real": null, + "re_real": null, + "force_csv": "classic-signals.npz:kan99b_double_buffer", + "field_snapshots": [], + "St_error_pct": 2.5021087219073213 + } + ] + }, + "kan99b_k2_esopull": { + "contract": { + "collision": "MRT", + "primary_inlet_scheme": "regularized", + "k2_control_inlet_scheme": "zou_he_local", + "inlet_profile": "uniform", + "y_wall_bc": "free_slip", + "outlet_mode": "neq_extrap", + "streaming": "esopull", + "store_precision": "FP32", + "les_enabled": false + }, + "requested": { + "case": "K2", + "include_k0": false, + "include_k2_control": false, + "domain": "M", + "smoke": false, + "steps_override": 0, + "burn_override": 0, + "record_every": 100, + "field_every": 0, + "save_vorticity": false + }, + "counts": { + "requested_runs": 1, + "completed_runs": 1, + "failed_runs": 0 + }, + "k2_gate": [ + { + "run_id": "k2_baseline_domM_re100_a1p000_regularized_mrt", + "variant": "baseline", + "inlet_scheme": "regularized", + "rel_err": { + "St": 0.161023936568909, + "mean_cl": 0.06569534231319397, + "mean_cd": 0.2542380873914751, + "amp_cl": 0.6020366223510236, + "amp_cd": 0.10788675731690875 + }, + "pass_bands": { + "St": false, + "mean_cl": false, + "mean_cd": false, + "amp_cl": false, + "amp_cd": false + }, + "pass_all": false + } + ], + "rows": [ + { + "run_id": "k2_baseline_domM_re100_a1p000_regularized_mrt", + "case_id": "K2", + "variant": "baseline", + "collision": "MRT", + "inlet_scheme": "regularized", + "inlet_profile": "uniform", + "domain": "M", + "re": 100.0, + "alpha": 1.0, + "omega_body": 0.002, + "nu": 0.009, + "steps": 200000, + "burn_in": 80000, + "total_steps": 280000, + "record_every": 100, + "n_samples": 2800, + "St": 0.13885053849784557, + "st": 0.13885053849784557, + "mean_cl": -2.3246434187905423, + "mean_cd": 0.8233211515198116, + "amp_cl": 0.1445005024243433, + "amp_cd": 0.11001315500156904, + "rho_min_final": 0.9497085809707642, + "rho_max_final": 1.046873688697815, + "grid": { + "nx": 1351, + "ny": 601, + "diameter": 30 + }, + "beta_real": null, + "Re_real": null, + "re_real": null, + "force_csv": "classic-signals.npz:kan99b_esopull", + "field_snapshots": [], + "St_error_pct": 16.1023936568909 + } + ] + }, + "source_sha256": { + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/checkpoint.py": "3a321349072ab670be0e39dcb351d122773bc74dac6e08b91825813dcd90c6a2", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/config.py": "4eb628f3858fc3310d2c620c915dc9cc3ab64aecae3ab4151604508b14df40de", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/cuda/compiler_v2.py": "d0de8c04a65678610d631ba88e284a53ea1815bc070c2cf9722fac6dcb2e779c", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/field.py": "c096791ff0b16f3871f44bde7e26009cc33b1d37a6d88948821bbba2be5df35e", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "971113d1cc027f4da909ce42dfdf29237e7c413e4591edf4ceeae28e6df3ba5e", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "9386216086ea6499e9a1d0cd8375c3f6d02b18b751eb75f531916f608bc88c61", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "337398c3a6996aa69a9aa4e56ce072e25ca8bac3bf86e90036fe80d3254b619f", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "5bcc192e2c38371d4b24b6725f75fec7d00364557c4b4536b064edf2ec9c75c5", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "f0b81fc33bce9a6750cc253e4363bde3f1707f53f8e362c4b1530ecc9875b86e", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "2ef486f68b4f572a53401cbbf9bbc19685f7877a5c26d3cedbe1f03a5c5563c2", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "1aedad5549d0ee9e6618967e9e3a1b44a5442180758cf515f8ff1006f4385a4a", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "9bbf48e0c907dc5e0bf9e8fb653acd09f49ebed7208dd595c802d07f7439e289", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "ea374771309d46c943ebc9a4053c23536a924db37f302fcd3641f47cfa6bec09", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "c720e66784e48d9ae06928b56de91d1a067915eead8bb6a05e3f67fb67239dd8", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/stepper.py": "fd2d307f756b4bfae00ad89a3d2b45b0f9ad45b5689eb0707cebab9e64c32cce", + "src/CelerisLab/simulation.py": "092e42957b3595953f9f9e3f0538956e373dc6eb955829aac5260be21821ca15" + }, + "boundary_isolation": { + "periodic_and_zou_he": [ + { + "periodic": true, + "omega": 0.0, + "steps": 1, + "max": 0.0, + "nearbody": 0.0, + "interior": 0.0, + "inlet": 0.0, + "outlet": 0.0, + "location": [ + 0, + 0, + 0 + ], + "force_db": [ + 0.3231127858161926, + 0.0006829835474491119 + ], + "force_eso": [ + 0.32311302423477173, + 0.0006830133497714996 + ] + }, + { + "periodic": true, + "omega": 0.0, + "steps": 2, + "max": 0.0, + "nearbody": 0.0, + "interior": 0.0, + "inlet": 0.0, + "outlet": 0.0, + "location": [ + 0, + 0, + 0 + ], + "force_db": [ + 0.1272737681865692, + 9.258463978767395e-05 + ], + "force_eso": [ + 0.12727370858192444, + 9.254738688468933e-05 + ] + }, + { + "periodic": true, + "omega": 0.0, + "steps": 5, + "max": 0.0, + "nearbody": 0.0, + "interior": 0.0, + "inlet": 0.0, + "outlet": 0.0, + "location": [ + 0, + 0, + 0 + ], + "force_db": [ + 0.14945054054260254, + -0.0003370940685272217 + ], + "force_eso": [ + 0.1494506299495697, + -0.0003371238708496094 + ] + }, + { + "periodic": true, + "omega": 0.0, + "steps": 20, + "max": 0.0, + "nearbody": 0.0, + "interior": 0.0, + "inlet": 0.0, + "outlet": 0.0, + "location": [ + 0, + 0, + 0 + ], + "force_db": [ + 0.0558132529258728, + 0.0007205866277217865 + ], + "force_eso": [ + 0.055812932550907135, + 0.0007206276059150696 + ] + }, + { + "periodic": true, + "omega": 0.002, + "steps": 1, + "max": 0.0, + "nearbody": 0.0, + "interior": 0.0, + "inlet": 0.0, + "outlet": 0.0, + "location": [ + 0, + 0, + 0 + ], + "force_db": [ + 0.3231116533279419, + 0.0006855875253677368 + ], + "force_eso": [ + 0.32311180233955383, + 0.0006855949759483337 + ] + }, + { + "periodic": true, + "omega": 0.002, + "steps": 2, + "max": 0.0, + "nearbody": 0.0, + "interior": 0.0, + "inlet": 0.0, + "outlet": 0.0, + "location": [ + 0, + 0, + 0 + ], + "force_db": [ + 0.1272742748260498, + 0.0006444379687309265 + ], + "force_eso": [ + 0.1272745132446289, + 0.0006444379687309265 + ] + }, + { + "periodic": true, + "omega": 0.002, + "steps": 5, + "max": 0.0, + "nearbody": 0.0, + "interior": 0.0, + "inlet": 0.0, + "outlet": 0.0, + "location": [ + 0, + 0, + 0 + ], + "force_db": [ + 0.14945241808891296, + -0.00029569119215011597 + ], + "force_eso": [ + 0.14945228397846222, + -0.0002957284450531006 + ] + }, + { + "periodic": true, + "omega": 0.002, + "steps": 20, + "max": 0.0, + "nearbody": 0.0, + "interior": 0.0, + "inlet": 0.0, + "outlet": 0.0, + "location": [ + 0, + 0, + 0 + ], + "force_db": [ + 0.055816203355789185, + 2.9712915420532227e-05 + ], + "force_eso": [ + 0.055816441774368286, + 2.9735267162322998e-05 + ] + }, + { + "periodic": false, + "omega": 0.0, + "steps": 1, + "max": 6.72563910484314e-05, + "nearbody": 0.0, + "interior": 0.0, + "inlet": 0.0, + "outlet": 6.72563910484314e-05, + "location": [ + 2, + 1, + 63 + ], + "force_db": [ + 0.3231127858161926, + 0.0006829835474491119 + ], + "force_eso": [ + 0.32311302423477173, + 0.0006830133497714996 + ] + }, + { + "periodic": false, + "omega": 0.0, + "steps": 2, + "max": 0.0032902900129556656, + "nearbody": 0.0, + "interior": 0.0, + "inlet": 0.0, + "outlet": 0.0032902900129556656, + "location": [ + 8, + 1, + 63 + ], + "force_db": [ + 0.1272737681865692, + 9.258463978767395e-05 + ], + "force_eso": [ + 0.12727370858192444, + 9.254738688468933e-05 + ] + }, + { + "periodic": false, + "omega": 0.0, + "steps": 5, + "max": 0.0033904314041137695, + "nearbody": 0.0, + "interior": 7.3909759521484375e-06, + "inlet": 0.0008672624826431274, + "outlet": 0.0033904314041137695, + "location": [ + 0, + 3, + 62 + ], + "force_db": [ + 0.14945054054260254, + -0.0003370940685272217 + ], + "force_eso": [ + 0.14944982528686523, + -0.0003371238708496094 + ] + }, + { + "periodic": false, + "omega": 0.0, + "steps": 20, + "max": 0.0037473663687705994, + "nearbody": 0.0, + "interior": 0.0016987919807434082, + "inlet": 0.0013580713421106339, + "outlet": 0.0037473663687705994, + "location": [ + 3, + 26, + 62 + ], + "force_db": [ + 0.0558132529258728, + 0.0007205866277217865 + ], + "force_eso": [ + 0.055813103914260864, + 0.0007205754518508911 + ] + }, + { + "periodic": false, + "omega": 0.002, + "steps": 1, + "max": 6.72563910484314e-05, + "nearbody": 0.0, + "interior": 0.0, + "inlet": 0.0, + "outlet": 6.72563910484314e-05, + "location": [ + 2, + 1, + 63 + ], + "force_db": [ + 0.32311180233955383, + 0.0006855949759483337 + ], + "force_eso": [ + 0.32311180233955383, + 0.0006855949759483337 + ] + }, + { + "periodic": false, + "omega": 0.002, + "steps": 2, + "max": 0.0032902900129556656, + "nearbody": 0.0, + "interior": 0.0, + "inlet": 0.0, + "outlet": 0.0032902900129556656, + "location": [ + 8, + 1, + 63 + ], + "force_db": [ + 0.1272742748260498, + 0.0006444379687309265 + ], + "force_eso": [ + 0.1272742748260498, + 0.0006444379687309265 + ] + }, + { + "periodic": false, + "omega": 0.002, + "steps": 5, + "max": 0.0033904314041137695, + "nearbody": 0.0, + "interior": 7.3909759521484375e-06, + "inlet": 0.0008672624826431274, + "outlet": 0.0033904314041137695, + "location": [ + 0, + 3, + 62 + ], + "force_db": [ + 0.14945241808891296, + -0.00029569119215011597 + ], + "force_eso": [ + 0.14945228397846222, + -0.0002957284450531006 + ] + }, + { + "periodic": false, + "omega": 0.002, + "steps": 20, + "max": 0.0037473663687705994, + "nearbody": 0.0, + "interior": 0.0016987919807434082, + "inlet": 0.0013580713421106339, + "outlet": 0.0037473663687705994, + "location": [ + 3, + 26, + 62 + ], + "force_db": [ + 0.055816203355789185, + 2.9712915420532227e-05 + ], + "force_eso": [ + 0.05581572651863098, + 2.9772520065307617e-05 + ] + } + ], + "regularized": [ + { + "periodic": false, + "omega": 0.0, + "steps": 1, + "max": 6.794184446334839e-05, + "nearbody": 0.0, + "interior": 0.0, + "inlet": 6.794184446334839e-05, + "outlet": 6.72563910484314e-05, + "location": [ + 1, + 29, + 0 + ], + "force_db": [ + 0.3231127858161926, + 0.0006829835474491119 + ], + "force_eso": [ + 0.32311302423477173, + 0.0006830133497714996 + ] + }, + { + "periodic": false, + "omega": 0.0, + "steps": 2, + "max": 0.0032902900129556656, + "nearbody": 0.0, + "interior": 0.0, + "inlet": 0.0028591305017471313, + "outlet": 0.0032902900129556656, + "location": [ + 8, + 1, + 63 + ], + "force_db": [ + 0.1272737681865692, + 9.258463978767395e-05 + ], + "force_eso": [ + 0.12727370858192444, + 9.254738688468933e-05 + ] + }, + { + "periodic": false, + "omega": 0.0, + "steps": 5, + "max": 0.004133343696594238, + "nearbody": 0.0, + "interior": 9.059906005859375e-06, + "inlet": 0.004133343696594238, + "outlet": 0.0033904314041137695, + "location": [ + 0, + 30, + 1 + ], + "force_db": [ + 0.14945054054260254, + -0.0003370940685272217 + ], + "force_eso": [ + 0.1494506299495697, + -0.0003371238708496094 + ] + }, + { + "periodic": false, + "omega": 0.0, + "steps": 20, + "max": 0.006804183125495911, + "nearbody": 0.0, + "interior": 0.0016987919807434082, + "inlet": 0.006804183125495911, + "outlet": 0.0037473663687705994, + "location": [ + 1, + 1, + 0 + ], + "force_db": [ + 0.0558132529258728, + 0.0007205866277217865 + ], + "force_eso": [ + 0.055812932550907135, + 0.0007206276059150696 + ] + }, + { + "periodic": false, + "omega": 0.002, + "steps": 1, + "max": 6.794184446334839e-05, + "nearbody": 0.0, + "interior": 0.0, + "inlet": 6.794184446334839e-05, + "outlet": 6.72563910484314e-05, + "location": [ + 1, + 29, + 0 + ], + "force_db": [ + 0.3231116533279419, + 0.0006855875253677368 + ], + "force_eso": [ + 0.32311180233955383, + 0.0006855949759483337 + ] + }, + { + "periodic": false, + "omega": 0.002, + "steps": 2, + "max": 0.0032902900129556656, + "nearbody": 0.0, + "interior": 0.0, + "inlet": 0.0028591305017471313, + "outlet": 0.0032902900129556656, + "location": [ + 8, + 1, + 63 + ], + "force_db": [ + 0.1272742748260498, + 0.0006444379687309265 + ], + "force_eso": [ + 0.1272742748260498, + 0.0006444379687309265 + ] + }, + { + "periodic": false, + "omega": 0.002, + "steps": 5, + "max": 0.004133343696594238, + "nearbody": 0.0, + "interior": 9.059906005859375e-06, + "inlet": 0.004133343696594238, + "outlet": 0.0033904314041137695, + "location": [ + 0, + 30, + 1 + ], + "force_db": [ + 0.14945241808891296, + -0.00029569119215011597 + ], + "force_eso": [ + 0.14945228397846222, + -0.0002957284450531006 + ] + }, + { + "periodic": false, + "omega": 0.002, + "steps": 20, + "max": 0.006804183125495911, + "nearbody": 0.0, + "interior": 0.0016987919807434082, + "inlet": 0.006804183125495911, + "outlet": 0.0037473663687705994, + "location": [ + 1, + 1, + 0 + ], + "force_db": [ + 0.055816203355789185, + 2.9712915420532227e-05 + ], + "force_eso": [ + 0.055816203355789185, + 2.9712915420532227e-05 + ] + } + ], + "regression": "2 passed, 2 strict xfailed; open-boundary failures remain unfixed" + }, + "validation_runner_sha256": { + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00" + }, + "simplification_regression": { + "passed": 141, + "subtests_passed": 8, + "seconds": 77.58, + "gpu": 0 + }, + "d2_followup": { + "poiseuille": { + "package": "/home/frank14f/CelerisLab/src/CelerisLab/__init__.py", + "cuda_visible_devices": "1", + "device_id": 0, + "reference": "ref/lbmpy/tests/poiseuille.py", + "results": [ + { + "height": 16, + "collision": "SRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.03, + "force_density": 9.375e-05, + "re": 4.8, + "ma": 0.05196152422706631, + "steps": 2730, + "diffusion_times": 10.525007818349199, + "relative_l2": 0.002799706487109596, + "relative_l2_limit": 0.01, + "mass_drift": 7.518664801864361e-09, + "max_transverse": 2.3719621681755437e-09, + "steady_residual": 1.0459841868160935e-05, + "profile": [ + 0.003571814197816471, + 0.010134196507667972, + 0.01575908574030793, + 0.0204464893770341, + 0.02419640663418603, + 0.027008831688127805, + 0.028883776006727615, + 0.029821241151624957, + 0.029821240447057643, + 0.028883776022279244, + 0.027008810424881086, + 0.024196375462344082, + 0.020446462260000253, + 0.015759069673445703, + 0.010134192200503872, + 0.0035718146052010624 + ], + "analytic_profile": [ + 0.0036328124999999998, + 0.0101953125, + 0.0158203125, + 0.0205078125, + 0.0242578125, + 0.027070312500000002, + 0.028945312499999997, + 0.029882812499999998, + 0.029882812499999998, + 0.028945312499999997, + 0.027070312500000002, + 0.0242578125, + 0.0205078125, + 0.0158203125, + 0.0101953125, + 0.0036328124999999998 + ], + "history": [ + { + "step": 130, + "residual": 0.2878048051460747 + }, + { + "step": 260, + "residual": 0.17426911343159265 + }, + { + "step": 390, + "residual": 0.10546468355080464 + }, + { + "step": 520, + "residual": 0.0638257552082222 + }, + { + "step": 650, + "residual": 0.03862647258755094 + }, + { + "step": 780, + "residual": 0.02337579189520886 + }, + { + "step": 910, + "residual": 0.014146746973263583 + }, + { + "step": 1040, + "residual": 0.008561426329841505 + }, + { + "step": 1170, + "residual": 0.005181206406086535 + }, + { + "step": 1300, + "residual": 0.0031354726542277556 + }, + { + "step": 1430, + "residual": 0.0018978198183278294 + }, + { + "step": 1560, + "residual": 0.0011479873886740162 + }, + { + "step": 1690, + "residual": 0.0006951450610510553 + }, + { + "step": 1820, + "residual": 0.000420588397959876 + }, + { + "step": 1950, + "residual": 0.00025450450793119793 + }, + { + "step": 2080, + "residual": 0.00015415564231798868 + }, + { + "step": 2210, + "residual": 9.284097481750565e-05 + }, + { + "step": 2340, + "residual": 5.692826586926697e-05 + }, + { + "step": 2470, + "residual": 3.45996659683643e-05 + }, + { + "step": 2600, + "residual": 2.0726190618412637e-05 + }, + { + "step": 2730, + "residual": 1.0459841868160935e-05 + } + ], + "seconds": 1.813364184985403, + "passed": true + }, + { + "height": 16, + "collision": "SRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.03, + "force_density": 9.375e-05, + "re": 4.8, + "ma": 0.05196152422706631, + "steps": 2730, + "diffusion_times": 10.525007818349199, + "relative_l2": 0.002799706487109596, + "relative_l2_limit": 0.01, + "mass_drift": 7.518664801864361e-09, + "max_transverse": 2.3719621681755437e-09, + "steady_residual": 1.0459841868160935e-05, + "profile": [ + 0.003571814197816471, + 0.010134196507667972, + 0.01575908574030793, + 0.0204464893770341, + 0.02419640663418603, + 0.027008831688127805, + 0.028883776006727615, + 0.029821241151624957, + 0.029821240447057643, + 0.028883776022279244, + 0.027008810424881086, + 0.024196375462344082, + 0.020446462260000253, + 0.015759069673445703, + 0.010134192200503872, + 0.0035718146052010624 + ], + "analytic_profile": [ + 0.0036328124999999998, + 0.0101953125, + 0.0158203125, + 0.0205078125, + 0.0242578125, + 0.027070312500000002, + 0.028945312499999997, + 0.029882812499999998, + 0.029882812499999998, + 0.028945312499999997, + 0.027070312500000002, + 0.0242578125, + 0.0205078125, + 0.0158203125, + 0.0101953125, + 0.0036328124999999998 + ], + "history": [ + { + "step": 130, + "residual": 0.2878048051460747 + }, + { + "step": 260, + "residual": 0.17426911343159265 + }, + { + "step": 390, + "residual": 0.10546468355080464 + }, + { + "step": 520, + "residual": 0.0638257552082222 + }, + { + "step": 650, + "residual": 0.03862647258755094 + }, + { + "step": 780, + "residual": 0.02337579189520886 + }, + { + "step": 910, + "residual": 0.014146746973263583 + }, + { + "step": 1040, + "residual": 0.008561426329841505 + }, + { + "step": 1170, + "residual": 0.005181206406086535 + }, + { + "step": 1300, + "residual": 0.0031354726542277556 + }, + { + "step": 1430, + "residual": 0.0018978198183278294 + }, + { + "step": 1560, + "residual": 0.0011479873886740162 + }, + { + "step": 1690, + "residual": 0.0006951450610510553 + }, + { + "step": 1820, + "residual": 0.000420588397959876 + }, + { + "step": 1950, + "residual": 0.00025450450793119793 + }, + { + "step": 2080, + "residual": 0.00015415564231798868 + }, + { + "step": 2210, + "residual": 9.284097481750565e-05 + }, + { + "step": 2340, + "residual": 5.692826586926697e-05 + }, + { + "step": 2470, + "residual": 3.45996659683643e-05 + }, + { + "step": 2600, + "residual": 2.0726190618412637e-05 + }, + { + "step": 2730, + "residual": 1.0459841868160935e-05 + } + ], + "seconds": 1.4149512999865692, + "passed": true + }, + { + "height": 16, + "collision": "TRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.03, + "force_density": 9.375e-05, + "re": 4.8, + "ma": 0.05196152422706631, + "steps": 2730, + "diffusion_times": 10.525007818349199, + "relative_l2": 2.875694805205679e-05, + "relative_l2_limit": 0.01, + "mass_drift": 7.420819514436516e-09, + "max_transverse": 1.084117676869864e-09, + "steady_residual": 1.2681079490640334e-05, + "profile": [ + 0.0036327292869031253, + 0.010195065194117968, + 0.015819909740837912, + 0.02050726353650097, + 0.02425712885273835, + 0.02706952030993295, + 0.0289444538491265, + 0.029881915629718234, + 0.02988191653190658, + 0.02894445106274034, + 0.027069517285498088, + 0.024257126175185967, + 0.020507261905492798, + 0.015819909733010774, + 0.010195063214213727, + 0.0036327280201631515 + ], + "analytic_profile": [ + 0.0036328124999999998, + 0.0101953125, + 0.0158203125, + 0.0205078125, + 0.0242578125, + 0.027070312500000002, + 0.028945312499999997, + 0.029882812499999998, + 0.029882812499999998, + 0.028945312499999997, + 0.027070312500000002, + 0.0242578125, + 0.0205078125, + 0.0158203125, + 0.0101953125, + 0.0036328124999999998 + ], + "history": [ + { + "step": 130, + "residual": 0.28803331094539764 + }, + { + "step": 260, + "residual": 0.17458926764096636 + }, + { + "step": 390, + "residual": 0.10579198284708476 + }, + { + "step": 520, + "residual": 0.06410324904334079 + }, + { + "step": 650, + "residual": 0.038841975760865545 + }, + { + "step": 780, + "residual": 0.023536018048343172 + }, + { + "step": 910, + "residual": 0.014261300601718992 + }, + { + "step": 1040, + "residual": 0.008641509609715813 + }, + { + "step": 1170, + "residual": 0.005236298518065204 + }, + { + "step": 1300, + "residual": 0.003172516591692521 + }, + { + "step": 1430, + "residual": 0.0019224324623150367 + }, + { + "step": 1560, + "residual": 0.001164991197850531 + }, + { + "step": 1690, + "residual": 0.0007059060669633253 + }, + { + "step": 1820, + "residual": 0.00042800647985940594 + }, + { + "step": 1950, + "residual": 0.0002590335488094803 + }, + { + "step": 2080, + "residual": 0.00015695074553266755 + }, + { + "step": 2210, + "residual": 9.5181478420129e-05 + }, + { + "step": 2340, + "residual": 5.75357744042225e-05 + }, + { + "step": 2470, + "residual": 3.5062464529560005e-05 + }, + { + "step": 2600, + "residual": 2.1292411441451214e-05 + }, + { + "step": 2730, + "residual": 1.2681079490640334e-05 + } + ], + "seconds": 1.6320477639965247, + "passed": true + }, + { + "height": 16, + "collision": "TRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.03, + "force_density": 9.375e-05, + "re": 4.8, + "ma": 0.05196152422706631, + "steps": 2730, + "diffusion_times": 10.525007818349199, + "relative_l2": 2.875694805205679e-05, + "relative_l2_limit": 0.01, + "mass_drift": 7.420819514436516e-09, + "max_transverse": 1.084117676869864e-09, + "steady_residual": 1.2681079490640334e-05, + "profile": [ + 0.0036327292869031253, + 0.010195065194117968, + 0.015819909740837912, + 0.02050726353650097, + 0.02425712885273835, + 0.02706952030993295, + 0.0289444538491265, + 0.029881915629718234, + 0.02988191653190658, + 0.02894445106274034, + 0.027069517285498088, + 0.024257126175185967, + 0.020507261905492798, + 0.015819909733010774, + 0.010195063214213727, + 0.0036327280201631515 + ], + "analytic_profile": [ + 0.0036328124999999998, + 0.0101953125, + 0.0158203125, + 0.0205078125, + 0.0242578125, + 0.027070312500000002, + 0.028945312499999997, + 0.029882812499999998, + 0.029882812499999998, + 0.028945312499999997, + 0.027070312500000002, + 0.0242578125, + 0.0205078125, + 0.0158203125, + 0.0101953125, + 0.0036328124999999998 + ], + "history": [ + { + "step": 130, + "residual": 0.28803331094539764 + }, + { + "step": 260, + "residual": 0.17458926764096636 + }, + { + "step": 390, + "residual": 0.10579198284708476 + }, + { + "step": 520, + "residual": 0.06410324904334079 + }, + { + "step": 650, + "residual": 0.038841975760865545 + }, + { + "step": 780, + "residual": 0.023536018048343172 + }, + { + "step": 910, + "residual": 0.014261300601718992 + }, + { + "step": 1040, + "residual": 0.008641509609715813 + }, + { + "step": 1170, + "residual": 0.005236298518065204 + }, + { + "step": 1300, + "residual": 0.003172516591692521 + }, + { + "step": 1430, + "residual": 0.0019224324623150367 + }, + { + "step": 1560, + "residual": 0.001164991197850531 + }, + { + "step": 1690, + "residual": 0.0007059060669633253 + }, + { + "step": 1820, + "residual": 0.00042800647985940594 + }, + { + "step": 1950, + "residual": 0.0002590335488094803 + }, + { + "step": 2080, + "residual": 0.00015695074553266755 + }, + { + "step": 2210, + "residual": 9.5181478420129e-05 + }, + { + "step": 2340, + "residual": 5.75357744042225e-05 + }, + { + "step": 2470, + "residual": 3.5062464529560005e-05 + }, + { + "step": 2600, + "residual": 2.1292411441451214e-05 + }, + { + "step": 2730, + "residual": 1.2681079490640334e-05 + } + ], + "seconds": 1.5360733779962175, + "passed": true + }, + { + "height": 16, + "collision": "MRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.03, + "force_density": 9.375e-05, + "re": 4.8, + "ma": 0.05196152422706631, + "steps": 2730, + "diffusion_times": 10.525007818349199, + "relative_l2": 0.0025193833157267542, + "relative_l2_limit": 0.01, + "mass_drift": 5.731598662350734e-08, + "max_transverse": 1.0316400054740334e-08, + "steady_residual": 1.263850182599013e-05, + "profile": [ + 0.0035780462157688118, + 0.010140389002503082, + 0.015765242253031272, + 0.0204526114010877, + 0.024202505327203538, + 0.0270149267192092, + 0.028889872056285508, + 0.029827328496373887, + 0.029827330315614086, + 0.028889871312738048, + 0.027014929625423595, + 0.024202508750824577, + 0.02045261292787992, + 0.015765241191643176, + 0.010140389779785763, + 0.0035780463812608385 + ], + "analytic_profile": [ + 0.0036328124999999998, + 0.0101953125, + 0.0158203125, + 0.0205078125, + 0.0242578125, + 0.027070312500000002, + 0.028945312499999997, + 0.029882812499999998, + 0.029882812499999998, + 0.028945312499999997, + 0.027070312500000002, + 0.0242578125, + 0.0205078125, + 0.0158203125, + 0.0101953125, + 0.0036328124999999998 + ], + "history": [ + { + "step": 130, + "residual": 0.28782790908514067 + }, + { + "step": 260, + "residual": 0.174300386884353 + }, + { + "step": 390, + "residual": 0.10549713018093845 + }, + { + "step": 520, + "residual": 0.06385330445048015 + }, + { + "step": 650, + "residual": 0.038647843623397966 + }, + { + "step": 780, + "residual": 0.023392077286150025 + }, + { + "step": 910, + "residual": 0.014158373028824034 + }, + { + "step": 1040, + "residual": 0.008569481533399296 + }, + { + "step": 1170, + "residual": 0.0051868970464712056 + }, + { + "step": 1300, + "residual": 0.0031394090379556804 + }, + { + "step": 1430, + "residual": 0.0019002213251335665 + }, + { + "step": 1560, + "residual": 0.0011494258746829302 + }, + { + "step": 1690, + "residual": 0.0006961794845713869 + }, + { + "step": 1820, + "residual": 0.0004222663339235465 + }, + { + "step": 1950, + "residual": 0.000254441571005016 + }, + { + "step": 2080, + "residual": 0.00015337928660265953 + }, + { + "step": 2210, + "residual": 9.353384670325012e-05 + }, + { + "step": 2340, + "residual": 5.6992107539449316e-05 + }, + { + "step": 2470, + "residual": 3.484816771312101e-05 + }, + { + "step": 2600, + "residual": 2.086459847572481e-05 + }, + { + "step": 2730, + "residual": 1.263850182599013e-05 + } + ], + "seconds": 1.7800924399925862, + "passed": true + }, + { + "height": 16, + "collision": "MRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.03, + "force_density": 9.375e-05, + "re": 4.8, + "ma": 0.05196152422706631, + "steps": 2730, + "diffusion_times": 10.525007818349199, + "relative_l2": 0.0025193833157267542, + "relative_l2_limit": 0.01, + "mass_drift": 5.731598662350734e-08, + "max_transverse": 1.0316400054740334e-08, + "steady_residual": 1.263850182599013e-05, + "profile": [ + 0.0035780462157688118, + 0.010140389002503082, + 0.015765242253031272, + 0.0204526114010877, + 0.024202505327203538, + 0.0270149267192092, + 0.028889872056285508, + 0.029827328496373887, + 0.029827330315614086, + 0.028889871312738048, + 0.027014929625423595, + 0.024202508750824577, + 0.02045261292787992, + 0.015765241191643176, + 0.010140389779785763, + 0.0035780463812608385 + ], + "analytic_profile": [ + 0.0036328124999999998, + 0.0101953125, + 0.0158203125, + 0.0205078125, + 0.0242578125, + 0.027070312500000002, + 0.028945312499999997, + 0.029882812499999998, + 0.029882812499999998, + 0.028945312499999997, + 0.027070312500000002, + 0.0242578125, + 0.0205078125, + 0.0158203125, + 0.0101953125, + 0.0036328124999999998 + ], + "history": [ + { + "step": 130, + "residual": 0.28782790908514067 + }, + { + "step": 260, + "residual": 0.174300386884353 + }, + { + "step": 390, + "residual": 0.10549713018093845 + }, + { + "step": 520, + "residual": 0.06385330445048015 + }, + { + "step": 650, + "residual": 0.038647843623397966 + }, + { + "step": 780, + "residual": 0.023392077286150025 + }, + { + "step": 910, + "residual": 0.014158373028824034 + }, + { + "step": 1040, + "residual": 0.008569481533399296 + }, + { + "step": 1170, + "residual": 0.0051868970464712056 + }, + { + "step": 1300, + "residual": 0.0031394090379556804 + }, + { + "step": 1430, + "residual": 0.0019002213251335665 + }, + { + "step": 1560, + "residual": 0.0011494258746829302 + }, + { + "step": 1690, + "residual": 0.0006961794845713869 + }, + { + "step": 1820, + "residual": 0.0004222663339235465 + }, + { + "step": 1950, + "residual": 0.000254441571005016 + }, + { + "step": 2080, + "residual": 0.00015337928660265953 + }, + { + "step": 2210, + "residual": 9.353384670325012e-05 + }, + { + "step": 2340, + "residual": 5.6992107539449316e-05 + }, + { + "step": 2470, + "residual": 3.484816771312101e-05 + }, + { + "step": 2600, + "residual": 2.086459847572481e-05 + }, + { + "step": 2730, + "residual": 1.263850182599013e-05 + } + ], + "seconds": 1.4055376279866323, + "passed": true + }, + { + "height": 32, + "collision": "SRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.015, + "force_density": 1.171875e-05, + "re": 4.8, + "ma": 0.025980762113533156, + "steps": 10380, + "diffusion_times": 10.004540398760502, + "relative_l2": 0.000780149256765261, + "relative_l2_limit": 0.003, + "mass_drift": 7.4411876660462895e-09, + "max_transverse": 2.5956978591474787e-09, + "steady_residual": 1.0903528878604553e-05, + "profile": [ + 0.0009151653227246929, + 0.002672840454473577, + 0.004313328662562868, + 0.005836630675806899, + 0.00724274733476979, + 0.008531676814872834, + 0.00970342950090171, + 0.010758010105952613, + 0.011695411362451395, + 0.012515642507239085, + 0.01321869105437823, + 0.013804564654676162, + 0.014273260305773883, + 0.014624780562041662, + 0.014859127032782951, + 0.01497630348377952, + 0.01497629954489127, + 0.014859119817844029, + 0.014624763329115857, + 0.01427324296882229, + 0.01380455044623163, + 0.013218683020086046, + 0.012515639494942565, + 0.011695417121095397, + 0.01075801447240774, + 0.009703436894042386, + 0.008531676927936044, + 0.007242740347050959, + 0.005836623080073482, + 0.004313323074242032, + 0.0026728374564815773, + 0.0009151645732213808 + ], + "analytic_profile": [ + 0.0009228515625, + 0.0026806640625, + 0.0043212890625, + 0.0058447265625, + 0.007250976562499999, + 0.0085400390625, + 0.0097119140625, + 0.0107666015625, + 0.011704101562500001, + 0.0125244140625, + 0.0132275390625, + 0.0138134765625, + 0.014282226562499998, + 0.0146337890625, + 0.014868164062500001, + 0.014985351562499999, + 0.014985351562499999, + 0.0148681640625, + 0.0146337890625, + 0.0142822265625, + 0.013813476562499998, + 0.0132275390625, + 0.012524414062500001, + 0.011704101562500001, + 0.0107666015625, + 0.009711914062499999, + 0.0085400390625, + 0.0072509765625, + 0.0058447265625, + 0.0043212890625, + 0.0026806640624999997, + 0.0009228515625 + ], + "history": [ + { + "step": 519, + "residual": 0.2882602963769065 + }, + { + "step": 1038, + "residual": 0.1741798430044709 + }, + { + "step": 1557, + "residual": 0.1055873695917836 + }, + { + "step": 2076, + "residual": 0.06401044748720629 + }, + { + "step": 2595, + "residual": 0.03880591335000284 + }, + { + "step": 3114, + "residual": 0.02352539589870147 + }, + { + "step": 3633, + "residual": 0.014261869506153952 + }, + { + "step": 4152, + "residual": 0.008645779793337178 + }, + { + "step": 4671, + "residual": 0.005241820613642954 + }, + { + "step": 5190, + "residual": 0.003177469667860243 + }, + { + "step": 5709, + "residual": 0.0019265541207326533 + }, + { + "step": 6228, + "residual": 0.001167666670098696 + }, + { + "step": 6747, + "residual": 0.0007076206641575654 + }, + { + "step": 7266, + "residual": 0.00042986891541188244 + }, + { + "step": 7785, + "residual": 0.0002605778358761455 + }, + { + "step": 8304, + "residual": 0.00015807677666675694 + }, + { + "step": 8823, + "residual": 9.578527195462091e-05 + }, + { + "step": 9342, + "residual": 5.647212168631071e-05 + }, + { + "step": 9861, + "residual": 3.0023114782125723e-05 + }, + { + "step": 10380, + "residual": 1.0903528878604553e-05 + } + ], + "seconds": 1.8707321120018605, + "passed": true + }, + { + "height": 32, + "collision": "SRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.015, + "force_density": 1.171875e-05, + "re": 4.8, + "ma": 0.025980762113533156, + "steps": 10380, + "diffusion_times": 10.004540398760502, + "relative_l2": 0.000780149256765261, + "relative_l2_limit": 0.003, + "mass_drift": 7.4411876660462895e-09, + "max_transverse": 2.5956978591474787e-09, + "steady_residual": 1.0903528878604553e-05, + "profile": [ + 0.0009151653227246929, + 0.002672840454473577, + 0.004313328662562868, + 0.005836630675806899, + 0.00724274733476979, + 0.008531676814872834, + 0.00970342950090171, + 0.010758010105952613, + 0.011695411362451395, + 0.012515642507239085, + 0.01321869105437823, + 0.013804564654676162, + 0.014273260305773883, + 0.014624780562041662, + 0.014859127032782951, + 0.01497630348377952, + 0.01497629954489127, + 0.014859119817844029, + 0.014624763329115857, + 0.01427324296882229, + 0.01380455044623163, + 0.013218683020086046, + 0.012515639494942565, + 0.011695417121095397, + 0.01075801447240774, + 0.009703436894042386, + 0.008531676927936044, + 0.007242740347050959, + 0.005836623080073482, + 0.004313323074242032, + 0.0026728374564815773, + 0.0009151645732213808 + ], + "analytic_profile": [ + 0.0009228515625, + 0.0026806640625, + 0.0043212890625, + 0.0058447265625, + 0.007250976562499999, + 0.0085400390625, + 0.0097119140625, + 0.0107666015625, + 0.011704101562500001, + 0.0125244140625, + 0.0132275390625, + 0.0138134765625, + 0.014282226562499998, + 0.0146337890625, + 0.014868164062500001, + 0.014985351562499999, + 0.014985351562499999, + 0.0148681640625, + 0.0146337890625, + 0.0142822265625, + 0.013813476562499998, + 0.0132275390625, + 0.012524414062500001, + 0.011704101562500001, + 0.0107666015625, + 0.009711914062499999, + 0.0085400390625, + 0.0072509765625, + 0.0058447265625, + 0.0043212890625, + 0.0026806640624999997, + 0.0009228515625 + ], + "history": [ + { + "step": 519, + "residual": 0.2882602963769065 + }, + { + "step": 1038, + "residual": 0.1741798430044709 + }, + { + "step": 1557, + "residual": 0.1055873695917836 + }, + { + "step": 2076, + "residual": 0.06401044748720629 + }, + { + "step": 2595, + "residual": 0.03880591335000284 + }, + { + "step": 3114, + "residual": 0.02352539589870147 + }, + { + "step": 3633, + "residual": 0.014261869506153952 + }, + { + "step": 4152, + "residual": 0.008645779793337178 + }, + { + "step": 4671, + "residual": 0.005241820613642954 + }, + { + "step": 5190, + "residual": 0.003177469667860243 + }, + { + "step": 5709, + "residual": 0.0019265541207326533 + }, + { + "step": 6228, + "residual": 0.001167666670098696 + }, + { + "step": 6747, + "residual": 0.0007076206641575654 + }, + { + "step": 7266, + "residual": 0.00042986891541188244 + }, + { + "step": 7785, + "residual": 0.0002605778358761455 + }, + { + "step": 8304, + "residual": 0.00015807677666675694 + }, + { + "step": 8823, + "residual": 9.578527195462091e-05 + }, + { + "step": 9342, + "residual": 5.647212168631071e-05 + }, + { + "step": 9861, + "residual": 3.0023114782125723e-05 + }, + { + "step": 10380, + "residual": 1.0903528878604553e-05 + } + ], + "seconds": 2.0296880270179827, + "passed": true + }, + { + "height": 32, + "collision": "TRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.015, + "force_density": 1.171875e-05, + "re": 4.8, + "ma": 0.025980762113533156, + "steps": 10380, + "diffusion_times": 10.004540398760502, + "relative_l2": 0.00010058095585801747, + "relative_l2_limit": 0.003, + "mass_drift": 7.35723371114716e-09, + "max_transverse": 3.883542348518773e-09, + "steady_residual": 1.3924339746809186e-05, + "profile": [ + 0.0009227822314536397, + 0.002680456941497137, + 0.004320944929274313, + 0.005844247988276556, + 0.007250362474280337, + 0.008539291369414326, + 0.009711037131540293, + 0.010765602552856761, + 0.01170298236067967, + 0.012523179707929473, + 0.01322620799028411, + 0.01381207087591135, + 0.014280755589590896, + 0.014632265831848864, + 0.014866607089434943, + 0.014983779456268324, + 0.01498377026098426, + 0.014866592633328995, + 0.0146322441796638, + 0.014280727773602604, + 0.013812037356087355, + 0.013226178299180668, + 0.012523146765423303, + 0.011702945229578066, + 0.010765559002717164, + 0.0097109994056633, + 0.008539258540992785, + 0.0072503338930859215, + 0.005844226362453722, + 0.00432092991188851, + 0.0026804487778570615, + 0.0009227797795450615 + ], + "analytic_profile": [ + 0.0009228515625, + 0.0026806640625, + 0.0043212890625, + 0.0058447265625, + 0.007250976562499999, + 0.0085400390625, + 0.0097119140625, + 0.0107666015625, + 0.011704101562500001, + 0.0125244140625, + 0.0132275390625, + 0.0138134765625, + 0.014282226562499998, + 0.0146337890625, + 0.014868164062500001, + 0.014985351562499999, + 0.014985351562499999, + 0.0148681640625, + 0.0146337890625, + 0.0142822265625, + 0.013813476562499998, + 0.0132275390625, + 0.012524414062500001, + 0.011704101562500001, + 0.0107666015625, + 0.009711914062499999, + 0.0085400390625, + 0.0072509765625, + 0.0058447265625, + 0.0043212890625, + 0.0026806640624999997, + 0.0009228515625 + ], + "history": [ + { + "step": 519, + "residual": 0.28831567045310763 + }, + { + "step": 1038, + "residual": 0.17426300768284883 + }, + { + "step": 1557, + "residual": 0.1056745496485929 + }, + { + "step": 2076, + "residual": 0.06407809651147704 + }, + { + "step": 2595, + "residual": 0.03885491713816356 + }, + { + "step": 3114, + "residual": 0.02356145455512296 + }, + { + "step": 3633, + "residual": 0.01428759072163264 + }, + { + "step": 4152, + "residual": 0.008664381177395463 + }, + { + "step": 4671, + "residual": 0.005254228270992071 + }, + { + "step": 5190, + "residual": 0.0031860617300601573 + }, + { + "step": 5709, + "residual": 0.0019320261487455357 + }, + { + "step": 6228, + "residual": 0.0011712565161373465 + }, + { + "step": 6747, + "residual": 0.0007102661882423618 + }, + { + "step": 7266, + "residual": 0.00043141399282712857 + }, + { + "step": 7785, + "residual": 0.0002617120188704865 + }, + { + "step": 8304, + "residual": 0.00015928460953685137 + }, + { + "step": 8823, + "residual": 9.590785072779178e-05 + }, + { + "step": 9342, + "residual": 5.865602946689298e-05 + }, + { + "step": 9861, + "residual": 3.3053246639438755e-05 + }, + { + "step": 10380, + "residual": 1.3924339746809186e-05 + } + ], + "seconds": 1.9823224339925218, + "passed": true + }, + { + "height": 32, + "collision": "TRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.015, + "force_density": 1.171875e-05, + "re": 4.8, + "ma": 0.025980762113533156, + "steps": 10380, + "diffusion_times": 10.004540398760502, + "relative_l2": 0.00010058095585801747, + "relative_l2_limit": 0.003, + "mass_drift": 7.35723371114716e-09, + "max_transverse": 3.883542348518773e-09, + "steady_residual": 1.3924339746809186e-05, + "profile": [ + 0.0009227822314536397, + 0.002680456941497137, + 0.004320944929274313, + 0.005844247988276556, + 0.007250362474280337, + 0.008539291369414326, + 0.009711037131540293, + 0.010765602552856761, + 0.01170298236067967, + 0.012523179707929473, + 0.01322620799028411, + 0.01381207087591135, + 0.014280755589590896, + 0.014632265831848864, + 0.014866607089434943, + 0.014983779456268324, + 0.01498377026098426, + 0.014866592633328995, + 0.0146322441796638, + 0.014280727773602604, + 0.013812037356087355, + 0.013226178299180668, + 0.012523146765423303, + 0.011702945229578066, + 0.010765559002717164, + 0.0097109994056633, + 0.008539258540992785, + 0.0072503338930859215, + 0.005844226362453722, + 0.00432092991188851, + 0.0026804487778570615, + 0.0009227797795450615 + ], + "analytic_profile": [ + 0.0009228515625, + 0.0026806640625, + 0.0043212890625, + 0.0058447265625, + 0.007250976562499999, + 0.0085400390625, + 0.0097119140625, + 0.0107666015625, + 0.011704101562500001, + 0.0125244140625, + 0.0132275390625, + 0.0138134765625, + 0.014282226562499998, + 0.0146337890625, + 0.014868164062500001, + 0.014985351562499999, + 0.014985351562499999, + 0.0148681640625, + 0.0146337890625, + 0.0142822265625, + 0.013813476562499998, + 0.0132275390625, + 0.012524414062500001, + 0.011704101562500001, + 0.0107666015625, + 0.009711914062499999, + 0.0085400390625, + 0.0072509765625, + 0.0058447265625, + 0.0043212890625, + 0.0026806640624999997, + 0.0009228515625 + ], + "history": [ + { + "step": 519, + "residual": 0.28831567045310763 + }, + { + "step": 1038, + "residual": 0.17426300768284883 + }, + { + "step": 1557, + "residual": 0.1056745496485929 + }, + { + "step": 2076, + "residual": 0.06407809651147704 + }, + { + "step": 2595, + "residual": 0.03885491713816356 + }, + { + "step": 3114, + "residual": 0.02356145455512296 + }, + { + "step": 3633, + "residual": 0.01428759072163264 + }, + { + "step": 4152, + "residual": 0.008664381177395463 + }, + { + "step": 4671, + "residual": 0.005254228270992071 + }, + { + "step": 5190, + "residual": 0.0031860617300601573 + }, + { + "step": 5709, + "residual": 0.0019320261487455357 + }, + { + "step": 6228, + "residual": 0.0011712565161373465 + }, + { + "step": 6747, + "residual": 0.0007102661882423618 + }, + { + "step": 7266, + "residual": 0.00043141399282712857 + }, + { + "step": 7785, + "residual": 0.0002617120188704865 + }, + { + "step": 8304, + "residual": 0.00015928460953685137 + }, + { + "step": 8823, + "residual": 9.590785072779178e-05 + }, + { + "step": 9342, + "residual": 5.865602946689298e-05 + }, + { + "step": 9861, + "residual": 3.3053246639438755e-05 + }, + { + "step": 10380, + "residual": 1.3924339746809186e-05 + } + ], + "seconds": 1.8744430810038466, + "passed": true + }, + { + "height": 32, + "collision": "MRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.015, + "force_density": 1.171875e-05, + "re": 4.8, + "ma": 0.025980762113533156, + "steps": 10380, + "diffusion_times": 10.004540398760502, + "relative_l2": 0.0006675991612912801, + "relative_l2_limit": 0.003, + "mass_drift": 3.106779409289828e-07, + "max_transverse": 4.642062348553134e-09, + "steady_residual": 1.9167430064843558e-05, + "profile": [ + 0.0009159774538506468, + 0.0026737134165456767, + 0.004314262529327218, + 0.005837626169071068, + 0.0072438045967728095, + 0.008532796983511415, + 0.009704608885447847, + 0.010759236256016554, + 0.011696681564474641, + 0.012516952828542554, + 0.013220048132047735, + 0.01380597160202877, + 0.014274715941832885, + 0.014626279584350933, + 0.014860652693073845, + 0.014977840345415288, + 0.014977839671334255, + 0.014860653658239987, + 0.014626278839840409, + 0.014274715180985689, + 0.01380596966791983, + 0.013220048133923412, + 0.012516952691544733, + 0.011696680315922454, + 0.010759235703436872, + 0.009704607695097836, + 0.008532796273929465, + 0.007243803784026235, + 0.005837625686697682, + 0.004314262337762159, + 0.0026737130189823585, + 0.0009159772536895709 + ], + "analytic_profile": [ + 0.0009228515625, + 0.0026806640625, + 0.0043212890625, + 0.0058447265625, + 0.007250976562499999, + 0.0085400390625, + 0.0097119140625, + 0.0107666015625, + 0.011704101562500001, + 0.0125244140625, + 0.0132275390625, + 0.0138134765625, + 0.014282226562499998, + 0.0146337890625, + 0.014868164062500001, + 0.014985351562499999, + 0.014985351562499999, + 0.0148681640625, + 0.0146337890625, + 0.0142822265625, + 0.013813476562499998, + 0.0132275390625, + 0.012524414062500001, + 0.011704101562500001, + 0.0107666015625, + 0.009711914062499999, + 0.0085400390625, + 0.0072509765625, + 0.0058447265625, + 0.0043212890625, + 0.0026806640624999997, + 0.0009228515625 + ], + "history": [ + { + "step": 519, + "residual": 0.28826441318525703 + }, + { + "step": 1038, + "residual": 0.17418904068758637 + }, + { + "step": 1557, + "residual": 0.1056030723483632 + }, + { + "step": 2076, + "residual": 0.06402249633571805 + }, + { + "step": 2595, + "residual": 0.038814130110982954 + }, + { + "step": 3114, + "residual": 0.023531212757678714 + }, + { + "step": 3633, + "residual": 0.0142667509038799 + }, + { + "step": 4152, + "residual": 0.008647843154244116 + }, + { + "step": 4671, + "residual": 0.00524317086611869 + }, + { + "step": 5190, + "residual": 0.0031806078693798544 + }, + { + "step": 5709, + "residual": 0.0019218114437229014 + }, + { + "step": 6228, + "residual": 0.0011767366911201065 + }, + { + "step": 6747, + "residual": 0.0007132863897788062 + }, + { + "step": 7266, + "residual": 0.00043150074798141175 + }, + { + "step": 7785, + "residual": 0.00025801536529790364 + }, + { + "step": 8304, + "residual": 0.00015592191557233488 + }, + { + "step": 8823, + "residual": 9.406050251735099e-05 + }, + { + "step": 9342, + "residual": 5.6622804259090824e-05 + }, + { + "step": 9861, + "residual": 3.16918600294331e-05 + }, + { + "step": 10380, + "residual": 1.9167430064843558e-05 + } + ], + "seconds": 1.543755140999565, + "passed": true + }, + { + "height": 32, + "collision": "MRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.015, + "force_density": 1.171875e-05, + "re": 4.8, + "ma": 0.025980762113533156, + "steps": 10380, + "diffusion_times": 10.004540398760502, + "relative_l2": 0.0006675991612912801, + "relative_l2_limit": 0.003, + "mass_drift": 3.106779409289828e-07, + "max_transverse": 4.642062348553134e-09, + "steady_residual": 1.9167430064843558e-05, + "profile": [ + 0.0009159774538506468, + 0.0026737134165456767, + 0.004314262529327218, + 0.005837626169071068, + 0.0072438045967728095, + 0.008532796983511415, + 0.009704608885447847, + 0.010759236256016554, + 0.011696681564474641, + 0.012516952828542554, + 0.013220048132047735, + 0.01380597160202877, + 0.014274715941832885, + 0.014626279584350933, + 0.014860652693073845, + 0.014977840345415288, + 0.014977839671334255, + 0.014860653658239987, + 0.014626278839840409, + 0.014274715180985689, + 0.01380596966791983, + 0.013220048133923412, + 0.012516952691544733, + 0.011696680315922454, + 0.010759235703436872, + 0.009704607695097836, + 0.008532796273929465, + 0.007243803784026235, + 0.005837625686697682, + 0.004314262337762159, + 0.0026737130189823585, + 0.0009159772536895709 + ], + "analytic_profile": [ + 0.0009228515625, + 0.0026806640625, + 0.0043212890625, + 0.0058447265625, + 0.007250976562499999, + 0.0085400390625, + 0.0097119140625, + 0.0107666015625, + 0.011704101562500001, + 0.0125244140625, + 0.0132275390625, + 0.0138134765625, + 0.014282226562499998, + 0.0146337890625, + 0.014868164062500001, + 0.014985351562499999, + 0.014985351562499999, + 0.0148681640625, + 0.0146337890625, + 0.0142822265625, + 0.013813476562499998, + 0.0132275390625, + 0.012524414062500001, + 0.011704101562500001, + 0.0107666015625, + 0.009711914062499999, + 0.0085400390625, + 0.0072509765625, + 0.0058447265625, + 0.0043212890625, + 0.0026806640624999997, + 0.0009228515625 + ], + "history": [ + { + "step": 519, + "residual": 0.28826441318525703 + }, + { + "step": 1038, + "residual": 0.17418904068758637 + }, + { + "step": 1557, + "residual": 0.1056030723483632 + }, + { + "step": 2076, + "residual": 0.06402249633571805 + }, + { + "step": 2595, + "residual": 0.038814130110982954 + }, + { + "step": 3114, + "residual": 0.023531212757678714 + }, + { + "step": 3633, + "residual": 0.0142667509038799 + }, + { + "step": 4152, + "residual": 0.008647843154244116 + }, + { + "step": 4671, + "residual": 0.00524317086611869 + }, + { + "step": 5190, + "residual": 0.0031806078693798544 + }, + { + "step": 5709, + "residual": 0.0019218114437229014 + }, + { + "step": 6228, + "residual": 0.0011767366911201065 + }, + { + "step": 6747, + "residual": 0.0007132863897788062 + }, + { + "step": 7266, + "residual": 0.00043150074798141175 + }, + { + "step": 7785, + "residual": 0.00025801536529790364 + }, + { + "step": 8304, + "residual": 0.00015592191557233488 + }, + { + "step": 8823, + "residual": 9.406050251735099e-05 + }, + { + "step": 9342, + "residual": 5.6622804259090824e-05 + }, + { + "step": 9861, + "residual": 3.16918600294331e-05 + }, + { + "step": 10380, + "residual": 1.9167430064843558e-05 + } + ], + "seconds": 1.8498127639759332, + "passed": true + }, + { + "height": 64, + "collision": "SRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.0075, + "force_density": 1.46484375e-06, + "re": 4.8, + "ma": 0.012990381056766578, + "steps": 35292, + "diffusion_times": 8.503859338946427, + "relative_l2": 0.0003963696916771394, + "relative_l2_limit": 0.0015, + "mass_drift": 7.471121721280838e-09, + "max_transverse": 2.4133441721387433e-09, + "steady_residual": 1.6901519426561357e-05, + "profile": [ + 0.0002315500066595129, + 0.0006855678148152185, + 0.0011249373897331114, + 0.0015496590139576145, + 0.0019597333643966504, + 0.0023551597572840244, + 0.0027359382066502375, + 0.003102068916835336, + 0.003453553924357987, + 0.00379039100436295, + 0.004112580126565679, + 0.004420123121285932, + 0.004713018279590703, + 0.004991264022842769, + 0.005254863551546779, + 0.005503816900629029, + 0.005738125409129715, + 0.005957787469133619, + 0.0061628021226289844, + 0.006353174409769752, + 0.006528901243027017, + 0.006689983082032009, + 0.006836417841067422, + 0.0069682137795022475, + 0.0070853628644593466, + 0.00718786865358165, + 0.007275728750888121, + 0.00734894478781432, + 0.00740751467446019, + 0.007451442779218801, + 0.007480725013356117, + 0.0074953641242673, + 0.007495363950080606, + 0.007480725071863139, + 0.007451442489624011, + 0.0074075147331596584, + 0.007348944730087895, + 0.007275728925167007, + 0.007187871155497765, + 0.0070853673474802585, + 0.006968217969934121, + 0.006836423603576068, + 0.006689988669596258, + 0.006528908927406097, + 0.006353182035233292, + 0.006162808469861912, + 0.005957788106432249, + 0.005738123544524922, + 0.00550381358309022, + 0.005254855372283201, + 0.004991251187275102, + 0.004713002010013788, + 0.004420104380298641, + 0.004112559142082237, + 0.003790368623145182, + 0.0034535308454085186, + 0.0031020465067386387, + 0.0027359173978274746, + 0.002355140316031988, + 0.0019597154657521507, + 0.0015496436761840676, + 0.0011249257335794315, + 0.0006855606734550381, + 0.00023154756558035658 + ], + "analytic_profile": [ + 0.0002325439453125, + 0.0006866455078125001, + 0.0011260986328125, + 0.0015509033203125002, + 0.0019610595703124997, + 0.0023565673828125, + 0.0027374267578125, + 0.0031036376953124997, + 0.0034552001953125, + 0.0037921142578124997, + 0.0041143798828125, + 0.0044219970703125, + 0.004714965820312499, + 0.0049932861328125, + 0.005256958007812501, + 0.0055059814453125005, + 0.005740356445312501, + 0.005960083007812499, + 0.0061651611328125, + 0.0063555908203125, + 0.0065313720703125, + 0.0066925048828124995, + 0.0068389892578125, + 0.0069708251953125005, + 0.0070880126953125, + 0.0071905517578125, + 0.0072784423828125, + 0.007351684570312499, + 0.007410278320312501, + 0.007454223632812499, + 0.007483520507812499, + 0.0074981689453125, + 0.0074981689453125, + 0.0074835205078125, + 0.007454223632812501, + 0.0074102783203125, + 0.007351684570312499, + 0.0072784423828125, + 0.0071905517578125, + 0.007088012695312501, + 0.0069708251953125, + 0.0068389892578125, + 0.0066925048828124995, + 0.0065313720703125, + 0.0063555908203125, + 0.0061651611328125, + 0.0059600830078125, + 0.005740356445312501, + 0.005505981445312499, + 0.0052569580078125, + 0.004993286132812499, + 0.004714965820312499, + 0.0044219970703125, + 0.0041143798828125, + 0.0037921142578124997, + 0.0034552001953125, + 0.0031036376953124997, + 0.0027374267578125, + 0.0023565673828125, + 0.0019610595703124997, + 0.0015509033203124998, + 0.0011260986328125, + 0.0006866455078125, + 0.0002325439453125 + ], + "history": [ + { + "step": 2076, + "residual": 0.2884814603909511 + }, + { + "step": 4152, + "residual": 0.1742015177050324 + }, + { + "step": 6228, + "residual": 0.1056299750542472 + }, + { + "step": 8304, + "residual": 0.06405226884116197 + }, + { + "step": 10380, + "residual": 0.03884118298591981 + }, + { + "step": 12456, + "residual": 0.023552234509759306 + }, + { + "step": 14532, + "residual": 0.014282037474048109 + }, + { + "step": 16608, + "residual": 0.00865672042552521 + }, + { + "step": 18684, + "residual": 0.00525218020004053 + }, + { + "step": 20760, + "residual": 0.003185006995088164 + }, + { + "step": 22836, + "residual": 0.0019290306683866472 + }, + { + "step": 24912, + "residual": 0.0011708555457155888 + }, + { + "step": 26988, + "residual": 0.0007046355814745517 + }, + { + "step": 29064, + "residual": 0.00043155018690484875 + }, + { + "step": 31140, + "residual": 0.000257245881209543 + }, + { + "step": 33216, + "residual": 0.0001466616695611254 + }, + { + "step": 35292, + "residual": 1.6901519426561357e-05 + } + ], + "seconds": 2.522406937001506, + "passed": true + }, + { + "height": 64, + "collision": "SRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.0075, + "force_density": 1.46484375e-06, + "re": 4.8, + "ma": 0.012990381056766578, + "steps": 35292, + "diffusion_times": 8.503859338946427, + "relative_l2": 0.0003963696916771394, + "relative_l2_limit": 0.0015, + "mass_drift": 7.471121721280838e-09, + "max_transverse": 2.4133441721387433e-09, + "steady_residual": 1.6901519426561357e-05, + "profile": [ + 0.0002315500066595129, + 0.0006855678148152185, + 0.0011249373897331114, + 0.0015496590139576145, + 0.0019597333643966504, + 0.0023551597572840244, + 0.0027359382066502375, + 0.003102068916835336, + 0.003453553924357987, + 0.00379039100436295, + 0.004112580126565679, + 0.004420123121285932, + 0.004713018279590703, + 0.004991264022842769, + 0.005254863551546779, + 0.005503816900629029, + 0.005738125409129715, + 0.005957787469133619, + 0.0061628021226289844, + 0.006353174409769752, + 0.006528901243027017, + 0.006689983082032009, + 0.006836417841067422, + 0.0069682137795022475, + 0.0070853628644593466, + 0.00718786865358165, + 0.007275728750888121, + 0.00734894478781432, + 0.00740751467446019, + 0.007451442779218801, + 0.007480725013356117, + 0.0074953641242673, + 0.007495363950080606, + 0.007480725071863139, + 0.007451442489624011, + 0.0074075147331596584, + 0.007348944730087895, + 0.007275728925167007, + 0.007187871155497765, + 0.0070853673474802585, + 0.006968217969934121, + 0.006836423603576068, + 0.006689988669596258, + 0.006528908927406097, + 0.006353182035233292, + 0.006162808469861912, + 0.005957788106432249, + 0.005738123544524922, + 0.00550381358309022, + 0.005254855372283201, + 0.004991251187275102, + 0.004713002010013788, + 0.004420104380298641, + 0.004112559142082237, + 0.003790368623145182, + 0.0034535308454085186, + 0.0031020465067386387, + 0.0027359173978274746, + 0.002355140316031988, + 0.0019597154657521507, + 0.0015496436761840676, + 0.0011249257335794315, + 0.0006855606734550381, + 0.00023154756558035658 + ], + "analytic_profile": [ + 0.0002325439453125, + 0.0006866455078125001, + 0.0011260986328125, + 0.0015509033203125002, + 0.0019610595703124997, + 0.0023565673828125, + 0.0027374267578125, + 0.0031036376953124997, + 0.0034552001953125, + 0.0037921142578124997, + 0.0041143798828125, + 0.0044219970703125, + 0.004714965820312499, + 0.0049932861328125, + 0.005256958007812501, + 0.0055059814453125005, + 0.005740356445312501, + 0.005960083007812499, + 0.0061651611328125, + 0.0063555908203125, + 0.0065313720703125, + 0.0066925048828124995, + 0.0068389892578125, + 0.0069708251953125005, + 0.0070880126953125, + 0.0071905517578125, + 0.0072784423828125, + 0.007351684570312499, + 0.007410278320312501, + 0.007454223632812499, + 0.007483520507812499, + 0.0074981689453125, + 0.0074981689453125, + 0.0074835205078125, + 0.007454223632812501, + 0.0074102783203125, + 0.007351684570312499, + 0.0072784423828125, + 0.0071905517578125, + 0.007088012695312501, + 0.0069708251953125, + 0.0068389892578125, + 0.0066925048828124995, + 0.0065313720703125, + 0.0063555908203125, + 0.0061651611328125, + 0.0059600830078125, + 0.005740356445312501, + 0.005505981445312499, + 0.0052569580078125, + 0.004993286132812499, + 0.004714965820312499, + 0.0044219970703125, + 0.0041143798828125, + 0.0037921142578124997, + 0.0034552001953125, + 0.0031036376953124997, + 0.0027374267578125, + 0.0023565673828125, + 0.0019610595703124997, + 0.0015509033203124998, + 0.0011260986328125, + 0.0006866455078125, + 0.0002325439453125 + ], + "history": [ + { + "step": 2076, + "residual": 0.2884814603909511 + }, + { + "step": 4152, + "residual": 0.1742015177050324 + }, + { + "step": 6228, + "residual": 0.1056299750542472 + }, + { + "step": 8304, + "residual": 0.06405226884116197 + }, + { + "step": 10380, + "residual": 0.03884118298591981 + }, + { + "step": 12456, + "residual": 0.023552234509759306 + }, + { + "step": 14532, + "residual": 0.014282037474048109 + }, + { + "step": 16608, + "residual": 0.00865672042552521 + }, + { + "step": 18684, + "residual": 0.00525218020004053 + }, + { + "step": 20760, + "residual": 0.003185006995088164 + }, + { + "step": 22836, + "residual": 0.0019290306683866472 + }, + { + "step": 24912, + "residual": 0.0011708555457155888 + }, + { + "step": 26988, + "residual": 0.0007046355814745517 + }, + { + "step": 29064, + "residual": 0.00043155018690484875 + }, + { + "step": 31140, + "residual": 0.000257245881209543 + }, + { + "step": 33216, + "residual": 0.0001466616695611254 + }, + { + "step": 35292, + "residual": 1.6901519426561357e-05 + } + ], + "seconds": 2.809174071997404, + "passed": true + }, + { + "height": 64, + "collision": "TRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.0075, + "force_density": 1.46484375e-06, + "re": 4.8, + "ma": 0.012990381056766578, + "steps": 37368, + "diffusion_times": 9.004086358884452, + "relative_l2": 0.00019309691579672675, + "relative_l2_limit": 0.0015, + "mass_drift": 7.506348875807589e-09, + "max_transverse": 2.1286723333541315e-09, + "steady_residual": 1.089235504050361e-05, + "profile": [ + 0.00023250678144308288, + 0.0006865340256119351, + 0.0011259129718975314, + 0.001550644280355248, + 0.001960728919314011, + 0.0023561664588974086, + 0.0027369566810718973, + 0.0031030989884097368, + 0.0034545948813580617, + 0.003791443253391098, + 0.004113645499316158, + 0.004421199877686454, + 0.0047141064990831654, + 0.004992367521479674, + 0.00525598084692498, + 0.005504949622585436, + 0.005739274045420422, + 0.00595895296227944, + 0.006163985774619699, + 0.006354372035776424, + 0.006530112657587643, + 0.00669120858395798, + 0.0068376603400963345, + 0.00696946413837726, + 0.007086622715844642, + 0.007189134494613074, + 0.007277001873570306, + 0.007350227393498817, + 0.007408808340879525, + 0.007452744296915545, + 0.00748203556277865, + 0.007496682176056331, + 0.007496680954070462, + 0.007482035500583334, + 0.007452744238057174, + 0.007408809853436413, + 0.0073502276254269845, + 0.007276999253424757, + 0.007189128852569632, + 0.007086613633657829, + 0.006969452963292446, + 0.006837648756709716, + 0.00669119612571122, + 0.006530097294114927, + 0.006354355328319829, + 0.0061639689515294565, + 0.005958939631253757, + 0.005739265318134029, + 0.005504943364806323, + 0.005255975990631841, + 0.004992362952073895, + 0.004714102395046513, + 0.004421193969127392, + 0.004113639532984194, + 0.0037914376360216866, + 0.003454589409725653, + 0.00310309342935344, + 0.002736951456800572, + 0.0023561617585275718, + 0.001960725136061056, + 0.0015506411516393772, + 0.001125910789088391, + 0.0006865325122122846, + 0.00023250628030548168 + ], + "analytic_profile": [ + 0.0002325439453125, + 0.0006866455078125001, + 0.0011260986328125, + 0.0015509033203125002, + 0.0019610595703124997, + 0.0023565673828125, + 0.0027374267578125, + 0.0031036376953124997, + 0.0034552001953125, + 0.0037921142578124997, + 0.0041143798828125, + 0.0044219970703125, + 0.004714965820312499, + 0.0049932861328125, + 0.005256958007812501, + 0.0055059814453125005, + 0.005740356445312501, + 0.005960083007812499, + 0.0061651611328125, + 0.0063555908203125, + 0.0065313720703125, + 0.0066925048828124995, + 0.0068389892578125, + 0.0069708251953125005, + 0.0070880126953125, + 0.0071905517578125, + 0.0072784423828125, + 0.007351684570312499, + 0.007410278320312501, + 0.007454223632812499, + 0.007483520507812499, + 0.0074981689453125, + 0.0074981689453125, + 0.0074835205078125, + 0.007454223632812501, + 0.0074102783203125, + 0.007351684570312499, + 0.0072784423828125, + 0.0071905517578125, + 0.007088012695312501, + 0.0069708251953125, + 0.0068389892578125, + 0.0066925048828124995, + 0.0065313720703125, + 0.0063555908203125, + 0.0061651611328125, + 0.0059600830078125, + 0.005740356445312501, + 0.005505981445312499, + 0.0052569580078125, + 0.004993286132812499, + 0.004714965820312499, + 0.0044219970703125, + 0.0041143798828125, + 0.0037921142578124997, + 0.0034552001953125, + 0.0031036376953124997, + 0.0027374267578125, + 0.0023565673828125, + 0.0019610595703124997, + 0.0015509033203124998, + 0.0011260986328125, + 0.0006866455078125, + 0.0002325439453125 + ], + "history": [ + { + "step": 2076, + "residual": 0.2884903514929979 + }, + { + "step": 4152, + "residual": 0.17420549777859068 + }, + { + "step": 6228, + "residual": 0.1056400781992352 + }, + { + "step": 8304, + "residual": 0.06406081892647358 + }, + { + "step": 10380, + "residual": 0.03884724566460372 + }, + { + "step": 12456, + "residual": 0.02355707425139268 + }, + { + "step": 14532, + "residual": 0.014285179459461849 + }, + { + "step": 16608, + "residual": 0.008663284641419695 + }, + { + "step": 18684, + "residual": 0.0052527999379981235 + }, + { + "step": 20760, + "residual": 0.0031856451941576656 + }, + { + "step": 22836, + "residual": 0.0019321555185594925 + }, + { + "step": 24912, + "residual": 0.001171606692210917 + }, + { + "step": 26988, + "residual": 0.0007107258821416077 + }, + { + "step": 29064, + "residual": 0.0004307324480797304 + }, + { + "step": 31140, + "residual": 0.00026251258077496285 + }, + { + "step": 33216, + "residual": 0.00015496164826095737 + }, + { + "step": 35292, + "residual": 7.726582070590044e-05 + }, + { + "step": 37368, + "residual": 1.089235504050361e-05 + } + ], + "seconds": 2.287581108015729, + "passed": true + }, + { + "height": 64, + "collision": "TRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.0075, + "force_density": 1.46484375e-06, + "re": 4.8, + "ma": 0.012990381056766578, + "steps": 37368, + "diffusion_times": 9.004086358884452, + "relative_l2": 0.00019309691579672675, + "relative_l2_limit": 0.0015, + "mass_drift": 7.506348875807589e-09, + "max_transverse": 2.1286723333541315e-09, + "steady_residual": 1.089235504050361e-05, + "profile": [ + 0.00023250678144308288, + 0.0006865340256119351, + 0.0011259129718975314, + 0.001550644280355248, + 0.001960728919314011, + 0.0023561664588974086, + 0.0027369566810718973, + 0.0031030989884097368, + 0.0034545948813580617, + 0.003791443253391098, + 0.004113645499316158, + 0.004421199877686454, + 0.0047141064990831654, + 0.004992367521479674, + 0.00525598084692498, + 0.005504949622585436, + 0.005739274045420422, + 0.00595895296227944, + 0.006163985774619699, + 0.006354372035776424, + 0.006530112657587643, + 0.00669120858395798, + 0.0068376603400963345, + 0.00696946413837726, + 0.007086622715844642, + 0.007189134494613074, + 0.007277001873570306, + 0.007350227393498817, + 0.007408808340879525, + 0.007452744296915545, + 0.00748203556277865, + 0.007496682176056331, + 0.007496680954070462, + 0.007482035500583334, + 0.007452744238057174, + 0.007408809853436413, + 0.0073502276254269845, + 0.007276999253424757, + 0.007189128852569632, + 0.007086613633657829, + 0.006969452963292446, + 0.006837648756709716, + 0.00669119612571122, + 0.006530097294114927, + 0.006354355328319829, + 0.0061639689515294565, + 0.005958939631253757, + 0.005739265318134029, + 0.005504943364806323, + 0.005255975990631841, + 0.004992362952073895, + 0.004714102395046513, + 0.004421193969127392, + 0.004113639532984194, + 0.0037914376360216866, + 0.003454589409725653, + 0.00310309342935344, + 0.002736951456800572, + 0.0023561617585275718, + 0.001960725136061056, + 0.0015506411516393772, + 0.001125910789088391, + 0.0006865325122122846, + 0.00023250628030548168 + ], + "analytic_profile": [ + 0.0002325439453125, + 0.0006866455078125001, + 0.0011260986328125, + 0.0015509033203125002, + 0.0019610595703124997, + 0.0023565673828125, + 0.0027374267578125, + 0.0031036376953124997, + 0.0034552001953125, + 0.0037921142578124997, + 0.0041143798828125, + 0.0044219970703125, + 0.004714965820312499, + 0.0049932861328125, + 0.005256958007812501, + 0.0055059814453125005, + 0.005740356445312501, + 0.005960083007812499, + 0.0061651611328125, + 0.0063555908203125, + 0.0065313720703125, + 0.0066925048828124995, + 0.0068389892578125, + 0.0069708251953125005, + 0.0070880126953125, + 0.0071905517578125, + 0.0072784423828125, + 0.007351684570312499, + 0.007410278320312501, + 0.007454223632812499, + 0.007483520507812499, + 0.0074981689453125, + 0.0074981689453125, + 0.0074835205078125, + 0.007454223632812501, + 0.0074102783203125, + 0.007351684570312499, + 0.0072784423828125, + 0.0071905517578125, + 0.007088012695312501, + 0.0069708251953125, + 0.0068389892578125, + 0.0066925048828124995, + 0.0065313720703125, + 0.0063555908203125, + 0.0061651611328125, + 0.0059600830078125, + 0.005740356445312501, + 0.005505981445312499, + 0.0052569580078125, + 0.004993286132812499, + 0.004714965820312499, + 0.0044219970703125, + 0.0041143798828125, + 0.0037921142578124997, + 0.0034552001953125, + 0.0031036376953124997, + 0.0027374267578125, + 0.0023565673828125, + 0.0019610595703124997, + 0.0015509033203124998, + 0.0011260986328125, + 0.0006866455078125, + 0.0002325439453125 + ], + "history": [ + { + "step": 2076, + "residual": 0.2884903514929979 + }, + { + "step": 4152, + "residual": 0.17420549777859068 + }, + { + "step": 6228, + "residual": 0.1056400781992352 + }, + { + "step": 8304, + "residual": 0.06406081892647358 + }, + { + "step": 10380, + "residual": 0.03884724566460372 + }, + { + "step": 12456, + "residual": 0.02355707425139268 + }, + { + "step": 14532, + "residual": 0.014285179459461849 + }, + { + "step": 16608, + "residual": 0.008663284641419695 + }, + { + "step": 18684, + "residual": 0.0052527999379981235 + }, + { + "step": 20760, + "residual": 0.0031856451941576656 + }, + { + "step": 22836, + "residual": 0.0019321555185594925 + }, + { + "step": 24912, + "residual": 0.001171606692210917 + }, + { + "step": 26988, + "residual": 0.0007107258821416077 + }, + { + "step": 29064, + "residual": 0.0004307324480797304 + }, + { + "step": 31140, + "residual": 0.00026251258077496285 + }, + { + "step": 33216, + "residual": 0.00015496164826095737 + }, + { + "step": 35292, + "residual": 7.726582070590044e-05 + }, + { + "step": 37368, + "residual": 1.089235504050361e-05 + } + ], + "seconds": 2.717869452026207, + "passed": true + }, + { + "height": 64, + "collision": "MRT", + "streaming": "double_buffer", + "nu": 0.1, + "umax": 0.0075, + "force_density": 1.46484375e-06, + "re": 4.8, + "ma": 0.012990381056766578, + "steps": 41520, + "diffusion_times": 10.004540398760502, + "relative_l2": 0.00020852200696039506, + "relative_l2_limit": 0.0015, + "mass_drift": 3.8963337667397013e-07, + "max_transverse": 2.1300374580139882e-09, + "steady_residual": 1.866898728071816e-05, + "profile": [ + 0.0002316791606730542, + 0.0006857600916978696, + 0.001125192728674733, + 0.0015499772270310202, + 0.001960113986208454, + 0.0023556024030766207, + 0.002736441588189501, + 0.0031026329508159088, + 0.003454176967667131, + 0.003791071740360371, + 0.004113318490901786, + 0.004420917683558508, + 0.004713867865861439, + 0.004992170404727001, + 0.005255826059788587, + 0.005504834712194071, + 0.0057391963061119095, + 0.005958911273823359, + 0.0061639780498123934, + 0.006354392145872319, + 0.006530159798334848, + 0.006691279191585814, + 0.006837746314910277, + 0.006969565944475907, + 0.007086739528927291, + 0.007189265491184087, + 0.007277145651862479, + 0.007350378836349575, + 0.007408965223233234, + 0.007452904864365871, + 0.007482199101365991, + 0.007496845436024089, + 0.007496845606249305, + 0.007482199036904493, + 0.007452905611406557, + 0.007408966598339821, + 0.007350380267942254, + 0.007277146927176391, + 0.007189266825782625, + 0.007086740286793777, + 0.006969567814284588, + 0.00683774795671543, + 0.006691279152471969, + 0.006530160754620013, + 0.006354393575316082, + 0.006163977796690886, + 0.005958912015550416, + 0.005739197480463183, + 0.005504835881439483, + 0.00525582643183414, + 0.004992171986458454, + 0.004713868705230289, + 0.0044209188883423565, + 0.004113319214939053, + 0.003791072040938305, + 0.0034541774284958444, + 0.003102633135101719, + 0.0027364421302137165, + 0.002355602550029506, + 0.0019601140740521214, + 0.0015499771106969285, + 0.0011251927723785783, + 0.0006857601389966712, + 0.00023167910427580602 + ], + "analytic_profile": [ + 0.0002325439453125, + 0.0006866455078125001, + 0.0011260986328125, + 0.0015509033203125002, + 0.0019610595703124997, + 0.0023565673828125, + 0.0027374267578125, + 0.0031036376953124997, + 0.0034552001953125, + 0.0037921142578124997, + 0.0041143798828125, + 0.0044219970703125, + 0.004714965820312499, + 0.0049932861328125, + 0.005256958007812501, + 0.0055059814453125005, + 0.005740356445312501, + 0.005960083007812499, + 0.0061651611328125, + 0.0063555908203125, + 0.0065313720703125, + 0.0066925048828124995, + 0.0068389892578125, + 0.0069708251953125005, + 0.0070880126953125, + 0.0071905517578125, + 0.0072784423828125, + 0.007351684570312499, + 0.007410278320312501, + 0.007454223632812499, + 0.007483520507812499, + 0.0074981689453125, + 0.0074981689453125, + 0.0074835205078125, + 0.007454223632812501, + 0.0074102783203125, + 0.007351684570312499, + 0.0072784423828125, + 0.0071905517578125, + 0.007088012695312501, + 0.0069708251953125, + 0.0068389892578125, + 0.0066925048828124995, + 0.0065313720703125, + 0.0063555908203125, + 0.0061651611328125, + 0.0059600830078125, + 0.005740356445312501, + 0.005505981445312499, + 0.0052569580078125, + 0.004993286132812499, + 0.004714965820312499, + 0.0044219970703125, + 0.0041143798828125, + 0.0037921142578124997, + 0.0034552001953125, + 0.0031036376953124997, + 0.0027374267578125, + 0.0023565673828125, + 0.0019610595703124997, + 0.0015509033203124998, + 0.0011260986328125, + 0.0006866455078125, + 0.0002325439453125 + ], + "history": [ + { + "step": 2076, + "residual": 0.2884806310796626 + }, + { + "step": 4152, + "residual": 0.17418396399258718 + }, + { + "step": 6228, + "residual": 0.10561806921810661 + }, + { + "step": 8304, + "residual": 0.06404195355553546 + }, + { + "step": 10380, + "residual": 0.03883224853348454 + }, + { + "step": 12456, + "residual": 0.023544479920672285 + }, + { + "step": 14532, + "residual": 0.014278720724519248 + }, + { + "step": 16608, + "residual": 0.008668649443739712 + }, + { + "step": 18684, + "residual": 0.0052352744025023525 + }, + { + "step": 20760, + "residual": 0.003177463389851113 + }, + { + "step": 22836, + "residual": 0.0019297177711945562 + }, + { + "step": 24912, + "residual": 0.001170103903227412 + }, + { + "step": 26988, + "residual": 0.0007096251647598689 + }, + { + "step": 29064, + "residual": 0.00043021712018116585 + }, + { + "step": 31140, + "residual": 0.00026094430613561457 + }, + { + "step": 33216, + "residual": 0.00015826309305843348 + }, + { + "step": 35292, + "residual": 9.902616469659928e-05 + }, + { + "step": 37368, + "residual": 6.232364943338457e-05 + }, + { + "step": 39444, + "residual": 3.172691681247003e-05 + }, + { + "step": 41520, + "residual": 1.866898728071816e-05 + } + ], + "seconds": 2.071311372012133, + "passed": true + }, + { + "height": 64, + "collision": "MRT", + "streaming": "esopull", + "nu": 0.1, + "umax": 0.0075, + "force_density": 1.46484375e-06, + "re": 4.8, + "ma": 0.012990381056766578, + "steps": 41520, + "diffusion_times": 10.004540398760502, + "relative_l2": 0.00020852200696039506, + "relative_l2_limit": 0.0015, + "mass_drift": 3.8963337667397013e-07, + "max_transverse": 2.1300374580139882e-09, + "steady_residual": 1.866898728071816e-05, + "profile": [ + 0.0002316791606730542, + 0.0006857600916978696, + 0.001125192728674733, + 0.0015499772270310202, + 0.001960113986208454, + 0.0023556024030766207, + 0.002736441588189501, + 0.0031026329508159088, + 0.003454176967667131, + 0.003791071740360371, + 0.004113318490901786, + 0.004420917683558508, + 0.004713867865861439, + 0.004992170404727001, + 0.005255826059788587, + 0.005504834712194071, + 0.0057391963061119095, + 0.005958911273823359, + 0.0061639780498123934, + 0.006354392145872319, + 0.006530159798334848, + 0.006691279191585814, + 0.006837746314910277, + 0.006969565944475907, + 0.007086739528927291, + 0.007189265491184087, + 0.007277145651862479, + 0.007350378836349575, + 0.007408965223233234, + 0.007452904864365871, + 0.007482199101365991, + 0.007496845436024089, + 0.007496845606249305, + 0.007482199036904493, + 0.007452905611406557, + 0.007408966598339821, + 0.007350380267942254, + 0.007277146927176391, + 0.007189266825782625, + 0.007086740286793777, + 0.006969567814284588, + 0.00683774795671543, + 0.006691279152471969, + 0.006530160754620013, + 0.006354393575316082, + 0.006163977796690886, + 0.005958912015550416, + 0.005739197480463183, + 0.005504835881439483, + 0.00525582643183414, + 0.004992171986458454, + 0.004713868705230289, + 0.0044209188883423565, + 0.004113319214939053, + 0.003791072040938305, + 0.0034541774284958444, + 0.003102633135101719, + 0.0027364421302137165, + 0.002355602550029506, + 0.0019601140740521214, + 0.0015499771106969285, + 0.0011251927723785783, + 0.0006857601389966712, + 0.00023167910427580602 + ], + "analytic_profile": [ + 0.0002325439453125, + 0.0006866455078125001, + 0.0011260986328125, + 0.0015509033203125002, + 0.0019610595703124997, + 0.0023565673828125, + 0.0027374267578125, + 0.0031036376953124997, + 0.0034552001953125, + 0.0037921142578124997, + 0.0041143798828125, + 0.0044219970703125, + 0.004714965820312499, + 0.0049932861328125, + 0.005256958007812501, + 0.0055059814453125005, + 0.005740356445312501, + 0.005960083007812499, + 0.0061651611328125, + 0.0063555908203125, + 0.0065313720703125, + 0.0066925048828124995, + 0.0068389892578125, + 0.0069708251953125005, + 0.0070880126953125, + 0.0071905517578125, + 0.0072784423828125, + 0.007351684570312499, + 0.007410278320312501, + 0.007454223632812499, + 0.007483520507812499, + 0.0074981689453125, + 0.0074981689453125, + 0.0074835205078125, + 0.007454223632812501, + 0.0074102783203125, + 0.007351684570312499, + 0.0072784423828125, + 0.0071905517578125, + 0.007088012695312501, + 0.0069708251953125, + 0.0068389892578125, + 0.0066925048828124995, + 0.0065313720703125, + 0.0063555908203125, + 0.0061651611328125, + 0.0059600830078125, + 0.005740356445312501, + 0.005505981445312499, + 0.0052569580078125, + 0.004993286132812499, + 0.004714965820312499, + 0.0044219970703125, + 0.0041143798828125, + 0.0037921142578124997, + 0.0034552001953125, + 0.0031036376953124997, + 0.0027374267578125, + 0.0023565673828125, + 0.0019610595703124997, + 0.0015509033203124998, + 0.0011260986328125, + 0.0006866455078125, + 0.0002325439453125 + ], + "history": [ + { + "step": 2076, + "residual": 0.2884806310796626 + }, + { + "step": 4152, + "residual": 0.17418396399258718 + }, + { + "step": 6228, + "residual": 0.10561806921810661 + }, + { + "step": 8304, + "residual": 0.06404195355553546 + }, + { + "step": 10380, + "residual": 0.03883224853348454 + }, + { + "step": 12456, + "residual": 0.023544479920672285 + }, + { + "step": 14532, + "residual": 0.014278720724519248 + }, + { + "step": 16608, + "residual": 0.008668649443739712 + }, + { + "step": 18684, + "residual": 0.0052352744025023525 + }, + { + "step": 20760, + "residual": 0.003177463389851113 + }, + { + "step": 22836, + "residual": 0.0019297177711945562 + }, + { + "step": 24912, + "residual": 0.001170103903227412 + }, + { + "step": 26988, + "residual": 0.0007096251647598689 + }, + { + "step": 29064, + "residual": 0.00043021712018116585 + }, + { + "step": 31140, + "residual": 0.00026094430613561457 + }, + { + "step": 33216, + "residual": 0.00015826309305843348 + }, + { + "step": 35292, + "residual": 9.902616469659928e-05 + }, + { + "step": 37368, + "residual": 6.232364943338457e-05 + }, + { + "step": 39444, + "residual": 3.172691681247003e-05 + }, + { + "step": 41520, + "residual": 1.866898728071816e-05 + } + ], + "seconds": 2.7248276059981436, + "passed": true + } + ], + "verification": { + "cases_passed": 18, + "srt_trt_identical_to_baseline": true, + "all_layout_profiles_identical": true, + "rates_unchanged": true, + "thresholds_unchanged": true, + "cpu_weak_force_oracle_cases": 54, + "cross_review": "architecture: accepted direct shifted moments and independent FP64 oracle" + }, + "source_sha256": { + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46" + } + }, + "notes": "原始失败结果保留在顶层;本节记录后续修复结果。MRT矩阵、松弛率和原18项验收门槛均未改。", + "kan99b_k2_esopull": { + "contract": { + "collision": "MRT", + "primary_inlet_scheme": "regularized", + "k2_control_inlet_scheme": "zou_he_local", + "inlet_profile": "uniform", + "y_wall_bc": "free_slip", + "outlet_mode": "neq_extrap", + "streaming": "esopull", + "store_precision": "FP32", + "les_enabled": false + }, + "requested": { + "case": "K2", + "include_k0": false, + "include_k2_control": false, + "domain": "M", + "smoke": false, + "steps_override": 0, + "burn_override": 0, + "record_every": 100, + "field_every": 0, + "save_vorticity": false + }, + "counts": { + "requested_runs": 1, + "completed_runs": 1, + "failed_runs": 0 + }, + "k2_gate": [ + { + "run_id": "k2_baseline_domM_re100_a1p000_regularized_mrt", + "variant": "baseline", + "inlet_scheme": "regularized", + "rel_err": { + "St": 0.02502094049577455, + "mean_cl": 0.03674780879450488, + "mean_cd": 0.03807213103666693, + "amp_cl": 0.022092841317849575, + "amp_cd": 0.0037617378471091296 + }, + "pass_bands": { + "St": true, + "mean_cl": true, + "mean_cd": true, + "amp_cl": true, + "amp_cd": true + }, + "pass_all": true + } + ], + "rows": [ + { + "run_id": "k2_baseline_domM_re100_a1p000_regularized_mrt", + "case_id": "K2", + "variant": "baseline", + "collision": "MRT", + "inlet_scheme": "regularized", + "inlet_profile": "uniform", + "domain": "M", + "re": 100.0, + "alpha": 1.0, + "omega_body": 0.002, + "nu": 0.009, + "steps": 200000, + "burn_in": 80000, + "total_steps": 280000, + "record_every": 100, + "n_samples": 2800, + "St": 0.1696409656520507, + "st": 0.1696409656520507, + "mean_cl": -2.579532223061608, + "mean_cd": 1.1460316326644804, + "amp_cl": 0.3550780893174888, + "amp_cd": 0.09892645943178206, + "rho_min_final": 0.9947538375854492, + "rho_max_final": 1.0029972791671753, + "grid": { + "nx": 1351, + "ny": 601, + "diameter": 30 + }, + "beta_real": null, + "Re_real": null, + "re_real": null, + "field_snapshots": [], + "St_error_pct": 2.5020940495774546, + "force_signal_archive": "classic-signals.npz::repaired_kan99b_k2_esopull" + } + ] + }, + "kan99b_k2_double_buffer": { + "contract": { + "collision": "MRT", + "primary_inlet_scheme": "regularized", + "k2_control_inlet_scheme": "zou_he_local", + "inlet_profile": "uniform", + "y_wall_bc": "free_slip", + "outlet_mode": "neq_extrap", + "streaming": "double_buffer", + "store_precision": "FP32", + "les_enabled": false + }, + "requested": { + "case": "K2", + "include_k0": false, + "include_k2_control": false, + "domain": "M", + "smoke": false, + "steps_override": 0, + "burn_override": 0, + "record_every": 100, + "field_every": 0, + "save_vorticity": false + }, + "counts": { + "requested_runs": 1, + "completed_runs": 1, + "failed_runs": 0 + }, + "k2_gate": [ + { + "run_id": "k2_baseline_domM_re100_a1p000_regularized_mrt", + "variant": "baseline", + "inlet_scheme": "regularized", + "rel_err": { + "St": 0.025021093216594927, + "mean_cl": 0.03674714856319186, + "mean_cd": 0.03807246505599181, + "amp_cl": 0.0221154333434503, + "amp_cd": 0.0037491063617335852 + }, + "pass_bands": { + "St": true, + "mean_cl": true, + "mean_cd": true, + "amp_cl": true, + "amp_cd": true + }, + "pass_all": true + } + ], + "rows": [ + { + "run_id": "k2_baseline_domM_re100_a1p000_regularized_mrt", + "case_id": "K2", + "variant": "baseline", + "collision": "MRT", + "inlet_scheme": "regularized", + "inlet_profile": "uniform", + "domain": "M", + "re": 100.0, + "alpha": 1.0, + "omega_body": 0.002, + "nu": 0.009, + "steps": 200000, + "burn_in": 80000, + "total_steps": 280000, + "record_every": 100, + "n_samples": 2800, + "St": 0.16964099092734647, + "st": 0.16964099092734647, + "mean_cl": -2.579530580340078, + "mean_cd": 1.146032001421815, + "amp_cl": 0.3550698861529932, + "amp_cd": 0.09892771373827985, + "rho_min_final": 0.9944697618484497, + "rho_max_final": 1.0029971599578857, + "grid": { + "nx": 1351, + "ny": 601, + "diameter": 30 + }, + "beta_real": null, + "Re_real": null, + "re_real": null, + "field_snapshots": [], + "St_error_pct": 2.5021093216594927, + "force_signal_archive": "classic-signals.npz::repaired_kan99b_k2_double_buffer" + } + ] + }, + "sah04_s2": { + "requested": { + "case": "S2", + "outlet": "neq_extrap", + "inlet_profile": "parabolic", + "inlet_scheme": "channel_stabilized", + "record_every": 5, + "smoke": false, + "steps_override": null, + "burn_override": null, + "gate_pct": 5.0 + }, + "rows": [ + { + "case_id": "S2", + "collision": "MRT", + "inlet_scheme": "channel_stabilized", + "inlet_profile": "parabolic", + "grid": { + "nx": 2402, + "ny": 62, + "diameter": 30, + "h_fluid": 60 + }, + "steps": 120000, + "burn_in": 45000, + "Re_nominal": 200.0, + "Re_real": 204.88227903842926, + "beta_nominal": 0.5, + "beta_real": 0.5, + "wall_gap_cells": 15.0, + "target_St": 0.3513, + "St": 0.3566902020434605, + "St_error_pct": 1.5343586801766365, + "gate_pct": 5.0, + "gate_pass": true, + "mean_Cd": 2.5800927865505217, + "U_max_real": 0.10244113951921463, + "rho_min_final": 0.9820431470870972, + "rho_max_final": 1.0512181520462036, + "n_curved": 292, + "fallback_links": 0, + "low_q_links": 72, + "n_lift_samples": 24000 + } + ], + "evaluation": { + "gate_pct": 5.0, + "cases_total": 1, + "cases_completed": 1, + "cases_failed": 0, + "cases_within_gate": 1, + "pass_gate_all_completed": true + }, + "unguided_dominant_st": 0.3566902020434605 + }, + "source_sha256": { + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/checkpoint.py": "3a321349072ab670be0e39dcb351d122773bc74dac6e08b91825813dcd90c6a2", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/config.py": "aabf28f049008ad69c87e7e572d09db4fea935ae8bd08b8f6b854029c3e4f2b1", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/cuda/compiler_v2.py": "d0de8c04a65678610d631ba88e284a53ea1815bc070c2cf9722fac6dcb2e779c", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/field.py": "c096791ff0b16f3871f44bde7e26009cc33b1d37a6d88948821bbba2be5df35e", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "5bcc192e2c38371d4b24b6725f75fec7d00364557c4b4536b064edf2ec9c75c5", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "b1139addaf8c2fa8532c167b4324b38ddd5b931cc499152c7c287710746eeaa6", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "9bbf48e0c907dc5e0bf9e8fb653acd09f49ebed7208dd595c802d07f7439e289", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/simulation.py": "f701d60981d73df688e1284a85f4e42e732416253a631fb81d063490890490f6" + }, + "production_diff": { + "insertions": 1008, + "deletions": 685, + "net": 323, + "baseline": "6e3756c; excludes pre-existing user config headers" + }, + "final_regression": { + "unit_passed": 130, + "subtests_passed": 13, + "unit_seconds": 33.12, + "gpu_passed": 74, + "gpu_seconds": 242.15, + "physical_gpu": 0, + "xfail": 0, + "source": "/home/frank14f/CelerisLab/src", + "python": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "logs": [ + "final-unit.log", + "final-gpu.log" + ], + "original_user_files_unchanged": true, + "git_diff_check": "passed" + } + } +} diff --git a/research/repair-2026-10-10/classic-signals.npz b/research/repair-2026-10-10/classic-signals.npz new file mode 100644 index 0000000..8cf6d12 Binary files /dev/null and b/research/repair-2026-10-10/classic-signals.npz differ diff --git a/research/repair-2026-10-10/final-gpu.log b/research/repair-2026-10-10/final-gpu.log new file mode 100644 index 0000000..a0eec1a --- /dev/null +++ b/research/repair-2026-10-10/final-gpu.log @@ -0,0 +1,3 @@ +........................................................................ [ 97%] +.. [100%] +74 passed in 242.15s (0:04:02) diff --git a/research/repair-2026-10-10/final-unit.log b/research/repair-2026-10-10/final-unit.log new file mode 100644 index 0000000..94efba2 --- /dev/null +++ b/research/repair-2026-10-10/final-unit.log @@ -0,0 +1,3 @@ +........................................................... [ 45%] +....................................................................... [100%] +130 passed, 13 subtests passed in 33.12s diff --git a/research/repair-2026-10-10/provenance.json b/research/repair-2026-10-10/provenance.json new file mode 100644 index 0000000..25e22b4 --- /dev/null +++ b/research/repair-2026-10-10/provenance.json @@ -0,0 +1,30 @@ +{ + "python": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "python_version": "3.10.13", + "package": "/home/frank14f/CelerisLab/src/CelerisLab/__init__.py", + "compiler": "/home/frank14f/CelerisLab/src/CelerisLab/cuda/compiler_v2.py", + "kernel_source": "/home/frank14f/CelerisLab/src/CelerisLab/lbm/kernels/kernel_v2.cu", + "git_head": "6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0", + "protected_user_files_unchanged": { + "src/CelerisLab/lbm/kernels/config/config_grid.h": true, + "src/CelerisLab/lbm/kernels/config/config_method.h": true, + "src/CelerisLab/lbm/kernels/config/config_objects.h": true, + "src/CelerisLab/lbm/kernels/config/config_physics.h": true, + "tests/postproc/experiment.ipynb": true + }, + "final_checks": { + "unit": { + "passed": 124, + "subtests_passed": 8, + "exit_code": 0, + "seconds": 26.72, + "log": "final-unit.log" + }, + "gpu": { + "passed": 66, + "exit_code": 0, + "seconds": 190.25, + "log": "final-gpu.log" + } + } +} diff --git a/research/repair-2026-10-10/repair-architecture.md b/research/repair-2026-10-10/repair-architecture.md new file mode 100644 index 0000000..12051c3 --- /dev/null +++ b/research/repair-2026-10-10/repair-architecture.md @@ -0,0 +1,71 @@ +# Architecture repair — 2026-10-10 + +Scope: config loading/validation, isolated compilation, CUDA ownership, import boundary and package metadata. Parent owns Simulation integration; this agent additionally edited only its constructor exception handler and `close()` with explicit parent authorization. No generated source headers/PTX, default JSON, external repository or environment was edited by this agent. Existing user changes remain. + +## Reference and design constraints + +Read `.github/skills/lbm-ref-architecture-guard/SKILL.md`, the repair BRIEF and prior audit before editing. These are lifecycle/configuration fixes, not new CFD algorithms: accepted physics are the existing low-Mach D2Q9 paths, with exact configuration preservation, independent instance ownership and no accidental configuration fallback as acceptance conditions. + +- `ref/lbmpy_analysis.md` §§10.2, 12.1–12.2 describes a configuration → generated kernel → compiled callable pipeline and configuration-dependent caching. The relevant lesson is to bind inputs and artifacts. Its recommendation to replace JSON is **not** adopted: JSON remains the user configuration authority, existing dataclasses remain the validation bridge. +- The same reference distinguishes physics, execution and hardware configuration. This repair introduces only an allocation signature to reject incompatible recompilation; it does not import a new configuration hierarchy, plugin framework or disk cache. +- [PyCUDA Devices and Contexts](https://documen.tician.de/pycuda/driver.html#devices-and-contexts): `make_context()` makes the new context current, `push()`/`pop()` manage current-thread activation, and `detach()` releases ownership. Thus closing A while B is current must not pop B. +- [Python Context Variables](https://docs.python.org/3/library/contextvars.html) supports context-local legacy build convenience; explicit `build_dir` is the robust contract for interleaving independent builds in one context. +- Historical constraints from the preceding study remain: keep the public orchestration style, pending-body discard and runtime dense IDs; no universal service framework and no AMR/jet implementation in this repair. + +## Disposition + +| Finding | Result | Concrete change / remaining limit | +|---|---|---| +| ARCH-01 shared generated headers/PTX | Fixed | Every generation creates a private kernel snapshot, writes headers there, and compiles a private PTX. Unique temporary output + atomic replace avoids partially visible PTX. Configuration, source digest, architecture/options and PTX digest accompany artifacts. Context-local defaults preserve sequential legacy calls; Simulation passes explicit paths and owns cleanup. No build cache introduced. | +| ARCH-02 density truncation | Fixed | Physics and method floats use round-trip literals rather than display precision (`rho=1.04` stays 1.04; 0.04 stays nonzero). | +| ARCH-03 missing explicit config fallback | Fixed | Missing/empty explicit path raises `FileNotFoundError`; search fallback occurs only for `None`. | +| ARCH-04 CUDA ownership | Fixed at orchestration boundary | Constructor balances its implicit push. `activate()` balances operation scopes; `close()` detaches its owner without popping another. `context_bound` handles nested calls and permits low-level objects lacking an attached context. Root attaches `field.ctx`, scopes Simulation construction and GPU calls. Same-instance simultaneous caller operations remain outside the contract; this is not a thread-safe solver scheduler. | +| ARCH-05 incompatible recompilation | Fixed with root integration | Signature covers lattice/dimensions, computational type, storage precision, shifting and streaming. Simulation rejects structural changes while preserving allocations. Collision/block-size changes rebuild the stepper; changed viscosity refreshes runtime omega, unchanged viscosity preserves explicit runtime overrides. A mutable config still requires explicit `recompile()` for compile-time method changes. | +| ARCH-06 validation assertions/fixtures | Root ownership | No claim from these architecture tests that all validation experiments pass. | +| ARCH-07 Python floor | Fixed declaration | Existing evaluated union syntax requires Python 3.10; setup/pyproject minimum and classifiers now agree. Package version agrees at 0.5.1. No syntax backport. | +| Pure CPU import isolation | Fixed | Root/common/lbm/body package initializers load GPU facades lazily; compiler imports driver only when loading PTX. Config, equilibrium, geometry and artifact generation no longer require importing PyCUDA. GPU facade access still requires its dependency. | +| D3 advertised capability | Explicitly restricted | `validate()` keeps legitimate D3 schema/local-operator research. `validate_runtime()` rejects D3 Simulation before allocation/build because boundary/auxiliary/object paths remain incomplete. Numerical D3 local repairs do not imply a complete runtime. | + +Validation now explicitly rejects unknown configuration enums, nonpositive/nonintegral dimensions/block sizes, block sizes above 1024, nonfinite numerical values and invalid density/viscosity/guard/damping values. These checks remain active under optimized Python, unlike assertions. Device-specific limits beyond the CUDA block maximum remain a runtime/compiler concern. + +## Minimal API and changed files + +```python +build_dir = compiler.generate_config(cfg, n_objects) +ptx = compiler.compile_kernel(arch=arch, build_dir=build_dir) +module = compiler.load_module(ptx) +# caller later releases resources and their private source/artifact directory +compiler.cleanup_build_dir(build_dir) + +with ctx.activate(): + # allocate/use/free GPU resources owned by this context + ... +ctx.close() +``` + +`generate_config(); compile_kernel(); load_module()` remains available within one Python context. Interleaved callers should use returned paths. A failed compile clears implicit last-PTX selection while preserving an explicitly addressed older artifact; it cannot silently load previous code as the latest result. Cleanup refuses paths without the compiler marker and refuses the package kernel directory. + +Files: `config.py`; `cuda/compiler_v2.py`, `cuda/context.py`, `cuda/__init__.py`; package/common/lbm/body `__init__.py`; `pyproject.toml`, `setup.py`; `configs/CONFIG.md`. Parent integrates `simulation.py`; the later explicitly delegated cleanup change adds preflight active-operation rejection, retry after synchronize/detach/directory-cleanup failures, and preservation of the original constructor exception if best-effort cleanup also fails. Constructor rollback cannot guarantee release after a driver failure; it preserves the useful primary error rather than replacing it. + +## Verification + +Executed with `PYTHONPATH=src` and `/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python`: + +```text +python -m pytest tests/unit/test_build_contracts.py \ + tests/unit/test_context_ownership.py tests/unit/test_simulation_lifecycle.py -q +18 passed, 8 subtests passed in 0.37s +``` + +- Build tests read actual generated headers and simulate the compiler invocation to prove two simultaneous configurations remain isolated, explicit interleaving retains the intended inputs, source header hashes do not change, output traversal is refused, cleanup is owned/idempotent and failed compilation cannot implicitly select a previous PTX. +- Config tests cover rho/method literal fidelity, explicit missing paths, invalid values, structural signature and D3 schema/runtime distinction. A subprocess explicitly blocks `pycuda` while importing config/equilibrium/circle/compiler. +- Context tests execute the real context implementation against a driver-stack model: A/B nesting, non-LIFO close, active close refusal, exception unwinding, repeated close and nested/no-context decorators. +- Lifecycle tests execute real Simulation cleanup with a CPU owner model: active close preserves resources; synchronize/detach/directory errors are retryable; constructor cleanup does not replace the original failure. + +These are bounded CPU tests with explicitly modeled driver/compiler operations, **not** GPU validation or performance qualification. Parent performs isolated NVCC and actual V100 checks across repaired numerical/state paths. Source snapshotting adds construction/recompile I/O; it adds no per-lattice-cell work. Activation adds per-entry Python/driver overhead; its cost is not benchmarked here. Production fused kernels and module layout remain unchanged. + +## One cross-review of state integration + +Reviewed checkpoint v2 geometry/projection/role validation, v1 limitations, host-control restoration, parameter-study viscosity handling, field snapshot parity, context decorators, pinned scratch ownership and manager action staging. Accepted the actual boundary: low-frequency scratch operations synchronize before freeing their host/device buffers; `run()` synchronizes before action staging can be reused. No blanket claim of arbitrary concurrent manager use. + +Sent two actionable issues to owners: (1) parent `run(checkpoint_interval)` must increment the observation normalization count per completed batch before saving, and synchronize the selected stream before saving; (2) checkpoint scalar metadata should be fully coerced/validated before host/device writes, including malformed runtime parameters/observation counts. Owners handle these in their scopes. This is the single requested cross-review, not a new ledger or ongoing architecture expansion. diff --git a/research/repair-2026-10-10/repair-numerical.md b/research/repair-2026-10-10/repair-numerical.md new file mode 100644 index 0000000..0c5757f --- /dev/null +++ b/research/repair-2026-10-10/repair-numerical.md @@ -0,0 +1,66 @@ +# Numerical repairs — 2026-10-10 + +Owner `/root/numerical`. User-authorized repairs, not jet/AMR implementation. Scope: numerical CUDA operator/boundary/step headers, `lbm/stepper.py`, permanent actual-operator regressions. No generated repository config headers, PTX, simulation.py, environment or GPU state modified by this agent. Historical audit scripts/results are retained as evidence, not rewritten to conceal their original failures. + +## Reference and design review before edits + +Read repository architecture guard. Applicable physics/acceptance: advertised D2Q9/D3Q19 SRT/TRT/MRT local mass/momentum/equilibrium invariants, low-Mach nonuniform closed-channel FP32 reference, same-time storage conversion, moving impermeable wall; no production-Re extrapolation. Code path mapped from `LBMStepper.step` to collision dispatch, force-region postpass, EsoPull sync, curved-wall prepass and in-place step. Historical `b110591` explicitly introduced force_region as an operator-split correction; `6e3756c` introduced initialization-compatible EsoPull semantics. Those intentional choices are retained. + +Reference set (local checked-in sources): + +1. `ref/lbmpy/src/lbmpy/forcemodels.py`, Guo lines 273–300: source correction is `M^-1 (I-S/2) M Fin`, with half-force equilibrium velocity. A single SRT scalar is not the general MRT/TRT correction. +2. Same file, EDM lines 493–510: equilibrium difference at `u+F/rho` minus equilibrium at `u`. For the repository's quadratic equilibrium, raw Guo source at midpoint `u+F/(2rho)` is exactly this difference. It preserves the existing post-step force-density interface without claiming equivalence to collision-integrated global Guo at all orders. +3. `ref/lbmpy/src/lbmpy/boundaries/boundaryconditions.py`, UBB lines 909–935: fluid-to-wall outgoing direction maps to opposite reflected population with **negative** wall-velocity correction; compressible convention multiplies by density. Also inspected NoSlipLinearBouzidi for interpolation branch context. +4. `ref/FluidX3D/src/kernel.cpp`, load/store around 1333–1343 and streaming section: paired EsoPull layout is a parity-dependent mapping. Same-time conversion must invert the read addresses; advancing store is a different operation. Actual CelerisLab initialization and caller time-count evidence determine which stage is used here. +5. `ref/LBM_boundary_methods_for_stable_high_Re.md` and current source descriptors informed scope: existing west inlet is a ghost-source scheme; only its algebraic shifted-weight restoration is repaired. No general stability claim or boundary-method replacement. + +## Dispositions + +| Finding | Status | Repair and preserved design | +|---|---|---| +| NUM01 global TRT/MRT force | confirmed / fixed | TRT source split into even/odd rates. MRT adds half source before linear relaxation and half after, exactly implementing the model-specific relaxation matrix. Existing half-force velocity and model rates remain. D2 entire vector checked against independent moment-matrix oracle. | +| NUM02 force-region underforcing | confirmed / fixed | Keep sparse post-step split impulse and public fx/fy force-density semantics. Remove spurious collision scalar. Midpoint source equals exact equilibrium difference, including second moments. Actual ForceRegionKernel regression checks full vector with non-unit rho, nonzero velocity, opposite signed forces and both layouts/parities. Overlapping actual fluid footprints are rejected by state owner's compact-list validation to avoid duplicate writers. | +| NUM03 full D3 entrypoint compile | confirmed / runtime capability rejected; implementation deferred | Architecture/root add `validate_runtime()` rejection for D3 Simulation. Legal schema and local D3 operator tests remain possible. Isolated complete D3 entrypoint still fails 18 dimension-mismatch errors in aux/sync. This round does **not** claim D3 solver support or complete dimension-qualified boundaries. | +| NUM03b shifted D3 MRT | confirmed / local operator fixed | D3 projection uses `g-feq` in the same representation. Removed inconsistent physical-unshift/shift around compile-time shifted equilibrium. Equilibrium/force local regression covers shift on/off. | +| NUM04 same-t EsoPull write | confirmed / fixed | Store uses exactly `esopull_src_cell` and `esopull_slot`, inverse to read at identical count, never the advancing store mapping. Nonuniform exact-address inverse at t=0,1,2,3. | +| NUM05 sync collision/shift | confirmed / fixed | Encode only subtracts weights when needed and encodes at same count. No unsolicited collision of patch/halo. Actual decode/encode preserves arbitrary nonequilibrium populations within FP32 conversion roundoff. | +| NUM06 moving wall | confirmed / fixed | Fluid→solid direction gets negative moving-wall reflection correction. Both paths use local physical density consistent with compressible equilibrium; EsoPull obtains density from pre-streaming donors. q<1/2, q≥1/2 and fallback retained. No omega API sign change. | +| NUM07 EsoPull y-wall stage/race | confirmed / fixed | New read-only `PrepareEsoPullWalls` snapshots 3 donors × 2 rows before any curved/source/in-place mutation. Main step reads compact scratch. t=0 uses initialization-aware helper; later t uses previous spatial postcollision values. Pure double-buffer helpers no longer use timestep as a storage-mode sentinel. | +| Shifted inlet density closure | confirmed / fixed | Both descriptor-weight sums equal 1; replace 5/6 and 19/18. Preserve existing west ghost-source boundary schemes, timing and damping. | +| LES model-family differences | design retained | No unsupported claim that closed-form and iterative LES are interchangeable, no change to LES definition. | + +## Phase and interface details + +`load_physical_node_esopull(k,t)` reconstructs the next pull state at the completed count. Its spatial meaning is not the same-cell postcollision state reconstructed by `load_physical_dir_pre_streaming`. Decode/encode and snapshot restore retain the existing next-pull interpretation. No clock advancement is hidden in encoding. + +`EsoPullStep` now takes `const float* wall_values` immediately before `t`. `LBMStepper` allocates `2*nx*3*sizeof(float)` scratch and launches the prepass on the same stream before `_launch_curved`. This costs one small boundary launch and `24*nx` bytes; no performance-neutrality claim is made. Separating preparation from writes removes the added wall cross-thread read/write hazard; it is not a blanket race proof for all existing inlet/outlet schemes. + +Force-region updates remain split and distinct from global collision-integrated Guo. Target momentum per cell per step is F. Macroscopic interpretation with time-dependent forces must respect each scheme's stage; no new global half-force convention or external control semantics is introduced. D2 Guo collision full-vector oracle checks more than momentum rescaling. + +## Verification + +Permanent tests: `tests/unit/test_numerical_operators.py` and two `tests/unit/cpp/*_regression.cpp` fixtures. All C++ uses actual repository headers/kernels with CPU CUDA-qualifier shims; no copied production arithmetic replaces the invoked operators. Python contains independent D2 matrix/TRT references. Optional nvcc tests copy the kernel tree and edit **only temporary headers**, then emit temporary PTX. + +Command: + +```text +PYTHONPATH=/home/frank14f/CelerisLab/src /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -m pytest tests/unit/test_numerical_operators.py -q +``` + +Coverage: + +- 12 local dispatch cases: both dimensions × shift on/off × SRT/TRT/MRT, each at omega .7/1.25/1.8, non-unit density, nonzero velocity and nonequilibrium. Mass/momentum increments, D2 full-vector relaxation, equilibrium invariance and inlet closure. +- 12 semantic cases: D2 models × shift × no-slip/free-slip. Same-time nonuniform encoding, actual no-edit sync, actual wall prepass at initialization and both later parities, moving-wall all directions/branches with rho1.17, actual force-region kernel, and four actual closed-channel steps compared at identical postcollision spatial phase between double-buffer and EsoPull. x periodic, no inlet/outlet donors; this is a deterministic CPU schedule check, not GPU concurrency validation. +- 12 isolated D2 entrypoint compile cases: collision × shift × FP32/FP16S, covering both entrypoints and both wall branches. FP16S is compile coverage only in this agent's work. + +Initial 28-test run passed (before expanding semantic cases to all collision models); final expanded result is recorded below. FP32 summation tolerance permits four unit-density epsilons (5e-7) for D3 19-term accumulation; this is separated from per-population vector tolerances. Original bugs exceed tolerances by orders of magnitude. + +GPU execution is owned by root, to prevent source/cache/device competition. Add root's observed GPU outcomes separately; no GPU or long-flow claims are inferred from these local tests. High-Re stability, curved-body force/torque convergence, inlet/outlet in-place race audit, LES combinations, complete D3 and performance remain beyond the demonstrated surface. + +### Cross-review and GPU handoff + +State owner independently accepted same-count inverse addresses, encode-without-collision, and staging before curved/in-place writes on the same stream. I reviewed `field.py` snapshot/restore and `common/checkpoint.py` and reran `tests/unit/test_state_regressions.py`: **21 passed**. Field-only snapshots decode at save count and encode at current count without resetting time. The t=0 initialization special pre-streaming mapping means restoring an initial field at later time promises restored next-pull field, not reproduction of the original initialization step. Full checkpoint restores raw storage plus original count and is the restart mechanism. + +Expanded semantic CPU run: **12 passed**, covering all SRT/TRT/MRT, shifted/unshifted, no-slip/free-slip combinations. Together with 12 local-operator cases and 12 isolated compilation cases, all **36** permanent numerical cases have been exercised successfully across the recorded focused runs. + +Added `tests/integration/test_numerical_gpu.py` for root's coordinated execution: 18 bounded FP32 cases (4 nonuniform closed-channel layout comparisons over four steps, 4 actual t=0 initialization/staged-wall cases, 6 global-force momentum cases, 4 force-region total impulse cases). Syntax checked; this agent has not run GPU. The layout comparison constructs identical **spatial postcollision** input at completed count 1, rather than incorrectly comparing DB postcollision diagnostics with EsoPull next-pull diagnostics. Actual t=0 initialization is checked separately. No FP16 runtime or quantization tolerance is silently substituted. diff --git a/research/repair-2026-10-10/repair-state.md b/research/repair-2026-10-10/repair-state.md new file mode 100644 index 0000000..3c7f2d5 --- /dev/null +++ b/research/repair-2026-10-10/repair-state.md @@ -0,0 +1,75 @@ +# 状态与对象修复报告 + +2026-10-10,state agent。按用户新授权实施局部修复;未实现 jet/AMR,未改外部 DynamisLab、原始生成头或 PTX。Simulation 集成由 root 负责。 + +## 范围与依据 + +已读 `BRIEF.md` 与 `.github/skills/lbm-ref-architecture-guard/SKILL.md`,复查当前 public API→ObjectManager→patch/field→checkpoint 链及 git 历史 `987566c`(runtime body sync)、`04c2bc7`(obs interval)。保留已有 runtime pending/discard 和 sync 重编号设计。物理约束为已有 D2Q9 topology patch、FP32/FP16S、两种 streaming 的地址/编码/阶段不变量;不以未知生产 Re/Ma 阻碍修复这些代数错误。 + +编码与阶段参考: + +- `ref/FluidX3D/src/lbm.cpp:409–414`:FP16S 存储乘 32768、读回除 32768;host 局部 patch 也必须走同一编码。 +- `ref/FluidX3D/src/kernel.cpp:1332–1346`:Esoteric Pull 的 load/store 空间映射和时间奇偶不同;推进 store 不是同 count 的读写逆。 +- `ref/FluidX3D/src/kernel.cpp:1141–1154`:新流体邻域只从 fluid donor 构建宏观量;本次保留原 BFS 方案,修正其实际读取布局。 +- `ref/FluidX3D_analysis.md` §2.1/2.2:本地设计背景;核实公式以实际参考代码及本库 descriptors/storage 为准。 +- PyCUDA async H2D/D2H 要求 page-locked host buffer。永久测试以拒绝 pageable async 的 driver double 验证调用契约;实际 GPU 验证由 root 统筹。 + +## 逐项处置 + +| 审查项 | 处置 | 具体边界 | +|---|---|---| +| STATE-01 Q-major vs AoS | fixed | body patch 全部按 `field.ddf.reshape(nq,n)[:,cell]` 访问。EsoPull compact scratch 仍是 cell-major;root 修正 scatter/gather 转换 | +| STATE-02 shift/FP16 越界 | fixed | field `_encode_ddf` 是整场/局部编码共用实现;patch 按方向与连续 cell 段上传,用实际 store_bytes,未改 cells 的 GPU 字节保持原样 | +| STATE-03 force action 丢失 | fixed | set_force 同时更新现有 force-region `state.vx/vy` aliases;set_body_state 同步 omega。全 action refresh、重编号与 checkpoint 不再丢另一对象控制;未新建第三份控制架构 | +| STATE-04 pre-init ID holes | fixed with explicit ID rule | 立即 remove 后将剩余 registry dense 重编号,刷新 action;已有 runtime sync 重编号不变。之前返回的 numeric IDs 失效,由公开 remove 文档说明 | +| STATE-05 checkpoint state/geometry/action | fixed, versioned | v2 保存实际 geometry/role/projection 指纹、host state/control、runtime params、已应用 device action 与 obs interval;不同几何先拒绝,匹配几何重建 compact lists/action。相同 count 不再充当 geometry 相等证明 | +| STATE-06 same-step cache | fixed | load 后始终 invalidate_host_ddf_cache,即使恢复 step 等于缓存 step | +| STATE-07 field snapshot parity | fixed; field-only design retained | snapshot 不回退 clock/body/control。EsoPull 保存 same-count next-pull 物理分布,restore 按当前 count 编码;direct field EsoPull 调用缺 step_id 报错。精确时间回退用 checkpoint | +| STATE-08 overlay changes solid | fixed | 先合成 solid occupancy,再只对 fluid 加 sensor/force annotations;compact lists 过滤 solid,sensor count 按有效 footprint 更新;实际 fluid footprint 重叠的多个 force_region 明确拒绝,以免并行同 cell 写竞争 | +| STATE-09 async pageable buffers | fixed | action 使用持久 pinned staging;EsoPull scratch pinned,encode 完成后才 free;compact SoA stream upload 使用 pinned staging 并在返回前同步。无 stream 路径使用同步复制 | + +`field` 的 GPU 入口添加 architecture 提供的 `context_bound`。root 将 `field.ctx` 绑定实例 owner;独立低层 field 未附 ctx 时保留“调用者已使 context current”的原约定,CPU driver-double 方法仍可运行。 + +## Checkpoint 兼容性与选择 + +v2 读档在 GPU 写之前检查:lattice/extent/precision/streaming/shifting,dense IDs、geometry/role、实际投影指纹、重建 flags、array shape/dtype 与非负 step。不同几何不自动替换用户 case;调用者需构造匹配 case。匹配状态恢复后重建 host action、compact lists、params 与 obs,缓存失效。已应用 device action 单独保存,以保留 host 新目标尚未上传时的 `run(upload_act=False)` 时序。runtime params、obs interval 与 object state/control 在设备写之前完成转换和有限性检查。 + +保留有意的 collision/LES 等 parameter-study restart。若 viscosity 改变,使用当前 config 的 omega;不让 saved omega 覆盖用户新黏性。相同黏性可恢复原 runtime omega/forcing。 + +安全 v1 兼容范围:内置 CircleGeometry 的 circle/sensor,位置/半径/type/flags 必须一致;缺失 obs 明确清零 interval。v1 force_region 未保存真实控制,拒绝该类型并给出具体错误,不虚构恢复值;custom geometry 也不猜测。v1 无法恢复它从未记录的任意 runtime param,未宣称旧档具有 v2 完整性。 + +snapshot 明确保留 field-only 公共语义:跨奇偶恢复保证所保存的 next-pull 物理 field,不恢复时间与控制,也不声称恢复 t=0 初始化的特殊 wall 分支或整个运行历史。禁止把它描述成完整 checkpoint。 + +## 改动文件 + +- `src/CelerisLab/body/ddf_patch.py` +- `src/CelerisLab/body/manager.py` +- `src/CelerisLab/body/preprocess/flag_overlay.py` +- `src/CelerisLab/lbm/field.py` +- `src/CelerisLab/lbm/curved_links.py` +- `src/CelerisLab/common/checkpoint.py` +- `tests/unit/test_state_regressions.py` +- `tests/integration/test_state_gpu.py`(13 个有界 GPU cases,交 root 运行) + +新增测试使用真实 class/method 与真实 h5py HDF5。仅 driver/device allocation/kernel invocation 用隔离 double;不是 AST 摘录、不是另写一份 host 实现。double 对每次复制检查 allocation 边界,async 时检查 pinned 来源;snapshot 的简化 parity 映射只检查 host 阶段协议,真实 EsoPull CUDA 数学由 numerical 的 actual-header 测试和 root GPU 验证负责。 + +## 实测 + +导入来源已核对为 `/home/frank14f/CelerisLab/src/CelerisLab/__init__.py`,解释器明确为 `/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python`。 + +``` +PYTHONPATH=/home/frank14f/CelerisLab/src \ +/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -m pytest \ + tests/unit/test_state_regressions.py tests/unit/test_body_flags.py \ + tests/unit/test_pending_edits.py tests/unit/test_sync_plan.py -q +``` + +**60 passed**(0.38 s,2026-10-10 最终 state 范围)。覆盖四种 precision×shift、Q-major BFS donor、无关 cell 字节、control→remove→sync、双顺序 overlay、有效 sensor counts、force overlap rejection、pinned action/scratch/compact、field-only snapshot parity、checkpoint v2 roundtrip/拒绝前零设备写/同step缓存/黏性参数研究及 v1 兼容范围、malformed metadata 的拒绝前零设备写、host pending/device applied action 分别恢复。 + +## 交叉复核与剩余验证 + +已复核 numerical 的 same-time store 使用与 load 相同的 `src_cell + slot`,Encode 不碰撞且先转 shifted 表示;PrepareEsoPullWalls 在 curved apply 和 in-place streaming 之前同 stream 完成,pre-stream donors 不再被后续写入污染。接受其阶段修复。architecture 已独立复核 checkpoint/context/lifetime,接受核心修复;指出的 metadata late coercion 已修复并加入回归。其指出的 interval checkpoint obs 计数与外部 stream 同步由 root 修复。numerical 也独立读 field/checkpoint 并重跑 state 回归通过。 + +本 agent 独立重跑 `tests/unit/test_numerical_operators.py`:**36 passed**(28.57 s),支持上述跨模块复核。本 agent 未运行 GPU;root 已收到 ready 通知,并负责真实 CUDA、集成、资源关闭与 TRON handoff。D3 geometry topology patch 仍未实现,不在此修复中伪装支持。BFS 仍是已有的新流体初始化策略,本轮未给动态运动边界新增守恒算法或稳定性保证。 + +GPU 专项测试覆盖:4 个 EsoPull snapshot precision×shift 跨一步 parity;4 个 shifted topology add/remove;2 个两布局 checkpoint bitwise continuation;geometry mismatch 不修改设备;interval checkpoint observation normalization;host pending/device applied controls 的 upload_act=False 续跑。这里记录测试定义,不提前宣称 GPU 通过;实测由 root 最终日志给出。 diff --git a/research/repair-2026-10-10/simplification-checks.log b/research/repair-2026-10-10/simplification-checks.log new file mode 100644 index 0000000..fa9d464 --- /dev/null +++ b/research/repair-2026-10-10/simplification-checks.log @@ -0,0 +1,13 @@ +................................................................ [ 45%] +........................................................................ [ 96%] +..... [100%] +141 passed, 8 subtests passed in 77.58s (0:01:17) + +Boundary isolation regression on GPU 0: +..xx [100%] +=========================== short test summary info ============================ +XFAIL tests/integration/test_numerical_gpu.py::test_curved_layout_equivalence_isolates_open_boundary[False-0.0] - Known unfixed EsoPull inlet/outlet donor phase mismatch; live neighbor reads also need staging +XFAIL tests/integration/test_numerical_gpu.py::test_curved_layout_equivalence_isolates_open_boundary[False-0.002] - Known unfixed EsoPull inlet/outlet donor phase mismatch; live neighbor reads also need staging +2 passed, 18 deselected, 2 xfailed in 22.30s + +CLI reporting exit-status replay, GPU results mocked: Kan99b good/bad=0/1, Sah04 good/bad=0/1. diff --git a/research/surface_actuation_20261014/baseline.json b/research/surface_actuation_20261014/baseline.json new file mode 100644 index 0000000..0ad0688 --- /dev/null +++ b/research/surface_actuation_20261014/baseline.json @@ -0,0 +1,387 @@ +{ + "copy_dir": "/tmp/celeris-surface-baseline-i8y0r5qt", + "head": "6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0", + "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?? examples/\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", + "hashes": { + "src/CelerisLab.egg-info/PKG-INFO": "0b9a8a4e8d60bc531473688723ddef0aab02c7ccc4997e31c9b6a6c35011ca77", + "src/CelerisLab.egg-info/top_level.txt": "cd51958ca03afabbaa9618c60b8280e486f8cc0b0359b839e10f886e7c3948f8", + "src/CelerisLab.egg-info/dependency_links.txt": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "src/CelerisLab.egg-info/requires.txt": "36e1404178e5ea590b2fc04e8ba4d748ec9a82e7693136ccf0dfd204fe265c04", + "src/CelerisLab.egg-info/SOURCES.txt": "f36b29c1b34c4bd6b2acc3ccdd21c24ee5077df7e2a20a652d9fae77eedb8e21", + "src/CelerisLab/simulation.py": "34d69e71844f553790c5a2bed0f8fbfb912a9498e95b500d1ef2ad41cae3b424", + "src/CelerisLab/config.py": "2f1bba7515f5bc08cb3a8d140bcafe7fa0689e01b3b06494697bb2956a71530e", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/cuda/compiler_v2.py": "c4cc3ec4445c8d75e6a253dd87963877117a722bc73b9d4811806fc6045d08c1", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/lbm/refinement_stepper.py": "ad57a6a3887b007488b4954b24ff06cd8cde2b12674bdafb97bfda1961ae1da4", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/refinement.py": "554735c5613129eb29f339c6aeeb4f3a3bbc5aba67558be51fbf7c2fb6ac442a", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/refinement.cu": "025c59dc9c207a831e78e1635cb3f14fe60b64c021004a0d66e5d01fda8554b5", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/kernel_v2.ptx": "a599ee30ae66800f4d4220eb79dfed35ff32991661260f01ea58023ef780f0ca", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "f9f8242b38e8e0cf8425b75e2b0215bc15363c62eaa0fb43c761b8e0931bfdc9", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/common/checkpoint.py": "5b7caf3896167a3f37c539b58837de6eb3f8085fa7bf5f821a09666cc16d43a4", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/CONFIG.md": "41cafdbe525366c08aa9d0416ea026ccf0026ba7123b8a9b65f968a80d928e3a", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_j1.py": "51b758a271ff358f931b3140a80082294a67e66c2fec0f8c19319e37f92aadc4", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_j2_slot.py": "b7d2d3aa06fcafc3ac62ed4a50892afbdb7f86e5720ce75a39ce317b6f571dad", + "tests/validation/run_j3_coverage.py": "329869519b7078e854d96241a7aad8ef93f35ac9be83f0be502c3a93523c3b13", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/analyze_j3_saved_frames.py": "438f67dac682b94c4950626f8de4fdcde48c3a4e9ecf8fdf1b0ada4b6e0e781a", + "tests/validation/diagnose_j3_lags.py": "286fcd65b3261667a847b9b26e213d0af92cf459faa6bbd774f78c8479ce31d7", + "tests/validation/run_j3_reservoir.py": "47535bc3569ce68c888d38978bc4f9077fd763a17829c20c081be52bb18a2903", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9", + "tests/validation/multigrid/test_cpu_reference.py": "ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca", + "tests/validation/multigrid/cpu_reference.py": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "tests/validation/multigrid/cpu_reference_v0.2.py": "b6adbad7da625ef6a6b97958ea9625030ed92676d0cada48e061c87bcf7ca8c9", + "tests/validation/multigrid/test_open_corner_negative_control.py": "59a6f8ca80cdd63cb7827fbebf9b4b555c3793f19dd6bca801544ec10b5cbe1b", + "tests/validation/multigrid/test_refinement_followup.py": "6643e26cd877bf0d0f030e974f00a1d1c0f0350cc76d1c8affed3e8ba2f4393b", + "tests/validation/multigrid/local_stress_observable_v1.py": "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456", + "tests/validation/multigrid/test_refinement_gpu.py": "0021a39b3a131347196845cff6507c90c387b46b772fe1319d634178c5e13354", + "tests/validation/multigrid/shear_diagnostic_v0_2.py": "a8b1cf2f7abd00efc4d068bbd27bb2317144a6ca4c545d9b2e0dcf421eadebc6", + "tests/validation/multigrid/test_tron_additions.py": "8e7a6a90b85e64c7326719e7b8bca2f6d34fb4c80690f0685f7e291ab93bd2a4", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt": "0577df5b3f5cb3c7b6e1ef2de71344f8fd3e6d959117487a06cbaf7f2afa3dea", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt": "28ddd1267ca91a772f5a6bfc65d949c9a4ea7dac5c9ba3a0bdb168492810b670", + "tests/validation/multigrid/shear_v0_2_evidence/run_once.py": "6698a2e040c56be949b809387d4518eb0ba82d34cc9d99640da4f8bf3c35c23f", + "tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json": "56fbd0259ff3d4dbd14ace52f64e249a435e9df91732b0e4027def2c344c2e6a", + "tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json": "c2d7ce8d16a0f47baff0788a153353dcf67088da974d9cd3d521b04ecd91ee05", + "tests/validation/multigrid/shear_v0_2_evidence/comparison.json": "41c00372099dd04b6d323785e9eaf4fec09da1753d3d150ffa230800f904142f", + "tests/validation/multigrid/shear_v0_2_evidence/baseline.json": "98a7853341ea732762c7506694e3a867a7259bf110e9e461ea84f741fd9ab829", + "tests/validation/multigrid/shear_v0_2_evidence/manifest.json": "e42aa19e91608164698bea42da88fbbfab8b0f87cc37b27c5baf165453a4fdb0", + "tests/validation/multigrid/shear_v0_2_evidence/README.txt": "4306a34b6896bd6e7a5c2ca71d68e18450359239d0c7ad7a67a4e83e7155959a", + "tests/validation/multigrid/shear_v0_2_evidence/joint_report.md": "1860b8082108c8b8a87998af90cd0b81dce1c04e9f6c67b41e0912f9fef6cc9c", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_horsea.txt": "882f2cfb1dbdf82cce63c011397e7c2e6307bbcfec42a3510648d328cd6ddcfe", + "tests/validation/multigrid/local_stress_v1_evidence/run_once.py": "e629800291ef65ffea8555f66ec80bf15200552540b2a493a677bfb53d0830b3", + "tests/validation/multigrid/local_stress_v1_evidence/source_manifest.json": "d2cf90b73458f493c665c9a281d06aef0c190cf0d143639fb77ab838c78f020c", + "tests/validation/multigrid/local_stress_v1_evidence/results_horsea.json": "f17b4644d19eb75d55deb7021ab679cb9e7922a2b46f1cacf8b6da6bfb9a2690", + "tests/validation/multigrid/local_stress_v1_evidence/comparison.json": "be236671a501c31c06f7e266f6e0c0c2a89aede321a483452050ff37bf84c84a", + "tests/validation/multigrid/local_stress_v1_evidence/baseline.json": "64f6541447afbd15b1b15d802ad6f1b5042aaf84e7d4d2414e4ed4c52cf70507", + "tests/validation/multigrid/local_stress_v1_evidence/manifest.json": "3a9fa8c7d691c1b8c24f05940eb724d30b890dd8ed636551068d2633d7db2f70", + "tests/validation/multigrid/local_stress_v1_evidence/README.txt": "4f62314876047ee437bb9ecbf84798d2a9f6e85f6a3aef260277b85bcdb35fae", + "tests/validation/multigrid/local_stress_v1_evidence/stdout_local_stress_observable_v1.txt": "6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4", + "tests/validation/multigrid/local_stress_v1_evidence/TABLE_local_stress_observable_v1.md": "d8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt": "457f1d2173496554c87ca6e61df518c0b8f1e0a28cdfd94b94ebbb61bc459d70", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt": "73e4ef01138842981daaa534390f1463839e63833c11f4e8872f94f8eaadc717", + "tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json": "914389afc39752bcd4132aa21fc8d5cbcf0ca75b1efd6a49becab15c2fa3361b", + "tests/validation/multigrid/cpuref_0_3_evidence/baseline.json": "0daaccee41cabeb17a00e2405e2c7fd0b80d36f2d01778eb39c9fd22b13d2d47", + "tests/validation/multigrid/cpuref_0_3_evidence/manifest.json": "2850ecaf2e19d010ba35eb54162371d82cc1a092831e08a03b6adf75a614988b", + "tests/validation/multigrid/cpuref_0_3_evidence/README.txt": "1947ee0232b88b3cc2c506d0b0af5ba051ecc94aa8f7f09228ef3939cc95919b", + "tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md": "065947e15b2242bce7d3eb05a3acdbb59939c621dcd5d31540ad4a1bd4416818", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_planar_velocity.py": "b656da0880b4234b1db805544edbe0d2473cbcc7c2c869c71d8251337f62a982", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_reservoir.py": "e718c78a53c3941aba7feb8ae4e8bb0b1726c1145de84febf91220c1917991c9", + "tests/unit/test_refinement.py": "90751142f920f1c5e988577a45afa94871a6617009cdc78323a87fc7795f4634", + "tests/unit/test_slot_velocity.py": "6a9494de9a32c350389ccbed58af48951f6b25a21a258537d2e8b73eb67cb11d", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/cpp/reservoir.cpp": "c3eacaf0271400eb45ad559b571a8f7faa2a809d5f1857ffeb5592addce2cd0c", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/slot_profile.cpp": "31ac58ccab175bf79fa59fc46d4c0842df18ab0a5e5916be84760d9da2b75788", + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C4_deceit_f1p5.json": "11dab8440d8c4f385061d2536403f4313c6f026b4e0b7672681327a9f4f37ebb", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C6_deceit_f2.json": "e0c4e8bcc55da5dc8de1e2fe88029aa3e67453734faa44451f5a6dfa9131557f", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C6_deceit_f2.png": "e0a66708ce2a29c4c6b854d2596b3ffca181dc6e35d99cc94e08af3e2d8c024e", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C3_deceit_multi.json": "24c8e433aab6d207dab67546c4079868c4244c2948c32c94cd08e4f331991807", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C0_no_ctrl.json": "cf3af733a08f081cc5f879e8da79d7c60104099f4452af5b2a4a96c0e6bd5889", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C5_deceit_multi_f1p5.json": "a4cb4ff4481b39b9ee61b1d7209416237a7fe86b22c5068d713ccec9c3f7afe4", + "tests/output/exp_ctrl_matrix_streak_ny300/manifest.json": "d8a20dacc92321d98354684976f771a9ca8989fc63ddcd78e15c7768c6617671", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C3_deceit_multi.png": "c6fed617cc6ffe6677157a9b58811d5f4613725eb98a5aec830fd07dc1aac38e", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C2_deceit.json": "7526a6b20a158461b85b1a64070b46c2b21be1e01c5ee025e6746fcf47ea3397", + "tests/output/exp_ctrl_matrix_streak_ny300/summary_C1_stealth.json": "63d34a0ab33e9fa8fe7311363efbd1b2875691f5b4958bb645b8c7ac38f1ad6b", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C0_no_ctrl.png": "0cfd7ce8f9d743bf22a7a694b4e5a3616557cb8f1db2f4ddf49cc4bef96efef2", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C4_deceit_f1p5.png": "4dcfc186928dcb83d28e9eb4cb2ecb4b163eb6f121d57036b4c05ab162be0951", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C1_stealth.png": "5e3cbbefda06fcef243d7d06d74a473972350cfa4ae88bdfdb349dce13943151", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C2_deceit.png": "22f1db77499bdbd1b3cd35f5b58b1a884dd94a86fdcfef07abd4157e6aaf8d19", + "tests/output/exp_ctrl_matrix_streak_ny300/streakline_C5_deceit_multi_f1p5.png": "823e475cc901af3d6f4d0c56eb07822b3e73a2b9d0aa23e20e3741023fe90092", + "tests/output/kan99b_validation_esopull/summary_runs.json": "fe3294a953580204319fb1143434e15096d8455b6073100dfe0d5491b76af394", + "tests/output/kan99b_validation_esopull/summary_runs.csv": "1a44bb27ee0a7fe0270905248c37364834248cdc8710bd68142a6a79bbdad82b", + "tests/output/kan99b_validation_esopull/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "9fbc7d507c129ed85c68a9a313e3eb3431470d091bd7723e63f8afd8a3d2b737", + "tests/output/kan99b_validation_esopull/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "8faac43f42d6e0c70085c6e616bfff4df8de897e315fc0d2b4aa8bd635c3fa05", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C4_deceit_f1p5.json": "b613ae55fcfbd45a1a922d6d529e5274ba9d2987fdf5620fe866b889b931e48c", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C6_deceit_f2.json": "dbf54f9a183072547b22fa14334f0167e6eefb21c1208c4e8584bc196545a399", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C3_deceit_multi.json": "2100c6cc5c358a249804ce8f6f98531f3bc868e27af6d21a9d441b1b6a9e479e", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C0_no_ctrl.json": "a8b4697b7c0caeb958f80e282e32d673deac8c914008d64e6b38f7883eacc57e", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C6_deceit_f2.h5": "8d0c28566d2230b422691b738cc453705496bd150be038a576c0c0fba218fc1f", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C5_deceit_multi_f1p5.h5": "608767ca11d104fa4506b57204a0c8dbd739688224ebd924fe517ce9e21db823", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C1_stealth.h5": "a83c988cc8b1173a7b2f13b132ed7243e98304dccab2965aa16cf4d32f8df007", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C5_deceit_multi_f1p5.json": "6f6b9300782178e0ac9308a677bd9cb1565a383a78dff4cd52dea0bd464db31d", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C6_deceit_f2.png": "21bbe2dac1ab06ca1b172ec62d00daa7bcd65d99adac0ed03c5e30bed59e871a", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C5_deceit_multi_f1p5.png": "602a6586277699968b4cb167b134c8c406577038af088aa70baff682691398c4", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C1_stealth.png": "c1e1d04f266deac5fb2815a8283da80f9139ffaccbec2219d98544296bf3152c", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C4_deceit_f1p5.png": "96dee924e89b90091192a8d7b43321f109a5491511b8a83da77cfc611ae0d93b", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C2_deceit.h5": "aa5800a0cd594eeb7cf5449d6469d55e0c9033ced0ee0a3b5d59152e68c7e263", + "tests/output/exp_ctrl_matrix_vort_nx1500/manifest.json": "5d28f0f5428d7f0341e20d5d1f19c17bbc6f0f9b2a441d3c95f5422f3f2b4bd4", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C2_deceit.png": "1dcb6fb959f944d7ad89c4abaaef4d1fd4a77db8901804530e86fb336b883eb5", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C2_deceit.json": "b88ff5049aef59876b349d105f1c3467c17c9ba9022a48a77a6984f20da34345", + "tests/output/exp_ctrl_matrix_vort_nx1500/summary_C1_stealth.json": "515689cbfaa30a9e39d9907939ee194a4836b644a5e9124586e6b7221d2b394b", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C3_deceit_multi.png": "d69694a1a1b2f2ea0adc7b74b7526504e2ad0b5d6317bac9b3159b2e7e88cf90", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C0_no_ctrl.h5": "3a858d6be0a946e1d26bbfa192c2f0ca3910c0f140b42575ec9d9529dd99155a", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C4_deceit_f1p5.h5": "660e4619ea530dcd18c3afb2e7fa22cafd9cdba1be7888e31ab5b76a0902d2fc", + "tests/output/exp_ctrl_matrix_vort_nx1500/vorticity_C0_no_ctrl.png": "6d4d3934f1c8b20c2a5c742ae080a7143f0c139741966adf009a227c27e9bb1f", + "tests/output/exp_ctrl_matrix_vort_nx1500/state_C3_deceit_multi.h5": "1e72126f11b2995437cecb8cc0eeffb8807efbfa43d8f346f28711fea98ddc90", + "tests/output/kan99b_validation_ref/summary_runs.json": "449316c30585a8de9997538dead5d4e35a59bf00a2ac22d01b101ab600a4bc06", + "tests/output/kan99b_validation_ref/summary_runs.csv": "e8b9620f3772e5e421026103e456e6e844a91292f40affb96174c9dbde9b6e4e", + "tests/output/kan99b_validation_ref/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "4391f41d17ebeea1092f13b901923ced4ee2a1c5b346b79ef791d692847286b5", + "tests/output/kan99b_validation_ref/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "105c6eb21f1943d9d935246eab1602ff2016c415a139e24fee2793e88e006ead", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C4_deceit_f1p5.json": "0085a679a423621003eea81d4ac83bfe2edef2879eed7809d2a3675a212f791a", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C6_deceit_f2.json": "e820cf73f0e90bf93c34b24416e7692a6c2e51352ccf490fa6714d0812331ca2", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C3_deceit_multi.json": "571370c74ad9af589f3dc214669bff3d857efe6fc4fa13815b5d793d12b53770", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C0_no_ctrl.json": "ec5b89961033d8ebe0d66ce1ec7940dc2faf98130c38319bc9984ef654e60b50", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C6_deceit_f2.h5": "2792be74d8564fa29fd0636fc8493630fba2779c165b44330197095b3e296b18", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C5_deceit_multi_f1p5.h5": "2c64ee6c7a4ea2c42ed8f3d274402bec62de0e02ea0340e16022f0cdc92af724", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C1_stealth.h5": "100727d94fe6c2e46d7807eed0442555bdd1e26ec9b04b4c457171a2bbba3255", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C5_deceit_multi_f1p5.json": "f86166f121b4eeb6d74d8176c9265e7a3ccfe2540d040f554b6f96e6a6222c16", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C6_deceit_f2.png": "fef4de0e3ac8203742f35c16a02445b19c3f556b11f73abd5d8e3ca05ca33d78", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C5_deceit_multi_f1p5.png": "9136448e6d7565ca5af3666f9cf6e154342d8a3475076abfdbdd1ff9faec34f3", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C1_stealth.png": "544537a9c500a05937fd3be17c25e7d887461d9b83a15564f9ab7063208f40f6", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C4_deceit_f1p5.png": "51e7056db99dd653affbe913d52fa41df6ec0db921109384e3c679bda06b5a83", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C2_deceit.h5": "39d6c162085acae1612650da37d2314757715931e83a854e08bb01407d0f8efc", + "tests/output/exp_ctrl_matrix_vort_ny300/manifest.json": "05fbc2e7bbad4267a38e1094bbdd6bee6ad270412bdb5e92b0dfc9fa56969517", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C2_deceit.png": "07fc5817eba30371272b87ee2e023c0a1144077d1bef77efb2fd5dc284badcb7", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C2_deceit.json": "b1fcf76039c91a9080b830352dee2e95316d754b968cc27a8f68c51527661e76", + "tests/output/exp_ctrl_matrix_vort_ny300/summary_C1_stealth.json": "b78851637b9b7b93070524a2933cae1dab6d682f8894579b2849c64921e6c29e", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C3_deceit_multi.png": "2658f0747ed7287f7912fe15cc58a086e01ba284277cb98689bac01ecb6ec12b", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C0_no_ctrl.h5": "57f73f5f8dc4b32b156bc82300b1efd1e4eddadd9b8dc51cb7e6b41fa5c966bd", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C4_deceit_f1p5.h5": "2864b9dd086709ee8b8c3f262118a5130b0d40c86838f3ca0deab5bb898dafa8", + "tests/output/exp_ctrl_matrix_vort_ny300/vorticity_C0_no_ctrl.png": "2c7f3a8be2ee540afdfb66299e43a65583434bee84bde590124524a82868c900", + "tests/output/exp_ctrl_matrix_vort_ny300/state_C3_deceit_multi.h5": "39e0d9b032dfff8cf057b410a98973729285e7d03e89f9a6a002aaf7de3d7519", + "tests/output/stealth_sweep_fix_check/summary_stealth_s150_w0.02709.json": "8b1032e13975bb05c6a810fde175c8da51bacdb3dc745fd11c1049ca63bbf136", + "tests/output/stealth_sweep_fix_check/summary_stealth_s050_w0.00903.json": "fa7da24d5dab9fd3a3c2dea6b50d0224c7a99cd9141796e137304a6040b1ac8a", + "tests/output/stealth_sweep_fix_check/streakline_stealth_s050_w0.00903.png": "640928f7eb159e7caea32036123f86c281723d083cca46839ba86bce8361ada7", + "tests/output/stealth_sweep_fix_check/state_stealth_s050_w0.00903.h5": "187ac365f9f7370c888c4c65570c47e42465b2fccd432056c176528d45cf0c2f", + "tests/output/stealth_sweep_fix_check/manifest.json": "83a3f12a942fb644e470bd07a72f24921f2147d7df429110268c5c96a9953d1a", + "tests/output/stealth_sweep_fix_check/state_stealth_s150_w0.02709.h5": "e057e9db26b2546c0704e2c959cc7d2aac91e6a49b4c7ee75a409597a5db8716", + "tests/output/stealth_sweep_fix_check/vorticity_stealth_s150_w0.02709.png": "d2d202088624cf30868228f9c913ee30e1b386aaa2c22b0ea89be43dedc0712d", + "tests/output/stealth_sweep_fix_check/streakline_stealth_s150_w0.02709.png": "0edc7caa9caaffb754490bf1f6ac7ad7180e45a991439a3f4f83ed949a082a1a", + "tests/output/stealth_sweep_fix_check/vorticity_stealth_s050_w0.00903.png": "4088359b17c46ed4d7c8401d244808fe67723273b1d16d0671b69f9478c68c1a", + "tests/output/final_validation_round/validation_summary_report.md": "881cb7052e5a555afc87168a37268ee66e8e3fba172533706e858d996fabc7b9", + "tests/output/final_validation_round/sah04_mixed/s2_d48.json": "83c6c01201d90aae5c49e73ebeca88d1c7ded6cc83c13f4892a9188e6289483f", + "tests/output/final_validation_round/sah04_mixed/s4_reg_d96.json": "b32f03e6b347fc709cea2ecd488df0f85849c733bf6a4b9cf65ea69401c93a1d", + "tests/output/final_validation_round/sah04_mixed/s1_d48.json": "120e8e878f5712dc89b7cf78c7f8d0e3368d34ad5ef7494977e083b188a54c18", + "tests/output/final_validation_round/sah04_mixed/s3_stablecfg.json": "b38a3d197a188e65c163d974113af18f332b3abed083e2654e998d9980f6be9f", + "tests/output/final_validation_round/sah04_mixed/vorticity/s3_mrt_laststep.png": "dc96fcd05d458684cfb40d4cb741172213083e2f2665e2bae7e1f0267bb3575d", + "tests/output/final_validation_round/sah04_mixed/vorticity/s1_mrt_laststep.png": "73a3580ba3c7fe6ffeee4676a9a51b5bf678d6fb523456a61e185598389ea1e1", + "tests/output/final_validation_round/sah04_mixed/vorticity/s4_mrt_laststep.png": "57f2a82761f2de1a9fc2b78ee86159ca542c966494b9c704deb451da857da778", + "tests/output/final_validation_round/sah04_mixed/vorticity/s2_mrt_laststep.png": "786f492b96ed932254b5452e2d06ff088727f2d88c7e7c7b47d386eddfe07862", + "tests/output/final_validation_round/kan99b/full_summary_runs.json": "8c4a11cbf555e08a66698439170b850c57d537d8e75e4dd75beb767bbf7e38cf", + "tests/output/final_validation_round/kan99b/summary_runs.csv": "3fa92fdd3114f0472de44bc03006af1d4b694dfc69b06704c1667cd3627b6dab", + "tests/output/final_validation_round/kan99b/force_csv/k5_baseline_domM_re160_a2p000_regularized_mrt.csv": "de05e9699146f2adffc9d7c9991f9e48396aacd142afc3c08b2b64727c83c69a", + "tests/output/final_validation_round/kan99b/force_csv/k3_baseline_domM_re60_a1p600_regularized_mrt.csv": "53cd0dc47328b7b370eced1130508655e6815a29b727bf1fe4e4e125e4918905", + "tests/output/final_validation_round/kan99b/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "4cac1ccfdb7451de3e26d921a6406cc55d1d4630e10ec0d7ec9350a4abd49404", + "tests/output/final_validation_round/kan99b/force_csv/k4_baseline_domM_re100_a2p000_regularized_mrt.csv": "392c98de52011ddb344a5761c4520e870f4e49bbba3e144e5a02818ba2f9250b", + "tests/output/final_validation_round/kan99b/force_csv/k1_baseline_domM_re100_a0p500_regularized_mrt.csv": "9e83c5175aec644c0b97c081e610deefa731b87aef04da6297abf662a71c0702", + "tests/output/final_validation_round/kan99b/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "55b071f278e153aa353aa2bef85f0bce35b910a7b08103032023fe3a28169b89", + "tests/output/final_validation_round/kan99b/vorticity/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.png": "b91b332e7deb787975d3f08fa3325facd4a972b536694fcda52e6c01943c42cb", + "tests/output/final_validation_round/kan99b/vorticity/k1_baseline_domM_re100_a0p500_regularized_mrt.png": "6e7c3f6567c0ff0d00d75da8373031f5ba2a17a624cb8c5d5d6ae4f8749c33c0", + "tests/output/final_validation_round/kan99b/vorticity/k5_baseline_domM_re160_a2p000_regularized_mrt.png": "c4d232df2e6f7466acca711191d976aa9411ec0ade81572b531463f42a7d633a", + "tests/output/final_validation_round/kan99b/vorticity/k3_baseline_domM_re60_a1p600_regularized_mrt.png": "b2314c60491d20933422e1697998555dec2436d39545c71f990e9906884685b2", + "tests/output/final_validation_round/kan99b/vorticity/k2_baseline_domM_re100_a1p000_regularized_mrt.png": "2b2797b8f53170d04d1a70d1cdf898f7e41b3a76b9f3c1f276dfec952520ab04", + "tests/output/final_validation_round/kan99b/vorticity/k4_baseline_domM_re100_a2p000_regularized_mrt.png": "8135f470404fe11ac97968fa580ee35232e90dcace3c6ad94de17ef7aace24d6", + "tests/output/kan99b_validation/summary_runs.json": "d7239aac64884202558741074f2d644ade9e2365d94d0b7556fba68dac94868d", + "tests/output/kan99b_validation/summary_runs.csv": "c44da69563d58b917291a9fd402d1f57055861bffab6f9e32d7db91297428d45", + "tests/output/kan99b_validation/force_csv/k5_baseline_domM_re160_a2p000_regularized_mrt.csv": "27b64460923d235d34b760f2a2371ad01611a70e38edb03d6fd6a2fe7a7de6e0", + "tests/output/kan99b_validation/force_csv/k3_baseline_domM_re60_a1p600_regularized_mrt.csv": "76ff52f4494b7ef7650c05968732a8caaba94d2b151234c02cf624f5b3a712ab", + "tests/output/kan99b_validation/force_csv/k2_k2_inlet_control_domM_re100_a1p000_zou_he_local_mrt.csv": "28a83436ca8bdad38865ba21ce1bda679562a5ae1cfc6ee8fc6e86ff760ec66d", + "tests/output/kan99b_validation/force_csv/k4_baseline_domM_re100_a2p000_regularized_mrt.csv": "823ae04870fd951879024a18169ac5cba8db4b3201726f6a00f320f1958d04c6", + "tests/output/kan99b_validation/force_csv/k1_baseline_domM_re100_a0p500_regularized_mrt.csv": "a591daf2cdecd6ac3689fa2a2aba917b23053ad26e3ef1f635c81aecc451475f", + "tests/output/kan99b_validation/force_csv/k0_baseline_domM_re100_a0p000_regularized_mrt.csv": "e95c27c646c0c9baf8f455f876c115c8dbdb23cef9d9d550f455098bf0c03b55", + "tests/output/kan99b_validation/force_csv/k2_baseline_domM_re100_a1p000_regularized_mrt.csv": "3c2ea79a0e27f561215febee2e165d24b3617a648bf908981c068ba59d549c51", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s125_w0.02257.png": "a892f18c74fe13efd839bfd5068097ca0ae07acebf6c06eed89e1b867e41fcb2", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s125_w0.02257.json": "7e542f59746429022ce1794854c6fb36e8ac658dd0aea3bc1140a45e83a3f1c9", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s100_w0.01806.json": "b76216e0fbee00ef754edbafe5790a99ce7d53638af629947ddd9615598e4c08", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s150_w0.02709.json": "42cb241d9cfb01308ce28e129756b6cb3fe2a8e9679518da84bcb8b607fe92ac", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s075_w0.01354.h5": "558be308dbf334832bc1d29419ba5be142969117a11b124864f6b221c8fee509", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s050_w0.00903.json": "53b579811a0b651ba7cc466c230c115b9f88486c6675e0465d0715d3377a75cd", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s075_w0.01354.png": "9f4a7d89b2471becaf31e84c14402441c5fd96fc7190cea5e8a9fdd06ee62002", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s050_w0.00903.png": "5f18f56b0ff2af3350216b65540a2bc664c569520624cfc6cc2439a3c5369560", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s100_w0.01806.h5": "30776f333959e0e9eb5ca96b269e6a8052c5b94941a4e3b36d8a6af8076920ce", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s075_w0.01354.png": "b5393474d99191e88dafea4144b6a8eccfbdf75107125ce4b05383b17007d06a", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s125_w0.02257.h5": "4ed9d8587f75ad4625ec5501fa99fb733cde037180ac53f92a210ffbb08375de", + "tests/output/stealth_steady_sweep_nx1500/summary_stealth_s075_w0.01354.json": "ff1c1cc649e589b5425787493c2b0d04b6c39b43043b1968d65509cb0a426e82", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s050_w0.00903.h5": "4de51584b24095f8cf4480b8941593a5f913332f9396061ed077c9d49eb2ee11", + "tests/output/stealth_steady_sweep_nx1500/manifest.json": "0dfbb2c1b5bf9093fef169e4dc6319edb5c87a1e967e8d558613e2c64a2ca734", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s100_w0.01806.png": "60824cbdf21170cb4ffd8af0a49e8522c2d79cb2694690ab67995ee973265efa", + "tests/output/stealth_steady_sweep_nx1500/state_stealth_s150_w0.02709.h5": "b22d54a05cbd3138a1fe585a825246989fcff7c00f51aa9312a4185d963db933", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s125_w0.02257.png": "c1e1d04f266deac5fb2815a8283da80f9139ffaccbec2219d98544296bf3152c", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s150_w0.02709.png": "bcf098083a73798dc3906807218058cc571435a010234a5a350b585ba9915c78", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s150_w0.02709.png": "3bac21cc75a01429399cec308d6bf5fc8918917def1bf5d7fec1cb6003390a41", + "tests/output/stealth_steady_sweep_nx1500/vorticity_stealth_s050_w0.00903.png": "a675f41df763f0a1ac0a06386315806b24f2571f5dabc8693fcd871a13ed22ba", + "tests/output/stealth_steady_sweep_nx1500/streakline_stealth_s100_w0.01806.png": "92515588596596cc1d691c643fa48cf828492c2eaed96355dcec58109de4b5aa", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C4_deceit_f1p5.json": "0393661f08b748428fc366eeecec3b34b9d9a013aa6b151a15b33c7e3c0e1818", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step080000.png": "bffef412087e426b614d8c05e59bd7580ee49bb77319279ddc4c1bf825678c49", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C6_deceit_f2.json": "de067f01ef5c11249d67bbe5e02db6f2b4c5590214de02609bca115edf8dee64", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2.png": "846badbae81b75f765d89e5a7c4f88aeb5d57f2387511e4f2f84c72a192ea9f2", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C3_deceit_multi.json": "eb21d1c69e51f01c1a6be1ce59fe86763089ea5aa667b8872d0186af035b24b2", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C0_no_ctrl.json": "780a0d329cb86990a17a088f49084410abb1fad24f659255918e5ddda6b3dabd", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step080000.png": "ff7836b8229d9a5dd3900f499fe3e7f0c73a61c7109b6e6e79b11a0fb459bb63", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step040000.png": "f2b56a7e30bcc363ed69fc19705403181ac5de90800eef03039a389a65869e30", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C5_deceit_multi_f1p5.json": "261b698723f19526a447679a2be8666c8d0cbf6df81b0c9de6d051960d77308b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step060000.png": "0697e0ae06a01154afdcf00330ba870bd8f36d21561a33846ad7ba63fb731179", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step040000.png": "1de3d7f54e91c5d5850f4358d1872e16fefb36d32a1b6293facb54524e32315c", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step100000.png": "91f0bf6ed3e854f7f83623a3f19bb12c83b4aac239e3eaa849fbe50e7baddff5", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl_step080000.png": "303c1d2d4c49b4a7495365c8cb2bcbfe9bdda7cbc0a7c7dd1f01e8aa62b3573b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step040000.png": "dd5945458a35d81b31a0e2f3a693a5023d6960474263e7dc86c22367a56cc13c", + "tests/output/exp_ctrl_matrix_streak_nx1500/manifest.json": "0d97efed02f775c25dd8a2d7439f310b715d142ff8d603c9da6ddab197570ce8", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi.png": "69022ef9175acf910374ec73848640548b85fc7beb7e6950843f52c10ed7d61b", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step060000.png": "16ba30b8cca0d49e6b76be0bb4f0d14bbf276ca6ec47ebf56907c7534e15c4e0", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step100000.png": "8548b6dff635cf9c92e2baa119866277e3994366eb31aeb30641b03b3d80ee9f", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step060000.png": "56100f169c3e378b84bfc89c5477d2c142ca043d9f28eaa70bc5448c49c7f4d5", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C2_deceit.json": "587cd42d81b1325bbc766d9ca6c1fd3d076bf5a772efd45d056c2c4e3db742b6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step060000.png": "e43e95e7126de8cb857154353f161914c225f8c9f17eb44b1ff744249368a4d5", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step080000.png": "676d21ffc7180d34a6725a8bf49503ce59f48d65500450c3975d01e65162899e", + "tests/output/exp_ctrl_matrix_streak_nx1500/summary_C1_stealth.json": "73040aeb7ef07c538d4687b101c599210e660202eb1c2c3e0894dfbde682d137", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step100000.png": "e22171ef86979c4398c45ada9cd0f5e4c4e5b034f271df5fa8ac9a762a8554cd", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step100000.png": "0d73042be73b0de8d0a591e56c01e3c802483aa22a97f27e0300cba82c708066", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step040000.png": "a6e95fd5c24052db20d5ece200edcfe5e261c00950ca964c89df9f7335579634", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C0_no_ctrl.png": "d74061347ac3505fad878e330f6cb04d23bdb13082bfa1afa2fda0872f80f388", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5.png": "3156400eb59fae0638556c2711345f12ca49d951ff09e6464a2271249409a6a7", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step100000.png": "d69e34c82da98b28eef7f1af29f5d11f400e90f628049f6f5f4a3a419a4a4340", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step040000.png": "ce1f372b517dd52fc3f3eb066145e04ab6841e43b67cb0f6bfbdb42a6738eca6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step100000.png": "07cce6c99dfa7b56dd4d3aa452873a676a5a00e9f046555fa9dda30f16dde488", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth.png": "a892f18c74fe13efd839bfd5068097ca0ae07acebf6c06eed89e1b867e41fcb2", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step060000.png": "80b63bd309ef11a3ebb2f1ef301b49cd8f09bcc25562097d382f859306c9fe6d", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit.png": "1edb30dc35e29ad991695353f4b84e0507792935ec75ae9a7904ebdc007a471a", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5_step060000.png": "93ab8e09e58a64c5dd2eedfdafd27cf4dcfe4e8fae1af64ac71eac509e6ffdaf", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step060000.png": "f773bdef1c8d718d01b6d6d7735182c04564dd8b5692b359e1dd2f721c774b1a", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C4_deceit_f1p5_step080000.png": "5570fe6a25c92e5c6aa9a5129aa1797ba8ee7418170c7a351f9e35b931a366c7", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C1_stealth_step080000.png": "32d3e700286eb4b46b3bcf757669481affd6ff6b53792d730b5a21da92cc57d6", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C6_deceit_f2_step100000.png": "5acfe36694bb4e628309ff8ae1e839ca0a1f684607165bbc2883436b85208bf4", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step040000.png": "2c6f2b8d61cc2aaa63631eb6c98d3de26dcef705fa6b66c823ce7b9eef50e00c", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C5_deceit_multi_f1p5.png": "adbefd0021e2c981d026718de8c63594b9c8e5971901d1dc40835cb69d95b93e", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C2_deceit_step080000.png": "ce8b18e4dd976ed590fcc44075f3fb058ca7b23e15a1624726c181c4dd0c11da", + "tests/output/exp_ctrl_matrix_streak_nx1500/streakline_C3_deceit_multi_step040000.png": "168d21ef24ae198fbfd642f8ca315faad4c7bff2e2c09e16ff7c97e7360ea883", + "tests/output/screening/screening_summary.csv": "3a23c4f2bd54ed5ee9bdb5b6dcdc58eed04519fcf1b4790e0abd1e6c5288fb96", + "tests/output/screening/screening_summary.json": "caf64530f152b6b8ccec82a3c7ba44fa0b3aeb0e0221ef6121857bf62c031ecd", + "tests/output/screening/B1/force_hist.csv": "854bfebe63fb2d140823fc5dbc434a70c317c6ab0bedbd5220cec45665b524c8", + "tests/output/screening/B1/summary.json": "35b4d958bc0fdd6ab6c9c0d1ed50e85d89b04f7be3e34632d6c3ea95b89acb47", + "tests/output/screening/custom/force_hist.csv": "06da0f67b564d5c114332ef3b39167b1ba222fc50045f95303c75c14755b51d5", + "tests/output/screening/custom/summary.json": "1701ed75e5e9ca16127f495ccff1d87de245d81df581e94114c8fca6fbbe77fd", + "tests/output/screening/MR1/force_hist.csv": "f70fbfa748fd0709e225523aaaa72b761db56df4f1d48f105384b94cbc44b31f", + "tests/output/screening/MR1/summary.json": "3d9a0fc19710820e3634ab2143b913b282beb159336567ab9ebf3de2092947bd", + "tests/output/screening/MR2/force_hist.csv": "c947b3c16b8e8f8f85a203cea8cd912bdfc07f96985c1c24a470b644170195ea", + "tests/output/screening/MR2/summary.json": "d2344e9e2517ec76c8b56bfbe3763dd465e24721856992401c57c414763481bb", + "tests/output/screening/MR3/force_hist.csv": "7df1536c83ee466b7195d9c521d3d3b1309acaf142f2855bba51fb279c7612e4", + "tests/output/screening/MR3/summary.json": "ad188eb1b271a6cd0fb4025b456eccac5450776f60db58466f804fc5a0e0ec61", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "examples/fixed_periodic_patch.py": "6732e440a47c237ea341703f2d80717903d34c68fd061bdc97189e5d877be46c", + "examples/fixed_patch_jet.py": "9d58ac3f32478603e8e798efcdaf6ea16e9cc92346eb4780a60e438d331abced" + } +} diff --git a/research/surface_actuation_20261014/cpu_checkpoint_run.json b/research/surface_actuation_20261014/cpu_checkpoint_run.json new file mode 100644 index 0000000..39681b6 --- /dev/null +++ b/research/surface_actuation_20261014/cpu_checkpoint_run.json @@ -0,0 +1,18 @@ +{ + "command": [ + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-m", + "pytest", + "-q", + "-p", + "no:cacheprovider", + "tests/unit/test_state_regressions.py", + "-k", + "checkpoint" + ], + "cwd": "/home/frank14f/CelerisLab", + "PYTHONPATH": "/home/frank14f/CelerisLab/src", + "exit_code": 0, + "elapsed_seconds": 2.0994309099623933, + "peak_child_RSS_KiB": 142300 +} diff --git a/research/surface_actuation_20261014/cpu_checkpoint_stdout.txt b/research/surface_actuation_20261014/cpu_checkpoint_stdout.txt new file mode 100644 index 0000000..929e4b8 --- /dev/null +++ b/research/surface_actuation_20261014/cpu_checkpoint_stdout.txt @@ -0,0 +1,2 @@ +.............................. [100%] +30 passed, 13 deselected in 0.63s diff --git a/research/surface_actuation_20261014/cpu_initial.txt b/research/surface_actuation_20261014/cpu_initial.txt new file mode 100644 index 0000000..29213c5 --- /dev/null +++ b/research/surface_actuation_20261014/cpu_initial.txt @@ -0,0 +1,6 @@ +Captured from tool stdout; elapsed below is pytest-reported, no RSS measurement for this first CPU run. +Command: env PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 PYTHONNOUSERSITE=1 OPENBLAS_NUM_THREADS=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -m pytest -q -p no:cacheprovider tests/unit/test_numerical_operators.py::test_actual_semantic_and_auxiliary_kernels[0-0-0] tests/unit/test_state_regressions.py +............................................ [100%] +44 passed in 1.60s +Exit: 0 +Subsequent checkpoint version edits were rechecked separately in cpu_checkpoint_stdout.txt (30 pass). diff --git a/research/surface_actuation_20261014/cpu_surface_command.txt b/research/surface_actuation_20261014/cpu_surface_command.txt new file mode 100644 index 0000000..6d8c615 --- /dev/null +++ b/research/surface_actuation_20261014/cpu_surface_command.txt @@ -0,0 +1 @@ +PYTHONPATH=src /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -m pytest tests/unit/test_surface_actuation.py -q diff --git a/research/surface_actuation_20261014/cpu_surface_exit.txt b/research/surface_actuation_20261014/cpu_surface_exit.txt new file mode 100644 index 0000000..573541a --- /dev/null +++ b/research/surface_actuation_20261014/cpu_surface_exit.txt @@ -0,0 +1 @@ +0 diff --git a/research/surface_actuation_20261014/cpu_surface_stdout.txt b/research/surface_actuation_20261014/cpu_surface_stdout.txt new file mode 100644 index 0000000..ee9237f --- /dev/null +++ b/research/surface_actuation_20261014/cpu_surface_stdout.txt @@ -0,0 +1,2 @@ +............................... [100%] +31 passed in 0.41s diff --git a/research/surface_actuation_20261014/gpu_run.json b/research/surface_actuation_20261014/gpu_run.json new file mode 100644 index 0000000..dc8f87e --- /dev/null +++ b/research/surface_actuation_20261014/gpu_run.json @@ -0,0 +1,37 @@ +{ + "preflight_gpu": "0, GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, Tesla V100-SXM2-16GB, 5, 16140, 0\n1, GPU-f1c9fd5a-e917-56e0-21fb-24035ba44a36, Tesla V100-SXM2-16GB, 5, 16140, 0\n2, GPU-b8c11c01-c91f-aa0b-abf6-dad35085cc76, Tesla V100-SXM2-16GB, 5, 16140, 0\n3, GPU-8b71b032-1b75-2891-935c-ce106a53034a, Tesla V100-SXM2-16GB, 5, 16140, 0", + "preflight_apps": "", + "preflight_ram_bytes": 64105783296, + "physical_gpu_uuid": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c", + "command": [ + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-c", + "import CelerisLab,pytest; print('SOURCE', CelerisLab.__file__, flush=True); assert CelerisLab.__file__.startswith('/home/frank14f/CelerisLab/src/'); raise SystemExit(pytest.main(['-q','-p','no:cacheprovider','tests/integration/test_surface_actuation_gpu.py']))" + ], + "cwd": "/home/frank14f/CelerisLab", + "env": { + "PYTHONPATH": "/home/frank14f/CelerisLab/src", + "PYTHONNOUSERSITE": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "OPENBLAS_NUM_THREADS": "1", + "CUDA_VISIBLE_DEVICES": "GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c", + "CUDA_CACHE_DISABLE": "1", + "TMPDIR": "/tmp/celeris-surface-gpu-cds7v5w9" + }, + "preflight_temp_bytes": 1635096, + "limits": { + "wall_seconds": 120, + "temp_bytes": 2000000000, + "ram_reserve_bytes": 6410578329, + "vram_reserve_MiB": 1614 + }, + "note": "Sampled own-process-group resource monitor, no fixed RSS or address-space limit.", + "exit_code": 0, + "elapsed_seconds": 21.4096016229596, + "peak_group_rss_bytes": 397094912, + "peak_temp_bytes": 3579568, + "min_ram_bytes": 63571013632, + "min_vram_free_MiB": 15826, + "termination_reason": null, + "scratch_removed": true +} diff --git a/research/surface_actuation_20261014/gpu_stdout.txt b/research/surface_actuation_20261014/gpu_stdout.txt new file mode 100644 index 0000000..b262891 --- /dev/null +++ b/research/surface_actuation_20261014/gpu_stdout.txt @@ -0,0 +1,3 @@ +SOURCE /home/frank14f/CelerisLab/src/CelerisLab/__init__.py +...... [100%] +6 passed in 19.80s diff --git a/research/surface_actuation_20261014/incremental.diff b/research/surface_actuation_20261014/incremental.diff new file mode 100644 index 0000000..43090a1 --- /dev/null +++ b/research/surface_actuation_20261014/incremental.diff @@ -0,0 +1,1065 @@ +--- a/src/CelerisLab/body/__init__.py ++++ b/src/CelerisLab/body/__init__.py +@@ -2,7 +2,7 @@ + """ + Body / object management for immersed and rigid objects. + """ +-from .objects import SimObject, ObjectState, ObjectControl ++from .objects import SimObject, ObjectState, ObjectControl, SurfaceActuation + from importlib import import_module + from .registry import BodyRegistry + from .sync_plan import BodySyncPlan +@@ -11,7 +11,7 @@ + from .coupling.soa_packer import pack_cut_links_to_soa, pack_sensor_to_soa + + __all__ = [ +- "SimObject", "ObjectState", "ObjectControl", ++ "SimObject", "ObjectState", "ObjectControl", "SurfaceActuation", + "ObjectManager", + "BodyRegistry", + "BodySyncPlan", +--- a/src/CelerisLab/body/manager.py ++++ b/src/CelerisLab/body/manager.py +@@ -108,6 +108,7 @@ + # -- Registry delegation ------------------------------------------------- + def add(self, obj: SimObject) -> int: + """Register an object and return its id.""" ++ obj.validate_surface_actuation(self.cfg) + body_id = self._registry.add(obj) + self._resize_buffers() + return body_id +@@ -160,6 +161,7 @@ + The object is not added to the formal registry until ``commit_pending()`` + is called. This implicitly activates the edit window. + """ ++ obj.validate_surface_actuation(self.cfg) + self._edit_active = True + self._pending_add.append(obj) + +@@ -201,7 +203,8 @@ + new = SimObject(obj_id=oid, geometry=obj.geometry, + center=obj.center, radius=obj.radius, + is_sensor=obj.is_sensor, +- is_force_region=obj.is_force_region) ++ is_force_region=obj.is_force_region, ++ surface_actuation=obj.surface_actuation) + new.state = obj.state + new.control = obj.control + return new +@@ -306,6 +309,7 @@ + + cl_host = plan.curved_host + field.curved.assign_host(*cl_host) ++ field.curved.assign_surface(plan.next_objects, self.cfg, plan.next_flags) + s_cells, s_ids = plan.sensor_host + field.sensors.assign_host(s_cells, s_ids) + fr_cells, fr_ids = plan.force_region_host +@@ -392,6 +396,7 @@ + ex, ey = D2Q9_EX, D2Q9_EY + + for obj in objects: ++ obj.validate_surface_actuation(self.cfg) + if (not obj.is_sensor) and (not obj.is_force_region) and hasattr(obj, 'get_curved_list'): + ( + fluid_idx, dirs, q_vals, body_ids, +@@ -447,6 +452,13 @@ + r_fr_cells = np.concatenate(fr_cells) if fr_cells else np.zeros(0, dtype=np.uint32) + r_fr_ids = np.concatenate(fr_ids) if fr_ids else np.zeros(0, dtype=np.int32) + ++ if any(obj.surface_actuation is not None for obj in objects): ++ # Reject unresolved apertures/ownership before sync or restart mutates state. ++ from ..lbm.curved_links import CurvedLinkSoA ++ links = CurvedLinkSoA() ++ links.assign_host(r_idx, r_dir, r_q, r_bid, r_rx, r_ry, r_rz, r_fallback) ++ links.assign_surface(objects, self.cfg, domain_flags) ++ + return ( + r_idx, r_dir, r_q, r_bid, + r_rx, r_ry, r_rz, r_fallback, +@@ -466,21 +478,24 @@ + """ + self._telemetry_field = field + +- if rebuild_flags: +- field.flag = self.build_flags(field.build_channel_flags()) +- field.upload_flags() ++ next_flags = self.build_flags(field.build_channel_flags()) if rebuild_flags else field.flag + + ( + cl_fluid_idx, cl_dir, cl_q, cl_body_id, + cl_rx, cl_ry, cl_rz, cl_fallback_class, + sensor_cells, sensor_obj_id, + fr_cells, fr_obj_id, +- ) = self.build_compact_lists(domain_flags=field.flag) ++ ) = self.build_compact_lists(domain_flags=next_flags) ++ ++ if rebuild_flags: ++ field.flag = next_flags ++ field.upload_flags() + + field.curved.assign_host( + cl_fluid_idx, cl_dir, cl_q, cl_body_id, + cl_rx, cl_ry, cl_rz, cl_fallback_class, + ) ++ field.curved.assign_surface(self.objects, self.cfg, field.flag) + field.sensors.assign_host(sensor_cells, sensor_obj_id) + field.force_regions.assign_host(fr_cells, fr_obj_id) + +@@ -595,6 +610,10 @@ + + def _upload_action_async(self, stream: cuda.Stream) -> None: + """Async H2D of host action array to action_gpu.""" ++ for obj in self.objects: ++ obj.validate_surface_actuation(self.cfg) ++ if obj.surface_actuation is not None and self.action[(obj.obj_id+1)*3*self.cfg.dim-1] != 0: ++ raise ValueError("Surface actuation cannot share the rotation action") + if self.action_gpu is None or self.action.size == 0: + return + if self._action_pinned is None or self._action_pinned.size != self.action.size: +@@ -712,6 +731,8 @@ + The GPU action buffer is updated at the next ``run()`` call. + """ + self._validate_body_id(body_id) ++ obj = self.get(body_id) ++ obj.validate_surface_actuation(self.cfg, dict(vars(obj.state), omega=omega)) + dim = self.cfg.dim if self.cfg else 2 + slot = 3 * dim + base = body_id * slot +--- a/src/CelerisLab/body/objects.py ++++ b/src/CelerisLab/body/objects.py +@@ -15,6 +15,7 @@ + from __future__ import annotations + + from dataclasses import dataclass ++import math + from typing import Optional, Tuple + + import numpy as np +@@ -53,6 +54,37 @@ + mode: int = 0 # 0=force, 1=velocity, 2=displacement + + ++@dataclass(frozen=True) ++class SurfaceActuation: ++ """Fixed circular aperture: angles in radians, velocity in lattice units. ++ ++ ``angle`` is measured counterclockwise from +x; ``half_width`` is the arc ++ half-angle. Positive normal_velocity blows from solid into fluid. The C1 ++ profile (1-s*s)^2 uses the true hit angle, not a fluid-node aperture mask. ++ This immutable specification is set before initialization; no moving nozzle. ++ """ ++ angle: float ++ half_width: float ++ normal_velocity: float ++ ++ def __post_init__(self): ++ if not all(math.isfinite(v) for v in (self.angle, self.half_width, self.normal_velocity)): ++ raise ValueError("Surface actuation values must be finite") ++ if not 0 < self.half_width <= math.pi or abs(self.normal_velocity) >= 1: ++ raise ValueError("Require 0 < half_width <= pi and abs(normal_velocity) < 1") ++ ++ def project(self, rx, ry): ++ """Project stored true hit-center vectors; returns velocity and aperture mask.""" ++ radius = np.hypot(rx, ry) ++ if np.any(radius <= 0): ++ raise ValueError("Surface normal requires nonzero hit-center distance") ++ delta = np.arctan2(np.sin(np.arctan2(ry, rx)-self.angle), ++ np.cos(np.arctan2(ry, rx)-self.angle)) ++ aperture = np.abs(delta) < self.half_width ++ speed = self.normal_velocity*np.maximum(0., 1-(delta/self.half_width)**2)**2 ++ return np.stack((speed*rx/radius, speed*ry/radius), axis=-1).astype(np.float32), aperture ++ ++ + # --------------------------------------------------------------------------- + # SimObject container + # --------------------------------------------------------------------------- +@@ -77,6 +109,7 @@ + radius: float = 0.0, + is_sensor: bool = False, + is_force_region: bool = False, ++ surface_actuation: Optional[SurfaceActuation] = None, + ) -> None: + self.obj_id = obj_id + self.center = center if center is not None else (0.0, 0.0) +@@ -84,6 +117,10 @@ + self._geometry = geometry + self._is_sensor = is_sensor + self._is_force_region = is_force_region ++ self._surface_actuation = (SurfaceActuation(**surface_actuation) ++ if isinstance(surface_actuation, dict) else surface_actuation) ++ if self._surface_actuation is not None and not isinstance(self._surface_actuation, SurfaceActuation): ++ raise TypeError("surface_actuation must be a SurfaceActuation or dict") + + c = self.center + z0 = float(c[2]) if len(c) > 2 else 0.0 +@@ -91,6 +128,22 @@ + x=float(c[0]), y=float(c[1]), z=z0, + ) + self.control = ObjectControl() ++ ++ @property ++ def surface_actuation(self): ++ return self._surface_actuation ++ ++ def validate_surface_actuation(self, cfg, state=None): ++ if self.surface_actuation is None: ++ return ++ from .geometry.circle import CircleGeometry ++ if (type(self.geometry) is not CircleGeometry or self.is_sensor or self.is_force_region ++ or cfg is None or not cfg.is_d2q9 or cfg.store_precision != "FP32" ++ or cfg.streaming != "double_buffer" or cfg.ddf_shifting): ++ raise ValueError("Surface actuation requires a circle and D2Q9/FP32/unshifted/double_buffer") ++ values = vars(self.state) if state is None else state ++ if any(values.get(k, 0.) != 0 for k in ("vx", "vy", "omega")): ++ raise ValueError("Surface actuation requires a stationary circle") + + @property + def geometry(self) -> Geometry: +--- a/src/CelerisLab/common/checkpoint.py ++++ b/src/CelerisLab/common/checkpoint.py +@@ -24,7 +24,7 @@ + from ..lbm.descriptors import FLUID, SOLID, OBSTACLE, SENSOR_FLAG, FRC_REGION + + # File format version — bump on incompatible layout changes. +-CKPT_VERSION = 3 ++CKPT_VERSION = 4 + _SUPPORTED_STORE_PRECISIONS = ("FP32", "FP16S") + + +@@ -130,10 +130,20 @@ + if not np.array_equal(flag_buf, expected_flags): + raise ValueError("Checkpoint flags do not match current object/domain geometry") + bodies.build_compact_lists_for(bodies.objects, domain_flags=expected_flags) ++ applied_action = None ++ if bodies.action_gpu is not None: ++ applied_action = np.empty_like(bodies.action) ++ cuda.memcpy_dtoh(applied_action, bodies.action_gpu) ++ for obj in bodies.objects: ++ if (obj.surface_actuation is not None ++ and applied_action[(obj.obj_id + 1) * 3 * lbm_cfg.dim - 1] != 0): ++ raise ValueError("Surface actuation requires zero applied omega") + + with h5py.File(path, "w") as hf: + # Version and metadata +- hf.attrs["ckpt_version"] = CKPT_VERSION ++ # Older readers must not silently restart a driven surface as a wall. ++ hf.attrs["ckpt_version"] = (CKPT_VERSION if any( ++ obj.surface_actuation is not None for obj in bodies.objects) else 3) + hf.attrs["celerislab_version"] = __import__( + "CelerisLab").__version__ + hf.attrs["timestamp"] = time.strftime("%Y-%m-%dT%H:%M:%S") +@@ -156,11 +166,13 @@ + compression_opts=4) + + hf.attrs["geometry_json"] = json.dumps(geometry) ++ hf.attrs["surface_actuation_json"] = json.dumps([ ++ asdict(obj.surface_actuation) if obj.surface_actuation is not None else None ++ for obj in bodies.objects ++ ]) + hf.attrs["runtime_params_json"] = json.dumps(field._runtime_params) + hf.attrs["obs_accum_steps"] = bodies._obs_accum_steps +- if bodies.action_gpu is not None: +- applied_action = np.empty_like(bodies.action) +- cuda.memcpy_dtoh(applied_action, bodies.action_gpu) ++ if applied_action is not None: + hf.create_dataset("applied_action", data=applied_action) + if bodies.obs_gpu is not None: + obs = np.empty(bodies.obs_total_floats, dtype=np.float32) +@@ -191,7 +203,8 @@ + store_precision must match the checkpoint. Other parameters + (collision, LES, …) may differ for parameter-study restarts. + v3 restores the saved domain boundaries; v1/v2 retain their default-channel +- validation. Object geometry and roles must match in every version. ++ validation. v4 also requires matching static surface actuation. Object ++ geometry and roles must match in every version. + + Args: + path: HDF5 checkpoint file path. +@@ -206,7 +219,7 @@ + with h5py.File(path, "r") as hf: + # Version check + ver = hf.attrs.get("ckpt_version", 0) +- if ver not in (1, 2, CKPT_VERSION): ++ if ver not in (1, 2, 3, CKPT_VERSION): + raise ValueError( + f"Checkpoint version mismatch: file={ver}, " + f"expected={CKPT_VERSION}. " +@@ -253,6 +266,14 @@ + if (len(obj_data) != bodies.count + or [od.get("obj_id") for od in obj_data] != list(range(bodies.count))): + raise ValueError("Checkpoint object IDs must match the dense current registry") ++ surface_specs = [asdict(obj.surface_actuation) if obj.surface_actuation is not None else None ++ for obj in bodies.objects] ++ if ver >= 4 and "surface_actuation_json" not in hf.attrs: ++ raise ValueError("Checkpoint is missing surface actuation specification") ++ saved_surface_specs = json.loads(hf.attrs.get( ++ "surface_actuation_json", json.dumps([None] * bodies.count))) ++ if saved_surface_specs != surface_specs: ++ raise ValueError("Checkpoint surface actuation mismatch") + domain_flags = None + if ver >= 3: + if "domain_flag" not in hf: +@@ -319,6 +340,11 @@ + modes = [int(od.get("control", {}).get("mode", 0)) for od in obj_data] + if not all(np.isfinite(value) for record in states + controls for value in record.values()): + raise ValueError("Checkpoint object state/control must be finite") ++ for obj, state in zip(bodies.objects, states): ++ obj.validate_surface_actuation(lbm_cfg, state) ++ if (obj.surface_actuation is not None and applied_action is not None ++ and applied_action[(obj.obj_id + 1) * 3 * lbm_cfg.dim - 1] != 0): ++ raise ValueError("Checkpoint surface actuation requires zero applied omega") + + for obj, state, control, mode in zip(bodies.objects, states, controls, modes): + for key, value in state.items(): +--- a/src/CelerisLab/lbm/curved_links.py ++++ b/src/CelerisLab/lbm/curved_links.py +@@ -74,6 +74,48 @@ + + count: int = 0 + capacity: int = 0 ++ ++ # Optional fixed surface velocity derived from true hit-center columns. ++ surface_velocity: Optional[np.ndarray] = None ++ aperture: Optional[np.ndarray] = None ++ surface_velocity_gpu: Optional[cuda.DeviceAllocation] = None ++ link_exchange_gpu: Optional[cuda.DeviceAllocation] = None ++ ++ def assign_surface(self, objects, cfg, flags): ++ """Keep the original eight-column geometry/checkpoint contract unchanged.""" ++ enabled = [obj for obj in objects if obj.surface_actuation is not None] ++ self.surface_velocity = self.aperture = None ++ if not enabled: ++ return ++ from .descriptors import FLUID, SOLID ++ if np.any((flags[self.fluid_idx] & FLUID) == 0) or np.any(flags[self.fluid_idx] & SOLID): ++ raise ValueError("Surface cut links must have active fluid receivers") ++ if len(np.unique(self.fluid_idx.astype(np.uint64)*cfg.nq+self.dir)) != len(self.dir): ++ raise ValueError("Surface boundary requires unique cut-link writers") ++ self.surface_velocity = np.zeros((len(self.dir), 2), np.float32) ++ self.aperture = np.zeros(len(self.dir), bool) ++ for obj in enabled: ++ obj.validate_surface_actuation(cfg) ++ selected = self.body_id == obj.obj_id ++ velocity, aperture = obj.surface_actuation.project(self.rx[selected], self.ry[selected]) ++ if not aperture.any(): ++ raise ValueError("Surface aperture hits no resolved cut links") ++ self.surface_velocity[selected] = velocity ++ self.aperture[selected] = aperture ++ ++ def surface_exchange(self, body_id): ++ """Latest boundary step's (Fx,Fy,Tz), split by aperture; not nozzle thrust. ++ ++ Caller synchronizes the CUDA stream/context. Rebuild/restart clears this ++ diagnostic; it is not the time-accumulated rigid-body observation. ++ """ ++ if self.link_exchange_gpu is None: ++ raise RuntimeError("No surface actuation diagnostic is allocated") ++ values = np.empty((self.count, 3), np.float32) ++ cuda.memcpy_dtoh(values, self.link_exchange_gpu) ++ body = self.body_id == body_id ++ return {name: values[body & mask].sum(axis=0, dtype=np.float64) ++ for name, mask in (("wall", ~self.aperture), ("aperture", self.aperture))} + + def assign_host( + self, +@@ -144,6 +186,7 @@ + raise ValueError( + "CurvedLinkSoA column 'fallback_class' must use classes {0, 1}" + ) ++ self.surface_velocity = self.aperture = None + + def upload(self, stream: Optional[cuda.Stream] = None) -> None: + """Upload host columns to GPU with capacity-based allocation reuse. +@@ -155,6 +198,9 @@ + n = int(len(self.fluid_idx)) + self.count = n + if n == 0: ++ _free_alloc(self.surface_velocity_gpu) ++ _free_alloc(self.link_exchange_gpu) ++ self.surface_velocity_gpu = self.link_exchange_gpu = None + return + + if n > self.capacity or self.fluid_idx_gpu is None: +@@ -190,6 +236,14 @@ + (self.rz_gpu, self.rz), + (self.fallback_class_gpu, self.fallback_class), + ], stream) ++ _free_alloc(self.surface_velocity_gpu) ++ _free_alloc(self.link_exchange_gpu) ++ self.surface_velocity_gpu = self.link_exchange_gpu = None ++ if self.surface_velocity is not None: ++ self.surface_velocity_gpu = cuda.mem_alloc(self.surface_velocity.nbytes) ++ self.link_exchange_gpu = cuda.mem_alloc(n*3*4) ++ _upload_columns([(self.surface_velocity_gpu, self.surface_velocity), ++ (self.link_exchange_gpu, np.zeros((n, 3), np.float32))], stream) + + def free_gpu_columns(self) -> None: + """Release device columns only (host arrays unchanged).""" +@@ -201,6 +255,9 @@ + _free_alloc(self.ry_gpu) + _free_alloc(self.rz_gpu) + _free_alloc(self.fallback_class_gpu) ++ _free_alloc(self.surface_velocity_gpu) ++ _free_alloc(self.link_exchange_gpu) ++ self.surface_velocity_gpu = self.link_exchange_gpu = None + self.fluid_idx_gpu = None + self.dir_gpu = None + self.q_gpu = None +--- a/src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh ++++ b/src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh +@@ -82,7 +82,7 @@ + float Uw, float Vw, + float rx, float ry, + unsigned char fallback_class, +- float* __restrict__ obs, int body_id) ++ float* __restrict__ obs, int body_id, float* link_exchange = nullptr) + { + const unsigned int dir_opp = (unsigned int)opp_dir((int)dir); + +@@ -120,7 +120,7 @@ + // corrected incoming population into the adjacent fluid node. + store_ddf(fi, index_f(k_s, dir_opp), f_reflected); + +- if (obs != nullptr) { ++ if (obs != nullptr || link_exchange != nullptr) { + #if USE_DDF_SHIFTING + const float w_i = (float)d_w[dir]; + const float fx = (float)d_cx[dir] * ((f_toward + w_i) + (f_reflected + w_i)); +@@ -129,10 +129,15 @@ + const float fx = (float)d_cx[dir] * (f_toward + f_reflected); + const float fy = (float)d_cy[dir] * (f_toward + f_reflected); + #endif +- atomicAdd(&obs[obs_force_index(body_id, 0)], fx); +- atomicAdd(&obs[obs_force_index(body_id, 1)], fy); + const float tz = rx * fy - ry * fx; +- atomicAdd(&obs[obs_torque_index(body_id, 0)], tz); ++ if (link_exchange != nullptr) { ++ link_exchange[0] = fx; link_exchange[1] = fy; link_exchange[2] = tz; ++ } ++ if (obs != nullptr) { ++ atomicAdd(&obs[obs_force_index(body_id, 0)], fx); ++ atomicAdd(&obs[obs_force_index(body_id, 1)], fy); ++ atomicAdd(&obs[obs_torque_index(body_id, 0)], tz); ++ } + } + } + #endif // DIM == 2 +--- a/src/CelerisLab/lbm/kernels/step/aux_kernels.cu ++++ b/src/CelerisLab/lbm/kernels/step/aux_kernels.cu +@@ -43,7 +43,8 @@ + const int* cl_body_id, + const float* action, + float* obs, +- unsigned int n_curved) ++ unsigned int n_curved, ++ const float* surface_velocity = nullptr, float* link_exchange = nullptr) + { + unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; + if (tid >= n_curved) return; +@@ -58,10 +59,16 @@ + const float omega = action_omega(action, bid); + + #if DIM == 2 +- const float Uw = -omega * ry; +- const float Vw = omega * rx; ++ float Uw = -omega * ry; ++ float Vw = omega * rx; ++ if (surface_velocity != nullptr) { ++ // Independent prescribed fluid velocity on fixed geometry. ++ const float u = surface_velocity[2*tid], v = surface_velocity[2*tid+1]; ++ if (u != 0.0f || v != 0.0f) { Uw += u; Vw += v; } ++ } + (void)cl_rz; +- apply_bouzidi_link(dir, q, k_f, fi, Uw, Vw, rx, ry, fallback_class, obs, bid); ++ apply_bouzidi_link(dir, q, k_f, fi, Uw, Vw, rx, ry, fallback_class, obs, bid, ++ link_exchange == nullptr ? nullptr : link_exchange + 3*tid); + #elif DIM == 3 + const float rz = cl_rz[tid]; + const float Uw = -omega * ry; +--- a/src/CelerisLab/lbm/stepper.py ++++ b/src/CelerisLab/lbm/stepper.py +@@ -153,6 +153,7 @@ + cl.rx_gpu, cl.ry_gpu, cl.rz_gpu, cl.fallback_class_gpu, cl.body_id_gpu, + action_gpu, obs_gpu, + np.uint32(f.n_curved), ++ cl.surface_velocity_gpu or np.uintp(0), cl.link_exchange_gpu or np.uintp(0), + block=(tpb, 1, 1), grid=grid_c, + **launch_kw, + ) +--- a/src/CelerisLab/simulation.py ++++ b/src/CelerisLab/simulation.py +@@ -98,7 +98,7 @@ + + # -- Object management --------------------------------------------------- + def add_body(self, type: str = "circle", center=None, +- radius: float = 0.0, **kwargs) -> int: ++ radius: float = 0.0, *, surface_actuation=None, **kwargs) -> int: + """Add a simulation body. Returns body_id. + + Before ``initialize()`` the object is added to the formal registry +@@ -110,6 +110,10 @@ + (future: ``"polygon"``, ``"mesh"``). + center: (x, y) center coordinates (lattice units). + radius: body radius (lattice units). ++ surface_actuation: Fixed circle aperture dict/SurfaceActuation: ++ angle, half_width (radians), normal_velocity (positive outward). ++ D2Q9/FP32/unshifted/DB only; set before initialization or stage ++ a new body. No runtime motion or amplitude setter. + **kwargs: passed to the geometry constructor. + + Returns: +@@ -118,6 +122,8 @@ + if self.lbm_cfg.y_wall_bc == "on_site_velocity": + raise ValueError("on_site_velocity currently requires an object-free domain") + type_lower = str(type).strip().lower() ++ if surface_actuation is not None and type_lower != "circle": ++ raise ValueError("Surface actuation is only supported on circles") + + if type_lower == "circle": + from .body.geometry.circle import CircleGeometry +@@ -125,7 +131,7 @@ + geom = CircleGeometry(cx, cy, radius) + obj = SimObject(obj_id=-1, geometry=geom, + center=center, radius=radius, +- is_sensor=False) ++ is_sensor=False, surface_actuation=surface_actuation) + elif type_lower == "sensor": + from .body.geometry.circle import CircleGeometry + cx, cy = float(center[0]), float(center[1]) +@@ -189,6 +195,8 @@ + center = tuple(spec.get("center", ())) + radius = float(spec.get("radius", 0.0)) + omega = spec.get("omega", None) ++ if spec.get("surface_actuation") is not None and obj_type != "cylinder": ++ raise ValueError("Surface actuation is only supported on cylinders in body config") + + if obj_type == "": + raise ValueError( +@@ -200,9 +208,10 @@ + ) + + if obj_type == "cylinder": +- body_id = self.add_body("circle", center=center, radius=radius) ++ body_id = self.add_body("circle", center=center, radius=radius, ++ surface_actuation=spec.get("surface_actuation")) + if omega is not None: +- self.bodies.get(body_id).state.omega = float(omega) ++ self.bodies.set_body_state(body_id, omega=float(omega)) + elif obj_type == "sensor": + self.add_body("sensor", center=center, radius=radius) + else: +@@ -225,6 +234,10 @@ + vy: translation velocity y (future). ``None`` = no change. + """ + obj = self.bodies.get(id) ++ proposed = dict(vars(obj.state)) ++ proposed.update({k: float(v) for k, v in (("omega", omega), ("vx", vx), ("vy", vy)) ++ if v is not None}) ++ obj.validate_surface_actuation(self.lbm_cfg, proposed) + changed = False + if omega is not None: + obj.state.omega = float(omega) +@@ -290,6 +303,18 @@ + if self.bodies.obs_pinned is None: + raise RuntimeError("No obs buffer. Call run() first.") + return self.bodies.read_sensor(id, normalize=normalize) ++ ++ @context_bound ++ def read_surface_exchange(self, id: int): ++ """Latest step's wall/aperture (Fx,Fy,Tz) exchange, not total nozzle force. ++ ++ Unlike read_body this is not accumulated/time-averaged. It resets after ++ geometry sync or checkpoint load; advance before interpreting it. ++ """ ++ if self.bodies.get(id).surface_actuation is None: ++ raise ValueError("Body has no surface actuation") ++ self.stream.synchronize() ++ return self.field.curved.surface_exchange(id) + + @context_bound + def read_body(self, id: int, *, +--- /dev/null ++++ b/tests/integration/test_surface_actuation_gpu.py +@@ -0,0 +1,249 @@ ++"""Fixed surface actuation: discrete operator/ledger checks, not flux accuracy.""" ++from dataclasses import asdict ++import json ++ ++import h5py ++import numpy as np ++import pycuda.driver as cuda ++import pytest ++ ++from CelerisLab.lbm.descriptors import FLUID, SOLID ++from ._cases import make_sim ++from .test_numerical_gpu import CX, CY, install_spatial_state, spatial_state ++ ++ ++WEIGHTS = np.array([4/9] + [1/9]*4 + [1/36]*4) ++OPPOSITE = np.array([0, 2, 1, 4, 3, 6, 5, 8, 7]) ++GEOMETRY = ("fluid_idx", "dir", "q", "body_id", "rx", "ry", "rz", "fallback_class") ++ ++ ++def feq(rho, ux, uy): ++ """Independent FP64 polynomial; round only the uploaded populations.""" ++ cu = CX[:, None, None]*ux + CY[:, None, None]*uy ++ return WEIGHTS[:, None, None]*rho*(1 + 3*cu + 4.5*cu**2 - 1.5*(ux**2 + uy**2)) ++ ++ ++@pytest.mark.parametrize("speed", [-.01, .01]) ++def test_actual_surface_kernel_equilibrium_branches(speed): ++ """Both q branches, q=.5 and donor fallback; non-unit rho and signed normal.""" ++ sim = make_sim(nx=24, ny=16, velocity=0) ++ allocations = [] ++ try: ++ sim.initialize() ++ normal = np.array([-.6, .8]) ++ expected = feq(1.17, *(speed*normal))[:, 0, 0] ++ initial = np.broadcast_to(expected[:, None, None], (9, 16, 24)).astype(np.float32).copy() ++ # Distinct source/destination neighborhoods; no synthetic link race. ++ cells = np.array([4*24+12, 6*24+12, 8*24+12, 10*24+12], np.uint32) ++ directions = np.ones(4, np.uint8) ++ radii = np.tile(5*normal, (4, 1)).astype(np.float32) ++ columns = [cells, directions, np.array([.2, .5, .8, .2], np.float32), ++ radii[:, 0].copy(), radii[:, 1].copy(), np.zeros(4, np.float32), ++ np.array([0, 0, 0, 1], np.uint8), np.zeros(4, np.int32)] ++ with sim.ctx.activate(): ++ for array in columns + [np.tile(speed*normal, (4, 1)).astype(np.float32), ++ np.zeros((4, 3), np.float32)]: ++ allocations.append(cuda.to_device(array)) ++ cuda.memcpy_htod(sim.field.ddf_gpu, initial) ++ sim.stepper.curved_fn(sim.field.ddf_gpu, *allocations[:8], ++ np.uintp(0), np.uintp(0), np.uint32(4), ++ *allocations[8:], block=(32, 1, 1), grid=(1, 1)) ++ actual = np.empty_like(initial) ++ exchange = np.empty((4, 3), np.float32) ++ cuda.memcpy_dtoh(actual, sim.field.ddf_gpu) ++ cuda.memcpy_dtoh(exchange, allocations[-1]) ++ reflected = actual.reshape(9, -1)[2, cells+1] ++ np.testing.assert_allclose(reflected, expected[2], atol=7e-8, rtol=0) ++ # Equilibrium identity is independent of interpolation implementation. ++ fx = expected[1] + expected[2] ++ wanted = np.column_stack((np.full(4, fx), np.zeros(4), -radii[:, 1]*fx)) ++ np.testing.assert_allclose(exchange, wanted, atol=4e-7, rtol=0) ++ finally: ++ with sim.ctx.activate(): ++ for allocation in allocations: ++ allocation.free() ++ sim.close() ++ ++ ++def circle_sim(speed): ++ sim = make_sim(nx=32, ny=24, velocity=0) ++ spec = None if speed is None else dict(angle=.7, half_width=.85, normal_velocity=speed) ++ try: ++ bid = sim.add_body("circle", center=(16, 12), radius=4.3, surface_actuation=spec) ++ sim.initialize() ++ flags = sim.field.flag.copy() ++ flags.reshape(24, 32)[1:-1, [0, -1]] = FLUID # x periodic, y halfway walls ++ y, x = np.mgrid[:24, :32] ++ initial = feq(1.17+.001*np.cos(.2*x+.3*y), ++ .003*np.sin(.3*y), .002*np.cos(.4*x)).astype(np.float32) ++ install_spatial_state(sim, initial) ++ sim.field.flag[:] = flags # installer intentionally resets all flags ++ sim.field.upload_flags() ++ return sim, bid, initial ++ except BaseException: ++ sim.close() ++ raise ++ ++ ++@pytest.mark.parametrize("speed", [-.01, .01]) ++def test_surface_population_ledger_and_public_diagnostics(speed): ++ sim, bid, initial = circle_sim(speed) ++ try: ++ cl = sim.field.curved ++ frozen = {name: getattr(cl, name).copy() for name in GEOMETRY} ++ flags = sim.field.flag.copy() ++ body_state = vars(sim.bodies.get(bid).state).copy() ++ physical = initial.astype(np.float64) ++ flat = physical.reshape(9, -1) ++ cell, direction = cl.fluid_idx.astype(int), cl.dir.astype(int) ++ ex, ey, q = CX[direction], CY[direction], cl.q.astype(float) ++ # Independently project the prescribed arc at true intersections. ++ angle = np.arctan2(cl.ry.astype(float), cl.rx.astype(float)) ++ delta = (angle-.7+np.pi) % (2*np.pi)-np.pi ++ aperture = np.abs(delta) < .85 ++ radial = np.column_stack((cl.rx, cl.ry)).astype(float) ++ normal = radial / np.linalg.norm(radial, axis=1)[:, None] ++ velocity = speed*np.maximum(0, 1-(delta/.85)**2)[:, None]**2*normal ++ np.testing.assert_array_equal(cl.aperture, aperture) ++ np.testing.assert_allclose(cl.surface_velocity, velocity, atol=1e-8, rtol=0) ++ assert aperture.any() and (~aperture).any() ++ assert (q < .5).any() and (q >= .5).any() ++ a = flat[direction, cell] ++ b = np.empty(len(cell)) ++ passive = np.empty(len(cell)) ++ for i, (k, d) in enumerate(zip(cell, direction)): ++ rho = flat[:, k].sum() ++ dot = CX[d]*velocity[i, 0] + CY[d]*velocity[i, 1] ++ if cl.fallback_class[i]: ++ passive[i] = a[i] ++ factor = 6 ++ elif q[i] < .5: ++ passive[i] = 2*q[i]*a[i] + (1-2*q[i])*flat[d, k-CX[d]-32*CY[d]] ++ factor = 6 ++ else: ++ passive[i] = a[i]/(2*q[i]) + (1-1/(2*q[i]))*flat[OPPOSITE[d], k] ++ factor = 3/q[i] ++ b[i] = passive[i]-factor*WEIGHTS[d]*rho*dot ++ force = np.column_stack((ex, ey))*(a+b)[:, None] ++ torque = cl.rx*force[:, 1]-cl.ry*force[:, 0] ++ wanted = np.column_stack((force, torque)) ++ # Fluid-node and intersection lever arms differ by q*c: same link torque. ++ fluid_r = radial-q[:, None]*np.column_stack((ex, ey)) ++ np.testing.assert_allclose(torque, fluid_r[:, 0]*force[:, 1]-fluid_r[:, 1]*force[:, 0], ++ atol=2e-15, rtol=0) ++ with sim.ctx.activate(): ++ sim.stepper.curved_fn(sim.field.ddf_gpu, ++ *(getattr(cl, name+"_gpu") for name in GEOMETRY[:3]), ++ cl.rx_gpu, cl.ry_gpu, cl.rz_gpu, cl.fallback_class_gpu, cl.body_id_gpu, ++ np.uintp(0), np.uintp(0), np.uint32(cl.count), ++ cl.surface_velocity_gpu, cl.link_exchange_gpu, ++ block=(64, 1, 1), grid=((cl.count+63)//64, 1)) ++ staged = np.empty_like(initial) ++ cuda.memcpy_dtoh(staged, sim.field.ddf_gpu) ++ incoming = staged.reshape(9, -1)[OPPOSITE[direction], cell+ex+32*ey].astype(float) ++ np.testing.assert_allclose(incoming, b, atol=8e-8, rtol=0) ++ # Incoming populations alone respond with the expected signed normal drive. ++ assert np.all((-np.sum(normal[aperture]*np.column_stack((ex, ey))[aperture], axis=1)) > 0) ++ core = aperture & (np.abs(delta) < .5*.85) ++ assert core.any() ++ assert np.all(speed*(incoming-passive)[core] > 0) ++ ++ # Independent pull ledger, including all planar-wall links. Use actual ++ # rounded incoming values to isolate bookkeeping from CUDA arithmetic. ++ arrived = np.stack([np.roll(physical[d], (CY[d], CX[d]), (0, 1)) for d in range(9)]) ++ arrived.reshape(9, -1)[OPPOSITE[direction], cell] = incoming ++ mass_exchange = float(np.sum(incoming-a)) ++ momentum_exchange = -np.sum(np.column_stack((ex, ey))*(a+incoming)[:, None], axis=0) ++ for y, outgoing in ((1, (4, 6, 7)), (22, (3, 5, 8))): ++ for d in outgoing: ++ values = physical[d, y, :] ++ arrived[OPPOSITE[d], y, :] = values ++ momentum_exchange -= 2*values.sum()*np.array([CX[d], CY[d]]) ++ fluid = ((flags & FLUID) != 0) & ((flags & SOLID) == 0) ++ change = (arrived-physical).reshape(9, -1)[:, fluid].sum(axis=1) ++ np.testing.assert_allclose([change.sum(), change@CX, change@CY], ++ [mass_exchange, *momentum_exchange], atol=3e-13, rtol=0) ++ # Start public run from the original state, not a previously staged field. ++ with sim.ctx.activate(): ++ cuda.memcpy_htod(sim.field.ddf_gpu, initial) ++ sim.run(1) ++ actual = spatial_state(sim).astype(float).reshape(9, -1)[:, fluid] ++ expected = arrived.reshape(9, -1)[:, fluid] ++ moments = np.stack((np.ones(9), CX, CY)) ++ np.testing.assert_allclose(moments@actual, moments@expected, atol=5e-7, rtol=0) ++ # FP32 collision conserves moments up to rounding, not bitwise globally. ++ change = (actual-physical.reshape(9, -1)[:, fluid]).sum(axis=1) ++ budget = 8*np.finfo(np.float32).eps*np.abs(expected).sum() ++ np.testing.assert_allclose([change.sum(), change@CX, change@CY], ++ [mass_exchange, *momentum_exchange], atol=budget, rtol=0) ++ diagnostic = sim.read_surface_exchange(bid) ++ for name, mask in (("wall", ~aperture), ("aperture", aperture)): ++ np.testing.assert_allclose(diagnostic[name], wanted[mask].sum(axis=0), ++ atol=4e-6, rtol=0) ++ total = diagnostic["wall"]+diagnostic["aperture"] ++ np.testing.assert_allclose(sim.read_force(bid, normalize=False), total[:2], atol=4e-6, rtol=0) ++ np.testing.assert_allclose(sim.read_torque(bid, normalize=False), total[2:], atol=4e-6, rtol=0) ++ for name, value in frozen.items(): ++ np.testing.assert_array_equal(getattr(cl, name), value) ++ np.testing.assert_array_equal(sim.field.flag, flags) ++ assert vars(sim.bodies.get(bid).state) == body_state ++ finally: ++ sim.close() ++ ++ ++def test_zero_surface_drive_preserves_legacy_populations_and_geometry(): ++ records = [] ++ for speed in (None, 0.0): ++ sim, bid, _ = circle_sim(speed) ++ try: ++ sim.run(2) ++ records.append((spatial_state(sim), sim.field.flag.copy(), ++ {name: getattr(sim.field.curved, name).copy() for name in GEOMETRY})) ++ finally: ++ sim.close() ++ np.testing.assert_array_equal(records[0][0], records[1][0]) ++ np.testing.assert_array_equal(records[0][1], records[1][1]) ++ for name in GEOMETRY: ++ np.testing.assert_array_equal(records[0][2][name], records[1][2][name]) ++ ++ ++def test_surface_checkpoint_continues_and_resets_latest_exchange(tmp_path): ++ sim, bid, _ = circle_sim(.01) ++ try: ++ sim.run(1) ++ saved = spatial_state(sim) ++ count = sim.stepper.step_count ++ spec = asdict(sim.bodies.get(bid).surface_actuation) ++ action = sim.bodies.action.copy() ++ path = sim.save_checkpoint(str(tmp_path / "surface.h5")) ++ with h5py.File(path, "r") as checkpoint: ++ assert checkpoint.attrs["ckpt_version"] == 4 ++ geometry = json.loads(checkpoint.attrs["geometry_json"]) ++ assert len(geometry[0]["projection_sha256"]) == 64 ++ assert json.loads(checkpoint.attrs["surface_actuation_json"]) == [spec] ++ applied = checkpoint["applied_action"][:] ++ sim.run(2) ++ expected = spatial_state(sim) ++ expected_exchange = sim.read_surface_exchange(bid) ++ assert np.linalg.norm(expected_exchange["aperture"]) > 0 ++ sim.load_checkpoint(path) ++ assert sim.stepper.step_count == count ++ np.testing.assert_array_equal(spatial_state(sim), saved) ++ np.testing.assert_array_equal(sim.bodies.action, action) ++ actual_action = np.empty_like(applied) ++ with sim.ctx.activate(): ++ cuda.memcpy_dtoh(actual_action, sim.bodies.action_gpu) ++ np.testing.assert_array_equal(actual_action, applied) ++ assert asdict(sim.bodies.get(bid).surface_actuation) == spec ++ for values in sim.read_surface_exchange(bid).values(): ++ np.testing.assert_array_equal(values, np.zeros(3)) ++ restored = sim.save_checkpoint(str(tmp_path / "restored.h5")) ++ with h5py.File(restored, "r") as checkpoint: ++ assert json.loads(checkpoint.attrs["geometry_json"]) == geometry ++ assert json.loads(checkpoint.attrs["surface_actuation_json"]) == [spec] ++ sim.run(2) ++ np.testing.assert_array_equal(spatial_state(sim), expected) ++ for name, values in sim.read_surface_exchange(bid).items(): ++ np.testing.assert_array_equal(values, expected_exchange[name]) ++ finally: ++ sim.close() +--- /dev/null ++++ b/tests/unit/test_surface_actuation.py +@@ -0,0 +1,230 @@ ++"""Static circle apertures: real geometry and host/device-memory protocol tests.""" ++from dataclasses import FrozenInstanceError, asdict ++import json ++import math ++from types import SimpleNamespace ++ ++import h5py ++import numpy as np ++import pytest ++ ++from CelerisLab.body.geometry.circle import CircleGeometry ++from CelerisLab.body.manager import ObjectManager ++from CelerisLab.body.objects import SimObject, SurfaceActuation ++from CelerisLab.common.checkpoint import load_checkpoint, save_checkpoint ++from CelerisLab.config import LBMConfig ++from CelerisLab.lbm.curved_links import CurvedLinkSoA ++from CelerisLab.lbm.descriptors import FLUID, SOLID ++from CelerisLab.simulation import Simulation ++from .test_state_regressions import device, make_field, manager ++ ++ ++def circle(spec=None, *, center=(6., 5.), radius=2.999, **kwargs): ++ return SimObject(0, geometry=CircleGeometry(*center, radius), center=center, ++ radius=radius, surface_actuation=spec, **kwargs) ++ ++ ++def projected(obj): ++ cfg = LBMConfig(nx=12, ny=10, viscosity=.1) ++ cfg.validate() ++ flags = ObjectManager.build_flags_for( ++ [obj], np.full(cfg.nx*cfg.ny, FLUID, np.uint16), nx=cfg.nx, ny=cfg.ny, nz=1) ++ cl = CurvedLinkSoA() ++ cl.assign_host(*obj.get_curved_list(cfg.nx, cfg.ny, cfg.nq, domain_flags=flags)) ++ cl.assign_surface([obj], cfg, flags) ++ return cl, cfg, flags ++ ++ ++@pytest.mark.parametrize('speed', [.002, -.002]) ++def test_aperture_uses_true_hit_not_fluid_node_or_clamped_q(speed): ++ # Fluid (9,5), direction (-1,+1), circle radius 2.999. Actual t < .01, ++ # whereas the existing Bouzidi q is clipped to .01. The narrow opening ++ # contains the true hit but neither the fluid-node angle nor clipped hit. ++ t = (6-math.sqrt(36-8*(9-2.999**2)))/4 ++ angle = math.atan2(t, 3-t) ++ spec = SurfaceActuation(angle, .0001, speed) ++ cl, _, _ = projected(circle(spec)) ++ index, = np.flatnonzero((cl.fluid_idx == 9+5*12) & (cl.dir == 8)) ++ assert cl.q[index] == np.float32(.01) ++ assert angle > spec.half_width ++ assert math.atan2(.01, 2.99)-angle > spec.half_width ++ assert cl.aperture[index] ++ expected = speed*np.array([3-t, t])/2.999 ++ np.testing.assert_allclose(cl.surface_velocity[index], expected, rtol=2e-6, atol=1e-10) ++ np.testing.assert_allclose(np.hypot(cl.rx, cl.ry), 2.999, rtol=0, atol=3e-7) ++ np.testing.assert_array_equal(cl.surface_velocity[~cl.aperture], 0.) ++ ++ ++def test_surface_zero_preserves_eight_column_geometry_and_mask(): ++ plain, zero = circle(), circle(SurfaceActuation(0., .7, 0.)) ++ old, new = plain.get_curved_list(12, 10, 9), zero.get_curved_list(12, 10, 9) ++ assert len(old) == len(new) == 8 ++ for before, after in zip(old, new): ++ np.testing.assert_array_equal(before, after) ++ np.testing.assert_array_equal(plain.get_flag_mask(12, 10), zero.get_flag_mask(12, 10)) ++ cl, _, _ = projected(zero) ++ assert cl.aperture.any() ++ np.testing.assert_array_equal(cl.surface_velocity, 0.) ++ assert projected(plain)[0].surface_velocity is None ++ ++ ++def test_surface_spec_is_immutable_and_wraps_angles(): ++ spec = SurfaceActuation(math.pi, .2, .002) ++ with pytest.raises(FrozenInstanceError): ++ spec.normal_velocity = .003 ++ angles = np.array([math.pi-.1, -math.pi+.1, 0.]) ++ velocity, mask = spec.project(np.cos(angles), np.sin(angles)) ++ np.testing.assert_array_equal(mask, [True, True, False]) ++ np.testing.assert_allclose(np.linalg.norm(velocity[:2], axis=1), .002*(1-.5**2)**2, ++ rtol=1e-6) ++ np.testing.assert_array_equal(velocity[2], 0.) ++ ++ ++@pytest.mark.parametrize('values', [(0., 0., .002), (0., math.pi+.1, .002), ++ (0., .2, 1.), (math.nan, .2, .002), ++ (0., math.inf, .002), (0., .2, math.nan)]) ++def test_invalid_surface_spec(values): ++ with pytest.raises(ValueError): ++ SurfaceActuation(*values) ++ ++ ++@pytest.mark.parametrize('override', [dict(streaming='esopull'), dict(store_precision='FP16S'), ++ dict(ddf_shifting=True), dict(lattice_model='D3Q19')]) ++def test_surface_rejects_unsupported_mode_before_registration(override): ++ cfg = LBMConfig(nx=12, ny=10, **override) ++ cfg.validate() ++ bodies = ObjectManager(cfg.nx, cfg.ny, cfg.nz, cfg.nq, cfg) ++ with pytest.raises(ValueError, match='Surface actuation requires'): ++ bodies.add(circle(SurfaceActuation(0., .7, .002))) ++ assert bodies.count == 0 ++ ++ ++@pytest.mark.parametrize('role', ['is_sensor', 'is_force_region']) ++def test_surface_rejects_nonwall_roles(role): ++ with pytest.raises(ValueError): ++ circle(SurfaceActuation(0., .7, .002), **{role: True}).validate_surface_actuation(LBMConfig()) ++ ++ ++@pytest.mark.parametrize('key', ['omega', 'vx', 'vy']) ++def test_surface_set_body_rejects_motion_before_mutation(key): ++ cfg = LBMConfig(nx=12, ny=10) ++ cfg.validate() ++ bodies = ObjectManager(cfg.nx, cfg.ny, cfg.nz, cfg.nq, cfg) ++ item = circle(SurfaceActuation(0., .7, .002)) ++ bodies.add(item) ++ sim = Simulation.__new__(Simulation) ++ sim.lbm_cfg, sim.bodies = cfg, bodies ++ state, action = asdict(item.state), bodies.action.copy() ++ with pytest.raises(ValueError, match='stationary'): ++ sim.set_body(0, **{key: .01}) ++ assert asdict(item.state) == state ++ np.testing.assert_array_equal(bodies.action, action) ++ ++ ++def test_surface_projection_rejects_unresolved_aperture_and_bad_writers(): ++ with pytest.raises(ValueError, match='no resolved'): ++ projected(circle(SurfaceActuation(.123456, 1e-9, .002))) ++ item = circle(SurfaceActuation(0., .7, .002)) ++ cl, cfg, flags = projected(item) ++ flags[cl.fluid_idx[0]] = SOLID ++ with pytest.raises(ValueError, match='active fluid'): ++ cl.assign_surface([item], cfg, flags) ++ flags[cl.fluid_idx[0]] = FLUID ++ cl.fluid_idx[1], cl.dir[1] = cl.fluid_idx[0], cl.dir[0] ++ with pytest.raises(ValueError, match='unique'): ++ cl.assign_surface([item], cfg, flags) ++ ++ ++def test_surface_public_dict_entry_and_sync_copy(): ++ cfg = LBMConfig(nx=12, ny=10) ++ cfg.validate() ++ sim = Simulation.__new__(Simulation) ++ sim.lbm_cfg, sim._initialized = cfg, False ++ sim.bodies = ObjectManager(cfg.nx, cfg.ny, cfg.nz, cfg.nq, cfg) ++ spec = dict(angle=0., half_width=.7, normal_velocity=.002) ++ oid = sim.add_body('circle', center=(6., 5.), radius=2., surface_actuation=spec) ++ copied, = sim.bodies.build_next_objects() ++ assert asdict(copied.surface_actuation) == spec ++ assert copied.surface_actuation is sim.bodies.get(oid).surface_actuation ++ ++ ++def case(device, spec): ++ field = make_field(device) ++ bodies = manager(field, [circle(spec, radius=2.)]) ++ bodies.sync_to_gpu(field) ++ return field, bodies ++ ++ ++def test_surface_gpu_buffer_lifecycle_with_memory_double(device): ++ field, bodies = case(device, SurfaceActuation(0., .7, .002)) ++ cl = field.curved ++ velocity, exchange = cl.surface_velocity_gpu, cl.link_exchange_gpu ++ np.testing.assert_array_equal(np.frombuffer(velocity.data, np.float32).reshape(-1, 2), ++ cl.surface_velocity) ++ np.testing.assert_array_equal(np.frombuffer(exchange.data, np.float32), 0.) ++ cl.assign_surface([], field.cfg, field.flag) ++ cl.upload() ++ assert velocity.freed and exchange.freed ++ assert cl.surface_velocity_gpu is None and cl.link_exchange_gpu is None ++ cl.assign_surface(bodies.objects, field.cfg, field.flag) ++ cl.upload() ++ velocity, exchange = cl.surface_velocity_gpu, cl.link_exchange_gpu ++ cl.free() ++ assert velocity.freed and exchange.freed and cl.count == 0 ++ ++ ++@pytest.mark.parametrize('damage', ['missing_spec', 'legacy_missing_spec', 'different_spec', ++ 'omega', 'vx', 'vy', 'applied_omega']) ++def test_surface_checkpoint_rejects_mismatch_before_any_write(device, tmp_path, damage): ++ field, bodies = case(device, SurfaceActuation(0., .7, .002)) ++ path = save_checkpoint(field, SimpleNamespace(step_count=3), field.cfg, bodies, ++ str(tmp_path/'surface.h5')) ++ with h5py.File(path, 'a') as hf: ++ assert hf.attrs['ckpt_version'] == 4 ++ if damage in ('missing_spec', 'legacy_missing_spec'): ++ del hf.attrs['surface_actuation_json'] ++ if damage == 'legacy_missing_spec': ++ hf.attrs['ckpt_version'] = 3 ++ elif damage == 'different_spec': ++ records = json.loads(hf.attrs['surface_actuation_json']) ++ records[0]['normal_velocity'] *= -1 ++ hf.attrs['surface_actuation_json'] = json.dumps(records) ++ elif damage == 'applied_omega': ++ action = hf['applied_action'][:] ++ action[-1] = .01 ++ hf['applied_action'][:] = action ++ else: ++ records = json.loads(hf.attrs['objects_json']) ++ records[0][damage] = .01 ++ hf.attrs['objects_json'] = json.dumps(records) ++ writes, state = device.writes, asdict(bodies.get(0).state) ++ raw = [bytes(ptr.data) for ptr in (field.ddf_gpu, field.temp_gpu, field.flag_gpu)] ++ stepper = SimpleNamespace(_step_count=99) ++ with pytest.raises(ValueError): ++ load_checkpoint(path, field, stepper, field.cfg, bodies) ++ assert device.writes == writes and stepper._step_count == 99 ++ assert asdict(bodies.get(0).state) == state ++ assert raw == [bytes(ptr.data) for ptr in (field.ddf_gpu, field.temp_gpu, field.flag_gpu)] ++ ++ ++@pytest.mark.parametrize('enabled', [False, True]) ++def test_surface_checkpoint_rebuild_and_legacy_absence(device, tmp_path, enabled): ++ spec = SurfaceActuation(0., .7, .002) if enabled else None ++ field, bodies = case(device, spec) ++ path = save_checkpoint(field, SimpleNamespace(step_count=3), field.cfg, bodies, ++ str(tmp_path/'surface.h5')) ++ with h5py.File(path, 'a') as hf: ++ assert hf.attrs['ckpt_version'] == (4 if enabled else 3) ++ if not enabled: ++ del hf.attrs['surface_actuation_json'] ++ restored, restored_bodies = case(device, spec) ++ stepper = SimpleNamespace(_step_count=0) ++ load_checkpoint(path, restored, stepper, restored.cfg, restored_bodies) ++ assert stepper._step_count == 3 ++ for source, target in ((field.ddf_gpu, restored.ddf_gpu), (field.temp_gpu, restored.temp_gpu), ++ (field.flag_gpu, restored.flag_gpu)): ++ assert bytes(source.data) == bytes(target.data) ++ if enabled: ++ np.testing.assert_array_equal(field.curved.surface_velocity, restored.curved.surface_velocity) ++ else: ++ assert restored.curved.surface_velocity is None diff --git a/research/surface_actuation_20261014/manifest.json b/research/surface_actuation_20261014/manifest.json new file mode 100644 index 0000000..35daa01 --- /dev/null +++ b/research/surface_actuation_20261014/manifest.json @@ -0,0 +1,101 @@ +{ + "head": "6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0", + "tracked_baseline_files": 380, + "changed": [ + { + "path": "src/CelerisLab/body/__init__.py", + "added": 2, + "removed": 2, + "sha256": "91d1155080b3ade83d13c84c39693046df122e4bed5ef583de2df1f9453c1b76" + }, + { + "path": "src/CelerisLab/body/manager.py", + "added": 26, + "removed": 5, + "sha256": "6a40be708c71ef6f3b5f5f0aa9c92cfafc51f2ec2a958f99656cccb850986c16" + }, + { + "path": "src/CelerisLab/body/objects.py", + "added": 53, + "removed": 0, + "sha256": "d1cf7054cc8379a83c39acc66a7c88ae62fa004f110bb0c1def2ee57137401c5" + }, + { + "path": "src/CelerisLab/common/checkpoint.py", + "added": 33, + "removed": 7, + "sha256": "b2f960aecd5ac27a3a7130b809ffad4709c44d522edef0359ab952654625410b" + }, + { + "path": "src/CelerisLab/lbm/curved_links.py", + "added": 57, + "removed": 0, + "sha256": "00d9c29d660b41190f32dd737b12f60e10ce4214b6c9a6ab2a63438813faa594" + }, + { + "path": "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh", + "added": 10, + "removed": 5, + "sha256": "7bccf7e7091c012d7a3d4874a881d4d46699021faedd83d125933fbdaa562711" + }, + { + "path": "src/CelerisLab/lbm/kernels/step/aux_kernels.cu", + "added": 11, + "removed": 4, + "sha256": "e163257b9cbbcdd289bf2a76b5b147ed9512dd04825ddfc9518fb626c8cff00e" + }, + { + "path": "src/CelerisLab/lbm/stepper.py", + "added": 1, + "removed": 0, + "sha256": "d2ef351aa2de441ec123deb55ce35603064130222f5490b154d41756b755cd73" + }, + { + "path": "src/CelerisLab/simulation.py", + "added": 29, + "removed": 4, + "sha256": "c9d903f53fe356d7af281bea07943de1a62494127fb69848d7053fd46f7dec3e" + }, + { + "path": "tests/integration/test_surface_actuation_gpu.py", + "added": 249, + "removed": 0, + "sha256": "3c2b4dda70db1d6493ecd92bd9b0dad6d8b438cdf6dca46410018217f8beb4da" + }, + { + "path": "tests/unit/test_surface_actuation.py", + "added": 230, + "removed": 0, + "sha256": "89be6f54c4eba6c2bdca0d287a5b9fa6db143de2bcd9a671d4fb8445921303ed" + } + ], + "unchanged_baseline_files": 371, + "new_test_files": [ + "tests/unit/test_surface_actuation.py", + "tests/integration/test_surface_actuation_gpu.py" + ], + "scope": "9 production files + 2 new tests; refinement and prior examples unchanged", + "post_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/objects.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?? examples/\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/integration/test_surface_actuation_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/unit/test_surface_actuation.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", + "diff_sha256": "9511a0f105edd655f08fbbb22b0330729ee6b610b15febfa38403c4ec506c88b", + "cleanup": { + "baseline_copy_path": "/tmp/celeris-surface-baseline-i8y0r5qt", + "baseline_copy_bytes": 1547067, + "runner_path": "/tmp/celeris-surface-gpu-run.py", + "note": "Own before-copies removed after incremental diff reverse-apply check; baseline hashes and exact incremental patch retained. GPU compile scratch had already been removed by the runner.", + "baseline_copy_removed": true, + "runner_removed": true + }, + "evidence_hashes": { + "report.txt": "128dd731124542be4ba50fe18d24ceb0a5b37f0329bcf32cdda4de3f1514b0c7", + "gpu_run.json": "e06268a9acdb3c6ced30e58d684c427aeaaa427b7098da55e60f9a4854a8aa58", + "gpu_stdout.txt": "bc882fe06353f12ab2b85bc5c9b7e6a23adf705d9e2ab6a529ca8afa49a5166a", + "cpu_surface_command.txt": "7204f2326b37ce0b4bf05e806935974fb91246922f7e3760dbab0627d94f07ef", + "baseline.json": "4456d6718db2ad3335c372368e3e1a0a384d78319855a0a9d4cdfca02f28a4c7", + "cpu_initial.txt": "2c19cce736bac1da5ccacf06b0c71b0e1affcd385e1346d2ab9a0cab5567842a", + "cpu_surface_exit.txt": "9a271f2a916b0b6ee6cecb2426f0b3206ef074578be55d9bc94f6f3fe3ab86aa", + "cpu_surface_stdout.txt": "8e47fbdb3f81736adfbb0df2621df4953cf20f2e49cf63a9518b32e6a524fc20", + "incremental.diff": "9511a0f105edd655f08fbbb22b0330729ee6b610b15febfa38403c4ec506c88b", + "cpu_checkpoint_stdout.txt": "d740f1038fb46c8c49a0677d9b0d3677ef461bc14cf58f92eb8bd9ad3b1c97f9", + "cpu_checkpoint_run.json": "8970cd51e65172d47ed3dd16fd118923708dbb2309b213fb819a4c9e3f2e67d0" + } +} diff --git a/research/surface_actuation_20261014/report.txt b/research/surface_actuation_20261014/report.txt new file mode 100644 index 0000000..1162a64 --- /dev/null +++ b/research/surface_actuation_20261014/report.txt @@ -0,0 +1,66 @@ +2026-10-14 — 静止圆局部表面吹吸,实施与验证 + +A 已完成当前受限增量。新增 SurfaceActuation(angle, half_width, normal_velocity), +由 Simulation.add_body('circle', ..., surface_actuation={...}) 或 cylinder body config +设置。角度为弧度,正速度沿 solid→fluid 法向;采用 (1-s²)² 平滑孔口剖面。 +范围:D2Q9 / FP32 / unshifted / double_buffer,圆保持静止。 + +实现路径与简洁性 +- 不改原八列 cut-link 几何、packer 或 geometry SHA。由已有真实 hit−center + 得到圆法向及孔口角度;不使用流体节点角度或被截断的 q 重建命中点。 +- 独立 Nx2 表面速度 → CurvedBoundaryKernel → 现有 BFL 两分支/halfway fallback。 + 不占用 omega 控制槽。未开启时不分配两个新 GPU 缓冲;零速度保留原算式路径。 +- read_surface_exchange(id) 返回最后一步 wall/aperture 的 (Fx,Fy,Tz)。这是 + 离散边界动量交换,不是喷嘴总推力,也不输出质量流率;同步/恢复后清零。 +- 规格不可变,禁止非静止状态及不支持的模式;无有效孔口/重复写者/非流体接收 + 节点在同步或恢复写入之前拒绝。同步复制规格,释放/重建相应缓冲。 +- 带规格(包括零振幅)checkpoint 保存为 v4,旧 reader 会拒绝,避免静默按 + 普通固壁恢复;无驱动仍保存 v3。新 loader 接收 v1–v4,严格核对几何和规格, + 恢复前拒绝非零 saved vx/vy/omega 或 applied omega。 + +本次相对开始时工作树:9 个生产文件 +222/−27(净 +195),2 个新测试文件 +共 479 行。incremental.diff 仅包含本次变化,不混入历史未提交修改。 +baseline.json 记录 HEAD、当时 status、380 个 src/tests/examples 文件哈希; +manifest.json 确认除本次 9 个生产文件之外的 371 个基线文件不变。 +未修改 refinement、既有 jet 案例、DynamisLab;未安装依赖、提交或推送。 + +验证(现有 pycuda_3_10 环境,显式 PYTHONPATH=/home/frank14f/CelerisLab/src) +- 初始相关回归:44 passed,1.60s,exit 0,见 cpu_initial.txt。 +- 新 CPU 规格/恢复/内存生命周期测试:31 passed,0.41s,exit 0。 +- checkpoint 版本调整后的针对性回归:30 passed,0.63s,exit 0。 + 这 30 项属于此前 44 项的重测,不重复计入不同测试数。 +- 新 GPU 测试:6 passed,19.80s,exit 0。独立 FP64 解析检查正负驱动、 + q=.2/.5/.8 和 fallback;真实圆的 incoming populations、质量/动量账本、 + 力矩及 wall/aperture 分区;零驱动与旧路径逐元素完全相等;实际 checkpoint + 恢复后 2 步续算与原运行逐元素完全相等。未声称包括正负零符号的逐字节等同。 +- GPU 前置预检:设备 0 UUID GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, + 占用 5 MiB、利用率 0、无计算进程;设备 1 未运行任务。 + 进程组峰值 RSS 397094912 bytes,VRAM 最小空闲 15826 MiB, + RAM 最小空闲 63571013632 bytes,本次相关临时空间采样峰值 3579568 bytes。 + 无固定 RSS/address-space 上限;按实际余量保留 RAM/VRAM、120s 时间界限、 + 2GB 本次临时空间界限。采样监测不是 OS 硬资源隔离。原始命令/环境见 gpu_run.json。 +- git diff --check 与增量 patch 反向可应用检查通过。 + +参考依据(算法对照,未复制外部代码) +OpenLB fb62326f260bf0c5ec2666fc5e055c0813ff50a9: +1. ref/OpenLB/src/boundary/defineU2D.hh:74–79 在真实 intersection 上取完整速度。 +2. ref/OpenLB/src/boundary/offBoundaryPostProcessors2D.hh:115–127,153–155 + 的两段速度修正与现有 BFL 方向约定对照;本库方向为 fluid→solid,故负号。 +3. 本库沿用自身 rho_wall 约定及 fallback;未直接搬用外部 dynamics 密度约定。 +4. 原 apply_bouzidi_link 的 c_i*(f_toward+f_reflected) 动量交换保持不变; + 新诊断仅保留逐链接结果后按孔口分区,力矩使用原真实 lever arm。 +OpenLB 为 GPL-2.0-or-later,仅作来源对照。 + +B 独立分析见 ../wall_seam_pulse_20261014/。 +三个单位 population 脉冲表明,在该脚本明确限定的候选运输假设下,单改 BB/ +coalescence 优先级或排除 solid-source 记录仍产生 ±0.25 权重残差。 +prestream 与 postpull BB 两次 fine hop 等价,且目的 slot 唯一写者并不足以 +保证每个初始 packet 只有一个全局所有者。没有碰撞、GPU 或生产 refinement +修改,不能称为现存 backend 或外部库的 bug。一次真实执行 exit 0;随后仅 +删除固定 AS 上限且未重跑,执行版/当前版哈希和原始输出保持可追踪。 + +限制与停点 +GPU 验证使用 SRT;未开展长时稳定性、空间收敛、真实质量流率标定、性能基准, +也未据此宣称 MRT/TRT 的物理精度或多层网格交界正确。当前只是静止圆的局部 +表面吹吸,没有移动物体/喷嘴内部,也没有将该边界接入 refinement。 +本步已停止扩展,留待独立审查;B 的交界所有权方案仍需重新设计与验证。 diff --git a/research/wall_seam_pulse_20261014/analyze.py b/research/wall_seam_pulse_20261014/analyze.py new file mode 100644 index 0000000..ed7cf69 --- /dev/null +++ b/research/wall_seam_pulse_20261014/analyze.py @@ -0,0 +1,231 @@ +"""One-interval, collision-free population-basis analysis; NOT an LBM solver. + +No production imports/maps, CUDA, collision, force, or time-stepping benchmark. +The hypotheses below extend the current geometric transfer to a wall crossing; +they are not claims about the shipped backend or any external implementation. +Run: python research/wall_seam_pulse_20261014/analyze.py +""" +from dataclasses import dataclass +from pathlib import Path +import csv +import hashlib +import json +import resource + +resource.setrlimit(resource.RLIMIT_FSIZE, (2*1024**2, 2*1024**2)) +OUT = Path(__file__).resolve().parent +ROOT = OUT.parents[1] +N, NF = 16, 24 +LO, HI, HALO = 4, 12, 4 +CX = (0, 1, -1, 0, 0, 1, -1, 1, -1) +CY = (0, 0, 0, 1, -1, 1, -1, -1, 1) +OPP = (0, 2, 1, 4, 3, 6, 5, 8, 7) + + +def covered(x, y): + return LO <= x < HI and LO <= y < HI + + +def coarse_fluid(x, y): + return 0 <= x < N and 8 <= y < 15 + + +def fine_fluid(x, y): + return 0 <= x < NF and 0 <= y < NF and 8 < 2+(y+.5)/2 < 15 + + +def active(x, y): + return HALO <= x < NF-HALO and HALO <= y < NF-HALO and fine_fluid(x, y) + + +def parent(x, y): + return LO+(x-HALO)//2, LO+(y-HALO)//2 + + +def fine_targets(): + return [(x, y) for y in range(2, NF-2) for x in range(2, NF-2) if fine_fluid(x, y)] + + +@dataclass(frozen=True) +class Packet: + phase: str + slot: tuple # (q, x, y) + value: float + operation: str + parents: tuple = () # (Packet, coefficient); includes zero-valued inputs + + +def derive(phase, slot, operation, parents): + return Packet(phase, slot, sum(p.value*w for p, w in parents), operation, tuple(parents)) + + +def initialize(pulse): + level, q0, x0, y0 = pulse + coarse = {(q, x, y): Packet('Gc0', (q, x, y), float(('coarse', q, x, y) == pulse), 'input') + for y in range(N) for x in range(N) if coarse_fluid(x, y) and not covered(x, y) + for q in range(9)} + fine = {} + for y in range(NF): + for x in range(NF): + # Full fine footprint: a shared parent and its four children must + # agree, including outer halo and solid cells (which hold no data). + px, py = parent(x, y) + if fine_fluid(x, y) != coarse_fluid(px, py): + raise AssertionError('parent/child physical classifications disagree') + if not fine_fluid(x, y): + continue + for q in range(9): + key = q, x, y + if active(x, y): + fine[key] = Packet('Gf0', key, float(('fine', q, x, y) == pulse), 'input') + else: + fine[key] = derive('Gf0', key, 'explode', [(coarse[q, px, py], 1)]) + if level == 'coarse': + assert sum(p.value for p in coarse.values()) == 1 + else: + assert active(x0, y0) and sum(p.value for p in fine.values() if p.operation == 'input') == 1 + return coarse, fine + + +def fine_hop(inp, hop, prestream=False): + phase = ('pre_' if prestream else '')+f'F{hop}' + staged = dict(inp) + if prestream: + written = set() + # Independent prestream form: write the missing solid-source slots. + # Each (q,source) has exactly one fluid destination in a pull scheme. + for x, y in fine_targets(): + for q in range(9): + sx, sy = x-CX[q], y-CY[q] + if not fine_fluid(sx, sy) and (OPP[q], x, y) in inp: + key = q, sx, sy + assert key not in written + written.add(key) + staged[key] = derive(phase+'_BCscratch', key, 'prestream_BB', [(inp[OPP[q], x, y], 1)]) + out = {} + for x, y in fine_targets(): + for q in range(9): + key, source = (q, x, y), (q, x-CX[q], y-CY[q]) + if prestream or fine_fluid(source[1], source[2]): + donor, op = staged.get(source), 'pull' + else: + donor, op = inp.get((OPP[q], x, y)), 'local_BB' + if donor is not None: + assert key not in out + out[key] = derive(phase, key, op, [(donor, 1)]) + # Missing slots are explicitly invalid, not zero; outer halo is not output. + return out + + +def links(): + result = {} + for y in range(N): + for x in range(N): + if not coarse_fluid(x, y) or covered(x, y): + continue + for q in range(1, 9): + if LO <= x+.5-CX[q]/2 <= HI and LO <= y+.5-CY[q]/2 <= HI: + a, b = HALO+2*(x-LO), HALO+2*(y-LO) + result[q, x, y] = [(q, a+dx, b+dy) for dy in (0, 1) for dx in (0, 1)] + return result + + +LINKS = links() +HYPOTHESES = ('coarse_BB_then_coalesce', 'coalesce_then_coarse_BB', 'omit_solid_source_links') + + +def coarse_arrivals(gc, f2, hypothesis): + out = {} + for q, x, y in gc: + key = q, x, y + sx, sy = (x-CX[q]) % N, (y-CY[q]) % N + wall = not coarse_fluid(sx, sy) + transfer = key in LINKS + if hypothesis == 'omit_solid_source_links' and wall: + transfer = False + # Functional final assignment models the specified ordered overrides. + # Every destination has one final writer; this alone does not prove + # that one initial packet has only one physical owner globally. + if transfer and (not wall or hypothesis == 'coarse_BB_then_coalesce'): + parents = [(f2[child], .25) for child in LINKS[key]] + node = derive('Fc1', key, 'coalescence', parents) + elif wall: + node = derive('Fc1', key, 'coarse_BB', [(gc[OPP[q], x, y], 1)]) + else: + node = derive('Fc1', key, 'coarse_pull', [(gc[q, sx, sy], 1)]) + assert key not in out + out[key] = node + return out + + +def trace(p, contribution=1.): + return dict(phase=p.phase, slot=list(p.slot), operation=p.operation, + value=p.value, downstream_weight=contribution, + parents=[trace(parent, contribution*w) for parent, w in p.parents if parent.value]) + + +def main(): + cases = [('outer_coarse_q7', ('coarse', 7, 2, 8)), + ('adjacent_coarse_q7', ('coarse', 7, 3, 8)), + ('active_fine_q7', ('fine', 7, 4, 12))] + rows, results = [], [] + for name, pulse in cases: + gc, gf = initialize(pulse) + f1 = fine_hop(gf, 1) + f2 = fine_hop(f1, 2) + pre1 = fine_hop(gf, 1, prestream=True) + pre2 = fine_hop(pre1, 2, prestream=True) + assert {k: p.value for k, p in f1.items()} == {k: p.value for k, p in pre1.items()} + assert {k: p.value for k, p in f2.items()} == {k: p.value for k, p in pre2.items()} + assert all(child in f2 for children in LINKS.values() for child in children) + initial = 1. if pulse[0] == 'coarse' else .25 + fine_mass = .25*sum(p.value for (q, x, y), p in f2.items() if active(x, y)) + for phase in (gc, gf, f1, f2): + for node in phase.values(): + if node.value: + rows.append((name, 'shared', node.phase, *node.slot, node.operation, node.value, + ';'.join(f'{p.phase}:{p.slot}*{w}' for p, w in node.parents))) + for hypothesis in HYPOTHESES: + out = coarse_arrivals(gc, f2, hypothesis) + coarse_mass = sum(p.value for p in out.values()) + selected = out[8, 3, 8] + item = dict(case=name, pulse=pulse, hypothesis=hypothesis, + initial_leaf_weight=initial, coarse_leaf_weight=coarse_mass, + fine_leaf_weight=fine_mass, total_leaf_weight=coarse_mass+fine_mass, + residual=coarse_mass+fine_mass-initial, + inspected_slot=[8, 3, 8], selected_writer=selected.operation, + inspected_value=selected.value, + final_nonzero_traces=[trace(p) for p in out.values() if p.value]) + results.append(item) + for node in out.values(): + if node.value: + rows.append((name, hypothesis, node.phase, *node.slot, node.operation, node.value, + ';'.join(f'{p.phase}:{p.slot}*{w}' for p, w in node.parents))) + print(f'{name:20s} {hypothesis:27s} initial={initial:g} coarse={coarse_mass:g} ' + f'fine={fine_mass:g} residual={item["residual"]:+g}; ' + f'K(3,8),q8={selected.value:g} ({selected.operation})') + sources = ['src/CelerisLab/lbm/refinement.py', 'src/CelerisLab/lbm/refinement_stepper.py', + 'src/CelerisLab/lbm/kernels/refinement.cu', + 'src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh'] + report = dict(scope='Independent single-interval linear packet/basis analysis; no collision or solver execution', + geometry=dict(coarse=[16, 16], patch=[4, 4, 12, 12], fine=[24, 24], + fine_origin=[2, 2], coarse_dx_dt=[1, 1], fine_dx_dt=[.5, .5], walls_Y=[8, 15]), + assumptions=['fluid active populations pass unchanged between fine hops (identity transfer probe)', + 'fine fluid inner ghosts reflect, never collide; outer halo output is invalid', + 'solid destinations omitted; no filtering by coarse source in geometric LINKS', + 'coalescence is equal-weight average of four children of each coarse target', + 'results test these proposed extensions, not current production support or external libraries'], + prestream_vs_postpull='Exact values and validity match on both hops for all three probes', + source_files_read_only={p: hashlib.sha256((ROOT/p).read_bytes()).hexdigest() for p in sources}, + script_sha256=hashlib.sha256(Path(__file__).read_bytes()).hexdigest(), results=results) + (OUT/'results.json').write_text(json.dumps(report, indent=2)+'\n') + with (OUT/'sources.csv').open('w', newline='') as stream: + writer = csv.writer(stream) + writer.writerow(('case', 'hypothesis', 'phase', 'q', 'x', 'y', 'operation', 'value', 'immediate_sources')) + writer.writerows(rows) + print('Prestream/postpull equivalence, valid coalescence reads, and unique destination writes: PASS') + print(f'peak_rss_MiB={resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024:.3f}') + + +if __name__ == '__main__': + main() diff --git a/research/wall_seam_pulse_20261014/interpretation.txt b/research/wall_seam_pulse_20261014/interpretation.txt new file mode 100644 index 0000000..90935db --- /dev/null +++ b/research/wall_seam_pulse_20261014/interpretation.txt @@ -0,0 +1,59 @@ +Scope and reproduction +---------------------- +Run the exact command in run.json using the existing Python environment. This +script uses only the standard library and derives all transfer links from +literal physical coordinates. Production files are hashed for context only; +no production solver, exchange map, boundary helper or CUDA code is imported. +Only this newly created evidence directory was written by this analysis. + +The inputs are unit basis coefficients, NOT finite-density physical LBM states. +Fine active populations pass unchanged between hops. F1/F2 therefore denote +transport/BB stages of an identity-transfer probe, not an SRT validation. These +results do not establish a bug in the shipped backend (which does not implement +this wall-crossing mode) or in any external library. + +Fixed geometry +-------------- +Coarse 16x16, centers (x+.5,y+.5), dx=dt=1. Patch [4,12)x[4,12). +Fine 24x24 with halo 4, origin (2,2), centers origin+.5*(index+.5), dx=dt=.5. +Halfway planes Y=8 and Y=15; fluid occupies 8C. +2. Coalescence then coarse BB: final writer for solid-source slots is coarse BB. +3. Omit solid-source coalescence slots: coincides numerically with option 2 here. +All alternatives assign each final destination once; source ownership still +duplicates or loses packets, as the numeric totals in stdout/results show. + +Measured packet path for Gc(q7,x2,y8) +----------------------------------- +Gc0(7,2,8) --explosion--> Gf0(7,1,13) + --hop1 pull--> F1(7,2,12) --hop2 local BB--> F2(8,2,12) + --weight .25 coalescence--> Fc1(8,3,8). +Option 1 also retains the full independent coarse BB at Fc1(8,2,8), producing +total leaf weight 1.25 from 1. Options 2/3 avoid this particular duplication, +but the adjacent coarse pulse produces 1.25 from 1, and the fine-active pulse +loses its entire initial leaf weight .25. Thus neither blanket precedence nor +blanket solid-source filtering resolves the seam. + +Both local postpull BB and an independently implemented prestream solid-slot +write yield exactly equal values AND validity sets for both fine hops on all +three probes. This establishes equivalence only for the explicit footprint and +operations in this script; it is not a reproduction of an external library. + +Next inference, not implemented +------------------------------ +A correct wall/interface transfer needs per-packet geometric ownership beyond +these unmodified straight-link four-child rules. Preserve this counterexample +and both controls when proposing that ownership. No scaling fix, interpolation, +wall-shear solver run, GPU experiment, or production change was attempted. +sources.csv records all nonzero stages; results.json includes recursive final +coarse ancestry, weights, parameter scope, and hashes. stdout.txt is the raw +single-run output. run.json records the observed exit and resource limits. diff --git a/research/wall_seam_pulse_20261014/results.json b/research/wall_seam_pulse_20261014/results.json new file mode 100644 index 0000000..678a075 --- /dev/null +++ b/research/wall_seam_pulse_20261014/results.json @@ -0,0 +1,621 @@ +{ + "scope": "Independent single-interval linear packet/basis analysis; no collision or solver execution", + "geometry": { + "coarse": [ + 16, + 16 + ], + "patch": [ + 4, + 4, + 12, + 12 + ], + "fine": [ + 24, + 24 + ], + "fine_origin": [ + 2, + 2 + ], + "coarse_dx_dt": [ + 1, + 1 + ], + "fine_dx_dt": [ + 0.5, + 0.5 + ], + "walls_Y": [ + 8, + 15 + ] + }, + "assumptions": [ + "fluid active populations pass unchanged between fine hops (identity transfer probe)", + "fine fluid inner ghosts reflect, never collide; outer halo output is invalid", + "solid destinations omitted; no filtering by coarse source in geometric LINKS", + "coalescence is equal-weight average of four children of each coarse target", + "results test these proposed extensions, not current production support or external libraries" + ], + "prestream_vs_postpull": "Exact values and validity match on both hops for all three probes", + "source_files_read_only": { + "src/CelerisLab/lbm/refinement.py": "554735c5613129eb29f339c6aeeb4f3a3bbc5aba67558be51fbf7c2fb6ac442a", + "src/CelerisLab/lbm/refinement_stepper.py": "ad57a6a3887b007488b4954b24ff06cd8cde2b12674bdafb97bfda1961ae1da4", + "src/CelerisLab/lbm/kernels/refinement.cu": "025c59dc9c207a831e78e1635cb3f14fe60b64c021004a0d66e5d01fda8554b5", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233" + }, + "script_sha256": "bb4a8587e95835794ce08be3483d603afb8987a59f6c7cde39cf201395f6f541", + "results": [ + { + "case": "outer_coarse_q7", + "pulse": [ + "coarse", + 7, + 2, + 8 + ], + "hypothesis": "coarse_BB_then_coalesce", + "initial_leaf_weight": 1.0, + "coarse_leaf_weight": 1.25, + "fine_leaf_weight": 0.0, + "total_leaf_weight": 1.25, + "residual": 0.25, + "inspected_slot": [ + 8, + 3, + 8 + ], + "selected_writer": "coalescence", + "inspected_value": 0.25, + "final_nonzero_traces": [ + { + "phase": "Fc1", + "slot": [ + 8, + 2, + 8 + ], + "operation": "coarse_BB", + "value": 1.0, + "downstream_weight": 1.0, + "parents": [ + { + "phase": "Gc0", + "slot": [ + 7, + 2, + 8 + ], + "operation": "input", + "value": 1.0, + "downstream_weight": 1.0, + "parents": [] + } + ] + }, + { + "phase": "Fc1", + "slot": [ + 8, + 3, + 8 + ], + "operation": "coalescence", + "value": 0.25, + "downstream_weight": 1.0, + "parents": [ + { + "phase": "F2", + "slot": [ + 8, + 2, + 12 + ], + "operation": "local_BB", + "value": 1.0, + "downstream_weight": 0.25, + "parents": [ + { + "phase": "F1", + "slot": [ + 7, + 2, + 12 + ], + "operation": "pull", + "value": 1.0, + "downstream_weight": 0.25, + "parents": [ + { + "phase": "Gf0", + "slot": [ + 7, + 1, + 13 + ], + "operation": "explode", + "value": 1.0, + "downstream_weight": 0.25, + "parents": [ + { + "phase": "Gc0", + "slot": [ + 7, + 2, + 8 + ], + "operation": "input", + "value": 1.0, + "downstream_weight": 0.25, + "parents": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "case": "outer_coarse_q7", + "pulse": [ + "coarse", + 7, + 2, + 8 + ], + "hypothesis": "coalesce_then_coarse_BB", + "initial_leaf_weight": 1.0, + "coarse_leaf_weight": 1.0, + "fine_leaf_weight": 0.0, + "total_leaf_weight": 1.0, + "residual": 0.0, + "inspected_slot": [ + 8, + 3, + 8 + ], + "selected_writer": "coarse_BB", + "inspected_value": 0.0, + "final_nonzero_traces": [ + { + "phase": "Fc1", + "slot": [ + 8, + 2, + 8 + ], + "operation": "coarse_BB", + "value": 1.0, + "downstream_weight": 1.0, + "parents": [ + { + "phase": "Gc0", + "slot": [ + 7, + 2, + 8 + ], + "operation": "input", + "value": 1.0, + "downstream_weight": 1.0, + "parents": [] + } + ] + } + ] + }, + { + "case": "outer_coarse_q7", + "pulse": [ + "coarse", + 7, + 2, + 8 + ], + "hypothesis": "omit_solid_source_links", + "initial_leaf_weight": 1.0, + "coarse_leaf_weight": 1.0, + "fine_leaf_weight": 0.0, + "total_leaf_weight": 1.0, + "residual": 0.0, + "inspected_slot": [ + 8, + 3, + 8 + ], + "selected_writer": "coarse_BB", + "inspected_value": 0.0, + "final_nonzero_traces": [ + { + "phase": "Fc1", + "slot": [ + 8, + 2, + 8 + ], + "operation": "coarse_BB", + "value": 1.0, + "downstream_weight": 1.0, + "parents": [ + { + "phase": "Gc0", + "slot": [ + 7, + 2, + 8 + ], + "operation": "input", + "value": 1.0, + "downstream_weight": 1.0, + "parents": [] + } + ] + } + ] + }, + { + "case": "adjacent_coarse_q7", + "pulse": [ + "coarse", + 7, + 3, + 8 + ], + "hypothesis": "coarse_BB_then_coalesce", + "initial_leaf_weight": 1.0, + "coarse_leaf_weight": 0.5, + "fine_leaf_weight": 0.25, + "total_leaf_weight": 0.75, + "residual": -0.25, + "inspected_slot": [ + 8, + 3, + 8 + ], + "selected_writer": "coalescence", + "inspected_value": 0.5, + "final_nonzero_traces": [ + { + "phase": "Fc1", + "slot": [ + 8, + 3, + 8 + ], + "operation": "coalescence", + "value": 0.5, + "downstream_weight": 1.0, + "parents": [ + { + "phase": "F2", + "slot": [ + 8, + 3, + 12 + ], + "operation": "local_BB", + "value": 1.0, + "downstream_weight": 0.25, + "parents": [ + { + "phase": "F1", + "slot": [ + 7, + 3, + 12 + ], + "operation": "pull", + "value": 1.0, + "downstream_weight": 0.25, + "parents": [ + { + "phase": "Gf0", + "slot": [ + 7, + 2, + 13 + ], + "operation": "explode", + "value": 1.0, + "downstream_weight": 0.25, + "parents": [ + { + "phase": "Gc0", + "slot": [ + 7, + 3, + 8 + ], + "operation": "input", + "value": 1.0, + "downstream_weight": 0.25, + "parents": [] + } + ] + } + ] + } + ] + }, + { + "phase": "F2", + "slot": [ + 8, + 2, + 13 + ], + "operation": "pull", + "value": 1.0, + "downstream_weight": 0.25, + "parents": [ + { + "phase": "F1", + "slot": [ + 8, + 3, + 12 + ], + "operation": "local_BB", + "value": 1.0, + "downstream_weight": 0.25, + "parents": [ + { + "phase": "Gf0", + "slot": [ + 7, + 3, + 12 + ], + "operation": "explode", + "value": 1.0, + "downstream_weight": 0.25, + "parents": [ + { + "phase": "Gc0", + "slot": [ + 7, + 3, + 8 + ], + "operation": "input", + "value": 1.0, + "downstream_weight": 0.25, + "parents": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "case": "adjacent_coarse_q7", + "pulse": [ + "coarse", + 7, + 3, + 8 + ], + "hypothesis": "coalesce_then_coarse_BB", + "initial_leaf_weight": 1.0, + "coarse_leaf_weight": 1.0, + "fine_leaf_weight": 0.25, + "total_leaf_weight": 1.25, + "residual": 0.25, + "inspected_slot": [ + 8, + 3, + 8 + ], + "selected_writer": "coarse_BB", + "inspected_value": 1.0, + "final_nonzero_traces": [ + { + "phase": "Fc1", + "slot": [ + 8, + 3, + 8 + ], + "operation": "coarse_BB", + "value": 1.0, + "downstream_weight": 1.0, + "parents": [ + { + "phase": "Gc0", + "slot": [ + 7, + 3, + 8 + ], + "operation": "input", + "value": 1.0, + "downstream_weight": 1.0, + "parents": [] + } + ] + } + ] + }, + { + "case": "adjacent_coarse_q7", + "pulse": [ + "coarse", + 7, + 3, + 8 + ], + "hypothesis": "omit_solid_source_links", + "initial_leaf_weight": 1.0, + "coarse_leaf_weight": 1.0, + "fine_leaf_weight": 0.25, + "total_leaf_weight": 1.25, + "residual": 0.25, + "inspected_slot": [ + 8, + 3, + 8 + ], + "selected_writer": "coarse_BB", + "inspected_value": 1.0, + "final_nonzero_traces": [ + { + "phase": "Fc1", + "slot": [ + 8, + 3, + 8 + ], + "operation": "coarse_BB", + "value": 1.0, + "downstream_weight": 1.0, + "parents": [ + { + "phase": "Gc0", + "slot": [ + 7, + 3, + 8 + ], + "operation": "input", + "value": 1.0, + "downstream_weight": 1.0, + "parents": [] + } + ] + } + ] + }, + { + "case": "active_fine_q7", + "pulse": [ + "fine", + 7, + 4, + 12 + ], + "hypothesis": "coarse_BB_then_coalesce", + "initial_leaf_weight": 0.25, + "coarse_leaf_weight": 0.25, + "fine_leaf_weight": 0.0, + "total_leaf_weight": 0.25, + "residual": 0.0, + "inspected_slot": [ + 8, + 3, + 8 + ], + "selected_writer": "coalescence", + "inspected_value": 0.25, + "final_nonzero_traces": [ + { + "phase": "Fc1", + "slot": [ + 8, + 3, + 8 + ], + "operation": "coalescence", + "value": 0.25, + "downstream_weight": 1.0, + "parents": [ + { + "phase": "F2", + "slot": [ + 8, + 3, + 13 + ], + "operation": "pull", + "value": 1.0, + "downstream_weight": 0.25, + "parents": [ + { + "phase": "F1", + "slot": [ + 8, + 4, + 12 + ], + "operation": "local_BB", + "value": 1.0, + "downstream_weight": 0.25, + "parents": [ + { + "phase": "Gf0", + "slot": [ + 7, + 4, + 12 + ], + "operation": "input", + "value": 1.0, + "downstream_weight": 0.25, + "parents": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "case": "active_fine_q7", + "pulse": [ + "fine", + 7, + 4, + 12 + ], + "hypothesis": "coalesce_then_coarse_BB", + "initial_leaf_weight": 0.25, + "coarse_leaf_weight": 0.0, + "fine_leaf_weight": 0.0, + "total_leaf_weight": 0.0, + "residual": -0.25, + "inspected_slot": [ + 8, + 3, + 8 + ], + "selected_writer": "coarse_BB", + "inspected_value": 0.0, + "final_nonzero_traces": [] + }, + { + "case": "active_fine_q7", + "pulse": [ + "fine", + 7, + 4, + 12 + ], + "hypothesis": "omit_solid_source_links", + "initial_leaf_weight": 0.25, + "coarse_leaf_weight": 0.0, + "fine_leaf_weight": 0.0, + "total_leaf_weight": 0.0, + "residual": -0.25, + "inspected_slot": [ + 8, + 3, + 8 + ], + "selected_writer": "coarse_BB", + "inspected_value": 0.0, + "final_nonzero_traces": [] + } + ] +} diff --git a/research/wall_seam_pulse_20261014/run.json b/research/wall_seam_pulse_20261014/run.json new file mode 100644 index 0000000..53e303f --- /dev/null +++ b/research/wall_seam_pulse_20261014/run.json @@ -0,0 +1,16 @@ +{ + "command": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python research/wall_seam_pulse_20261014/analyze.py > research/wall_seam_pulse_20261014/stdout.txt 2>&1", + "cwd": "/home/frank14f/CelerisLab", + "exit_code": 0, + "tool_wall_seconds": 0.159727377, + "peak_rss_MiB": 23.0, + "address_space_limit_MiB": 256, + "executed_script_sha256": "bb4a8587e95835794ce08be3483d603afb8987a59f6c7cde39cf201395f6f541", + "current_script_sha256": "2b174826ffaee96c147bd247ef5e322cb51d55ce506f330bac021afd012560f7", + "post_run_change": "Only the fixed RLIMIT_AS=256MiB line was removed; numerical algorithm unchanged. No rerun. The recorded address-space limit and exit describe the original execution. stdout.txt and results.json remain unchanged; results.json retains the executed script hash. Future resource checks follow actual available RAM/VRAM, without a fixed address-space cap.", + "per_file_output_limit_MiB": 2, + "executions": 1, + "GPU_used": false, + "solver_steps": 0, + "analysis": "Three unit-basis population probes; two transport/BB hops per probe, followed by three alternative coarse incoming-ownership rules. No collision or physical flow evolution." +} diff --git a/research/wall_seam_pulse_20261014/sources.csv b/research/wall_seam_pulse_20261014/sources.csv new file mode 100644 index 0000000..40d3736 --- /dev/null +++ b/research/wall_seam_pulse_20261014/sources.csv @@ -0,0 +1,31 @@ +case,hypothesis,phase,q,x,y,operation,value,immediate_sources +outer_coarse_q7,shared,Gc0,7,2,8,input,1.0, +outer_coarse_q7,shared,Gf0,7,0,12,explode,1.0,"Gc0:(7, 2, 8)*1" +outer_coarse_q7,shared,Gf0,7,1,12,explode,1.0,"Gc0:(7, 2, 8)*1" +outer_coarse_q7,shared,Gf0,7,0,13,explode,1.0,"Gc0:(7, 2, 8)*1" +outer_coarse_q7,shared,Gf0,7,1,13,explode,1.0,"Gc0:(7, 2, 8)*1" +outer_coarse_q7,shared,F1,7,2,12,pull,1.0,"Gf0:(7, 1, 13)*1" +outer_coarse_q7,shared,F2,8,2,12,local_BB,1.0,"F1:(7, 2, 12)*1" +outer_coarse_q7,coarse_BB_then_coalesce,Fc1,8,2,8,coarse_BB,1.0,"Gc0:(7, 2, 8)*1" +outer_coarse_q7,coarse_BB_then_coalesce,Fc1,8,3,8,coalescence,0.25,"F2:(8, 2, 12)*0.25;F2:(8, 3, 12)*0.25;F2:(8, 2, 13)*0.25;F2:(8, 3, 13)*0.25" +outer_coarse_q7,coalesce_then_coarse_BB,Fc1,8,2,8,coarse_BB,1.0,"Gc0:(7, 2, 8)*1" +outer_coarse_q7,omit_solid_source_links,Fc1,8,2,8,coarse_BB,1.0,"Gc0:(7, 2, 8)*1" +adjacent_coarse_q7,shared,Gc0,7,3,8,input,1.0, +adjacent_coarse_q7,shared,Gf0,7,2,12,explode,1.0,"Gc0:(7, 3, 8)*1" +adjacent_coarse_q7,shared,Gf0,7,3,12,explode,1.0,"Gc0:(7, 3, 8)*1" +adjacent_coarse_q7,shared,Gf0,7,2,13,explode,1.0,"Gc0:(7, 3, 8)*1" +adjacent_coarse_q7,shared,Gf0,7,3,13,explode,1.0,"Gc0:(7, 3, 8)*1" +adjacent_coarse_q7,shared,F1,8,2,12,local_BB,1.0,"Gf0:(7, 2, 12)*1" +adjacent_coarse_q7,shared,F1,7,3,12,pull,1.0,"Gf0:(7, 2, 13)*1" +adjacent_coarse_q7,shared,F1,8,3,12,local_BB,1.0,"Gf0:(7, 3, 12)*1" +adjacent_coarse_q7,shared,F1,7,4,12,pull,1.0,"Gf0:(7, 3, 13)*1" +adjacent_coarse_q7,shared,F2,8,3,12,local_BB,1.0,"F1:(7, 3, 12)*1" +adjacent_coarse_q7,shared,F2,8,4,12,local_BB,1.0,"F1:(7, 4, 12)*1" +adjacent_coarse_q7,shared,F2,8,2,13,pull,1.0,"F1:(8, 3, 12)*1" +adjacent_coarse_q7,coarse_BB_then_coalesce,Fc1,8,3,8,coalescence,0.5,"F2:(8, 2, 12)*0.25;F2:(8, 3, 12)*0.25;F2:(8, 2, 13)*0.25;F2:(8, 3, 13)*0.25" +adjacent_coarse_q7,coalesce_then_coarse_BB,Fc1,8,3,8,coarse_BB,1.0,"Gc0:(7, 3, 8)*1" +adjacent_coarse_q7,omit_solid_source_links,Fc1,8,3,8,coarse_BB,1.0,"Gc0:(7, 3, 8)*1" +active_fine_q7,shared,Gf0,7,4,12,input,1.0, +active_fine_q7,shared,F1,8,4,12,local_BB,1.0,"Gf0:(7, 4, 12)*1" +active_fine_q7,shared,F2,8,3,13,pull,1.0,"F1:(8, 4, 12)*1" +active_fine_q7,coarse_BB_then_coalesce,Fc1,8,3,8,coalescence,0.25,"F2:(8, 2, 12)*0.25;F2:(8, 3, 12)*0.25;F2:(8, 2, 13)*0.25;F2:(8, 3, 13)*0.25" diff --git a/research/wall_seam_pulse_20261014/stdout.txt b/research/wall_seam_pulse_20261014/stdout.txt new file mode 100644 index 0000000..756d8c3 --- /dev/null +++ b/research/wall_seam_pulse_20261014/stdout.txt @@ -0,0 +1,11 @@ +outer_coarse_q7 coarse_BB_then_coalesce initial=1 coarse=1.25 fine=0 residual=+0.25; K(3,8),q8=0.25 (coalescence) +outer_coarse_q7 coalesce_then_coarse_BB initial=1 coarse=1 fine=0 residual=+0; K(3,8),q8=0 (coarse_BB) +outer_coarse_q7 omit_solid_source_links initial=1 coarse=1 fine=0 residual=+0; K(3,8),q8=0 (coarse_BB) +adjacent_coarse_q7 coarse_BB_then_coalesce initial=1 coarse=0.5 fine=0.25 residual=-0.25; K(3,8),q8=0.5 (coalescence) +adjacent_coarse_q7 coalesce_then_coarse_BB initial=1 coarse=1 fine=0.25 residual=+0.25; K(3,8),q8=1 (coarse_BB) +adjacent_coarse_q7 omit_solid_source_links initial=1 coarse=1 fine=0.25 residual=+0.25; K(3,8),q8=1 (coarse_BB) +active_fine_q7 coarse_BB_then_coalesce initial=0.25 coarse=0.25 fine=0 residual=+0; K(3,8),q8=0.25 (coalescence) +active_fine_q7 coalesce_then_coarse_BB initial=0.25 coarse=0 fine=0 residual=-0.25; K(3,8),q8=0 (coarse_BB) +active_fine_q7 omit_solid_source_links initial=0.25 coarse=0 fine=0 residual=-0.25; K(3,8),q8=0 (coarse_BB) +Prestream/postpull equivalence, valid coalescence reads, and unique destination writes: PASS +peak_rss_MiB=23.000 diff --git a/tests/validation/multigrid/cpuref_0_3_evidence/README.txt b/tests/validation/multigrid/cpuref_0_3_evidence/README.txt new file mode 100644 index 0000000..62897bf --- /dev/null +++ b/tests/validation/multigrid/cpuref_0_3_evidence/README.txt @@ -0,0 +1,64 @@ +CPUREF-0.3 local integration and review — 2026-10-13 + +Result: PASS. First local execution only; no retry or tolerance change. +15 core tests + 5 supplemental tests passed, plus 1 open-corner negative-control +method (identity/SRT, seeds 1/2, 1/8 coarse steps). The supplemental suite includes +the v0.2-to-v0.3 diagnostic-field delta check; this is not physical-field equality. + +Scope: fixed doubly periodic 16x16 coarse grid, one static 2:1 patch covering +[4,12)^2, 16x16 active fine cells with halo 4. Evidence concerns transport, +corner handling, validity, ownership, conservation and bookkeeping only. +It does not validate interface accuracy, viscosity/stress transfer, long-time +stability, production GPU equivalence, dynamic AMR or Jet integration. + +Static review completed before execution; no substantive objection within this +scope. Checked arrival_f phase, even integer tick and +2 advancement, collision +order, both fine hops, ghost validity/poisoning, eight uniquely keyed corner-pass +links, coalescence ownership and budget semantics. bookkeeping_check subtracts +interface_residual and is not independent conservation evidence. Core tests +provide a separate scalar transport/SRT oracle and active-leaf totals. Negative +control sums leaves outside the reference helpers, but uses reference masks and +collision budgets; do not describe every aspect as independent. + +Delivery: five Python files were moved from review staging into the parent +multigrid directory without changing bytes. cpu_reference_v0.2.py is retained +only as the supplemental diagnostic comparison fixture, loaded explicitly. +Seven delivered artifact SHA256 values match the supplied originals both before +and after execution. No reference algorithm, test assertion or tolerance edits. +Grok's original README and stdout remain unchanged alongside the local evidence. + +Local environment: /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python +Python 3.10.13; NumPy 1.26.4; Linux 6.8.0-138-generic x86_64, glibc 2.35. +Grok reported Python 3.13.5 / NumPy 2.5.3; both original and local outputs are kept. +Process-only environment: + OPENBLAS_NUM_THREADS=1 + PYTHONDONTWRITEBYTECODE=1 + PYTHONNOUSERSITE=1 + PYTHONPATH=/home/frank14f/CelerisLab/tests/validation/multigrid + CPU_REFERENCE_PATH=/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py +Working directory: /home/frank14f/CelerisLab/tests/validation/multigrid +Each script was executed sequentially by the following command, replacing SCRIPT +with test_cpu_reference.py, test_tron_additions.py, then +test_open_corner_negative_control.py (absolute paths in results_horsea.json): + /usr/bin/prlimit --as=268435456 --fsize=2097152 --core=0 -- /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -B SCRIPT +The stdlib-only parent runner had the same hard limits. stdout and stderr of all +three scripts went to one shared stdout_horsea.txt; any nonzero exit would have +stopped subsequent execution. Per-case step ceiling of 8 was verified statically; +no grid, seed or step expansion. Peak child RSS across the run: 37.5 MiB. +Combined local stdout/stderr plus command metadata: 9013 bytes (<2 MiB). + +Observed evidence: identity versus scalar oracle max difference 0; SRT max +2.776e-16. Eight-step SRT mass drift -1.535e-12 passes the unchanged delivered +mass-scaled 1e-14 tolerance (approximately 2.56e-12 absolute). Open-corner SRT +maximum drift reaches 2.078e-3; closed negative-control drift stays <=5.684e-14. +The eight-step mass tolerance is not an absolute 1e-14 bound. + +Increment: only new files under tests/validation/multigrid. No src, old test, +MULTIGRID_VERIFICATION_STRATEGY.md, DynamisLab, dependency, environment or Git +commit/push changes. No CelerisLab/Simulation/pycuda imports or GPU/solver runs. +The original 269-file hash baseline and Git status are in baseline.json; final +verification and new-file sizes/line counts/SHA256 are in manifest.json. Ordinary +git diff omits these untracked additions; the manifest describes this increment. +No generated bytecode or duplicate candidate copies were retained. + +Stopped after this authorized test-only integration for joint review. diff --git a/tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md b/tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md new file mode 100644 index 0000000..2d36e05 --- /dev/null +++ b/tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md @@ -0,0 +1,18 @@ +# Grok independent tests for CPUREF-0.3 (2026-10-13) + +Runner: Grok's isolated sandbox (not aws-la, not Horsea). Python 3.13.5, NumPy 2.5.3, Linux x86_64. No installs, no Horsea/remote writes. +Command: `OPENBLAS_NUM_THREADS=1 prlimit --as=268435456 python test_cpu_reference.py` then `test_tron_additions.py` and `test_open_corner_negative_control.py` (reference copied unchanged to `cpu_reference.py`; `CPU_REFERENCE_PATH` accepted). +Budget: <=8 coarse steps per case, address space capped at 256 MiB, peak RSS ~43 MiB, stdout <2 MiB. + +SHA256 +- cpu_reference_v0.3.py (Drive 1G_a5i4ywwAgz20Binl9jI_d_SyXvfCJK): bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e +- test_cpu_reference.py: ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca +- test_tron_additions.py: 8e7a6a90b85e64c7326719e7b8bca2f6d34fb4c80690f0685f7e291ab93bd2a4 +- test_open_corner_negative_control.py: 59a6f8ca80cdd63cb7827fbebf9b4b555c3793f19dd6bca801544ec10b5cbe1b +- stdout_final.txt (20 unittest OK): 73e4ef01138842981daaa534390f1463839e63833c11f4e8872f94f8eaadc717 +- stdout_open_corner.txt: 927f8233957fe08f671cf3716e810431c40331caa4cf406da2b09793337c7ee8 +- contract still ee8010e763d38937b95c34dadaf97415cdb8b6c23e3c79a9f1f32bd5d4e112f6 + +Result: 20/20 pass (15 core adapted from v0.2 suite + 5 additions: NaN masks, 8 unique corner keys/packets, coalesce_paths reconstructed test-side, hop2_valid, v0.2↔v0.3 field delta) plus open-corner negative control OK. Reference unchanged. + +Adaptations vs v0.2 tests: drop explosion_count; fine_valid_after→hop2_valid; closure_error→bookkeeping_check; corner_packets keyed lower_left_q8 etc. (8 unique); coalesce_paths rebuilt in tests; invalid tick (odd/float/bool/str) rejected; even tick advances by 2. diff --git a/tests/validation/multigrid/cpuref_0_3_evidence/baseline.json b/tests/validation/multigrid/cpuref_0_3_evidence/baseline.json new file mode 100644 index 0000000..1884910 --- /dev/null +++ b/tests/validation/multigrid/cpuref_0_3_evidence/baseline.json @@ -0,0 +1,278 @@ +{ + "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/README.md\n?? docs/design/integrated_architecture.md\n?? docs/design/multi_level_grid_architecture.md\n?? docs/design/multi_level_summary.md\n?? docs/design/multi_level_visual_reference.md\n?? docs/design/spatial_coupling_refinement.md\n?? docs/multilevel_grid_architecture_analysis.md\n?? research/audit-2026-10-09/REVIEW.zh-CN.md\n?? research/audit-2026-10-09/architecture-cpu-results.json\n?? research/audit-2026-10-09/architecture-report.md\n?? research/audit-2026-10-09/numerical-report.md\n?? research/audit-2026-10-09/numerical_collision_results.json\n?? research/audit-2026-10-09/numerical_compile_results.json\n?? research/audit-2026-10-09/numerical_semantics_results.json\n?? research/audit-2026-10-09/root-initializers-report.md\n?? research/audit-2026-10-09/state-report.md\n?? research/audit-2026-10-09/state_results.json\n?? research/design-2026-10-09/Contracts.lean\n?? research/design-2026-10-09/PLAN.zh-CN.md\n?? research/design-2026-10-09/api-architecture-study.md\n?? research/design-2026-10-09/grid-study.md\n?? research/design-2026-10-09/jet-study.md\n?? research/design-2026-10-09/jet_closure_check.py\n?? research/design-2026-10-09/jet_closure_results.json\n?? research/design-2026-10-09/math-and-history.md\n?? research/design-2026-10-09/math-checks.json\n?? research/design-2026-10-09/math_checks.py\n?? research/j1-2026-10-12/REVIEW.md\n?? research/j1-2026-10-12/baseline-status.txt\n?? research/j1-2026-10-12/baseline.json\n?? research/j1-2026-10-12/incremental.diff\n?? research/j1-2026-10-12/results.json\n?? research/j2-slot-2026-10-12/REVIEW.md\n?? research/j2-slot-2026-10-12/baseline-status.txt\n?? research/j2-slot-2026-10-12/baseline.json\n?? research/j2-slot-2026-10-12/incremental.diff\n?? research/j2-slot-2026-10-12/results.json\n?? research/j3-coverage-2026-10-12/REVIEW.md\n?? research/j3-coverage-2026-10-12/baseline-status.txt\n?? research/j3-coverage-2026-10-12/baseline.json\n?? research/j3-coverage-2026-10-12/incremental.diff\n?? research/j3-coverage-2026-10-12/negative-budget-20744.h5\n?? research/j3-coverage-2026-10-12/negative-end-20760.h5\n?? research/j3-coverage-2026-10-12/restart-21280.h5\n?? research/j3-coverage-2026-10-12/restart-reference-21296.h5\n?? research/j3-coverage-2026-10-12/results.json\n?? research/j3-coverage-2026-10-12/verification.json\n?? research/j3-lag-2026-10-12/REVIEW.md\n?? research/j3-lag-2026-10-12/baseline-status.txt\n?? research/j3-lag-2026-10-12/baseline.json\n?? research/j3-lag-2026-10-12/end-21280.h5\n?? research/j3-lag-2026-10-12/incremental.diff\n?? research/j3-lag-2026-10-12/results.json\n?? research/j3-lag-2026-10-12/start-20760.h5\n?? research/j3-lag-2026-10-12/trajectory.h5\n?? research/j3-offline-2026-10-12/REVIEW.md\n?? research/j3-offline-2026-10-12/lags.csv\n?? research/j3-offline-2026-10-12/localization.png\n?? research/j3-offline-2026-10-12/regions.csv\n?? research/j3-offline-2026-10-12/results.json\n?? research/j3-reservoir-2026-10-12/REVIEW.md\n?? research/j3-reservoir-2026-10-12/baseline-status.txt\n?? research/j3-reservoir-2026-10-12/baseline.json\n?? research/j3-reservoir-2026-10-12/incremental.diff\n?? research/j3-reservoir-2026-10-12/results.json\n?? research/repair-2026-10-10/TRON_HANDOFF.md\n?? research/repair-2026-10-10/baseline-hashes.json\n?? research/repair-2026-10-10/baseline-status.txt\n?? research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff\n?? research/repair-2026-10-10/classic-results.json\n?? research/repair-2026-10-10/classic-signals.npz\n?? research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h\n?? research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h\n?? research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h\n?? research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h\n?? research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb\n?? research/repair-2026-10-10/provenance.json\n?? research/repair-2026-10-10/repair-architecture.md\n?? research/repair-2026-10-10/repair-numerical.md\n?? research/repair-2026-10-10/repair-state.md\n?? src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh\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/collision_regression.cpp\n?? tests/unit/cpp/planar_velocity.cpp\n?? tests/unit/cpp/reservoir.cpp\n?? tests/unit/cpp/semantic_regression.cpp\n?? tests/unit/cpp/slot_profile.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_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/MULTIGRID_VERIFICATION_STRATEGY.md\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", + "hashes": { + ".cursor/rules/cuda-style.mdc": "5810cf8cff793a11ba5dedafaa8a4e7d7d3debb728d837ca1903ff6dc8d6fdb9", + ".cursor/rules/project-layout.mdc": "aeed1cd9d48447bcfcfb6a77250af7c5a3d500de4c6b2591c5684696fa04c3ec", + ".cursor/rules/python-style.mdc": "ece75cb724d7dc46cb8dab7ecf8d710a90b503001da0d506ea4bf772ce395e21", + ".cursorignore": "9f072faa815a6c6d4dc791a424201404f0f623338681ae3d2fcbdf86db1bd035", + ".gitignore": "de25151f4cfdf29ca64032e509398e1829c7ded2449ccff803b2fd87d859ae6c", + "LICENSE": "e98392425e9a0007d0d69f0f7c912c2dc1b59061a6197223962aac45599c76ea", + "README.md": "982d0df8b766b1d5017ba702b75e8b3cec8d22f57af8f434be27ea251652596c", + "docs/audit/audit_round2.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "docs/audit/body_refactor_notes.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "docs/audit/config_diagnosis.md": "b601652df0cac36a8faf2b317b11853221353716a25184cd9b2dc41373a7f183", + "docs/audit/kernel_layer_audit.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "docs/design/README.md": "98242c6960866d9b75aaf363f703edf02c4210bc38da1a340e9f6add49c6a3ce", + "docs/design/integrated_architecture.md": "c26b0d301321fe4b86d83d11c7e0b8d0c0545ee2995afa563966f004e9788132", + "docs/design/multi_level_grid_architecture.md": "e56a67d9129f2e3c311342e21a3fb2ed14bd492dd881949b251d5d9ac577bdee", + "docs/design/multi_level_summary.md": "eebf23e0bec9b154e5ce2128e2806e7558a7d4824b2c700cfd16afd1158b2354", + "docs/design/multi_level_visual_reference.md": "cad4bfbd561e5650ec297334529334b662a1ed35f7373c61f34ee22ecf1f66bd", + "docs/design/spatial_coupling_refinement.md": "36c878c7afad524999d89fa842297a98a0433e0283e78b36ca734ddbf8723ed8", + "docs/multilevel_grid_architecture_analysis.md": "90309730b1759d63531cb258c30db990ab71ca1b56ae47d0bbe2f4e2ae52012c", + "docs/performance_analysis.md": "ba01aaa4d3c02b61a8dc55fd00518ac291ebbed79b6574190d6b7234a1158fcb", + "docs/tests_overview.md": "ffc9591fd7baa4261b2c1ce9cfa7aa13a3554a8d5df712035806266a5eaade3f", + "docs/validation_specs/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "docs/validation_specs/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "docs/validation_specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "docs/validation_specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "docs/validation_specs/exp_ctrl_matrix.md": "b7250576c23292988b6ef4bcfd080f611d41edc413c3cebd0eadcc8596049470", + "docs/validation_specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "output/round3_compatibility_summary.md": "319f2e6abde4b34cc4ec90ef461d8ebb85dd5a3ac1736cfa7a3fb110f2a69df9", + "pyproject.toml": "f24ab9ad3a6a728a9382b1bce2e721612fc76635f35c6f96dfddaa853b6e5a9c", + "research/audit-2026-10-09/REVIEW.zh-CN.md": "2841fd3aa7a6baedbe1079d90915c8b05212b133824ed6abccaa1f09656eaefe", + "research/audit-2026-10-09/architecture-cpu-results.json": "e1b809210005c8765b13fddbb5ed710d15f6fcbb4c5788a4064f3e88808433ef", + "research/audit-2026-10-09/architecture-report.md": "861079dc3f4ced9fdc41bfb22002d32e190c0d630d3ba2f138f9dc7a949b8371", + "research/audit-2026-10-09/numerical-report.md": "970330b3a593f79f09866ce6ae82bc0ddd81226230d0a6ff06ae8ae756ee80da", + "research/audit-2026-10-09/numerical_collision_results.json": "51e5c263bb8cde82cedef2ccfdbf5ef657742a80218d7896b1ff877516e59693", + "research/audit-2026-10-09/numerical_compile_results.json": "c3b0ae02072a2ec408ada7513b542ec255f6855cb743a3ed7f91bd8f31504f44", + "research/audit-2026-10-09/numerical_semantics_results.json": "b95b065b594aa2911740dab216f87936c9bf7f7fa25acfda93b5738443564035", + "research/audit-2026-10-09/root-initializers-report.md": "ca448457c444949d5d0e1e10fa7121064510b77fc4c3512580900f0299219867", + "research/audit-2026-10-09/state-report.md": "f8708807efc2e109810c5955f7c1884a932668c0b3cb2963c2df3b09f2a3d5c4", + "research/audit-2026-10-09/state_results.json": "da9170df3e11231c73f20e5e79ed68e08966673d1dd52004ea6b6a279afc0dcd", + "research/design-2026-10-09/Contracts.lean": "2442d9a778ef20e8af3fecf23be6fea6d73c6299ff744c9664b652bc5ee3f034", + "research/design-2026-10-09/PLAN.zh-CN.md": "0341dd7ee306a040340c8e5dedb07a109e931c27dbf3c994d072aa78e3b6bc67", + "research/design-2026-10-09/api-architecture-study.md": "d6fb45ec784f0e1db55fb9f34e137b9f551db0b9b39fd4f0ef247a78fc34eedf", + "research/design-2026-10-09/grid-study.md": "4435dc1275ec5e15b118becc6ac391f306195d1e5beaa58037b1aff3bb2465c7", + "research/design-2026-10-09/jet-study.md": "a362142ef04a5ad5dbb4c9db9d221b1199dccec53780c8f2da49a15201cfe529", + "research/design-2026-10-09/jet_closure_check.py": "fde45d0f8518740ef5c0bf0fe7635d6adaf9a2e789927dd4e68e991c138ddc30", + "research/design-2026-10-09/jet_closure_results.json": "12cf7d400a206f9f9ec9ea6ad251fe6bb0232e27bcbed22fbc1ead2c0fc7d249", + "research/design-2026-10-09/math-and-history.md": "64f8c82e4949d6f58b46faa09800958714859c36cad20bbeeae8b449ae7a6099", + "research/design-2026-10-09/math-checks.json": "94750381954317cde8d649db26beaed8ea945666572a05030ca2b4d97d384011", + "research/design-2026-10-09/math_checks.py": "4254983a783fe4bad8888b3d7c243c87d991c7bbf242edb0f56f25cbaefee890", + "research/j1-2026-10-12/REVIEW.md": "13004a4f140acdcf59acb57e9e2dda1bb95763d30060f822a7c206c94b813a9f", + "research/j1-2026-10-12/baseline-status.txt": "ac398360e05b746b89ae0c3acfe202b5122e650a3bb1ff234ab26f874a303e64", + "research/j1-2026-10-12/baseline.json": "ad7afdf7b3913d11c07343e971fe2f43c2d1a2b99e3d5904a6ba89e3bb0b24fb", + "research/j1-2026-10-12/checkpoint-gpu.log": "adfe3d77d2e6c6f6184dccc0267b4404b20a7709505d5ff5affed0ed4a618083", + "research/j1-2026-10-12/cpu.log": "60cac097f7c4f11401df2aacb43a248640555e7628d2829c4680c71db34e9640", + "research/j1-2026-10-12/gpu-validation.log": "d1e9f2aea17a85eddcd94b81c700738ce073214857b55c28abd1219ff1edbed7", + "research/j1-2026-10-12/gpu.log": "8659a78ea52bbf8eb923d46ea71636ce63cd322352d5c98a74f631e666dd8cfb", + "research/j1-2026-10-12/incremental.diff": "a454c23da7b0011645949c0fbf64d0c41ecfdab5642b1b7c5119868005d3c721", + "research/j1-2026-10-12/results.json": "449f8a17dacac0fc6d2489c4b10bac330dbbbdb38fad3ce54f739ac8c6d48e85", + "research/j2-slot-2026-10-12/REVIEW.md": "10c4a94ffc32e0a2c4e0f6593b7cfc28479b5869f279f0b9d0b708fa3a47d1e6", + "research/j2-slot-2026-10-12/baseline-status.txt": "812616e2d941efcf854e1b37d6e662dda1aaf2b69074fcc04017133e13b72166", + "research/j2-slot-2026-10-12/baseline.json": "e82a1844145fd0cbc585c581b29f80b56193f122cfe1dfa7578f26904a720285", + "research/j2-slot-2026-10-12/cli.log": "9482ad7101d501f27f92e204b2f3ae5c6d91bd887b525aa31cb4a2a188f3cb92", + "research/j2-slot-2026-10-12/cpu.log": "91aba5961006909fbbb860429a9d3cfc930112a0d74c7788bc51c0a5897b47e5", + "research/j2-slot-2026-10-12/gpu-serialization-failure.log": "df804e53b35e7ddaad79a17842b4b5fd9d834e29ca2d56edb00e835848d09200", + "research/j2-slot-2026-10-12/gpu-validation.log": "223351b52c70fa4523289f3a1b3db435a11286379253280470900ffe397580a6", + "research/j2-slot-2026-10-12/incremental.diff": "c9e391bc91438cd912c1ed5a419705d4388522f672c67a066cfc055e814e699f", + "research/j2-slot-2026-10-12/results.json": "7d35ca7989aed5380e0a45de7f583972566fc516a051da63c53b35514e267494", + "research/j3-coverage-2026-10-12/REVIEW.md": "7293f3f3442855c8521698605aab504e026915a7bf1e77f5a24710d89a812443", + "research/j3-coverage-2026-10-12/baseline-status.txt": "31c949b11b20d7cd4202dba16882b5712aa1653da0cb2da2f0ebd69bf488040e", + "research/j3-coverage-2026-10-12/baseline.json": "d8844104f2665a25bfc417ee29becf89ab3955fac9105b5ddb12cfb1fe2a55b0", + "research/j3-coverage-2026-10-12/gpu-validation.log": "505cd5a5db46d7984aefb2a614151c25c4ace0e7d2a52e02c3e4f9792fd8eb95", + "research/j3-coverage-2026-10-12/incremental.diff": "98aa7855d5d6b91b4509a924c8a5aabab4339ba29c7e7dc2d91262c48e3848ca", + "research/j3-coverage-2026-10-12/negative-budget-20744.h5": "c09d75fc4a2cff68039a0956bd9d32b79b9cd3a6b386c72b4db54c214b110cd8", + "research/j3-coverage-2026-10-12/negative-end-20760.h5": "bd0bd063579d625e358762b1fdde5ac11bfcf739646a847fb77a4a2031011b9b", + "research/j3-coverage-2026-10-12/restart-21280.h5": "3e89c12c16f91f76ca9acd909e0fa7d42df6fbb5e870b299aa08ca42bc3e3dc9", + "research/j3-coverage-2026-10-12/restart-reference-21296.h5": "7192f510dd7820675aa1de130f55514136fba782cf77f92545189918a7e0c328", + "research/j3-coverage-2026-10-12/results.json": "02460981ad49c9cc13b4246abad1d8afd2599c61bfb545a6e32da9bbcd5c0db1", + "research/j3-coverage-2026-10-12/verification.json": "205986efd2b41635721b7fd20288be982348c765180102c7102750ba088f3a28", + "research/j3-lag-2026-10-12/REVIEW.md": "f388b64b0cc0413dc9865afda90ed24de666dda0d6cdb821b4363ce1b73631b3", + "research/j3-lag-2026-10-12/baseline-status.txt": "e0b69879084f54afac1a3bc3701f1de9819068190c815ae84421f02f83cad9f7", + "research/j3-lag-2026-10-12/baseline.json": "5e9a920813fe3d775110af85af92970d5245a7040ace804445e432353b77e489", + "research/j3-lag-2026-10-12/end-21280.h5": "19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588", + "research/j3-lag-2026-10-12/gpu-availability.log": "b227a519b8286849cfdf842573bd451803da048c6b27af9517f6b8964cd3aa39", + "research/j3-lag-2026-10-12/gpu-diagnostic.log": "97956b517072b7c34e2e29e2a23f87eafb19b9eda786a4b8149e4a2eaed76ee9", + "research/j3-lag-2026-10-12/host-check.log": "b2b6d262934b3abf9e0f0bdbde14b339cb977f7bffe391c17b51b5d067862dda", + "research/j3-lag-2026-10-12/incremental.diff": "ebdf66c72daf17b926482f79a1a30bf0eb2d27fc930a7bb62e5449ebcf72fcc7", + "research/j3-lag-2026-10-12/results.json": "00435ac7e402943e55e702fac1beb5af8cafe71967999658bcde2b29077b1fa8", + "research/j3-lag-2026-10-12/start-20760.h5": "6c4cba5928c77566c2afc32231311a3986831c18fea766faadebb101243399e2", + "research/j3-lag-2026-10-12/trajectory.h5": "2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986", + "research/j3-offline-2026-10-12/REVIEW.md": "d9902c58498e73c29e054b23adb968f7e1e14421cba5c58d03bbc5a50159ae79", + "research/j3-offline-2026-10-12/cpu-analysis.log": "bc02a9b197fc15ae1b503ca54655a7622d4361f9b45b7848ff9c387ea3665f11", + "research/j3-offline-2026-10-12/lags.csv": "fbd9addd413f24c47f4411317e872265bb774e8e1724fe169412befa860ae94d", + "research/j3-offline-2026-10-12/localization.png": "a72907638e32b0ecfc2205bea438e7b408f40aad86217ce6ad9b4877840c9cfc", + "research/j3-offline-2026-10-12/regions.csv": "3a8fc640b61d70e3b7f73d2bf8ac2bd3f720adf39a90dfda6180430e0489efae", + "research/j3-offline-2026-10-12/results.json": "cdb857bea6f4e06ed15acf773505ce6d5147f8cb8ce0a53cc368ee267cde6361", + "research/j3-reservoir-2026-10-12/REVIEW.md": "1ea5f860728584ea6cbe40ba3994e40471102d8e2cf6d93e28fe47222cba0cab", + "research/j3-reservoir-2026-10-12/baseline-status.txt": "0ef1a8c9878c4053ebc1a7d4bace6d4ec38bf27ace167b4239ddbb1c6c897e20", + "research/j3-reservoir-2026-10-12/baseline.json": "847fefd1eae971985d34d04d89ee6d6f1c91f6940c54fe351d112faba7bc6838", + "research/j3-reservoir-2026-10-12/cpu.log": "b33f6c1a1b0ee67968c4cff85d491e46e30e0d6c796b552629714ab8b5dcead0", + "research/j3-reservoir-2026-10-12/gpu-availability-sandbox.log": "1d58470512e583a0acfabf6896ee5f31e5b493b8231aed54b864f64eb275b02c", + "research/j3-reservoir-2026-10-12/gpu-validation.log": "ff04024db197e332f37c912a96413e3251fd0186947348ffbc33af6f4a899f2c", + "research/j3-reservoir-2026-10-12/incremental.diff": "fae312831d71e46dd477a640b06ed927853a9e735d26bf9f5868927fa31cfa56", + "research/j3-reservoir-2026-10-12/results.json": "49685de7679a14860258abf1753aaa6d116ad709b868d907ddb40e74c9b845ea", + "research/repair-2026-10-10/TRON_HANDOFF.md": "f8aaa3d99cd133c2055d4adf396a0a57d14f6006aea19e87611bd1c2c1b53a88", + "research/repair-2026-10-10/baseline-hashes.json": "d6a7d5f9ec5bceb0e7927d55603d9c5e70105982cd945723454659b19ab476e6", + "research/repair-2026-10-10/baseline-status.txt": "074088d793014e3b8154c58718058c7d300fb45595f5129fa957ef1e4cec38e2", + "research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff": "292b4bafe7a62d4fbbf7c165eb99929336edfcaa16b15f34f72ab71fcd928391", + "research/repair-2026-10-10/classic-results.json": "a5d15305f516fd378b54cf9029102be58a83a55a7bad4b8e058fcfe0cc9898f4", + "research/repair-2026-10-10/classic-signals.npz": "820c9a0b0713d7455f0a5839ac2cd5ee706086d1a26461225dcdb095673421e2", + "research/repair-2026-10-10/final-gpu.log": "988bb97256d17b88c14f3793b15880d727ecb285abe62e7d2ae27a16729651c3", + "research/repair-2026-10-10/final-unit.log": "a892a39ecf88125558538cadce2cb5dc46d106b993b164e03da4ebb0eee68cef", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "research/repair-2026-10-10/provenance.json": "a81b7e32ecf7182c9617df1b39bbb063a05ef89290ad501bac4573cd5e8a6832", + "research/repair-2026-10-10/repair-architecture.md": "49be42ff5c994017f3175e17efda14d84f0b68f8ecd239f66ccee38415b60c5a", + "research/repair-2026-10-10/repair-numerical.md": "0272ebfa8c519aad161c520542cf53156574661609b91fd5ccad7955fdf2bd7b", + "research/repair-2026-10-10/repair-state.md": "4d4aa1ec0c11a87d2c8380912e7ed74cf5c910ae42e5cc529effde36c9020969", + "research/repair-2026-10-10/simplification-checks.log": "c9f15e870d02003480adf1a7f2fe4a9aca66c1934c4477619f05c8a4798ba85b", + "setup.py": "bf07df7ec19de56710d2bb5f61873e09710cd059d46837dc3aa54f3e09ff9e06", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/checkpoint.py": "5b7caf3896167a3f37c539b58837de6eb3f8085fa7bf5f821a09666cc16d43a4", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/config.py": "2f1bba7515f5bc08cb3a8d140bcafe7fa0689e01b3b06494697bb2956a71530e", + "src/CelerisLab/configs/CONFIG.md": "41cafdbe525366c08aa9d0416ea026ccf0026ba7123b8a9b65f968a80d928e3a", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/cuda/compiler_v2.py": "c4cc3ec4445c8d75e6a253dd87963877117a722bc73b9d4811806fc6045d08c1", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "f9f8242b38e8e0cf8425b75e2b0215bc15363c62eaa0fb43c761b8e0931bfdc9", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/simulation.py": "34d69e71844f553790c5a2bed0f8fbfb912a9498e95b500d1ef2ad41cae3b424", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/unit/cpp/reservoir.cpp": "c3eacaf0271400eb45ad559b571a8f7faa2a809d5f1857ffeb5592addce2cd0c", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/cpp/slot_profile.cpp": "31ac58ccab175bf79fa59fc46d4c0842df18ab0a5e5916be84760d9da2b75788", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_planar_velocity.py": "b656da0880b4234b1db805544edbe0d2473cbcc7c2c869c71d8251337f62a982", + "tests/unit/test_reservoir.py": "e718c78a53c3941aba7feb8ae4e8bb0b1726c1145de84febf91220c1917991c9", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_slot_velocity.py": "6a9494de9a32c350389ccbed58af48951f6b25a21a258537d2e8b73eb67cb11d", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/validation/analyze_j3_saved_frames.py": "438f67dac682b94c4950626f8de4fdcde48c3a4e9ecf8fdf1b0ada4b6e0e781a", + "tests/validation/diagnose_j3_lags.py": "286fcd65b3261667a847b9b26e213d0af92cf459faa6bbd774f78c8479ce31d7", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/run_j1.py": "51b758a271ff358f931b3140a80082294a67e66c2fec0f8c19319e37f92aadc4", + "tests/validation/run_j2_slot.py": "b7d2d3aa06fcafc3ac62ed4a50892afbdb7f86e5720ce75a39ce317b6f571dad", + "tests/validation/run_j3_coverage.py": "329869519b7078e854d96241a7aad8ef93f35ac9be83f0be502c3a93523c3b13", + "tests/validation/run_j3_reservoir.py": "47535bc3569ce68c888d38978bc4f9077fd763a17829c20c081be52bb18a2903", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9" + }, + "multigrid_before": [ + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md" + ] +} diff --git a/tests/validation/multigrid/cpuref_0_3_evidence/manifest.json b/tests/validation/multigrid/cpuref_0_3_evidence/manifest.json new file mode 100644 index 0000000..10c19f5 --- /dev/null +++ b/tests/validation/multigrid/cpuref_0_3_evidence/manifest.json @@ -0,0 +1,96 @@ +{ + "old_files_checked": 269, + "old_files_changed": [], + "git_status_removed_entries": [], + "git_status_new_entries_before_manifest": [ + "?? tests/validation/multigrid/cpu_reference.py", + "?? tests/validation/multigrid/cpu_reference_v0.2.py", + "?? tests/validation/multigrid/cpuref_0_3_evidence/README.txt", + "?? tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md", + "?? tests/validation/multigrid/cpuref_0_3_evidence/baseline.json", + "?? tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json", + "?? tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt", + "?? tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt", + "?? tests/validation/multigrid/test_cpu_reference.py", + "?? tests/validation/multigrid/test_open_corner_negative_control.py", + "?? tests/validation/multigrid/test_tron_additions.py" + ], + "seven_original_hashes_match": true, + "substantive_objections": [], + "delivered_byte_deviations": [], + "tests": { + "core": 15, + "supplement": 5, + "negative_control": 1, + "all_passed": true, + "attempts_per_script": 1 + }, + "new_files_except_this_manifest": [ + { + "path": "tests/validation/multigrid/cpu_reference.py", + "bytes": 21501, + "lines": 475, + "sha256": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e" + }, + { + "path": "tests/validation/multigrid/cpu_reference_v0.2.py", + "bytes": 20196, + "lines": 441, + "sha256": "b6adbad7da625ef6a6b97958ea9625030ed92676d0cada48e061c87bcf7ca8c9" + }, + { + "path": "tests/validation/multigrid/cpuref_0_3_evidence/README.txt", + "bytes": 4133, + "lines": 64, + "sha256": "1947ee0232b88b3cc2c506d0b0af5ba051ecc94aa8f7f09228ef3939cc95919b" + }, + { + "path": "tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md", + "bytes": 1751, + "lines": 18, + "sha256": "065947e15b2242bce7d3eb05a3acdbb59939c621dcd5d31540ad4a1bd4416818" + }, + { + "path": "tests/validation/multigrid/cpuref_0_3_evidence/baseline.json", + "bytes": 39291, + "lines": 278, + "sha256": "0daaccee41cabeb17a00e2405e2c7fd0b80d36f2d01778eb39c9fd22b13d2d47" + }, + { + "path": "tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json", + "bytes": 2281, + "lines": 79, + "sha256": "914389afc39752bcd4132aa21fc8d5cbcf0ca75b1efd6a49becab15c2fa3361b" + }, + { + "path": "tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt", + "bytes": 7143, + "lines": 84, + "sha256": "73e4ef01138842981daaa534390f1463839e63833c11f4e8872f94f8eaadc717" + }, + { + "path": "tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt", + "bytes": 9013, + "lines": 130, + "sha256": "457f1d2173496554c87ca6e61df518c0b8f1e0a28cdfd94b94ebbb61bc459d70" + }, + { + "path": "tests/validation/multigrid/test_cpu_reference.py", + "bytes": 21144, + "lines": 481, + "sha256": "ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca" + }, + { + "path": "tests/validation/multigrid/test_open_corner_negative_control.py", + "bytes": 3779, + "lines": 68, + "sha256": "59a6f8ca80cdd63cb7827fbebf9b4b555c3793f19dd6bca801544ec10b5cbe1b" + }, + { + "path": "tests/validation/multigrid/test_tron_additions.py", + "bytes": 11340, + "lines": 229, + "sha256": "8e7a6a90b85e64c7326719e7b8bca2f6d34fb4c80690f0685f7e291ab93bd2a4" + } + ] +} diff --git a/tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json b/tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json new file mode 100644 index 0000000..3b16338 --- /dev/null +++ b/tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json @@ -0,0 +1,79 @@ +{ + "started_utc": "2026-10-13T03:42:59.253863+00:00", + "cwd": "/home/frank14f/CelerisLab/tests/validation/multigrid", + "python_executable": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "environment": { + "OPENBLAS_NUM_THREADS": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONNOUSERSITE": "1", + "PYTHONPATH": "/home/frank14f/CelerisLab/tests/validation/multigrid", + "CPU_REFERENCE_PATH": "/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py" + }, + "limits": { + "address_space_bytes": [ + 268435456, + 268435456 + ], + "output_file_bytes": [ + 2097152, + 2097152 + ], + "core_bytes": [ + 0, + 0 + ], + "max_coarse_steps_per_case": 8 + }, + "runs": [ + { + "test_script": "test_cpu_reference.py", + "command": [ + "/usr/bin/prlimit", + "--as=268435456", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "/home/frank14f/CelerisLab/tests/validation/multigrid/test_cpu_reference.py" + ], + "returncode": 0, + "elapsed_seconds": 1.4467838869895786, + "cumulative_child_peak_rss_MiB": 37.5 + }, + { + "test_script": "test_tron_additions.py", + "command": [ + "/usr/bin/prlimit", + "--as=268435456", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "/home/frank14f/CelerisLab/tests/validation/multigrid/test_tron_additions.py" + ], + "returncode": 0, + "elapsed_seconds": 0.677576785965357, + "cumulative_child_peak_rss_MiB": 37.5 + }, + { + "test_script": "test_open_corner_negative_control.py", + "command": [ + "/usr/bin/prlimit", + "--as=268435456", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "/home/frank14f/CelerisLab/tests/validation/multigrid/test_open_corner_negative_control.py" + ], + "returncode": 0, + "elapsed_seconds": 0.8977452759863809, + "cumulative_child_peak_rss_MiB": 37.5 + } + ], + "stdout_bytes": 9013, + "completed_utc": "2026-10-13T03:43:02.276695+00:00" +} diff --git a/tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt b/tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt new file mode 100644 index 0000000..5a0c270 --- /dev/null +++ b/tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt @@ -0,0 +1,84 @@ +=== CPUREF-0.3 Grok independent suite (15 core + 5 adapted additions) === +test_corner_pass_links_identity_marker (test_cpu_reference.TestFourCorners.test_corner_pass_links_identity_marker) +Identity: a marker in the source's post-collision slot q must arrive exactly at K. ... ok +test_four_corner_symmetry_srt (test_cpu_reference.TestFourCorners.test_four_corner_symmetry_srt) +Mirror the lower-left SRT corner case to the other three corners; values must match. ... ok +test_leaf_mass_momentum_8_steps (test_cpu_reference.TestIdentityTransportConservation.test_leaf_mass_momentum_8_steps) ... ok +test_matches_independent_implementation (test_cpu_reference.TestIdentityTransportConservation.test_matches_independent_implementation) ... ok +test_coalescence_slots_reads_owner (test_cpu_reference.TestOwnershipPoison.test_coalescence_slots_reads_owner) ... ok +test_collision_and_explosion_counts (test_cpu_reference.TestOwnershipPoison.test_collision_and_explosion_counts) ... ok +test_hop_sources_never_outer (test_cpu_reference.TestOwnershipPoison.test_hop_sources_never_outer) ... ok +test_inputs_not_mutated_and_maps_readonly (test_cpu_reference.TestOwnershipPoison.test_inputs_not_mutated_and_maps_readonly) ... ok +test_invalid_input_entries_ignored_and_poisoned (test_cpu_reference.TestOwnershipPoison.test_invalid_input_entries_ignored_and_poisoned) ... ok +test_make_spec_api (test_cpu_reference.TestOwnershipPoison.test_make_spec_api) ... ok +test_nonfinite_active_input_rejected (test_cpu_reference.TestOwnershipPoison.test_nonfinite_active_input_rejected) ... ok +test_leaf_conservation_and_collision_moments_8_steps (test_cpu_reference.TestSRT.test_leaf_conservation_and_collision_moments_8_steps) ... ok +test_matches_independent_implementation (test_cpu_reference.TestSRT.test_matches_independent_implementation) ... ok +test_identity_changes_expected_packet (test_cpu_reference.TestSRTCornerOracle.test_identity_changes_expected_packet) ... ok +test_srt_oracle (test_cpu_reference.TestSRTCornerOracle.test_srt_oracle) ... ok +test_eight_unique_keys_and_child_packets (test_tron_additions.TestCornerIndividualPackets.test_eight_unique_keys_and_child_packets) ... ok +test_coalesce_paths_reconstructed_test_side (test_tron_additions.TestRetainedDiagnostics.test_coalesce_paths_reconstructed_test_side) ... ok +test_hop2_mask_semantics (test_tron_additions.TestRetainedDiagnostics.test_hop2_mask_semantics) ... ok +test_srt_coarse_and_fine_nan_masks_equal (test_tron_additions.TestSRTNanMask.test_srt_coarse_and_fine_nan_masks_equal) ... ok +test_diagnostic_field_delta (test_tron_additions.TestV02V03FieldDelta.test_diagnostic_field_delta) +Compare top-level diagnostic keys and budget keys between v0.2 and v0.3. ... ok + +---------------------------------------------------------------------- +Ran 20 tests in 0.480s + +OK +reference: /workspace/amr_tests_v03/cpu_reference_v0.3.py API CPUREF-0.3 +sha256 bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e cpu_reference_v0.3.py +sha256 ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca test_cpu_reference.py +sha256 8e7a6a90b85e64c7326719e7b8bca2f6d34fb4c80690f0685f7e291ab93bd2a4 test_tron_additions.py +python 3.13.5 numpy 2.5.3 Linux-6.12.94+-x86_64-with-glibc2.41 + +reference corner_links lists 8 uniquely keyed corner-pass links + +corner SRT symmetry values: {'LL': np.float64(0.02798201349283891), 'LR': np.float64(0.027982013492838912), 'UL': np.float64(0.02798201349283891), 'UR': np.float64(0.02798201349283891)} + +[identity] leaf0=[255.98790565531962, 7.683069168222897, -5.122316610476732] leaf8=[255.98790565532028, 7.683069168222904, -5.122316610476715] drift=[6.536993168992922e-13, 7.105427357601002e-15, 1.687538997430238e-14] + +[identity] max |ref - independent| over 3 steps = 0.000e+00 + +slots=100 (corner-pass 8), unique reads=400, max read multiplicity=1 + +counts: coarse cells collided once=192, fine twice=256, ghost explosion writes=320; tick validation OK + +[srt] leaf0=[256.01002619890596, 7.680601714336587, -5.120130711410963] leaf8=[256.0100261989044, 7.680601714336586, -5.120130711410962] drift=[-1.5347723092418164e-12, -8.881784197001252e-16, 8.881784197001252e-16] + +[srt] max |ref - independent| over 3 steps = 2.776e-16 + +[identity corner] expected=0.026777777777777775 got=np.float64(0.026777777777777775); srt-expected differs by 1.204e-03 + +[srt corner] expected=0.02798201349283891 got=np.float64(0.02798201349283891) diff=0.000e+00 (uncoalesced g8=0.028027777777777776) + +[8 corner keys] ['lower_left_q7', 'lower_left_q8', 'lower_right_q5', 'lower_right_q6', 'upper_left_q5', 'upper_left_q6', 'upper_right_q7', 'upper_right_q8']; packets 3xg8+1xmid8, weights 0.25, avg=0.02798201349283891 + +[coalesce_paths test-side] 100 rows x 4; hist={('corner_pass', 'A', 'I'): 8, ('corner_pass', 'I', 'I'): 24, ('face_or_diag_from_patch', 'A', 'A'): 180, ('face_or_diag_from_patch', 'I', 'A'): 188} + +[hop2_valid] matches independent derivation; valid inner=1060; reads hop2-valid=400 + +[srt masks] coarse+fine NaN masks equal over 3 steps; max diff 2.776e-16 + +[v0.2→v0.3 fields] removed=['coalesce_paths', 'explosion_count', 'fine_valid_after'] added=['hop2_valid']; budget rename closure_error→bookkeeping_check; corner_packets 4→8 +peak_rss_MiB 42.6171875 +RESULT OK testsRun 20 + +=== open-corner negative control === +test_open_vs_closed (__main__.OpenCornerNegativeControl.test_open_vs_closed) ... ok + +---------------------------------------------------------------------- +Ran 1 test in 0.215s + +OK +[identity] coalesce rows closed=100 open=92 dropped=8 +[identity] seed=1 steps=1 closed: max|leaf drift|=5.551e-17 max|interface_residual|=2.109e-15 | OPEN: max|leaf drift| (mass,mx,my)=(0.000e+00,5.551e-17,2.776e-17) max|interface_residual|=1.776e-15 +[identity] seed=1 steps=8 closed: max|leaf drift|=2.776e-16 max|interface_residual|=2.276e-15 | OPEN: max|leaf drift| (mass,mx,my)=(0.000e+00,2.220e-16,2.776e-16) max|interface_residual|=2.665e-15 +[identity] seed=2 steps=1 closed: max|leaf drift|=3.331e-16 max|interface_residual|=1.971e-15 | OPEN: max|leaf drift| (mass,mx,my)=(0.000e+00,1.665e-16,3.331e-16) max|interface_residual|=2.665e-15 +[identity] seed=2 steps=8 closed: max|leaf drift|=5.684e-14 max|interface_residual|=2.998e-15 | OPEN: max|leaf drift| (mass,mx,my)=(5.684e-14,2.220e-16,3.331e-16) max|interface_residual|=2.665e-15 +[srt] coalesce rows closed=100 open=92 dropped=8 +[srt] seed=1 steps=1 closed: max|leaf drift|=2.269e-14 max|interface_residual|=2.831e-15 | OPEN: max|leaf drift| (mass,mx,my)=(2.078e-03,8.560e-04,2.620e-04) max|interface_residual|=2.078e-03 +[srt] seed=1 steps=8 closed: max|leaf drift|=4.040e-14 max|interface_residual|=4.774e-15 | OPEN: max|leaf drift| (mass,mx,my)=(2.078e-03,8.560e-04,2.620e-04) max|interface_residual|=2.078e-03 +[srt] seed=2 steps=1 closed: max|leaf drift|=4.078e-14 max|interface_residual|=2.331e-15 | OPEN: max|leaf drift| (mass,mx,my)=(5.660e-04,2.359e-04,6.755e-04) max|interface_residual|=6.755e-04 +[srt] seed=2 steps=8 closed: max|leaf drift|=4.078e-14 max|interface_residual|=2.554e-15 | OPEN: max|leaf drift| (mass,mx,my)=(6.526e-04,5.767e-04,1.401e-03) max|interface_residual|=1.401e-03 diff --git a/tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt b/tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt new file mode 100644 index 0000000..adff8bb --- /dev/null +++ b/tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt @@ -0,0 +1,130 @@ +{ + "started_utc": "2026-10-13T03:42:59.253863+00:00", + "cwd": "/home/frank14f/CelerisLab/tests/validation/multigrid", + "python_executable": "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "environment": { + "OPENBLAS_NUM_THREADS": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONNOUSERSITE": "1", + "PYTHONPATH": "/home/frank14f/CelerisLab/tests/validation/multigrid", + "CPU_REFERENCE_PATH": "/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py" + }, + "limits": { + "address_space_bytes": [ + 268435456, + 268435456 + ], + "output_file_bytes": [ + 2097152, + 2097152 + ], + "core_bytes": [ + 0, + 0 + ], + "max_coarse_steps_per_case": 8 + }, + "runs": [] +} + +COMMAND /usr/bin/prlimit --as=268435456 --fsize=2097152 --core=0 -- /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -B /home/frank14f/CelerisLab/tests/validation/multigrid/test_cpu_reference.py +test_corner_pass_links_identity_marker (__main__.TestFourCorners) +Identity: a marker in the source's post-collision slot q must arrive exactly at K. ... ok +test_four_corner_symmetry_srt (__main__.TestFourCorners) +Mirror the lower-left SRT corner case to the other three corners; values must match. ... ok +test_leaf_mass_momentum_8_steps (__main__.TestIdentityTransportConservation) ... ok +test_matches_independent_implementation (__main__.TestIdentityTransportConservation) ... ok +test_coalescence_slots_reads_owner (__main__.TestOwnershipPoison) ... ok +test_collision_and_explosion_counts (__main__.TestOwnershipPoison) ... ok +test_hop_sources_never_outer (__main__.TestOwnershipPoison) ... ok +test_inputs_not_mutated_and_maps_readonly (__main__.TestOwnershipPoison) ... ok +test_invalid_input_entries_ignored_and_poisoned (__main__.TestOwnershipPoison) ... ok +test_make_spec_api (__main__.TestOwnershipPoison) ... ok +test_nonfinite_active_input_rejected (__main__.TestOwnershipPoison) ... ok +test_leaf_conservation_and_collision_moments_8_steps (__main__.TestSRT) ... ok +test_matches_independent_implementation (__main__.TestSRT) ... ok +test_identity_changes_expected_packet (__main__.TestSRTCornerOracle) ... ok +test_srt_oracle (__main__.TestSRTCornerOracle) ... ok + +---------------------------------------------------------------------- +Ran 15 tests in 1.230s + +OK +reference: /home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py API CPUREF-0.3 +sha256 bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e cpu_reference.py +sha256 ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca test_cpu_reference.py +python 3.10.13 numpy 1.26.4 Linux-6.8.0-138-generic-x86_64-with-glibc2.35 + +reference corner_links lists 8 uniquely keyed corner-pass links + +corner SRT symmetry values: {'LL': 0.02798201349283891, 'LR': 0.027982013492838912, 'UL': 0.02798201349283891, 'UR': 0.02798201349283891} + +[identity] leaf0=[255.98790565531962, 7.683069168222897, -5.122316610476732] leaf8=[255.98790565532028, 7.683069168222904, -5.122316610476715] drift=[6.536993168992922e-13, 7.105427357601002e-15, 1.687538997430238e-14] + +[identity] max |ref - independent| over 3 steps = 0.000e+00 + +slots=100 (corner-pass 8), unique reads=400, max read multiplicity=1 + +counts: coarse cells collided once=192, fine twice=256, ghost explosion writes=320; tick validation OK + +[srt] leaf0=[256.01002619890596, 7.680601714336587, -5.120130711410963] leaf8=[256.0100261989044, 7.680601714336586, -5.120130711410962] drift=[-1.5347723092418164e-12, -8.881784197001252e-16, 8.881784197001252e-16] + +[srt] max |ref - independent| over 3 steps = 2.776e-16 + +[identity corner] expected=0.026777777777777775 got=0.026777777777777775; srt-expected differs by 1.204e-03 + +[srt corner] expected=0.027982013492838916 got=0.02798201349283891 diff=-6.939e-18 (uncoalesced g8=0.028027777777777783) +peak_rss_MiB 37.5 + +RUN_RESULT {"test_script": "test_cpu_reference.py", "command": ["/usr/bin/prlimit", "--as=268435456", "--fsize=2097152", "--core=0", "--", "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", "-B", "/home/frank14f/CelerisLab/tests/validation/multigrid/test_cpu_reference.py"], "returncode": 0, "elapsed_seconds": 1.4467838869895786, "cumulative_child_peak_rss_MiB": 37.5} + +COMMAND /usr/bin/prlimit --as=268435456 --fsize=2097152 --core=0 -- /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -B /home/frank14f/CelerisLab/tests/validation/multigrid/test_tron_additions.py +test_eight_unique_keys_and_child_packets (__main__.TestCornerIndividualPackets) ... ok +test_coalesce_paths_reconstructed_test_side (__main__.TestRetainedDiagnostics) ... ok +test_hop2_mask_semantics (__main__.TestRetainedDiagnostics) ... ok +test_srt_coarse_and_fine_nan_masks_equal (__main__.TestSRTNanMask) ... ok +test_diagnostic_field_delta (__main__.TestV02V03FieldDelta) +Compare top-level diagnostic keys and budget keys between v0.2 and v0.3. ... ok + +---------------------------------------------------------------------- +Ran 5 tests in 0.464s + +OK +reference: /home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py API CPUREF-0.3 +sha256 bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e cpu_reference.py +sha256 ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca test_cpu_reference.py +sha256 8e7a6a90b85e64c7326719e7b8bca2f6d34fb4c80690f0685f7e291ab93bd2a4 test_tron_additions.py +python 3.10.13 numpy 1.26.4 Linux-6.8.0-138-generic-x86_64-with-glibc2.35 + +[8 corner keys] ['lower_left_q7', 'lower_left_q8', 'lower_right_q5', 'lower_right_q6', 'upper_left_q5', 'upper_left_q6', 'upper_right_q7', 'upper_right_q8']; packets 3xg8+1xmid8, weights 0.25, avg=0.027982013492838916 + +[coalesce_paths test-side] 100 rows x 4; hist={('corner_pass', 'A', 'I'): 8, ('corner_pass', 'I', 'I'): 24, ('face_or_diag_from_patch', 'A', 'A'): 180, ('face_or_diag_from_patch', 'I', 'A'): 188} + +[hop2_valid] matches independent derivation; valid inner=1060; reads hop2-valid=400 + +[srt masks] coarse+fine NaN masks equal over 3 steps; max diff 2.776e-16 + +[v0.2→v0.3 fields] removed=['coalesce_paths', 'explosion_count', 'fine_valid_after'] added=['hop2_valid']; budget rename closure_error→bookkeeping_check; corner_packets 4→8 +peak_rss_MiB 37.4609375 + +RUN_RESULT {"test_script": "test_tron_additions.py", "command": ["/usr/bin/prlimit", "--as=268435456", "--fsize=2097152", "--core=0", "--", "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", "-B", "/home/frank14f/CelerisLab/tests/validation/multigrid/test_tron_additions.py"], "returncode": 0, "elapsed_seconds": 0.677576785965357, "cumulative_child_peak_rss_MiB": 37.5} + +COMMAND /usr/bin/prlimit --as=268435456 --fsize=2097152 --core=0 -- /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -B /home/frank14f/CelerisLab/tests/validation/multigrid/test_open_corner_negative_control.py +test_open_vs_closed (__main__.OpenCornerNegativeControl) ... ok + +---------------------------------------------------------------------- +Ran 1 test in 0.703s + +OK +[identity] coalesce rows closed=100 open=92 dropped=8 +[identity] seed=1 steps=1 closed: max|leaf drift|=5.551e-17 max|interface_residual|=2.109e-15 | OPEN: max|leaf drift| (mass,mx,my)=(0.000e+00,5.551e-17,2.776e-17) max|interface_residual|=1.776e-15 +[identity] seed=1 steps=8 closed: max|leaf drift|=2.776e-16 max|interface_residual|=2.276e-15 | OPEN: max|leaf drift| (mass,mx,my)=(0.000e+00,2.220e-16,2.776e-16) max|interface_residual|=2.665e-15 +[identity] seed=2 steps=1 closed: max|leaf drift|=3.331e-16 max|interface_residual|=1.971e-15 | OPEN: max|leaf drift| (mass,mx,my)=(0.000e+00,1.665e-16,3.331e-16) max|interface_residual|=2.665e-15 +[identity] seed=2 steps=8 closed: max|leaf drift|=5.684e-14 max|interface_residual|=2.998e-15 | OPEN: max|leaf drift| (mass,mx,my)=(5.684e-14,2.220e-16,3.331e-16) max|interface_residual|=2.665e-15 +[srt] coalesce rows closed=100 open=92 dropped=8 +[srt] seed=1 steps=1 closed: max|leaf drift|=2.269e-14 max|interface_residual|=2.831e-15 | OPEN: max|leaf drift| (mass,mx,my)=(2.078e-03,8.560e-04,2.620e-04) max|interface_residual|=2.078e-03 +[srt] seed=1 steps=8 closed: max|leaf drift|=4.040e-14 max|interface_residual|=4.774e-15 | OPEN: max|leaf drift| (mass,mx,my)=(2.078e-03,8.560e-04,2.620e-04) max|interface_residual|=2.078e-03 +[srt] seed=2 steps=1 closed: max|leaf drift|=4.078e-14 max|interface_residual|=2.331e-15 | OPEN: max|leaf drift| (mass,mx,my)=(5.660e-04,2.359e-04,6.755e-04) max|interface_residual|=6.755e-04 +[srt] seed=2 steps=8 closed: max|leaf drift|=4.078e-14 max|interface_residual|=2.554e-15 | OPEN: max|leaf drift| (mass,mx,my)=(6.526e-04,5.767e-04,1.401e-03) max|interface_residual|=1.401e-03 + +RUN_RESULT {"test_script": "test_open_corner_negative_control.py", "command": ["/usr/bin/prlimit", "--as=268435456", "--fsize=2097152", "--core=0", "--", "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", "-B", "/home/frank14f/CelerisLab/tests/validation/multigrid/test_open_corner_negative_control.py"], "returncode": 0, "elapsed_seconds": 0.8977452759863809, "cumulative_child_peak_rss_MiB": 37.5} diff --git a/tests/validation/multigrid/local_stress_v1_evidence/README.txt b/tests/validation/multigrid/local_stress_v1_evidence/README.txt new file mode 100644 index 0000000..3513fd2 --- /dev/null +++ b/tests/validation/multigrid/local_stress_v1_evidence/README.txt @@ -0,0 +1,124 @@ +Local-stress observable v1 — Horsea review and single-run handoff +2026-10-13, Asia/Shanghai. Observation-only; reference unchanged. + +Actual result +Exactly one execution of the delivered script: 7 runs x 32 coarse steps, exit 0. +Original 22 Boolean hard checks plus 7 stress-finite checks: all 29 pass. +Both ALL_HARD_CHECKS_PASS_V02 and ALL_HARD_CHECKS_PASS_WITH_STRESS are True. +No retries, added cases, modified formulas, relaxed tolerances or new R thresholds. + +Review status (separate from numerical results) +Grok authored the implementation and ran it in an independent environment. +The coordinating root reported an independent static review with no substantive +issue. Claude's implementation-code review is paused due to an API error and +has NOT completed. Claude's earlier specification discussion and the table's +"implicit-definition checks" do not constitute a completed code review. +Horsea read all 902 script lines, original stdout, table and manifest, reviewed +the related reference paths and local reference sources below, and found no +substantive numerical objection blocking this bounded diagnostic rerun. + +Scope and static review +Applied .github/skills/lbm-ref-architecture-guard/SKILL.md and its reference/ +architecture checklists. No applicable ancestor AGENTS.md was found. +The incoming script is standalone NumPy+stdlib, with no runtime dependency on +the previous shear script. Its original bytes are preserved. Architecture: +main -> run_uniform(B/C) / run_composite(A/A_T) -> arrival populations -> +sigma_xy_cell -> level-specific sigma restriction -> Fourier R and profiles. +The composite advance uses the existing CPUREF-0.3 API without wrapping or +changing its algorithm. The external recorder pins the reference before import; +the diagnostic's printed REF_SHA_MATCH alone would not enforce that pin. + +Reference findings (read-only, no imported reference packages) +1. ref/lbmpy/src/lbmpy/macroscopic_value_kernels.py, strain_rate_tensor_getter: + the second moment is formed from f minus equilibrium; S=-3*omega*Pi/(2*rho). +2. ref/OpenLB/src/functors/lattice/latticePhysStrainRate2D.hh independently uses + the negative nonequilibrium-moment sign and omega/(2*rho*cs^2*dt) conversion. +3. ref/lbmpy/src/lbmpy/relaxationrates.py gives nu=(tau-.5)/3. Combining + sigma=2*rho*nu*S yields -(1-1/(2*tau))*Pi_neq in lattice units. +4. ref/OpenLB/src/core/unitConverter.h converts viscosity by dx^2/dt and + pressure/stress by density*(dx/dt)^2. Here dx/dt=1 on both levels and density + units match, so no additional scale factor belongs in this observation. +5. Existing cpu_reference.py: paired D2Q9 ordering, physical patch offset, + acoustic tau scaling, arrival_f input/output, tick increment 2, and owned + leaf-cell masks. The pinned full reference was reviewed in the prior round; + this review reread its maps, collision/explosion, leaf totals and advance path. + +Verified definitions +Initialization remains equilibrium of the exact cell-average sine velocity, +not exact cell averages of nonlinear f_eq. Fine coordinates include patch offset. +All final observations use coarse step 32: composite arrival_f tick=64, +uniform B after 64 collide-stream substeps and C after 32. No extra collision. +Pi_xy^neq=sum(cx*cy*f)-rho*ux*uy is evaluated per owned cell. Each level applies +its own tau to obtain sigma BEFORE 2x2 volume averaging. Covered coarse values +and fine ghosts are excluded. Velocity restriction averages rho/j before u=j/rho. +R uses a_u=(2/256)*sum(u*sin) from the same run and final arrival state, not an +analytic decay amplitude. This raw Fourier coefficient includes the cell-average +sinc factor; the old decay fit amplitude uses its sinc-normalized template. +The cosine stress projection and velocity projection use a common 16x16 grid. +Signed horizontal profiles average columns 4:12 and retain all 16 rows; rows +3,4,11,12 flank the patch faces. The transposed case reports R only, no profile. + +Runtime evidence +Existing Python 3.10.13 / NumPy 1.26.4, CPU only. run_once.py is a standalone +stdlib recorder derived from the previous recorder; it does not execute or +import the prior diagnostic. It checks all four delivered file hashes, the tar +hash and reference hash before launch, and refuses existing logs/results. +Parent and child both used /usr/bin/prlimit with soft=hard bounds: + --as=268435456 --fsize=2097152 --core=0 +Process-only OPENBLAS_NUM_THREADS=1, PYTHONDONTWRITEBYTECODE=1, +PYTHONNOUSERSITE=1, PYTHONOPTIMIZE=0; PYTHONPATH is only the current multigrid +directory. CPU_REFERENCE_PATH explicitly selects its cpu_reference.py. +results_horsea.json and stdout_horsea.txt retain full argv, environment, cwd, +preflight SHA values, versions, times, exit status and measured RSS. +UTC start/end: 2026-10-13 06:01:08.222086 / 06:01:10.671541 +Local start/end: 14:01:08 / 14:01:10 Asia/Shanghai. +Child elapsed 2.435032 s; peak RSS 38.41796875 MiB; parent peak 18.75 MiB. +Combined stdout/stderr with recorder metadata: 17091 bytes, below 2 MiB. + +Grok and prior-result comparison +comparison.json parses each of the 29 Boolean checks, the original 22 names, +both all-pass markers, R values, ratios and every profile value. HARD CHECKS, +STRESS FINITE CHECKS, SUMMARY_LINES and DECAY FITS blocks all match Grok +exactly at printed precision. All recorded numeric differences are zero. +The ten profile rows in SUMMARY_LINES contain 160 scalar entries total. +Six current lambda values also match the prior local shear output at 8 decimal +places (the precision emitted by this script). Prior 10-decimal values are +retained in the comparison for provenance, not claimed freshly measured here. +Full stdout hashes need not match across machines; paths, runtime and recorder +metadata differ. Printed equality is not full-precision field equality. + +R at coarse step 32 (diagnostic only): + phi0: A=1.011774619306 B=.998555854025 C=1.008383635570 + phiPi/2: A=1.011850480751 B=.998555854025 C=1.008383635570 + A_T: 1.011850480751 + +Interpretation limits (separate from pass/fail checks) +The retained transpose assertion covers u/rho, not stress. R_A_T agreeing with +R_A at phiPi/2 is a reported observation, NOT a new stress-transpose hard test. +Seven finite-stress checks do not establish local stress accuracy, convergence, +interface stress-transfer correctness or any causal mechanism. One resolution, +tau pair, patch and short window remain in scope. Composite conservation uses +the reference leaf-total helper; this is not a new independent conservation +oracle. Time-held ghosts and unscaled nonequilibrium transfer remain candidate, +non-exhaustive explanations. No time-interpolated ghosts were implemented. + +Frozen state and handoff +baseline.json froze HEAD, Git status and 292 old-file hashes, including all +previous CPUREF/shear evidence. Its stated hash scope excludes the read-only +ref tree, symlinks and bytecode. Final manifest.json verifies the frozen files, +original inputs and reference, and lists new paths/bytes/SHA256; its own SHA is +reported in the handoff. Only this evidence directory and the delivered +local_stress_observable_v1.py were added. No production imports, GPU/solver +runs, installs, environment/SSH/system changes, DynamisLab access, commit or push. +Stopped here for joint acceptance; Claude code review remains outstanding. + +User authorization evidence, verbatim as relayed by the coordinating thread + +assistant(Sentinel_65ef50edab8c819194404548b6b8e469): 新增的局部剪切应力观测已在 Grok 那边跑通,但同步到 Horsea 又被拦住:审查把上次许可限定为那一份文件。 + +你是否允许本轮 AMR 协作后续的代码、测试、日志和报告,经现有 SSH 同步到 Horsea,并只在 CelerisLab/tests/validation/multigrid 内审阅和运行小型 CPU 验证?包含这次新观测;每次仍限 256 MiB 内存、2 MiB 输出,不改环境或生产代码。 +user(Sentinel_d0d3a42b2c088191aa8aebc105fb1b27): 允许,你用GPU验证都行 + +The coordinating instruction narrows this run to CPU observation-only. Future +GPU work was not performed or specified here; this is not unrestricted remote +operation authorization. Input transfer was already complete when received. diff --git a/tests/validation/multigrid/local_stress_v1_evidence/TABLE_local_stress_observable_v1.md b/tests/validation/multigrid/local_stress_v1_evidence/TABLE_local_stress_observable_v1.md new file mode 100644 index 0000000..6115dcd --- /dev/null +++ b/tests/validation/multigrid/local_stress_v1_evidence/TABLE_local_stress_observable_v1.md @@ -0,0 +1,56 @@ +# Local-stress observable v1 — R / ratio / profile table + +Spec: `18_local_stress_observable_spec_v1.md` +Reference: CPUREF-0.3 sha256 `bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e` (unchanged) +Script: `local_stress_observable_v1.py` +Stdout: `stdout_local_stress_observable_v1.txt` +Arrival: CPUREF `State.coarse_f` / `State.fine_f` at `phase='arrival_f'` tick=64 after 32 `advance_coarse_once`; uniforms use post-stream `f` after collide→stream. +Diagnostic values only — no thresholds or mechanism claim. φ probes phase structure only. + +## Hashes +| file | sha256 | +|------|--------| +| local_stress_observable_v1.py | 0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456 | +| stdout_local_stress_observable_v1.txt | 6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4 | +| cpu_reference_v0.3.py | bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e | + +## Hard checks +- ALL_HARD_CHECKS_PASS_V02 = True (22 Booleans, unchanged from shear v0.2) +- ALL_HARD_CHECKS_PASS_WITH_STRESS = True (+7 finite stress-array checks) +- runtime 0.77 s, CPU only, exit 0 + +## Scalar R at coarse step 32 + +| φ | R_A | R_B | R_C | R_A/R_B | R_A/R_C | +|---|-----|-----|-----|--------|--------| +| 0 | 1.011774619306 | 0.998555854025 | 1.008383635570 | 1.013237882716 | 1.003362791319 | +| π/2 | 1.011850480751 | 0.998555854025 | 1.008383635570 | 1.013313853874 | 1.003438022057 | + +Transposed A (φ=π/2): R_A_T = 1.011850480751 (R only; no profile). Matches R_A at φ=π/2. + +## Signed horizontal-face profile s(j) (x-avg over columns [4,12), / ρ0 ν k a_u) + +Face rows flagged: j = 3, 4, 11, 12 (patch faces at y=4 and y=12). + +### φ = 0 — face rows +| j | s_A | s_B | s_C | s_A−s_B | s_A−s_C | +|---|-----|-----|-----|--------|--------| +| 3 | 1.826885e-01 | 1.948086e-01 | 1.967259e-01 | -1.212007e-02 | -1.403738e-02 | +| 4 | -2.146875e-01 | -1.948086e-01 | -1.967259e-01 | -1.987891e-02 | -1.796161e-02 | +| 11 | -2.146875e-01 | -1.948086e-01 | -1.967259e-01 | -1.987891e-02 | -1.796161e-02 | +| 12 | 1.826885e-01 | 1.948086e-01 | 1.967259e-01 | -1.212007e-02 | -1.403738e-02 | + +### φ = π/2 — face rows +| j | s_A | s_B | s_C | s_A−s_B | s_A−s_C | +|---|-----|-----|-----|--------|--------| +| 3 | -1.003712e+00 | -9.793689e-01 | -9.890078e-01 | -2.434262e-02 | -1.470367e-02 | +| 4 | -9.868392e-01 | -9.793689e-01 | -9.890078e-01 | -7.470343e-03 | 2.168600e-03 | +| 11 | 9.868392e-01 | 9.793689e-01 | 9.890078e-01 | 7.470343e-03 | -2.168600e-03 | +| 12 | 1.003712e+00 | 9.793689e-01 | 9.890078e-01 | 2.434262e-02 | 1.470367e-02 | + +Full 16-row profiles are in stdout `SUMMARY_LINES` / `PROFILE_*` blocks. + +## Implicit-definition checks (Claude's three) +1. a_u = each run's own projected amplitude from the same arrival state — **yes** (not U0·e^{−νk²t}). +2. Profile x-average over patch columns x∈[4,12) for A/B/C — **yes**. +3. Transposed run reports R only, no profile — **yes**; R_A_T = R_A(φ=π/2). diff --git a/tests/validation/multigrid/local_stress_v1_evidence/baseline.json b/tests/validation/multigrid/local_stress_v1_evidence/baseline.json new file mode 100644 index 0000000..ab631ea --- /dev/null +++ b/tests/validation/multigrid/local_stress_v1_evidence/baseline.json @@ -0,0 +1,300 @@ +{ + "created_utc": "2026-10-13T05:59:18.680177+00:00", + "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/README.md\n?? docs/design/integrated_architecture.md\n?? docs/design/multi_level_grid_architecture.md\n?? docs/design/multi_level_summary.md\n?? docs/design/multi_level_visual_reference.md\n?? docs/design/spatial_coupling_refinement.md\n?? docs/multilevel_grid_architecture_analysis.md\n?? research/audit-2026-10-09/REVIEW.zh-CN.md\n?? research/audit-2026-10-09/architecture-cpu-results.json\n?? research/audit-2026-10-09/architecture-report.md\n?? research/audit-2026-10-09/numerical-report.md\n?? research/audit-2026-10-09/numerical_collision_results.json\n?? research/audit-2026-10-09/numerical_compile_results.json\n?? research/audit-2026-10-09/numerical_semantics_results.json\n?? research/audit-2026-10-09/root-initializers-report.md\n?? research/audit-2026-10-09/state-report.md\n?? research/audit-2026-10-09/state_results.json\n?? research/design-2026-10-09/Contracts.lean\n?? research/design-2026-10-09/PLAN.zh-CN.md\n?? research/design-2026-10-09/api-architecture-study.md\n?? research/design-2026-10-09/grid-study.md\n?? research/design-2026-10-09/jet-study.md\n?? research/design-2026-10-09/jet_closure_check.py\n?? research/design-2026-10-09/jet_closure_results.json\n?? research/design-2026-10-09/math-and-history.md\n?? research/design-2026-10-09/math-checks.json\n?? research/design-2026-10-09/math_checks.py\n?? research/j1-2026-10-12/REVIEW.md\n?? research/j1-2026-10-12/baseline-status.txt\n?? research/j1-2026-10-12/baseline.json\n?? research/j1-2026-10-12/incremental.diff\n?? research/j1-2026-10-12/results.json\n?? research/j2-slot-2026-10-12/REVIEW.md\n?? research/j2-slot-2026-10-12/baseline-status.txt\n?? research/j2-slot-2026-10-12/baseline.json\n?? research/j2-slot-2026-10-12/incremental.diff\n?? research/j2-slot-2026-10-12/results.json\n?? research/j3-coverage-2026-10-12/REVIEW.md\n?? research/j3-coverage-2026-10-12/baseline-status.txt\n?? research/j3-coverage-2026-10-12/baseline.json\n?? research/j3-coverage-2026-10-12/incremental.diff\n?? research/j3-coverage-2026-10-12/negative-budget-20744.h5\n?? research/j3-coverage-2026-10-12/negative-end-20760.h5\n?? research/j3-coverage-2026-10-12/restart-21280.h5\n?? research/j3-coverage-2026-10-12/restart-reference-21296.h5\n?? research/j3-coverage-2026-10-12/results.json\n?? research/j3-coverage-2026-10-12/verification.json\n?? research/j3-lag-2026-10-12/REVIEW.md\n?? research/j3-lag-2026-10-12/baseline-status.txt\n?? research/j3-lag-2026-10-12/baseline.json\n?? research/j3-lag-2026-10-12/end-21280.h5\n?? research/j3-lag-2026-10-12/incremental.diff\n?? research/j3-lag-2026-10-12/results.json\n?? research/j3-lag-2026-10-12/start-20760.h5\n?? research/j3-lag-2026-10-12/trajectory.h5\n?? research/j3-offline-2026-10-12/REVIEW.md\n?? research/j3-offline-2026-10-12/lags.csv\n?? research/j3-offline-2026-10-12/localization.png\n?? research/j3-offline-2026-10-12/regions.csv\n?? research/j3-offline-2026-10-12/results.json\n?? research/j3-reservoir-2026-10-12/REVIEW.md\n?? research/j3-reservoir-2026-10-12/baseline-status.txt\n?? research/j3-reservoir-2026-10-12/baseline.json\n?? research/j3-reservoir-2026-10-12/incremental.diff\n?? research/j3-reservoir-2026-10-12/results.json\n?? research/repair-2026-10-10/TRON_HANDOFF.md\n?? research/repair-2026-10-10/baseline-hashes.json\n?? research/repair-2026-10-10/baseline-status.txt\n?? research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff\n?? research/repair-2026-10-10/classic-results.json\n?? research/repair-2026-10-10/classic-signals.npz\n?? research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h\n?? research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h\n?? research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h\n?? research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h\n?? research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb\n?? research/repair-2026-10-10/provenance.json\n?? research/repair-2026-10-10/repair-architecture.md\n?? research/repair-2026-10-10/repair-numerical.md\n?? research/repair-2026-10-10/repair-state.md\n?? src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh\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/collision_regression.cpp\n?? tests/unit/cpp/planar_velocity.cpp\n?? tests/unit/cpp/reservoir.cpp\n?? tests/unit/cpp/semantic_regression.cpp\n?? tests/unit/cpp/slot_profile.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_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/MULTIGRID_VERIFICATION_STRATEGY.md\n?? tests/validation/multigrid/cpu_reference.py\n?? tests/validation/multigrid/cpu_reference_v0.2.py\n?? tests/validation/multigrid/cpuref_0_3_evidence/README.txt\n?? tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md\n?? tests/validation/multigrid/cpuref_0_3_evidence/baseline.json\n?? tests/validation/multigrid/cpuref_0_3_evidence/manifest.json\n?? tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json\n?? tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt\n?? tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt\n?? tests/validation/multigrid/shear_diagnostic_v0_2.py\n?? tests/validation/multigrid/shear_v0_2_evidence/README.txt\n?? tests/validation/multigrid/shear_v0_2_evidence/baseline.json\n?? tests/validation/multigrid/shear_v0_2_evidence/comparison.json\n?? tests/validation/multigrid/shear_v0_2_evidence/joint_report.md\n?? tests/validation/multigrid/shear_v0_2_evidence/manifest.json\n?? tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json\n?? tests/validation/multigrid/shear_v0_2_evidence/run_once.py\n?? tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json\n?? tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt\n?? tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt\n?? tests/validation/multigrid/test_cpu_reference.py\n?? tests/validation/multigrid/test_open_corner_negative_control.py\n?? tests/validation/multigrid/test_tron_additions.py\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", + "hash_scope": "Tracked/nonignored untracked regular files and all prior baseline paths, including CPUREF and shear evidence. Excludes read-only ref tree, symlinks and bytecode.", + "hashes": { + ".cursor/rules/cuda-style.mdc": "5810cf8cff793a11ba5dedafaa8a4e7d7d3debb728d837ca1903ff6dc8d6fdb9", + ".cursor/rules/project-layout.mdc": "aeed1cd9d48447bcfcfb6a77250af7c5a3d500de4c6b2591c5684696fa04c3ec", + ".cursor/rules/python-style.mdc": "ece75cb724d7dc46cb8dab7ecf8d710a90b503001da0d506ea4bf772ce395e21", + ".cursorignore": "9f072faa815a6c6d4dc791a424201404f0f623338681ae3d2fcbdf86db1bd035", + ".gitignore": "de25151f4cfdf29ca64032e509398e1829c7ded2449ccff803b2fd87d859ae6c", + "LICENSE": "e98392425e9a0007d0d69f0f7c912c2dc1b59061a6197223962aac45599c76ea", + "README.md": "982d0df8b766b1d5017ba702b75e8b3cec8d22f57af8f434be27ea251652596c", + "docs/audit/audit_round2.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "docs/audit/body_refactor_notes.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "docs/audit/config_diagnosis.md": "b601652df0cac36a8faf2b317b11853221353716a25184cd9b2dc41373a7f183", + "docs/audit/kernel_layer_audit.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "docs/design/README.md": "98242c6960866d9b75aaf363f703edf02c4210bc38da1a340e9f6add49c6a3ce", + "docs/design/integrated_architecture.md": "c26b0d301321fe4b86d83d11c7e0b8d0c0545ee2995afa563966f004e9788132", + "docs/design/multi_level_grid_architecture.md": "e56a67d9129f2e3c311342e21a3fb2ed14bd492dd881949b251d5d9ac577bdee", + "docs/design/multi_level_summary.md": "eebf23e0bec9b154e5ce2128e2806e7558a7d4824b2c700cfd16afd1158b2354", + "docs/design/multi_level_visual_reference.md": "cad4bfbd561e5650ec297334529334b662a1ed35f7373c61f34ee22ecf1f66bd", + "docs/design/spatial_coupling_refinement.md": "36c878c7afad524999d89fa842297a98a0433e0283e78b36ca734ddbf8723ed8", + "docs/multilevel_grid_architecture_analysis.md": "90309730b1759d63531cb258c30db990ab71ca1b56ae47d0bbe2f4e2ae52012c", + "docs/performance_analysis.md": "ba01aaa4d3c02b61a8dc55fd00518ac291ebbed79b6574190d6b7234a1158fcb", + "docs/tests_overview.md": "ffc9591fd7baa4261b2c1ce9cfa7aa13a3554a8d5df712035806266a5eaade3f", + "docs/validation_specs/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "docs/validation_specs/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "docs/validation_specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "docs/validation_specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "docs/validation_specs/exp_ctrl_matrix.md": "b7250576c23292988b6ef4bcfd080f611d41edc413c3cebd0eadcc8596049470", + "docs/validation_specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "output/round3_compatibility_summary.md": "319f2e6abde4b34cc4ec90ef461d8ebb85dd5a3ac1736cfa7a3fb110f2a69df9", + "pyproject.toml": "f24ab9ad3a6a728a9382b1bce2e721612fc76635f35c6f96dfddaa853b6e5a9c", + "research/audit-2026-10-09/REVIEW.zh-CN.md": "2841fd3aa7a6baedbe1079d90915c8b05212b133824ed6abccaa1f09656eaefe", + "research/audit-2026-10-09/architecture-cpu-results.json": "e1b809210005c8765b13fddbb5ed710d15f6fcbb4c5788a4064f3e88808433ef", + "research/audit-2026-10-09/architecture-report.md": "861079dc3f4ced9fdc41bfb22002d32e190c0d630d3ba2f138f9dc7a949b8371", + "research/audit-2026-10-09/numerical-report.md": "970330b3a593f79f09866ce6ae82bc0ddd81226230d0a6ff06ae8ae756ee80da", + "research/audit-2026-10-09/numerical_collision_results.json": "51e5c263bb8cde82cedef2ccfdbf5ef657742a80218d7896b1ff877516e59693", + "research/audit-2026-10-09/numerical_compile_results.json": "c3b0ae02072a2ec408ada7513b542ec255f6855cb743a3ed7f91bd8f31504f44", + "research/audit-2026-10-09/numerical_semantics_results.json": "b95b065b594aa2911740dab216f87936c9bf7f7fa25acfda93b5738443564035", + "research/audit-2026-10-09/root-initializers-report.md": "ca448457c444949d5d0e1e10fa7121064510b77fc4c3512580900f0299219867", + "research/audit-2026-10-09/state-report.md": "f8708807efc2e109810c5955f7c1884a932668c0b3cb2963c2df3b09f2a3d5c4", + "research/audit-2026-10-09/state_results.json": "da9170df3e11231c73f20e5e79ed68e08966673d1dd52004ea6b6a279afc0dcd", + "research/design-2026-10-09/Contracts.lean": "2442d9a778ef20e8af3fecf23be6fea6d73c6299ff744c9664b652bc5ee3f034", + "research/design-2026-10-09/PLAN.zh-CN.md": "0341dd7ee306a040340c8e5dedb07a109e931c27dbf3c994d072aa78e3b6bc67", + "research/design-2026-10-09/api-architecture-study.md": "d6fb45ec784f0e1db55fb9f34e137b9f551db0b9b39fd4f0ef247a78fc34eedf", + "research/design-2026-10-09/grid-study.md": "4435dc1275ec5e15b118becc6ac391f306195d1e5beaa58037b1aff3bb2465c7", + "research/design-2026-10-09/jet-study.md": "a362142ef04a5ad5dbb4c9db9d221b1199dccec53780c8f2da49a15201cfe529", + "research/design-2026-10-09/jet_closure_check.py": "fde45d0f8518740ef5c0bf0fe7635d6adaf9a2e789927dd4e68e991c138ddc30", + "research/design-2026-10-09/jet_closure_results.json": "12cf7d400a206f9f9ec9ea6ad251fe6bb0232e27bcbed22fbc1ead2c0fc7d249", + "research/design-2026-10-09/math-and-history.md": "64f8c82e4949d6f58b46faa09800958714859c36cad20bbeeae8b449ae7a6099", + "research/design-2026-10-09/math-checks.json": "94750381954317cde8d649db26beaed8ea945666572a05030ca2b4d97d384011", + "research/design-2026-10-09/math_checks.py": "4254983a783fe4bad8888b3d7c243c87d991c7bbf242edb0f56f25cbaefee890", + "research/j1-2026-10-12/REVIEW.md": "13004a4f140acdcf59acb57e9e2dda1bb95763d30060f822a7c206c94b813a9f", + "research/j1-2026-10-12/baseline-status.txt": "ac398360e05b746b89ae0c3acfe202b5122e650a3bb1ff234ab26f874a303e64", + "research/j1-2026-10-12/baseline.json": "ad7afdf7b3913d11c07343e971fe2f43c2d1a2b99e3d5904a6ba89e3bb0b24fb", + "research/j1-2026-10-12/checkpoint-gpu.log": "adfe3d77d2e6c6f6184dccc0267b4404b20a7709505d5ff5affed0ed4a618083", + "research/j1-2026-10-12/cpu.log": "60cac097f7c4f11401df2aacb43a248640555e7628d2829c4680c71db34e9640", + "research/j1-2026-10-12/gpu-validation.log": "d1e9f2aea17a85eddcd94b81c700738ce073214857b55c28abd1219ff1edbed7", + "research/j1-2026-10-12/gpu.log": "8659a78ea52bbf8eb923d46ea71636ce63cd322352d5c98a74f631e666dd8cfb", + "research/j1-2026-10-12/incremental.diff": "a454c23da7b0011645949c0fbf64d0c41ecfdab5642b1b7c5119868005d3c721", + "research/j1-2026-10-12/results.json": "449f8a17dacac0fc6d2489c4b10bac330dbbbdb38fad3ce54f739ac8c6d48e85", + "research/j2-slot-2026-10-12/REVIEW.md": "10c4a94ffc32e0a2c4e0f6593b7cfc28479b5869f279f0b9d0b708fa3a47d1e6", + "research/j2-slot-2026-10-12/baseline-status.txt": "812616e2d941efcf854e1b37d6e662dda1aaf2b69074fcc04017133e13b72166", + "research/j2-slot-2026-10-12/baseline.json": "e82a1844145fd0cbc585c581b29f80b56193f122cfe1dfa7578f26904a720285", + "research/j2-slot-2026-10-12/cli.log": "9482ad7101d501f27f92e204b2f3ae5c6d91bd887b525aa31cb4a2a188f3cb92", + "research/j2-slot-2026-10-12/cpu.log": "91aba5961006909fbbb860429a9d3cfc930112a0d74c7788bc51c0a5897b47e5", + "research/j2-slot-2026-10-12/gpu-serialization-failure.log": "df804e53b35e7ddaad79a17842b4b5fd9d834e29ca2d56edb00e835848d09200", + "research/j2-slot-2026-10-12/gpu-validation.log": "223351b52c70fa4523289f3a1b3db435a11286379253280470900ffe397580a6", + "research/j2-slot-2026-10-12/incremental.diff": "c9e391bc91438cd912c1ed5a419705d4388522f672c67a066cfc055e814e699f", + "research/j2-slot-2026-10-12/results.json": "7d35ca7989aed5380e0a45de7f583972566fc516a051da63c53b35514e267494", + "research/j3-coverage-2026-10-12/REVIEW.md": "7293f3f3442855c8521698605aab504e026915a7bf1e77f5a24710d89a812443", + "research/j3-coverage-2026-10-12/baseline-status.txt": "31c949b11b20d7cd4202dba16882b5712aa1653da0cb2da2f0ebd69bf488040e", + "research/j3-coverage-2026-10-12/baseline.json": "d8844104f2665a25bfc417ee29becf89ab3955fac9105b5ddb12cfb1fe2a55b0", + "research/j3-coverage-2026-10-12/gpu-validation.log": "505cd5a5db46d7984aefb2a614151c25c4ace0e7d2a52e02c3e4f9792fd8eb95", + "research/j3-coverage-2026-10-12/incremental.diff": "98aa7855d5d6b91b4509a924c8a5aabab4339ba29c7e7dc2d91262c48e3848ca", + "research/j3-coverage-2026-10-12/negative-budget-20744.h5": "c09d75fc4a2cff68039a0956bd9d32b79b9cd3a6b386c72b4db54c214b110cd8", + "research/j3-coverage-2026-10-12/negative-end-20760.h5": "bd0bd063579d625e358762b1fdde5ac11bfcf739646a847fb77a4a2031011b9b", + "research/j3-coverage-2026-10-12/restart-21280.h5": "3e89c12c16f91f76ca9acd909e0fa7d42df6fbb5e870b299aa08ca42bc3e3dc9", + "research/j3-coverage-2026-10-12/restart-reference-21296.h5": "7192f510dd7820675aa1de130f55514136fba782cf77f92545189918a7e0c328", + "research/j3-coverage-2026-10-12/results.json": "02460981ad49c9cc13b4246abad1d8afd2599c61bfb545a6e32da9bbcd5c0db1", + "research/j3-coverage-2026-10-12/verification.json": "205986efd2b41635721b7fd20288be982348c765180102c7102750ba088f3a28", + "research/j3-lag-2026-10-12/REVIEW.md": "f388b64b0cc0413dc9865afda90ed24de666dda0d6cdb821b4363ce1b73631b3", + "research/j3-lag-2026-10-12/baseline-status.txt": "e0b69879084f54afac1a3bc3701f1de9819068190c815ae84421f02f83cad9f7", + "research/j3-lag-2026-10-12/baseline.json": "5e9a920813fe3d775110af85af92970d5245a7040ace804445e432353b77e489", + "research/j3-lag-2026-10-12/end-21280.h5": "19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588", + "research/j3-lag-2026-10-12/gpu-availability.log": "b227a519b8286849cfdf842573bd451803da048c6b27af9517f6b8964cd3aa39", + "research/j3-lag-2026-10-12/gpu-diagnostic.log": "97956b517072b7c34e2e29e2a23f87eafb19b9eda786a4b8149e4a2eaed76ee9", + "research/j3-lag-2026-10-12/host-check.log": "b2b6d262934b3abf9e0f0bdbde14b339cb977f7bffe391c17b51b5d067862dda", + "research/j3-lag-2026-10-12/incremental.diff": "ebdf66c72daf17b926482f79a1a30bf0eb2d27fc930a7bb62e5449ebcf72fcc7", + "research/j3-lag-2026-10-12/results.json": "00435ac7e402943e55e702fac1beb5af8cafe71967999658bcde2b29077b1fa8", + "research/j3-lag-2026-10-12/start-20760.h5": "6c4cba5928c77566c2afc32231311a3986831c18fea766faadebb101243399e2", + "research/j3-lag-2026-10-12/trajectory.h5": "2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986", + "research/j3-offline-2026-10-12/REVIEW.md": "d9902c58498e73c29e054b23adb968f7e1e14421cba5c58d03bbc5a50159ae79", + "research/j3-offline-2026-10-12/cpu-analysis.log": "bc02a9b197fc15ae1b503ca54655a7622d4361f9b45b7848ff9c387ea3665f11", + "research/j3-offline-2026-10-12/lags.csv": "fbd9addd413f24c47f4411317e872265bb774e8e1724fe169412befa860ae94d", + "research/j3-offline-2026-10-12/localization.png": "a72907638e32b0ecfc2205bea438e7b408f40aad86217ce6ad9b4877840c9cfc", + "research/j3-offline-2026-10-12/regions.csv": "3a8fc640b61d70e3b7f73d2bf8ac2bd3f720adf39a90dfda6180430e0489efae", + "research/j3-offline-2026-10-12/results.json": "cdb857bea6f4e06ed15acf773505ce6d5147f8cb8ce0a53cc368ee267cde6361", + "research/j3-reservoir-2026-10-12/REVIEW.md": "1ea5f860728584ea6cbe40ba3994e40471102d8e2cf6d93e28fe47222cba0cab", + "research/j3-reservoir-2026-10-12/baseline-status.txt": "0ef1a8c9878c4053ebc1a7d4bace6d4ec38bf27ace167b4239ddbb1c6c897e20", + "research/j3-reservoir-2026-10-12/baseline.json": "847fefd1eae971985d34d04d89ee6d6f1c91f6940c54fe351d112faba7bc6838", + "research/j3-reservoir-2026-10-12/cpu.log": "b33f6c1a1b0ee67968c4cff85d491e46e30e0d6c796b552629714ab8b5dcead0", + "research/j3-reservoir-2026-10-12/gpu-availability-sandbox.log": "1d58470512e583a0acfabf6896ee5f31e5b493b8231aed54b864f64eb275b02c", + "research/j3-reservoir-2026-10-12/gpu-validation.log": "ff04024db197e332f37c912a96413e3251fd0186947348ffbc33af6f4a899f2c", + "research/j3-reservoir-2026-10-12/incremental.diff": "fae312831d71e46dd477a640b06ed927853a9e735d26bf9f5868927fa31cfa56", + "research/j3-reservoir-2026-10-12/results.json": "49685de7679a14860258abf1753aaa6d116ad709b868d907ddb40e74c9b845ea", + "research/repair-2026-10-10/TRON_HANDOFF.md": "f8aaa3d99cd133c2055d4adf396a0a57d14f6006aea19e87611bd1c2c1b53a88", + "research/repair-2026-10-10/baseline-hashes.json": "d6a7d5f9ec5bceb0e7927d55603d9c5e70105982cd945723454659b19ab476e6", + "research/repair-2026-10-10/baseline-status.txt": "074088d793014e3b8154c58718058c7d300fb45595f5129fa957ef1e4cec38e2", + "research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff": "292b4bafe7a62d4fbbf7c165eb99929336edfcaa16b15f34f72ab71fcd928391", + "research/repair-2026-10-10/classic-results.json": "a5d15305f516fd378b54cf9029102be58a83a55a7bad4b8e058fcfe0cc9898f4", + "research/repair-2026-10-10/classic-signals.npz": "820c9a0b0713d7455f0a5839ac2cd5ee706086d1a26461225dcdb095673421e2", + "research/repair-2026-10-10/final-gpu.log": "988bb97256d17b88c14f3793b15880d727ecb285abe62e7d2ae27a16729651c3", + "research/repair-2026-10-10/final-unit.log": "a892a39ecf88125558538cadce2cb5dc46d106b993b164e03da4ebb0eee68cef", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "research/repair-2026-10-10/provenance.json": "a81b7e32ecf7182c9617df1b39bbb063a05ef89290ad501bac4573cd5e8a6832", + "research/repair-2026-10-10/repair-architecture.md": "49be42ff5c994017f3175e17efda14d84f0b68f8ecd239f66ccee38415b60c5a", + "research/repair-2026-10-10/repair-numerical.md": "0272ebfa8c519aad161c520542cf53156574661609b91fd5ccad7955fdf2bd7b", + "research/repair-2026-10-10/repair-state.md": "4d4aa1ec0c11a87d2c8380912e7ed74cf5c910ae42e5cc529effde36c9020969", + "research/repair-2026-10-10/simplification-checks.log": "c9f15e870d02003480adf1a7f2fe4a9aca66c1934c4477619f05c8a4798ba85b", + "setup.py": "bf07df7ec19de56710d2bb5f61873e09710cd059d46837dc3aa54f3e09ff9e06", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/checkpoint.py": "5b7caf3896167a3f37c539b58837de6eb3f8085fa7bf5f821a09666cc16d43a4", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/config.py": "2f1bba7515f5bc08cb3a8d140bcafe7fa0689e01b3b06494697bb2956a71530e", + "src/CelerisLab/configs/CONFIG.md": "41cafdbe525366c08aa9d0416ea026ccf0026ba7123b8a9b65f968a80d928e3a", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/cuda/compiler_v2.py": "c4cc3ec4445c8d75e6a253dd87963877117a722bc73b9d4811806fc6045d08c1", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "f9f8242b38e8e0cf8425b75e2b0215bc15363c62eaa0fb43c761b8e0931bfdc9", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/simulation.py": "34d69e71844f553790c5a2bed0f8fbfb912a9498e95b500d1ef2ad41cae3b424", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/unit/cpp/reservoir.cpp": "c3eacaf0271400eb45ad559b571a8f7faa2a809d5f1857ffeb5592addce2cd0c", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/cpp/slot_profile.cpp": "31ac58ccab175bf79fa59fc46d4c0842df18ab0a5e5916be84760d9da2b75788", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_planar_velocity.py": "b656da0880b4234b1db805544edbe0d2473cbcc7c2c869c71d8251337f62a982", + "tests/unit/test_reservoir.py": "e718c78a53c3941aba7feb8ae4e8bb0b1726c1145de84febf91220c1917991c9", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_slot_velocity.py": "6a9494de9a32c350389ccbed58af48951f6b25a21a258537d2e8b73eb67cb11d", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/validation/analyze_j3_saved_frames.py": "438f67dac682b94c4950626f8de4fdcde48c3a4e9ecf8fdf1b0ada4b6e0e781a", + "tests/validation/diagnose_j3_lags.py": "286fcd65b3261667a847b9b26e213d0af92cf459faa6bbd774f78c8479ce31d7", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/multigrid/cpu_reference.py": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "tests/validation/multigrid/cpu_reference_v0.2.py": "b6adbad7da625ef6a6b97958ea9625030ed92676d0cada48e061c87bcf7ca8c9", + "tests/validation/multigrid/cpuref_0_3_evidence/README.txt": "1947ee0232b88b3cc2c506d0b0af5ba051ecc94aa8f7f09228ef3939cc95919b", + "tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md": "065947e15b2242bce7d3eb05a3acdbb59939c621dcd5d31540ad4a1bd4416818", + "tests/validation/multigrid/cpuref_0_3_evidence/baseline.json": "0daaccee41cabeb17a00e2405e2c7fd0b80d36f2d01778eb39c9fd22b13d2d47", + "tests/validation/multigrid/cpuref_0_3_evidence/manifest.json": "2850ecaf2e19d010ba35eb54162371d82cc1a092831e08a03b6adf75a614988b", + "tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json": "914389afc39752bcd4132aa21fc8d5cbcf0ca75b1efd6a49becab15c2fa3361b", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt": "73e4ef01138842981daaa534390f1463839e63833c11f4e8872f94f8eaadc717", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt": "457f1d2173496554c87ca6e61df518c0b8f1e0a28cdfd94b94ebbb61bc459d70", + "tests/validation/multigrid/shear_diagnostic_v0_2.py": "a8b1cf2f7abd00efc4d068bbd27bb2317144a6ca4c545d9b2e0dcf421eadebc6", + "tests/validation/multigrid/shear_v0_2_evidence/README.txt": "4306a34b6896bd6e7a5c2ca71d68e18450359239d0c7ad7a67a4e83e7155959a", + "tests/validation/multigrid/shear_v0_2_evidence/baseline.json": "98a7853341ea732762c7506694e3a867a7259bf110e9e461ea84f741fd9ab829", + "tests/validation/multigrid/shear_v0_2_evidence/comparison.json": "41c00372099dd04b6d323785e9eaf4fec09da1753d3d150ffa230800f904142f", + "tests/validation/multigrid/shear_v0_2_evidence/joint_report.md": "1860b8082108c8b8a87998af90cd0b81dce1c04e9f6c67b41e0912f9fef6cc9c", + "tests/validation/multigrid/shear_v0_2_evidence/manifest.json": "e42aa19e91608164698bea42da88fbbfab8b0f87cc37b27c5baf165453a4fdb0", + "tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json": "c2d7ce8d16a0f47baff0788a153353dcf67088da974d9cd3d521b04ecd91ee05", + "tests/validation/multigrid/shear_v0_2_evidence/run_once.py": "6698a2e040c56be949b809387d4518eb0ba82d34cc9d99640da4f8bf3c35c23f", + "tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json": "56fbd0259ff3d4dbd14ace52f64e249a435e9df91732b0e4027def2c344c2e6a", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt": "28ddd1267ca91a772f5a6bfc65d949c9a4ea7dac5c9ba3a0bdb168492810b670", + "tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt": "0577df5b3f5cb3c7b6e1ef2de71344f8fd3e6d959117487a06cbaf7f2afa3dea", + "tests/validation/multigrid/test_cpu_reference.py": "ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca", + "tests/validation/multigrid/test_open_corner_negative_control.py": "59a6f8ca80cdd63cb7827fbebf9b4b555c3793f19dd6bca801544ec10b5cbe1b", + "tests/validation/multigrid/test_tron_additions.py": "8e7a6a90b85e64c7326719e7b8bca2f6d34fb4c80690f0685f7e291ab93bd2a4", + "tests/validation/run_j1.py": "51b758a271ff358f931b3140a80082294a67e66c2fec0f8c19319e37f92aadc4", + "tests/validation/run_j2_slot.py": "b7d2d3aa06fcafc3ac62ed4a50892afbdb7f86e5720ce75a39ce317b6f571dad", + "tests/validation/run_j3_coverage.py": "329869519b7078e854d96241a7aad8ef93f35ac9be83f0be502c3a93523c3b13", + "tests/validation/run_j3_reservoir.py": "47535bc3569ce68c888d38978bc4f9077fd763a17829c20c081be52bb18a2903", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9" + } +} diff --git a/tests/validation/multigrid/local_stress_v1_evidence/comparison.json b/tests/validation/multigrid/local_stress_v1_evidence/comparison.json new file mode 100644 index 0000000..d7d1b36 --- /dev/null +++ b/tests/validation/multigrid/local_stress_v1_evidence/comparison.json @@ -0,0 +1,560 @@ +{ + "comparison_scope": "Printed values only; no new numerical tolerances, no rerun, no claim of full-precision field equality. Current script prints lambda to 8dp, so old 10dp values are retained for provenance, not treated as changed results.", + "all_29_booleans_match_and_pass": true, + "boolean_checks": { + "finite_A_phi0.0000": true, + "cons_A_phi0.0000": true, + "finite_B_phi0.0000": true, + "cons_B_phi0.0000": true, + "finite_C_phi0.0000": true, + "cons_C_phi0.0000": true, + "finite_A_phi1.5708": true, + "cons_A_phi1.5708": true, + "finite_B_phi1.5708": true, + "cons_B_phi1.5708": true, + "finite_C_phi1.5708": true, + "cons_C_phi1.5708": true, + "finite_A_T_phi1.5708": true, + "cons_A_T_phi1.5708": true, + "transpose_ok": true, + "t0_AB_patch_ok_phi0.0000": true, + "t0_AC_out_ok_phi0.0000": true, + "init_mismatch_ok_phi0.0000": true, + "t0_AB_patch_ok_phi1.5708": true, + "t0_AC_out_ok_phi1.5708": true, + "init_mismatch_ok_phi1.5708": true, + "init_mismatch_ok_A_T_phi1.5708": true, + "stress_finite_C_phi0.0000": true, + "stress_finite_B_phi0.0000": true, + "stress_finite_A_phi0.0000": true, + "stress_finite_C_phi1.5708": true, + "stress_finite_B_phi1.5708": true, + "stress_finite_A_phi1.5708": true, + "stress_finite_A_T_phi1.5708": true + }, + "original_22_boolean_names_match_previous_shear": true, + "sections": { + "hard_checks": { + "identical_at_printed_precision": true, + "line_count": 11, + "diff": [] + }, + "stress_finite_checks": { + "identical_at_printed_precision": true, + "line_count": 9, + "diff": [] + }, + "summary_lines": { + "identical_at_printed_precision": true, + "line_count": 15, + "diff": [] + }, + "decay_fits": { + "identical_at_printed_precision": true, + "line_count": 7, + "diff": [] + } + }, + "summary_numeric_comparisons": [ + { + "name": "R phi0.0000", + "horsea_values": { + "A": "1.011774619306", + "B": "0.998555854025", + "C": "1.008383635570", + "A/B": "1.013237882716", + "A/C": "1.003362791319" + }, + "horsea_minus_grok": { + "A": "0E-12", + "B": "0E-12", + "C": "0E-12", + "A/B": "0E-12", + "A/C": "0E-12" + } + }, + { + "name": "PROFILE_A phi0.0000", + "horsea_values": [ + "9.91559495e-01", + "8.38223110e-01", + "5.53937362e-01", + "1.82688509e-01", + "-2.14687493e-01", + "-5.72526539e-01", + "-8.48939033e-01", + "-9.98789772e-01", + "-9.98789772e-01", + "-8.48939033e-01", + "-5.72526539e-01", + "-2.14687493e-01", + "1.82688509e-01", + "5.53937362e-01", + "8.38223110e-01", + "9.91559495e-01" + ], + "horsea_minus_grok": [ + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9" + ] + }, + { + "name": "PROFILE_B phi0.0000", + "horsea_values": [ + "9.79368883e-01", + "8.30268849e-01", + "5.54767909e-01", + "1.94808583e-01", + "-1.94808583e-01", + "-5.54767909e-01", + "-8.30268849e-01", + "-9.79368883e-01", + "-9.79368883e-01", + "-8.30268849e-01", + "-5.54767909e-01", + "-1.94808583e-01", + "1.94808583e-01", + "5.54767909e-01", + "8.30268849e-01", + "9.79368883e-01" + ], + "horsea_minus_grok": [ + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9" + ] + }, + { + "name": "PROFILE_C phi0.0000", + "horsea_values": [ + "9.89007827e-01", + "8.38440351e-01", + "5.60227931e-01", + "1.96725888e-01", + "-1.96725888e-01", + "-5.60227931e-01", + "-8.38440351e-01", + "-9.89007827e-01", + "-9.89007827e-01", + "-8.38440351e-01", + "-5.60227931e-01", + "-1.96725888e-01", + "1.96725888e-01", + "5.60227931e-01", + "8.38440351e-01", + "9.89007827e-01" + ], + "horsea_minus_grok": [ + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9" + ] + }, + { + "name": "PROFILE_A-B phi0.0000", + "horsea_values": [ + "1.21906117e-02", + "7.95426140e-03", + "-8.30546408e-04", + "-1.21200743e-02", + "-1.98789102e-02", + "-1.77586304e-02", + "-1.86701838e-02", + "-1.94208889e-02", + "-1.94208889e-02", + "-1.86701838e-02", + "-1.77586304e-02", + "-1.98789102e-02", + "-1.21200743e-02", + "-8.30546408e-04", + "7.95426140e-03", + "1.21906117e-02" + ], + "horsea_minus_grok": [ + "0E-10", + "0E-11", + "0E-12", + "0E-10", + "0E-10", + "0E-10", + "0E-10", + "0E-10", + "0E-10", + "0E-10", + "0E-10", + "0E-10", + "0E-10", + "0E-12", + "0E-11", + "0E-10" + ] + }, + { + "name": "PROFILE_A-C phi0.0000", + "horsea_values": [ + "2.55166826e-03", + "-2.17240307e-04", + "-6.29056929e-03", + "-1.40373794e-02", + "-1.79616052e-02", + "-1.22986075e-02", + "-1.04986821e-02", + "-9.78194544e-03", + "-9.78194544e-03", + "-1.04986821e-02", + "-1.22986075e-02", + "-1.79616052e-02", + "-1.40373794e-02", + "-6.29056929e-03", + "-2.17240307e-04", + "2.55166826e-03" + ], + "horsea_minus_grok": [ + "0E-11", + "0E-12", + "0E-11", + "0E-10", + "0E-10", + "0E-10", + "0E-10", + "0E-11", + "0E-11", + "0E-10", + "0E-10", + "0E-10", + "0E-10", + "0E-11", + "0E-12", + "0E-11" + ] + }, + { + "name": "R phi1.5708", + "horsea_values": { + "A": "1.011850480751", + "B": "0.998555854025", + "C": "1.008383635570", + "A/B": "1.013313853874", + "A/C": "1.003438022057" + }, + "horsea_minus_grok": { + "A": "0E-12", + "B": "0E-12", + "C": "0E-12", + "A/B": "0E-12", + "A/C": "0E-12" + } + }, + { + "name": "PROFILE_A phi1.5708", + "horsea_values": [ + "-1.99435683e-01", + "-5.68175817e-01", + "-8.52874579e-01", + "-1.00371150e+00", + "-9.86839227e-01", + "-8.33347608e-01", + "-5.58176761e-01", + "-1.96153580e-01", + "1.96153580e-01", + "5.58176761e-01", + "8.33347608e-01", + "9.86839227e-01", + "1.00371150e+00", + "8.52874579e-01", + "5.68175817e-01", + "1.99435683e-01" + ], + "horsea_minus_grok": [ + "0E-9", + "0E-9", + "0E-9", + "0E-8", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-8", + "0E-9", + "0E-9", + "0E-9" + ] + }, + { + "name": "PROFILE_B phi1.5708", + "horsea_values": [ + "-1.94808583e-01", + "-5.54767909e-01", + "-8.30268849e-01", + "-9.79368883e-01", + "-9.79368883e-01", + "-8.30268849e-01", + "-5.54767909e-01", + "-1.94808583e-01", + "1.94808583e-01", + "5.54767909e-01", + "8.30268849e-01", + "9.79368883e-01", + "9.79368883e-01", + "8.30268849e-01", + "5.54767909e-01", + "1.94808583e-01" + ], + "horsea_minus_grok": [ + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9" + ] + }, + { + "name": "PROFILE_C phi1.5708", + "horsea_values": [ + "-1.96725888e-01", + "-5.60227931e-01", + "-8.38440351e-01", + "-9.89007827e-01", + "-9.89007827e-01", + "-8.38440351e-01", + "-5.60227931e-01", + "-1.96725888e-01", + "1.96725888e-01", + "5.60227931e-01", + "8.38440351e-01", + "9.89007827e-01", + "9.89007827e-01", + "8.38440351e-01", + "5.60227931e-01", + "1.96725888e-01" + ], + "horsea_minus_grok": [ + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9", + "0E-9" + ] + }, + { + "name": "PROFILE_A-B phi1.5708", + "horsea_values": [ + "-4.62709942e-03", + "-1.34079086e-02", + "-2.26057300e-02", + "-2.43426175e-02", + "-7.47034346e-03", + "-3.07875936e-03", + "-3.40885205e-03", + "-1.34499672e-03", + "1.34499672e-03", + "3.40885205e-03", + "3.07875936e-03", + "7.47034346e-03", + "2.43426175e-02", + "2.26057300e-02", + "1.34079086e-02", + "4.62709942e-03" + ], + "horsea_minus_grok": [ + "0E-11", + "0E-10", + "0E-10", + "0E-10", + "0E-11", + "0E-11", + "0E-11", + "0E-11", + "0E-11", + "0E-11", + "0E-11", + "0E-11", + "0E-10", + "0E-10", + "0E-10", + "0E-11" + ] + }, + { + "name": "PROFILE_A-C phi1.5708", + "horsea_values": [ + "-2.70979435e-03", + "-7.94788568e-03", + "-1.44342283e-02", + "-1.47036740e-02", + "2.16860001e-03", + "5.09274236e-03", + "2.05117083e-03", + "5.72308350e-04", + "-5.72308350e-04", + "-2.05117083e-03", + "-5.09274236e-03", + "-2.16860001e-03", + "1.47036740e-02", + "1.44342283e-02", + "7.94788568e-03", + "2.70979435e-03" + ], + "horsea_minus_grok": [ + "0E-11", + "0E-11", + "0E-10", + "0E-10", + "0E-11", + "0E-11", + "0E-11", + "0E-12", + "0E-12", + "0E-11", + "0E-11", + "0E-11", + "0E-10", + "0E-10", + "0E-11", + "0E-11" + ] + }, + { + "name": "R A_T_phi1.5708", + "horsea_values": { + "R": "1.011850480751" + }, + "horsea_minus_grok": { + "R": "0E-12" + } + }, + { + "grok": "TRANSPOSE err=6.661338e-16 ok=True", + "horsea": "TRANSPOSE err=6.661338e-16 ok=True", + "identical": true + }, + { + "grok": "REF_SHA256=bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "horsea": "REF_SHA256=bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "identical": true + } + ], + "lambda_comparisons": [ + { + "run": "A_phi0.0000", + "horsea_current_8dp": "0.01585222", + "grok_current_8dp": "0.01585222", + "horsea_previous_shear_8dp": "0.01585222", + "horsea_previous_shear_10dp": "0.0158522189", + "current_minus_previous_at_8dp": "0E-8", + "current_minus_grok_at_8dp": "0E-8" + }, + { + "run": "B_phi0.0000", + "horsea_current_8dp": "0.01539917", + "grok_current_8dp": "0.01539917", + "horsea_previous_shear_8dp": "0.01539917", + "horsea_previous_shear_10dp": "0.0153991657", + "current_minus_previous_at_8dp": "0E-8", + "current_minus_grok_at_8dp": "0E-8" + }, + { + "run": "C_phi0.0000", + "horsea_current_8dp": "0.01554973", + "grok_current_8dp": "0.01554973", + "horsea_previous_shear_8dp": "0.01554973", + "horsea_previous_shear_10dp": "0.0155497331", + "current_minus_previous_at_8dp": "0E-8", + "current_minus_grok_at_8dp": "0E-8" + }, + { + "run": "A_phi1.5708", + "horsea_current_8dp": "0.01584192", + "grok_current_8dp": "0.01584192", + "horsea_previous_shear_8dp": "0.01584192", + "horsea_previous_shear_10dp": "0.0158419175", + "current_minus_previous_at_8dp": "0E-8", + "current_minus_grok_at_8dp": "0E-8" + }, + { + "run": "B_phi1.5708", + "horsea_current_8dp": "0.01539917", + "grok_current_8dp": "0.01539917", + "horsea_previous_shear_8dp": "0.01539917", + "horsea_previous_shear_10dp": "0.0153991657", + "current_minus_previous_at_8dp": "0E-8", + "current_minus_grok_at_8dp": "0E-8" + }, + { + "run": "C_phi1.5708", + "horsea_current_8dp": "0.01554973", + "grok_current_8dp": "0.01554973", + "horsea_previous_shear_8dp": "0.01554973", + "horsea_previous_shear_10dp": "0.0155497331", + "current_minus_previous_at_8dp": "0E-8", + "current_minus_grok_at_8dp": "0E-8" + } + ], + "stress_transpose_hard_assertion_present": false +} diff --git a/tests/validation/multigrid/local_stress_v1_evidence/manifest.json b/tests/validation/multigrid/local_stress_v1_evidence/manifest.json new file mode 100644 index 0000000..c6c44d8 --- /dev/null +++ b/tests/validation/multigrid/local_stress_v1_evidence/manifest.json @@ -0,0 +1,98 @@ +{ + "verified_utc": "2026-10-13T06:04:36.332815+00:00", + "head": "6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0", + "old_files_checked": 292, + "old_files_changed": [], + "old_git_status_entries_removed": [], + "only_authorized_new_paths": true, + "archive_path": "/tmp/celerislab-local-stress-input-20261013-0e277799.tar", + "archive_sha256": "5834b23711496beb152188df5f47ff8175baf7e52543774401bd2c1183433eed", + "reference_sha256": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "inputs": [ + { + "path": "tests/validation/multigrid/local_stress_v1_evidence/TABLE_local_stress_observable_v1.md", + "bytes": 2967, + "sha256": "d8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501", + "matches_original_tar_bytes": true + }, + { + "path": "tests/validation/multigrid/local_stress_observable_v1.py", + "bytes": 32574, + "sha256": "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456", + "matches_original_tar_bytes": true + }, + { + "path": "tests/validation/multigrid/local_stress_v1_evidence/stdout_local_stress_observable_v1.txt", + "bytes": 12238, + "sha256": "6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4", + "matches_original_tar_bytes": true + }, + { + "path": "tests/validation/multigrid/local_stress_v1_evidence/source_manifest.json", + "bytes": 622, + "sha256": "d2cf90b73458f493c665c9a281d06aef0c190cf0d143639fb77ab838c78f020c", + "matches_original_tar_bytes": true + } + ], + "input_bytes_unchanged": true, + "blocking_numerical_objections": [], + "execution_attempts": 1, + "hard_checks_passed": 29, + "grok_blocks_identical_at_printed_precision": true, + "previous_lambda_matches_at_8dp": true, + "claude_implementation_code_review": "Not completed: paused due to API error. Specification discussion is not code review.", + "horsea_review": "Completed before single bounded rerun; no substantive objection within diagnostic scope.", + "stress_transpose_hard_assertion": false, + "new_files_except_this_manifest": [ + { + "path": "tests/validation/multigrid/local_stress_observable_v1.py", + "bytes": 32574, + "sha256": "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456" + }, + { + "path": "tests/validation/multigrid/local_stress_v1_evidence/README.txt", + "bytes": 8239, + "sha256": "4f62314876047ee437bb9ecbf84798d2a9f6e85f6a3aef260277b85bcdb35fae" + }, + { + "path": "tests/validation/multigrid/local_stress_v1_evidence/TABLE_local_stress_observable_v1.md", + "bytes": 2967, + "sha256": "d8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501" + }, + { + "path": "tests/validation/multigrid/local_stress_v1_evidence/baseline.json", + "bytes": 43991, + "sha256": "64f6541447afbd15b1b15d802ad6f1b5042aaf84e7d4d2414e4ed4c52cf70507" + }, + { + "path": "tests/validation/multigrid/local_stress_v1_evidence/comparison.json", + "bytes": 13248, + "sha256": "be236671a501c31c06f7e266f6e0c0c2a89aede321a483452050ff37bf84c84a" + }, + { + "path": "tests/validation/multigrid/local_stress_v1_evidence/results_horsea.json", + "bytes": 2671, + "sha256": "f17b4644d19eb75d55deb7021ab679cb9e7922a2b46f1cacf8b6da6bfb9a2690" + }, + { + "path": "tests/validation/multigrid/local_stress_v1_evidence/run_once.py", + "bytes": 4313, + "sha256": "e629800291ef65ffea8555f66ec80bf15200552540b2a493a677bfb53d0830b3" + }, + { + "path": "tests/validation/multigrid/local_stress_v1_evidence/source_manifest.json", + "bytes": 622, + "sha256": "d2cf90b73458f493c665c9a281d06aef0c190cf0d143639fb77ab838c78f020c" + }, + { + "path": "tests/validation/multigrid/local_stress_v1_evidence/stdout_horsea.txt", + "bytes": 17091, + "sha256": "882f2cfb1dbdf82cce63c011397e7c2e6307bbcfec42a3510648d328cd6ddcfe" + }, + { + "path": "tests/validation/multigrid/local_stress_v1_evidence/stdout_local_stress_observable_v1.txt", + "bytes": 12238, + "sha256": "6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4" + } + ] +} diff --git a/tests/validation/multigrid/local_stress_v1_evidence/results_horsea.json b/tests/validation/multigrid/local_stress_v1_evidence/results_horsea.json new file mode 100644 index 0000000..79bdf00 --- /dev/null +++ b/tests/validation/multigrid/local_stress_v1_evidence/results_horsea.json @@ -0,0 +1,73 @@ +{ + "started_utc": "2026-10-13T06:01:08.222086+00:00", + "cwd": "/home/frank14f/CelerisLab/tests/validation/multigrid", + "parent_command": [ + "env", + "OPENBLAS_NUM_THREADS=1", + "PYTHONDONTWRITEBYTECODE=1", + "PYTHONNOUSERSITE=1", + "PYTHONOPTIMIZE=0", + "PYTHONPATH=/home/frank14f/CelerisLab/tests/validation/multigrid", + "CPU_REFERENCE_PATH=/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py", + "/usr/bin/prlimit", + "--as=268435456", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "/home/frank14f/CelerisLab/tests/validation/multigrid/local_stress_v1_evidence/run_once.py" + ], + "script_command": [ + "/usr/bin/prlimit", + "--as=268435456", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "/home/frank14f/CelerisLab/tests/validation/multigrid/local_stress_observable_v1.py" + ], + "environment": { + "OPENBLAS_NUM_THREADS": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONNOUSERSITE": "1", + "PYTHONOPTIMIZE": "0", + "PYTHONPATH": "/home/frank14f/CelerisLab/tests/validation/multigrid", + "CPU_REFERENCE_PATH": "/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py" + }, + "python_version": "3.10.13 (main, Sep 11 2023, 13:44:35) [GCC 11.2.0]", + "numpy_version_from_installed_metadata": "1.26.4", + "platform": "Linux-6.8.0-138-generic-x86_64-with-glibc2.35", + "hard_limits": { + "address_space_bytes": [ + 268435456, + 268435456 + ], + "output_file_bytes": [ + 2097152, + 2097152 + ], + "core_bytes": [ + 0, + 0 + ] + }, + "input_hashes_verified_before_execution": { + "local_stress_observable_v1.py": "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456", + "stdout_local_stress_observable_v1.txt": "6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4", + "TABLE_local_stress_observable_v1.md": "d8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501", + "source_manifest.json": "d2cf90b73458f493c665c9a281d06aef0c190cf0d143639fb77ab838c78f020c" + }, + "archive_sha256_verified_before_execution": "5834b23711496beb152188df5f47ff8175baf7e52543774401bd2c1183433eed", + "reference_sha256_verified_before_execution": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "planned_runs": 7, + "coarse_steps_per_run": 32, + "attempt": 1, + "returncode": 0, + "elapsed_seconds": 2.435032418987248, + "child_peak_rss_MiB": 38.41796875, + "parent_peak_rss_MiB": 18.75, + "completed_utc": "2026-10-13T06:01:10.671541+00:00", + "stdout_bytes": 17091 +} diff --git a/tests/validation/multigrid/local_stress_v1_evidence/run_once.py b/tests/validation/multigrid/local_stress_v1_evidence/run_once.py new file mode 100644 index 0000000..fa9c523 --- /dev/null +++ b/tests/validation/multigrid/local_stress_v1_evidence/run_once.py @@ -0,0 +1,84 @@ +"""Bounded execution recorder; refuses to overwrite evidence or repeat a run.""" +import datetime +import hashlib +import importlib.metadata +import json +import os +from pathlib import Path +import platform +import resource +import shlex +import subprocess +import sys +import time + +evidence = Path(__file__).resolve().parent +base = evidence.parent +script = base / "local_stress_observable_v1.py" +reference = base / "cpu_reference.py" +expected_env = { + "OPENBLAS_NUM_THREADS": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONNOUSERSITE": "1", + "PYTHONOPTIMIZE": "0", + "PYTHONPATH": str(base), + "CPU_REFERENCE_PATH": str(reference), +} +limits = { + "address_space_bytes": (resource.RLIMIT_AS, 268435456), + "output_file_bytes": (resource.RLIMIT_FSIZE, 2097152), + "core_bytes": (resource.RLIMIT_CORE, 0), +} +assert all(os.environ.get(k) == v for k, v in expected_env.items()) +assert all(resource.getrlimit(key) == (value, value) for key, value in limits.values()) +assert sys.executable == "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python" +assert hashlib.sha256(script.read_bytes()).hexdigest() == "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456" +assert hashlib.sha256(reference.read_bytes()).hexdigest() == "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e" +input_hashes = {'local_stress_observable_v1.py': '0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456', 'stdout_local_stress_observable_v1.txt': '6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4', 'TABLE_local_stress_observable_v1.md': 'd8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501', 'source_manifest.json': 'd2cf90b73458f493c665c9a281d06aef0c190cf0d143639fb77ab838c78f020c'} +for name, digest in input_hashes.items(): + path = (base if name.endswith(".py") else evidence) / name + assert hashlib.sha256(path.read_bytes()).hexdigest() == digest, name +archive_path = Path("/tmp/celerislab-local-stress-input-20261013-0e277799.tar") +archive_sha = "5834b23711496beb152188df5f47ff8175baf7e52543774401bd2c1183433eed" +assert hashlib.sha256(archive_path.read_bytes()).hexdigest() == archive_sha +log_path = evidence / "stdout_horsea.txt" +result_path = evidence / "results_horsea.json" +assert not log_path.exists() and not result_path.exists(), "Existing execution evidence; do not rerun" +prefix = ["/usr/bin/prlimit", "--as=268435456", "--fsize=2097152", "--core=0", "--", sys.executable, "-B"] +command = prefix + [str(script)] +report = { + "started_utc": datetime.datetime.now(datetime.timezone.utc).isoformat(), + "cwd": str(base), + "parent_command": ["env"] + [f"{k}={v}" for k, v in expected_env.items()] + prefix + [str(Path(__file__).resolve())], + "script_command": command, + "environment": expected_env, + "python_version": sys.version, + "numpy_version_from_installed_metadata": importlib.metadata.version("numpy"), + "platform": platform.platform(), + "hard_limits": {name: resource.getrlimit(key) for name, (key, _) in limits.items()}, + "input_hashes_verified_before_execution": input_hashes, + "archive_sha256_verified_before_execution": archive_sha, + "reference_sha256_verified_before_execution": hashlib.sha256(reference.read_bytes()).hexdigest(), + "planned_runs": 7, + "coarse_steps_per_run": 32, + "attempt": 1, +} +with log_path.open("xb", buffering=0) as log: + log.write(("RECORDER " + json.dumps(report) + "\nCOMMAND " + shlex.join(command) + "\n").encode()) + start = time.monotonic() + child = subprocess.run(command, cwd=base, stdout=log, stderr=subprocess.STDOUT, check=False) + report.update( + returncode=child.returncode, + elapsed_seconds=time.monotonic() - start, + child_peak_rss_MiB=resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss / 1024, + parent_peak_rss_MiB=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1024, + completed_utc=datetime.datetime.now(datetime.timezone.utc).isoformat(), + ) + log.write(("\nRUN_RESULT " + json.dumps(report) + "\n").encode()) +report["stdout_bytes"] = log_path.stat().st_size +with result_path.open("x") as result: + json.dump(report, result, indent=2) + result.write("\n") +print(json.dumps(report, indent=2)) +assert report["stdout_bytes"] < 2097152 +sys.exit(child.returncode if child.returncode >= 0 else 1) diff --git a/tests/validation/multigrid/local_stress_v1_evidence/source_manifest.json b/tests/validation/multigrid/local_stress_v1_evidence/source_manifest.json new file mode 100644 index 0000000..0516f18 --- /dev/null +++ b/tests/validation/multigrid/local_stress_v1_evidence/source_manifest.json @@ -0,0 +1,20 @@ +[ + { + "id": "1EBdGY3CxGm_uwCZ_L9vv3q6UgDoH01pM", + "name": "local_stress_observable_v1.py", + "bytes": 32574, + "sha256": "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456" + }, + { + "id": "1TpMS9MfWP3gnouHJ95MQ_lozKMPbgTSH", + "name": "stdout_local_stress_observable_v1.txt", + "bytes": 12238, + "sha256": "6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4" + }, + { + "id": "1l1HljRJEcCrJNgSGdWSdQ7OOvEjdRXqi", + "name": "TABLE_local_stress_observable_v1.md", + "bytes": 2967, + "sha256": "d8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501" + } +] diff --git a/tests/validation/multigrid/local_stress_v1_evidence/stdout_horsea.txt b/tests/validation/multigrid/local_stress_v1_evidence/stdout_horsea.txt new file mode 100644 index 0000000..a20c554 --- /dev/null +++ b/tests/validation/multigrid/local_stress_v1_evidence/stdout_horsea.txt @@ -0,0 +1,122 @@ +RECORDER {"started_utc": "2026-10-13T06:01:08.222086+00:00", "cwd": "/home/frank14f/CelerisLab/tests/validation/multigrid", "parent_command": ["env", "OPENBLAS_NUM_THREADS=1", "PYTHONDONTWRITEBYTECODE=1", "PYTHONNOUSERSITE=1", "PYTHONOPTIMIZE=0", "PYTHONPATH=/home/frank14f/CelerisLab/tests/validation/multigrid", "CPU_REFERENCE_PATH=/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py", "/usr/bin/prlimit", "--as=268435456", "--fsize=2097152", "--core=0", "--", "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", "-B", "/home/frank14f/CelerisLab/tests/validation/multigrid/local_stress_v1_evidence/run_once.py"], "script_command": ["/usr/bin/prlimit", "--as=268435456", "--fsize=2097152", "--core=0", "--", "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", "-B", "/home/frank14f/CelerisLab/tests/validation/multigrid/local_stress_observable_v1.py"], "environment": {"OPENBLAS_NUM_THREADS": "1", "PYTHONDONTWRITEBYTECODE": "1", "PYTHONNOUSERSITE": "1", "PYTHONOPTIMIZE": "0", "PYTHONPATH": "/home/frank14f/CelerisLab/tests/validation/multigrid", "CPU_REFERENCE_PATH": "/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py"}, "python_version": "3.10.13 (main, Sep 11 2023, 13:44:35) [GCC 11.2.0]", "numpy_version_from_installed_metadata": "1.26.4", "platform": "Linux-6.8.0-138-generic-x86_64-with-glibc2.35", "hard_limits": {"address_space_bytes": [268435456, 268435456], "output_file_bytes": [2097152, 2097152], "core_bytes": [0, 0]}, "input_hashes_verified_before_execution": {"local_stress_observable_v1.py": "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456", "stdout_local_stress_observable_v1.txt": "6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4", "TABLE_local_stress_observable_v1.md": "d8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501", "source_manifest.json": "d2cf90b73458f493c665c9a281d06aef0c190cf0d143639fb77ab838c78f020c"}, "archive_sha256_verified_before_execution": "5834b23711496beb152188df5f47ff8175baf7e52543774401bd2c1183433eed", "reference_sha256_verified_before_execution": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", "planned_runs": 7, "coarse_steps_per_run": 32, "attempt": 1} +COMMAND /usr/bin/prlimit --as=268435456 --fsize=2097152 --core=0 -- /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -B /home/frank14f/CelerisLab/tests/validation/multigrid/local_stress_observable_v1.py +=== local_stress_observable_v1 against CPUREF-0.3 === +REF_PATH=/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py +REF_SHA256=bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e +REF_SHA_MATCH=True +API_VERSION=CPUREF-0.3 +U0=0.001 tau_c=0.8 tau_f=1.1 steps=32 nu=0.1 k=0.39269908169872414 +nu*k^2=0.01542126 +ARRIVAL_STATE_POLICY: read CPUREF-0.3 State.coarse_f/fine_f at phase='arrival_f' + after N advance_coarse_once calls (tick=2N). That array IS post-stream pre-collision. + Uniform B/C use local collide-then-stream; f after 2N (B) or N (C) streams is arrival. + If arrival were unreachable without changing the reference, this script would STOP. +STRESS: Pi_neq=sum(cx*cy*f)-rho*ux*uy; sigma=-(1-1/(2*tau))*Pi_neq; 2x2 vol-avg of sigma. + No extra dx/dt factor. a_u=(2/256)sum u sin; P_sigma=(2/256)sum sigma cos; own a_u. + Profile s(j)=mean_x[4,12)(sigma)/ (rho0*nu*k*a_u). Transposed: R only, no profile. + +-- running C (uniform-coarse) phi0.0000 + ARRIVAL_ARRAY: uniform_C_f_after_32_stream_steps_(=coarse_step_32_arrival; collide-then-stream loop) +-- running B (uniform-fine) phi0.0000 + ARRIVAL_ARRAY: uniform_B_f_after_64_stream_steps_(=coarse_step_32_arrival; collide-then-stream loop) +-- running A (composite CPUREF) phi0.0000 + ARRIVAL_ARRAY: State.coarse_f + State.fine_f at phase='arrival_f' tick=64 (after 32 advance_coarse_once; arrival_f = post-stream pre-collision) + state.phase=arrival_f state.tick=64 +-- running C (uniform-coarse) phi1.5708 + ARRIVAL_ARRAY: uniform_C_f_after_32_stream_steps_(=coarse_step_32_arrival; collide-then-stream loop) +-- running B (uniform-fine) phi1.5708 + ARRIVAL_ARRAY: uniform_B_f_after_64_stream_steps_(=coarse_step_32_arrival; collide-then-stream loop) +-- running A (composite CPUREF) phi1.5708 + ARRIVAL_ARRAY: State.coarse_f + State.fine_f at phase='arrival_f' tick=64 (after 32 advance_coarse_once; arrival_f = post-stream pre-collision) + state.phase=arrival_f state.tick=64 +-- running A transpose phi=1.5707963267948966 + ARRIVAL_ARRAY: State.coarse_f + State.fine_f at phase='arrival_f' tick=64 (after 32 advance_coarse_once; arrival_f = post-stream pre-collision) + +=== HARD CHECKS (unchanged v0.2 set) === + finite[A_phi0.0000]=True cons=True mass_drift=5.969e-13 momx_drift=1.690e-13 momy_drift=2.753e-14 tol_abs=2.560e-10 init_rho_j_mismatch_vs_coarse_formula=1.110e-16 + finite[B_phi0.0000]=True cons=True mass_drift=7.105e-13 momx_drift=2.970e-15 momy_drift=3.553e-15 tol_abs=2.560e-10 + finite[C_phi0.0000]=True cons=True mass_drift=4.547e-13 momx_drift=4.607e-15 momy_drift=6.495e-15 tol_abs=2.560e-10 + finite[A_phi1.5708]=True cons=True mass_drift=8.242e-13 momx_drift=1.033e-13 momy_drift=9.015e-14 tol_abs=2.560e-10 init_rho_j_mismatch_vs_coarse_formula=1.110e-16 + finite[B_phi1.5708]=True cons=True mass_drift=6.821e-13 momx_drift=2.970e-15 momy_drift=3.553e-15 tol_abs=2.560e-10 + finite[C_phi1.5708]=True cons=True mass_drift=4.547e-13 momx_drift=4.607e-15 momy_drift=6.495e-15 tol_abs=2.560e-10 + finite[A_T_phi1.5708]=True cons=True mass_drift=7.105e-13 momx_drift=1.843e-14 momy_drift=6.062e-14 tol_abs=2.560e-10 init_rho_j_mismatch_vs_coarse_formula=1.110e-16 + transpose_ok=True max_err=6.661e-16 (tol=1.000e-15) + t0 phi0.0000: AB_patch=1.084e-19 ok=True AC_out=2.168e-19 ok=True init_mm=1.110e-16 ok=True + t0 phi1.5708: AB_patch=1.084e-19 ok=True AC_out=2.168e-19 ok=True init_mm=1.110e-16 ok=True + init_mismatch[A_T]=1.110e-16 ok=True + +=== STRESS FINITE CHECKS (addition) === + stress_finite[C_phi0.0000]=True R=1.00838364 a_u=5.991310e-04 P_sigma=2.372507e-05 + stress_finite[B_phi0.0000]=True R=0.99855585 a_u=6.078606e-04 P_sigma=2.383616e-05 + stress_finite[A_phi0.0000]=True R=1.01177462 a_u=5.949025e-04 P_sigma=2.363684e-05 + stress_finite[C_phi1.5708]=True R=1.00838364 a_u=5.991310e-04 P_sigma=2.372507e-05 + stress_finite[B_phi1.5708]=True R=0.99855585 a_u=6.078606e-04 P_sigma=2.383616e-05 + stress_finite[A_phi1.5708]=True R=1.01185048 a_u=5.950623e-04 P_sigma=2.364496e-05 + stress_finite[A_T_phi1.5708]=True R=1.01185048 a_u=5.950623e-04 P_sigma=2.364496e-05 + N_BOOLEAN_HARD_CHECKS_V02=22: cons_A_T_phi1.5708,cons_A_phi0.0000,cons_A_phi1.5708,cons_B_phi0.0000,cons_B_phi1.5708,cons_C_phi0.0000,cons_C_phi1.5708,finite_A_T_phi1.5708,finite_A_phi0.0000,finite_A_phi1.5708,finite_B_phi0.0000,finite_B_phi1.5708,finite_C_phi0.0000,finite_C_phi1.5708,init_mismatch_ok_A_T_phi1.5708,init_mismatch_ok_phi0.0000,init_mismatch_ok_phi1.5708,t0_AB_patch_ok_phi0.0000,t0_AB_patch_ok_phi1.5708,t0_AC_out_ok_phi0.0000,t0_AC_out_ok_phi1.5708,transpose_ok + N_BOOLEAN_HARD_CHECKS_WITH_STRESS=29 + +=== LOCAL STRESS OBSERVABLE at coarse step 32 === +FORMULA: R = P_sigma / (rho0 * nu * k * a_u); a_u from SAME run/tick/arrival +WORDING: reported diagnostics only; phi probes phase structure only; no mechanism claim + +-- phi0.0000 -- + R_A=1.0117746193 R_B=0.9985558540 R_C=1.0083836356 + R_A/R_B=1.0132378827 R_A/R_C=1.0033627913 + a_u A/B/C: 5.94902468e-04 6.07860566e-04 5.99130994e-04 + P_sigma A/B/C: 2.36368412e-05 2.38361559e-05 2.37250678e-05 + s_A(j): 9.915595e-01 8.382231e-01 5.539374e-01 1.826885e-01 -2.146875e-01 -5.725265e-01 -8.489390e-01 -9.987898e-01 -9.987898e-01 -8.489390e-01 -5.725265e-01 -2.146875e-01 1.826885e-01 5.539374e-01 8.382231e-01 9.915595e-01 + s_B(j): 9.793689e-01 8.302688e-01 5.547679e-01 1.948086e-01 -1.948086e-01 -5.547679e-01 -8.302688e-01 -9.793689e-01 -9.793689e-01 -8.302688e-01 -5.547679e-01 -1.948086e-01 1.948086e-01 5.547679e-01 8.302688e-01 9.793689e-01 + s_C(j): 9.890078e-01 8.384404e-01 5.602279e-01 1.967259e-01 -1.967259e-01 -5.602279e-01 -8.384404e-01 -9.890078e-01 -9.890078e-01 -8.384404e-01 -5.602279e-01 -1.967259e-01 1.967259e-01 5.602279e-01 8.384404e-01 9.890078e-01 + s_A-s_B: 1.219061e-02 7.954261e-03 -8.305464e-04 -1.212007e-02 -1.987891e-02 -1.775863e-02 -1.867018e-02 -1.942089e-02 -1.942089e-02 -1.867018e-02 -1.775863e-02 -1.987891e-02 -1.212007e-02 -8.305464e-04 7.954261e-03 1.219061e-02 + s_A-s_C: 2.551668e-03 -2.172403e-04 -6.290569e-03 -1.403738e-02 -1.796161e-02 -1.229861e-02 -1.049868e-02 -9.781945e-03 -9.781945e-03 -1.049868e-02 -1.229861e-02 -1.796161e-02 -1.403738e-02 -6.290569e-03 -2.172403e-04 2.551668e-03 + FACE_ROWS j=3,4,11,12 flagged: j3:A=1.82689e-01,B=1.94809e-01,C=1.96726e-01,A-B=-1.21201e-02,A-C=-1.40374e-02 j4:A=-2.14687e-01,B=-1.94809e-01,C=-1.96726e-01,A-B=-1.98789e-02,A-C=-1.79616e-02 j11:A=-2.14687e-01,B=-1.94809e-01,C=-1.96726e-01,A-B=-1.98789e-02,A-C=-1.79616e-02 j12:A=1.82689e-01,B=1.94809e-01,C=1.96726e-01,A-B=-1.21201e-02,A-C=-1.40374e-02 + +-- phi1.5708 -- + R_A=1.0118504808 R_B=0.9985558540 R_C=1.0083836356 + R_A/R_B=1.0133138539 R_A/R_C=1.0034380221 + a_u A/B/C: 5.95062313e-04 6.07860566e-04 5.99130994e-04 + P_sigma A/B/C: 2.36449649e-05 2.38361559e-05 2.37250678e-05 + s_A(j): -1.994357e-01 -5.681758e-01 -8.528746e-01 -1.003712e+00 -9.868392e-01 -8.333476e-01 -5.581768e-01 -1.961536e-01 1.961536e-01 5.581768e-01 8.333476e-01 9.868392e-01 1.003712e+00 8.528746e-01 5.681758e-01 1.994357e-01 + s_B(j): -1.948086e-01 -5.547679e-01 -8.302688e-01 -9.793689e-01 -9.793689e-01 -8.302688e-01 -5.547679e-01 -1.948086e-01 1.948086e-01 5.547679e-01 8.302688e-01 9.793689e-01 9.793689e-01 8.302688e-01 5.547679e-01 1.948086e-01 + s_C(j): -1.967259e-01 -5.602279e-01 -8.384404e-01 -9.890078e-01 -9.890078e-01 -8.384404e-01 -5.602279e-01 -1.967259e-01 1.967259e-01 5.602279e-01 8.384404e-01 9.890078e-01 9.890078e-01 8.384404e-01 5.602279e-01 1.967259e-01 + s_A-s_B: -4.627099e-03 -1.340791e-02 -2.260573e-02 -2.434262e-02 -7.470343e-03 -3.078759e-03 -3.408852e-03 -1.344997e-03 1.344997e-03 3.408852e-03 3.078759e-03 7.470343e-03 2.434262e-02 2.260573e-02 1.340791e-02 4.627099e-03 + s_A-s_C: -2.709794e-03 -7.947886e-03 -1.443423e-02 -1.470367e-02 2.168600e-03 5.092742e-03 2.051171e-03 5.723084e-04 -5.723084e-04 -2.051171e-03 -5.092742e-03 -2.168600e-03 1.470367e-02 1.443423e-02 7.947886e-03 2.709794e-03 + FACE_ROWS j=3,4,11,12 flagged: j3:A=-1.00371e+00,B=-9.79369e-01,C=-9.89008e-01,A-B=-2.43426e-02,A-C=-1.47037e-02 j4:A=-9.86839e-01,B=-9.79369e-01,C=-9.89008e-01,A-B=-7.47034e-03,A-C=2.16860e-03 j11:A=9.86839e-01,B=9.79369e-01,C=9.89008e-01,A-B=7.47034e-03,A-C=-2.16860e-03 j12:A=1.00371e+00,B=9.79369e-01,C=9.89008e-01,A-B=2.43426e-02,A-C=1.47037e-02 + +-- A_T phi=1.5708 (R only, no profile) -- + R_A_T=1.0118504808 a_u=5.95062313e-04 P_sigma=2.36449649e-05 + profile=None (transpose) + +=== DECAY FITS (informational; same as v0.2) === + analytic lambda = 0.01542126 + A phi0.0000: lambda=0.01585222 stderr=8.572e-08 R2=1.000000 A0=1.000000e-03 A32=5.987423e-04 + B phi0.0000: lambda=0.01539917 stderr=3.372e-15 R2=1.000000 A0=1.000000e-03 A32=6.117840e-04 + C phi0.0000: lambda=0.01554973 stderr=1.906e-08 R2=1.000000 A0=1.000000e-03 A32=6.029981e-04 + A phi1.5708: lambda=0.01584192 stderr=2.131e-07 R2=1.000000 A0=1.000000e-03 A32=5.989032e-04 + B phi1.5708: lambda=0.01539917 stderr=3.372e-15 R2=1.000000 A0=1.000000e-03 A32=6.117840e-04 + C phi1.5708: lambda=0.01554973 stderr=1.906e-08 R2=1.000000 A0=1.000000e-03 A32=6.029981e-04 + +=== NUMERIC SUMMARY === +ALL_HARD_CHECKS_PASS_V02=True +ALL_HARD_CHECKS_PASS_WITH_STRESS=True +runtime_sec=2.26 +SUMMARY_LINES_BEGIN +R phi0.0000 A=1.011774619306 B=0.998555854025 C=1.008383635570 A/B=1.013237882716 A/C=1.003362791319 +PROFILE_A phi0.0000 9.91559495e-01 8.38223110e-01 5.53937362e-01 1.82688509e-01 -2.14687493e-01 -5.72526539e-01 -8.48939033e-01 -9.98789772e-01 -9.98789772e-01 -8.48939033e-01 -5.72526539e-01 -2.14687493e-01 1.82688509e-01 5.53937362e-01 8.38223110e-01 9.91559495e-01 +PROFILE_B phi0.0000 9.79368883e-01 8.30268849e-01 5.54767909e-01 1.94808583e-01 -1.94808583e-01 -5.54767909e-01 -8.30268849e-01 -9.79368883e-01 -9.79368883e-01 -8.30268849e-01 -5.54767909e-01 -1.94808583e-01 1.94808583e-01 5.54767909e-01 8.30268849e-01 9.79368883e-01 +PROFILE_C phi0.0000 9.89007827e-01 8.38440351e-01 5.60227931e-01 1.96725888e-01 -1.96725888e-01 -5.60227931e-01 -8.38440351e-01 -9.89007827e-01 -9.89007827e-01 -8.38440351e-01 -5.60227931e-01 -1.96725888e-01 1.96725888e-01 5.60227931e-01 8.38440351e-01 9.89007827e-01 +PROFILE_A-B phi0.0000 1.21906117e-02 7.95426140e-03 -8.30546408e-04 -1.21200743e-02 -1.98789102e-02 -1.77586304e-02 -1.86701838e-02 -1.94208889e-02 -1.94208889e-02 -1.86701838e-02 -1.77586304e-02 -1.98789102e-02 -1.21200743e-02 -8.30546408e-04 7.95426140e-03 1.21906117e-02 +PROFILE_A-C phi0.0000 2.55166826e-03 -2.17240307e-04 -6.29056929e-03 -1.40373794e-02 -1.79616052e-02 -1.22986075e-02 -1.04986821e-02 -9.78194544e-03 -9.78194544e-03 -1.04986821e-02 -1.22986075e-02 -1.79616052e-02 -1.40373794e-02 -6.29056929e-03 -2.17240307e-04 2.55166826e-03 +R phi1.5708 A=1.011850480751 B=0.998555854025 C=1.008383635570 A/B=1.013313853874 A/C=1.003438022057 +PROFILE_A phi1.5708 -1.99435683e-01 -5.68175817e-01 -8.52874579e-01 -1.00371150e+00 -9.86839227e-01 -8.33347608e-01 -5.58176761e-01 -1.96153580e-01 1.96153580e-01 5.58176761e-01 8.33347608e-01 9.86839227e-01 1.00371150e+00 8.52874579e-01 5.68175817e-01 1.99435683e-01 +PROFILE_B phi1.5708 -1.94808583e-01 -5.54767909e-01 -8.30268849e-01 -9.79368883e-01 -9.79368883e-01 -8.30268849e-01 -5.54767909e-01 -1.94808583e-01 1.94808583e-01 5.54767909e-01 8.30268849e-01 9.79368883e-01 9.79368883e-01 8.30268849e-01 5.54767909e-01 1.94808583e-01 +PROFILE_C phi1.5708 -1.96725888e-01 -5.60227931e-01 -8.38440351e-01 -9.89007827e-01 -9.89007827e-01 -8.38440351e-01 -5.60227931e-01 -1.96725888e-01 1.96725888e-01 5.60227931e-01 8.38440351e-01 9.89007827e-01 9.89007827e-01 8.38440351e-01 5.60227931e-01 1.96725888e-01 +PROFILE_A-B phi1.5708 -4.62709942e-03 -1.34079086e-02 -2.26057300e-02 -2.43426175e-02 -7.47034346e-03 -3.07875936e-03 -3.40885205e-03 -1.34499672e-03 1.34499672e-03 3.40885205e-03 3.07875936e-03 7.47034346e-03 2.43426175e-02 2.26057300e-02 1.34079086e-02 4.62709942e-03 +PROFILE_A-C phi1.5708 -2.70979435e-03 -7.94788568e-03 -1.44342283e-02 -1.47036740e-02 2.16860001e-03 5.09274236e-03 2.05117083e-03 5.72308350e-04 -5.72308350e-04 -2.05117083e-03 -5.09274236e-03 -2.16860001e-03 1.47036740e-02 1.44342283e-02 7.94788568e-03 2.70979435e-03 +R A_T_phi1.5708 R=1.011850480751 +TRANSPOSE err=6.661338e-16 ok=True +REF_SHA256=bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e +SUMMARY_LINES_END + +RUN_RESULT {"started_utc": "2026-10-13T06:01:08.222086+00:00", "cwd": "/home/frank14f/CelerisLab/tests/validation/multigrid", "parent_command": ["env", "OPENBLAS_NUM_THREADS=1", "PYTHONDONTWRITEBYTECODE=1", "PYTHONNOUSERSITE=1", "PYTHONOPTIMIZE=0", "PYTHONPATH=/home/frank14f/CelerisLab/tests/validation/multigrid", "CPU_REFERENCE_PATH=/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py", "/usr/bin/prlimit", "--as=268435456", "--fsize=2097152", "--core=0", "--", "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", "-B", "/home/frank14f/CelerisLab/tests/validation/multigrid/local_stress_v1_evidence/run_once.py"], "script_command": ["/usr/bin/prlimit", "--as=268435456", "--fsize=2097152", "--core=0", "--", "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", "-B", "/home/frank14f/CelerisLab/tests/validation/multigrid/local_stress_observable_v1.py"], "environment": {"OPENBLAS_NUM_THREADS": "1", "PYTHONDONTWRITEBYTECODE": "1", "PYTHONNOUSERSITE": "1", "PYTHONOPTIMIZE": "0", "PYTHONPATH": "/home/frank14f/CelerisLab/tests/validation/multigrid", "CPU_REFERENCE_PATH": "/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py"}, "python_version": "3.10.13 (main, Sep 11 2023, 13:44:35) [GCC 11.2.0]", "numpy_version_from_installed_metadata": "1.26.4", "platform": "Linux-6.8.0-138-generic-x86_64-with-glibc2.35", "hard_limits": {"address_space_bytes": [268435456, 268435456], "output_file_bytes": [2097152, 2097152], "core_bytes": [0, 0]}, "input_hashes_verified_before_execution": {"local_stress_observable_v1.py": "0e2777990359a7cf2bb29884173b7b01de37c49bcf49e1f29fc59fe83d62b456", "stdout_local_stress_observable_v1.txt": "6a826e5ad729ce45af6879a07a1c659d8b4a21403fde5b9c6d9696cc6a5b09d4", "TABLE_local_stress_observable_v1.md": "d8ff0568d9c473a4bb09396a8948ddc8dc5af2f0f3a23ac84d238814fc779501", "source_manifest.json": "d2cf90b73458f493c665c9a281d06aef0c190cf0d143639fb77ab838c78f020c"}, "archive_sha256_verified_before_execution": "5834b23711496beb152188df5f47ff8175baf7e52543774401bd2c1183433eed", "reference_sha256_verified_before_execution": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", "planned_runs": 7, "coarse_steps_per_run": 32, "attempt": 1, "returncode": 0, "elapsed_seconds": 2.435032418987248, "child_peak_rss_MiB": 38.41796875, "parent_peak_rss_MiB": 18.75, "completed_utc": "2026-10-13T06:01:10.671541+00:00"} diff --git a/tests/validation/multigrid/local_stress_v1_evidence/stdout_local_stress_observable_v1.txt b/tests/validation/multigrid/local_stress_v1_evidence/stdout_local_stress_observable_v1.txt new file mode 100644 index 0000000..692ffe1 --- /dev/null +++ b/tests/validation/multigrid/local_stress_v1_evidence/stdout_local_stress_observable_v1.txt @@ -0,0 +1,118 @@ +=== local_stress_observable_v1 against CPUREF-0.3 === +REF_PATH=/workspace/shear_diag/cpu_reference_v0.3.py +REF_SHA256=bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e +REF_SHA_MATCH=True +API_VERSION=CPUREF-0.3 +U0=0.001 tau_c=0.8 tau_f=1.1 steps=32 nu=0.1 k=0.39269908169872414 +nu*k^2=0.01542126 +ARRIVAL_STATE_POLICY: read CPUREF-0.3 State.coarse_f/fine_f at phase='arrival_f' + after N advance_coarse_once calls (tick=2N). That array IS post-stream pre-collision. + Uniform B/C use local collide-then-stream; f after 2N (B) or N (C) streams is arrival. + If arrival were unreachable without changing the reference, this script would STOP. +STRESS: Pi_neq=sum(cx*cy*f)-rho*ux*uy; sigma=-(1-1/(2*tau))*Pi_neq; 2x2 vol-avg of sigma. + No extra dx/dt factor. a_u=(2/256)sum u sin; P_sigma=(2/256)sum sigma cos; own a_u. + Profile s(j)=mean_x[4,12)(sigma)/ (rho0*nu*k*a_u). Transposed: R only, no profile. + +-- running C (uniform-coarse) phi0.0000 + ARRIVAL_ARRAY: uniform_C_f_after_32_stream_steps_(=coarse_step_32_arrival; collide-then-stream loop) +-- running B (uniform-fine) phi0.0000 + ARRIVAL_ARRAY: uniform_B_f_after_64_stream_steps_(=coarse_step_32_arrival; collide-then-stream loop) +-- running A (composite CPUREF) phi0.0000 + ARRIVAL_ARRAY: State.coarse_f + State.fine_f at phase='arrival_f' tick=64 (after 32 advance_coarse_once; arrival_f = post-stream pre-collision) + state.phase=arrival_f state.tick=64 +-- running C (uniform-coarse) phi1.5708 + ARRIVAL_ARRAY: uniform_C_f_after_32_stream_steps_(=coarse_step_32_arrival; collide-then-stream loop) +-- running B (uniform-fine) phi1.5708 + ARRIVAL_ARRAY: uniform_B_f_after_64_stream_steps_(=coarse_step_32_arrival; collide-then-stream loop) +-- running A (composite CPUREF) phi1.5708 + ARRIVAL_ARRAY: State.coarse_f + State.fine_f at phase='arrival_f' tick=64 (after 32 advance_coarse_once; arrival_f = post-stream pre-collision) + state.phase=arrival_f state.tick=64 +-- running A transpose phi=1.5707963267948966 + ARRIVAL_ARRAY: State.coarse_f + State.fine_f at phase='arrival_f' tick=64 (after 32 advance_coarse_once; arrival_f = post-stream pre-collision) + +=== HARD CHECKS (unchanged v0.2 set) === + finite[A_phi0.0000]=True cons=True mass_drift=5.969e-13 momx_drift=1.690e-13 momy_drift=2.753e-14 tol_abs=2.560e-10 init_rho_j_mismatch_vs_coarse_formula=1.110e-16 + finite[B_phi0.0000]=True cons=True mass_drift=7.105e-13 momx_drift=2.970e-15 momy_drift=3.553e-15 tol_abs=2.560e-10 + finite[C_phi0.0000]=True cons=True mass_drift=4.547e-13 momx_drift=4.607e-15 momy_drift=6.495e-15 tol_abs=2.560e-10 + finite[A_phi1.5708]=True cons=True mass_drift=8.242e-13 momx_drift=1.033e-13 momy_drift=9.015e-14 tol_abs=2.560e-10 init_rho_j_mismatch_vs_coarse_formula=1.110e-16 + finite[B_phi1.5708]=True cons=True mass_drift=6.821e-13 momx_drift=2.970e-15 momy_drift=3.553e-15 tol_abs=2.560e-10 + finite[C_phi1.5708]=True cons=True mass_drift=4.547e-13 momx_drift=4.607e-15 momy_drift=6.495e-15 tol_abs=2.560e-10 + finite[A_T_phi1.5708]=True cons=True mass_drift=7.105e-13 momx_drift=1.843e-14 momy_drift=6.062e-14 tol_abs=2.560e-10 init_rho_j_mismatch_vs_coarse_formula=1.110e-16 + transpose_ok=True max_err=6.661e-16 (tol=1.000e-15) + t0 phi0.0000: AB_patch=1.084e-19 ok=True AC_out=2.168e-19 ok=True init_mm=1.110e-16 ok=True + t0 phi1.5708: AB_patch=1.084e-19 ok=True AC_out=2.168e-19 ok=True init_mm=1.110e-16 ok=True + init_mismatch[A_T]=1.110e-16 ok=True + +=== STRESS FINITE CHECKS (addition) === + stress_finite[C_phi0.0000]=True R=1.00838364 a_u=5.991310e-04 P_sigma=2.372507e-05 + stress_finite[B_phi0.0000]=True R=0.99855585 a_u=6.078606e-04 P_sigma=2.383616e-05 + stress_finite[A_phi0.0000]=True R=1.01177462 a_u=5.949025e-04 P_sigma=2.363684e-05 + stress_finite[C_phi1.5708]=True R=1.00838364 a_u=5.991310e-04 P_sigma=2.372507e-05 + stress_finite[B_phi1.5708]=True R=0.99855585 a_u=6.078606e-04 P_sigma=2.383616e-05 + stress_finite[A_phi1.5708]=True R=1.01185048 a_u=5.950623e-04 P_sigma=2.364496e-05 + stress_finite[A_T_phi1.5708]=True R=1.01185048 a_u=5.950623e-04 P_sigma=2.364496e-05 + N_BOOLEAN_HARD_CHECKS_V02=22: cons_A_T_phi1.5708,cons_A_phi0.0000,cons_A_phi1.5708,cons_B_phi0.0000,cons_B_phi1.5708,cons_C_phi0.0000,cons_C_phi1.5708,finite_A_T_phi1.5708,finite_A_phi0.0000,finite_A_phi1.5708,finite_B_phi0.0000,finite_B_phi1.5708,finite_C_phi0.0000,finite_C_phi1.5708,init_mismatch_ok_A_T_phi1.5708,init_mismatch_ok_phi0.0000,init_mismatch_ok_phi1.5708,t0_AB_patch_ok_phi0.0000,t0_AB_patch_ok_phi1.5708,t0_AC_out_ok_phi0.0000,t0_AC_out_ok_phi1.5708,transpose_ok + N_BOOLEAN_HARD_CHECKS_WITH_STRESS=29 + +=== LOCAL STRESS OBSERVABLE at coarse step 32 === +FORMULA: R = P_sigma / (rho0 * nu * k * a_u); a_u from SAME run/tick/arrival +WORDING: reported diagnostics only; phi probes phase structure only; no mechanism claim + +-- phi0.0000 -- + R_A=1.0117746193 R_B=0.9985558540 R_C=1.0083836356 + R_A/R_B=1.0132378827 R_A/R_C=1.0033627913 + a_u A/B/C: 5.94902468e-04 6.07860566e-04 5.99130994e-04 + P_sigma A/B/C: 2.36368412e-05 2.38361559e-05 2.37250678e-05 + s_A(j): 9.915595e-01 8.382231e-01 5.539374e-01 1.826885e-01 -2.146875e-01 -5.725265e-01 -8.489390e-01 -9.987898e-01 -9.987898e-01 -8.489390e-01 -5.725265e-01 -2.146875e-01 1.826885e-01 5.539374e-01 8.382231e-01 9.915595e-01 + s_B(j): 9.793689e-01 8.302688e-01 5.547679e-01 1.948086e-01 -1.948086e-01 -5.547679e-01 -8.302688e-01 -9.793689e-01 -9.793689e-01 -8.302688e-01 -5.547679e-01 -1.948086e-01 1.948086e-01 5.547679e-01 8.302688e-01 9.793689e-01 + s_C(j): 9.890078e-01 8.384404e-01 5.602279e-01 1.967259e-01 -1.967259e-01 -5.602279e-01 -8.384404e-01 -9.890078e-01 -9.890078e-01 -8.384404e-01 -5.602279e-01 -1.967259e-01 1.967259e-01 5.602279e-01 8.384404e-01 9.890078e-01 + s_A-s_B: 1.219061e-02 7.954261e-03 -8.305464e-04 -1.212007e-02 -1.987891e-02 -1.775863e-02 -1.867018e-02 -1.942089e-02 -1.942089e-02 -1.867018e-02 -1.775863e-02 -1.987891e-02 -1.212007e-02 -8.305464e-04 7.954261e-03 1.219061e-02 + s_A-s_C: 2.551668e-03 -2.172403e-04 -6.290569e-03 -1.403738e-02 -1.796161e-02 -1.229861e-02 -1.049868e-02 -9.781945e-03 -9.781945e-03 -1.049868e-02 -1.229861e-02 -1.796161e-02 -1.403738e-02 -6.290569e-03 -2.172403e-04 2.551668e-03 + FACE_ROWS j=3,4,11,12 flagged: j3:A=1.82689e-01,B=1.94809e-01,C=1.96726e-01,A-B=-1.21201e-02,A-C=-1.40374e-02 j4:A=-2.14687e-01,B=-1.94809e-01,C=-1.96726e-01,A-B=-1.98789e-02,A-C=-1.79616e-02 j11:A=-2.14687e-01,B=-1.94809e-01,C=-1.96726e-01,A-B=-1.98789e-02,A-C=-1.79616e-02 j12:A=1.82689e-01,B=1.94809e-01,C=1.96726e-01,A-B=-1.21201e-02,A-C=-1.40374e-02 + +-- phi1.5708 -- + R_A=1.0118504808 R_B=0.9985558540 R_C=1.0083836356 + R_A/R_B=1.0133138539 R_A/R_C=1.0034380221 + a_u A/B/C: 5.95062313e-04 6.07860566e-04 5.99130994e-04 + P_sigma A/B/C: 2.36449649e-05 2.38361559e-05 2.37250678e-05 + s_A(j): -1.994357e-01 -5.681758e-01 -8.528746e-01 -1.003712e+00 -9.868392e-01 -8.333476e-01 -5.581768e-01 -1.961536e-01 1.961536e-01 5.581768e-01 8.333476e-01 9.868392e-01 1.003712e+00 8.528746e-01 5.681758e-01 1.994357e-01 + s_B(j): -1.948086e-01 -5.547679e-01 -8.302688e-01 -9.793689e-01 -9.793689e-01 -8.302688e-01 -5.547679e-01 -1.948086e-01 1.948086e-01 5.547679e-01 8.302688e-01 9.793689e-01 9.793689e-01 8.302688e-01 5.547679e-01 1.948086e-01 + s_C(j): -1.967259e-01 -5.602279e-01 -8.384404e-01 -9.890078e-01 -9.890078e-01 -8.384404e-01 -5.602279e-01 -1.967259e-01 1.967259e-01 5.602279e-01 8.384404e-01 9.890078e-01 9.890078e-01 8.384404e-01 5.602279e-01 1.967259e-01 + s_A-s_B: -4.627099e-03 -1.340791e-02 -2.260573e-02 -2.434262e-02 -7.470343e-03 -3.078759e-03 -3.408852e-03 -1.344997e-03 1.344997e-03 3.408852e-03 3.078759e-03 7.470343e-03 2.434262e-02 2.260573e-02 1.340791e-02 4.627099e-03 + s_A-s_C: -2.709794e-03 -7.947886e-03 -1.443423e-02 -1.470367e-02 2.168600e-03 5.092742e-03 2.051171e-03 5.723084e-04 -5.723084e-04 -2.051171e-03 -5.092742e-03 -2.168600e-03 1.470367e-02 1.443423e-02 7.947886e-03 2.709794e-03 + FACE_ROWS j=3,4,11,12 flagged: j3:A=-1.00371e+00,B=-9.79369e-01,C=-9.89008e-01,A-B=-2.43426e-02,A-C=-1.47037e-02 j4:A=-9.86839e-01,B=-9.79369e-01,C=-9.89008e-01,A-B=-7.47034e-03,A-C=2.16860e-03 j11:A=9.86839e-01,B=9.79369e-01,C=9.89008e-01,A-B=7.47034e-03,A-C=-2.16860e-03 j12:A=1.00371e+00,B=9.79369e-01,C=9.89008e-01,A-B=2.43426e-02,A-C=1.47037e-02 + +-- A_T phi=1.5708 (R only, no profile) -- + R_A_T=1.0118504808 a_u=5.95062313e-04 P_sigma=2.36449649e-05 + profile=None (transpose) + +=== DECAY FITS (informational; same as v0.2) === + analytic lambda = 0.01542126 + A phi0.0000: lambda=0.01585222 stderr=8.572e-08 R2=1.000000 A0=1.000000e-03 A32=5.987423e-04 + B phi0.0000: lambda=0.01539917 stderr=3.372e-15 R2=1.000000 A0=1.000000e-03 A32=6.117840e-04 + C phi0.0000: lambda=0.01554973 stderr=1.906e-08 R2=1.000000 A0=1.000000e-03 A32=6.029981e-04 + A phi1.5708: lambda=0.01584192 stderr=2.131e-07 R2=1.000000 A0=1.000000e-03 A32=5.989032e-04 + B phi1.5708: lambda=0.01539917 stderr=3.372e-15 R2=1.000000 A0=1.000000e-03 A32=6.117840e-04 + C phi1.5708: lambda=0.01554973 stderr=1.906e-08 R2=1.000000 A0=1.000000e-03 A32=6.029981e-04 + +=== NUMERIC SUMMARY === +ALL_HARD_CHECKS_PASS_V02=True +ALL_HARD_CHECKS_PASS_WITH_STRESS=True +runtime_sec=0.77 +SUMMARY_LINES_BEGIN +R phi0.0000 A=1.011774619306 B=0.998555854025 C=1.008383635570 A/B=1.013237882716 A/C=1.003362791319 +PROFILE_A phi0.0000 9.91559495e-01 8.38223110e-01 5.53937362e-01 1.82688509e-01 -2.14687493e-01 -5.72526539e-01 -8.48939033e-01 -9.98789772e-01 -9.98789772e-01 -8.48939033e-01 -5.72526539e-01 -2.14687493e-01 1.82688509e-01 5.53937362e-01 8.38223110e-01 9.91559495e-01 +PROFILE_B phi0.0000 9.79368883e-01 8.30268849e-01 5.54767909e-01 1.94808583e-01 -1.94808583e-01 -5.54767909e-01 -8.30268849e-01 -9.79368883e-01 -9.79368883e-01 -8.30268849e-01 -5.54767909e-01 -1.94808583e-01 1.94808583e-01 5.54767909e-01 8.30268849e-01 9.79368883e-01 +PROFILE_C phi0.0000 9.89007827e-01 8.38440351e-01 5.60227931e-01 1.96725888e-01 -1.96725888e-01 -5.60227931e-01 -8.38440351e-01 -9.89007827e-01 -9.89007827e-01 -8.38440351e-01 -5.60227931e-01 -1.96725888e-01 1.96725888e-01 5.60227931e-01 8.38440351e-01 9.89007827e-01 +PROFILE_A-B phi0.0000 1.21906117e-02 7.95426140e-03 -8.30546408e-04 -1.21200743e-02 -1.98789102e-02 -1.77586304e-02 -1.86701838e-02 -1.94208889e-02 -1.94208889e-02 -1.86701838e-02 -1.77586304e-02 -1.98789102e-02 -1.21200743e-02 -8.30546408e-04 7.95426140e-03 1.21906117e-02 +PROFILE_A-C phi0.0000 2.55166826e-03 -2.17240307e-04 -6.29056929e-03 -1.40373794e-02 -1.79616052e-02 -1.22986075e-02 -1.04986821e-02 -9.78194544e-03 -9.78194544e-03 -1.04986821e-02 -1.22986075e-02 -1.79616052e-02 -1.40373794e-02 -6.29056929e-03 -2.17240307e-04 2.55166826e-03 +R phi1.5708 A=1.011850480751 B=0.998555854025 C=1.008383635570 A/B=1.013313853874 A/C=1.003438022057 +PROFILE_A phi1.5708 -1.99435683e-01 -5.68175817e-01 -8.52874579e-01 -1.00371150e+00 -9.86839227e-01 -8.33347608e-01 -5.58176761e-01 -1.96153580e-01 1.96153580e-01 5.58176761e-01 8.33347608e-01 9.86839227e-01 1.00371150e+00 8.52874579e-01 5.68175817e-01 1.99435683e-01 +PROFILE_B phi1.5708 -1.94808583e-01 -5.54767909e-01 -8.30268849e-01 -9.79368883e-01 -9.79368883e-01 -8.30268849e-01 -5.54767909e-01 -1.94808583e-01 1.94808583e-01 5.54767909e-01 8.30268849e-01 9.79368883e-01 9.79368883e-01 8.30268849e-01 5.54767909e-01 1.94808583e-01 +PROFILE_C phi1.5708 -1.96725888e-01 -5.60227931e-01 -8.38440351e-01 -9.89007827e-01 -9.89007827e-01 -8.38440351e-01 -5.60227931e-01 -1.96725888e-01 1.96725888e-01 5.60227931e-01 8.38440351e-01 9.89007827e-01 9.89007827e-01 8.38440351e-01 5.60227931e-01 1.96725888e-01 +PROFILE_A-B phi1.5708 -4.62709942e-03 -1.34079086e-02 -2.26057300e-02 -2.43426175e-02 -7.47034346e-03 -3.07875936e-03 -3.40885205e-03 -1.34499672e-03 1.34499672e-03 3.40885205e-03 3.07875936e-03 7.47034346e-03 2.43426175e-02 2.26057300e-02 1.34079086e-02 4.62709942e-03 +PROFILE_A-C phi1.5708 -2.70979435e-03 -7.94788568e-03 -1.44342283e-02 -1.47036740e-02 2.16860001e-03 5.09274236e-03 2.05117083e-03 5.72308350e-04 -5.72308350e-04 -2.05117083e-03 -5.09274236e-03 -2.16860001e-03 1.47036740e-02 1.44342283e-02 7.94788568e-03 2.70979435e-03 +R A_T_phi1.5708 R=1.011850480751 +TRANSPOSE err=6.661338e-16 ok=True +REF_SHA256=bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e +SUMMARY_LINES_END diff --git a/tests/validation/multigrid/shear_v0_2_evidence/README.txt b/tests/validation/multigrid/shear_v0_2_evidence/README.txt new file mode 100644 index 0000000..772f74a --- /dev/null +++ b/tests/validation/multigrid/shear_v0_2_evidence/README.txt @@ -0,0 +1,115 @@ +Shear diagnostic v0.2 — Horsea review and single bounded run +2026-10-13 (Asia/Shanghai); completed 13:02:45 local time. + +Result: exit 0; N_BOOLEAN_HARD_CHECKS=22; ALL_HARD_CHECKS_PASS=True. +The delivered script ran exactly once: 7 runs, 32 coarse steps each. No extra +cases, tests, retries, algorithm edits or tolerance changes were performed. +The original script, Grok output, joint report and source manifest are retained +byte-for-byte. The reference remains the pinned CPUREF-0.3 original. + +Review before execution +Read the complete 790-line script, joint report, Grok output, input manifest +and existing reference. Followed .github/skills/lbm-ref-architecture-guard/ +SKILL.md and its discovery/architecture checklists. No applicable AGENTS.md +was found on the workspace/test-directory ancestor chain. No numerical issue +blocks this fixed-scope rerun; this is Horsea's own review, not the Mac review. + +Reference findings (local files read only; no external package execution): +1. ref/lbmpy/src/lbmpy/relaxationrates.py: lattice nu=(tau-1/2)/3. +2. ref/OpenLB/src/core/unitConverter.h: physical nu=lattice nu*dx^2/dt. + With dx_f=dt_f=1/2, tau_c=.8 and tau_f=1.1 both give physical nu=.1; + the lattice velocity conversion is unchanged and B needs two fine steps. +3. ref/lbmpy/tests/full_scenarios/shear_wave/scenario_shear_wave.py: + periodic modes decay as exp(-nu*|k|^2*t); log-amplitude fits estimate + decay. This supports the diagnostic, not an accuracy threshold here. +4. ref/lbmpy/tests/test_shear_flow.py: the second moment needs the convective + contribution and relaxation correction considered before stress comparison. + The supplied global Pi_xy mean is not used as stress evidence. +5. Existing cpu_reference.py: arrival_f input/output, tick advances by 2, + two fine hops, one coarse ghost explosion, closed-corner coalescence. + Reviewed full source and confirmed the unchanged hash before execution. + +Architecture/scope: script main -> run_uniform(B/C), run_composite(A/A_T) -> +reference advance_coarse_once -> existing collision/hops/coalescence. Observation +restricts rho and j to the same 16x16 coarse cells before dividing to obtain u. +All observations are arrival_f. Exact cell-average sine velocity includes sinc +and the patch coordinate offset; equilibrium of that velocity is not the exact +cell average of nonlinear equilibrium populations. Fit 4..32 means coarse steps +(reference ticks 8..64), despite the legacy PER-TICK table heading. +Only the new script and this evidence directory are in scope. No src, existing +test, strategy document, old evidence, reference or DynamisLab changes. + +Nonblocking limits: composite conservation uses the reference's _leaf_totals; +this diagnostic is not a fresh independent conservation implementation. The +uniform solver has an unused intermediate equilibrium calculation; it does not +change its returned values. Retained both without cleanup to preserve delivery +bytes. The explicit CPU_REFERENCE_PATH is required in this layout because the +script's default filename is cpu_reference_v0.3.py. + +Execution evidence +results_horsea.json records the exact complete parent/child argv, cwd, process +environment, versions, timestamps, hard limits, exit code and measured memory. +run_once.py is the stdlib-only recorder, not another numerical test. It refuses +existing execution logs/results and checks the script/reference hashes and hard +limits before launching. Both it and the child ran through existing prlimit: + address space 268435456 bytes (soft=hard) + file size 2097152 bytes (soft=hard), core 0 +OPENBLAS_NUM_THREADS=1, PYTHONDONTWRITEBYTECODE=1, PYTHONNOUSERSITE=1. +PYTHONPATH is this exact multigrid directory; CPU_REFERENCE_PATH is its exact +cpu_reference.py. PYTHONOPTIMIZE=0 keeps assertions enabled. No global changes. +Existing Python 3.10.13 / NumPy 1.26.4; no dependency installation. +Start/end UTC: 05:02:42.804589 / 05:02:45.056308 on 2026-10-13. +Child wall time 2.237032 s; peak child RSS 37.69140625 MiB, parent 18.75 MiB. +Combined stdout/stderr plus recorder metadata: 11421 bytes, below 2 MiB. +No CelerisLab, Simulation or pycuda imports; no production/GPU/SSH/system work. + +Comparison with Grok +HARD CHECKS and SUMMARY_LINES blocks match exactly at printed precision. +All 22 individual Boolean values were parsed and matched, and checked against +the printed list of 22 names. All 33 summary values match; all printed numeric +differences in these two blocks are zero. See comparison.json for each value. +This is not a claim of full-precision field or whole-stdout byte equality; +reference path, runtime and recorder metadata are environment-specific. + +lambda per coarse step: + A phi0 0.0158522189 + A phi(pi/2) 0.0158419175 + B both 0.0153991657 + C both 0.0155497331 + analytic 0.0154212569 +Conservation mass drift <=8.242e-13, momentum drift <=1.690e-13, versus +unchanged mass-scaled tolerance 2.560e-10. Transpose error 6.661338e-16 +passes 1e-15. Initial matches and all finite-state checks pass unchanged. + +Interpretation qualifications to the preserved joint report +The ~2.94% / ~2.88% excess decay relative to B is a diagnostic observation +over this fixed window, not a hard-threshold failure. A good exponential fit +over steps 4..32 does not establish longer-time persistence or exclude all +initialization effects. Symmetry cancels the global Pi mean; it is not stress +transfer evidence. Time-held ghost supply and unscaled nonequilibrium copying +are candidate explanations, not an exhaustive set or an identified mechanism. +In particular, a negative time-interpolation result would not establish the +other candidate by elimination. Original joint_report.md remains unchanged. + +Next minimal verification — specification only, not implemented or run +First specify a phase- and unit-matched local shear observation on the same +7-run/32-step setup: arrival_f Pi_xy^neq=sum(cx*cy*f)-rho*ux*uy, restricted +with consistent volume weighting and the appropriate relaxation/unit conversion. +Measure a cosine shear-mode projection and signed profiles on both sides of +the patch faces, with B/C as controls; avoid cancellation by a domain mean. +Keep all 22 checks, initialization and fit window fixed. Report differences +without inventing a pass/fail stress threshold. This can test localization and +phase structure, but does not alone prove causation. +Before any later time-interpolated-ghost variant, jointly specify the available +donor time levels, arrival_f/postcollision_g phase, interpolation order and flux +accounting. Coarse g(t+1) is unavailable before the present fine hops; silently +reordering the step or using unspecified future data would confound that test. +No such variant, new observation code or reference continuation is part of this run. + +Audit +baseline.json freezes HEAD, Git status and 281 existing file hashes before any +input extraction. Its scope includes tracked/nonignored project files and the +prior baseline's ignored records; excludes the read-only ref tree and bytecode. +manifest.json records final old-file/input/reference verification and every new +file's path, bytes and SHA256, except its own hash reported in the handoff. +No commit or push. Stopped for joint acceptance. diff --git a/tests/validation/multigrid/shear_v0_2_evidence/baseline.json b/tests/validation/multigrid/shear_v0_2_evidence/baseline.json new file mode 100644 index 0000000..70d9c9f --- /dev/null +++ b/tests/validation/multigrid/shear_v0_2_evidence/baseline.json @@ -0,0 +1,289 @@ +{ + "created_utc": "2026-10-13T04:59:54.914211+00:00", + "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/README.md\n?? docs/design/integrated_architecture.md\n?? docs/design/multi_level_grid_architecture.md\n?? docs/design/multi_level_summary.md\n?? docs/design/multi_level_visual_reference.md\n?? docs/design/spatial_coupling_refinement.md\n?? docs/multilevel_grid_architecture_analysis.md\n?? research/audit-2026-10-09/REVIEW.zh-CN.md\n?? research/audit-2026-10-09/architecture-cpu-results.json\n?? research/audit-2026-10-09/architecture-report.md\n?? research/audit-2026-10-09/numerical-report.md\n?? research/audit-2026-10-09/numerical_collision_results.json\n?? research/audit-2026-10-09/numerical_compile_results.json\n?? research/audit-2026-10-09/numerical_semantics_results.json\n?? research/audit-2026-10-09/root-initializers-report.md\n?? research/audit-2026-10-09/state-report.md\n?? research/audit-2026-10-09/state_results.json\n?? research/design-2026-10-09/Contracts.lean\n?? research/design-2026-10-09/PLAN.zh-CN.md\n?? research/design-2026-10-09/api-architecture-study.md\n?? research/design-2026-10-09/grid-study.md\n?? research/design-2026-10-09/jet-study.md\n?? research/design-2026-10-09/jet_closure_check.py\n?? research/design-2026-10-09/jet_closure_results.json\n?? research/design-2026-10-09/math-and-history.md\n?? research/design-2026-10-09/math-checks.json\n?? research/design-2026-10-09/math_checks.py\n?? research/j1-2026-10-12/REVIEW.md\n?? research/j1-2026-10-12/baseline-status.txt\n?? research/j1-2026-10-12/baseline.json\n?? research/j1-2026-10-12/incremental.diff\n?? research/j1-2026-10-12/results.json\n?? research/j2-slot-2026-10-12/REVIEW.md\n?? research/j2-slot-2026-10-12/baseline-status.txt\n?? research/j2-slot-2026-10-12/baseline.json\n?? research/j2-slot-2026-10-12/incremental.diff\n?? research/j2-slot-2026-10-12/results.json\n?? research/j3-coverage-2026-10-12/REVIEW.md\n?? research/j3-coverage-2026-10-12/baseline-status.txt\n?? research/j3-coverage-2026-10-12/baseline.json\n?? research/j3-coverage-2026-10-12/incremental.diff\n?? research/j3-coverage-2026-10-12/negative-budget-20744.h5\n?? research/j3-coverage-2026-10-12/negative-end-20760.h5\n?? research/j3-coverage-2026-10-12/restart-21280.h5\n?? research/j3-coverage-2026-10-12/restart-reference-21296.h5\n?? research/j3-coverage-2026-10-12/results.json\n?? research/j3-coverage-2026-10-12/verification.json\n?? research/j3-lag-2026-10-12/REVIEW.md\n?? research/j3-lag-2026-10-12/baseline-status.txt\n?? research/j3-lag-2026-10-12/baseline.json\n?? research/j3-lag-2026-10-12/end-21280.h5\n?? research/j3-lag-2026-10-12/incremental.diff\n?? research/j3-lag-2026-10-12/results.json\n?? research/j3-lag-2026-10-12/start-20760.h5\n?? research/j3-lag-2026-10-12/trajectory.h5\n?? research/j3-offline-2026-10-12/REVIEW.md\n?? research/j3-offline-2026-10-12/lags.csv\n?? research/j3-offline-2026-10-12/localization.png\n?? research/j3-offline-2026-10-12/regions.csv\n?? research/j3-offline-2026-10-12/results.json\n?? research/j3-reservoir-2026-10-12/REVIEW.md\n?? research/j3-reservoir-2026-10-12/baseline-status.txt\n?? research/j3-reservoir-2026-10-12/baseline.json\n?? research/j3-reservoir-2026-10-12/incremental.diff\n?? research/j3-reservoir-2026-10-12/results.json\n?? research/repair-2026-10-10/TRON_HANDOFF.md\n?? research/repair-2026-10-10/baseline-hashes.json\n?? research/repair-2026-10-10/baseline-status.txt\n?? research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff\n?? research/repair-2026-10-10/classic-results.json\n?? research/repair-2026-10-10/classic-signals.npz\n?? research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h\n?? research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h\n?? research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h\n?? research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h\n?? research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb\n?? research/repair-2026-10-10/provenance.json\n?? research/repair-2026-10-10/repair-architecture.md\n?? research/repair-2026-10-10/repair-numerical.md\n?? research/repair-2026-10-10/repair-state.md\n?? src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh\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/collision_regression.cpp\n?? tests/unit/cpp/planar_velocity.cpp\n?? tests/unit/cpp/reservoir.cpp\n?? tests/unit/cpp/semantic_regression.cpp\n?? tests/unit/cpp/slot_profile.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_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/MULTIGRID_VERIFICATION_STRATEGY.md\n?? tests/validation/multigrid/cpu_reference.py\n?? tests/validation/multigrid/cpu_reference_v0.2.py\n?? tests/validation/multigrid/cpuref_0_3_evidence/README.txt\n?? tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md\n?? tests/validation/multigrid/cpuref_0_3_evidence/baseline.json\n?? tests/validation/multigrid/cpuref_0_3_evidence/manifest.json\n?? tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json\n?? tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt\n?? tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt\n?? tests/validation/multigrid/test_cpu_reference.py\n?? tests/validation/multigrid/test_open_corner_negative_control.py\n?? tests/validation/multigrid/test_tron_additions.py\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", + "hash_scope": "Tracked and nonignored untracked regular files excluding ref and bytecode, plus all prior 269-file baseline paths; ref is read-only research material.", + "hashes": { + ".cursor/rules/cuda-style.mdc": "5810cf8cff793a11ba5dedafaa8a4e7d7d3debb728d837ca1903ff6dc8d6fdb9", + ".cursor/rules/project-layout.mdc": "aeed1cd9d48447bcfcfb6a77250af7c5a3d500de4c6b2591c5684696fa04c3ec", + ".cursor/rules/python-style.mdc": "ece75cb724d7dc46cb8dab7ecf8d710a90b503001da0d506ea4bf772ce395e21", + ".cursorignore": "9f072faa815a6c6d4dc791a424201404f0f623338681ae3d2fcbdf86db1bd035", + ".gitignore": "de25151f4cfdf29ca64032e509398e1829c7ded2449ccff803b2fd87d859ae6c", + "LICENSE": "e98392425e9a0007d0d69f0f7c912c2dc1b59061a6197223962aac45599c76ea", + "README.md": "982d0df8b766b1d5017ba702b75e8b3cec8d22f57af8f434be27ea251652596c", + "docs/audit/audit_round2.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "docs/audit/body_refactor_notes.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "docs/audit/config_diagnosis.md": "b601652df0cac36a8faf2b317b11853221353716a25184cd9b2dc41373a7f183", + "docs/audit/kernel_layer_audit.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "docs/design/README.md": "98242c6960866d9b75aaf363f703edf02c4210bc38da1a340e9f6add49c6a3ce", + "docs/design/integrated_architecture.md": "c26b0d301321fe4b86d83d11c7e0b8d0c0545ee2995afa563966f004e9788132", + "docs/design/multi_level_grid_architecture.md": "e56a67d9129f2e3c311342e21a3fb2ed14bd492dd881949b251d5d9ac577bdee", + "docs/design/multi_level_summary.md": "eebf23e0bec9b154e5ce2128e2806e7558a7d4824b2c700cfd16afd1158b2354", + "docs/design/multi_level_visual_reference.md": "cad4bfbd561e5650ec297334529334b662a1ed35f7373c61f34ee22ecf1f66bd", + "docs/design/spatial_coupling_refinement.md": "36c878c7afad524999d89fa842297a98a0433e0283e78b36ca734ddbf8723ed8", + "docs/multilevel_grid_architecture_analysis.md": "90309730b1759d63531cb258c30db990ab71ca1b56ae47d0bbe2f4e2ae52012c", + "docs/performance_analysis.md": "ba01aaa4d3c02b61a8dc55fd00518ac291ebbed79b6574190d6b7234a1158fcb", + "docs/tests_overview.md": "ffc9591fd7baa4261b2c1ce9cfa7aa13a3554a8d5df712035806266a5eaade3f", + "docs/validation_specs/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "docs/validation_specs/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "docs/validation_specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "docs/validation_specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "docs/validation_specs/exp_ctrl_matrix.md": "b7250576c23292988b6ef4bcfd080f611d41edc413c3cebd0eadcc8596049470", + "docs/validation_specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "output/round3_compatibility_summary.md": "319f2e6abde4b34cc4ec90ef461d8ebb85dd5a3ac1736cfa7a3fb110f2a69df9", + "pyproject.toml": "f24ab9ad3a6a728a9382b1bce2e721612fc76635f35c6f96dfddaa853b6e5a9c", + "research/audit-2026-10-09/REVIEW.zh-CN.md": "2841fd3aa7a6baedbe1079d90915c8b05212b133824ed6abccaa1f09656eaefe", + "research/audit-2026-10-09/architecture-cpu-results.json": "e1b809210005c8765b13fddbb5ed710d15f6fcbb4c5788a4064f3e88808433ef", + "research/audit-2026-10-09/architecture-report.md": "861079dc3f4ced9fdc41bfb22002d32e190c0d630d3ba2f138f9dc7a949b8371", + "research/audit-2026-10-09/numerical-report.md": "970330b3a593f79f09866ce6ae82bc0ddd81226230d0a6ff06ae8ae756ee80da", + "research/audit-2026-10-09/numerical_collision_results.json": "51e5c263bb8cde82cedef2ccfdbf5ef657742a80218d7896b1ff877516e59693", + "research/audit-2026-10-09/numerical_compile_results.json": "c3b0ae02072a2ec408ada7513b542ec255f6855cb743a3ed7f91bd8f31504f44", + "research/audit-2026-10-09/numerical_semantics_results.json": "b95b065b594aa2911740dab216f87936c9bf7f7fa25acfda93b5738443564035", + "research/audit-2026-10-09/root-initializers-report.md": "ca448457c444949d5d0e1e10fa7121064510b77fc4c3512580900f0299219867", + "research/audit-2026-10-09/state-report.md": "f8708807efc2e109810c5955f7c1884a932668c0b3cb2963c2df3b09f2a3d5c4", + "research/audit-2026-10-09/state_results.json": "da9170df3e11231c73f20e5e79ed68e08966673d1dd52004ea6b6a279afc0dcd", + "research/design-2026-10-09/Contracts.lean": "2442d9a778ef20e8af3fecf23be6fea6d73c6299ff744c9664b652bc5ee3f034", + "research/design-2026-10-09/PLAN.zh-CN.md": "0341dd7ee306a040340c8e5dedb07a109e931c27dbf3c994d072aa78e3b6bc67", + "research/design-2026-10-09/api-architecture-study.md": "d6fb45ec784f0e1db55fb9f34e137b9f551db0b9b39fd4f0ef247a78fc34eedf", + "research/design-2026-10-09/grid-study.md": "4435dc1275ec5e15b118becc6ac391f306195d1e5beaa58037b1aff3bb2465c7", + "research/design-2026-10-09/jet-study.md": "a362142ef04a5ad5dbb4c9db9d221b1199dccec53780c8f2da49a15201cfe529", + "research/design-2026-10-09/jet_closure_check.py": "fde45d0f8518740ef5c0bf0fe7635d6adaf9a2e789927dd4e68e991c138ddc30", + "research/design-2026-10-09/jet_closure_results.json": "12cf7d400a206f9f9ec9ea6ad251fe6bb0232e27bcbed22fbc1ead2c0fc7d249", + "research/design-2026-10-09/math-and-history.md": "64f8c82e4949d6f58b46faa09800958714859c36cad20bbeeae8b449ae7a6099", + "research/design-2026-10-09/math-checks.json": "94750381954317cde8d649db26beaed8ea945666572a05030ca2b4d97d384011", + "research/design-2026-10-09/math_checks.py": "4254983a783fe4bad8888b3d7c243c87d991c7bbf242edb0f56f25cbaefee890", + "research/j1-2026-10-12/REVIEW.md": "13004a4f140acdcf59acb57e9e2dda1bb95763d30060f822a7c206c94b813a9f", + "research/j1-2026-10-12/baseline-status.txt": "ac398360e05b746b89ae0c3acfe202b5122e650a3bb1ff234ab26f874a303e64", + "research/j1-2026-10-12/baseline.json": "ad7afdf7b3913d11c07343e971fe2f43c2d1a2b99e3d5904a6ba89e3bb0b24fb", + "research/j1-2026-10-12/checkpoint-gpu.log": "adfe3d77d2e6c6f6184dccc0267b4404b20a7709505d5ff5affed0ed4a618083", + "research/j1-2026-10-12/cpu.log": "60cac097f7c4f11401df2aacb43a248640555e7628d2829c4680c71db34e9640", + "research/j1-2026-10-12/gpu-validation.log": "d1e9f2aea17a85eddcd94b81c700738ce073214857b55c28abd1219ff1edbed7", + "research/j1-2026-10-12/gpu.log": "8659a78ea52bbf8eb923d46ea71636ce63cd322352d5c98a74f631e666dd8cfb", + "research/j1-2026-10-12/incremental.diff": "a454c23da7b0011645949c0fbf64d0c41ecfdab5642b1b7c5119868005d3c721", + "research/j1-2026-10-12/results.json": "449f8a17dacac0fc6d2489c4b10bac330dbbbdb38fad3ce54f739ac8c6d48e85", + "research/j2-slot-2026-10-12/REVIEW.md": "10c4a94ffc32e0a2c4e0f6593b7cfc28479b5869f279f0b9d0b708fa3a47d1e6", + "research/j2-slot-2026-10-12/baseline-status.txt": "812616e2d941efcf854e1b37d6e662dda1aaf2b69074fcc04017133e13b72166", + "research/j2-slot-2026-10-12/baseline.json": "e82a1844145fd0cbc585c581b29f80b56193f122cfe1dfa7578f26904a720285", + "research/j2-slot-2026-10-12/cli.log": "9482ad7101d501f27f92e204b2f3ae5c6d91bd887b525aa31cb4a2a188f3cb92", + "research/j2-slot-2026-10-12/cpu.log": "91aba5961006909fbbb860429a9d3cfc930112a0d74c7788bc51c0a5897b47e5", + "research/j2-slot-2026-10-12/gpu-serialization-failure.log": "df804e53b35e7ddaad79a17842b4b5fd9d834e29ca2d56edb00e835848d09200", + "research/j2-slot-2026-10-12/gpu-validation.log": "223351b52c70fa4523289f3a1b3db435a11286379253280470900ffe397580a6", + "research/j2-slot-2026-10-12/incremental.diff": "c9e391bc91438cd912c1ed5a419705d4388522f672c67a066cfc055e814e699f", + "research/j2-slot-2026-10-12/results.json": "7d35ca7989aed5380e0a45de7f583972566fc516a051da63c53b35514e267494", + "research/j3-coverage-2026-10-12/REVIEW.md": "7293f3f3442855c8521698605aab504e026915a7bf1e77f5a24710d89a812443", + "research/j3-coverage-2026-10-12/baseline-status.txt": "31c949b11b20d7cd4202dba16882b5712aa1653da0cb2da2f0ebd69bf488040e", + "research/j3-coverage-2026-10-12/baseline.json": "d8844104f2665a25bfc417ee29becf89ab3955fac9105b5ddb12cfb1fe2a55b0", + "research/j3-coverage-2026-10-12/gpu-validation.log": "505cd5a5db46d7984aefb2a614151c25c4ace0e7d2a52e02c3e4f9792fd8eb95", + "research/j3-coverage-2026-10-12/incremental.diff": "98aa7855d5d6b91b4509a924c8a5aabab4339ba29c7e7dc2d91262c48e3848ca", + "research/j3-coverage-2026-10-12/negative-budget-20744.h5": "c09d75fc4a2cff68039a0956bd9d32b79b9cd3a6b386c72b4db54c214b110cd8", + "research/j3-coverage-2026-10-12/negative-end-20760.h5": "bd0bd063579d625e358762b1fdde5ac11bfcf739646a847fb77a4a2031011b9b", + "research/j3-coverage-2026-10-12/restart-21280.h5": "3e89c12c16f91f76ca9acd909e0fa7d42df6fbb5e870b299aa08ca42bc3e3dc9", + "research/j3-coverage-2026-10-12/restart-reference-21296.h5": "7192f510dd7820675aa1de130f55514136fba782cf77f92545189918a7e0c328", + "research/j3-coverage-2026-10-12/results.json": "02460981ad49c9cc13b4246abad1d8afd2599c61bfb545a6e32da9bbcd5c0db1", + "research/j3-coverage-2026-10-12/verification.json": "205986efd2b41635721b7fd20288be982348c765180102c7102750ba088f3a28", + "research/j3-lag-2026-10-12/REVIEW.md": "f388b64b0cc0413dc9865afda90ed24de666dda0d6cdb821b4363ce1b73631b3", + "research/j3-lag-2026-10-12/baseline-status.txt": "e0b69879084f54afac1a3bc3701f1de9819068190c815ae84421f02f83cad9f7", + "research/j3-lag-2026-10-12/baseline.json": "5e9a920813fe3d775110af85af92970d5245a7040ace804445e432353b77e489", + "research/j3-lag-2026-10-12/end-21280.h5": "19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588", + "research/j3-lag-2026-10-12/gpu-availability.log": "b227a519b8286849cfdf842573bd451803da048c6b27af9517f6b8964cd3aa39", + "research/j3-lag-2026-10-12/gpu-diagnostic.log": "97956b517072b7c34e2e29e2a23f87eafb19b9eda786a4b8149e4a2eaed76ee9", + "research/j3-lag-2026-10-12/host-check.log": "b2b6d262934b3abf9e0f0bdbde14b339cb977f7bffe391c17b51b5d067862dda", + "research/j3-lag-2026-10-12/incremental.diff": "ebdf66c72daf17b926482f79a1a30bf0eb2d27fc930a7bb62e5449ebcf72fcc7", + "research/j3-lag-2026-10-12/results.json": "00435ac7e402943e55e702fac1beb5af8cafe71967999658bcde2b29077b1fa8", + "research/j3-lag-2026-10-12/start-20760.h5": "6c4cba5928c77566c2afc32231311a3986831c18fea766faadebb101243399e2", + "research/j3-lag-2026-10-12/trajectory.h5": "2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986", + "research/j3-offline-2026-10-12/REVIEW.md": "d9902c58498e73c29e054b23adb968f7e1e14421cba5c58d03bbc5a50159ae79", + "research/j3-offline-2026-10-12/cpu-analysis.log": "bc02a9b197fc15ae1b503ca54655a7622d4361f9b45b7848ff9c387ea3665f11", + "research/j3-offline-2026-10-12/lags.csv": "fbd9addd413f24c47f4411317e872265bb774e8e1724fe169412befa860ae94d", + "research/j3-offline-2026-10-12/localization.png": "a72907638e32b0ecfc2205bea438e7b408f40aad86217ce6ad9b4877840c9cfc", + "research/j3-offline-2026-10-12/regions.csv": "3a8fc640b61d70e3b7f73d2bf8ac2bd3f720adf39a90dfda6180430e0489efae", + "research/j3-offline-2026-10-12/results.json": "cdb857bea6f4e06ed15acf773505ce6d5147f8cb8ce0a53cc368ee267cde6361", + "research/j3-reservoir-2026-10-12/REVIEW.md": "1ea5f860728584ea6cbe40ba3994e40471102d8e2cf6d93e28fe47222cba0cab", + "research/j3-reservoir-2026-10-12/baseline-status.txt": "0ef1a8c9878c4053ebc1a7d4bace6d4ec38bf27ace167b4239ddbb1c6c897e20", + "research/j3-reservoir-2026-10-12/baseline.json": "847fefd1eae971985d34d04d89ee6d6f1c91f6940c54fe351d112faba7bc6838", + "research/j3-reservoir-2026-10-12/cpu.log": "b33f6c1a1b0ee67968c4cff85d491e46e30e0d6c796b552629714ab8b5dcead0", + "research/j3-reservoir-2026-10-12/gpu-availability-sandbox.log": "1d58470512e583a0acfabf6896ee5f31e5b493b8231aed54b864f64eb275b02c", + "research/j3-reservoir-2026-10-12/gpu-validation.log": "ff04024db197e332f37c912a96413e3251fd0186947348ffbc33af6f4a899f2c", + "research/j3-reservoir-2026-10-12/incremental.diff": "fae312831d71e46dd477a640b06ed927853a9e735d26bf9f5868927fa31cfa56", + "research/j3-reservoir-2026-10-12/results.json": "49685de7679a14860258abf1753aaa6d116ad709b868d907ddb40e74c9b845ea", + "research/repair-2026-10-10/TRON_HANDOFF.md": "f8aaa3d99cd133c2055d4adf396a0a57d14f6006aea19e87611bd1c2c1b53a88", + "research/repair-2026-10-10/baseline-hashes.json": "d6a7d5f9ec5bceb0e7927d55603d9c5e70105982cd945723454659b19ab476e6", + "research/repair-2026-10-10/baseline-status.txt": "074088d793014e3b8154c58718058c7d300fb45595f5129fa957ef1e4cec38e2", + "research/repair-2026-10-10/checkpoint-domain-2026-10-12.diff": "292b4bafe7a62d4fbbf7c165eb99929336edfcaa16b15f34f72ab71fcd928391", + "research/repair-2026-10-10/classic-results.json": "a5d15305f516fd378b54cf9029102be58a83a55a7bad4b8e058fcfe0cc9898f4", + "research/repair-2026-10-10/classic-signals.npz": "820c9a0b0713d7455f0a5839ac2cd5ee706086d1a26461225dcdb095673421e2", + "research/repair-2026-10-10/final-gpu.log": "988bb97256d17b88c14f3793b15880d727ecb285abe62e7d2ae27a16729651c3", + "research/repair-2026-10-10/final-unit.log": "a892a39ecf88125558538cadce2cb5dc46d106b993b164e03da4ebb0eee68cef", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "research/repair-2026-10-10/original-user-files/src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "research/repair-2026-10-10/original-user-files/tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "research/repair-2026-10-10/provenance.json": "a81b7e32ecf7182c9617df1b39bbb063a05ef89290ad501bac4573cd5e8a6832", + "research/repair-2026-10-10/repair-architecture.md": "49be42ff5c994017f3175e17efda14d84f0b68f8ecd239f66ccee38415b60c5a", + "research/repair-2026-10-10/repair-numerical.md": "0272ebfa8c519aad161c520542cf53156574661609b91fd5ccad7955fdf2bd7b", + "research/repair-2026-10-10/repair-state.md": "4d4aa1ec0c11a87d2c8380912e7ed74cf5c910ae42e5cc529effde36c9020969", + "research/repair-2026-10-10/simplification-checks.log": "c9f15e870d02003480adf1a7f2fe4a9aca66c1934c4477619f05c8a4798ba85b", + "setup.py": "bf07df7ec19de56710d2bb5f61873e09710cd059d46837dc3aa54f3e09ff9e06", + "src/CelerisLab/__init__.py": "21cc469bd6e970a1f9ff5970c8eea4602065e41fc881854759ee565ee55c10c6", + "src/CelerisLab/body/__init__.py": "d6ec221d51eaf7b1da11ef320b399599cf5b9422e5bc271a7264a273033e6928", + "src/CelerisLab/body/action_smoother.py": "b1a23ee6bbd4850b172cb8738c5c3546ee465a54189e6af9d8044f023d4687dc", + "src/CelerisLab/body/coupling/__init__.py": "c931f7eb318d48408c3e2febcc6917c88c8dcc1697cbf4329b1f340d94c35763", + "src/CelerisLab/body/coupling/soa_packer.py": "8ec26fd55ef74801bbd5ab6bd3d0a7dabc750cbd498aaac2ca4c61a0108ad3c9", + "src/CelerisLab/body/ddf_patch.py": "60fcfb7441e73bf290bcff41ca3a83da3e7ddad765d7247464e8f02e3043b4e2", + "src/CelerisLab/body/geometry/__init__.py": "ada88980ab672959aca9aa3a4c4aade3219524b2ab68110cd2a2f41e3e0ca90a", + "src/CelerisLab/body/geometry/base.py": "cceca14361ca2f34d34a3e43730e1a79b8ca81be00f0dd62e884db32b479419f", + "src/CelerisLab/body/geometry/circle.py": "7605ca7c21103f1d801ac73ab8dd18dffbdac425b2dee7b8858b283628a9e436", + "src/CelerisLab/body/manager.py": "eac22c9ac92c26e89c10bb089fb3c4156e4eb7bd0c1b1f6fe6dd32e2940a020e", + "src/CelerisLab/body/objects.py": "71692d098ebb5ab2d0e614cb9b7854f048b8b33fbe6707e61fd0e8ac35745017", + "src/CelerisLab/body/preprocess/__init__.py": "dfd9d58bc07f626ab23a70053e31b88a6d9165d2e4c76a4e9f48abe674d3d2ec", + "src/CelerisLab/body/preprocess/flag_overlay.py": "831fc9e9736b758847759a085ff133eb49ec91318ace4fda76f85960138ee300", + "src/CelerisLab/body/registry.py": "fbb7327780adbdc6da15ebdb799980daf32df22ee974af0893d7409f177bbb68", + "src/CelerisLab/body/sync_plan.py": "a73ac9ee361b2120d0b7bbebeaa2ccbf924ba27bd95d4dd4b383c10a39b2a409", + "src/CelerisLab/common/__init__.py": "d4dbde78bc97fccc9eabac9abae8f0f15c112c10ff8e9b45bd9401d4723df1ef", + "src/CelerisLab/common/_types.py": "aad2ff1a9033d4fd68783ad7123afb47201ddc58785cb6dc0246947037072a5f", + "src/CelerisLab/common/checkpoint.py": "5b7caf3896167a3f37c539b58837de6eb3f8085fa7bf5f821a09666cc16d43a4", + "src/CelerisLab/common/pathline.py": "a1b6efcc0a076d0f1dc8d49a595779426d7d5626b00072a59bac710ff02ad046", + "src/CelerisLab/common/preprocess.py": "7fc78a08857cf8e98519500b094a1d896af189b6b15658ff9b388ed51bed4515", + "src/CelerisLab/common/render.py": "0e055476257eb2bcd11e733766e52195de02f8fad228f570a3511a7c831bdc29", + "src/CelerisLab/common/streakline/__init__.py": "13ff1cfa416fdd721a08a659e76b5a5a99b8d3201add10a83b7b0bc654bc1eec", + "src/CelerisLab/common/streakline/_config.py": "a9185ef68e9c7b5d5a1dc0b04a28341e2ad91d13c145a7c106636a878cf0a605", + "src/CelerisLab/common/streakline/_integrate.py": "3fbd4368b2c8d0e7fda40dc65aac5df02b085008b4c68acd83cb7ae45d33a13b", + "src/CelerisLab/common/streakline/_render.py": "236cd637414ee318c4d66f9aed32110d8dc42a100d65fde06172f7cd0ba62c65", + "src/CelerisLab/common/streakline/_streakline.py": "1a3e08daa706b5f83cdeb337e9a945a36ddf7583c40af1d0bb9d825ac954df37", + "src/CelerisLab/config.py": "2f1bba7515f5bc08cb3a8d140bcafe7fa0689e01b3b06494697bb2956a71530e", + "src/CelerisLab/configs/CONFIG.md": "41cafdbe525366c08aa9d0416ea026ccf0026ba7123b8a9b65f968a80d928e3a", + "src/CelerisLab/configs/config_body.json": "055f261f0828ca1d4f2bb694bd15b72bbcabe31d552326208f28e37f761adab1", + "src/CelerisLab/configs/config_lbm.json": "17e4311f1f250c6ece59177a8b6ff856b69a016c7c10267e774b030a0a390865", + "src/CelerisLab/configs/config_lbm_flume_mrt_zouhe.json": "8f593321db05a563a42931603a228d61cbcba06dfbe113262d5cd0ad93c0fe79", + "src/CelerisLab/configs/config_lbm_flume_trt_regularized.json": "f4bba8e6a4339fc3c4eb14f6e2f57c4b22993c73703c773d853edfbe34736e56", + "src/CelerisLab/configs/config_lbm_three_cylinder_triangle.json": "eeb8e7149dbe4aa6b3a9562802735aa950750dfbe2d972a0727e788573afa817", + "src/CelerisLab/cuda/__init__.py": "0d01dff9f0399c8baba822aab5ca0122a135f011008ed8a499ebd9f7e5b06aea", + "src/CelerisLab/cuda/compiler_v2.py": "c4cc3ec4445c8d75e6a253dd87963877117a722bc73b9d4811806fc6045d08c1", + "src/CelerisLab/cuda/context.py": "013dd4ec6d01d2fbd11afdfb103eac6a273bd9f798d663d761b851eeb27885e9", + "src/CelerisLab/cuda/obs_layout.py": "5ffb2c3aeeaaaaeb64f2cd8febfbcf4ad9919e5414020ad753cfade0683b21c2", + "src/CelerisLab/lbm/__init__.py": "7f60fb3aaae81501b510d08c2fedff44fcb05657260eb10b6f5cc91e7204306b", + "src/CelerisLab/lbm/curved_links.py": "587f3f4638688c09c0850bef2f314780d03f06c9211abc5fd773fbeecabc3326", + "src/CelerisLab/lbm/descriptors.py": "c9f025dfc14da43b989047b84cc22bd05d5cc92c9ec695c1da68fdfb788e3f2b", + "src/CelerisLab/lbm/equilibrium.py": "2fb2f2bb7ff326d23abce80fc2a4c0907b17740ea3e29fe6ae079c5044783826", + "src/CelerisLab/lbm/field.py": "0e727eacc3706add4d8d15c418e9b631050871f831698d3ac689dd5f2c701b9b", + "src/CelerisLab/lbm/initializers.py": "dacf9586963e862d6d0a98ef1a066036be6f91e9d423720661d8ef2c1fb2df6a", + "src/CelerisLab/lbm/kernels/boundary/bounce_back.cuh": "aba3748c564ed91b161d268ef8b737b7c7be96a823063d201f3da684dd845233", + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh": "4bd761e81b32f4bb3238fbb1f6ea890cde0cc987cd8bbeb54e9df8b0e1b57914", + "src/CelerisLab/lbm/kernels/boundary/esopull_curved_helpers.cuh": "b9b474bc4edaff05681c5443235472d04072d0d775fc0eb9c5967faef52b0258", + "src/CelerisLab/lbm/kernels/boundary/ibm_kernels.cuh": "e6909b547dc8d64cdd8a76a90660243a8f5fee535caa161b52b4dd8b7c29934b", + "src/CelerisLab/lbm/kernels/boundary/inlet/channel_stabilized.cuh": "efe077afcbb6b731256a987c2fd79a1dbc470c902f87070d60421ea6cb13d4e2", + "src/CelerisLab/lbm/kernels/boundary/inlet/common.cuh": "f3cec54c8873c65b3dca4375605d2c89a8727765884d3954c235242fdff9c6ba", + "src/CelerisLab/lbm/kernels/boundary/inlet/equilibrium.cuh": "f0964c811b2c41a5aaa1c6d99c490b06e850c634eb8749f1f05ef61f93c2de1d", + "src/CelerisLab/lbm/kernels/boundary/inlet/regularized.cuh": "943d4a571818bacb89c70bccfaac202691121e3e385803ce6309123a0a03ddaf", + "src/CelerisLab/lbm/kernels/boundary/inlet/zou_he_local.cuh": "e73e66b853b1e4e0e30d8f4185d832aa414ce670a1813ce2b5459f2887f71f89", + "src/CelerisLab/lbm/kernels/boundary/inlet_outlet.cuh": "de8b213a6da42c2e5e9f8966199fc66ea4541b85144a90f3f5dbad3c6ab63b97", + "src/CelerisLab/lbm/kernels/boundary/outlet/pressure_neq.cuh": "c8b2adc66d12fe602076ddc9693c5c208711fcaddb58aa9a31401a269f51c4c4", + "src/CelerisLab/lbm/kernels/boundary/planar_velocity.cuh": "0b2f9e0bd483c199637e5672dc0ffc460bc383dd1804805befbeb4c5d8c708d1", + "src/CelerisLab/lbm/kernels/config.h": "7d1124125e0b354558297934460e64c760fb68cdd7bf6d01a1238bb2eaab8c37", + "src/CelerisLab/lbm/kernels/config/config_grid.h": "8be3a7cf74ba30d7fd3074fed79e63dbda7311c4d03b454ea641bf298ffeaa8d", + "src/CelerisLab/lbm/kernels/config/config_method.h": "3db4e16ef2c6b22349d04e6aa8ab04bdfe0eb784f9f3a98277e15dbed1835d81", + "src/CelerisLab/lbm/kernels/config/config_objects.h": "dbb93c063586da278c15d95e23f84c12e728f4f5f1bbc3980fe9cedaa6fff90e", + "src/CelerisLab/lbm/kernels/config/config_obs.h": "c11e2249359145b5c4cbaaf0487506fa77c1f4b82c7c169ddc574aa0babcd727", + "src/CelerisLab/lbm/kernels/config/config_physics.h": "26df33c2960ba36f3283e19b55b4ea92e50e4efda705f9ebfbf3f875a4092c59", + "src/CelerisLab/lbm/kernels/core/descriptors.cuh": "8440bc14857da9007982650f828a23608eec9f7cc4bf772e8c8dc1239cb45356", + "src/CelerisLab/lbm/kernels/core/flags.cuh": "0025705f24710330d9d9195f713879bfb650a85a3449baef0e196b831af104ab", + "src/CelerisLab/lbm/kernels/core/layout.cuh": "1fbd820021c89ac3efcde24145996cb0147769e607e498e61f308ed3e0b13706", + "src/CelerisLab/lbm/kernels/core/obs.cuh": "b742b77c9f61e1f020fe9922c3838ae9d855e17b381154958b58f10a22938922", + "src/CelerisLab/lbm/kernels/core/params.cuh": "6e18bf730d936d940e3d85452f0714a2eaae31bf41002f9fd520ec5b372878dd", + "src/CelerisLab/lbm/kernels/core/precision.cuh": "849df14b4cce50af52399e4b8f3e997196f3ae5f1163f68e28df3e6b2507a8c4", + "src/CelerisLab/lbm/kernels/kernel_v2.cu": "c7bd3fb705b77261ba2441c52a24a7e6a7865c165cba088a1b75201c4d29c408", + "src/CelerisLab/lbm/kernels/operators/collision_mrt.cuh": "aee444eb60c47a3fd518dca975d1af05425a0818a0ec6c3fb3f6150f60c2cb44", + "src/CelerisLab/lbm/kernels/operators/collision_srt.cuh": "6b7ff842f392c8f853d2d1a97cc69bfe50f21283f73e659404da07cf6c95f5e1", + "src/CelerisLab/lbm/kernels/operators/collision_trt.cuh": "9725b9840b9ad8b4ec7be61ff5d06d3151e86d1a87585c13f2fbf934d0d2c5f6", + "src/CelerisLab/lbm/kernels/operators/forcing_guo.cuh": "969a430c1af03f32e3bd0df95d805e64f56334717c44dd4ba208ba503062a24b", + "src/CelerisLab/lbm/kernels/operators/helpers.cuh": "0b3a4d95d7d19f5fec09e5423b8f4cc99f8a226b541967425967330da5a051ec", + "src/CelerisLab/lbm/kernels/operators/macro.cuh": "e27c1c410dc857be98da4596568e405eeaf88701d291ac0e398aa9cd23dee740", + "src/CelerisLab/lbm/kernels/operators/turbulence_smag.cuh": "ff7f000297ee0817e255ad9fcb6a13b647e3ddd5b206518d35f38d2895a9f501", + "src/CelerisLab/lbm/kernels/step/aux_kernels.cu": "bb7f07d898f0d5151e5bd0f45e6bd819c5e83a345a265b73204906ac3cc29db4", + "src/CelerisLab/lbm/kernels/step/esopull_macro.cu": "c73116020ca217ede1e4de27c8269c31f9d91e33433ac8252a21e9b14187c50f", + "src/CelerisLab/lbm/kernels/step/esopull_sync.cu": "c0ff3e72900c3ab89a05dd03684e96d3b740cf1672d565727fc2af165933d087", + "src/CelerisLab/lbm/kernels/step/init_flow.cu": "305be3bb12fc0d039acec1701baabcf0e8a35e683c49c34f2af8ca9867d2b29c", + "src/CelerisLab/lbm/kernels/step/one_step_double.cu": "f9f8242b38e8e0cf8425b75e2b0215bc15363c62eaa0fb43c761b8e0931bfdc9", + "src/CelerisLab/lbm/kernels/step/one_step_esopull.cu": "aa223b2744ae6c9125673df311a96ce588032c1ba58bebb11fd33ecb990f8ed4", + "src/CelerisLab/lbm/kernels/streaming/esopull_semantic_helpers.cuh": "dd5a9091628b079efd97e53fd49e52d09dcee88529235db77a5648e02937af6e", + "src/CelerisLab/lbm/kernels/streaming/esopull_single_buffer.cuh": "77ed4ab9a0ebc5ff62a91a7c39066ef395391ae36e9040a69fb2bd8b1626dc79", + "src/CelerisLab/lbm/kernels/streaming/pull_double_buffer.cuh": "b65d741ed78b7b62f99531ba0c0ce1936663d8dc9640e7d7d16c707f1baf6549", + "src/CelerisLab/lbm/stepper.py": "e9e51e3a902fbda086d4707c0487e7b1dea6246fab290a24d82bd52d4296410e", + "src/CelerisLab/simulation.py": "34d69e71844f553790c5a2bed0f8fbfb912a9498e95b500d1ef2ad41cae3b424", + "tests/audit/Force_region.md": "3092080afe4a30665fe1b721803621ba9d0dd5d20ad17826984d94efc160fdac", + "tests/audit/Force_region_validation.md": "279a4484d1bfca0fd67aed4de3282d547aa048f89389420d8e5f2fd86db54fc2", + "tests/audit/body\u5220\u51cf\u529f\u80fd.md": "e9f308a8cd0f0e7df5441c32a15f84c0bae50bc0e56b8728f6c6f2cf78596673", + "tests/audit/body\u91cd\u6784\u7b14\u8bb0.md": "8f978d7b01c9f49dca9eeaff0d163cec6da085e2f99ee5a5e803d72306e7a72f", + "tests/audit/\u517c\u5bb9\u6027\u6d4b\u8bd5.md": "9c1721a33b381b9c3810545772b022913da06617711b5ba13a3c2c991b81a7f7", + "tests/audit/\u5ba1\u8ba1.md": "0f14ad073a0725134e6391f961c324fd0013c7791fd410713e94ed1ad40b7385", + "tests/audit/\u5ba1\u8ba1\u62a5\u544a_kernel_layer.md": "89893c98ed7c2699157bf728ec0e79b0dd6aff4008ee5c7b77eb052de24033f1", + "tests/conftest.py": "fa0ec26667872c9c1011d608310d2551fd24719b5d216f06d923ff4c74c73237", + "tests/integration/__init__.py": "c354e43ba09b55a8013a2df2069438740b5f48b5917d855e52e33ab5d7da5a6c", + "tests/integration/_cases.py": "ab76ca1096d2d10fb05b3539aa8ed3c7e549619bae6900ac98723f6c3c908f2d", + "tests/integration/test_body_sync_e2e.py": "d29f01771f3512a4b3ad06fae4ee952327d7fd9f0476942402fe92e9e327fcec", + "tests/integration/test_ddf_patch.py": "dda2abba32ca13e17098232f2831a0b1b66439c35f8931d9997a0257250c1281", + "tests/integration/test_numerical_gpu.py": "002a6745929bd5ee86a9491ea9bc3f97602fb825ea17262ea190c9311881100e", + "tests/integration/test_runtime_contracts_gpu.py": "775e578e2e8072af32fc740b2698abbb79454235a0f3ee929ac4c75d747f8db5", + "tests/integration/test_state_gpu.py": "dde0948941e8abbc5ea10a3acb3a35abbaea576f36ecee0f1120fbcf7454d60b", + "tests/integration/test_sync_bodies_skeleton.py": "65f55a0980659b49ae0027f0642a27e2ebaead226ef083f233e878150884b07c", + "tests/integration/test_unified_obs.py": "4a681536099741d92bdc258525fe3374cbdbeba0d49996e53808381a1b6a13fa", + "tests/postproc/experiment.ipynb": "c6b45db1c57200f0777213ef8d44cb4996c1aa7a5fb42b968b77e56f51b4fca4", + "tests/postproc/run_exp_ctrl_matrix_streakline.py": "529d5f31a3862080f890c65177502b589710b2d960ddf131abaf7dc2f9e2a96f", + "tests/postproc/run_exp_ctrl_matrix_vorticity.py": "b7e0c4113111b9b677f321750c0055656ccfa4f45c25fe7846f3ed22f30d1467", + "tests/postproc/run_kan99b_streakline.py": "a2bbf3fc629ea170d2d4879317dbf2b81c43378a328100ac1f2ee8d9895666cb", + "tests/postproc/run_stealth_steady_sweep.py": "3c32c4dede7da77fd6cfbd3f7b1ff43bb11390aaba621883ec96c6c7fdad5af7", + "tests/postproc/streakline_triangle_clean.png": "aa6669de7af6f82e98af25698a15f494e9cea20cb911ad9a30fe52597d33bb79", + "tests/postproc/vorticity_triangle_clean.png": "f831b8143b50f038d5920a0658469622655f34176d30cf7216feff108aa2ecaf", + "tests/screening/run_config_sweep.py": "5030c99923815ed6ad39110cb56f748c579ff4c66c7c1a368ad1a6008017e2ff", + "tests/specs/Kan99b_validation.md": "0d8bf74f2361f863809af1979bf8807adaa423f98321e1104a3d86d8c7a863cf", + "tests/specs/Sah04_validation.md": "1d122d29e281b7f50801b148f3314a0e35fdc27ee7d757c0a661243aa6185fb0", + "tests/specs/exp_ctrl_matrix.md": "5d9dd2e703582572eb68afe3a7096ea43ec82aa03418d20ed283c5365031e433", + "tests/specs/kan99b.md": "b7e0669f0a6b677d902204f3427d1b3ac254bfe70c37d9cf995fb3e8f1fedfb1", + "tests/specs/sah04.md": "33dbe5e0fd63738abd055c4aa403c191b6de04e6efdbc568f1942c6d23c7459f", + "tests/specs/streakline_notes.md": "cd342d214c07eb608ac2e5b8697322c44c31dbf4d27dfdb5409de46ef474df4b", + "tests/unit/__init__.py": "17f57920d9c1ff46096ceb2af008eb38c4b98dc81ffa3c3d310e758e80ca1cd4", + "tests/unit/cpp/collision_regression.cpp": "f17acdff74ab82a62dc5402b42e3f6a149c262e89b140494164d6ebd630f5e14", + "tests/unit/cpp/planar_velocity.cpp": "8dea266984edc69d4e0e68007e038d7a587e99f84e33478d6656a66a56680933", + "tests/unit/cpp/reservoir.cpp": "c3eacaf0271400eb45ad559b571a8f7faa2a809d5f1857ffeb5592addce2cd0c", + "tests/unit/cpp/semantic_regression.cpp": "99dba074c0c0a32ea76026e7d54fc60af8e6d3dc5315c8900c470b4518878f39", + "tests/unit/cpp/slot_profile.cpp": "31ac58ccab175bf79fa59fc46d4c0842df18ab0a5e5916be84760d9da2b75788", + "tests/unit/test_body_flags.py": "ac6409157924e15a13a3d2cc2f1a09014b8b0198ba17c824f412ff20b19e2aac", + "tests/unit/test_build_contracts.py": "7bb237425e8bb481f312fa4841c484e280731e13c7cbb9a53dad3e7f98984ac3", + "tests/unit/test_context_ownership.py": "299fed30dd0f9bd4dadd8b27f50df2a6367bdb0ab2ca3f391f215fde7241f35a", + "tests/unit/test_equilibrium.py": "1ecbcc4547b1c846b75320463d828d6a36b6aae73208084fae476b1001c1bb50", + "tests/unit/test_initializers.py": "8b4e3358d925614984265ae73c142006b48fd1c3918cf84901f18afd9fe68c3a", + "tests/unit/test_numerical_operators.py": "6d1d560ef553a2af7adac7db3e325d96d7fe39073d5fe3e0e982439537385b27", + "tests/unit/test_pending_edits.py": "905a0dff23b123e8e38aaf364984c810fe51c39acd64aa271e343a4701d3d024", + "tests/unit/test_planar_velocity.py": "b656da0880b4234b1db805544edbe0d2473cbcc7c2c869c71d8251337f62a982", + "tests/unit/test_reservoir.py": "e718c78a53c3941aba7feb8ae4e8bb0b1726c1145de84febf91220c1917991c9", + "tests/unit/test_simulation_lifecycle.py": "77abdc33218c35e9c8b62dbd99ceddbaccd8417e7f0b539ea8859ea0175c663a", + "tests/unit/test_slot_velocity.py": "6a9494de9a32c350389ccbed58af48951f6b25a21a258537d2e8b73eb67cb11d", + "tests/unit/test_state_regressions.py": "0f69cfeb83428192f95688c76abcae7e5b9cf5f27c52bca4ac20c7f320044374", + "tests/unit/test_sync_plan.py": "983313ef783143231fa5a392f85f3bac011184773ccaf5d946504c206cabb721", + "tests/validation/analyze_j3_saved_frames.py": "438f67dac682b94c4950626f8de4fdcde48c3a4e9ecf8fdf1b0ada4b6e0e781a", + "tests/validation/diagnose_j3_lags.py": "286fcd65b3261667a847b9b26e213d0af92cf459faa6bbd774f78c8479ce31d7", + "tests/validation/multigrid/MULTIGRID_VERIFICATION_STRATEGY.md": "d4f3473da44abee6031a0e1bd4d0ca589077a18f15d2461836e4d2ebb98e458a", + "tests/validation/multigrid/cpu_reference.py": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "tests/validation/multigrid/cpu_reference_v0.2.py": "b6adbad7da625ef6a6b97958ea9625030ed92676d0cada48e061c87bcf7ca8c9", + "tests/validation/multigrid/cpuref_0_3_evidence/README.txt": "1947ee0232b88b3cc2c506d0b0af5ba051ecc94aa8f7f09228ef3939cc95919b", + "tests/validation/multigrid/cpuref_0_3_evidence/README_grok.md": "065947e15b2242bce7d3eb05a3acdbb59939c621dcd5d31540ad4a1bd4416818", + "tests/validation/multigrid/cpuref_0_3_evidence/baseline.json": "0daaccee41cabeb17a00e2405e2c7fd0b80d36f2d01778eb39c9fd22b13d2d47", + "tests/validation/multigrid/cpuref_0_3_evidence/manifest.json": "2850ecaf2e19d010ba35eb54162371d82cc1a092831e08a03b6adf75a614988b", + "tests/validation/multigrid/cpuref_0_3_evidence/results_horsea.json": "914389afc39752bcd4132aa21fc8d5cbcf0ca75b1efd6a49becab15c2fa3361b", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_grok.txt": "73e4ef01138842981daaa534390f1463839e63833c11f4e8872f94f8eaadc717", + "tests/validation/multigrid/cpuref_0_3_evidence/stdout_horsea.txt": "457f1d2173496554c87ca6e61df518c0b8f1e0a28cdfd94b94ebbb61bc459d70", + "tests/validation/multigrid/test_cpu_reference.py": "ade5d4827f971aed7174b59d83769e7aa542338e625a9fc8db1e8b1805cb74ca", + "tests/validation/multigrid/test_open_corner_negative_control.py": "59a6f8ca80cdd63cb7827fbebf9b4b555c3793f19dd6bca801544ec10b5cbe1b", + "tests/validation/multigrid/test_tron_additions.py": "8e7a6a90b85e64c7326719e7b8bca2f6d34fb4c80690f0685f7e291ab93bd2a4", + "tests/validation/run_j1.py": "51b758a271ff358f931b3140a80082294a67e66c2fec0f8c19319e37f92aadc4", + "tests/validation/run_j2_slot.py": "b7d2d3aa06fcafc3ac62ed4a50892afbdb7f86e5720ce75a39ce317b6f571dad", + "tests/validation/run_j3_coverage.py": "329869519b7078e854d96241a7aad8ef93f35ac9be83f0be502c3a93523c3b13", + "tests/validation/run_j3_reservoir.py": "47535bc3569ce68c888d38978bc4f9077fd763a17829c20c081be52bb18a2903", + "tests/validation/run_kan99b_rotating_cylinder.py": "323186429a100f36b41ab9b81ade2da6a47e93be3ccb7034a3a6b97f4ee8eb00", + "tests/validation/run_perf_baseline.py": "93dde2eb1132f45ea69e1e285ff421dc97a83651a22c79571f299c1909650721", + "tests/validation/run_poiseuille.py": "e529288e2ffa8e00d281a9006723954d60a96ae4d025e8f28656c09287d4ff46", + "tests/validation/run_sah04_st_matrix.py": "9b9c0ce063e07a316846635ee769b837ed26be6bf039f78f4219c10b516f8006", + "tests/validation/test_sensor_accuracy.py": "c6038a9e7a597a1738814bd15e6ecf357cfd271cdc2a132d47943c5280ac0ef9" + } +} diff --git a/tests/validation/multigrid/shear_v0_2_evidence/comparison.json b/tests/validation/multigrid/shear_v0_2_evidence/comparison.json new file mode 100644 index 0000000..0af8736 --- /dev/null +++ b/tests/validation/multigrid/shear_v0_2_evidence/comparison.json @@ -0,0 +1,296 @@ +{ + "comparison_precision": "Printed output precision only; no claim of bitwise full-precision field equivalence. No new tolerance or diagnostic pass/fail threshold introduced.", + "all_22_boolean_checks_match_and_pass": true, + "boolean_checks": { + "finite_A_phi0.0000": true, + "cons_A_phi0.0000": true, + "finite_B_phi0.0000": true, + "cons_B_phi0.0000": true, + "finite_C_phi0.0000": true, + "cons_C_phi0.0000": true, + "finite_A_phi1.5708": true, + "cons_A_phi1.5708": true, + "finite_B_phi1.5708": true, + "cons_B_phi1.5708": true, + "finite_C_phi1.5708": true, + "cons_C_phi1.5708": true, + "finite_A_T_phi1.5708": true, + "cons_A_T_phi1.5708": true, + "transpose_ok": true, + "t0_AB_patch_ok_phi0.0000": true, + "t0_AC_out_ok_phi0.0000": true, + "init_mismatch_ok_phi0.0000": true, + "t0_AB_patch_ok_phi1.5708": true, + "t0_AC_out_ok_phi1.5708": true, + "init_mismatch_ok_phi1.5708": true, + "init_mismatch_ok_A_T_phi1.5708": true + }, + "summary_metrics": [ + { + "row": "FIT A phi0.0000", + "metric": "lambda", + "grok": "0.0158522189", + "horsea": "0.0158522189", + "identical_printed": true, + "horsea_minus_grok": "0E-10" + }, + { + "row": "FIT A phi0.0000", + "metric": "stderr", + "grok": "8.571672e-08", + "horsea": "8.571672e-08", + "identical_printed": true, + "horsea_minus_grok": "0E-14" + }, + { + "row": "FIT A phi0.0000", + "metric": "R2", + "grok": "1.00000000", + "horsea": "1.00000000", + "identical_printed": true, + "horsea_minus_grok": "0E-8" + }, + { + "row": "FIT A phi0.0000", + "metric": "A0", + "grok": "1.0000000000e-03", + "horsea": "1.0000000000e-03", + "identical_printed": true, + "horsea_minus_grok": "0E-13" + }, + { + "row": "FIT A phi0.0000", + "metric": "A32", + "grok": "5.9874229183e-04", + "horsea": "5.9874229183e-04", + "identical_printed": true, + "horsea_minus_grok": "0E-14" + }, + { + "row": "FIT B phi0.0000", + "metric": "lambda", + "grok": "0.0153991657", + "horsea": "0.0153991657", + "identical_printed": true, + "horsea_minus_grok": "0E-10" + }, + { + "row": "FIT B phi0.0000", + "metric": "stderr", + "grok": "3.372428e-15", + "horsea": "3.372428e-15", + "identical_printed": true, + "horsea_minus_grok": "0E-21" + }, + { + "row": "FIT B phi0.0000", + "metric": "R2", + "grok": "1.00000000", + "horsea": "1.00000000", + "identical_printed": true, + "horsea_minus_grok": "0E-8" + }, + { + "row": "FIT B phi0.0000", + "metric": "A0", + "grok": "1.0000000000e-03", + "horsea": "1.0000000000e-03", + "identical_printed": true, + "horsea_minus_grok": "0E-13" + }, + { + "row": "FIT B phi0.0000", + "metric": "A32", + "grok": "6.1178402808e-04", + "horsea": "6.1178402808e-04", + "identical_printed": true, + "horsea_minus_grok": "0E-14" + }, + { + "row": "FIT C phi0.0000", + "metric": "lambda", + "grok": "0.0155497331", + "horsea": "0.0155497331", + "identical_printed": true, + "horsea_minus_grok": "0E-10" + }, + { + "row": "FIT C phi0.0000", + "metric": "stderr", + "grok": "1.906424e-08", + "horsea": "1.906424e-08", + "identical_printed": true, + "horsea_minus_grok": "0E-14" + }, + { + "row": "FIT C phi0.0000", + "metric": "R2", + "grok": "1.00000000", + "horsea": "1.00000000", + "identical_printed": true, + "horsea_minus_grok": "0E-8" + }, + { + "row": "FIT C phi0.0000", + "metric": "A0", + "grok": "1.0000000000e-03", + "horsea": "1.0000000000e-03", + "identical_printed": true, + "horsea_minus_grok": "0E-13" + }, + { + "row": "FIT C phi0.0000", + "metric": "A32", + "grok": "6.0299811110e-04", + "horsea": "6.0299811110e-04", + "identical_printed": true, + "horsea_minus_grok": "0E-14" + }, + { + "row": "FIT A phi1.5708", + "metric": "lambda", + "grok": "0.0158419175", + "horsea": "0.0158419175", + "identical_printed": true, + "horsea_minus_grok": "0E-10" + }, + { + "row": "FIT A phi1.5708", + "metric": "stderr", + "grok": "2.130663e-07", + "horsea": "2.130663e-07", + "identical_printed": true, + "horsea_minus_grok": "0E-13" + }, + { + "row": "FIT A phi1.5708", + "metric": "R2", + "grok": "1.00000000", + "horsea": "1.00000000", + "identical_printed": true, + "horsea_minus_grok": "0E-8" + }, + { + "row": "FIT A phi1.5708", + "metric": "A0", + "grok": "1.0000000000e-03", + "horsea": "1.0000000000e-03", + "identical_printed": true, + "horsea_minus_grok": "0E-13" + }, + { + "row": "FIT A phi1.5708", + "metric": "A32", + "grok": "5.9890316832e-04", + "horsea": "5.9890316832e-04", + "identical_printed": true, + "horsea_minus_grok": "0E-14" + }, + { + "row": "FIT B phi1.5708", + "metric": "lambda", + "grok": "0.0153991657", + "horsea": "0.0153991657", + "identical_printed": true, + "horsea_minus_grok": "0E-10" + }, + { + "row": "FIT B phi1.5708", + "metric": "stderr", + "grok": "3.372390e-15", + "horsea": "3.372390e-15", + "identical_printed": true, + "horsea_minus_grok": "0E-21" + }, + { + "row": "FIT B phi1.5708", + "metric": "R2", + "grok": "1.00000000", + "horsea": "1.00000000", + "identical_printed": true, + "horsea_minus_grok": "0E-8" + }, + { + "row": "FIT B phi1.5708", + "metric": "A0", + "grok": "1.0000000000e-03", + "horsea": "1.0000000000e-03", + "identical_printed": true, + "horsea_minus_grok": "0E-13" + }, + { + "row": "FIT B phi1.5708", + "metric": "A32", + "grok": "6.1178402808e-04", + "horsea": "6.1178402808e-04", + "identical_printed": true, + "horsea_minus_grok": "0E-14" + }, + { + "row": "FIT C phi1.5708", + "metric": "lambda", + "grok": "0.0155497331", + "horsea": "0.0155497331", + "identical_printed": true, + "horsea_minus_grok": "0E-10" + }, + { + "row": "FIT C phi1.5708", + "metric": "stderr", + "grok": "1.906424e-08", + "horsea": "1.906424e-08", + "identical_printed": true, + "horsea_minus_grok": "0E-14" + }, + { + "row": "FIT C phi1.5708", + "metric": "R2", + "grok": "1.00000000", + "horsea": "1.00000000", + "identical_printed": true, + "horsea_minus_grok": "0E-8" + }, + { + "row": "FIT C phi1.5708", + "metric": "A0", + "grok": "1.0000000000e-03", + "horsea": "1.0000000000e-03", + "identical_printed": true, + "horsea_minus_grok": "0E-13" + }, + { + "row": "FIT C phi1.5708", + "metric": "A32", + "grok": "6.0299811110e-04", + "horsea": "6.0299811110e-04", + "identical_printed": true, + "horsea_minus_grok": "0E-14" + }, + { + "row": "TRANSPOSE", + "metric": "err", + "grok": "6.661338e-16", + "horsea": "6.661338e-16", + "identical_printed": true, + "horsea_minus_grok": "0E-22" + }, + { + "row": "TRANSPOSE", + "metric": "ok", + "grok": "True", + "horsea": "True", + "identical_printed": true + }, + { + "row": "ANALYTIC", + "metric": "lambda", + "grok": "0.0154212569", + "horsea": "0.0154212569", + "identical_printed": true, + "horsea_minus_grok": "0E-10" + } + ], + "hard_check_numeric_differences": [], + "hard_block_identical": true, + "summary_block_identical": true +} diff --git a/tests/validation/multigrid/shear_v0_2_evidence/joint_report.md b/tests/validation/multigrid/shear_v0_2_evidence/joint_report.md new file mode 100644 index 0000000..eed8712 --- /dev/null +++ b/tests/validation/multigrid/shear_v0_2_evidence/joint_report.md @@ -0,0 +1,96 @@ +# Shear interface diagnostic v0: merged FINAL report v2 (ClaudeWorker + Grok, 2026-10-13) + +Supersedes 17_shear_diagnostic_v0_merged_report.md (14BeLNaB7M3ALgrDubBeDu3LO7DeR_JYZ), which was +written before the final pinning. All numbers below were re-checked against the pinned v0.2 stdout. +Status: diagnostic finding only. Not a solver-failure gate. No stress-transfer mechanism has been identified. + +## 0. Pinned artifacts (Drive folder 1v-ptYZ3JyU8mVmiyBizcIuA440FYlMSz) +- Reference: unchanged CPUREF-0.3, SHA256 bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e +- Script: shear_diagnostic_v0_2.py (1_IFVwcgAekq1geeam5jkoUyjXBVXJWRA), + SHA256 a8b1cf2f7abd00efc4d068bbd27bb2317144a6ca4c545d9b2e0dcf421eadebc6 +- Stdout (Grok sandbox): stdout_shear_diagnostic_v0_2.txt (10TxZvxweLZXCv_WMzuk6jKzLwlRwOdmg), + SHA256 28ddd1267ca91a772f5a6bfc65d949c9a4ea7dac5c9ba3a0bdb168492810b670 +- Horsea confirmation: + - Command: CPU_REFERENCE_PATH=/cpu_reference_v0.3.py python3 shear_diagnostic_v0_2.py + - Expected: exit 0. + - Compare the HARD CHECKS and SUMMARY_LINES blocks, not the whole-file hash: REF_PATH and runtime differ + between machines. +- History: + - v0 (1Kf3_99u210n_FyLKRGEMoB40zHzQgHHM) and v0.1 (1pH9q39daAXie4B0IFEicSLYOQOIMz9tW) differ from v0.2 + only in the checker and reporting code. + - The lambda values are bit-identical across v0, v0.1 and v0.2. + - Reviews: 16_CLAUDE review (1hhuCAXAURP2qVyptM4pgIlDT_qqaicY9); root's static review via TRON. + +## 1. Frozen setup +- Geometry: 16^2 periodic coarse grid, static 2:1 patch [4,12)^2, D2Q9 SRT, tau_c = 0.8, tau_f = 1.1 + (nu = 0.1 coarse units). CPU only; runtime 0.55 s. +- Mode: u_x = U0 sin(2*pi*y/16 + phi), U0 = 1e-3, phi in {0, pi/2}. +- 7 runs: A composite, B uniform-fine 32^2, C uniform-coarse 16^2 for each phi; plus A transposed at phi = pi/2. +- Duration: 32 coarse steps. Startup = steps 0-3 (reported). Fit = steps 4-32 (= CPUREF ticks 8..64). +- Initialisation: equilibrium of the exact cell-average velocity (sinc factor); fine centres include the patch + offset. This is not the exact cell average of the nonlinear f_eq. +- Observation: all grids at arrival_f (post-stream, pre-collision). Restrict rho and j by 2x2 averaging, + then u = j/rho. One common 16^2 modal projection. + +## 2. Hard checks: 22 Booleans, all True (ALL_HARD_CHECKS_PASS = True) +- Cross-review corrections: + - A_T is now included (Claude B1). + - The t0 and init conventions are now Boolean assertions, not just printed values (root). +- Finite active states: all 7 runs. +- Conservation drift: mass <= 8.2e-13, momentum <= 1.7e-13 (tolerance 1e-12 x mass ~ 2.56e-10). +- Transpose: error 6.7e-16 (tolerance 1e-15). +- t0 restricted u: + - A vs B on the patch: 1.1e-19. + - A vs C outside the patch: 2.2e-19. + - Tolerance: T0_TOL = 1e-15. +- Init rho/j mismatch: 1.1e-16 for A (both phi) and for A_T (tolerance INIT_TOL = 1e-12). + +## 3. Reported numbers (no thresholds) +Decay rate lambda per coarse step. The analytic value nu*k^2 is 0.0154213. + +| run | phi=0 | phi=pi/2 | stderr | +|---|---|---|---| +| A composite | 0.0158522 | 0.0158419 | <= 2.1e-7 | +| B uniform-fine | 0.0153992 | 0.0153992 | ~3e-15 | +| C uniform-coarse | 0.0155497 | 0.0155497 | 1.9e-8 | + +- The composite decays ~2.9% faster than uniform-fine and also faster than uniform-coarse. + The fit is exponential, so this is a persistent rate excess, not a startup transient. + s = (A-B)/(C-B) = 3.01 / 2.94, with denominator 1.5e-4, well above fit noise. +- e_IF/e_CB at step 32 = 1.50 / 1.57 (unnormalised L2 over 256 cells). +- Per-cell RMS of (u_A - u_B) at step 32 (patch = 64 cells, outside = 192): + - phi=0: patch 9.92e-6, outside 9.04e-6 (ratio 1.10). The patch holds 28.6% of the error energy on 25% of + the area. + - phi=pi/2: patch 1.15e-5, outside 9.01e-6 (ratio 1.28). The patch holds 35.2% of the error energy on 25% + of the area. + - Reference: C-B per-cell RMS is 6.2e-6. + Reading: the error is spread over the whole domain, with mild concentration on the patch at phi = pi/2. +- Profile of the x-averaged (u_A - u_B)(y): + - phi=0: mostly modal, with a larger deficit inside the patch. + - phi=pi/2: a non-modal kink at y ~ 3.5-4.5, where the horizontal interface sits at maximum shear. + The non-modal residual is 5.5e-2 vs 2.2e-2 at phi=0 (L2/U0). +- Acoustic sensors at step 32: max|u_y|/U0 = 3.7e-3 / 5.0e-3, max|rho-1| ~ 4e-6. +- Pi_xy: the domain mean cancels by symmetry. It is not a stress-transfer sensor, is still printed in stdout, + and is excluded from the conclusions. + +## 4. Limitations +- One resolution, wavenumber, tau pair, patch and duration. No convergence order can be inferred. +- Approximate equilibrium-only initialisation. The startup transient is excluded from the fit, not modelled. +- B and C use the script's own uniform SRT. Its formulas were checked against the reference, but it is a + separate implementation. +- Sandbox run only. Bounded Horsea confirmation is pending. +- Attribution is open. The data are consistent with an interface stress-transfer error but do not show one. + The candidates are two stated CPUREF simplifications, neither claimed wrong: + (i) post-collision coarse packets are copied into the fine ghosts without rescaling; + (ii) the ghosts hold g_c(t) for both fine hops. + +## 5. One next discriminating test (not run; write a spec first) +Same 7-run freeze, changing exactly one simplification: time-interpolated ghosts between the two fine hops, +with the unrescaled copy kept. +- If lambda_A - lambda_B shrinks, the ghost hold is implicated. +- If it does not, the unrescaled copy becomes the remaining suspect, by elimination only. +- Spec caveat: in the current step order, coarse g_c(t+1) does not exist before the fine hops. The + interpolation source (extrapolation or a reordered coarse step) has to be specified first, and the change + reviewed as a reference-algorithm change. +- Static prior (ClaudeWorker, an estimate, not evidence): the ghost-hold lag is about lambda*dt/2 ~ 1% of the + local velocity, while the non-equilibrium copy mismatch scales with k*U0. So the result may well be negative. diff --git a/tests/validation/multigrid/shear_v0_2_evidence/manifest.json b/tests/validation/multigrid/shear_v0_2_evidence/manifest.json new file mode 100644 index 0000000..b22d03a --- /dev/null +++ b/tests/validation/multigrid/shear_v0_2_evidence/manifest.json @@ -0,0 +1,97 @@ +{ + "verified_utc": "2026-10-13T05:06:08.983097+00:00", + "head": "6e3756c587ec08ab6a55c4a1a5f4671822d3f0a0", + "old_files_checked": 281, + "old_files_changed": [], + "old_git_status_entries_removed": [], + "only_authorized_new_git_paths": true, + "archive_path": "/tmp/celerislab-shear-input-20261013-a8b1cf2.tar", + "archive_sha256": "7937bcb6b6962718ce7509fa6e35905cb834e50eb25c72b18087127685d02630", + "reference_sha256": "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e", + "inputs": [ + { + "path": "tests/validation/multigrid/shear_v0_2_evidence/joint_report.md", + "bytes": 6110, + "sha256": "1860b8082108c8b8a87998af90cd0b81dce1c04e9f6c67b41e0912f9fef6cc9c", + "matches_tar_bytes": true + }, + { + "path": "tests/validation/multigrid/shear_diagnostic_v0_2.py", + "bytes": 30308, + "sha256": "a8b1cf2f7abd00efc4d068bbd27bb2317144a6ca4c545d9b2e0dcf421eadebc6", + "matches_tar_bytes": true + }, + { + "path": "tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt", + "bytes": 7950, + "sha256": "28ddd1267ca91a772f5a6bfc65d949c9a4ea7dac5c9ba3a0bdb168492810b670", + "matches_tar_bytes": true + }, + { + "path": "tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json", + "bytes": 574, + "sha256": "56fbd0259ff3d4dbd14ace52f64e249a435e9df91732b0e4027def2c344c2e6a", + "matches_tar_bytes": true + } + ], + "original_input_bytes_unchanged": true, + "delivered_byte_deviations": [], + "blocking_numerical_objections": [], + "interpretation_qualifications": "See README.txt; report extrapolation/causal-elimination wording is not adopted.", + "execution_attempts": 1, + "hard_checks_passed": 22, + "grok_hard_block_identical": true, + "grok_summary_block_identical": true, + "new_files_except_this_manifest": [ + { + "path": "tests/validation/multigrid/shear_diagnostic_v0_2.py", + "bytes": 30308, + "sha256": "a8b1cf2f7abd00efc4d068bbd27bb2317144a6ca4c545d9b2e0dcf421eadebc6" + }, + { + "path": "tests/validation/multigrid/shear_v0_2_evidence/README.txt", + "bytes": 7220, + "sha256": "4306a34b6896bd6e7a5c2ca71d68e18450359239d0c7ad7a67a4e83e7155959a" + }, + { + "path": "tests/validation/multigrid/shear_v0_2_evidence/baseline.json", + "bytes": 41751, + "sha256": "98a7853341ea732762c7506694e3a867a7259bf110e9e461ea84f741fd9ab829" + }, + { + "path": "tests/validation/multigrid/shear_v0_2_evidence/comparison.json", + "bytes": 7679, + "sha256": "41c00372099dd04b6d323785e9eaf4fec09da1753d3d150ffa230800f904142f" + }, + { + "path": "tests/validation/multigrid/shear_v0_2_evidence/joint_report.md", + "bytes": 6110, + "sha256": "1860b8082108c8b8a87998af90cd0b81dce1c04e9f6c67b41e0912f9fef6cc9c" + }, + { + "path": "tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json", + "bytes": 1957, + "sha256": "c2d7ce8d16a0f47baff0788a153353dcf67088da974d9cd3d521b04ecd91ee05" + }, + { + "path": "tests/validation/multigrid/shear_v0_2_evidence/run_once.py", + "bytes": 3245, + "sha256": "6698a2e040c56be949b809387d4518eb0ba82d34cc9d99640da4f8bf3c35c23f" + }, + { + "path": "tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json", + "bytes": 574, + "sha256": "56fbd0259ff3d4dbd14ace52f64e249a435e9df91732b0e4027def2c344c2e6a" + }, + { + "path": "tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt", + "bytes": 7950, + "sha256": "28ddd1267ca91a772f5a6bfc65d949c9a4ea7dac5c9ba3a0bdb168492810b670" + }, + { + "path": "tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt", + "bytes": 11421, + "sha256": "0577df5b3f5cb3c7b6e1ef2de71344f8fd3e6d959117487a06cbaf7f2afa3dea" + } + ] +} diff --git a/tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json b/tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json new file mode 100644 index 0000000..b2cd48a --- /dev/null +++ b/tests/validation/multigrid/shear_v0_2_evidence/results_horsea.json @@ -0,0 +1,65 @@ +{ + "started_utc": "2026-10-13T05:02:42.804589+00:00", + "cwd": "/home/frank14f/CelerisLab/tests/validation/multigrid", + "parent_command": [ + "env", + "OPENBLAS_NUM_THREADS=1", + "PYTHONDONTWRITEBYTECODE=1", + "PYTHONNOUSERSITE=1", + "PYTHONOPTIMIZE=0", + "PYTHONPATH=/home/frank14f/CelerisLab/tests/validation/multigrid", + "CPU_REFERENCE_PATH=/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py", + "/usr/bin/prlimit", + "--as=268435456", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "/home/frank14f/CelerisLab/tests/validation/multigrid/shear_v0_2_evidence/run_once.py" + ], + "script_command": [ + "/usr/bin/prlimit", + "--as=268435456", + "--fsize=2097152", + "--core=0", + "--", + "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", + "-B", + "/home/frank14f/CelerisLab/tests/validation/multigrid/shear_diagnostic_v0_2.py" + ], + "environment": { + "OPENBLAS_NUM_THREADS": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONNOUSERSITE": "1", + "PYTHONOPTIMIZE": "0", + "PYTHONPATH": "/home/frank14f/CelerisLab/tests/validation/multigrid", + "CPU_REFERENCE_PATH": "/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py" + }, + "python_version": "3.10.13 (main, Sep 11 2023, 13:44:35) [GCC 11.2.0]", + "numpy_version_from_installed_metadata": "1.26.4", + "platform": "Linux-6.8.0-138-generic-x86_64-with-glibc2.35", + "hard_limits": { + "address_space_bytes": [ + 268435456, + 268435456 + ], + "output_file_bytes": [ + 2097152, + 2097152 + ], + "core_bytes": [ + 0, + 0 + ] + }, + "planned_runs": 7, + "coarse_steps_per_run": 32, + "attempt": 1, + "returncode": 0, + "elapsed_seconds": 2.2370318549801596, + "child_peak_rss_MiB": 37.69140625, + "parent_peak_rss_MiB": 18.75, + "completed_utc": "2026-10-13T05:02:45.056308+00:00", + "stdout_bytes": 11421 +} diff --git a/tests/validation/multigrid/shear_v0_2_evidence/run_once.py b/tests/validation/multigrid/shear_v0_2_evidence/run_once.py new file mode 100644 index 0000000..0b8d5e2 --- /dev/null +++ b/tests/validation/multigrid/shear_v0_2_evidence/run_once.py @@ -0,0 +1,74 @@ +"""Bounded execution recorder; refuses to overwrite evidence or repeat a run.""" +import datetime +import hashlib +import importlib.metadata +import json +import os +from pathlib import Path +import platform +import resource +import shlex +import subprocess +import sys +import time + +evidence = Path(__file__).resolve().parent +base = evidence.parent +script = base / "shear_diagnostic_v0_2.py" +reference = base / "cpu_reference.py" +expected_env = { + "OPENBLAS_NUM_THREADS": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "PYTHONNOUSERSITE": "1", + "PYTHONOPTIMIZE": "0", + "PYTHONPATH": str(base), + "CPU_REFERENCE_PATH": str(reference), +} +limits = { + "address_space_bytes": (resource.RLIMIT_AS, 268435456), + "output_file_bytes": (resource.RLIMIT_FSIZE, 2097152), + "core_bytes": (resource.RLIMIT_CORE, 0), +} +assert all(os.environ.get(k) == v for k, v in expected_env.items()) +assert all(resource.getrlimit(key) == (value, value) for key, value in limits.values()) +assert sys.executable == "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python" +assert hashlib.sha256(script.read_bytes()).hexdigest() == "a8b1cf2f7abd00efc4d068bbd27bb2317144a6ca4c545d9b2e0dcf421eadebc6" +assert hashlib.sha256(reference.read_bytes()).hexdigest() == "bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e" +log_path = evidence / "stdout_horsea.txt" +result_path = evidence / "results_horsea.json" +assert not log_path.exists() and not result_path.exists(), "Existing execution evidence; do not rerun" +prefix = ["/usr/bin/prlimit", "--as=268435456", "--fsize=2097152", "--core=0", "--", sys.executable, "-B"] +command = prefix + [str(script)] +report = { + "started_utc": datetime.datetime.now(datetime.timezone.utc).isoformat(), + "cwd": str(base), + "parent_command": ["env"] + [f"{k}={v}" for k, v in expected_env.items()] + prefix + [str(Path(__file__).resolve())], + "script_command": command, + "environment": expected_env, + "python_version": sys.version, + "numpy_version_from_installed_metadata": importlib.metadata.version("numpy"), + "platform": platform.platform(), + "hard_limits": {name: resource.getrlimit(key) for name, (key, _) in limits.items()}, + "planned_runs": 7, + "coarse_steps_per_run": 32, + "attempt": 1, +} +with log_path.open("xb", buffering=0) as log: + log.write(("RECORDER " + json.dumps(report) + "\nCOMMAND " + shlex.join(command) + "\n").encode()) + start = time.monotonic() + child = subprocess.run(command, cwd=base, stdout=log, stderr=subprocess.STDOUT, check=False) + report.update( + returncode=child.returncode, + elapsed_seconds=time.monotonic() - start, + child_peak_rss_MiB=resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss / 1024, + parent_peak_rss_MiB=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1024, + completed_utc=datetime.datetime.now(datetime.timezone.utc).isoformat(), + ) + log.write(("\nRUN_RESULT " + json.dumps(report) + "\n").encode()) +report["stdout_bytes"] = log_path.stat().st_size +with result_path.open("x") as result: + json.dump(report, result, indent=2) + result.write("\n") +print(json.dumps(report, indent=2)) +assert report["stdout_bytes"] < 2097152 +sys.exit(child.returncode if child.returncode >= 0 else 1) diff --git a/tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json b/tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json new file mode 100644 index 0000000..4d1c742 --- /dev/null +++ b/tests/validation/multigrid/shear_v0_2_evidence/source_manifest.json @@ -0,0 +1,20 @@ +[ + { + "id": "1_IFVwcgAekq1geeam5jkoUyjXBVXJWRA", + "name": "shear_diagnostic_v0_2.py", + "bytes": 30308, + "sha256": "a8b1cf2f7abd00efc4d068bbd27bb2317144a6ca4c545d9b2e0dcf421eadebc6" + }, + { + "id": "10TxZvxweLZXCv_WMzuk6jKzLwlRwOdmg", + "name": "stdout_grok.txt", + "bytes": 7950, + "sha256": "28ddd1267ca91a772f5a6bfc65d949c9a4ea7dac5c9ba3a0bdb168492810b670" + }, + { + "id": "1u21zTKWxnfjAnBwhlk_XhWJjdQTC_ytb", + "name": "joint_report.md", + "bytes": 6110, + "sha256": "1860b8082108c8b8a87998af90cd0b81dce1c04e9f6c67b41e0912f9fef6cc9c" + } +] diff --git a/tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt b/tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt new file mode 100644 index 0000000..0e80b1a --- /dev/null +++ b/tests/validation/multigrid/shear_v0_2_evidence/stdout_grok.txt @@ -0,0 +1,89 @@ +=== shear_diagnostic_v0.2 against CPUREF-0.3 === +REF_PATH=/workspace/shear_diag/cpu_reference_v0.3.py +REF_SHA256=bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e +API_VERSION=CPUREF-0.3 +U0=0.001 tau_c=0.8 tau_f=1.1 steps=32 nu=0.1 k=0.39269908169872414 +nu*k^2=0.01542126 (analytic decay rate) +INIT: equilibrium of averaged velocity (NOT exact cell-avg of nonlinear feq) +UNITS: fit/report 'steps' are coarse steps; CPUREF tick = fine step count + fit window coarse steps 4..32 = CPUREF ticks 8..64 + startup coarse steps 0..3 = CPUREF ticks 0..6 + nonmodal/e_IF/e_CB are unnormalised L2 sums over 256 coarse cells + (per-cell RMS = value/16); nonmodal is already /U0 +CONS_TOL=1e-12 relative to mass (~256) => abs ~2.560e-10 + +-- running C (uniform-coarse) phi0.0000 +-- running B (uniform-fine) phi0.0000 +-- running A (composite CPUREF) phi0.0000 +-- running C (uniform-coarse) phi1.5708 +-- running B (uniform-fine) phi1.5708 +-- running A (composite CPUREF) phi1.5708 +-- running A transpose phi=1.5707963267948966 + +=== HARD CHECKS === + finite[A_phi0.0000]=True cons=True mass_drift=5.969e-13 momx_drift=1.690e-13 momy_drift=2.753e-14 tol_abs=2.560e-10 (CONS_TOL*mass=1e-12*|256|) init_rho_j_mismatch_vs_coarse_formula=1.110e-16 + finite[B_phi0.0000]=True cons=True mass_drift=7.105e-13 momx_drift=2.970e-15 momy_drift=3.553e-15 tol_abs=2.560e-10 (CONS_TOL*mass=1e-12*|256|) + finite[C_phi0.0000]=True cons=True mass_drift=4.547e-13 momx_drift=4.607e-15 momy_drift=6.495e-15 tol_abs=2.560e-10 (CONS_TOL*mass=1e-12*|256|) + finite[A_phi1.5708]=True cons=True mass_drift=8.242e-13 momx_drift=1.033e-13 momy_drift=9.015e-14 tol_abs=2.560e-10 (CONS_TOL*mass=1e-12*|256|) init_rho_j_mismatch_vs_coarse_formula=1.110e-16 + finite[B_phi1.5708]=True cons=True mass_drift=6.821e-13 momx_drift=2.970e-15 momy_drift=3.553e-15 tol_abs=2.560e-10 (CONS_TOL*mass=1e-12*|256|) + finite[C_phi1.5708]=True cons=True mass_drift=4.547e-13 momx_drift=4.607e-15 momy_drift=6.495e-15 tol_abs=2.560e-10 (CONS_TOL*mass=1e-12*|256|) + finite[A_T_phi1.5708]=True cons=True mass_drift=7.105e-13 momx_drift=1.843e-14 momy_drift=6.062e-14 tol_abs=2.560e-10 (CONS_TOL*mass=1e-12*|256|) init_rho_j_mismatch_vs_coarse_formula=1.110e-16 + transpose_ok=True max_err=6.661e-16 (tol=1.000e-15) + t0 amp A/B/C phi0.0000: 1.00000000e-03 1.00000000e-03 1.00000000e-03 + t0 max|ux A-B| patch=1.084e-19 |A-C| outside=2.168e-19 |B-C| all=6.245e-17 + t0_AB_patch_ok=True t0_AC_out_ok=True (T0_TOL=1.0e-15) init_mismatch=1.110e-16 ok=True (INIT_TOL=1.0e-12) + t0 amp A/B/C phi1.5708: 1.00000000e-03 1.00000000e-03 1.00000000e-03 + t0 max|ux A-B| patch=1.084e-19 |A-C| outside=2.168e-19 |B-C| all=6.245e-17 + t0_AB_patch_ok=True t0_AC_out_ok=True (T0_TOL=1.0e-15) init_mismatch=1.110e-16 ok=True (INIT_TOL=1.0e-12) + init_mismatch[A_T]=1.110e-16 ok=True (INIT_TOL=1.0e-12) + N_BOOLEAN_HARD_CHECKS=22: cons_A_T_phi1.5708,cons_A_phi0.0000,cons_A_phi1.5708,cons_B_phi0.0000,cons_B_phi1.5708,cons_C_phi0.0000,cons_C_phi1.5708,finite_A_T_phi1.5708,finite_A_phi0.0000,finite_A_phi1.5708,finite_B_phi0.0000,finite_B_phi1.5708,finite_C_phi0.0000,finite_C_phi1.5708,init_mismatch_ok_A_T_phi1.5708,init_mismatch_ok_phi0.0000,init_mismatch_ok_phi1.5708,t0_AB_patch_ok_phi0.0000,t0_AB_patch_ok_phi1.5708,t0_AC_out_ok_phi0.0000,t0_AC_out_ok_phi1.5708,transpose_ok + +=== DECAY FITS (coarse steps 4..32 = CPUREF ticks 8..64) === + analytic lambda = nu*k^2 = 0.01542126 + A phi0.0000: lambda=0.01585222 stderr=8.572e-08 R2=1.000000 A0=1.000000e-03 A32=5.987423e-04 + B phi0.0000: lambda=0.01539917 stderr=3.372e-15 R2=1.000000 A0=1.000000e-03 A32=6.117840e-04 + C phi0.0000: lambda=0.01554973 stderr=1.906e-08 R2=1.000000 A0=1.000000e-03 A32=6.029981e-04 + DIAG s=(lambda_A-lambda_B)/(lambda_C-lambda_B) phi0.0000: s=3.0090 (lambda_C-lambda_B)=1.505674e-04 + DIAG e_IF/e_CB step32 (unnorm L2/256cells): e_IF=1.482978e-04 e_IF_patch=7.933404e-05 e_IF_out=1.252931e-04 e_CB=9.876383e-05 ratio_IF/CB=1.5015 + DIAG per-cell RMS (uA-uB) step32 phi0.0000: patch=9.9168e-06 (64 cells) outside=9.0422e-06 (192 cells) ratio=1.097 patch_energy_frac=0.2862 (area frac 0.25) + DIAG sensors step32: nonmodal(L2/U0)=2.2349e-02 max|uy|/U0=3.6890e-03 max|drho|=3.8401e-06 + DIAG (uA-uB)_xavg(y) step32 phi0.0000: -2.032e-06 -6.024e-06 -9.820e-06 -1.332e-05 -1.222e-05 -1.167e-05 -8.270e-06 -2.980e-06 2.980e-06 8.270e-06 1.167e-05 1.222e-05 1.332e-05 9.820e-06 6.024e-06 2.032e-06 + DIAG Pi_xy_mean step32 phi0.0000: B=-1.084202e-19 C=2.168404e-19 (composite=NaN; arrival_f proxy on uniforms) + A phi1.5708: lambda=0.01584192 stderr=2.131e-07 R2=1.000000 A0=1.000000e-03 A32=5.989032e-04 + B phi1.5708: lambda=0.01539917 stderr=3.372e-15 R2=1.000000 A0=1.000000e-03 A32=6.117840e-04 + C phi1.5708: lambda=0.01554973 stderr=1.906e-08 R2=1.000000 A0=1.000000e-03 A32=6.029981e-04 + DIAG s=(lambda_A-lambda_B)/(lambda_C-lambda_B) phi1.5708: s=2.9406 (lambda_C-lambda_B)=1.505674e-04 + DIAG e_IF/e_CB step32 (unnorm L2/256cells): e_IF=1.550631e-04 e_IF_patch=9.195288e-05 e_IF_out=1.248568e-04 e_CB=9.876383e-05 ratio_IF/CB=1.5700 + DIAG per-cell RMS (uA-uB) step32 phi1.5708: patch=1.1494e-05 (64 cells) outside=9.0108e-06 (192 cells) ratio=1.276 patch_energy_frac=0.3517 (area frac 0.25) + DIAG sensors step32: nonmodal(L2/U0)=5.5487e-02 max|uy|/U0=5.0221e-03 max|drho|=4.3542e-06 + DIAG (uA-uB)_xavg(y) step32 phi1.5708: -9.119e-06 -8.622e-06 -7.886e-06 -7.167e-06 -2.176e-06 6.314e-06 1.264e-05 1.601e-05 1.601e-05 1.264e-05 6.314e-06 -2.176e-06 -7.167e-06 -7.886e-06 -8.622e-06 -9.119e-06 + DIAG Pi_xy_mean step32 phi1.5708: B=-1.084202e-19 C=2.168404e-19 (composite=NaN; arrival_f proxy on uniforms) + +=== PER-TICK AMPLITUDE (selected) === +tick A_p0 B_p0 C_p0 A_p90 B_p90 C_p90 exact + 0 1.000000e-03 1.000000e-03 1.000000e-03 1.000000e-03 1.000000e-03 1.000000e-03 1.000000e-03 + 1 9.773722e-04 9.860853e-04 9.746265e-04 9.774280e-04 9.860853e-04 9.746265e-04 9.846970e-04 + 2 9.636011e-04 9.710270e-04 9.617788e-04 9.635461e-04 9.710270e-04 9.617788e-04 9.696283e-04 + 3 9.481499e-04 9.561886e-04 9.465229e-04 9.481500e-04 9.561886e-04 9.465229e-04 9.547901e-04 + 4 9.332807e-04 9.415768e-04 9.319786e-04 9.332641e-04 9.415768e-04 9.319786e-04 9.401790e-04 + 8 8.759254e-04 8.853290e-04 8.757728e-04 8.759360e-04 8.853290e-04 8.757728e-04 8.839365e-04 + 12 8.221055e-04 8.324412e-04 8.229603e-04 8.221445e-04 8.324412e-04 8.229603e-04 8.310585e-04 + 16 7.715978e-04 7.827129e-04 7.733326e-04 7.716635e-04 7.827129e-04 7.733326e-04 7.813437e-04 + 20 7.241928e-04 7.359552e-04 7.266976e-04 7.242838e-04 7.359552e-04 7.266976e-04 7.346029e-04 + 24 6.796981e-04 6.919908e-04 6.828749e-04 6.798155e-04 6.919908e-04 6.828749e-04 6.906582e-04 + 28 6.379365e-04 6.506527e-04 6.416948e-04 6.380768e-04 6.506527e-04 6.416948e-04 6.493424e-04 + 32 5.987423e-04 6.117840e-04 6.029981e-04 5.989032e-04 6.117840e-04 6.029981e-04 6.104980e-04 + +=== NUMERIC SUMMARY === +ALL_HARD_CHECKS_PASS=True +runtime_sec=0.55 +SUMMARY_LINES_BEGIN +FIT A phi0.0000 lambda=0.0158522189 stderr=8.571672e-08 R2=1.00000000 A0=1.0000000000e-03 A32=5.9874229183e-04 +FIT B phi0.0000 lambda=0.0153991657 stderr=3.372428e-15 R2=1.00000000 A0=1.0000000000e-03 A32=6.1178402808e-04 +FIT C phi0.0000 lambda=0.0155497331 stderr=1.906424e-08 R2=1.00000000 A0=1.0000000000e-03 A32=6.0299811110e-04 +FIT A phi1.5708 lambda=0.0158419175 stderr=2.130663e-07 R2=1.00000000 A0=1.0000000000e-03 A32=5.9890316832e-04 +FIT B phi1.5708 lambda=0.0153991657 stderr=3.372390e-15 R2=1.00000000 A0=1.0000000000e-03 A32=6.1178402808e-04 +FIT C phi1.5708 lambda=0.0155497331 stderr=1.906424e-08 R2=1.00000000 A0=1.0000000000e-03 A32=6.0299811110e-04 +TRANSPOSE err=6.661338e-16 ok=True +ANALYTIC lambda=0.0154212569 +SUMMARY_LINES_END diff --git a/tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt b/tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt new file mode 100644 index 0000000..3c867cd --- /dev/null +++ b/tests/validation/multigrid/shear_v0_2_evidence/stdout_horsea.txt @@ -0,0 +1,93 @@ +RECORDER {"started_utc": "2026-10-13T05:02:42.804589+00:00", "cwd": "/home/frank14f/CelerisLab/tests/validation/multigrid", "parent_command": ["env", "OPENBLAS_NUM_THREADS=1", "PYTHONDONTWRITEBYTECODE=1", "PYTHONNOUSERSITE=1", "PYTHONOPTIMIZE=0", "PYTHONPATH=/home/frank14f/CelerisLab/tests/validation/multigrid", "CPU_REFERENCE_PATH=/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py", "/usr/bin/prlimit", "--as=268435456", "--fsize=2097152", "--core=0", "--", "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", "-B", "/home/frank14f/CelerisLab/tests/validation/multigrid/shear_v0_2_evidence/run_once.py"], "script_command": ["/usr/bin/prlimit", "--as=268435456", "--fsize=2097152", "--core=0", "--", "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", "-B", "/home/frank14f/CelerisLab/tests/validation/multigrid/shear_diagnostic_v0_2.py"], "environment": {"OPENBLAS_NUM_THREADS": "1", "PYTHONDONTWRITEBYTECODE": "1", "PYTHONNOUSERSITE": "1", "PYTHONOPTIMIZE": "0", "PYTHONPATH": "/home/frank14f/CelerisLab/tests/validation/multigrid", "CPU_REFERENCE_PATH": "/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py"}, "python_version": "3.10.13 (main, Sep 11 2023, 13:44:35) [GCC 11.2.0]", "numpy_version_from_installed_metadata": "1.26.4", "platform": "Linux-6.8.0-138-generic-x86_64-with-glibc2.35", "hard_limits": {"address_space_bytes": [268435456, 268435456], "output_file_bytes": [2097152, 2097152], "core_bytes": [0, 0]}, "planned_runs": 7, "coarse_steps_per_run": 32, "attempt": 1} +COMMAND /usr/bin/prlimit --as=268435456 --fsize=2097152 --core=0 -- /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -B /home/frank14f/CelerisLab/tests/validation/multigrid/shear_diagnostic_v0_2.py +=== shear_diagnostic_v0.2 against CPUREF-0.3 === +REF_PATH=/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py +REF_SHA256=bba2a06a9f6517b32079ffff15e4060d8c3b7ed35f16ca134e1877226c9e4e1e +API_VERSION=CPUREF-0.3 +U0=0.001 tau_c=0.8 tau_f=1.1 steps=32 nu=0.1 k=0.39269908169872414 +nu*k^2=0.01542126 (analytic decay rate) +INIT: equilibrium of averaged velocity (NOT exact cell-avg of nonlinear feq) +UNITS: fit/report 'steps' are coarse steps; CPUREF tick = fine step count + fit window coarse steps 4..32 = CPUREF ticks 8..64 + startup coarse steps 0..3 = CPUREF ticks 0..6 + nonmodal/e_IF/e_CB are unnormalised L2 sums over 256 coarse cells + (per-cell RMS = value/16); nonmodal is already /U0 +CONS_TOL=1e-12 relative to mass (~256) => abs ~2.560e-10 + +-- running C (uniform-coarse) phi0.0000 +-- running B (uniform-fine) phi0.0000 +-- running A (composite CPUREF) phi0.0000 +-- running C (uniform-coarse) phi1.5708 +-- running B (uniform-fine) phi1.5708 +-- running A (composite CPUREF) phi1.5708 +-- running A transpose phi=1.5707963267948966 + +=== HARD CHECKS === + finite[A_phi0.0000]=True cons=True mass_drift=5.969e-13 momx_drift=1.690e-13 momy_drift=2.753e-14 tol_abs=2.560e-10 (CONS_TOL*mass=1e-12*|256|) init_rho_j_mismatch_vs_coarse_formula=1.110e-16 + finite[B_phi0.0000]=True cons=True mass_drift=7.105e-13 momx_drift=2.970e-15 momy_drift=3.553e-15 tol_abs=2.560e-10 (CONS_TOL*mass=1e-12*|256|) + finite[C_phi0.0000]=True cons=True mass_drift=4.547e-13 momx_drift=4.607e-15 momy_drift=6.495e-15 tol_abs=2.560e-10 (CONS_TOL*mass=1e-12*|256|) + finite[A_phi1.5708]=True cons=True mass_drift=8.242e-13 momx_drift=1.033e-13 momy_drift=9.015e-14 tol_abs=2.560e-10 (CONS_TOL*mass=1e-12*|256|) init_rho_j_mismatch_vs_coarse_formula=1.110e-16 + finite[B_phi1.5708]=True cons=True mass_drift=6.821e-13 momx_drift=2.970e-15 momy_drift=3.553e-15 tol_abs=2.560e-10 (CONS_TOL*mass=1e-12*|256|) + finite[C_phi1.5708]=True cons=True mass_drift=4.547e-13 momx_drift=4.607e-15 momy_drift=6.495e-15 tol_abs=2.560e-10 (CONS_TOL*mass=1e-12*|256|) + finite[A_T_phi1.5708]=True cons=True mass_drift=7.105e-13 momx_drift=1.843e-14 momy_drift=6.062e-14 tol_abs=2.560e-10 (CONS_TOL*mass=1e-12*|256|) init_rho_j_mismatch_vs_coarse_formula=1.110e-16 + transpose_ok=True max_err=6.661e-16 (tol=1.000e-15) + t0 amp A/B/C phi0.0000: 1.00000000e-03 1.00000000e-03 1.00000000e-03 + t0 max|ux A-B| patch=1.084e-19 |A-C| outside=2.168e-19 |B-C| all=6.245e-17 + t0_AB_patch_ok=True t0_AC_out_ok=True (T0_TOL=1.0e-15) init_mismatch=1.110e-16 ok=True (INIT_TOL=1.0e-12) + t0 amp A/B/C phi1.5708: 1.00000000e-03 1.00000000e-03 1.00000000e-03 + t0 max|ux A-B| patch=1.084e-19 |A-C| outside=2.168e-19 |B-C| all=6.245e-17 + t0_AB_patch_ok=True t0_AC_out_ok=True (T0_TOL=1.0e-15) init_mismatch=1.110e-16 ok=True (INIT_TOL=1.0e-12) + init_mismatch[A_T]=1.110e-16 ok=True (INIT_TOL=1.0e-12) + N_BOOLEAN_HARD_CHECKS=22: cons_A_T_phi1.5708,cons_A_phi0.0000,cons_A_phi1.5708,cons_B_phi0.0000,cons_B_phi1.5708,cons_C_phi0.0000,cons_C_phi1.5708,finite_A_T_phi1.5708,finite_A_phi0.0000,finite_A_phi1.5708,finite_B_phi0.0000,finite_B_phi1.5708,finite_C_phi0.0000,finite_C_phi1.5708,init_mismatch_ok_A_T_phi1.5708,init_mismatch_ok_phi0.0000,init_mismatch_ok_phi1.5708,t0_AB_patch_ok_phi0.0000,t0_AB_patch_ok_phi1.5708,t0_AC_out_ok_phi0.0000,t0_AC_out_ok_phi1.5708,transpose_ok + +=== DECAY FITS (coarse steps 4..32 = CPUREF ticks 8..64) === + analytic lambda = nu*k^2 = 0.01542126 + A phi0.0000: lambda=0.01585222 stderr=8.572e-08 R2=1.000000 A0=1.000000e-03 A32=5.987423e-04 + B phi0.0000: lambda=0.01539917 stderr=3.372e-15 R2=1.000000 A0=1.000000e-03 A32=6.117840e-04 + C phi0.0000: lambda=0.01554973 stderr=1.906e-08 R2=1.000000 A0=1.000000e-03 A32=6.029981e-04 + DIAG s=(lambda_A-lambda_B)/(lambda_C-lambda_B) phi0.0000: s=3.0090 (lambda_C-lambda_B)=1.505674e-04 + DIAG e_IF/e_CB step32 (unnorm L2/256cells): e_IF=1.482978e-04 e_IF_patch=7.933404e-05 e_IF_out=1.252931e-04 e_CB=9.876383e-05 ratio_IF/CB=1.5015 + DIAG per-cell RMS (uA-uB) step32 phi0.0000: patch=9.9168e-06 (64 cells) outside=9.0422e-06 (192 cells) ratio=1.097 patch_energy_frac=0.2862 (area frac 0.25) + DIAG sensors step32: nonmodal(L2/U0)=2.2349e-02 max|uy|/U0=3.6890e-03 max|drho|=3.8401e-06 + DIAG (uA-uB)_xavg(y) step32 phi0.0000: -2.032e-06 -6.024e-06 -9.820e-06 -1.332e-05 -1.222e-05 -1.167e-05 -8.270e-06 -2.980e-06 2.980e-06 8.270e-06 1.167e-05 1.222e-05 1.332e-05 9.820e-06 6.024e-06 2.032e-06 + DIAG Pi_xy_mean step32 phi0.0000: B=-1.084202e-19 C=2.168404e-19 (composite=NaN; arrival_f proxy on uniforms) + A phi1.5708: lambda=0.01584192 stderr=2.131e-07 R2=1.000000 A0=1.000000e-03 A32=5.989032e-04 + B phi1.5708: lambda=0.01539917 stderr=3.372e-15 R2=1.000000 A0=1.000000e-03 A32=6.117840e-04 + C phi1.5708: lambda=0.01554973 stderr=1.906e-08 R2=1.000000 A0=1.000000e-03 A32=6.029981e-04 + DIAG s=(lambda_A-lambda_B)/(lambda_C-lambda_B) phi1.5708: s=2.9406 (lambda_C-lambda_B)=1.505674e-04 + DIAG e_IF/e_CB step32 (unnorm L2/256cells): e_IF=1.550631e-04 e_IF_patch=9.195288e-05 e_IF_out=1.248568e-04 e_CB=9.876383e-05 ratio_IF/CB=1.5700 + DIAG per-cell RMS (uA-uB) step32 phi1.5708: patch=1.1494e-05 (64 cells) outside=9.0108e-06 (192 cells) ratio=1.276 patch_energy_frac=0.3517 (area frac 0.25) + DIAG sensors step32: nonmodal(L2/U0)=5.5487e-02 max|uy|/U0=5.0221e-03 max|drho|=4.3542e-06 + DIAG (uA-uB)_xavg(y) step32 phi1.5708: -9.119e-06 -8.622e-06 -7.886e-06 -7.167e-06 -2.176e-06 6.314e-06 1.264e-05 1.601e-05 1.601e-05 1.264e-05 6.314e-06 -2.176e-06 -7.167e-06 -7.886e-06 -8.622e-06 -9.119e-06 + DIAG Pi_xy_mean step32 phi1.5708: B=-1.084202e-19 C=2.168404e-19 (composite=NaN; arrival_f proxy on uniforms) + +=== PER-TICK AMPLITUDE (selected) === +tick A_p0 B_p0 C_p0 A_p90 B_p90 C_p90 exact + 0 1.000000e-03 1.000000e-03 1.000000e-03 1.000000e-03 1.000000e-03 1.000000e-03 1.000000e-03 + 1 9.773722e-04 9.860853e-04 9.746265e-04 9.774280e-04 9.860853e-04 9.746265e-04 9.846970e-04 + 2 9.636011e-04 9.710270e-04 9.617788e-04 9.635461e-04 9.710270e-04 9.617788e-04 9.696283e-04 + 3 9.481499e-04 9.561886e-04 9.465229e-04 9.481500e-04 9.561886e-04 9.465229e-04 9.547901e-04 + 4 9.332807e-04 9.415768e-04 9.319786e-04 9.332641e-04 9.415768e-04 9.319786e-04 9.401790e-04 + 8 8.759254e-04 8.853290e-04 8.757728e-04 8.759360e-04 8.853290e-04 8.757728e-04 8.839365e-04 + 12 8.221055e-04 8.324412e-04 8.229603e-04 8.221445e-04 8.324412e-04 8.229603e-04 8.310585e-04 + 16 7.715978e-04 7.827129e-04 7.733326e-04 7.716635e-04 7.827129e-04 7.733326e-04 7.813437e-04 + 20 7.241928e-04 7.359552e-04 7.266976e-04 7.242838e-04 7.359552e-04 7.266976e-04 7.346029e-04 + 24 6.796981e-04 6.919908e-04 6.828749e-04 6.798155e-04 6.919908e-04 6.828749e-04 6.906582e-04 + 28 6.379365e-04 6.506527e-04 6.416948e-04 6.380768e-04 6.506527e-04 6.416948e-04 6.493424e-04 + 32 5.987423e-04 6.117840e-04 6.029981e-04 5.989032e-04 6.117840e-04 6.029981e-04 6.104980e-04 + +=== NUMERIC SUMMARY === +ALL_HARD_CHECKS_PASS=True +runtime_sec=2.07 +SUMMARY_LINES_BEGIN +FIT A phi0.0000 lambda=0.0158522189 stderr=8.571672e-08 R2=1.00000000 A0=1.0000000000e-03 A32=5.9874229183e-04 +FIT B phi0.0000 lambda=0.0153991657 stderr=3.372428e-15 R2=1.00000000 A0=1.0000000000e-03 A32=6.1178402808e-04 +FIT C phi0.0000 lambda=0.0155497331 stderr=1.906424e-08 R2=1.00000000 A0=1.0000000000e-03 A32=6.0299811110e-04 +FIT A phi1.5708 lambda=0.0158419175 stderr=2.130663e-07 R2=1.00000000 A0=1.0000000000e-03 A32=5.9890316832e-04 +FIT B phi1.5708 lambda=0.0153991657 stderr=3.372390e-15 R2=1.00000000 A0=1.0000000000e-03 A32=6.1178402808e-04 +FIT C phi1.5708 lambda=0.0155497331 stderr=1.906424e-08 R2=1.00000000 A0=1.0000000000e-03 A32=6.0299811110e-04 +TRANSPOSE err=6.661338e-16 ok=True +ANALYTIC lambda=0.0154212569 +SUMMARY_LINES_END + +RUN_RESULT {"started_utc": "2026-10-13T05:02:42.804589+00:00", "cwd": "/home/frank14f/CelerisLab/tests/validation/multigrid", "parent_command": ["env", "OPENBLAS_NUM_THREADS=1", "PYTHONDONTWRITEBYTECODE=1", "PYTHONNOUSERSITE=1", "PYTHONOPTIMIZE=0", "PYTHONPATH=/home/frank14f/CelerisLab/tests/validation/multigrid", "CPU_REFERENCE_PATH=/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py", "/usr/bin/prlimit", "--as=268435456", "--fsize=2097152", "--core=0", "--", "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", "-B", "/home/frank14f/CelerisLab/tests/validation/multigrid/shear_v0_2_evidence/run_once.py"], "script_command": ["/usr/bin/prlimit", "--as=268435456", "--fsize=2097152", "--core=0", "--", "/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python", "-B", "/home/frank14f/CelerisLab/tests/validation/multigrid/shear_diagnostic_v0_2.py"], "environment": {"OPENBLAS_NUM_THREADS": "1", "PYTHONDONTWRITEBYTECODE": "1", "PYTHONNOUSERSITE": "1", "PYTHONOPTIMIZE": "0", "PYTHONPATH": "/home/frank14f/CelerisLab/tests/validation/multigrid", "CPU_REFERENCE_PATH": "/home/frank14f/CelerisLab/tests/validation/multigrid/cpu_reference.py"}, "python_version": "3.10.13 (main, Sep 11 2023, 13:44:35) [GCC 11.2.0]", "numpy_version_from_installed_metadata": "1.26.4", "platform": "Linux-6.8.0-138-generic-x86_64-with-glibc2.35", "hard_limits": {"address_space_bytes": [268435456, 268435456], "output_file_bytes": [2097152, 2097152], "core_bytes": [0, 0]}, "planned_runs": 7, "coarse_steps_per_run": 32, "attempt": 1, "returncode": 0, "elapsed_seconds": 2.2370318549801596, "child_peak_rss_MiB": 37.69140625, "parent_peak_rss_MiB": 18.75, "completed_utc": "2026-10-13T05:02:45.056308+00:00"}