b97686c8db72da0a449c1da51c0f10c4cd640446
НЕСКОЛЬКО ТЕЛ (--bodies). SDF сцены — минимум по телам, поэтому маски, поле SDF и Bouzidi-линки строятся ровно теми же процедурами, что и для одного тела. Каждому линку проставляется индекс тела, и сила считается по телам отдельно: для тандема и многоэлементных конфигураций литература даёт коэффициенты каждого тела, общей суммы недостаточно. Разнос идёт по четырём вёдрам; тела за пределом набора сваливаются в последнее, так что сумма по вёдрам всегда точна. Синтаксис: "cylinder:d=24,x=120,y=120; cylinder:d=24,x=192,y=120". Проверка на тандеме L/D=3 при Re=150 даёт физически правильную картину: передний цилиндр Cd=1.22 при rms Cl=0.02, задний Cd=-0.10 при rms Cl=0.19. Отрицательное сопротивление заднего — классический режим экранирования, когда сдвиговые слои переднего замыкаются на задний, а восьмикратный рост rms Cl отвечает тому, что задний треплет след переднего. ПРОИЗВОЛЬНЫЙ МНОГОУГОЛЬНИК (--shape polygon --poly) — точный SDF уже был, добавлен разбор. Открывает клинья, зазубренные кромки, любые обводы. Проверено на клине: 100% линков идут по интерполяционной формуле. ПРОФИЛИ С ИЗГИБОМ (--naca 4412). Средняя линия по четырёхзначной серии, поверхности откладываются по НОРМАЛИ к ней, а не по вертикали — иначе у заметно изогнутого профиля толщина у носка завышается. При нулевой кривизне вырождается в прежний симметричный 00xx. ПРОРЕЖИВАНИЕ РЯДОВ (--series-every): на 5·10^6 шагов полный ряд занимал бы сотни мегабайт. РАЗБОР СТАРТОВОЙ АКУСТИКИ. Добавлена x-t диагностика (--xt): срез ⟨ρ⟩ и u_x вдоль осевой линии, по строке на срез. Что она показала: * возмущение рождается НА ТЕЛЕ, а не на входе. На нулевом шаге |ρ−1| ≈ 1.3·10^-2 у задней кромки при 10^-8 у входа и выхода; причина — поле стартует однородным потоком сквозь то место, где стоит тело; * дальше импульс уходит полосой через весь домен — ровно то, что наблюдалось на низких Re; * на Re ≥ 1000 при выключенной губке он раскачивает неустойчивость у ВЫХОДА, и счёт гибнет около шага 17000. С губкой (умолчание) Re=2000 доживает. Попытка лечения сглаживанием стартовой скорости у тела (--init-taper) ЗАМЕРЕНА И ОТВЕРГНУТА: ширина 24 клетки давит возмущение нулевого шага восьмикратно (2.54·10^-2 → 3.13·10^-3), но пик за прогон при этом даже растёт (2.54·10^-2 → 3.22·10^-2). Возмущение просто переносится во времени. Ключ оставлен выключенным, замер записан в его описании. Добавлена губка у входа (--sponge-in); профиль β вынесен в общую math::beta_profile, раньше он дублировался в обоих бэкендах. Исправлен вердикт о пульсации: при развале счёта отношение уходило в минус и проверка «> 0.05» молча не срабатывала. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
.objloading 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)
Description
САПР с упором на вычислительную гидродинамику с KBC методом в ядре и встроенными алгоритмами автоматизации аналитического проектирования обтекаемых тел.
72 MiB
Languages
C++
88.8%
CMake
9.2%
GLSL
1.5%
Batchfile
0.5%