Модели термиков, склонового подъёма и подветренных потоков

Исследование для модуля атмосферы (FR-8, FR-11…FR-16). Цель — не CFD, а дешёвая аналитическая модель, которая даёт опытному пилоту правильные ощущения: форму подъёма, край термика, опускание вокруг, снос ветром, «умирающий» термик под распадающимся облаком, склон и ротор. В конце — формулы, которые реально реализованы в scripts/atmosphere/.

Обозначения: z — высота над землёй (AGL), zi — высота слоя перемешивания (≈ нижняя кромка кучевых облаков, cloudbase), w* — конвективный масштаб скорости (Deardorff), r — расстояние от оси термика, U — скорость ветра.

1. Конвективный пограничный слой

  • Масштаб Deardorff: w* = (g/T · H0 · zi)^(1/3), где H0 — кинематический поток тепла у земли. Для хороших летних дней w* ≈ 1,5–3 м/с, для слабых ≈ 1 м/с. Скорость набора в сильных термиках ядро ≈ 1…1,5·w*, т. е. 0,5–5 м/с (FR-11).
  • Облачность: кучевые облака образуются на уровне конденсации; грубо cloudbase_AGL ≈ 125 м · (T − Td). Нижняя кромка плоская, потому что конденсация начинается на одной высоте во всём перемешанном слое.
  • Пульсации вертикальной скорости (Lenschow, Wyngaard, Pennell 1980): σw² / w*² = 1,8 · (z/zi)^(2/3) · (1 − 0,8·z/zi)². Максимум σw ≈ 0,6·w* на z ≈ 0,3·zi, у земли и у кромки меньше. Эту кривую мы берём как профиль «конвективной болтанки».
  • Lenschow & Stephens (1980), «The role of thermals in the convective boundary layer»: по самолётным измерениям термики занимают ~ 20–40 % площади, их диаметр растёт с высотой (≈ 0,1…0,4·zi), в верхней половине слоя термики сливаются, между ними — медленное опускание.

2. Профиль термика по радиусу

2.1 Gedeon (1988, Technical Soaring)

«Мексиканская шляпа»:

w(r) = wc · exp(−(r/R)²) · (1 − (r/R)²)
  • ядро r < R — подъём, максимум wc на оси;
  • кольцо r > R — опускание, минимум −wc·e⁻² ≈ −0,135·wc на r = √2·R, дальше затухает;
  • полный поток массы через горизонтальную плоскость ровно ноль (∫₀^∞ (1−u)·e^(−u) du = 0) — физично: сколько поднялось, столько опустилось рядом.
  • Гладкая функция: производная непрерывна, поэтому разница подъёма между консолями крыла (≈ 10 м) плавно растёт к краю ядра — крыло кренит «из термика», как в жизни (FR-8).

2.2 Allen (2006), NASA Dryden, AIAA 2006-1510 «Updraft model for development of autonomous soaring UAV»

Модель по данным зондирований, зависящая от z/zi (константы приводим по памяти — для точной калибровки сверить с оригиналом):

  • средний подъём в термике: ŵ = w* · (z/zi)^(1/3) · (1 − 1,1·z/zi);
  • внешний радиус: r2 = max(10, 0,102 · (z/zi)^(1/3) · (1 − 0,25·z/zi) · zi) — термик расширяется с высотой;
  • внутренний радиус r1 = (r1/r2)·r2, r1/r2 ≈ 0,0011·r2 + 0,14 (до 0,8);
  • пик wc = 3ŵ · (r2³ − r2²·r1) / (r2³ − r1³);
  • форма — «колокол» 1 / (1 + |k1·r/r2 + k3|^k2) + k4·r/r2 (коэффициенты по таблице от r1/r2);
  • кольцо опускания wD = (π/6)·sin(π·r/r2) для r1 < r < 2·r2, плюс фоновое опускание, подобранное так, чтобы сохранялась масса в выбранной области;
  • число термиков в области X × Y: N ≈ 0,6 · X·Y / (zi · r2).

