Files
CFDManager/docs/theory/2d_solver/bench/scenarios.json
T
NotBigGhostandClaude Opus 5 8d17bc8014 Валидационная кампания на 115 прогонов и Docker-образ для сервера
bench/ — список сценариев (порождается gen_scenarios.py, а не правится
руками), драйверы под Linux и Windows, предполётная проверка и описание.
Девять групп: эталоны первоисточников, цилиндр против литературы, модели
стенки и субсеточность, профили крыла, сложная и множественная геометрия,
границы домена, старт и время жизни, внутренние инварианты, сверхмелкие
сетки до 4096×2048. Стоимость планируется в обновлениях узлов —
единственной переносимой между машинами мере; в часы драйвер переводит её
по фактическим MLUPS, которые замеряет на месте (--calibrate). Итого
3.76e14 обновлений, ≈90 часов на 4070 Ti.

Гифки пишутся на всю длительность прогона в реальном времени, 10 кадр/с.
Число кадров этим задано жёстко, поэтому размер регулируется только кадром:
замерено 0.103 байта на пиксель после LZW, отсюда бюджет кадры×пиксели с
нижней границей по ширине. Итог 4.4 ГБ, самый тяжёлый файл 226 МБ.

preflight.py гоняет каждый сценарий на два шага. Окупился сразу: поймал,
что вся группа сверхмелких сеток падала на пределе GPU, а девять прогонов
группы F передавали --body-x дважды. Оба отказа проявились бы только на
сервере, часов через двадцать после старта кампании.

Docker: двухстадийная сборка, в образе libvulkan1 и vulkan-tools.
NVIDIA Container Toolkit подкладывает Vulkan-ICD только при graphics в
NVIDIA_DRIVER_CAPABILITIES — без него wgpu не увидит карту, поэтому
capabilities прописаны в образе, а vulkaninfo лежит внутрь для проверки.
ENTRYPOINT — драйвер кампании, CMD по умолчанию --dry-run, чтобы случайный
docker run не запустил сточасовую задачу. Проверено локально: образ
собирается, смоук проходит с монтированием результатов на хост, физика
совпадает с хостовой до последней цифры, --backend gpu без карты отказывает
явно. GPU-путь в контейнере проверяется только на машине с картой.

В README поправлено разделение вкладов в продольную акустику: измерением
2×2 показано, что 74.9% → 1.1% даёт ОДНОРОДНЫЙ СТАРТ, причём при полностью
выключенной губке, а губка снимает лишь остаток (1.12% → 0.83% при
утроении длины). При старте из покоя губка не помогает совсем — у стоячей
четвертьволновой моды там узел давления, где вязкость её не трогает.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 17:36:40 +03:00

