3. 平台总体架构设计

参数化仿真自动化平台要同时解决三类问题:参数如何被统一管理、仿真任务如何被可靠调度执行、结果如何被结构化回收并驱动下一轮迭代。如果把这些职责混在一个“大服务”里,短期看似开发快,长期必然出现参数来源不清、任务状态丢失、结果无法追溯、界面与求解器强耦合等问题。因此平台总体架构采用四层分层架构:用户交互层、参数管理层、仿真执行层、结果处理层。分层的核心不是“多写几个模块”,而是明确职责边界与依赖方向——上层依赖下层提供的稳定接口,下层不感知上层的具体界面形态。

四层职责边界

用户交互层面向工程师,负责参数录入、任务提交、进度查看与结果可视化。它不直接调用求解器,也不直接读写结果数据库,而是通过平台API与参数管理层、结果处理层交互。典型对象包括参数表单、任务看板、收敛曲线视图和报告导出入口。

参数管理层是平台的“单一数据源”。它维护参数定义(名称、类型、单位、默认值、取值范围)、参数集版本、参数与模型文件的映射关系,以及参数变更历史。参数管理层对外提供参数校验、参数快照生成和参数集冻结能力。例如一个结构仿真参数集可定义为:plate_thickness=2.5 mm、youngs_modulus=210 GPa、load=1200 N,并附带版本号 v3。

仿真执行层负责把“参数快照”转换为可执行的求解任务。它包含任务编排、求解器适配、资源调度和状态监控四个子模块。任务编排根据仿真类型选择模板;求解器适配把平台参数翻译为求解器输入文件;资源调度决定任务在本地、容器还是HPC队列上运行;状态监控持续回传 queued/running/succeeded/failed 等状态。

结果处理层负责结果解析、指标提取、对比分析与归档。它从求解器输出中抽取关键物理量(如最大应力、最大位移、一阶固有频率),写入结果库,并支持多方案对比。结果处理层不修改参数,只产出“结果指标 + 元数据”,供用户交互层展示或触发下一轮参数更新。

数据流与调用关系

一次典型的参数化仿真迭代,数据流如下:用户在交互层提交参数集 → 参数管理层校验并生成不可变参数快照 snapshot_id → 仿真执行层依据快照创建任务并调用求解器 → 求解器输出结果文件 → 结果处理层解析并写入指标 → 交互层读取指标展示。调用关系上,交互层只调用参数管理层和结果处理层的API;仿真执行层只读取参数快照、写入任务状态;结果处理层只读取求解器输出和任务元数据。这样,求解器替换、界面改版、结果指标扩展都不会互相牵连。

参数化仿真自动化平台四层架构与数据流 用户交互层 参数录入表单 任务看板 收敛曲线视图 报告导出 职责:参数录入、任务提交、进度查看、结果可视化;不直接调用求解器 参数管理层(单一数据源) 参数定义与校验 参数集版本 参数快照生成 变更历史 职责:维护参数定义、单位、范围、版本与快照;输出不可变 snapshot_id 仿真执行层 任务编排 求解器适配 资源调度 状态监控 职责:读取参数快照,生成求解输入,调度执行并回传 queued/running/succeeded/failed 结果处理层 结果解析 指标提取 多方案对比 结果归档 职责:解析求解输出,提取最大应力/位移/频率等指标,写入结果库供展示 参数提交 / 校验请求 snapshot_id + 参数快照 结果文件 + 任务元数据 结果指标回传展示 依赖方向:上层 → 下层;下层不感知上层界面。求解器替换只影响仿真执行层,界面改版只影响用户交互层。

模块划分与接口约定

为了让分层真正落地,需要把每层拆成可独立测试的模块,并约定接口。参数管理层对外暴露 POST /params/validate、POST /params/snapshot、GET /params/{id}/history;仿真执行层暴露 POST /jobs、GET /jobs/{id}/status;结果处理层暴露 GET /results/{jobId}/metrics、POST /results/compare。接口以JSON为载荷,参数快照一旦生成即不可修改,保证同一 snapshot_id 在任何时间重跑都能得到可复现的输入。

边界判断口诀:参数只进参数管理层,求解只进仿真执行层,指标只进结果处理层,展示只进用户交互层。任何跨层直连都应视为架构违规。

一个可执行的参数快照示例

假设某支架静力分析需要三个参数,参数管理层生成的快照可表示为:

{
  "snapshot_id": "snap-20240612-003",
  "version": "v3",
  "params": {
    "plate_thickness": {"value": 2.5, "unit": "mm", "range": [1.0, 5.0]},
    "youngs_modulus":  {"value": 210000, "unit": "MPa", "range": [190000, 220000]},
    "load":            {"value": 1200, "unit": "N", "range": [500, 2000]}
  },
  "model_ref": "bracket_v2.cdb",
  "created_by": "engineer_a"
}

仿真执行层读取该快照后,由求解器适配模块把 plate_thickness 写入几何参数、把 youngs_modulus 写入材料卡片、把 load 写入载荷步,生成求解输入并提交。任务状态从 queued 变为 running,求解完成后变为 succeeded,同时把结果文件路径写回任务记录。结果处理层解析该文件,提取 max_stress=186.4 MPa、max_displacement=0.82 mm,写入结果库。用户交互层读取指标后,可判断最大应力是否低于材料许用应力,从而决定是否调整 plate_thickness 进入下一轮。

调用关系中的关键约束

  • 禁止跨层直连:用户交互层不得直接调用求解器命令,也不得直接读取结果文件。
  • 快照不可变:参数管理层生成快照后,任何修改都产生新版本,保证可追溯。
  • 状态单一来源:任务状态只由仿真执行层维护,其他层只读。
  • 结果只增不改:结果处理层写入的指标记录不允许覆盖,只能追加新版本。

按上述分层与调用关系实现后,平台可以在不改变用户界面的前提下替换求解器,也可以在不影响求解流程的前提下扩展结果指标。这种“职责清晰、依赖单向”的架构,是后续参数扫描、优化迭代和自动化报告能够稳定运行的基础。