Чувствительность модели воздуха: отбор по Моррису (все параметры и переключатели)

Исследование по просьбе автора: какие ручки модели двигают какие наблюдаемые, и жёсткая ли модель там, где это важно пилоту. Код, данные прогонов и картинки лежат в tools/research/morris/, воспроизведение описано в конце документа. Считалось на ветке air/morris (от air/am-09b, b671d61). Код масштабов 1 и 3 совпадает с feature/air-model после AM-09б: последние коммиты AM-09б (a2e3f00, acffd0f) меняют только документы.

Коротко

  • Прогнали 16 факторов (15 заказанных плюс nu_const, который работает только при closure = const) на 6 случаях: Askervein, хребет, седловина, косой ветер, Онгудай 12:00 в штиль и при 3 м/с. План Морриса — 12 траекторий по 17 точек плюс номинал, 205 точек × 6 случаев = 1230 прогонов. На GPU ушло 5,3 ч, по часам 7,4 ч (GPU делили с другими задачами). Отдельно сделан малый Моррис масштаба 3: 7 параметров, 160 точек, 3 готовых поля Askervein.
  • Модель не жёсткая. Почти каждую важную пилоту наблюдаемую двигают несколько ручек, иногда в разы сильнее её погрешности. Сильнее всего действуют: выбор замыкания (hb или const), порядок переноса (1-й или 2-й), добавка по местному сдвигу local_k, способ ввода нагрева heat_mode, а у Askervein ещё и профиль ветра на притоке α. Параметр λ/h — второстепенная ручка. Заметно он действует только за гребнем: ротор и опускание (S ≈ 3), и на число итераций.
  • Главная находка про калибровку AM-09. Askervein (разгоны на 10 м в нейтральной стратификации) различает по сути одну комбинацию параметров: на первое направление SVD приходится 94 % действия всех факторов. λ/h входит в это направление вместе с α притока (cos = 0,94), порядком переноса (0,93) и замыканием. Поэтому значение λ/h = 0,25 верно только при α = 0,17, заданном в AM-09 вручную, и больше ни о чём не говорит. Профиль опорной мачты RS в данных Askervein (чашки до 49 м, змей до 267 м) даёт α ≈ 0,21–0,22. Лучшие точки плана Морриса с α ≈ 0,20 имеют χ² ≈ 54 против 86 в номинале, и λ/h в них у нижнего края (0,02, то есть работает порог λ = 40 м). Это прямо противоположно выводу AM-09 «данные тянут λ/h вверх».
  • Где модель жёсткая, то есть параметры её не двигают: отношение w(45°)/w(0°) = 0,70–0,73 (его не двигает ни один фактор) и разгон над хребтом на 2H и 2,5H (двигает только α притока). Это структурные предсказания геометрии обтекания, а не настройки. Параметры zi_min и (у Askervein) pr_t, tau_cool, k_smooth_m, heat_mode в своих случаях не действуют: так и должно быть. k_fa и cs_h слабые, их можно фиксировать по литературе.
  • Что подгонять дальше: (1) Askervein заново, по трём параметрам (λ/h, α, z0), добавив профиль RS в наблюдаемые; (2) λ/h и λ за гребнем — по данным с подветренной стороны (Perdigão, Bolund), а не по Askervein; (3) параметры нагрева (pr_t, tau_cool, k_smooth_m) — по синтетике LES конвективного слоя над рельефом. Структурно: переключатели (замыкание, порядок, local_k, heat_mode) выбирать по физике, а не подгонкой; ошибку численной схемы держать отдельно; пересмотреть выхолаживание θ′ с временем τ, потому что оно гасит и адиабатические возмущения в устойчивом потоке (седловина ×1,8 ± 0,3 от одного τ). Кроме того, Pr_t в решателе не реализован.

Метод

