Ansys Fluent: 動的に境界条件を変更する
非定常シミュレーションにおいては、動的に境界条件、境界のタイプを変更したいことがあるかと思います。例えば圧力スイング法は、1. 加圧、2. 吸着、3. 減圧の3ステップに別れており、吸着シミュレーションを行いたいのであれば、下記のように時間が進むにつれて境界条件を切り替える必要があります。
1. 0〜10秒まで:入口(入口圧力境界)、出口(壁境界)
2. 10-30秒まで:入口(入口速度境界)、出口(出口圧力境界)
3. 30-50秒まで:入口( 出口圧力境界)、出口(壁境界)
手動で切り替えることも可能ですが、循環定常状態(CSD)に至るまで、いちいち手動で切り替えてられません。面倒ですし、タイプミスで間違った設定をしかねません。スクリプトを組んで、設定時間になれば自動的に境界条件が切り替わるようにしたいところです。スクリプト、設定方法が漸くわかりましたので記事化したいと思います。
スクリプトの作成
動的に境界条件を変更するためのスクリプトは、LISPの方言の一つSchemeで記載します。LISPの一つですので、やたらと括弧が多い言語です。字下げは自由なので、見やすいよう好きに整形すればよいです。コード中の日本語の注釈は消したうえでご利用ください
define (changeboundary)
(define time-set #(0 10 30)) ;切り替えタイミング(秒)
(define type-set #(1 2 3)) ;切り替えパターン
(define flag 0)
(define bctype 0)
(define flowtime (rpgetvar 'flow-time)) ; フロータイムを取得
(define dt (rpgetvar 'physical-time-step)) ; 時間ステップを取得
(set! flag 0)
(set! bctype 0)
(do ((i 0 (+ i 1))) ; i=0から1ずつ増分
((= i (vector-length time-set))) ; time-setの配列の大きさに至るまでdo loop
;設定時間- dt/2 < flowtime < 設定時間+dt/2ならばTrue
(if (<= (- (vector-ref time-set i) (* 0.5 dt)) flowtime (- (vector-ref time-set i) (* 0.5 dt)))
(set! bctype (vector-ref type-set i)) ; Trueの場合
(set! flag 1) ; Falseの場合
)
)
(cond
; bctype=1なら下記を実行。複数行のコマンドを入力したい場合はbeginから始める
((= bctype 1)
(begin
(ti-menu-load-string "define boundary zone-type 3 pressure-inlet")
(ti-menu-load-string "define boundary zone-type 5 wall")
(set! flag 2)
))
; bctype=2なら下記を実行。
((= bctype 2)
(begin
(ti-menu-load-string "define boundary zone-type 3 velocity-inlet")
(ti-menu-load-string "define boundary zone-type 5 pressure-outlet")
(set! flag 2)
))
; bctype=3なら下記を実行。
((= bctype 3)
(begin
(ti-menu-load-string "define boundary zone-type 3 pressure-outlet")
(ti-menu-load-string "define boundary zone-type 5 wall")
(set! flag 2)
))
)
スクリプトの適用
Ansys fluentのファイル>読み込み>Schemeを選択して、上のスクリプトを読み込みます。スクリプトに文法的な間違いがあればこの時点でエラーがでます。問題なく読み込めたならば、解析>作業>作成>コマンドを実行を選択してください。その後、新規を選択して新しいコマンドを作成します。入力内容は以下のとおりです。
これで、1step毎に(change boundary)が実行され、設定の秒数に達していれば境界条件が動的に変更されます。