4853 lines
92 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"meta": {
"note": "Стоимость в обновлениях узлов — единственная переносимая между машинами мера. Часы драйвер получает, поделив её на фактические MLUPS, которые замеряет на месте (--calibrate).",
"gif_policy": "вся длительность прогона, реальная скорость, 10 кадр/с; кадр прореживается до ширины не больше 1280 пикселей",
"scale": 2.0,
"assumed_gpu_mlups": 1200,
"assumed_cpu_mlups": 22
},
"runs": [
{
"id": "A01_tg_diff_n64",
"group": "A",
"title": "Тейлор–Грин, диффузионное измельчение, N=64 (CPU/f64)",
"expect": "порядок сходимости 2 по ряду N=64..512; ошибка на N=512 ниже 2e-4",
"backend": "cpu",
"args": [
"--case",
"taylor-green",
"--nx",
"64",
"--ny",
"64",
"--refine",
"1",
"--u-lat",
"0.030000",
"--re",
"100",
"--case-every",
"11",
"--steps",
"220",
"--backend",
"cpu",
"--case-csv",
"A01_tg_diff_n64_case.csv"
],
"nodes_per_step": 4096,
"steps": 220,
"cost": 901120,
"outputs": [
"case_csv"
]
},
{
"id": "A02_tg_diff_n128",
"group": "A",
"title": "Тейлор–Грин, диффузионное измельчение, N=128 (CPU/f64)",
"expect": "порядок сходимости 2 по ряду N=64..512; ошибка на N=512 ниже 2e-4",
"backend": "cpu",
"args": [
"--case",
"taylor-green",
"--nx",
"128",
"--ny",
"128",
"--refine",
"1",
"--u-lat",
"0.015000",
"--re",
"100",
"--case-every",
"44",
"--steps",
"881",
"--backend",
"cpu",
"--case-csv",
"A02_tg_diff_n128_case.csv"
],
"nodes_per_step": 16384,
"steps": 881,
"cost": 14434304,
"outputs": [
"case_csv"
]
},
{
"id": "A03_tg_diff_n256",
"group": "A",
"title": "Тейлор–Грин, диффузионное измельчение, N=256 (CPU/f64)",
"expect": "порядок сходимости 2 по ряду N=64..512; ошибка на N=512 ниже 2e-4",
"backend": "cpu",
"args": [
"--case",
"taylor-green",
"--nx",
"256",
"--ny",
"256",
"--refine",
"1",
"--u-lat",
"0.007500",
"--re",
"100",
"--case-every",
"176",
"--steps",
"3525",
"--backend",
"cpu",
"--case-csv",
"A03_tg_diff_n256_case.csv"
],
"nodes_per_step": 65536,
"steps": 3525,
"cost": 231014400,
"outputs": [
"case_csv"
]
},
{
"id": "A04_tg_diff_n512",
"group": "A",
"title": "Тейлор–Грин, диффузионное измельчение, N=512 (CPU/f64)",
"expect": "порядок сходимости 2 по ряду N=64..512; ошибка на N=512 ниже 2e-4",
"backend": "cpu",
"args": [
"--case",
"taylor-green",
"--nx",
"512",
"--ny",
"512",
"--refine",
"1",
"--u-lat",
"0.003750",
"--re",
"100",
"--case-every",
"705",
"--steps",
"14101",
"--backend",
"cpu",
"--case-csv",
"A04_tg_diff_n512_case.csv"
],
"nodes_per_step": 262144,
"steps": 14101,
"cost": 3696492544,
"outputs": [
"case_csv"
]
},
{
"id": "A05_tg_fixed_n128",
"group": "A",
"title": "Тейлор–Грин при фиксированном u₀, N=128 — демонстрация полки O(Ma²)",
"expect": "ошибка перестаёт падать с ростом N: это свойство слабо-сжимаемого метода",
"backend": "cpu",
"args": [
"--case",
"taylor-green",
"--nx",
"128",
"--ny",
"128",
"--refine",
"1",
"--u-lat",
"0.03",
"--re",
"200.0",
"--case-every",
"44",
"--steps",
"881",
"--backend",
"cpu",
"--case-csv",
"A05_tg_fixed_n128_case.csv"
],
"nodes_per_step": 16384,
"steps": 881,
"cost": 14434304,
"outputs": [
"case_csv"
]
},
{
"id": "A06_tg_fixed_n256",
"group": "A",
"title": "Тейлор–Грин при фиксированном u₀, N=256 — демонстрация полки O(Ma²)",
"expect": "ошибка перестаёт падать с ростом N: это свойство слабо-сжимаемого метода",
"backend": "cpu",
"args": [
"--case",
"taylor-green",
"--nx",
"256",
"--ny",
"256",
"--refine",
"1",
"--u-lat",
"0.03",
"--re",
"400.0",
"--case-every",
"176",
"--steps",
"3525",
"--backend",
"cpu",
"--case-csv",
"A06_tg_fixed_n256_case.csv"
],
"nodes_per_step": 65536,
"steps": 3525,
"cost": 231014400,
"outputs": [
"case_csv"
]
},
{
"id": "A07_shear_n512_kbc_n1",
"group": "A",
"title": "Сдвиговый слой Re=3·10⁴, N=512, kbc_n1",
"expect": "KBC доживает до конца, LBGK обязан развалиться (разд. VII статьи)",
"backend": "gpu",
"args": [
"--case",
"shear-layer",
"--nx",
"512",
"--ny",
"512",
"--refine",
"1",
"--u-lat",
"0.04",
"--re",
"30000",
"--collision",
"kbc",
"--kbc-model",
"n1",
"--case-every",
"512",
"--steps",
"102400",
"--backend",
"gpu",
"--case-csv",
"A07_shear_n512_kbc_n1_case.csv",
"--gif",
"shear_kbc_n1.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 262144,
"steps": 102400,
"cost": 26843545600,
"outputs": [
"case_csv"
]
},
{
"id": "A08_shear_n512_kbc_n2",
"group": "A",
"title": "Сдвиговый слой Re=3·10⁴, N=512, kbc_n2",
"expect": "KBC доживает до конца, LBGK обязан развалиться (разд. VII статьи)",
"backend": "gpu",
"args": [
"--case",
"shear-layer",
"--nx",
"512",
"--ny",
"512",
"--refine",
"1",
"--u-lat",
"0.04",
"--re",
"30000",
"--collision",
"kbc",
"--kbc-model",
"n2",
"--case-every",
"512",
"--steps",
"102400",
"--backend",
"gpu",
"--case-csv",
"A08_shear_n512_kbc_n2_case.csv",
"--gif",
"shear_kbc_n2.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 262144,
"steps": 102400,
"cost": 26843545600,
"outputs": [
"case_csv"
]
},
{
"id": "A09_shear_n512_lbgk",
"group": "A",
"title": "Сдвиговый слой Re=3·10⁴, N=512, lbgk",
"expect": "KBC доживает до конца, LBGK обязан развалиться (разд. VII статьи)",
"backend": "gpu",
"args": [
"--case",
"shear-layer",
"--nx",
"512",
"--ny",
"512",
"--refine",
"1",
"--u-lat",
"0.04",
"--re",
"30000",
"--collision",
"bgk",
"--kbc-model",
"n1",
"--case-every",
"512",
"--steps",
"102400",
"--backend",
"gpu",
"--case-csv",
"A09_shear_n512_lbgk_case.csv",
"--gif",
"shear_lbgk.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 262144,
"steps": 102400,
"cost": 26843545600,
"outputs": [
"case_csv"
]
},
{
"id": "A10_turb_n2048_kbc",
"group": "A",
"title": "Затухающая турбулентность N=2048, kbc",
"expect": "энстрофия и палинстрофия падают монотонно; KBC держится там, где LBGK нет",
"backend": "gpu",
"args": [
"--case",
"decaying-turbulence",
"--nx",
"2048",
"--ny",
"2048",
"--refine",
"1",
"--u-lat",
"0.02",
"--re",
"501961",
"--collision",
"kbc",
"--case-every",
"1333",
"--steps",
"400000",
"--backend",
"gpu",
"--case-csv",
"A10_turb_n2048_kbc_case.csv",
"--gif",
"turb_n2048_kbc.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"2",
"--gif-scale",
"1"
],
"nodes_per_step": 4194304,
"steps": 400000,
"cost": 1677721600000,
"outputs": [
"case_csv"
]
},
{
"id": "A11_turb_n2048_bgk",
"group": "A",
"title": "Затухающая турбулентность N=2048, bgk",
"expect": "энстрофия и палинстрофия падают монотонно; KBC держится там, где LBGK нет",
"backend": "gpu",
"args": [
"--case",
"decaying-turbulence",
"--nx",
"2048",
"--ny",
"2048",
"--refine",
"1",
"--u-lat",
"0.02",
"--re",
"501961",
"--collision",
"bgk",
"--case-every",
"1333",
"--steps",
"400000",
"--backend",
"gpu",
"--case-csv",
"A11_turb_n2048_bgk_case.csv",
"--gif",
"turb_n2048_bgk.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"2",
"--gif-scale",
"1"
],
"nodes_per_step": 4194304,
"steps": 400000,
"cost": 1677721600000,
"outputs": [
"case_csv"
]
},
{
"id": "A12_turb_n4096_kbc",
"group": "A",
"title": "Затухающая турбулентность N=4096, kbc",
"expect": "энстрофия и палинстрофия падают монотонно; KBC держится там, где LBGK нет",
"backend": "gpu",
"args": [
"--case",
"decaying-turbulence",
"--nx",
"4096",
"--ny",
"4096",
"--refine",
"1",
"--u-lat",
"0.02",
"--re",
"1003922",
"--collision",
"kbc",
"--case-every",
"666",
"--steps",
"200000",
"--backend",
"gpu",
"--case-csv",
"A12_turb_n4096_kbc_case.csv",
"--gif",
"turb_n4096_kbc.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"4",
"--gif-scale",
"1"
],
"nodes_per_step": 16777216,
"steps": 200000,
"cost": 3355443200000,
"outputs": [
"case_csv"
]
},
{
"id": "B01_cyl_re20",
"group": "B",
"title": "Цилиндр Re=20, стационар, D=48",
"expect": "Cd выходит на постоянную; сравнение с литературой по стационарному обтеканию",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"20",
"--refine",
"1",
"--pert-amp",
"0",
"--steps",
"115200",
"--backend",
"gpu",
"--gif",
"cyl_re20.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 552960,
"steps": 115200,
"cost": 63700992000,
"outputs": []
},
{
"id": "B02_cyl_re40",
"group": "B",
"title": "Цилиндр Re=40, стационар, D=48",
"expect": "Cd выходит на постоянную; сравнение с литературой по стационарному обтеканию",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"40",
"--refine",
"1",
"--pert-amp",
"0",
"--steps",
"115200",
"--backend",
"gpu",
"--gif",
"cyl_re40.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 552960,
"steps": 115200,
"cost": 63700992000,
"outputs": []
},
{
"id": "B03_cyl_re100",
"group": "B",
"title": "Цилиндр Re=100, дорожка Кармана, D=64, 1500 конв. времён",
"expect": "St≈0.183 и ⟨Cd⟩≈1.33 при Re=150 после поправки на блокировку",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"64",
"--nx",
"1280",
"--ny",
"768",
"--body-x",
"256",
"--re",
"100",
"--refine",
"1",
"--steps",
"3840000",
"--backend",
"gpu",
"--series-every",
"19",
"--gif",
"cyl_re100.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"2",
"--gif-scale",
"1"
],
"nodes_per_step": 983040,
"steps": 3840000,
"cost": 3774873600000,
"outputs": []
},
{
"id": "B04_cyl_re150",
"group": "B",
"title": "Цилиндр Re=150, дорожка Кармана, D=64, 1500 конв. времён",
"expect": "St≈0.183 и ⟨Cd⟩≈1.33 при Re=150 после поправки на блокировку",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"64",
"--nx",
"1280",
"--ny",
"768",
"--body-x",
"256",
"--re",
"150",
"--refine",
"1",
"--steps",
"3840000",
"--backend",
"gpu",
"--series-every",
"19",
"--gif",
"cyl_re150.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"2",
"--gif-scale",
"1"
],
"nodes_per_step": 983040,
"steps": 3840000,
"cost": 3774873600000,
"outputs": []
},
{
"id": "B05_cyl_re200",
"group": "B",
"title": "Цилиндр Re=200, дорожка Кармана, D=64, 1500 конв. времён",
"expect": "St≈0.183 и ⟨Cd⟩≈1.33 при Re=150 после поправки на блокировку",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"64",
"--nx",
"1280",
"--ny",
"768",
"--body-x",
"256",
"--re",
"200",
"--refine",
"1",
"--steps",
"3840000",
"--backend",
"gpu",
"--series-every",
"19",
"--gif",
"cyl_re200.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"2",
"--gif-scale",
"1"
],
"nodes_per_step": 983040,
"steps": 3840000,
"cost": 3774873600000,
"outputs": []
},
{
"id": "B06_cyl_re300",
"group": "B",
"title": "Цилиндр Re=300, дорожка Кармана, D=64, 1500 конв. времён",
"expect": "St≈0.183 и ⟨Cd⟩≈1.33 при Re=150 после поправки на блокировку",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"64",
"--nx",
"1280",
"--ny",
"768",
"--body-x",
"256",
"--re",
"300",
"--refine",
"1",
"--steps",
"3840000",
"--backend",
"gpu",
"--series-every",
"19",
"--gif",
"cyl_re300.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"2",
"--gif-scale",
"1"
],
"nodes_per_step": 983040,
"steps": 3840000,
"cost": 3774873600000,
"outputs": []
},
{
"id": "B07_cyl_d16",
"group": "B",
"title": "Цилиндр Re=150, разрешение D=16",
"expect": "Cd сходится по D; экстраполяция даёт сеточно-независимое значение",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"16",
"--nx",
"320",
"--ny",
"192",
"--body-x",
"64",
"--re",
"150",
"--refine",
"1",
"--steps",
"512000",
"--backend",
"gpu",
"--series-every",
"2",
"--gif",
"cyl_d16.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 61440,
"steps": 512000,
"cost": 31457280000,
"outputs": []
},
{
"id": "B08_cyl_d32",
"group": "B",
"title": "Цилиндр Re=150, разрешение D=32",
"expect": "Cd сходится по D; экстраполяция даёт сеточно-независимое значение",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"150",
"--refine",
"1",
"--steps",
"1024000",
"--backend",
"gpu",
"--series-every",
"5",
"--gif",
"cyl_d32.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 245760,
"steps": 1024000,
"cost": 251658240000,
"outputs": []
},
{
"id": "B09_cyl_d64",
"group": "B",
"title": "Цилиндр Re=150, разрешение D=64",
"expect": "Cd сходится по D; экстраполяция даёт сеточно-независимое значение",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"64",
"--nx",
"1280",
"--ny",
"768",
"--body-x",
"256",
"--re",
"150",
"--refine",
"1",
"--steps",
"2048000",
"--backend",
"gpu",
"--series-every",
"10",
"--gif",
"cyl_d64.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"2",
"--gif-scale",
"1"
],
"nodes_per_step": 983040,
"steps": 2048000,
"cost": 2013265920000,
"outputs": []
},
{
"id": "B10_cyl_d128",
"group": "B",
"title": "Цилиндр Re=150, разрешение D=128",
"expect": "Cd сходится по D; экстраполяция даёт сеточно-независимое значение",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"128",
"--nx",
"2560",
"--ny",
"1536",
"--body-x",
"512",
"--re",
"150",
"--refine",
"1",
"--steps",
"4096000",
"--backend",
"gpu",
"--series-every",
"20",
"--gif",
"cyl_d128.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"5",
"--gif-scale",
"1"
],
"nodes_per_step": 3932160,
"steps": 4096000,
"cost": 16106127360000,
"outputs": []
},
{
"id": "B11_cyl_block6",
"group": "B",
"title": "Цилиндр Re=150, блокировка Ny/D=6",
"expect": "экстраполяция Cd и St к нулевой блокировке; ожидание — сходимость к 1.33 и 0.183",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"288",
"--body-x",
"192",
"--re",
"150",
"--refine",
"1",
"--steps",
"1920000",
"--backend",
"gpu",
"--series-every",
"9"
],
"nodes_per_step": 276480,
"steps": 1920000,
"cost": 530841600000,
"outputs": []
},
{
"id": "B12_cyl_block8",
"group": "B",
"title": "Цилиндр Re=150, блокировка Ny/D=8",
"expect": "экстраполяция Cd и St к нулевой блокировке; ожидание — сходимость к 1.33 и 0.183",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"384",
"--body-x",
"192",
"--re",
"150",
"--refine",
"1",
"--steps",
"1920000",
"--backend",
"gpu",
"--series-every",
"9"
],
"nodes_per_step": 368640,
"steps": 1920000,
"cost": 707788800000,
"outputs": []
},
{
"id": "B13_cyl_block12",
"group": "B",
"title": "Цилиндр Re=150, блокировка Ny/D=12",
"expect": "экстраполяция Cd и St к нулевой блокировке; ожидание — сходимость к 1.33 и 0.183",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"150",
"--refine",
"1",
"--steps",
"1920000",
"--backend",
"gpu",
"--series-every",
"9"
],
"nodes_per_step": 552960,
"steps": 1920000,
"cost": 1061683200000,
"outputs": []
},
{
"id": "B14_cyl_block16",
"group": "B",
"title": "Цилиндр Re=150, блокировка Ny/D=16",
"expect": "экстраполяция Cd и St к нулевой блокировке; ожидание — сходимость к 1.33 и 0.183",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"768",
"--body-x",
"192",
"--re",
"150",
"--refine",
"1",
"--steps",
"1920000",
"--backend",
"gpu",
"--series-every",
"9"
],
"nodes_per_step": 737280,
"steps": 1920000,
"cost": 1415577600000,
"outputs": []
},
{
"id": "B15_cyl_block24",
"group": "B",
"title": "Цилиндр Re=150, блокировка Ny/D=24",
"expect": "экстраполяция Cd и St к нулевой блокировке; ожидание — сходимость к 1.33 и 0.183",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"1152",
"--body-x",
"192",
"--re",
"150",
"--refine",
"1",
"--steps",
"1920000",
"--backend",
"gpu",
"--series-every",
"9"
],
"nodes_per_step": 1105920,
"steps": 1920000,
"cost": 2123366400000,
"outputs": []
},
{
"id": "B16_cyl_block32",
"group": "B",
"title": "Цилиндр Re=150, блокировка Ny/D=32",
"expect": "экстраполяция Cd и St к нулевой блокировке; ожидание — сходимость к 1.33 и 0.183",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"1536",
"--body-x",
"192",
"--re",
"150",
"--refine",
"1",
"--steps",
"1920000",
"--backend",
"gpu",
"--series-every",
"9"
],
"nodes_per_step": 1474560,
"steps": 1920000,
"cost": 2831155200000,
"outputs": []
},
{
"id": "C01_wall_hrr_re150",
"group": "C",
"title": "Модель стенки hrr, Re=150",
"expect": "все субсеточные модели обязаны сойтись к одному пределу; staircase — база",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"150",
"--refine",
"1",
"--wall",
"hrr",
"--steps",
"512000",
"--backend",
"gpu",
"--series-every",
"2",
"--gif",
"wall_hrr_re150.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 245760,
"steps": 512000,
"cost": 125829120000,
"outputs": []
},
{
"id": "C02_wall_hrr_re2000",
"group": "C",
"title": "Модель стенки hrr, Re=2000",
"expect": "все субсеточные модели обязаны сойтись к одному пределу; staircase — база",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"2000",
"--refine",
"1",
"--wall",
"hrr",
"--steps",
"512000",
"--backend",
"gpu",
"--series-every",
"2"
],
"nodes_per_step": 245760,
"steps": 512000,
"cost": 125829120000,
"outputs": []
},
{
"id": "C03_wall_grad_re150",
"group": "C",
"title": "Модель стенки grad, Re=150",
"expect": "все субсеточные модели обязаны сойтись к одному пределу; staircase — база",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"150",
"--refine",
"1",
"--wall",
"grad",
"--steps",
"512000",
"--backend",
"gpu",
"--series-every",
"2",
"--gif",
"wall_grad_re150.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 245760,
"steps": 512000,
"cost": 125829120000,
"outputs": []
},
{
"id": "C04_wall_grad_re2000",
"group": "C",
"title": "Модель стенки grad, Re=2000",
"expect": "все субсеточные модели обязаны сойтись к одному пределу; staircase — база",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"2000",
"--refine",
"1",
"--wall",
"grad",
"--steps",
"512000",
"--backend",
"gpu",
"--series-every",
"2"
],
"nodes_per_step": 245760,
"steps": 512000,
"cost": 125829120000,
"outputs": []
},
{
"id": "C05_wall_bouzidi_re150",
"group": "C",
"title": "Модель стенки bouzidi, Re=150",
"expect": "все субсеточные модели обязаны сойтись к одному пределу; staircase — база",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"150",
"--refine",
"1",
"--wall",
"bouzidi",
"--steps",
"512000",
"--backend",
"gpu",
"--series-every",
"2",
"--gif",
"wall_bouzidi_re150.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 245760,
"steps": 512000,
"cost": 125829120000,
"outputs": []
},
{
"id": "C06_wall_bouzidi_re2000",
"group": "C",
"title": "Модель стенки bouzidi, Re=2000",
"expect": "все субсеточные модели обязаны сойтись к одному пределу; staircase — база",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"2000",
"--refine",
"1",
"--wall",
"bouzidi",
"--steps",
"512000",
"--backend",
"gpu",
"--series-every",
"2"
],
"nodes_per_step": 245760,
"steps": 512000,
"cost": 125829120000,
"outputs": []
},
{
"id": "C07_wall_staircase_re150",
"group": "C",
"title": "Модель стенки staircase, Re=150",
"expect": "все субсеточные модели обязаны сойтись к одному пределу; staircase — база",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"150",
"--refine",
"1",
"--wall",
"staircase",
"--steps",
"512000",
"--backend",
"gpu",
"--series-every",
"2",
"--gif",
"wall_staircase_re150.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 245760,
"steps": 512000,
"cost": 125829120000,
"outputs": []
},
{
"id": "C08_wall_staircase_re2000",
"group": "C",
"title": "Модель стенки staircase, Re=2000",
"expect": "все субсеточные модели обязаны сойтись к одному пределу; staircase — база",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"2000",
"--refine",
"1",
"--wall",
"staircase",
"--steps",
"512000",
"--backend",
"gpu",
"--series-every",
"2"
],
"nodes_per_step": 245760,
"steps": 512000,
"cost": 125829120000,
"outputs": []
},
{
"id": "C09_sub_hrr_00",
"group": "C",
"title": "Субклеточный сдвиг тела 0.0 клетки, стенка hrr",
"expect": "разброс Cd по сдвигам: чем субсеточнее модель, тем он меньше",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"16",
"--nx",
"320",
"--ny",
"192",
"--body-x",
"64",
"--re",
"20",
"--refine",
"1",
"--body-y",
"96.0",
"--wall",
"hrr",
"--pert-amp",
"0",
"--steps",
"38400",
"--backend",
"gpu"
],
"nodes_per_step": 61440,
"steps": 38400,
"cost": 2359296000,
"outputs": []
},
{
"id": "C10_sub_hrr_25",
"group": "C",
"title": "Субклеточный сдвиг тела 0.25 клетки, стенка hrr",
"expect": "разброс Cd по сдвигам: чем субсеточнее модель, тем он меньше",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"16",
"--nx",
"320",
"--ny",
"192",
"--body-x",
"64",
"--re",
"20",
"--refine",
"1",
"--body-y",
"96.25",
"--wall",
"hrr",
"--pert-amp",
"0",
"--steps",
"38400",
"--backend",
"gpu"
],
"nodes_per_step": 61440,
"steps": 38400,
"cost": 2359296000,
"outputs": []
},
{
"id": "C11_sub_hrr_50",
"group": "C",
"title": "Субклеточный сдвиг тела 0.5 клетки, стенка hrr",
"expect": "разброс Cd по сдвигам: чем субсеточнее модель, тем он меньше",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"16",
"--nx",
"320",
"--ny",
"192",
"--body-x",
"64",
"--re",
"20",
"--refine",
"1",
"--body-y",
"96.5",
"--wall",
"hrr",
"--pert-amp",
"0",
"--steps",
"38400",
"--backend",
"gpu"
],
"nodes_per_step": 61440,
"steps": 38400,
"cost": 2359296000,
"outputs": []
},
{
"id": "C12_sub_grad_00",
"group": "C",
"title": "Субклеточный сдвиг тела 0.0 клетки, стенка grad",
"expect": "разброс Cd по сдвигам: чем субсеточнее модель, тем он меньше",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"16",
"--nx",
"320",
"--ny",
"192",
"--body-x",
"64",
"--re",
"20",
"--refine",
"1",
"--body-y",
"96.0",
"--wall",
"grad",
"--pert-amp",
"0",
"--steps",
"38400",
"--backend",
"gpu"
],
"nodes_per_step": 61440,
"steps": 38400,
"cost": 2359296000,
"outputs": []
},
{
"id": "C13_sub_grad_25",
"group": "C",
"title": "Субклеточный сдвиг тела 0.25 клетки, стенка grad",
"expect": "разброс Cd по сдвигам: чем субсеточнее модель, тем он меньше",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"16",
"--nx",
"320",
"--ny",
"192",
"--body-x",
"64",
"--re",
"20",
"--refine",
"1",
"--body-y",
"96.25",
"--wall",
"grad",
"--pert-amp",
"0",
"--steps",
"38400",
"--backend",
"gpu"
],
"nodes_per_step": 61440,
"steps": 38400,
"cost": 2359296000,
"outputs": []
},
{
"id": "C14_sub_grad_50",
"group": "C",
"title": "Субклеточный сдвиг тела 0.5 клетки, стенка grad",
"expect": "разброс Cd по сдвигам: чем субсеточнее модель, тем он меньше",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"16",
"--nx",
"320",
"--ny",
"192",
"--body-x",
"64",
"--re",
"20",
"--refine",
"1",
"--body-y",
"96.5",
"--wall",
"grad",
"--pert-amp",
"0",
"--steps",
"38400",
"--backend",
"gpu"
],
"nodes_per_step": 61440,
"steps": 38400,
"cost": 2359296000,
"outputs": []
},
{
"id": "C15_sub_bouzidi_00",
"group": "C",
"title": "Субклеточный сдвиг тела 0.0 клетки, стенка bouzidi",
"expect": "разброс Cd по сдвигам: чем субсеточнее модель, тем он меньше",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"16",
"--nx",
"320",
"--ny",
"192",
"--body-x",
"64",
"--re",
"20",
"--refine",
"1",
"--body-y",
"96.0",
"--wall",
"bouzidi",
"--pert-amp",
"0",
"--steps",
"38400",
"--backend",
"gpu"
],
"nodes_per_step": 61440,
"steps": 38400,
"cost": 2359296000,
"outputs": []
},
{
"id": "C16_sub_bouzidi_25",
"group": "C",
"title": "Субклеточный сдвиг тела 0.25 клетки, стенка bouzidi",
"expect": "разброс Cd по сдвигам: чем субсеточнее модель, тем он меньше",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"16",
"--nx",
"320",
"--ny",
"192",
"--body-x",
"64",
"--re",
"20",
"--refine",
"1",
"--body-y",
"96.25",
"--wall",
"bouzidi",
"--pert-amp",
"0",
"--steps",
"38400",
"--backend",
"gpu"
],
"nodes_per_step": 61440,
"steps": 38400,
"cost": 2359296000,
"outputs": []
},
{
"id": "C17_sub_bouzidi_50",
"group": "C",
"title": "Субклеточный сдвиг тела 0.5 клетки, стенка bouzidi",
"expect": "разброс Cd по сдвигам: чем субсеточнее модель, тем он меньше",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"16",
"--nx",
"320",
"--ny",
"192",
"--body-x",
"64",
"--re",
"20",
"--refine",
"1",
"--body-y",
"96.5",
"--wall",
"bouzidi",
"--pert-amp",
"0",
"--steps",
"38400",
"--backend",
"gpu"
],
"nodes_per_step": 61440,
"steps": 38400,
"cost": 2359296000,
"outputs": []
},
{
"id": "C18_sub_staircase_00",
"group": "C",
"title": "Субклеточный сдвиг тела 0.0 клетки, стенка staircase",
"expect": "разброс Cd по сдвигам: чем субсеточнее модель, тем он меньше",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"16",
"--nx",
"320",
"--ny",
"192",
"--body-x",
"64",
"--re",
"20",
"--refine",
"1",
"--body-y",
"96.0",
"--wall",
"staircase",
"--pert-amp",
"0",
"--steps",
"38400",
"--backend",
"gpu"
],
"nodes_per_step": 61440,
"steps": 38400,
"cost": 2359296000,
"outputs": []
},
{
"id": "C19_sub_staircase_25",
"group": "C",
"title": "Субклеточный сдвиг тела 0.25 клетки, стенка staircase",
"expect": "разброс Cd по сдвигам: чем субсеточнее модель, тем он меньше",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"16",
"--nx",
"320",
"--ny",
"192",
"--body-x",
"64",
"--re",
"20",
"--refine",
"1",
"--body-y",
"96.25",
"--wall",
"staircase",
"--pert-amp",
"0",
"--steps",
"38400",
"--backend",
"gpu"
],
"nodes_per_step": 61440,
"steps": 38400,
"cost": 2359296000,
"outputs": []
},
{
"id": "C20_sub_staircase_50",
"group": "C",
"title": "Субклеточный сдвиг тела 0.5 клетки, стенка staircase",
"expect": "разброс Cd по сдвигам: чем субсеточнее модель, тем он меньше",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"16",
"--nx",
"320",
"--ny",
"192",
"--body-x",
"64",
"--re",
"20",
"--refine",
"1",
"--body-y",
"96.5",
"--wall",
"staircase",
"--pert-amp",
"0",
"--steps",
"38400",
"--backend",
"gpu"
],
"nodes_per_step": 61440,
"steps": 38400,
"cost": 2359296000,
"outputs": []
},
{
"id": "D01_naca0012_a00",
"group": "D",
"title": "NACA 0012, α=0°, Re=1000, хорда 128",
"expect": "линейный участок Cl(α) и срыв; сравнение с низкорейнольдсовой литературой",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"0012",
"--size",
"128",
"--body-angle",
"0",
"--nx",
"2048",
"--ny",
"1024",
"--body-x",
"512",
"--re",
"1000",
"--refine",
"1",
"--steps",
"2048000",
"--backend",
"gpu",
"--series-every",
"10",
"--gif",
"naca0012_a00.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"3",
"--gif-scale",
"1"
],
"nodes_per_step": 2097152,
"steps": 2048000,
"cost": 4294967296000,
"outputs": []
},
{
"id": "D02_naca0012_a04",
"group": "D",
"title": "NACA 0012, α=4°, Re=1000, хорда 128",
"expect": "линейный участок Cl(α) и срыв; сравнение с низкорейнольдсовой литературой",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"0012",
"--size",
"128",
"--body-angle",
"4",
"--nx",
"2048",
"--ny",
"1024",
"--body-x",
"512",
"--re",
"1000",
"--refine",
"1",
"--steps",
"2048000",
"--backend",
"gpu",
"--series-every",
"10",
"--gif",
"naca0012_a04.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"3",
"--gif-scale",
"1"
],
"nodes_per_step": 2097152,
"steps": 2048000,
"cost": 4294967296000,
"outputs": []
},
{
"id": "D03_naca0012_a08",
"group": "D",
"title": "NACA 0012, α=8°, Re=1000, хорда 128",
"expect": "линейный участок Cl(α) и срыв; сравнение с низкорейнольдсовой литературой",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"0012",
"--size",
"128",
"--body-angle",
"8",
"--nx",
"2048",
"--ny",
"1024",
"--body-x",
"512",
"--re",
"1000",
"--refine",
"1",
"--steps",
"2048000",
"--backend",
"gpu",
"--series-every",
"10",
"--gif",
"naca0012_a08.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"3",
"--gif-scale",
"1"
],
"nodes_per_step": 2097152,
"steps": 2048000,
"cost": 4294967296000,
"outputs": []
},
{
"id": "D04_naca0012_a12",
"group": "D",
"title": "NACA 0012, α=12°, Re=1000, хорда 128",
"expect": "линейный участок Cl(α) и срыв; сравнение с низкорейнольдсовой литературой",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"0012",
"--size",
"128",
"--body-angle",
"12",
"--nx",
"2048",
"--ny",
"1024",
"--body-x",
"512",
"--re",
"1000",
"--refine",
"1",
"--steps",
"2048000",
"--backend",
"gpu",
"--series-every",
"10",
"--gif",
"naca0012_a12.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"3",
"--gif-scale",
"1"
],
"nodes_per_step": 2097152,
"steps": 2048000,
"cost": 4294967296000,
"outputs": []
},
{
"id": "D05_naca0012_a16",
"group": "D",
"title": "NACA 0012, α=16°, Re=1000, хорда 128",
"expect": "линейный участок Cl(α) и срыв; сравнение с низкорейнольдсовой литературой",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"0012",
"--size",
"128",
"--body-angle",
"16",
"--nx",
"2048",
"--ny",
"1024",
"--body-x",
"512",
"--re",
"1000",
"--refine",
"1",
"--steps",
"2048000",
"--backend",
"gpu",
"--series-every",
"10",
"--gif",
"naca0012_a16.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"3",
"--gif-scale",
"1"
],
"nodes_per_step": 2097152,
"steps": 2048000,
"cost": 4294967296000,
"outputs": []
},
{
"id": "D06_naca0012_re500",
"group": "D",
"title": "NACA 0012, α=8°, Re=500",
"expect": "перестройка следа с ростом Re; проверка устойчивости на профиле",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"0012",
"--size",
"128",
"--body-angle",
"8",
"--nx",
"2048",
"--ny",
"1024",
"--body-x",
"512",
"--re",
"500",
"--refine",
"1",
"--steps",
"2048000",
"--backend",
"gpu",
"--series-every",
"10",
"--gif",
"naca0012_re500.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"3",
"--gif-scale",
"1"
],
"nodes_per_step": 2097152,
"steps": 2048000,
"cost": 4294967296000,
"outputs": []
},
{
"id": "D07_naca0012_re2000",
"group": "D",
"title": "NACA 0012, α=8°, Re=2000",
"expect": "перестройка следа с ростом Re; проверка устойчивости на профиле",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"0012",
"--size",
"128",
"--body-angle",
"8",
"--nx",
"2048",
"--ny",
"1024",
"--body-x",
"512",
"--re",
"2000",
"--refine",
"1",
"--steps",
"2048000",
"--backend",
"gpu",
"--series-every",
"10",
"--gif",
"naca0012_re2000.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"3",
"--gif-scale",
"1"
],
"nodes_per_step": 2097152,
"steps": 2048000,
"cost": 4294967296000,
"outputs": []
},
{
"id": "D08_naca0012_re10000",
"group": "D",
"title": "NACA 0012, α=8°, Re=10000",
"expect": "перестройка следа с ростом Re; проверка устойчивости на профиле",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"0012",
"--size",
"128",
"--body-angle",
"8",
"--nx",
"2048",
"--ny",
"1024",
"--body-x",
"512",
"--re",
"10000",
"--refine",
"1",
"--steps",
"2048000",
"--backend",
"gpu",
"--series-every",
"10",
"--gif",
"naca0012_re10000.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"3",
"--gif-scale",
"1"
],
"nodes_per_step": 2097152,
"steps": 2048000,
"cost": 4294967296000,
"outputs": []
},
{
"id": "D09_naca4412_a00",
"group": "D",
"title": "NACA 4412 (с изгибом), α=0°, Re=1000",
"expect": "ненулевой Cl при α=0 — прямая проверка средней линии профиля",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"4412",
"--size",
"128",
"--body-angle",
"0",
"--nx",
"2048",
"--ny",
"1024",
"--body-x",
"512",
"--re",
"1000",
"--refine",
"1",
"--steps",
"2048000",
"--backend",
"gpu",
"--series-every",
"10",
"--gif",
"naca4412_a00.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"3",
"--gif-scale",
"1"
],
"nodes_per_step": 2097152,
"steps": 2048000,
"cost": 4294967296000,
"outputs": []
},
{
"id": "D10_naca4412_a06",
"group": "D",
"title": "NACA 4412 (с изгибом), α=6°, Re=1000",
"expect": "ненулевой Cl при α=0 — прямая проверка средней линии профиля",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"4412",
"--size",
"128",
"--body-angle",
"6",
"--nx",
"2048",
"--ny",
"1024",
"--body-x",
"512",
"--re",
"1000",
"--refine",
"1",
"--steps",
"2048000",
"--backend",
"gpu",
"--series-every",
"10",
"--gif",
"naca4412_a06.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"3",
"--gif-scale",
"1"
],
"nodes_per_step": 2097152,
"steps": 2048000,
"cost": 4294967296000,
"outputs": []
},
{
"id": "D11_naca4412_a12",
"group": "D",
"title": "NACA 4412 (с изгибом), α=12°, Re=1000",
"expect": "ненулевой Cl при α=0 — прямая проверка средней линии профиля",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"4412",
"--size",
"128",
"--body-angle",
"12",
"--nx",
"2048",
"--ny",
"1024",
"--body-x",
"512",
"--re",
"1000",
"--refine",
"1",
"--steps",
"2048000",
"--backend",
"gpu",
"--series-every",
"10",
"--gif",
"naca4412_a12.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"3",
"--gif-scale",
"1"
],
"nodes_per_step": 2097152,
"steps": 2048000,
"cost": 4294967296000,
"outputs": []
},
{
"id": "D12_naca_chord48",
"group": "D",
"title": "NACA 0012, α=8°, сходимость по хорде 48",
"expect": "Cl и Cd сходятся по разрешению хорды",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"0012",
"--size",
"48",
"--body-angle",
"8",
"--nx",
"768",
"--ny",
"384",
"--body-x",
"192",
"--re",
"1000",
"--refine",
"1",
"--steps",
"576000",
"--backend",
"gpu",
"--series-every",
"2"
],
"nodes_per_step": 294912,
"steps": 576000,
"cost": 169869312000,
"outputs": []
},
{
"id": "D13_naca_chord96",
"group": "D",
"title": "NACA 0012, α=8°, сходимость по хорде 96",
"expect": "Cl и Cd сходятся по разрешению хорды",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"0012",
"--size",
"96",
"--body-angle",
"8",
"--nx",
"1536",
"--ny",
"768",
"--body-x",
"384",
"--re",
"1000",
"--refine",
"1",
"--steps",
"1152000",
"--backend",
"gpu",
"--series-every",
"5"
],
"nodes_per_step": 1179648,
"steps": 1152000,
"cost": 1358954496000,
"outputs": []
},
{
"id": "D14_naca_chord192",
"group": "D",
"title": "NACA 0012, α=8°, сходимость по хорде 192",
"expect": "Cl и Cd сходятся по разрешению хорды",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"0012",
"--size",
"192",
"--body-angle",
"8",
"--nx",
"3072",
"--ny",
"1536",
"--body-x",
"768",
"--re",
"1000",
"--refine",
"1",
"--steps",
"2304000",
"--backend",
"gpu",
"--series-every",
"11"
],
"nodes_per_step": 4718592,
"steps": 2304000,
"cost": 10871635968000,
"outputs": []
},
{
"id": "E01_tandem_ld15",
"group": "E",
"title": "Тандем цилиндров, зазор L/D=1.5",
"expect": "при малом зазоре у заднего тела ОТРИЦАТЕЛЬНОЕ сопротивление; переход около 3.5–4",
"backend": "gpu",
"args": [
"--bodies",
"cylinder:d=48,x=360,y=360; cylinder:d=48,x=432,y=360",
"--nx",
"1440",
"--ny",
"720",
"--re",
"150",
"--refine",
"1",
"--steps",
"1536000",
"--backend",
"gpu",
"--series-every",
"7",
"--gif",
"tandem_ld15.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"2",
"--gif-scale",
"1"
],
"nodes_per_step": 1036800,
"steps": 1536000,
"cost": 1592524800000,
"outputs": []
},
{
"id": "E02_tandem_ld30",
"group": "E",
"title": "Тандем цилиндров, зазор L/D=3.0",
"expect": "при малом зазоре у заднего тела ОТРИЦАТЕЛЬНОЕ сопротивление; переход около 3.5–4",
"backend": "gpu",
"args": [
"--bodies",
"cylinder:d=48,x=360,y=360; cylinder:d=48,x=504,y=360",
"--nx",
"1440",
"--ny",
"720",
"--re",
"150",
"--refine",
"1",
"--steps",
"1536000",
"--backend",
"gpu",
"--series-every",
"7",
"--gif",
"tandem_ld30.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"2",
"--gif-scale",
"1"
],
"nodes_per_step": 1036800,
"steps": 1536000,
"cost": 1592524800000,
"outputs": []
},
{
"id": "E03_tandem_ld50",
"group": "E",
"title": "Тандем цилиндров, зазор L/D=5.0",
"expect": "при малом зазоре у заднего тела ОТРИЦАТЕЛЬНОЕ сопротивление; переход около 3.5–4",
"backend": "gpu",
"args": [
"--bodies",
"cylinder:d=48,x=360,y=360; cylinder:d=48,x=600,y=360",
"--nx",
"1440",
"--ny",
"720",
"--re",
"150",
"--refine",
"1",
"--steps",
"1536000",
"--backend",
"gpu",
"--series-every",
"7",
"--gif",
"tandem_ld50.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"2",
"--gif-scale",
"1"
],
"nodes_per_step": 1036800,
"steps": 1536000,
"cost": 1592524800000,
"outputs": []
},
{
"id": "E04_array_sparse",
"group": "E",
"title": "Решётка 4×4 цилиндров, шаг 3D — пористая среда",
"expect": "суммарное сопротивление и структура течения сквозь набор тел",
"backend": "gpu",
"args": [
"--bodies",
"cylinder:d=24,x=360,y=252.0; cylinder:d=24,x=360,y=324.0; cylinder:d=24,x=360,y=396.0; cylinder:d=24,x=360,y=468.0; cylinder:d=24,x=432,y=252.0; cylinder:d=24,x=432,y=324.0; cylinder:d=24,x=432,y=396.0; cylinder:d=24,x=432,y=468.0; cylinder:d=24,x=504,y=252.0; cylinder:d=24,x=504,y=324.0; cylinder:d=24,x=504,y=396.0; cylinder:d=24,x=504,y=468.0; cylinder:d=24,x=576,y=252.0; cylinder:d=24,x=576,y=324.0; cylinder:d=24,x=576,y=396.0; cylinder:d=24,x=576,y=468.0",
"--nx",
"1440",
"--ny",
"720",
"--re",
"150",
"--refine",
"1",
"--steps",
"576000",
"--backend",
"gpu",
"--series-every",
"2",
"--gif",
"array_sparse.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"2",
"--gif-scale",
"1"
],
"nodes_per_step": 1036800,
"steps": 576000,
"cost": 597196800000,
"outputs": []
},
{
"id": "E05_array_dense",
"group": "E",
"title": "Решётка 4×4 цилиндров, шаг 2D — пористая среда",
"expect": "суммарное сопротивление и структура течения сквозь набор тел",
"backend": "gpu",
"args": [
"--bodies",
"cylinder:d=24,x=360,y=288.0; cylinder:d=24,x=360,y=336.0; cylinder:d=24,x=360,y=384.0; cylinder:d=24,x=360,y=432.0; cylinder:d=24,x=408,y=288.0; cylinder:d=24,x=408,y=336.0; cylinder:d=24,x=408,y=384.0; cylinder:d=24,x=408,y=432.0; cylinder:d=24,x=456,y=288.0; cylinder:d=24,x=456,y=336.0; cylinder:d=24,x=456,y=384.0; cylinder:d=24,x=456,y=432.0; cylinder:d=24,x=504,y=288.0; cylinder:d=24,x=504,y=336.0; cylinder:d=24,x=504,y=384.0; cylinder:d=24,x=504,y=432.0",
"--nx",
"1440",
"--ny",
"720",
"--re",
"150",
"--refine",
"1",
"--steps",
"576000",
"--backend",
"gpu",
"--series-every",
"2",
"--gif",
"array_dense.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"2",
"--gif-scale",
"1"
],
"nodes_per_step": 1036800,
"steps": 576000,
"cost": 597196800000,
"outputs": []
},
{
"id": "E06_perf_open20",
"group": "E",
"title": "Перфорированная пластина, скважность 0.2",
"expect": "струи в щелях и общее сопротивление; проверка множества тонких тел",
"backend": "gpu",
"args": [
"--bodies",
"plate:d=40,t=0.12,a=90,x=300,y=60; plate:d=40,t=0.12,a=90,x=300,y=110; plate:d=40,t=0.12,a=90,x=300,y=160; plate:d=40,t=0.12,a=90,x=300,y=210; plate:d=40,t=0.12,a=90,x=300,y=260; plate:d=40,t=0.12,a=90,x=300,y=310; plate:d=40,t=0.12,a=90,x=300,y=360; plate:d=40,t=0.12,a=90,x=300,y=410; plate:d=40,t=0.12,a=90,x=300,y=460",
"--nx",
"1200",
"--ny",
"600",
"--re",
"500",
"--refine",
"1",
"--steps",
"800000",
"--backend",
"gpu",
"--series-every",
"4",
"--gif",
"perf_open20.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 720000,
"steps": 800000,
"cost": 576000000000,
"outputs": []
},
{
"id": "E07_perf_open50",
"group": "E",
"title": "Перфорированная пластина, скважность 0.5",
"expect": "струи в щелях и общее сопротивление; проверка множества тонких тел",
"backend": "gpu",
"args": [
"--bodies",
"plate:d=40,t=0.12,a=90,x=300,y=60; plate:d=40,t=0.12,a=90,x=300,y=140; plate:d=40,t=0.12,a=90,x=300,y=220; plate:d=40,t=0.12,a=90,x=300,y=300; plate:d=40,t=0.12,a=90,x=300,y=380; plate:d=40,t=0.12,a=90,x=300,y=460",
"--nx",
"1200",
"--ny",
"600",
"--re",
"500",
"--refine",
"1",
"--steps",
"800000",
"--backend",
"gpu",
"--series-every",
"4",
"--gif",
"perf_open50.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 720000,
"steps": 800000,
"cost": 576000000000,
"outputs": []
},
{
"id": "E08_multielem",
"group": "E",
"title": "Многоэлементный профиль: основной 4412 плюс предкрылок",
"expect": "щель между элементами и раздельные Cl/Cd по телам",
"backend": "gpu",
"args": [
"--bodies",
"naca:naca=4412,d=200,a=6,x=560,y=512; naca:naca=2412,d=70,a=18,x=430,y=470",
"--nx",
"2048",
"--ny",
"1024",
"--re",
"2000",
"--refine",
"1",
"--steps",
"2400000",
"--backend",
"gpu",
"--series-every",
"12",
"--gif",
"multielem.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"3",
"--gif-scale",
"1"
],
"nodes_per_step": 2097152,
"steps": 2400000,
"cost": 5033164800000,
"outputs": []
},
{
"id": "E09_thin_t05",
"group": "E",
"title": "Сверхтонкая пластина, толщина 1.00 клетки",
"expect": "предел субсеточной границы: тело тоньше клетки; ждём откаты на простой отскок",
"backend": "gpu",
"args": [
"--shape",
"plate",
"--size",
"50",
"--thickness",
"0.02",
"--body-angle",
"20",
"--nx",
"1200",
"--ny",
"600",
"--re",
"500",
"--refine",
"1",
"--steps",
"1000000",
"--backend",
"gpu",
"--series-every",
"5",
"--gif",
"thin_t05.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 720000,
"steps": 1000000,
"cost": 720000000000,
"outputs": []
},
{
"id": "E10_thin_t025",
"group": "E",
"title": "Сверхтонкая пластина, толщина 0.50 клетки",
"expect": "предел субсеточной границы: тело тоньше клетки; ждём откаты на простой отскок",
"backend": "gpu",
"args": [
"--shape",
"plate",
"--size",
"50",
"--thickness",
"0.01",
"--body-angle",
"20",
"--nx",
"1200",
"--ny",
"600",
"--re",
"500",
"--refine",
"1",
"--steps",
"1000000",
"--backend",
"gpu",
"--series-every",
"5",
"--gif",
"thin_t025.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 720000,
"steps": 1000000,
"cost": 720000000000,
"outputs": []
},
{
"id": "E11_wedge",
"group": "E",
"title": "Клин остриём против потока",
"expect": "острая кромка: особая точка геометрии",
"backend": "gpu",
"args": [
"--shape",
"polygon",
"--poly=-30,-18;36,0;-30,18",
"--size",
"60",
"--nx",
"1200",
"--ny",
"600",
"--re",
"500",
"--refine",
"1",
"--steps",
"1200000",
"--backend",
"gpu",
"--series-every",
"6",
"--gif",
"wedge.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 720000,
"steps": 1200000,
"cost": 864000000000,
"outputs": []
},
{
"id": "E12_serrated",
"group": "E",
"title": "Зазубренная задняя кромка",
"expect": "субклеточные зубцы: как их видит граница",
"backend": "gpu",
"args": [
"--shape",
"polygon",
"--poly=-30,6;-18,-6;-6,6;6,-6;18,6;30,-6;30,-18;-30,-18",
"--size",
"60",
"--nx",
"1200",
"--ny",
"600",
"--re",
"500",
"--refine",
"1",
"--steps",
"1200000",
"--backend",
"gpu",
"--series-every",
"6",
"--gif",
"serrated.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 720000,
"steps": 1200000,
"cost": 864000000000,
"outputs": []
},
{
"id": "F01_inlet2d",
"group": "F",
"title": "Отступ до входа 2D",
"expect": "с какого отступа результат перестаёт зависеть от положения входа",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"1056",
"--ny",
"576",
"--body-x",
"96",
"--re",
"150",
"--refine",
"1",
"--steps",
"1152000",
"--backend",
"gpu",
"--series-every",
"5"
],
"nodes_per_step": 608256,
"steps": 1152000,
"cost": 700710912000,
"outputs": []
},
{
"id": "F02_inlet6d",
"group": "F",
"title": "Отступ до входа 6D",
"expect": "с какого отступа результат перестаёт зависеть от положения входа",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"1248",
"--ny",
"576",
"--body-x",
"288",
"--re",
"150",
"--refine",
"1",
"--steps",
"1152000",
"--backend",
"gpu",
"--series-every",
"5"
],
"nodes_per_step": 718848,
"steps": 1152000,
"cost": 828112896000,
"outputs": []
},
{
"id": "F03_inlet16d",
"group": "F",
"title": "Отступ до входа 16D",
"expect": "с какого отступа результат перестаёт зависеть от положения входа",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"1728",
"--ny",
"576",
"--body-x",
"768",
"--re",
"150",
"--refine",
"1",
"--steps",
"1152000",
"--backend",
"gpu",
"--series-every",
"5"
],
"nodes_per_step": 995328,
"steps": 1152000,
"cost": 1146617856000,
"outputs": []
},
{
"id": "F04_outlet5d",
"group": "F",
"title": "Отступ до выхода 5D",
"expect": "с какой длины следа выход перестаёт влиять на силы",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"528",
"--ny",
"576",
"--body-x",
"288",
"--re",
"150",
"--refine",
"1",
"--steps",
"1152000",
"--backend",
"gpu",
"--series-every",
"5"
],
"nodes_per_step": 304128,
"steps": 1152000,
"cost": 350355456000,
"outputs": []
},
{
"id": "F05_outlet15d",
"group": "F",
"title": "Отступ до выхода 15D",
"expect": "с какой длины следа выход перестаёт влиять на силы",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"1008",
"--ny",
"576",
"--body-x",
"288",
"--re",
"150",
"--refine",
"1",
"--steps",
"1152000",
"--backend",
"gpu",
"--series-every",
"5"
],
"nodes_per_step": 580608,
"steps": 1152000,
"cost": 668860416000,
"outputs": []
},
{
"id": "F06_outlet40d",
"group": "F",
"title": "Отступ до выхода 40D",
"expect": "с какой длины следа выход перестаёт влиять на силы",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"2208",
"--ny",
"576",
"--body-x",
"288",
"--re",
"150",
"--refine",
"1",
"--steps",
"1152000",
"--backend",
"gpu",
"--series-every",
"5"
],
"nodes_per_step": 1271808,
"steps": 1152000,
"cost": 1465122816000,
"outputs": []
},
{
"id": "F07_refine1",
"group": "F",
"title": "Вложенный патч ×1",
"expect": "вносит ли связка уровней систематику: Cd и St обязаны совпасть",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"150",
"--refine",
"1",
"--steps",
"768000",
"--backend",
"gpu",
"--series-every",
"3"
],
"nodes_per_step": 245760,
"steps": 768000,
"cost": 188743680000,
"outputs": []
},
{
"id": "F08_refine2",
"group": "F",
"title": "Вложенный патч ×2",
"expect": "вносит ли связка уровней систематику: Cd и St обязаны совпасть",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"150",
"--refine",
"2",
"--steps",
"768000",
"--backend",
"gpu",
"--series-every",
"3"
],
"nodes_per_step": 501218,
"steps": 768000,
"cost": 384935424000,
"outputs": []
},
{
"id": "F09_refine3",
"group": "F",
"title": "Вложенный патч ×3",
"expect": "вносит ли связка уровней систематику: Cd и St обязаны совпасть",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"150",
"--refine",
"3",
"--steps",
"768000",
"--backend",
"gpu",
"--series-every",
"3"
],
"nodes_per_step": 1106235,
"steps": 768000,
"cost": 849588480000,
"outputs": []
},
{
"id": "G01_xt_re150_uniform",
"group": "G",
"title": "x–t диаграмма, Re=150, старт uniform",
"expect": "откуда идёт стартовое возмущение и раскачивается ли продольная мода",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"150",
"--refine",
"1",
"--init",
"uniform",
"--sponge-len",
"0",
"--xt",
"xt_re150_uniform.csv",
"--xt-every",
"200",
"--steps",
"576000",
"--backend",
"gpu",
"--series-every",
"2",
"--gif",
"xt_re150_uniform.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 552960,
"steps": 576000,
"cost": 318504960000,
"outputs": [
"xt"
]
},
{
"id": "G02_xt_re150_rest",
"group": "G",
"title": "x–t диаграмма, Re=150, старт rest",
"expect": "откуда идёт стартовое возмущение и раскачивается ли продольная мода",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"150",
"--refine",
"1",
"--init",
"rest",
"--sponge-len",
"0",
"--xt",
"xt_re150_rest.csv",
"--xt-every",
"200",
"--steps",
"576000",
"--backend",
"gpu",
"--series-every",
"2",
"--gif",
"xt_re150_rest.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 552960,
"steps": 576000,
"cost": 318504960000,
"outputs": [
"xt"
]
},
{
"id": "G03_xt_re2000_uniform",
"group": "G",
"title": "x–t диаграмма, Re=2000, старт uniform",
"expect": "откуда идёт стартовое возмущение и раскачивается ли продольная мода",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"2000",
"--refine",
"1",
"--init",
"uniform",
"--sponge-len",
"0",
"--xt",
"xt_re2000_uniform.csv",
"--xt-every",
"200",
"--steps",
"576000",
"--backend",
"gpu",
"--series-every",
"2",
"--gif",
"xt_re2000_uniform.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 552960,
"steps": 576000,
"cost": 318504960000,
"outputs": [
"xt"
]
},
{
"id": "G04_xt_re2000_rest",
"group": "G",
"title": "x–t диаграмма, Re=2000, старт rest",
"expect": "откуда идёт стартовое возмущение и раскачивается ли продольная мода",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"2000",
"--refine",
"1",
"--init",
"rest",
"--sponge-len",
"0",
"--xt",
"xt_re2000_rest.csv",
"--xt-every",
"200",
"--steps",
"576000",
"--backend",
"gpu",
"--series-every",
"2",
"--gif",
"xt_re2000_rest.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 552960,
"steps": 576000,
"cost": 318504960000,
"outputs": [
"xt"
]
},
{
"id": "G05_xt_re20000_uniform",
"group": "G",
"title": "x–t диаграмма, Re=20000, старт uniform",
"expect": "откуда идёт стартовое возмущение и раскачивается ли продольная мода",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"20000",
"--refine",
"1",
"--init",
"uniform",
"--sponge-len",
"0",
"--xt",
"xt_re20000_uniform.csv",
"--xt-every",
"200",
"--steps",
"576000",
"--backend",
"gpu",
"--series-every",
"2",
"--gif",
"xt_re20000_uniform.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 552960,
"steps": 576000,
"cost": 318504960000,
"outputs": [
"xt"
]
},
{
"id": "G06_xt_re20000_rest",
"group": "G",
"title": "x–t диаграмма, Re=20000, старт rest",
"expect": "откуда идёт стартовое возмущение и раскачивается ли продольная мода",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"20000",
"--refine",
"1",
"--init",
"rest",
"--sponge-len",
"0",
"--xt",
"xt_re20000_rest.csv",
"--xt-every",
"200",
"--steps",
"576000",
"--backend",
"gpu",
"--series-every",
"2",
"--gif",
"xt_re20000_rest.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"1",
"--gif-scale",
"1"
],
"nodes_per_step": 552960,
"steps": 576000,
"cost": 318504960000,
"outputs": [
"xt"
]
},
{
"id": "G07_sponge0",
"group": "G",
"title": "Губка выхода 0 столбцов при Re=5000",
"expect": "губка — единственное, что реально ест продольную моду",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"5000",
"--refine",
"1",
"--sponge-len",
"0",
"--steps",
"768000",
"--backend",
"gpu",
"--series-every",
"3"
],
"nodes_per_step": 552960,
"steps": 768000,
"cost": 424673280000,
"outputs": []
},
{
"id": "G08_sponge40",
"group": "G",
"title": "Губка выхода 40 столбцов при Re=5000",
"expect": "губка — единственное, что реально ест продольную моду",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"5000",
"--refine",
"1",
"--sponge-len",
"40",
"--steps",
"768000",
"--backend",
"gpu",
"--series-every",
"3"
],
"nodes_per_step": 552960,
"steps": 768000,
"cost": 424673280000,
"outputs": []
},
{
"id": "G09_spongein0",
"group": "G",
"title": "Губка входа 0 столбцов при Re=5000",
"expect": "помогает ли гасить волну до отражения от входа",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"5000",
"--refine",
"1",
"--sponge-in",
"0",
"--steps",
"768000",
"--backend",
"gpu",
"--series-every",
"3"
],
"nodes_per_step": 552960,
"steps": 768000,
"cost": 424673280000,
"outputs": []
},
{
"id": "G10_spongein40",
"group": "G",
"title": "Губка входа 40 столбцов при Re=5000",
"expect": "помогает ли гасить волну до отражения от входа",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"5000",
"--refine",
"1",
"--sponge-in",
"40",
"--steps",
"768000",
"--backend",
"gpu",
"--series-every",
"3"
],
"nodes_per_step": 552960,
"steps": 768000,
"cost": 424673280000,
"outputs": []
},
{
"id": "G11_limit_re10000",
"group": "G",
"title": "Предел устойчивости, Re=10000",
"expect": "где именно гибнет счёт; часть этих прогонов обязана развалиться",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"10000",
"--refine",
"1",
"--steps",
"384000",
"--backend",
"gpu"
],
"nodes_per_step": 552960,
"steps": 384000,
"cost": 212336640000,
"outputs": []
},
{
"id": "G12_limit_re50000",
"group": "G",
"title": "Предел устойчивости, Re=50000",
"expect": "где именно гибнет счёт; часть этих прогонов обязана развалиться",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"50000",
"--refine",
"1",
"--steps",
"384000",
"--backend",
"gpu"
],
"nodes_per_step": 552960,
"steps": 384000,
"cost": 212336640000,
"outputs": []
},
{
"id": "G13_limit_re200000",
"group": "G",
"title": "Предел устойчивости, Re=200000",
"expect": "где именно гибнет счёт; часть этих прогонов обязана развалиться",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"200000",
"--refine",
"1",
"--steps",
"384000",
"--backend",
"gpu"
],
"nodes_per_step": 552960,
"steps": 384000,
"cost": 212336640000,
"outputs": []
},
{
"id": "G14_lifetime",
"group": "G",
"title": "Тест на время жизни: 5·10⁶ шагов",
"expect": "не уплывает ли ⟨ρ⟩ и не деградирует ли решение на очень длинной дистанции",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"48",
"--nx",
"960",
"--ny",
"576",
"--body-x",
"192",
"--re",
"150",
"--refine",
"1",
"--steps",
"10000000",
"--backend",
"gpu",
"--series-every",
"50",
"--gif",
"lifetime.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"2",
"--gif-scale",
"1"
],
"nodes_per_step": 552960,
"steps": 10000000,
"cost": 5529600000000,
"outputs": []
},
{
"id": "H01_sym_cyl",
"group": "H",
"title": "Симметрия: цилиндр при α=0 без возмущения",
"expect": "Cl и Cm обязаны остаться ≈0 — это внутреннее свойство схемы, не литература",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"40",
"--refine",
"1",
"--pert-amp",
"0",
"--steps",
"512000",
"--backend",
"gpu",
"--series-every",
"2"
],
"nodes_per_step": 245760,
"steps": 512000,
"cost": 125829120000,
"outputs": []
},
{
"id": "H02_sym_foil",
"group": "H",
"title": "Симметрия: NACA 0012 при α=0 без возмущения",
"expect": "Cl ≈ 0 у симметричного профиля под нулевым углом",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"0012",
"--size",
"64",
"--body-angle",
"0",
"--nx",
"1024",
"--ny",
"512",
"--body-x",
"256",
"--re",
"500",
"--refine",
"1",
"--pert-amp",
"0",
"--steps",
"768000",
"--backend",
"gpu",
"--series-every",
"3"
],
"nodes_per_step": 524288,
"steps": 768000,
"cost": 402653184000,
"outputs": []
},
{
"id": "H03_mirror_plus",
"group": "H",
"title": "Зеркальность: NACA 0012 при α=8°",
"expect": "ряды обязаны зеркалиться: Cl меняет знак, Cd совпадает",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"0012",
"--size",
"64",
"--body-angle",
"8",
"--nx",
"1024",
"--ny",
"512",
"--body-x",
"256",
"--re",
"500",
"--refine",
"1",
"--steps",
"768000",
"--backend",
"gpu",
"--series-every",
"3"
],
"nodes_per_step": 524288,
"steps": 768000,
"cost": 402653184000,
"outputs": []
},
{
"id": "H04_mirror_minus",
"group": "H",
"title": "Зеркальность: NACA 0012 при α=-8°",
"expect": "ряды обязаны зеркалиться: Cl меняет знак, Cd совпадает",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"0012",
"--size",
"64",
"--body-angle",
"-8",
"--nx",
"1024",
"--ny",
"512",
"--body-x",
"256",
"--re",
"500",
"--refine",
"1",
"--steps",
"768000",
"--backend",
"gpu",
"--series-every",
"3"
],
"nodes_per_step": 524288,
"steps": 768000,
"cost": 402653184000,
"outputs": []
},
{
"id": "H05_mach02",
"group": "H",
"title": "Зависимость от числа Маха, u_lat=0.02",
"expect": "результат обязан сходиться при Ma→0; расхождение и есть сжимаемостная ошибка",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"150",
"--refine",
"1",
"--u-lat",
"0.02",
"--steps",
"1280000",
"--backend",
"gpu",
"--series-every",
"6"
],
"nodes_per_step": 245760,
"steps": 1280000,
"cost": 314572800000,
"outputs": []
},
{
"id": "H06_mach05",
"group": "H",
"title": "Зависимость от числа Маха, u_lat=0.05",
"expect": "результат обязан сходиться при Ma→0; расхождение и есть сжимаемостная ошибка",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"150",
"--refine",
"1",
"--u-lat",
"0.05",
"--steps",
"512000",
"--backend",
"gpu",
"--series-every",
"2"
],
"nodes_per_step": 245760,
"steps": 512000,
"cost": 125829120000,
"outputs": []
},
{
"id": "H07_mach10",
"group": "H",
"title": "Зависимость от числа Маха, u_lat=0.1",
"expect": "результат обязан сходиться при Ma→0; расхождение и есть сжимаемостная ошибка",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"150",
"--refine",
"1",
"--u-lat",
"0.1",
"--steps",
"256000",
"--backend",
"gpu"
],
"nodes_per_step": 245760,
"steps": 256000,
"cost": 62914560000,
"outputs": []
},
{
"id": "H08_prec_cpu",
"group": "H",
"title": "Точность: одинаковая постановка на cpu",
"expect": "расхождение f32 против f64 в зависимости от длины прогона",
"backend": "cpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"150",
"--refine",
"1",
"--steps",
"1024000",
"--backend",
"cpu",
"--series-every",
"5"
],
"nodes_per_step": 245760,
"steps": 1024000,
"cost": 251658240000,
"outputs": []
},
{
"id": "H09_prec_gpu",
"group": "H",
"title": "Точность: одинаковая постановка на gpu",
"expect": "расхождение f32 против f64 в зависимости от длины прогона",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"32",
"--nx",
"640",
"--ny",
"384",
"--body-x",
"128",
"--re",
"150",
"--refine",
"1",
"--steps",
"1024000",
"--backend",
"gpu",
"--series-every",
"5"
],
"nodes_per_step": 245760,
"steps": 1024000,
"cost": 251658240000,
"outputs": []
},
{
"id": "I01_fine_cylinder",
"group": "I",
"title": "Сверхмелкая сетка 4096×2048, cylinder, D=256",
"expect": "держится ли субсеточная граница на предельном разрешении для этой формы",
"backend": "gpu",
"args": [
"--shape",
"cylinder",
"--size",
"256",
"--nx",
"4096",
"--ny",
"2048",
"--body-x",
"820",
"--re",
"1000",
"--refine",
"1",
"--steps",
"3072000",
"--backend",
"gpu",
"--series-every",
"15",
"--gif",
"fine_cylinder.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"6",
"--gif-scale",
"1"
],
"nodes_per_step": 8388608,
"steps": 3072000,
"cost": 25769803776000,
"outputs": []
},
{
"id": "I02_fine_square",
"group": "I",
"title": "Сверхмелкая сетка 4096×2048, square, D=256",
"expect": "держится ли субсеточная граница на предельном разрешении для этой формы",
"backend": "gpu",
"args": [
"--shape",
"square",
"--size",
"256",
"--nx",
"4096",
"--ny",
"2048",
"--body-x",
"820",
"--re",
"1000",
"--refine",
"1",
"--steps",
"3072000",
"--backend",
"gpu",
"--series-every",
"15",
"--gif",
"fine_square.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"6",
"--gif-scale",
"1"
],
"nodes_per_step": 8388608,
"steps": 3072000,
"cost": 25769803776000,
"outputs": []
},
{
"id": "I03_fine_diamond",
"group": "I",
"title": "Сверхмелкая сетка 4096×2048, diamond, D=256",
"expect": "держится ли субсеточная граница на предельном разрешении для этой формы",
"backend": "gpu",
"args": [
"--shape",
"diamond",
"--size",
"256",
"--nx",
"4096",
"--ny",
"2048",
"--body-x",
"820",
"--re",
"1000",
"--refine",
"1",
"--steps",
"3072000",
"--backend",
"gpu",
"--series-every",
"15",
"--gif",
"fine_diamond.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"6",
"--gif-scale",
"1"
],
"nodes_per_step": 8388608,
"steps": 3072000,
"cost": 25769803776000,
"outputs": []
},
{
"id": "I04_fine_ellipse",
"group": "I",
"title": "Сверхмелкая сетка 4096×2048, ellipse, D=256",
"expect": "держится ли субсеточная граница на предельном разрешении для этой формы",
"backend": "gpu",
"args": [
"--shape",
"ellipse",
"--thickness",
"0.35",
"--size",
"256",
"--nx",
"4096",
"--ny",
"2048",
"--body-x",
"820",
"--re",
"1000",
"--refine",
"1",
"--steps",
"3072000",
"--backend",
"gpu",
"--series-every",
"15",
"--gif",
"fine_ellipse.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"6",
"--gif-scale",
"1"
],
"nodes_per_step": 8388608,
"steps": 3072000,
"cost": 25769803776000,
"outputs": []
},
{
"id": "I05_fine_naca",
"group": "I",
"title": "Сверхмелкая сетка 4096×2048, naca, D=256",
"expect": "держится ли субсеточная граница на предельном разрешении для этой формы",
"backend": "gpu",
"args": [
"--shape",
"naca",
"--naca",
"0012",
"--body-angle",
"8",
"--size",
"256",
"--nx",
"4096",
"--ny",
"2048",
"--body-x",
"820",
"--re",
"1000",
"--refine",
"1",
"--steps",
"3072000",
"--backend",
"gpu",
"--series-every",
"15",
"--gif",
"fine_naca.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"6",
"--gif-scale",
"1"
],
"nodes_per_step": 8388608,
"steps": 3072000,
"cost": 25769803776000,
"outputs": []
},
{
"id": "I06_fine_triangle",
"group": "I",
"title": "Сверхмелкая сетка 4096×2048, triangle, D=256",
"expect": "держится ли субсеточная граница на предельном разрешении для этой формы",
"backend": "gpu",
"args": [
"--shape",
"triangle",
"--size",
"256",
"--nx",
"4096",
"--ny",
"2048",
"--body-x",
"820",
"--re",
"1000",
"--refine",
"1",
"--steps",
"3072000",
"--backend",
"gpu",
"--series-every",
"15",
"--gif",
"fine_triangle.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"6",
"--gif-scale",
"1"
],
"nodes_per_step": 8388608,
"steps": 3072000,
"cost": 25769803776000,
"outputs": []
},
{
"id": "I07_fine_plate",
"group": "I",
"title": "Сверхмелкая сетка 4096×2048, plate, D=256",
"expect": "держится ли субсеточная граница на предельном разрешении для этой формы",
"backend": "gpu",
"args": [
"--shape",
"plate",
"--thickness",
"0.08",
"--body-angle",
"25",
"--size",
"256",
"--nx",
"4096",
"--ny",
"2048",
"--body-x",
"820",
"--re",
"1000",
"--refine",
"1",
"--steps",
"3072000",
"--backend",
"gpu",
"--series-every",
"15",
"--gif",
"fine_plate.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"6",
"--gif-scale",
"1"
],
"nodes_per_step": 8388608,
"steps": 3072000,
"cost": 25769803776000,
"outputs": []
},
{
"id": "I08_fine_wedge",
"group": "I",
"title": "Сверхмелкая сетка 4096×2048, wedge, D=256",
"expect": "держится ли субсеточная граница на предельном разрешении для этой формы",
"backend": "gpu",
"args": [
"--shape",
"polygon",
"--poly=-128,-72;154,0;-128,72",
"--size",
"256",
"--nx",
"4096",
"--ny",
"2048",
"--body-x",
"820",
"--re",
"1000",
"--refine",
"1",
"--steps",
"3072000",
"--backend",
"gpu",
"--series-every",
"15",
"--gif",
"fine_wedge.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"6",
"--gif-scale",
"1"
],
"nodes_per_step": 8388608,
"steps": 3072000,
"cost": 25769803776000,
"outputs": []
},
{
"id": "I09_fine_multi",
"group": "I",
"title": "Сверхмелкая сетка, композиция из трёх тел",
"expect": "взаимодействие следов на предельном разрешении",
"backend": "gpu",
"args": [
"--bodies",
"cylinder:d=200,x=800,y=1024; cylinder:d=200,x=1400,y=1024; naca:naca=4412,d=300,a=10,x=2200,y=1024",
"--nx",
"4096",
"--ny",
"2048",
"--re",
"1000",
"--refine",
"1",
"--steps",
"3072000",
"--backend",
"gpu",
"--series-every",
"15",
"--gif",
"fine_multi.gif",
"--gif-field",
"vorticity",
"--gif-every",
"auto",
"--gif-fps",
"10",
"--gif-speed",
"1",
"--gif-downsample",
"6",
"--gif-scale",
"1"
],
"nodes_per_step": 8388608,
"steps": 3072000,
"cost": 25769803776000,
"outputs": []
}
]
}