Моррис (elementary effects) — это отбор факторов: он дешевле полных индексов Соболя и показывает, какой фактор двигает наблюдаемую, насколько сильно и нелинейно ли (или во взаимодействии с другими).

  • Каждый фактор приводится к отрезку [0, 1]: положительные масштабные — в логарифме, остальные — линейно, дискретные — уровнями. Уровней p = 4, шаг Δ = 2/3 диапазона (для дискретных — смена уровня).

  • Траектория — это 17 точек: от случайной стартовой точки каждый из 16 факторов по очереди делает один шаг. Из 100 кандидатов выбраны 12 траекторий, наиболее разнесённых по пространству (Campolongo et al. 2007; SALib optimal_trajectories).

  • Элементарный эффект — Δy при шаге фактора. Знак берётся по направлению шага: к большему значению или к следующему уровню.

    • μ* = ⟨|Δy|⟩ — средний сдвиг наблюдаемой в её единицах, основная мера важности;
    • σ — разброс знакового Δy. Большая σ (σ ≳ μ*) означает нелинейность или взаимодействие: фактор действует по-разному в зависимости от остальных;
    • μ = ⟨Δy⟩ — средний сдвиг со знаком (направление);
    • S = μ*/порог, где порог — различимый сдвиг наблюдаемой (таблица ниже). S ≥ 1 — «двигает», 0,3–1 — «слабо», < 0,3 — «нет».

    Сверка с SALib.analyze.morris на χ² Askervein совпала до округления (out/morris.json → salib_check).

  • Выбор r. В задании было r = 10. Пробные точки заняли 45–80 с на точку по всем 6 случаям. Поэтому взято r = 12 (205 точек), чтобы пачка уложилась в 4–6 ч GPU. Вышло 5,3 ч. Для масштаба 3 (дёшево, только ЦП) — r = 20.

  • Несошедшиеся прогоны не выбрасывались. Это прогоны, которые упёрлись в предел итераций (3000 для реального рельефа, 4000 для Askervein). Анализ сделан в двух вариантах: «все» (без разошедшихся и ошибок — их не было) и «только сошедшиеся» (оба конца шага сошлись). Таблицы в документе — вариант «все». Второй вариант лежит в out/morris_table.csv (столбцы *_conv) и на картинке fig_heatmap_key_conv.png.

  • Два дополнения к эталону air.py сделаны только для этого исследования, в подклассе MAir (tools/research/morris/model.py); в игре и в air.py их нет:

    1. Pr_t в air.py объявлен, но не используется: там стоит khf = nuf, то есть Pr_t = 1 жёстко. Здесь K_θ = K_m/Pr_t, иначе фактор был бы пустым по построению;
    2. при closure = const в air.py не считается толщина слоя h, а нагрев cbl и λ = λ/h·h её требуют (сочетание const + cbl падает). Здесь h вычисляется как в hb, а постоянной становится только вязкость.

Факторы и диапазоны

ФакторНоминалДиапазонШкалаОбоснование границ
lam_frac (λ/h)0,250,02–0,6логФизичный диапазон 0,03–0,25 (Блэкадар 1962: λ ≈ 0,00027 G/f ≈ 0,02–0,03 h; Mellor & Yamada 1982: l₀ ≈ 0,1 масштаба). По заданию нарочно шире, до 0,6 — чтобы увидеть, куда тянут данные
lam (порог λ, м)4015–150логHoltslag & Boville 1993: 30 м; Blackadar: десятки метров; ECMWF (Beljaars & Viterbo 1998): 150 м
cs_h (Смагоринский гориз.)0,250–0,30лин0 — выключено; Lilly 0,17; WRF km_opt 4: 0,25 (Skamarock et al. 2019); 0,3 — с запасом сверху
pr_t1,00,5–1,3логНейтрально 0,74–0,95 (Businger et al. 1971; Högström 1996); неустойчиво около 0,5–0,7; устойчиво ≳ 1 (Li 2019, обзор)
k_fa (K над слоем, м²/с)10,1–3логСвободная атмосфера 0,1–1 (порядок); до 3 — фоновая диффузия численных моделей
z00,03 м (Askervein) / 0,1 м (прочие)×1/3 … ×3логAskervein 0,01–0,09 (Taylor & Teunissen 1987: 0,03; у разных авторов 0,01–0,05); луг и кустарник 0,03–0,3 (классы Wieringa 1993)
alpha (показатель профиля притока)0,17 / 0,14×0,7 … ×1,4линAskervein 0,12–0,24; ровная местность 0,10–0,20, нейтрально ≈ 1/7 (Counihan 1975). Профиль RS в данных Askervein: 0,17 на 10→40 м, 0,22 на 10→116/267 м
tau_cool (с)72001800–21600логПрямых измерений нет. Перемешивание с фоном — часы, радиационное выхолаживание θ′ ≈ 1 К — порядка суток. Взято 0,5–6 ч вокруг номинала
zi_min (м)300100–600логУтренний слой перемешивания 100–300 м, дневной — сотни метров и выше (Stull 1988)
k_smooth_m (м)1500500–3000логЯчейка конвекции ≈ 1–1,5 z_i (Lenschow & Stephens 1980), z_i 0,5–2 км
adv21 (2-й пор.)0 / 1уровниВ калибровке — 2-й порядок, в окнах игры — 1-й
closurehbhb / constуровниТроэн–Марта / Холтслаг–Бовилль или постоянная вязкость (прикидка)
nu_const (м²/с)305–100логK в середине слоя — десятки м²/с (Stull 1988; HB93). Действует только при const
local_kвклвыкл / вклуровниДобавка Прандтля–Блэкадара по местному сдвигу
heat_modecblcbl / surfaceуровниНагрев по толщине слоя (нелокально, HB93) или в первую клетку
limiter00 / 1 / 2уровниЛинейная схема / ван Лир / ван Альбада. Действует только при adv2 = 1: при 1-м порядке уровень передаётся, но не используется, и эффект честно равен 0