Выводы, которые мы берём у Allen: (1) рост радиуса с высотой ∝ (z/zi)^(1/3)(1 − 0,25 z/zi); (2) подъём быстро нарастает от земли (∝ z^(1/3)) и слабеет у кромки; (3) расстояние между термиками порядка zi·r2-масштаба — 1–3 км; (4) обязательное фоновое опускание между термиками.

У Allen подъём обнуляется уже на 0,91·zi. На практике под растущим кучевым облаком подъём держится почти до кромки (облачный «подсос»), поэтому верхний спад мы делаем узким и настраиваемым (top_taper_m), а не на 10 % высоты слоя.

2.3 Пузыри и колонны

  • Колонна (plume): источник на земле работает долго, воздух идёт непрерывным наклонным столбом. Типично для хороших «домашних» термиков на солнечных склонах и гребнях.
  • Пузырь (Scorer, вихревое кольцо): порция тёплого воздуха отрывается и всплывает, источник «перезаряжается» минутами. Внизу — «пустой» воздух, пузырь уходит вверх и дрейфует с ветром.
  • Модель у нас — колонна с жизненным циклом, у которой на стадии распада отрывается низ: нижняя граница подъёма поднимается от источника к кромке — пилот низко под распадающимся облаком термика уже не находит (это знакомая пилотам ситуация), а облако отрывается от источника и уплывает по ветру.

2.4 Жизненный цикл

Кучевое облако живёт 15–30 мин, «хороший» термик — 10–20 мин с перерывами. Огибающая силы e(t): рост (smoothstep 0→1 за grow_s), зрелость, распад (1→0 за decay_s). Облако отстаёт от термика на время подъёма воздуха до кромки (≈ zi / wc, 5–10 мин) и доживает немного дольше термика.

2.5 Наклон ветром

Воздух в колонне поднимается со скоростью ≈ wc и одновременно сносится ветром:

