Модели термиков, склонового подъёма и подветренных потоков
Исследование для модуля атмосферы (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 в симуляции).