1 Star 0 Fork 0

吉祥水 / mulphys

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Mulphys

功能定位

Mulphys的基本定位是多物理场技术的工程软件。

  • 多物理场问题的发生位置——物理场的交界面。
    • 多物理场的耦合很多情况下都发生在物理场的界面上,因而重点强化了几何表面上场的处理。
  • 多物理场问题的数据来源(DataSource)
    • 基于几何直接求解
      • 高超声速压力场
      • 流线积分热流场
      • 基于射线模型的方向场等
    • 基于偏微分方程的导出解且适用于联合求解
      • CFD求解结果(Fastran、CFD++)
      • 有限元求解的表面位移场(PalmCrash)
      • 电磁分析后表面电流分布(CST)

应用场景

多物理场有如下典型的使用场景:

  • 对于飞行器整体分析,可以融合的流固热燃控红外电磁等多学科耦合仿真
  • 外部流场解的融合应用,将现有的多学科物理场的求解结果提取出来后,在界面上进行耦合分析
  • 将耦合后的应用用于仿真对象的实时与准实时求解
  • 与内部和外部的控制器的支持

几何工具支持

  • (Rebuilder)原始CAD几何的逆向与网格重构、包面功能(将外部多种输入归一化为单一的可以调节几何表面稠密度的几何,为后面网格稀疏化做准备)
  • (Coarsener)网格稀疏化(提升实时解算速度,需要进行网格稀疏化无关性验证)
  • (Mapper)同源网格映射(同源网格物理场的映射功能、单一几何分离成多个几何后物理场的继承获取功能)
    • 飞行器在高空分离后,A=>B+C,B和C都是A的子集,B和C都会通过映射获取A的物理场的解
    • 气动热流线积分求解时,流线和表面几何网格是两个不同的几何场,此时二者需要进行网格映射

模型界定和场处理器

  1. 具有多个同源的几何场,可以有多个相互之间可以实现同源网格映射的几何场(Mapper),可以发生变形,但是不能分裂。区分多个物理场的情况往往是因为问题涉及了多物理场耦合问题,多个物理场可以共享几何也可以分别保存于同源异构的几何上,重要的示例如下:
    • 表面物理场和流线积分场之间是同源的几何场,二者之间存在数据映射
    • 流固耦合物理场而言,流体场和结构场之间可以有两种处理方式,1. 存储在同一个几何上实现共享几何的物理场映射,2. 存储在同源异构几何上通过插值实现几何场映射;
  2. 几何场上的最小处理单元是几何片段,场处理器可以处理一个、几个几何片段(例如舵面偏动)和全部的几何片段,所以场处理器运行前配置中主要指定片段索引,未指定则会处理全部几何片段。在处理局部几何片段前,物理场应该已经存在,例如几何法线场处理器会在几何舵面偏动后计算,但几何法线场在最开始就已经存在。
  3. 场处理器可以接受多个几何场,同时可以更新多个几何场(append、generate、participate),为了实现求解依序进行,场处理器之间需要进行流水线编排(Processor Composer),然后将场处理器形成的依赖有向无环图(Dependency DAG)线性化形成可以直接运行的流水线
  4. 一个场编排器构成一个模型的内核,形成模型动力学运行的基本函数,此函数会被用作积分器,求解得到模型的演化动力学,Model=ProcessorComposser+Integrator
  5. 场处理器和共识变量在下面着重说明其设计思想