Вложенности не распутывались, а учтены самим методом. Эффект nu_const ненулевой только в траекториях с const, эффект limiter — только при 2-м порядке, параметры нагрева — только в случаях с нагревом. Нулевой эффект — тоже результат. Численные параметры (псевдошаги, sweeps, губки, критерии) не варьировались.

Масштаб 3 (параметры configs/atmosphere.json, значения в игре не менялись): field_sigma_w_per_ustar 1,0–1,5 (Panofsky & Dutton 1984: 1,25; в сложном рельефе разброс шире); field_mixing_length_m 20–80 м; field_deficit_attached 0–0,5 и ширина separated − attached 0,2–0,6 (диапазон перебора AM-09); field_descent_slope 0,02–0,1; field_sigma_u_per_du 0,12–0,24 и field_sigma_w_per_du 0,10–0,18 (слой смешения: 0,18 и 0,14 по Bell & Mehta 1990; Pope 2000).

Случаи и наблюдаемые

Все случаи считаются эталоном air.py на GPU (float32) с критериями сходимости, как в AM-09.

СлучайСеткаНаблюдаемые (порог S)
Askervein, 210°, нейтрально, U10(RS) = 8,9 м/с25 м, область 4 км / потолок 1 км39 разгонов ΔS = S/S_RS − 1 (порог — σ данных точки, 0,004–0,12); χ² по группам, как в fit_s1 (с поправками сетки и области из fit_s1.json; порог Δχ² = 4)
Хребет Аньези H = L = 500 м, квази-2D, 5 м/с (synth.check4)50 мразгон на 2H и 2,5H (0,02), |w|/U там же (0,01), разгон у бровки на 10 и 50 м (0,05); за гребнем: скорость на 20 и 50 м в 2L и 4L к скорости вдали (0,05), минимум продольной u на 20 м (< 0 — возвратное течение, ротор; 0,05), минимум w на 50 м /U (0,02)
Седловина: хребет 500 м, седло 250 м, N = 0,01, ветер вдоль оси (check5, 0°)100 м×(седло/перед склоном) на 20 и 50 м (0,1: у пилота ×1,5 ± 0,2), скорость за седлом (0,05)
Косой ветер: хребет 300 м, 0° и 45° (check6)100 мw(45°)/w(0°) на 50 и 100 м (0,05; у пилота 0,55–0,8), w у склона (0,05 м/с), разгон у гребня (0,03)
Онгудай 12:00, штиль и 3 м/с, 150°: область 400 м → окно 100 м → окно 50 м (cost_check)400/100/50 мподъём у старта (max w на 200 м в 1,5 км; 0,1 м/с), ветер и w на 50 м над стартом (0,3 и 0,1 м/с), θ′ (0,2 К), p99/p1 w₂₀₀ по области (0,1 м/с), ветер в седловине Каянчи (0,3 м/с)
Цена—ln(суммы итераций) по случаю (0,2, то есть ×1,22)
Масштаб 3: поля Askervein 12,5 м, 25 м (2-й пор.) и 50 м (1-й пор., как в игре), λ/h = 0,25, z0 = 0,042Godot headless, функции атмосферы игрыТКЭ/ТКЭ(RS) на 13 мачтах и χ² по группам (σ = 15 % отношения, как в fit_s3, но без σ сетки, поэтому χ² велики; порог 4); σ_w (0,1 м/с) и признак отрыва (0,1) на ANE10/20/40

