ehsanroohi commited on
Commit
e9629cb
·
verified ·
1 Parent(s): 8f073d1

Publish task-preserving HJ checkpoints and model card

Browse files

Three registered seeds, validation-selected thresholds, aggregate evaluation, limitations, and links to GitHub and supplementary movies.

LICENSE ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ehsan Roohi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
MODEL_CARD_LIMITATIONS.md ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Intended use and limitations
2
+
3
+ The checkpoints are research artifacts for segmentation of shocks and
4
+ vortex-core candidates in two-dimensional compressible CFD fields following the
5
+ documented input contract. They are not a flow solver, a substitute for CFD
6
+ convergence checks, or a universal detector.
7
+
8
+ Training supervision is physics-derived and weak. CFD Dice values measure
9
+ agreement with corrected weak references, not human ground truth. Analytic
10
+ vortex and SU2-ray evaluations are independent bounded controls but do not
11
+ measure complete post-shock vortex accuracy or full-front precision. Sigmoid
12
+ scores are not independently calibrated probabilities. Near-wall vorticity,
13
+ strong shear, contact-like layers, numerical oscillations and unfamiliar grids
14
+ remain possible failure modes. Users must inspect overlays and preserve the
15
+ separation among ML-only, physics-only and hybrid products.
16
+
README.md CHANGED
@@ -1,3 +1,70 @@
1
  ---
2
  license: mit
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
  license: mit
3
+ library_name: pytorch
4
+ pipeline_tag: image-segmentation
5
+ tags:
6
+ - computational-fluid-dynamics
7
+ - compressible-flow
8
+ - shock-detection
9
+ - vortex-detection
10
+ - multi-label-segmentation
11
+ - task-preserving-adaptation
12
+ datasets:
13
+ - custom
14
+ metrics:
15
+ - dice
16
  ---