场处理器和共识变量

  1. 在多场耦合求解器中,物理量的耦合发生在场处理器针对不同的变量求解的过程中的,场处理器是通过插件形式解耦开发的,让各个场处理器协作的物理量可以互相复用,必须要通过关键词的方式实现,而物理量的名称则不重要,重要的是物理量所要表达的物理含义才最重要。
  2. 那么如何在各个场处理器的开发中实现物理量的统一操作呢?mulphys通过让所有物理量在名称上采用共识变量(consensus)的方式实现——场处理器中互通的物理量都遵循统一的命名标准。
  3. 所有的场处理器的共识变量都需要在场处理器的配置文件中设定
    • 场处理器所依赖的变量(dependents描述为[processor名]:[import名])
    • 将要操作的变量(states、inputs、outputs)都可以直接写成([consensus名])
    • 共识变量包括有如下几类:常用几何量(e.g. vertices、vocc、faces、neighbors等)、常用物理量(e.g. pressure, temperature, alpha, beta, vinf, vmag等)、基本输入输出习惯变量(以x、y、z开头的变量,e.g. x, y, z, x0, xi, xn, y0, yi, yn, z0, zi, zn, ...)
  4. 共识变量大大降低了场编排器的配置过程,因为使用了共识变量,所以可以在场编排器的配置文件中制定这些参数的初始值,而不必复杂的指定所有相关场求解器的初始值等参数

共识变量的生成计划有多种途径,但在最初mulphys版本中最开始的共识变量是手动生成的。新增一个processor的时候,就需要在consensus.json文件中增加一个共识变量。共识变量表示意如下:

{
    "geometry-consensuses" : [
        {
            "name" : "vertices",
            "type" : "mat",
            "location" : "vertex-mapped",
            "description" : "几何坐标点坐标矩阵"
        },
        {
            "name" : "faces",
            "type" : "imat",
            "location" : "face-mapped",
            "description" : "几何坐标点坐标矩阵"
        },
        {
            "name" : "vocc",
            "type" : "uvec",
            "location" : "vertex-mapped",
            "description" : "几何坐标点出现过在哪些单元中"
        },
        {
            "name" : "neighbors",
            "type" : "ivec",
            "location" : "face-mapped",
            "description" : "周边邻接单元索引"
        },
    ],
    "processor-consensuses" : [
        {
            "name" : "var0",
            "type" : "vec",
            "location" : "vertex-mapped",
            "description" : "var0 dummy description",
            "producers" : ["foo1", "foo2"] // 这里表示processor foo1 foo2 生成了var0这个共识变量
        },
        {
          "name": "X",
          "children": [
            "vmag",
            "alpha",
            "beta",
            "p",
            "q",
            "r",
            "phi",
            "theta",
            "psi",
            "xg",
            "yg",
            "H"
          ],
          "type": "vec",
          "location": "reduced",
          "description": "飞行器状态向量",
          "producers": [] // 留空表示没有其他场处理器生成此变量
        },
        {
            "name" : "alpha",
            "type" : "reduced",
            "description" : "飞行器攻角(rad)",
            "producers" : []
        },
        ...
    ]
}

上述列表是在场处理器运行时生成的,场处理器配置文件举例如下:

{
    "configurations" : {
        "config" : {},
        "config_schema" : {}
    },
    "dependents" : [
        "proc1", "proc2", ...
    ],
    "states" : ["X"],
    "inputs" : ["gamma1", "gamma2"]
}

注意outputs在场处理器的配置文件中不用配置。如果需要则配置states和inputs。

先从单流水线举例说明生成步骤如下:

  1. 初始场处理器proc0
  2. proc0根据dependents描述的依赖共识变量和场处理器获得处理器链procChain
  3. 根据扩展场处理器procEx,合并到procChain,形成更新的场处理器链
  4. 寻找procChain依赖链条的起始端(单流水线只有一个起始端)
  5. 初始化几何场
  6. 从起始端开始,将几何场赋值给procChain中所有的场处理器
  7. 顺次执行场处理器,根据场编排器指定的状态x和dxdt形成微分方程
  8. 根据设定求解(或者不求解就仅仅是计算)常微分方程

多流水线举例说明生成步骤如下:

  1. 初始场处理器proc0,proc1,proc2,.... (proci)
  2. proci根据dependents描述的依赖共识变量和场处理器获得处理器链procChaini
  3. 根据扩展场处理器procEx,合并到procChaini,形成更新的场处理器链
  4. 编排多条流水线之间的依赖关系
  5. 再次更新形成处理器链(这里会影响算法,本质上处理器链演化为了多个起始端的有向无环图)
  6. 寻找所有procChaini依赖链条的起始端(多流水线有多个起始端,注意起始端数量可能小于流水线数量,因为有的流水线会生成几何)
  7. 初始化与起始端数量相同的几何场,使用这些对应的几何场提交给这些起始端
  8. 从起始端开始,将几何场赋值给procChain中所有的场处理器
  9. 顺次执行场处理器,根据场编排器指定的状态x和dxdt形成微分方程
  10. 根据设定求解(或者不求解就仅仅是计算)常微分方程

