汽车工业 能源动力 石油化工 电机电器

多物理场耦合流程控制模块开发技术介绍

更新时间:2019-08-15 发布人:海基科技


在多物理场耦合开发过程中如何实现多物理场耦合流程控制模块的开发,根据海基科技多物理场耦合开发软件-MISM经验,以5个物理场耦合为例:

建立5个物理场的耦合,以及3层嵌套耦合,流程中数据交换发生在时间步开始处、时间步结束处、外迭代之前或之后,用户定义的时间或位置。耦合流程(也称为耦合算法或数据交换时序)解决了数据何时交换的问题,即数据在什么时刻从一个仿真程序中传递到另一个仿真程序中。仿真程序之间耦合计算时可以采用的数据交换时序主要取决于问题类型和仿真程序自身的支持。耦合程序可支持Linux平台。

在仿真程序的计算过程中,数据交换可以发生在不同的状态下:

在时间步的开始处,即在时间步内迭代之前;

在时间步的结束处,即在时间步内迭代之后;

在迭代之前或者之后;

在用户直接调用相关命令时。

大多数仿真程序只支持在时间步的开始或者结束处进行数据交换,不支持在迭代过程中进行数据交换。通过直接调用相关命令进行数据交换的方式基本上只用于稳态计算。

根据数据交换的不同,耦合计算过程可以分为2个阶段:初始数据交换阶段和解数据交换阶段。初始数据交换阶段是指从耦合计算开始到完成一次完整的数据交换的过程。在执行耦合计算之前,需要确定初始数据交换阶段的数据交换时序。解数据交换阶段是指初始数据交换阶段之后的耦合计算过程。

对于稳态问题来说,由于只存在一个解,因此数据交换时序对耦合计算结果的影响不大。对于瞬态问题来说,由于初始状态决定了解,因此初始数据交换阶段的数据交换时序对耦合计算结果的影响很大。为了得到符合物理实际的解,在初始数据交换阶段需要选择合适的数据交换时序。

在反应堆多物理耦合框架中,用户通过选择耦合程序的初始数据交换模式来确定数据交换时序。初始数据交换模式提供了send”、“receive”、“exchange”和“skip”四个选项,其含义如所示。根据初始数据交换模式的不同,耦合程序之间存在多种数据交换时序。值得注意的是,并不是每一种数据交换时序都是可行的。在初始数据交换阶段,耦合程序之间按照选定的初始数据交换模式来进行数据交换;在解数据交换阶段,耦合程序之间继续进行数据交换直至耦合计算结束。

序号

初始数据交换模式

含义

1

send

传送数据

2

receive

接收数据

3

exchange

传送数据和接收数据

4

skip

忽略

反应堆多物理耦合框架支持的初始数据交换模式列表

1) 稳态问题

稳态问题的耦合计算一般是通过执行数据传递命令来完成数据交换的。对耦合程序来说,数据交换可以发生在迭代计算之前或者之后,支持建立串行耦合流程和并行耦合流程。

串行耦合:参与耦合的子程序交替计算,如子程序 A 计算结束后传递数据给子程序 B,B 收到数据后开始计算,并在计算结束后返回数据给子程序 A;

并行耦合:参与耦合的子程序并行计算,如子程序 A 和 B 在不同的进程/线程分别计算,然后在迭代步进行数据交换。

2) 瞬态问题

瞬态问题耦合计算的数据交换时序的描述和稳态问题的相似,但是需要考虑时间同步问题,需要支持串行耦合、并行耦合、支持建立同时间步内的流程控制、支持建立时间步交错的流程控制;对于时间步长不一致情况,需要支持自适应时间步长或者时间步长插值;支持最多3层嵌套耦合。

对于瞬态问题,仿真程序之间的时间同步方法有:

仿真程序都使用相同的固定时间步长;

仿真程序通过时间步交换使用自适应时间步长;

仿真程序使用各自的时间步长。

a) 时间步长交换

除了固定时间步长外,还可以使用自适应时间步长。在自适应时间步长情况下,时间步长由一个仿真程序决定并作为耦合参数被传递给另一个仿真程序。

b) 时间步长不匹配

异步耦合问题中仿真程序采用不同的时间步长。为了达到时间同步,仿真程序之间交换的耦合参数需要由不同的时间步之间插值得到。

下图描述了一种典型的瞬态问题耦合计算的数据交换时序:程序1和程序2的初始数据交换模式分别为sendreceive,程序1和程序2的数据交换都发生在迭代计算之前。在这种数据交换时序下,程序1和程序2的时间同步比较容易,只需要将两者的时间起点和时间步长设置为相同就可以了,程序1和程序2的计算都是并行的。

数据交换时序:程序1和程序2的初始数据交换模式分别为sendreceive,程序1和程序2的数据交换都发生在迭代计算之前。

基于上述流程,对于时间同步的瞬态耦合基本没有什么问题。而当时间步长不同步时,则在这种情况下,程序1和程序2的时间同步可以将程序1的第一个时间步当成是假时间步。

3) 混合类型问题:子循环情况

瞬态情况下流体的特征时间尺度远小于固体的,因此流体和固体耦合计算时可能不存在时间步长不匹配问题。当采用流体的特征时间尺度来设置耦合计算的时间步长时,时间步长对于固体来说太小,浪费了计算资源;当采用固体的特征时间尺度来设置耦合计算的时间步长时,时间步长对于流体来说太大,会导致计算出现问题。对于这类问题,可以采用固体的特征时间尺度来设置耦合计算的时间步长,并在流体计算的时间步中加入子循环,即在流体程序内部将耦合计算时间步分成多个更小的时间步。