# pv_plot

`pv_plot` 是 DynamisLab 内部的轻量 ParaView 画图接口，只负责读取流场、应用少量预设并输出 PNG/MP4。它不是独立 pip 项目，没有服务、socket、worker pool 或命令行框架。

## 环境

总控使用 `pycuda_3_10`，ParaView 由仓库根目录的 `ParaView/bin/pvpython` 独立运行。在仓库根目录运行模块时无需安装：

```bash
CUDA_VISIBLE_DEVICES=2 conda run -n pycuda_3_10 python -m your_module
```

若显式将源码目录加入 `PYTHONPATH`，也可使用顶层导入 `from pv_plot import plot`：

```bash
CUDA_VISIBLE_DEVICES=2 PYTHONPATH="$PWD/src" conda run -n pycuda_3_10 python your_script.py
```

ParaView 5.11.2 自带 Python 3.9。不要把 `ParaView/lib/python3.9/site-packages` 加到 conda Python 3.10 的 `PYTHONPATH`。如果 ParaView 不在仓库根，可设置 `PV_PLOT_PVPYTHON`；FFmpeg 可用 `PV_PLOT_FFMPEG` 覆盖。

## 使用

仓库内模块使用：

```python
from src.pv_plot import plot

plot("run/fields.npz", "run/vorticity.png")
plot("run/fields.npz", "run/speed.mp4", preset="speed", fps=10)
plot(
    "run/fields.npz",
    "run/error.png",
    preset="comparison",
    reference="run/q_in.npz",
    scalar_range=(0.0, 0.5),
)
```

新 CelerisLab 和 DRL eval 的 `ux/uy` 是 `(T, NY, NX)`，使用默认 `axis_order="tyx"`。Legacy CCD/OID 的 `(T, NX, NY)` 必须传 `axis_order="txy"`。单帧支持 `yx` 和 `xy`。工具不会猜测或静默转换未知方向。

Legacy Tecplot 文件序列可直接传列表：

```python
plot(sorted(field_files), "legacy.mp4", axis_order="tyx")
```

支持的预设只有：

- `vorticity`：有符号二维涡量；
- `speed`：速度模长；
- `comparison`：主场与参考场的速度误差。

输出为 `.mp4` 时自动渲染全部帧并调用 FFmpeg；其他后缀按单帧截图处理。