模型功能特性

  1. 几何场GeometricalField(下称gf)和处理流水线(processor、dynamics、model)是独立存在的,模型的流水线可以配置好后,注入gf
  2. gf包含了仿真过程中的所有信息,gf可以随时启停,持久化后还可以继续进行仿真试验
  3. 模型的服务模式:脚本模式(Script-Driven)、交互模式(Interaction-Driver)
  4. 多模型独立运行且模型之间使用(同源网格映射器Mapper实施)物理场映射
    1. 多分辨率的模型,需要定义状态映射Mapper、分阶段仿真过程中状态交换

数据源与场处理器特性

  1. (DataSource)数据源适配多种数据库,根据数据库读写效率提供不同支持
  2. (DataPoint)数据点适配多种物理解用于高维空间点插值
  3. (DataCoordinate)数据坐标与数据点进行映射
  4. (DataInterpolator)数据插值器

代码模型

运行几何读取

主体 输入1 输入2 输出 动作
reader reader名称字符串 各种类型几何文件所在路径 mulphys的Json格式几何文件 read
cgns /path/to/xxxx.cgns xxx.geom.mphs
  • 实例:

    reader r = new reader("cgns")
    geometry g = r.read("/path/to/xxxx.cgns")

运行几何转换写出(writer)

运行求解器(solver)

processes

  • file -> reader -> geometry
  • geometry -> writer -> file
  • geometry [, field, environment] -> solver -> field
  • field (init) -> dynamics -> field

runner

  • model(dynamics1[,dynmiacs2...]) + reporter
  • batch + model(dynamics1[,dynmiacs2...]) + reporter
  • controller + model(dynamics1[,dynmiacs2...]) + reporter

simulation

  • runner1 -> runner2 -> ... ->runnerN
  • scheduler

!!!!!!!!

场的处理直接使用armadillo实现,所有元素直接作为mat出现,mat可以转换为scalar和vector

!!!!!!!!

  1. 以上每一个对象都需要dump出来,查看其中的详细信息, mulphys dump
  2. solver不关心变量名称,只关心(1)场变量类型和输入顺序、(2)转换方式是格心格点插值积分、(3)输入输出几何
  3. 不考虑边值问题,只考虑初值问题

!!!!!!!!

务必注意分区求解物理场,solver需要接受物理场进行进一步处理

!!!!!!!!

路线图和基本需求

  1. 构建内核库,重建resource继承树和geometry类型
  2. 实现reader,通过reader读取file生成geometry类型,此类型是可以共享的
  3. 代码驱动的配置,全新的Panax语言
  4. 支持插件扩展各种组件
  5. 支持命令驱动的打包并形成可直接驱动的模型包,代码只提取需要的模型和插件模块进行运行
  6. 支持多种几何文件的读取并形成统一的基于Json的数据文件,作为统一的数据交换格式,几何格式要开放,可以被其他工具方便使用
  7. Json Schema解析处理使用rapidJson,Json本身的处理使用Qt框架
  8. 各种组件存在依存关系,模块之间可以作为其他模块的初始化组成部分

命令行

  • mphs read foo.txt (根据后缀名决定读取器,如果有多个对应则提示用户显式制定读取器) 输出bar.pnxf文件
  • mphs write bar.pnxf foo.plt
  • mphs run foo.pnx (执行panax文件)
  • mphs describe component_foo (输出component_foo组件的详细信息)
  • mphs version
  • mphs help
  • mphs package (打包panax为一个独立的可执行包)

空文件

简介

modeling and simulation platform for geometrical field based demonstrations 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/jixiangshui/mulphys.git
git@gitee.com:jixiangshui/mulphys.git
jixiangshui
mulphys
mulphys
master

搜索帮助