NotBigGhostandClaude Opus 5 5d762ad9d6 Решатель KBC-2D на Rust: ядро по статьям, два бэкенда, гифка в реальном времени
Переписанный с нуля двумерный решатель LBM D2Q9 с энтропийным столкновением KBC
в варианте «модель D» (табл. I 2D-статьи Bösch/Chikatamarla/Karlin, arXiv:1507.02509;
в трёхмерных работах — KBC-N1). Код разложен по ролям на пять файлов: математика
решателя, бэкенд под процессор, бэкенд под видеокарту, оркестратор, блок гифок.

Ядро сверено с первоисточниками тестами (22 шт.):
* проектор на сдвиг, выписанный аналитически из представления популяций через
  натуральные моменты (ур. 10), совпадает с матричным до 1e-13, идемпотентен;
* γ из замкнутой оценки (ур. 17) — корень условия максимума энтропии (ур. 15);
* сдвиговые моменты релаксируют ровно с 2β при любой γ, вязкость по ур. (5)
  воспроизводится затуханием сдвиговой волны с точностью лучше 1%;
* сквозной бенчмарк статьи (дважды периодический сдвиговый слой, Re=3e4) сходится
  с fp64-эталоном питоновского решателя 0.6035.

Порог вырожденности γ относительный (доля от ⟨Δ|Δ⟩): абсолютный подменял бы γ на 2
на большинстве узлов, молча превращая KBC в LBGK. Доля таких узлов печатается в отчёте.

Бэкенды взаимозаменяемы и согласованы: CPU (rayon, f64) и GPU (wgpu/WGSL, f32) на одной
постановке совпадают до 4–5 значащих цифр шаг в шаг; на Intel Iris Xe GPU даёт ~105 MLUPS
против ~18 у процессора. Топология задачи строится один раз в cpu.rs и загружается в
буферы, дублируется только физика — в WGSL.

Анимация привязана к физическому времени потока, а не к скорости счёта: задержка кадра
берётся из δt = u_lat·δx/u_phys. Дробная задержка раскладывается по целым сотым долям
секунды накопителем (3,3,4,3,3,4,…), поэтому накопленное время кадров не уходит от
физического; режим --gif-every auto подбирает шаг под реальное время при заданной частоте.

Параметризовано: скорость и направление потока, число Рейнольдса, размер домена и размер
ячейки в метрах, коэффициент и границы вложенного патча измельчения, семь форм тела
(цилиндр, квадрат, ромб, эллипс, профиль NACA, треугольник, пластина) с углом атаки,
время и разгон, оператор столкновения, режим выхода и губка, бэкенд, вся анимация и
три уровня подробности отчёта.

Известное расхождение с питоновским решателем на канальном случае (Cd выше на 9%,
St ниже на 12% при совпадающих ⟨ρ⟩, ⟨Cm⟩ и rms Cl) описано в README вместе с тем,
что уже исключено как причина.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 18:23:03 +03:00

SimVulcan

A minimal Vulkan 1.3 / C++20 3D model editor: an orbit camera over three reference grid planes through the origin, with .obj model loading and display.

Features

  • Orbit camera — drag to rotate around the centre, wheel to zoom, and Front / Top / Side buttons to align the view to the principal planes.
  • A 3D editor space: three grid planes (XY, XZ, YZ) and coloured X/Y/Z axes meeting at the origin.
  • .obj loading with three display modes — solid (flat-shaded), wireframe, and solid + wireframe overlay.
  • ImGui interface (Viewport controls + Mesh load panel).

All Vulkan code is isolated in src/vk/; the rest of the app is Vulkan-free.

Targets

  • Windows x64 (MSVC / clang-cl)
  • Linux x64 (gcc / clang)
  • macOS arm64 (Apple Silicon, via MoltenVK)

Prerequisites

  • Vulkan SDK 1.3.290+ (https://vulkan.lunarg.com/)
  • CMake 3.26+
  • Ninja
  • C++20 compiler (MSVC 19.36+, gcc 11+, clang 14+)

Build

cmake --preset windows-msvc-release
cmake --build --preset windows-msvc-release

Run from the executable's own directory (build/<preset>/src/app/) so it finds the spirv/ and assets/ trees copied next to it.

Tests

cmake --build --preset windows-msvc-debug --target simv_tests
ctest --preset windows-msvc-debug

Layout

src/
  core/    Logger, Window, App (orchestration, Vulkan-free)
  vk/      All Vulkan: Context, Swapchain, Buffer, Image, Shader, GpuMesh,
           Renderer (frame loop + depth + ImGui), MeshRenderer, GridRenderer
  mesh/    CPU mesh: tinyobjloader + welding (no Vulkan)
  editor/  Camera, mouse input, EditorUI + MeshLoadPanel (ImGui, no Vulkan)
  app/     main.cpp
shaders/
  editor/  mesh + grid vertex/fragment shaders (GLSL → SPIR-V at build time)
tests/     Catch2 unit tests (mesh math)
S
Description
САПР с упором на вычислительную гидродинамику с KBC методом в ядре и встроенными алгоритмами автоматизации аналитического проектирования обтекаемых тел.
Readme
72 MiB
Languages
C++ 88.8%
CMake 9.2%
GLSL 1.5%
Batchfile 0.5%