Прототип: клеточный автомат тепла и массы (2D-разрез хребта)
Статус: задача на прототип (29.09.2026), игру не трогает. Цель — проверить идею пользователя: вместо поля ветра «сразу» — клетки, которые обмениваются теплом и массой с соседями (как «Жизнь», как газы в Oxygen Not Included), и посмотреть, что куда течёт над прогретым склоном. Связь с планом поля ветра — docs/plan/wind_field.md, исследование — docs/research/slope_wind.md.
Идея (слова пользователя)
Горячая клетка отдаёт немного тепла соседям вбок и вверх, вверх — больше (тепло поднимается). Тепло уносит массу: у клетки массы становится меньше, и она по тому же правилу подсасывает массу из соседних холодных клеток. Итог — втекание холодного воздуха в прогретую зону снизу и течение массы вверх.
Скоуп
- Отдельный скрипт на Python (numpy + matplotlib) в
tools/research/heat_ca/(свой venvtools/research/heat_ca/.venv, в .gitignore; зависимости —requirements.txt). Игру и её код не трогать. - Двумерный вертикальный разрез: ось X — поперёк хребта (≈ 6 км), ось Z — высота (≈ 3 км); клетка 25–50 м.
- Рельеф разреза: один хребет высотой ~400–600 м со склонами разной крутизны (одна сторона круче) — клетки под землёй не участвуют.
- Нагрев снизу: поток тепла в клетки над землёй. Сценарии:
- солнце на один склон (второй в тени), ветра нет;
- оба склона прогреты одинаково;
- то же с фоновым ветром поперёк хребта (фон ~3–5 м/с слева направо);
- с инверсией на высоте ~1,5 км над подножием (фон теплеет с высотой выше неё).
- Фон: температура окружающего воздуха падает с высотой (задаётся «устойчивость»); «горячая» клетка — теплее фона на своей высоте.
- Правила обмена (исполнитель уточняет, обязательно в форме потоков между парами клеток — что отдал один, получил другой):
- тепло: диффузия к соседям + перенос вверх, если клетка теплее соседа сверху с поправкой на фон (на инверсии подъём сам гаснет; фиксированный коэффициент «вверх больше» — нельзя);
- масса: уход массы вместе с теплом вверх; недостача массы в клетке подсасывает массу у соседей (выравнивание «давления»); масса и тепло переносятся фоновым ветром;
- шаг по времени — устойчивый (без «пилы»); если выравнивание массы идёт медленно — многосеточное ускорение или больше итераций на шаг.
- Прогон до установившегося состояния (изменения за шаг < порога) и запись истории для анимации.
- Скорость воздуха в клетке — из потоков массы через её грани (для стрелок и сравнения).
Выходы (всё в tools/research/heat_ca/out/<сценарий>/)
temp.png— срез температуры относительно фона (цвет) с контуром рельефа;flow.png— стрелки скорости (или линии тока) поверх температуры; цвет стрелок — вертикальная составляющая (подъём/опускание);w_profile.png— вертикальная скорость по X на высотах 50/150/300/600 м над рельефом;mass_balance.png— сохранение массы и тепла по времени (сумма, приток/отток через границы);evolution.mp4или.gif(ffmpeg есть) — как складывается циркуляция от старта до установления;summary.md— числа: максимальный подъём и где, приток у подножия, опускание в долине, высота подъёма, время установления, число итераций, время счёта. Плюс общийtools/research/heat_ca/README.md: как запустить (одна команда на сценарий, одна — на все), что означают картинки.
Условия приёмки
- Сохранение: масса и тепло сохраняются в пределах 0,1 % (кроме явных притоков через границы и нагрева) — график
mass_balance.png. - Прогретый склон поднимает воздух: над прогретым склоном и гребнем — подъём, у подножия прогретого склона — приток к склону (горизонтальная скорость направлена к склону), над долиной / над теневым склоном — опускание. Видно на
flow.png. - Сценарий 2: схождение и подъём над гребнем, симметричная картина.
- Инверсия (сценарий 4): подъём гаснет у инверсии, наверху — растекание в стороны; выше инверсии возмущение малое.
- Фоновый ветер (сценарий 3): подъём наклонён по ветру; картина не разваливается.
- Устойчивость счёта: нет «пилы» и роста без предела; установление за разумное число итераций (записать сколько; оценка, сколько это было бы на 3D-сетке 200×200×32 на GPU).
- Отчёт: в
summary.md— вывод, похоже ли на то, что говорит пилот (подъём у склона, приток снизу, потолок на инверсии), и насколько идея подходит для игры (статичный прогон до установления при загрузке/смене часа; сравнение с решателем Пуассона из плана поля ветра — это по сути он же, записанный локально). - Никаких изменений в игре; коммит — только
tools/research/heat_ca/(без.venvиout/крупнее ~5 МБ; картинки — вout/, можно закоммитить лучшие) и эта карточка.
Оценка
~0,5–1 день одного агента (Opus). Ветка не нужна — только новые файлы в tools/research/.