多物理場(chǎng)耦合流程控制模塊開(kāi)發(fā)技術(shù)介紹
更新時(shí)間:2019-08-15 發(fā)布人:?;萍?/em>
在多物理場(chǎng)耦合開(kāi)發(fā)過(guò)程中如何實(shí)現(xiàn)多物理場(chǎng)耦合流程控制模塊的開(kāi)發(fā),根據(jù)?;萍级辔锢韴?chǎng)耦合開(kāi)發(fā)軟件-MISM經(jīng)驗(yàn),以5個(gè)物理場(chǎng)耦合為例:
建立5個(gè)物理場(chǎng)的耦合,以及3層嵌套耦合,流程中數(shù)據(jù)交換發(fā)生在時(shí)間步開(kāi)始處、時(shí)間步結(jié)束處、外迭代之前或之后,用戶(hù)定義的時(shí)間或位置。耦合流程(也稱(chēng)為耦合算法或數(shù)據(jù)交換時(shí)序)解決了數(shù)據(jù)何時(shí)交換的問(wèn)題,即數(shù)據(jù)在什么時(shí)刻從一個(gè)仿真程序中傳遞到另一個(gè)仿真程序中。仿真程序之間耦合計(jì)算時(shí)可以采用的數(shù)據(jù)交換時(shí)序主要取決于問(wèn)題類(lèi)型和仿真程序自身的支持。耦合程序可支持Linux平臺(tái)。
在仿真程序的計(jì)算過(guò)程中,數(shù)據(jù)交換可以發(fā)生在不同的狀態(tài)下:
在時(shí)間步的開(kāi)始處,即在時(shí)間步內(nèi)迭代之前;
在時(shí)間步的結(jié)束處,即在時(shí)間步內(nèi)迭代之后;
在迭代之前或者之后;
在用戶(hù)直接調(diào)用相關(guān)命令時(shí)。
大多數(shù)仿真程序只支持在時(shí)間步的開(kāi)始或者結(jié)束處進(jìn)行數(shù)據(jù)交換,不支持在迭代過(guò)程中進(jìn)行數(shù)據(jù)交換。通過(guò)直接調(diào)用相關(guān)命令進(jìn)行數(shù)據(jù)交換的方式基本上只用于穩(wěn)態(tài)計(jì)算。
根據(jù)數(shù)據(jù)交換的不同,耦合計(jì)算過(guò)程可以分為2個(gè)階段:初始數(shù)據(jù)交換階段和解數(shù)據(jù)交換階段。初始數(shù)據(jù)交換階段是指從耦合計(jì)算開(kāi)始到完成一次完整的數(shù)據(jù)交換的過(guò)程。在執(zhí)行耦合計(jì)算之前,需要確定初始數(shù)據(jù)交換階段的數(shù)據(jù)交換時(shí)序。解數(shù)據(jù)交換階段是指初始數(shù)據(jù)交換階段之后的耦合計(jì)算過(guò)程。
對(duì)于穩(wěn)態(tài)問(wèn)題來(lái)說(shuō),由于只存在一個(gè)解,因此數(shù)據(jù)交換時(shí)序?qū)︸詈嫌?jì)算結(jié)果的影響不大。對(duì)于瞬態(tài)問(wèn)題來(lái)說(shuō),由于初始狀態(tài)決定了解,因此初始數(shù)據(jù)交換階段的數(shù)據(jù)交換時(shí)序?qū)︸詈嫌?jì)算結(jié)果的影響很大。為了得到符合物理實(shí)際的解,在初始數(shù)據(jù)交換階段需要選擇合適的數(shù)據(jù)交換時(shí)序。
在反應(yīng)堆多物理耦合框架中,用戶(hù)通過(guò)選擇耦合程序的初始數(shù)據(jù)交換模式來(lái)確定數(shù)據(jù)交換時(shí)序。初始數(shù)據(jù)交換模式提供了“send”、“receive”、“exchange”和“skip”四個(gè)選項(xiàng),其含義如所示。根據(jù)初始數(shù)據(jù)交換模式的不同,耦合程序之間存在多種數(shù)據(jù)交換時(shí)序。值得注意的是,并不是每一種數(shù)據(jù)交換時(shí)序都是可行的。在初始數(shù)據(jù)交換階段,耦合程序之間按照選定的初始數(shù)據(jù)交換模式來(lái)進(jìn)行數(shù)據(jù)交換;在解數(shù)據(jù)交換階段,耦合程序之間繼續(xù)進(jìn)行數(shù)據(jù)交換直至耦合計(jì)算結(jié)束。
序號(hào) |
初始數(shù)據(jù)交換模式 |
含義 |
1 |
send |
傳送數(shù)據(jù) |
2 |
receive |
接收數(shù)據(jù) |
3 |
exchange |
傳送數(shù)據(jù)和接收數(shù)據(jù) |
4 |
skip |
忽略 |
反應(yīng)堆多物理耦合框架支持的初始數(shù)據(jù)交換模式列表
1)?穩(wěn)態(tài)問(wèn)題
穩(wěn)態(tài)問(wèn)題的耦合計(jì)算一般是通過(guò)執(zhí)行數(shù)據(jù)傳遞命令來(lái)完成數(shù)據(jù)交換的。對(duì)耦合程序來(lái)說(shuō),數(shù)據(jù)交換可以發(fā)生在迭代計(jì)算之前或者之后,支持建立串行耦合流程和并行耦合流程。
串行耦合:參與耦合的子程序交替計(jì)算,如子程序 A 計(jì)算結(jié)束后傳遞數(shù)據(jù)給子程序 B,B 收到數(shù)據(jù)后開(kāi)始計(jì)算,并在計(jì)算結(jié)束后返回?cái)?shù)據(jù)給子程序 A;
并行耦合:參與耦合的子程序并行計(jì)算,如子程序 A 和 B 在不同的進(jìn)程/線程分別計(jì)算,然后在迭代步進(jìn)行數(shù)據(jù)交換。
2)?瞬態(tài)問(wèn)題
瞬態(tài)問(wèn)題耦合計(jì)算的數(shù)據(jù)交換時(shí)序的描述和穩(wěn)態(tài)問(wèn)題的相似,但是需要考慮時(shí)間同步問(wèn)題,需要支持串行耦合、并行耦合、支持建立同時(shí)間步內(nèi)的流程控制、支持建立時(shí)間步交錯(cuò)的流程控制;對(duì)于時(shí)間步長(zhǎng)不一致情況,需要支持自適應(yīng)時(shí)間步長(zhǎng)或者時(shí)間步長(zhǎng)插值;支持最多3層嵌套耦合。
對(duì)于瞬態(tài)問(wèn)題,仿真程序之間的時(shí)間同步方法有:
仿真程序都使用相同的固定時(shí)間步長(zhǎng);
仿真程序通過(guò)時(shí)間步交換使用自適應(yīng)時(shí)間步長(zhǎng);
仿真程序使用各自的時(shí)間步長(zhǎng)。
a)?時(shí)間步長(zhǎng)交換
除了固定時(shí)間步長(zhǎng)外,還可以使用自適應(yīng)時(shí)間步長(zhǎng)。在自適應(yīng)時(shí)間步長(zhǎng)情況下,時(shí)間步長(zhǎng)由一個(gè)仿真程序決定并作為耦合參數(shù)被傳遞給另一個(gè)仿真程序。
b)?時(shí)間步長(zhǎng)不匹配
異步耦合問(wèn)題中仿真程序采用不同的時(shí)間步長(zhǎng)。為了達(dá)到時(shí)間同步,仿真程序之間交換的耦合參數(shù)需要由不同的時(shí)間步之間插值得到。
下圖描述了一種典型的瞬態(tài)問(wèn)題耦合計(jì)算的數(shù)據(jù)交換時(shí)序:程序1和程序2的初始數(shù)據(jù)交換模式分別為send和receive,程序1和程序2的數(shù)據(jù)交換都發(fā)生在迭代計(jì)算之前。在這種數(shù)據(jù)交換時(shí)序下,程序1和程序2的時(shí)間同步比較容易,只需要將兩者的時(shí)間起點(diǎn)和時(shí)間步長(zhǎng)設(shè)置為相同就可以了,程序1和程序2的計(jì)算都是并行的。
圖 數(shù)據(jù)交換時(shí)序:程序1和程序2的初始數(shù)據(jù)交換模式分別為send和receive,程序1和程序2的數(shù)據(jù)交換都發(fā)生在迭代計(jì)算之前。
基于上述流程,對(duì)于時(shí)間同步的瞬態(tài)耦合基本沒(méi)有什么問(wèn)題。而當(dāng)時(shí)間步長(zhǎng)不同步時(shí),則在這種情況下,程序1和程序2的時(shí)間同步可以將程序1的第一個(gè)時(shí)間步當(dāng)成是假時(shí)間步。
3)?混合類(lèi)型問(wèn)題:子循環(huán)情況
瞬態(tài)情況下流體的特征時(shí)間尺度遠(yuǎn)小于固體的,因此流體和固體耦合計(jì)算時(shí)可能不存在時(shí)間步長(zhǎng)不匹配問(wèn)題。當(dāng)采用流體的特征時(shí)間尺度來(lái)設(shè)置耦合計(jì)算的時(shí)間步長(zhǎng)時(shí),時(shí)間步長(zhǎng)對(duì)于固體來(lái)說(shuō)太小,浪費(fèi)了計(jì)算資源;當(dāng)采用固體的特征時(shí)間尺度來(lái)設(shè)置耦合計(jì)算的時(shí)間步長(zhǎng)時(shí),時(shí)間步長(zhǎng)對(duì)于流體來(lái)說(shuō)太大,會(huì)導(dǎo)致計(jì)算出現(xiàn)問(wèn)題。對(duì)于這類(lèi)問(wèn)題,可以采用固體的特征時(shí)間尺度來(lái)設(shè)置耦合計(jì)算的時(shí)間步長(zhǎng),并在流體計(jì)算的時(shí)間步中加入子循環(huán),即在流體程序內(nèi)部將耦合計(jì)算時(shí)間步分成多個(gè)更小的時(shí)間步。