1.稳态问题
稳态问题的耦合计算一般是通过执行数据传递命令来完成数据交换的。对耦合程序来说,数据交换可以发生在迭代计算之前或者之后,支持建立串行耦合流程和并行耦合流程。
串行耦合:参与耦合的子程序交替计算,如子程序 A 计算结束后传递数据给子程序 B,B 收到数据后开始计算,并在计算结束后返回数据给子程序 A;
并行耦合:参与耦合的子程序并行计算,如子程序 A 和 B 在不同的进程/线程分别计算,然后在迭代步进行数据交换。
2. 瞬态问题
瞬态问题耦合计算的数据交换时序的描述和稳态问题的相似,但是需要考虑时间同步问题,需要支持串行耦合、并行耦合、支持建立同时间步内的流程控制、支持建立时间步交错的流程控制;对于时间步长不一致情况,需要支持自适应时间步长或者时间步长插值;支持最多3层嵌套耦合。
对于瞬态问题,仿真程序之间的时间同步方法有:
仿真程序都使用相同的固定时间步长;
仿真程序通过时间步交换使用自适应时间步长;
仿真程序使用各自的时间步长。
a) 时间步长交换
除了固定时间步长外,还可以使用自适应时间步长。在自适应时间步长情况下,时间步长由一个仿真程序决定并作为耦合参数被传递给另一个仿真程序。
b) 时间步长不匹配
异步耦合问题中仿真程序采用不同的时间步长。为了达到时间同步,仿真程序之间交换的耦合参数需要由不同的时间步之间插值得到。
下图描述了一种典型的瞬态问题耦合计算的数据交换时序:程序1和程序2的初始数据交换模式分别为send和receive,程序1和程序2的数据交换都发生在迭代计算之前。在这种数据交换时序下,程序1和程序2的时间同步比较容易,只需要将两者的时间起点和时间步长设置为相同就可以了,程序1和程序2的计算都是并行的。
图 数据交换时序:程序1和程序2的初始数据交换模式分别为send和receive,程序1和程序2的数据交换都发生在迭代计算之前。
基于上述流程,对于时间同步的瞬态耦合基本没有什么问题。而当时间步长不同步时,则在这种情况下,程序1和程序2的时间同步可以将程序1的第一个时间步当成是假时间步。
3. 混合类型问题:子循环情况
瞬态情况下流体的特征时间尺度远小于固体的,因此流体和固体耦合计算时可能不存在时间步长不匹配问题。当采用流体的特征时间尺度来设置耦合计算的时间步长时,时间步长对于固体来说太小,浪费了计算资源;当采用固体的特征时间尺度来设置耦合计算的时间步长时,时间步长对于流体来说太大,会导致计算出现问题。对于这类问题,可以采用固体的特征时间尺度来设置耦合计算的时间步长,并在流体计算的时间步中加入子循环,即在流体程序内部将耦合计算时间步分成多个更小的时间步。
|