92 lines
6.0 KiB
Markdown
92 lines
6.0 KiB
Markdown
# CelerisLab 配置说明
|
||
|
||
**唯一配置入口:`config_lbm.json`**
|
||
Python `config.py` 只负责读取和校验,不是配置位置。
|
||
|
||
---
|
||
|
||
## grid — 网格
|
||
|
||
| 字段 | 类型 | 默认 | 允许值 | 说明 |
|
||
|------|------|------|--------|------|
|
||
| `lattice_model` | string | `"D2Q9"` | `D2Q9`, `D3Q19` | 格子模型,决定维度和速度数量 |
|
||
| `nx` | int | 512 | >0 | x 方向格点数(流向),建议整除 `threads_per_block` 以减少尾块浪费 |
|
||
| `ny` | int | 256 | >0 | y 方向格点数 |
|
||
| `nz` | int | 1 | >0 | z 方向格点数,D2Q9 时必须为 1 |
|
||
|
||
## physics — 物理参数
|
||
|
||
| 字段 | 类型 | 默认 | 说明 |
|
||
|------|------|------|------|
|
||
| `data_type` | string | `"FP32"` | 计算精度:当前仅实现 **`FP32`**(CUDA 核与 `LBMField` 主机缓冲为 float32;`FP64` 会在校验阶段被拒绝) |
|
||
| `viscosity` | float | 0.0035 | 运动粘度(格子单位),ω = 1/(3ν + 0.5) |
|
||
| `velocity` | float | 0.03 | 入口速度(格子单位) |
|
||
| `rho` | float | 1.0 | 参考密度 |
|
||
|
||
## method — 算法
|
||
|
||
| 字段 | 类型 | 默认 | 允许值 | 说明 |
|
||
|------|------|------|--------|------|
|
||
| `collision` | string | `"SRT"` | `SRT`, `TRT`, `MRT` | 碰撞算子 |
|
||
| `streaming` | string | `"double_buffer"` | `double_buffer`, `esopull` | 流传输方式 |
|
||
| `store_precision` | string | `"FP32"` | `FP32`, `FP16S`, `FP16C` | GPU 存储精度。当前运行时已实现 `FP32` 与 `FP16S`,`FP16C` 仍为保留选项 |
|
||
| `ddf_shifting` | bool | false | | 存储 f−w 而非 f,提升 FP16 精度 |
|
||
| `les.enabled` | bool | false | | LES Smagorinsky 子格模型 |
|
||
| `les.cs` | float | 0.16 | | Smagorinsky 常数 |
|
||
| `les.closed_form` | bool | true | | 闭合形式 τ_eff(vs 迭代) |
|
||
| `trt.magic_param` | float | 0.1875 | | TRT Λ 参数,高 Re 建议 0.001 |
|
||
| `inlet.profile` | string | `"parabolic"` | `uniform`, `parabolic` | 入口速度剖面(物理目标速度,与 scheme 独立) |
|
||
| `inlet.scheme` | string | `"zou_he_local"` | `zou_he_local`, `channel_stabilized`, `equilibrium`, `regularized` | 入口数值闭合。`zou_he_local` 为本地 Zou-He,适合研究或 MRT 路径;`channel_stabilized` 为 donor NEQ 稳定化入口,适合高阻塞或更保守的量产路径;`equilibrium` 直接写入 `feq` 源态,适合 ghost-source 架构下的稳健 SRT 基线;`regularized` 使用本地宏量加 incoming donor NEQ 阻尼,是介于 `equilibrium` 与 `channel_stabilized` 之间的实验入口 |
|
||
| `inlet.trt_neq_damp` | float | 0.5 | [0, 1] | 仅 `channel_stabilized`:TRT 入口 donor NEQ 阻尼;更小更平滑、精度略降 |
|
||
| `inlet.regularized_neq_damp` | float | 0.5 | [0, 1] | 仅 `regularized`:incoming 方向 donor NEQ 阻尼;0 退化到 unknown 方向仅平衡态,1 为 unknown 方向全 donor NEQ |
|
||
| `outlet.mode` | string | `"neq_extrap"` | `neq_extrap`, `zero_gradient`, `blended` | 出口条件 |
|
||
| `outlet.backflow_clamp` | bool | true | | 出口回流钳位 |
|
||
| `outlet.blend_alpha` | float | 0.7 | | `blended` 下对未知入域方向的混合系数(**所有碰撞模型**共用同一路径) |
|
||
| `outlet.srt_neq_damp` | float | 0.5 | [0, 1] | 仅当 `outlet.mode` 为 **`neq_extrap`** 且碰撞为 **SRT/TRT** 时:出口全分布 damped NEQ 的阻尼系数。`outlet.mode` 为 **`blended`** 时 SRT/TRT 走混合未知方向分支,不使用本键。MRT + `neq_extrap` 仍为少量方向的 NEQ 外推 |
|
||
| `y_wall_bc` | string | `"bounce_back"` | `bounce_back`, `free_slip` | y 向上下壁面边界条件(仅壁面相邻流体行生效) |
|
||
| `omega_guard.min` | float | 0.01 | | ω 下界(LES τ_eff 保护) |
|
||
| `omega_guard.max` | float | 1.99 | | ω 上界,高 Re 建议 1.90-1.99 |
|
||
|
||
## cuda — 编译
|
||
|
||
| 字段 | 类型 | 默认 | 说明 |
|
||
|------|------|------|------|
|
||
| `threads_per_block` | int | 256 | CUDA block 线程数,V100 最优 256 |
|
||
| `compute_capability` | string | `"auto"` | 目标 SM 架构,`auto` 自动检测 |
|
||
|
||
---
|
||
|
||
## 配置 → 代码映射
|
||
|
||
```
|
||
**`lbm/kernels/config/*.h` 由编译器根据 `LBMConfig` 自动生成,请勿手改。**
|
||
|
||
仓库中可能检入过历史版本的 `config/*.h`,与当前默认 JSON **不一定一致**;若以 Python 入口运行仿真,`Simulation` / `compiler_v2.generate_config` 会在编译前重写这些头文件。若只用 `nvcc` 单独编译 `kernel_v2.cu` 且跳过 `generate_config`,则可能读到陈旧宏,属不受支持用法。
|
||
|
||
config_lbm.json
|
||
↓ load_lbm_config()
|
||
config.py:LBMConfig (读取 + 校验)
|
||
↓ to_macros()
|
||
cuda/compiler_v2.py (生成 config/*.h)
|
||
↓
|
||
config_grid.h → NX, NY, NZ, NT, LATTICE_MODEL;
|
||
DIM / NQ 由 LATTICE_MODEL 推导写入(与 grid.lattice_model 一致,非 JSON 顶层字段)
|
||
config_physics.h → LBtype, VIS, RHO, U0
|
||
config_method.h → COLLISION_MODEL, STORE_PRECISION, USE_LES, Y_WALL_BC, ...
|
||
config_objects.h → N_OBJS
|
||
config_obs.h → OBS_*(打包遥测:force/torque/sensor 三段的 offset/stride 宏;`OBS_N_SLOTS=max(N_OBJS,1)`;由 `generate_config(cfg, n_objects=K)` 写入;**无**单独 JSON 字段,DIM 仍由格子模型推导)
|
||
↓ #include
|
||
descriptors.cuh → d_cx[], d_cy[], d_w[] (CUDA __constant__)
|
||
step/one_step_*.cu → kernel 编排
|
||
```
|
||
|
||
### 旋转物体数据契约(Rotating body contract)
|
||
|
||
- 几何参数(如 `rx`, `ry`)在 `initialize()` 后应视为不变量;改变几何属于拓扑变更,需要重新构建物体并重新初始化。
|
||
- 转速 `omega` 属于运行时状态,可在步进期间更新;该更新不改变 `N_OBJS` 或 `OBS_*` 内存布局,因此**不需要**因 `omega` 变化触发重新编译。
|
||
- 力矩观测从 `obs` 的 torque segment 读取;force / torque / sensor 段统一由 `config_obs.h` 宏描述。
|
||
|
||
### 稳定性默认窗口(Stability defaults)
|
||
|
||
- 默认 `method.omega_guard = {min: 0.01, max: 1.99}`,用于约束碰撞频率与 LES 有效粘度路径。
|
||
- 高 Re 调参建议将 `omega_guard.max` 保持在 `1.90-1.99` 区间;过高上界会增大接近 `omega -> 2` 的不稳定风险。 |