Пороги для проверок пилота и нагрева назначены: это сдвиг, который пилот заметит (0,1 м/с на вариометре, 0,3 м/с ветра, 5 % разгона) или который меняет вывод проверки (седловина ± 0,1 при допуске пилота ± 0,2).

Итоговая матрица (S = μ*/порог)

Жирным — «двигает» (S ≥ 1), точка — «нет» (S < 0,3). Полная матрица по всем 73 наблюдаемым — out/morris_table.csv и картинки ниже.

факторχ² Ask.HTAANE10хр. 2Hбровка 10ротор u20w50 за гр.седл. ×w45/w0подъём штильподъём 3ветер 50итер. штильитер. Ask.
lam_frac2.9·0.4·1.52.72.9···0.40.32.23.0
lam····0.51.21.1··1.3··1.2·
cs_h0.6···········0.7·
pr_t·········1.71.10.31.4·
k_fa0.8········2.2··0.8·
z0_mul6.5·0.4·2.30.30.40.9·1.3··0.70.3
alpha_mul47.12.53.42.21.10.6·2.7··1.21.4·0.6
tau_cool·······3.3·2.11.31.95.9·
zi_min··············
k_smooth_m·········1.6··2.3·
adv220.71.22.0·2.81.21.10.8·1.42.12.34.2·
closure54.42.22.30.54.84.51.55.9·5.03.92.53.21.4
nu_const25.21.00.80.62.32.52.44.3·3.51.01.12.20.8
local_k10.90.60.90.93.66.17.7··4.62.60.83.64.2
heat_mode·········14.89.52.25.9·
limiter1.9···0.3····2.30.60.30.7·

Номинальные значения: χ² Askervein 85,8 (39 точек; совпадает с AM-09, 86,2), HT 0,46, AANE10 0,32, разгон на 2H 0,19, минимум u20 за гребнем −0,12, седловина ×1,83, w45/w0 0,72, подъём у старта 0,55 м/с в штиль и 1,41 м/с при 3 м/с.

Средние сдвиги в единицах наблюдаемой (μ*; знак μ — направление при увеличении фактора):

  • χ² Askervein: closure → const +218; α притока −188 (круче профиль — лучше); nu_const 101; 1-й → 2-й порядок −83; local_k вкл −43; z0 26; λ/h −12 (шаг в 2/3 диапазона — это множитель ≈ 10 по λ/h).
  • HT (разгон на вершине): α +0,16; const −0,15; 2-й порядок +0,08; λ/h +0,015 (σ данных 0,07).
  • Хребет, 2H: α +0,044; local_k +0,018; остальные ≤ 0,012 (номинал 0,19, у пилота ≤ 0,10).
  • Ротор (минимум u20 за гребнем): local_k вкл +0,30 (ротор слабее); const 0,23; λ/h +0,13 (при σ = 0,20 — сильно нелинейно).
  • Седловина ×: const 0,59 (σ 0,89 — действует через nu_const); nu_const 0,43; τ +0,33; α −0,27.
  • Подъём у старта: heat_mode surface +1,48 м/с в штиль и +0,95 м/с при 3 м/с; замыкание 0,5 / 0,39; local_k 0,46 / 0,26; τ 0,21 / 0,13; Pr_t 0,17 / 0,11.

Вывод по группам наблюдаемых

Askervein (нейтрально, разгоны на 10 м)