17
+
18
+ # Task-Preserving Shock–Vortex Segmentation (HJ)
19
+
20
+ This repository contains the three registered checkpoints of the task-preserving
21
+ harmonized joint (HJ) network used for overlapping shock and vortex-core
22
+ segmentation in compressible CFD. The model consumes primitive flow fields plus
23
+ deterministic differential diagnostics and returns independent sigmoid fields;
24
+ shock and vortex labels are therefore allowed to overlap.
25
+
26
+ The architecture has a shared encoder with widths `[10, 20, 40, 80]` and
27
+ task-specific shock and vortex decoders. During corrected-target shock
28
+ adaptation, the encoder and complete vortex pathway are frozen. Only the shock
29
+ decoder and projection are updated, giving exact retained-task preservation by
30
+ construction and direct array replay.
31
+
32
+ ## Registered results
33
+
34
+ Means and sample standard deviations over seeds 20260904–20260906:
35
+
36
+ | Evaluation | Result |
37
+ |---|---:|
38
+ | Airfoil shock Dice, corrected weak reference | 0.936 ± 0.004 |
39
+ | Cylinder shock Dice, corrected weak reference | 0.939 ± 0.024 |
40
+ | Retained airfoil core Dice | 0.827 ± 0.048 |
41
+ | Retained cylinder core Dice | 0.228 ± 0.020 |
42
+ | Independent analytic-vortex disk Dice | 0.672 ± 0.086 |
43
+ | Independent analytic centre recovery | 0.889 ± 0.192 |
44
+ | Continued-SU2 finite-ray coverage | 1.000 ± 0.000 |
45
+ | Continued-SU2 conditional normal MAE | 0.00284c ± 0.00092c |
46
+
47
+ Core probability drift is exactly zero for all three seeds over all 129
48
+ seed–field evaluations. These results do **not** establish human-ground-truth
49
+ accuracy, universal geometry transfer, or complete-front validation. The CFD
50
+ Dice references are physics-derived weak references; the analytic vortex and
51
+ finite SU2 rays are distinct bounded controls.
52
+
53
+ ## Files
54
+
55
+ - `checkpoint_seed2026090X.pt`: task-preserving HJ checkpoint.
56
+ - `thresholds_seed2026090X.json`: validation-selected operating point.
57
+ - `aggregate.json`: complete three-seed aggregate used by the manuscript.
58
+ - `MODEL_CARD_LIMITATIONS.md`: intended use and limitations.
59
+
60
+ ## Code, media and demo
61
+
62
+ - [Source code and reproducibility material](https://github.com/Ehsan-Roohi/ShockVortexML)
63
+ - [Original-quality supplementary movies](https://github.com/Ehsan-Roohi/ShockVortexML/releases/tag/movies-localfront-v2-20260909)
64
+ - [Author’s YouTube channel](https://www.youtube.com/@ehsan_roohi)
65
+ - Interactive Space: linked from this model page after publication.
66
+
67
+ ## License and citation
68
+
69
+ Released under the MIT License. The manuscript is under review/preparation;
70
+ please use the repository citation metadata until a DOI is assigned.
aggregate.json ADDED
@@ -0,0 +1,329 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "seeds": [
3
+ 20260904,
4
+ 20260905,
5
+ 20260906
6
+ ],
7
+ "arms": {
8
+ "hj_restricted": {
9
+ "label": "Task-preserving HJ",
10
+ "parameters": 268496,
11
+ "trainable_parameters": 75891,
12
+ "shock_dice": {
13
+ "airfoil": {
14
+ "mean": 0.9357071988455214,
15
+ "sample_sd": 0.004202090216577011,
16
+ "values": [
17
+ 0.9344757083049362,
18
+ 0.9322584471635962,
19
+ 0.9403874410680321
20
+ ]
21
+ },
22
+ "cylinder": {
23
+ "mean": 0.9386199049068382,
24
+ "sample_sd": 0.02439132578156726,
25
+ "values": [
26
+ 0.9633139318703084,
27
+ 0.9380027911530677,
28
+ 0.9145429916971386
29
+ ]
30
+ }
31
+ },
32
+ "core_dice": {
33
+ "airfoil": {
34
+ "mean": 0.8269258635545622,
35
+ "sample_sd": 0.04765046704785947,
36
+ "values": [
37
+ 0.8326573417737513,
38
+ 0.8714513644366197,
39
+ 0.7766688844533156
40
+ ]
41
+ },
42
+ "cylinder": {
43
+ "mean": 0.2277874006486062,
44
+ "sample_sd": 0.02043299476214628,
45
+ "values": [
46
+ 0.21611023364740484,
47
+ 0.21587098195068724,
48
+ 0.25138098634772654
49
+ ]
50
+ }
51
+ },
52
+ "core_probability_max_drift_by_seed": [
53
+ 0.0,
54
+ 0.0,
55
+ 0.0
56
+ ],
57
+ "core_probability_bit_exact_by_seed": [
58
+ true,
59
+ true,
60
+ true
61
+ ],
62
+ "analytic_vortex_dice": {
63
+ "mean": 0.6724153508806848,
64
+ "sample_sd": 0.08568023829738895,
65
+ "values": [
66
+ 0.5769273709675609,
67
+ 0.697739762255559,
68
+ 0.7425789194189347
69
+ ]
70
+ },
71
+ "analytic_centre_recovery": {
72
+ "mean": 0.8888888888888888,
73
+ "sample_sd": 0.1924500897298753,
74
+ "values": [
75
+ 0.6666666666666666,
76
+ 1.0,
77
+ 1.0
78
+ ]
79
+ },
80
+ "parallel_shear_core_fraction_by_seed": [
81
+ 0.0,
82
+ 0.0,
83
+ 0.0
84
+ ],
85
+ "su2_ray_coverage": {
86
+ "mean": 1.0,
87
+ "sample_sd": 0.0,
88
+ "values": [
89
+ 1.0,
90
+ 1.0,
91
+ 1.0
92
+ ]
93
+ },
94
+ "su2_normal_mae_c": {
95
+ "mean": 0.0028370008979655163,
96
+ "sample_sd": 0.0009152518358685503,
97
+ "values": [
98
+ 0.002958751756579843,
99
+ 0.0018669673584372772,
100
+ 0.0036852835788794285
101
+ ]
102
+ },
103
+ "su2_absolute_angle_error_deg": {
104
+ "mean": 0.18143140034565305,
105
+ "sample_sd": 0.06487893122310609,
106
+ "values": [
107
+ 0.21318896960592185,
108
+ 0.22431372796385815,
109
+ 0.10679150346717918
110
+ ]
111
+ }
112
+ },
113
+ "unet_decoder": {
114
+ "label": "Shared-decoder U-Net",
115
+ "parameters": 267639,
116
+ "trainable_parameters": 107982,
117
+ "shock_dice": {
118
+ "airfoil": {
119
+ "mean": 0.935129593481926,
120
+ "sample_sd": 0.010422196951165707,
121
+ "values": [
122
+ 0.9373893805309734,
123
+ 0.9237628932698358,
124
+ 0.9442365066449688
125
+ ]
126
+ },
127
+ "cylinder": {
128
+ "mean": 0.8952466680148627,
129
+ "sample_sd": 0.02168587314766801,
130
+ "values": [
131
+ 0.9029934022401697,
132
+ 0.8707512695811054,
133
+ 0.9119953322233133
134
+ ]
135
+ }
136
+ },
137
+ "core_dice": {
138
+ "airfoil": {
139
+ "mean": 0.0826739706460272,
140
+ "sample_sd": 0.07363293735241894,
141
+ "values": [
142
+ 0.031190445940795324,
143
+ 0.16701517391824225,
144
+ 0.049816292079044054
145
+ ]
146
+ },
147
+ "cylinder": {
148
+ "mean": 0.0006778472151364567,
149
+ "sample_sd": 0.0010449639082319893,
150
+ "values": [
151
+ 0.0,
152
+ 0.0018812602293524971,
153
+ 0.0001522814160568731
154
+ ]
155
+ }
156
+ },
157
+ "core_probability_max_drift_by_seed": [
158
+ 0.9986276626586914,
159
+ 0.9993672966957092,
160
+ 0.9808923602104187
161
+ ],
162
+ "core_probability_bit_exact_by_seed": [
163
+ false,
164
+ false,
165
+ false
166
+ ],
167
+ "analytic_vortex_dice": {
168
+ "mean": 0.08138905594173194,
169
+ "sample_sd": 0.06587599798052739,
170
+ "values": [
171
+ 0.06842924398390403,
172
+ 0.022956100595298717,
173
+ 0.15278182324599307
174
+ ]
175
+ },
176
+ "analytic_centre_recovery": {
177
+ "mean": 0.4722222222222222,
178
+ "sample_sd": 0.5023094811118091,
179
+ "values": [
180
+ 0.4166666666666667,
181
+ 0.0,
182
+ 1.0
183
+ ]
184
+ },
185
+ "parallel_shear_core_fraction_by_seed": [
186
+ 0.0,
187
+ 0.0,
188
+ 0.0
189
+ ],
190
+ "su2_ray_coverage": {
191
+ "mean": 1.0,
192
+ "sample_sd": 0.0,
193
+ "values": [
194
+ 1.0,
195
+ 1.0,
196
+ 1.0
197
+ ]
198
+ },
199
+ "su2_normal_mae_c": {
200
+ "mean": 0.00303275559886716,
201
+ "sample_sd": 0.00037233965760421583,
202
+ "values": [
203
+ 0.003356846392082894,
204
+ 0.0026260457607492488,
205
+ 0.003115374643769338
206
+ ]
207
+ },
208
+ "su2_absolute_angle_error_deg": {
209
+ "mean": 0.19599332091759744,
210
+ "sample_sd": 0.0681041637364286,
211
+ "values": [
212
+ 0.22607250461241507,
213
+ 0.2438791543721152,
214
+ 0.11802830376826208
215
+ ]
216
+ }
217
+ },
218
+ "hj_joint": {
219
+ "label": "Joint HJ control",
220
+ "parameters": 268496,
221
+ "trainable_parameters": 268496,
222
+ "shock_dice": {
223
+ "airfoil": {
224
+ "mean": 0.9579573129256692,
225
+ "sample_sd": 0.0012847180825509754,
226
+ "values": [
227
+ 0.9566206394057329,
228
+ 0.9580684437295857,
229
+ 0.9591828556416889
230
+ ]
231
+ },
232
+ "cylinder": {
233
+ "mean": 0.9550029949711734,
234
+ "sample_sd": 0.021041558444334304,
235
+ "values": [
236
+ 0.96236045950239,
237
+ 0.9312706353897836,
238
+ 0.9713778900213463
239
+ ]
240
+ }
241
+ },
242
+ "core_dice": {
243
+ "airfoil": {
244
+ "mean": 0.38242093516209885,
245
+ "sample_sd": 0.3819531226443472,
246
+ "values": [
247
+ 0.7809354789713089,
248
+ 0.346802921008104,
249
+ 0.019524405506883606
250
+ ]
251
+ },
252
+ "cylinder": {
253
+ "mean": 0.10417600929204775,
254
+ "sample_sd": 0.08639857863261999,
255
+ "values": [
256
+ 0.1185937184552822,
257
+ 0.18245874281475988,
258
+ 0.011475566606101176
259
+ ]
260
+ }
261
+ },
262
+ "core_probability_max_drift_by_seed": [
263
+ 0.9097776412963867,
264
+ 0.9530678987503052,
265
+ 0.970103919506073
266
+ ],
267
+ "core_probability_bit_exact_by_seed": [
268
+ false,
269
+ false,
270
+ false
271
+ ],
272
+ "analytic_vortex_dice": {
273
+ "mean": 0.593029778671725,
274
+ "sample_sd": 0.1915973306070832,
275
+ "values": [
276
+ 0.3750270075978114,
277
+ 0.7346751674685614,
278
+ 0.6693871609488024
279
+ ]
280
+ },
281
+ "analytic_centre_recovery": {
282
+ "mean": 0.8611111111111112,
283
+ "sample_sd": 0.24056261216234404,
284
+ "values": [
285
+ 0.5833333333333334,
286
+ 1.0,
287
+ 1.0
288
+ ]
289
+ },
290
+ "parallel_shear_core_fraction_by_seed": [
291
+ 0.0,
292
+ 0.0,
293
+ 0.0
294
+ ],
295
+ "su2_ray_coverage": {
296
+ "mean": 1.0,
297
+ "sample_sd": 0.0,
298
+ "values": [
299
+ 1.0,
300
+ 1.0,
301
+ 1.0
302
+ ]
303
+ },
304
+ "su2_normal_mae_c": {
305
+ "mean": 0.002473480977439144,
306
+ "sample_sd": 0.00021664348876689025,
307
+ "values": [
308
+ 0.002471484269415214,
309
+ 0.002691115919064767,
310
+ 0.002257842743837451
311
+ ]
312
+ },
313
+ "su2_absolute_angle_error_deg": {
314
+ "mean": 0.1494419299895185,
315
+ "sample_sd": 0.045027183385208974,
316
+ "values": [
317
+ 0.1930990552509229,
318
+ 0.10315955775708403,
319
+ 0.15206717696054853
320
+ ]
321
+ }
322
+ }
323
+ },
324
+ "scope": {
325
+ "segmentation": "43 development-test fields per seed; weak corrected targets; thresholds selected on 43 validation fields only",
326
+ "analytic_vortex": "48 states from 24 correlated two-time analytic trajectories; no training or calibration",
327
+ "su2": "five finite analytical ray segments per seed; exposed-development fields; conditional localization"
328
+ }
329
+ }
checkpoint_seed20260904.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cc9c132c724b8f7517724d4f037f241c6941b90e048dfb877d346773ed733099
3
+ size 1103349
checkpoint_seed20260905.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ae1dc8c0b3819eba4ce6387157b486b92514ec924de88500a2a639f98cc47b08
3
+ size 1103349
checkpoint_seed20260906.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:af4bc7ae0988a9383dab5d8241bbd8c5705de717b8c30d4e417ef2cf1186edab
3
+ size 1103349
thresholds_seed20260904.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "shock": 0.97,
3
+ "vortex_core": 0.85,
4
+ "selection": "validation-only family-macro corrected weak Dice; core threshold inherited"
5
+ }
thresholds_seed20260905.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "shock": 0.97,
3
+ "vortex_core": 0.85,
4
+ "selection": "validation-only family-macro corrected weak Dice; core threshold inherited"
5
+ }
thresholds_seed20260906.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "shock": 0.97,
3
+ "vortex_core": 0.85,
4
+ "selection": "validation-only family-macro corrected weak Dice; core threshold inherited"
5
+ }