Начальный коммит: Vulkan-редактор SimVulcan + исследование KBC-LBM

Состояние на момент заведения репозитория.

C++ приложение (src/, shaders/, tests/) — минимальный редактор 3D-моделей
на Vulkan 1.3: орбитальная камера, три опорные сетки через начало координат,
загрузка .obj с режимами отображения. Весь Vulkan изолирован в src/vk/.

Исследование (docs/) — оригинальные статьи по KBC (docs/origins) и
Python-решатель D2Q9 KBC-N1 с AMR 2x и SDF+Bouzidi (docs/theory).

В решателе перед коммитом исправлены дефекты, найденные сверкой с
первоисточниками: относительный порог знаменателя энтропийного стабилизатора
(абсолютный вырождал KBC в LBGK на 77-99% узлов), заворот вход/выход в углах
домена, диагностика средней плотности по фиктивным узлам тела, зашитый
refine=2. Подробности — docs/theory/solver_2x_sdf/README.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-14 16:37:38 +03:00
co-authored by Claude Opus 5
commit 11ff7b79b4
139 changed files with 88747 additions and 0 deletions
+20
View File
@@ -0,0 +1,20 @@
function(simv_set_warnings TARGET)
if(MSVC)
target_compile_options(${TARGET} PRIVATE
/W4 /permissive- /Zc:preprocessor /Zc:__cplusplus
/wd4100 # unused parameter (interfaces have many)
)
target_compile_definitions(${TARGET} PRIVATE
_CRT_SECURE_NO_WARNINGS
NOMINMAX
WIN32_LEAN_AND_MEAN
)
else()
target_compile_options(${TARGET} PRIVATE
-Wall -Wextra -Wpedantic
-Wno-unused-parameter
-Wshadow -Wnon-virtual-dtor -Wold-style-cast
-Wcast-align -Wunused -Woverloaded-virtual
)
endif()
endfunction()
+11
View File
@@ -0,0 +1,11 @@
function(simv_enable_sanitizers TARGET)
if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
return()
endif()
if(MSVC)
target_compile_options(${TARGET} PRIVATE /fsanitize=address)
else()
target_compile_options(${TARGET} PRIVATE -fsanitize=address,undefined -fno-omit-frame-pointer)
target_link_options (${TARGET} PRIVATE -fsanitize=address,undefined)
endif()
endfunction()
+50
View File
@@ -0,0 +1,50 @@
# Compile GLSL (.comp/.vert/.frag) into SPIR-V at build time.
#
# Usage:
# simv_compile_shaders(simv_shaders
# shaders/editor/mesh.vert
# shaders/editor/mesh.frag
# INCLUDES shaders
# )
#
# Produces ${CMAKE_BINARY_DIR}/spirv/<relative_dir>/<name>.spv as a custom target.
function(simv_compile_shaders TARGET)
cmake_parse_arguments(SCS "" "" "INCLUDES" ${ARGN})
set(SOURCES ${SCS_UNPARSED_ARGUMENTS})
set(SPIRV_OUT_DIR "${CMAKE_BINARY_DIR}/spirv")
file(MAKE_DIRECTORY "${SPIRV_OUT_DIR}")
set(SPV_OUTPUTS "")
foreach(SRC IN LISTS SOURCES)
get_filename_component(SHADER_NAME "${SRC}" NAME)
file(RELATIVE_PATH REL_PATH "${CMAKE_CURRENT_SOURCE_DIR}" "${SRC}")
get_filename_component(REL_DIR "${REL_PATH}" DIRECTORY)
set(OUT_PATH "${SPIRV_OUT_DIR}/${REL_DIR}/${SHADER_NAME}.spv")
get_filename_component(OUT_DIR "${OUT_PATH}" DIRECTORY)
file(MAKE_DIRECTORY "${OUT_DIR}")
set(INCLUDE_FLAGS "")
foreach(INC IN LISTS SCS_INCLUDES)
# glslangValidator requires -I<dir> with NO whitespace.
list(APPEND INCLUDE_FLAGS "-I${INC}")
endforeach()
add_custom_command(
OUTPUT "${OUT_PATH}"
COMMAND "${Vulkan_GLSLANG_VALIDATOR_EXECUTABLE}" -V --target-env vulkan1.3
${INCLUDE_FLAGS} -o "${OUT_PATH}" "${SRC}"
DEPENDS "${SRC}"
COMMENT "GLSL → SPIR-V: ${REL_PATH}"
VERBATIM
)
list(APPEND SPV_OUTPUTS "${OUT_PATH}")
endforeach()
add_custom_target(${TARGET} ALL DEPENDS ${SPV_OUTPUTS})
set_target_properties(${TARGET} PROPERTIES
SIMV_SPIRV_DIR "${SPIRV_OUT_DIR}"
)
endfunction()
+17
View File
@@ -0,0 +1,17 @@
# Locate Vulkan SDK + glslangValidator (needed for offline shader compilation).
# On macOS this expects MoltenVK to be present (provided by Vulkan SDK 1.3.290+).
find_package(Vulkan REQUIRED COMPONENTS glslangValidator)
if(NOT Vulkan_glslangValidator_FOUND)
message(FATAL_ERROR "glslangValidator not found. Install Vulkan SDK from https://vulkan.lunarg.com/")
endif()
message(STATUS "Vulkan version: ${Vulkan_VERSION}")
message(STATUS "Vulkan include dir: ${Vulkan_INCLUDE_DIRS}")
message(STATUS "glslangValidator: ${Vulkan_GLSLANG_VALIDATOR_EXECUTABLE}")
if(APPLE)
# MoltenVK ships with the SDK; it's loaded as ICD at runtime, no link change needed,
# but we set MVK_CONFIG_USE_METAL_PRIVATE_API=0 in env when running.
message(STATUS "macOS detected — Vulkan via MoltenVK (Apple Silicon arm64 only)")
endif()