Files
tcad-devsim_triac/devsim_min_error_implementation_notes.md
T

3.6 KiB
Raw Blame History

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

    • 在類別定義中宣告了 void SetMinError(double); 的新介面。
  2. EquationHolder.cc

    • 實作了該介面,使其在內部呼叫泛型(doublefloat128)的底層 equation->setMinError(...),以確實改變運算引擎中的收斂底限判定。
  3. 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_lgplsymdiffsuperluboostorg 相關套件。
  • 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 連結參數,成功讓 mathdevsim 模組連結了 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。

測試結果:

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 版本!