Разгоны двигают прежде всего переключатели схемы (замыкание, порядок переноса, local_k) и профиль притока α. Шаг α на 0,08 (с 0,17 до 0,20) меняет χ² сильнее, чем λ/h от 0,02 до 0,6. z0 действует умеренно (S = 6,5 на χ²), λ/h — слабо (S = 2,9 на χ²; ни на одной отдельной точке S не больше 1, кроме ASW20). cs_h, k_fa, lam — меньше порога. pr_t, tau_cool, zi_min, k_smooth_m, heat_mode здесь ничего не делают, как и должно быть в нейтральной стратификации без нагрева.

Вырождение. SVD матрицы «фактор × 39 точек» (знаковые μ в σ данных): 94 % на первом направлении, 3,8 % на втором, 1,3 % на третьем. Первое направление — «общий уровень разгона»: замыкание, α, nu_const, порядок, local_k, λ/h. Косинус λ/h с α — 0,94, с порядком переноса — 0,93, с local_k — 0,86, с lam — 0,97. Иначе говоря, разгоны Askervein определяют одно число (плюс, на пределе, одно-два слабых). λ/h, α, z0 и ошибку схемы по ним не развести: любую из них можно заменить другой. Поэтому подгонка AM-09 «одного λ/h» дала ответ, условный по α = 0,17 и по поправке сетки.

Куда тянут данные при всех ручках сразу (out/fig_askervein_alpha_lamfrac.png, morris.json → askervein_best). Лучшие точки плана: χ² = 54 при hb, 2-м порядке, local_k вкл, α = 0,20–0,24, z0 = 0,021 м и λ/h = 0,02 (номинал: 86 при α = 0,17, λ/h = 0,25). При α = 0,24 и λ/h = 0,6 χ² ≈ 110. Сетка Морриса грубая (4 уровня), это подсказка, а не подгонка. Но она согласуется с данными: профиль RS (Zenodo 4095052, askervein_validation1.txt) даёт α = 0,17 на 10→40 м, 0,19 на 10→49 м и 0,22 на 10→116 и 10→267 м (змей BRE). Отношение S(267 м)/S(10 м) = 2,04 при max_profile = 2,0 в модели, то есть насыщение профиля на ≈ 250 м совпадает с α ≈ 0,22.

Χ² по группам: вершину, гребень и линию B двигают те же переключатели и α; подветренную сторону — больше local_k и порядок переноса (S 5,2 и 4,3), λ/h слабо (1,1).

Проверки пилота (синтетика)

  • Разгон над хребтом на 2H и 2,5H — модель жёсткая. Его заметно двигает только α притока (S = 2,2 и 1,3); все параметры перемешивания и схемы дают S < 1. Номинал 0,19 на 2H против ≤ 0,10 у пилота параметрами не исправить. Это предсказание формы обтекания (плюс определение: максимум над хребтом к скорости вдали на той же высоте над морем). Записать в «Границы модели» и перепроверить определение, а не крутить параметры.
  • Разгон у бровки (10 и 50 м) двигают замыкание, local_k, порядок, nu_const, z0, λ/h (1,2–1,5): это зона, где работает турбулентное замыкание.
  • За гребнем (скорость в 2L и 4L, ротор u20, опускание w50) — здесь λ/h действует всерьёз: S = 1,3–2,9, σ ≈ μ* (нелинейно). Вместе с ним действуют local_k (сильнее всего, S до 7,7), замыкание и lam (1,1–1,2). След за гребнем — единственное место, где λ/h важен пилоту, и именно там у Askervein мало данных (8 точек, χ² 29,5 в AM-09).
  • Седловина × — замыкание и nu_const (только при const), τ выхолаживания (S = 3,3) и α. τ здесь действует без всякого нагрева: случай стратифицирован (N = 0,01), и релаксация θ′ к фону гасит адиабатические θ′ поднятого воздуха, ослабляя блокировку. Это структурный вопрос (ниже).
  • Косой ветер w(45°)/w(0°) = 0,70–0,73 — не двигает ничто (максимум S = 0,27). Структурное предсказание в допуске пилота (0,55–0,8). Сама w у склона (0°) зависит от α (S = 5,4), но отношение от этого не меняется.

