












Weichky 2026年 06月 01 日
本指南暂时托管至个人博客。
MoltenMeta 是一个面向液态合金热力学的计算与可视化平台,支持热力学计算、不确定性量化和模块化扩展。
UI (PySide6) → Application Services → Modules (plugins) → Data (SQLite)依赖注入:通过 AppContext 获取服务(context.modules、context.user_db 等),避免全局单例。
两阶段初始化:
bootstrap():创建核心服务(Log、I18n、Theme)initApp():加载数据库和模块双数据库:
core.mmdb:应用设置user DB:元素、系统、属性值等业务数据模块通过 config.toml 配置,无需继承基类(duck typing)。
runtime/modules/
├── kohler_module/
│ └── config.toml
├── toop_module/
│ └── config.toml
└── ...数据源注册:模块通过 DataSourceRegistry.register(tag, factory) 注册数据源,供其他模块查询。
| 组件 | 版本 | 说明 |
|---|---|---|
| Python | 3.12 / 3.14 | Windows 打包用 3.12,源文件运行用 3.14 |
| C++ 编译器 | C++17 | 用于编译 Pybind11 扩展 |
| uv | 最新 | Python 包管理 |
# 安装依赖
uv sync
# 运行应用
uv run python src/main.py --runtime-path ./runtime计算密集型模块使用 C++ 编写,通过 Pybind11 绑定:
module_name_module/
├── module_name_module.py # Python wrapper
├── module_name_algorithm.cpp # C++ 实现
├── CMakeLists.txt
└── lib/
└── module_name_algorithm.so # 编译产物.so(Linux)/ .pyd(Windows)/ .dylib(macOS)文件放入 lib/ 目录,Python 通过 importlib 动态加载。
二元数据提供者接口。几何模型通过此接口获取二元数据。
class BinaryDataProvider(ABC):
def get_values(self, elem_1: int, elem_2: int, x_array: list[float]) -> list[float]:
"""获取二元属性值数组"""数据源工厂注册表。通过标签查找数据源。
class DataSourceRegistry:
@classmethod
def register(cls, tag: str, factory: Callable) -> None: ...
@classmethod
def findByTag(cls, required_tags, accepted_tags, module_service=None) -> list: ...模块加载和调用的核心服务。
class ModuleService:
def callMethod(self, module_name: str, method_name: str, **kwargs) -> dict: ...
def setProvider(self, module_name: str, provider: BinaryDataProvider) -> None: ...AB → AC → BC(按字母序)
Kohler(对称):
Z_ABC = (x_A+x_B)²·Z_AB(x_A/(x_A+x_B))
+ (x_B+x_C)²·Z_BC(x_B/(x_B+x_C))
+ (x_A+x_C)²·Z_AC(x_A/(x_A+x_C))Toop(非对称,A 为溶剂):
Z_ABC = x_B/(x_B+x_C)·Z_AB(x_A) + x_C/(x_B+x_C)·Z_AC(x_A)
+ (x_B+x_C)²·Z_BC(x_B/(x_B+x_C))Maggianu(体积分数修正):
V_ij = (1 + x_i - x_j) / 2
Z_ABC = x_A·x_B/(V_AB·V_BA)·Z_AB(V_AB) + ...Hillert-Toop(混合):
Z_ABC = x_B/(x_B+x_C)·Z_AB(x_A) + x_C/(x_B+x_C)·Z_AC(x_A)
+ x_B·x_C/(V_BC·V_CB)·Z_BC(V_BC)实验数据 → GP.fit() → GP.predict() → 残差预测
↓
二元数据 → RK.fit() → L_coeffs + Σ_L
↓
get_GE_functions()
↓
ButlerConfig ← sigma_i_func, density_func, element_props_get_M
↓
ButlerCalc.solve() → σ(x, T)
↓
sample() → Monte Carlo 不确定性传播数据实体使用 frozen=True 的 dataclass,确保不可变。
class SnapshotBase(ABC):
id: int | None
@classmethod
def fromRow(cls, row) -> "SnapshotBase": ...
def toRecord(self) -> dict: ...class BaseRepository(ABC, Generic[T]):
def insert(self, entity: T) -> int: ...
def findById(self, id: int) -> T | None: ...
def findAll(self) -> List[T]: ...
def update(self, entity: T) -> bool: ...
def delete(self, id: int) -> bool: ...[module]
package_name = "kohler_module"
entry_class = "KohlerCalc"
all_methods = ["calculateSingleProperty", "calculateScatter", "calculateContour"]
type = "simulation"
category = "geometric_model"
[calculateSingleProperty.inputs]
symbol = ["elem_A", "elem_B", "elem_C", "x_A", "x_B", "x_C", "Z_AB", "Z_BC", "Z_AC"]
input_method = "raw"
[calculateSingleProperty.outputs]
symbol = ["Z_ABC"]
is_virtual = true
[calculateSingleProperty.plot]
plotType = "scatter_3d"问题:Qt-Advanced-Docking-System 在 Wayland 会话下停靠和拖拽异常。
解决:使用 X11 会话(登录界面选择 "GNOME on Xorg")。
检查项:
config.toml 存在且格式正确entry_class 拼写正确runtime/modules/ 下registerDataSources() 正确注册检查项:
DataSourceRegistryrequired_tags 和 accepted_tags)检查项:
.so/.pyd/.dylib)在 lib/ 目录importlib.util.spec_from_file_location 路径正确建议:
kernel_type="Matern" 而非 "RBF"(更稳健)alpha 参数(越小越容易过拟合)length_scale此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。