Files
tcad-devsim_triac/devsim_min_error_implementation_notes.md
T

48 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DEVSIM Customization: `min_error` Implementation Walkthrough
這份文件總結了我們為了將 DEVSIM 核心的載子收斂底限參數 `min_error` 開放給 Python 介面所做的所有工作。我們成功在獨立的 `devsim-dev` 環境中完成了原始碼修改、重新編譯,並在本地端虛擬環境中完成了安裝與驗證。
## 1. C++ 原始碼修改 (Backend Changes)
我們成功實作了 Plan B,也就是完全仿造 `variable_update` 參數的設計模式,將 `min_error` 拉出成為一個選項。
### 修改了以下三個核心檔案:
1. **[EquationHolder.hh](file:///home/pchan/devsim2026/devsim-dev/devsim/src/Equation/EquationHolder.hh)**
- 在類別定義中宣告了 `void SetMinError(double);` 的新介面。
2. **[EquationHolder.cc](file:///home/pchan/devsim2026/devsim-dev/devsim/src/Equation/EquationHolder.cc)**
- 實作了該介面,使其在內部呼叫泛型(`double``float128`)的底層 `equation->setMinError(...)`,以確實改變運算引擎中的收斂底限判定。
3. **[EquationCommands.cc](file:///home/pchan/devsim2026/devsim-dev/devsim/src/commands/EquationCommands.cc)**
- 修改了 `createEquationCmd` 函數,在參數解析清單中註冊了 `"min_error"` 選項。
- 設定其預設值為 `"1.0e-10"` 以保持向後相容性。
- 提取 Python 端傳入的值,並呼叫 `eh.SetMinError(min_error)`
> [!NOTE]
> 這些修改使得我們無需更動 `Equation.cc` 內硬編碼的 `defminError = 1.0e-10`,而是以優雅、可擴充的方式從 API 進行覆寫。
## 2. 環境與編譯挑戰解決 (Build Process)
編譯過程中我們遇到了一些環境與依賴挑戰,均順利排除:
- **子模組拉取**:因為原 DEVSIM repo 使用了相對路徑的 Git Submodules,但在 GitLab 的 Fork 中無法對應到公開庫。我們改由直接從 GitHub 官方抓取 `umfpack_lgpl``symdiff``superlu``boostorg` 相關套件。
- **SuperLU 標籤相容性**:一開始使用了 `master` 版本的 SuperLU,導致與 DEVSIM 2.0 期待的 API (`dgstrf` 缺少第 12 個引數 `GlobalLU_t *`) 不合。我們迅速將其降版至與 DEVSIM 2.0 完全相容的 **`v5.2.2`**。
- **編譯器與 128 位元支援**:為了支援 `-DDEVSIM_EXTENDED_PRECISION=ON`,我們從 `clang` 切換為 `gcc`,並且在 CMake 參數中動態加入了 `QUADMATH_ARCHIVE=-lquadmath` 連結參數,成功讓 `math``devsim` 模組連結了 Linux 原生的 `libquadmath`
## 3. 打包與驗證 (Packaging & Verification)
1. **打包 Wheel**
- 修正了 DEVSIM 官方編譯腳本 `build_standalone_wheel.sh` 中未加上引號,導致複製有空白的檔名(`PROJECT GUIDE.md`)會失敗的 Bug。
- 順利打包產出了 `devsim-2.10.0-cp39-abi3-linux_x86_64.whl`
2. **安裝與執行測試**
- 透過 `pip install --force-reinstall` 將自製的 DEVSIM 安裝進 `/home/pchan/devsim2026/.venv/` 環境中。
- 我們撰寫了一支簡單的 Python 測試腳本 `test_min_error.py` 來呼叫包含 `min_error=1.0e-5` 的新 API。
**測試結果:**
```python
devsim.equation(device="dev1", region="reg1", name="MyEq", variable_name="MyVar", variable_update="positive", min_error=1.0e-5)
```
執行後沒有出現任何參數錯誤或崩潰(Crash),順利印出 `Equation with min_error successfully created!`,代表 Python 端與 C++ 端已完美橋接。
> [!TIP]
> 之後您可以開始在 `devsim_bjt_example-main` 中對載子連續性方程式進行測試了!
> 當您確認目前修改完全符合需求後,我們就可以隨時將這份修改透過 `git push` 上傳至 GitLab 成為專屬的 `wisetop-custom` 版本!