Нагрев (Онгудай 12:00)

  • Подъём у старта сильнее всего задаётся heat_mode: surface вместо cbl даёт +1,5 м/с в штиль и +0,95 м/с при 3 м/с, S = 15 и 9,5. Следом идут замыкание, local_k, порядок переноса. Из физических параметров действуют τ (S = 2,1 / 1,3), Pr_t (1,7 / 1,1), k_fa (2,2 в штиль), k_smooth_m (1,6 в штиль). zi_min ничего не делает: z_i из погоды в полдень выше zi_min во всём диапазоне 100–600 м. λ/h на подъём почти не влияет (0,4 при 3 м/с).
  • Ветер на 50 м над стартом двигают замыкание, порядок, heat_mode, τ, α — все с S ≈ 1,4–2,5.
  • Сходимость: штиль 12:00 в окне 50 м не сошёлся за 3000 итераций в 139 из 205 точек (номинал сошёлся за 303 итерации). Сильнее всего это зависит от τ, heat_mode, порядка переноса и local_k. При 3 м/с не сошлись 40 из 205, у косого ветра — 19. Поэтому в штиле эффекты «все» включают шум несошедшегося решения: в варианте «сошедшиеся» по каждому фактору остаётся 1–5 шагов, это не статистика. При 3 м/с оба варианта близки (например, heat_mode: 0,95 и 0,65 м/с).

Масштаб 3 (ТКЭ Askervein, игра)

  • χ² ТКЭ почти целиком задаёт σ_w/u* (field_sigma_w_per_ustar): μ* = 1745 на поле 12,5 м и 145 на поле 50 м. Данные хотят нижний край диапазона: на вершине и наветренном склоне ТКЭ завышена в 1,5–4 раза (быстрое искажение, AM-09). Это структурная граница: коэффициент один на всё поле, а на вершине нужен другой закон.
  • σ_w за гребнем (ANE10–40) двигают пороги отрыва (field_deficit_attached, ширина, field_descent_slope, S = 1,5–6) и σ_w/ΔU. Сдвиги до 0,6 м/с — это заметная пилоту болтанка. Но χ² Askervein по подветренной стороне их различает слабо (AM-09: на подветренных мачтах признак отрыва равен 1 при любых порогах).
  • field_mixing_length_m (20–80 м) ничего не меняет: на 10 м l ≈ κz = 4 м ≪ λ. Увидеть этот параметр можно только на высоте в десятки метров, а мачт ТКЭ там нет.

Ответ: жёсткая ли модель?

Нет. Модель мягкая по переключателям схемы и по граничному профилю. По физическим параметрам перемешивания она умеренная. Жёсткость есть трёх видов:

  1. Жёсткость от данных (нейтральный Askervein). Данные различают одну комбинацию параметров, а не λ/h. Малая чувствительность χ² к λ/h — не свойство модели: λ/h работает в той же «ручке уровня разгона», что α, z0 и ошибка схемы, и эта ручка уже занята α. Будь α подобран по профилю RS, λ/h ушёл бы к нижнему краю.
  2. Вырождение. λ/h ↔ α притока ↔ порядок переноса ↔ local_k ↔ lam (cos 0,86–0,97 на Askervein). Отсюда и вырождение (λ/h)·k: множитель при длине перемешивания и множитель при K неразличимы, пока наблюдаемые — разгоны у земли в нейтральном потоке. Развести их можно другими наблюдаемыми: следом за гребнем, профилями над вершиной выше 50 м, ТКЭ на высоте.
  3. Структурная жёсткость (не двигает ничто): w(45°)/w(0°), разгон на 2H и 2,5H (кроме α), ТКЭ на вершине (кроме общего σ_w/u*). Это геометрия и законы модели. Если с ними расходятся данные или пилот — менять физику, а не параметры.

По проверкам пилота (20 наблюдаемых) у модели три почти равных направления (36 %, 35 %, 21 %): синтетические случаи различают больше, чем Askervein. Но у них нет измерений, только слова пилота, а в подгонку они не входят.

Рекомендации

