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