Δx(z) = ∫₀^z U(z') / w_rise dz'  ≈  z · U(z_mid) / w_rise

При U = 5 м/с, wc = 3 м/с, zi = 1500 м облако стоит на ~2,5 км по ветру от источника. Угол наклона ограничиваем сверху (max_lean_deg), чтобы при слабых термиках и сильном ветре термик не «ложился» — в жизни такие термики просто разрываются ветром.

2.6 Облачный подсос (cloud suck, FR-14b)

Выше уровня конденсации поднимающийся воздух насыщен: при дальнейшем подъёме он остывает по влажноадиабатическому градиенту (~6 К/км вместо 9,8 К/км у сухого) — скрытое тепло конденсации добавляет плавучесть, и внутри облака восходящий поток ускоряется (Stull, Meteorology for Scientists and Engineers, гл. 5–6; Houze, Cloud Dynamics, гл. 7). Сходимость потока под основанием тянет воздух к облаку: пилоты описывают это как «подсос» — последние сотни метров под основанием крупного растущего кучевого набор заметно ускоряется, под Cb — до опасного «затягивания» в облако (Reichmann, Cross-Country Soaring; руководства по безопасности полётов на парапланах/дельтапланах). Оценки прироста подъёма у основания активного Cu в практике и измерениях — примерно +30…100 % к скорости в середине слоя; внутри облака подъём сохраняется почти до верхушки, у краёв облака — опускание (испарительное охлаждение). Под мелкими, молодыми и распадающимися облаками подсоса нет: термик слабеет к кромке.

Реализация: k = smoothstep(D₁, D₂, диаметр облака) · smoothstep(0,3; 0,8; рост) · (1 − smoothstep(0; 0,35; распад)) · огибающая; в слое suck_depth_m под основанием подъём × (1 + suck_boost·k), внутри облака поток × (1 + подсос) до доли in_cloud_frac мощности облака, к верхушке гаснет; у Cb подсос сильнее (cb_suck). Без подсоса — прежний спад top_taper_m.

3. Ветер

  • Профиль у земли — степенной (или логарифмический): U(z) = U_ref · (z/z_ref)^α, α ≈ 0,14 (нейтральная стратификация, открытая местность), 0,2–0,3 над лесом/холмами. В конвективном слое выше ~ 300 м профиль почти постоянный — поэтому ограничиваем множитель сверху. В игре (Б2, scripts/atmosphere/wind_profile.gd): α по классу устойчивости Паскуилла–Тёрнера (0,11 в солнечный полдень … 0,24 в нейтраль), предел — на z_sat = 0,3·0,3u*/f (docs/guide/air-model.md → «Границы модели: профиль притока»).
  • Механическая турбулентность: порывистость σu ≈ 0,1…0,25·U, сильнее у земли. Модель «замороженной турбулентности» Тейлора: поле пульсаций переносится ветром, u'(x, t) = f(x − U·t). Реализуем детерминированным когерентным шумом (FastNoiseLite, fBm, 2 октавы) с масштабом вихрей 30–80 м — это сравнимо с размахом крыла, поэтому консоли получают разный подъём и крыло «болтает» по крену.
  • На краю термика — сдвиг скорости и перемешивание: добавляем пульсации, пропорциональные wc, с пиком на r ≈ R.

4. Динамический подъём у склона (FR-12)

  • Потенциальное обтекание: у поверхности поток идёт вдоль рельефа, значит вертикальная скорость w = V_h · ∇h (горизонтальный ветер на градиент высоты). На наветренном склоне > 0, на подветренном < 0. Максимум — ветер перпендикулярно склону, пропорционально крутизне (FR-12).
  • С высотой возмущение затухает с масштабом порядка полуширины/высоты хребта (Jackson & Hunt 1975 для пологих холмов): w(z) = w₀ · exp(−z/L).
  • Зона подъёма выдвинута вперёд склона (воздух начинает подниматься до склона) и вверх над гребнем. Дёшево моделируем сдвигом точки, в которой берём градиент, по ветру на k · z (чем выше пилот, тем дальше вперёд «чувствуется» склон).
  • Для крутых склонов (> 45°) формула завышает подъём — ограничиваем ridge_lift_max_ms и масштабируем коэффициентом эффективности.

5. Подветренная сторона и роторы (FR-13)

  • За острым гребнем при уклоне подветренного склона > ~ 15–20° поток срывается; образуется зона отрыва длиной 5–10 высот препятствия с возвратным течением у земли, сильной турбулентностью и нисходящими потоками. При устойчивой стратификации над этим ещё и подветренные волны, под их гребнями — роторы (Kuettner).
  • Дешёвая модель «тени»: для точки p смотрим против ветра на расстояния dᵢ и строим линию тени s(p) = maxᵢ (h(p − ŵ·dᵢ) − dᵢ·tan θ), θ ≈ 10–15° — угол линии отрыва. Если пилот ниже линии тени (s − y > 0) и препятствие значимое (s − h_ground > 0), он в подветренной зоне. Сила зоны L ∈ 0..1 растёт с глубиной под линией тени и с высотой препятствия, пропорциональна ветру.
  • В зоне: опускание −k_sink · U · L, турбулентность k_turb · U · L, ветер ослаблен. Склоновый член V·∇h там ослабляется на (1 − L) — поток уже не следует рельефу.

6. Фоновое опускание (FR-15)

Между термиками воздух медленно опускается (сохранение массы): −0,3…−1 м/с, по умолчанию −0,5. У земли любая вертикальная скорость стремится к нулю (кроме потока вдоль склона), поэтому все «конвективные» вертикальные компоненты умножаем на рост от земли clamp(z / z_fade).


7. Что реализовано (формулы модуля)

Все коэффициенты — в configs/atmosphere.json и configs/weather/*.json.

Ветер (метеонаправление «откуда» D, 0° — с севера; X — восток, −Z — север):

ŵ = (−sin D, 0, cos D)
U(z) = U_ref · clamp((max(z, z0)/z_ref)^α, 0, (z_sat/z_ref)^α)   # α, z_sat — WindProfile (Б2)

Термик (источник S, высота источника h_s, верх z_top = max(cloudbase, h_s + min_depth)):

ξ     = (y − h_s) / (z_top − h_s)                 доля высоты столба
c(y)  = S.xz + lean · (y − h_s) + drift(t)        ось, наклонённая ветром
lean  = U(mid)·ŵ / max(wc · rise_factor, rise_min), |lean| ≤ tan(max_lean)
R(ξ)  = R0 · max(r_min_factor, ξ^(1/3)·(1 − 0,25ξ) / 0,75)          (Allen)
V(ξ)  = min(1, (y−h_s)/ground_ramp)^(1/3) · smoothstep(z_top, z_top − top_taper, y)
x     = |p.xz − c(y)| / R
G(x)  = exp(−x²)·(1 − x²);   G<0 умножаем на ring_sink_factor                (Gedeon)
w_th  = wc · e(t) · V(ξ) · G(x) · bottom_cut(t)

bottom_cut — на распаде низ столба отрывается: подъём только выше h_s + (z_top − h_s)·decay_progress; drift(t) на распаде = ветер на кромке · время распада.

Сумма вертикальных потоков:

w = ground_fade(z) · [ bg_sink · (1 − core_mask) + Σ w_th ]  +  w_ridge − w_rotor
core_mask = max по термикам (e·V·exp(−x²))
w_ridge = clamp(k_eff · U(z) · (ŵ·∇h(p + ŵ·min(k·z, d_max))) · exp(−z_s/L), ±max) · (1 − L_lee)
w_rotor = k_sink · U · L_lee

Турбулентность (амплитуды складываем как независимые):

A² = (k_mech · U · (1 + boost·exp(−z/h_g)))²
   + (A_conv · √(1,8 · ξ^(2/3) · (1 − 0,8ξ)²) / 0,6)²          (Lenschow, нормировано на пик)
   + (Σ k_edge · wc · e · exp(−((x − 1)/σ_edge)²))²
   + (k_rotor · U · L_lee)²
u' = A · (n₁, n₂·r_v, n₃),   nᵢ = fBm((p − ŵU·t)/λ + offsetᵢ)

Генерация: мир разбит на клетки thermal_spacing_m; у каждой клетки свой цикл с детерминированной (хеш от клетки и номера цикла) фазой, силой, радиусом и точкой источника, выбранной как лучшая по sun_fn из source_candidates случайных точек. Термик в цикле «включается», только если sun ≥ sun_min и случайное число < duty. Всё — чистые функции времени и координат: один и тот же день воспроизводится независимо от пути пилота.

Источники

  • Allen, M. J. Updraft Model for Development of Autonomous Soaring Uninhabited Air Vehicles. AIAA 2006-1510, NASA TM.
  • Gedeon, J. Dynamic analysis of dolphin-style thermal cross-country flight. Technical Soaring, 1973/1988 (профиль «мексиканская шляпа»).
  • Lenschow, D. H., Stephens, P. L. The role of thermals in the convective boundary layer. Boundary-Layer Meteorology 19, 1980.
  • Lenschow, D. H., Wyngaard, J. C., Pennell, W. T. Mean-field and second-moment budgets in a baroclinic, convective boundary layer. J. Atmos. Sci. 37, 1980 (профиль σw).
  • Deardorff, J. W. Convective velocity and temperature scales… J. Atmos. Sci. 27, 1970.
  • Jackson, P. S., Hunt, J. C. R. Turbulent wind flow over a low hill. QJRMS 101, 1975.
  • Kuettner, J. The rotor flow in the lee of mountains. 1959.
  • Reichmann, H. Cross-Country Soaring (практика: жизнь термиков и облаков, центровка).
  • Lawrance, N., Sukkarieh, S. Autonomous exploration of a wind field with a gliding aircraft. JGCD 2011 (использование модели Gedeon в симуляции).