Подгонять дальше (с данными):

  1. Askervein заново, методом Professor по трём параметрам (λ/h, α, z0), с профилем RS как наблюдаемыми: чашки 3–49 м и змей 70–267 м к RS 10 м. Профиль определит α, и только после этого λ/h будет что-то значить. Это дёшево: ≈ 100 прогонов по 10 с на 25 м плюс поправка сетки из AM-09. Ожидание по Моррису: λ/h уйдёт вниз, к 0,03–0,1.
  2. λ/h, lam и local_k — по следу за гребнем. Perdigão (2017, двойной хребет, мачты и лидары в долине, есть рециркуляция) и Bolund (2007–08, крутой уступ, мачты за бровкой). Только там эти ручки двигают то, что важно пилоту: ротор и опускание (S 2–8).
  3. Нагрев (pr_t, tau_cool, k_smooth_m, k_fa) — по синтетике LES конвективного слоя над простым рельефом (PALM или MicroHH: склон или холм с нагревом, профили w и θ, подъём на 200 м). Эти параметры двигают подъём у старта на 0,1–0,2 м/с каждый, а данных для них сейчас нет. Сопутствующая проверка — статистика подъёмов в наборах парапланов (Hernández-Aguayo et al. 2026).
  4. Масштаб 3: σ_w/u* и пороги отрыва — по Perdigão и Bolund (ТКЭ за бровкой). На Askervein они либо упираются в структурную границу (вершина), либо не различаются (след).

Фиксировать по литературе, не подгонять: cs_h (0,25), k_fa (1), zi_min (здесь без эффекта), limiter (эффект только при 2-м порядке, S ≤ 2 на χ²), field_mixing_length_m.

Структурно:

  • Переключатели выбрать по физике, а не подгонкой. hb (const хуже на Δχ² = 218, и nu_const без него не нужен), local_k вкл (лучше на Δχ² = 43, стандарт Блэкадара). heat_mode — самый сильный фактор для термиков (±1,5 м/с). Выбор cbl обосновать физикой (HB93) и проверить на LES из п. 3, пока не калибровать.
  • Ошибка схемы. 1-й порядок против 2-го даёт Δχ² = 83 и +0,08 разгона на вершине. В окнах игры стоит 1-й порядок, и эта ошибка той же направленности, что λ/h и α. Держать её отдельно, как поправку сетки в AM-09, и не давать ей уходить в физические параметры.
  • τ выхолаживания гасит любые θ′, включая адиабатические возмущения в устойчивом потоке: седловина ×1,8 меняется на ±0,33 от одного τ, и нагрева там нет. Физичнее релаксировать только диабатическую часть (нагрев и выхолаживание от земли) или взять τ из радиационного выхолаживания (порядка суток). Это правка схемы, решение за координатором.
  • Pr_t не реализован ни в air.py, ни в решателе игры (scripts/atmosphere/air_model/ — параметра нет, K_θ = K_m): Pr_t = 1 жёстко. На подъём у старта он влияет на 0,1–0,17 м/с. Либо реализовать, либо записать в «Границы модели».
  • Штиль: в 68 % точек окно 50 м в полдень не сходится за 3000 итераций. Числа модели в штиль шумные, и это вопрос численной схемы (AM-01), а не параметров.

Границы исследования

  • Моррис — отбор, а не количественная доля дисперсии. Шаг 2/3 диапазона крупный, поэтому у нелинейных факторов (λ/h за гребнем, замыкание) σ ≈ μ*. Для индексов Соболя по отобранным 6–8 факторам нужно ≈ 10³ точек.
  • Пороги S для проверок пилота и нагрева назначены. Ранжирование факторов от порога не зависит, отнесение к «двигает / слабо» — зависит.
  • Askervein считался на 25 м (область 4 км) с поправками сетки из AM-09. Эти поправки выведены для 2-го порядка и hb, для 1-го порядка и const они лишь приближение, но на ранжирование это не влияет.
  • Синтетические случаи взяты на сетках AM-01 (50/100 м), штиль и 3 м/с — на сетках игры (400/100/50 м). Эффекты сетки не варьировались.
  • Масштаб 3 считался на полях с λ/h = 0,25 и z0 = 0,042 (AM-09б), без σ сетки. Поэтому абсолютные χ² ТКЭ велики (1000–5000), а смысл имеют только сдвиги.

Картинки

  • tools/research/morris/out/fig_heatmap_key.png — матрица «фактор × ключевая наблюдаемая», S; fig_heatmap_key_conv.png — только сошедшиеся шаги;
  • out/fig_heatmap_askervein.png — все 39 точек Askervein и χ² по группам;
  • out/fig_heatmap_pilot_heat.png — проверки пилота, нагрев, итерации;
  • out/fig_mu_sigma.png — μ*–σ по 16 наблюдаемым;
  • out/fig_askervein_alpha_lamfrac.png — χ² Askervein на плоскости (α притока, λ/h);
  • out/fig_scatter_lamfrac.png — χ², HT, AANE10, разгон 2H, ротор, подъём против λ/h по всем точкам;
  • out/fig_degeneracy.png — сходство действия факторов (cos);
  • out/fig_status.png — какие факторы меняют сходимость;
  • out/fig_heatmap_s3.png — масштаб 3.

Таблицы: out/morris_table.csv (все наблюдаемые × факторы, варианты «все» и «сошедшиеся»), out/lists.md («что двигает» по каждой наблюдаемой и по каждому фактору), out/morris.json (эффекты, SVD, лучшие точки, статусы и время).

Воспроизведение

Из корня копии. Venv — tools/research/tune/.venv: uv venv; uv pip install "cupy-cuda12x[ctk]==14.2.0" numpy matplotlib scipy iminuit zstandard brotli SALib ([ctk] нужен для заголовков CUDA при сборке ядер).

sh tools/research/morris/run_all.sh 12          # план (r = 12) + пачки «morris» (GPU) и «morris-s3» (Godot)
tools/dp job wait morris 28800
tools/dp job wait morris-s3 7200
tools/research/tune/.venv/bin/python tools/research/morris/analyze.py   # все таблицы и картинки

Прогоны дописываются в out/runs/<случай>.jsonl (по строке на точку, с параметрами, статусом, итерациями, временем и всеми наблюдаемыми). Прерванную серию можно продолжить повторным запуском. Замок GPU /tmp/heat_ca_gpu.lock берётся на каждую точку. Поля масштаба 3 (tools/research/morris/fields/, ≈ 180 МБ) — вне git, пересоздаются run_s3.sh. Для масштаба 3 нужен один раз godot --headless --import в новой копии (кеш классов).

Источники

Beljaars A.C.M., Viterbo P. (1998) in: Clear and Cloudy Boundary Layers, KNAW · Bell J.H., Mehta R.D. (1990) AIAA J. 28:2034 · Blackadar A.K. (1962) JGR 67:3095 · Businger J.A. et al. (1971) JAS 28:181 · Campolongo F., Cariboni J., Saltelli A. (2007) Env. Model. Softw. 22:1509 · Counihan J. (1975) Atmos. Env. 9:871 · Herman J., Usher W. (2017) SALib, JOSS 2(9):97 · Hernández-Aguayo C. et al. (2026) arXiv:2608.00241 · Högström U. (1996) BLM 78:215 · Holtslag A.A.M., Boville B.A. (1993) J. Climate 6:1825 · Lenschow D.H., Stephens P.L. (1980) BLM 19:509 · Li D. (2019) Atmos. Res. 216:86 (Pr_t, обзор) · Lilly D.K. (1967) IBM Sci. Comp. Symp. · Mellor G.L., Yamada T. (1982) Rev. Geophys. 20:851 · Morris M.D. (1991) Technometrics 33:161 · Panofsky H.A., Dutton J.A. (1984) Atmospheric Turbulence · Pope S.B. (2000) Turbulent Flows · Skamarock W.C. et al. (2019) NCAR/TN-556+STR · Stull R.B. (1988) An Introduction to Boundary Layer Meteorology · Taylor P.A., Teunissen H.W. (1987) BLM 39:15; данные — Zenodo 4095052 (CC BY 4.0) · Wieringa J. (1993) BLM 63:323 · Perdigão: Fernando H.J.S. et al. (2019) BAMS 100:799 · Bolund: Berg J. et al. (2011) BLM 141:219.