JavaScript is not enabled on browser.
更新履歴
Ver.1.61.2 ・?testcase=27.6||27.7追加
・?testcase link-maze-mid/-bigを追加表示
Ver.1.60.2 ・testcaseを更新(pivot選択の処理順の修正でretry機能の問題を解消)
Ver.1.59.2 ・?testcase=-26.1||-26.2追加
・?testcase link-magnet-SS"/-SS"'を追加表示
Ver.1.58.2 ・?testcase=12.1||12.2||12.3追加
・?testcase link-cavity+backstep/outlet-asym/-sym/-oneを追加表示
Ver.1.57.2 ・Ver.1.56.2の最適化
Ver.1.56.2 ・解がNaNの場合、retry機能を追加(Newton法同様)
 連立方程式の列挙順序:昇順 ⇒ Fisher-Yates shuffle
・?testcase=27.1||27.2||27.3||27.4||27.5追加
・?testcase link-maze-complex/-multi/-long/-hard/-softを追加表示
・tableを更新(流れ場を記述する方程式)
Ver.1.55.2 ・plot2dの内部関数名の変更に伴う更新
・testcaseを更新
Ver.1.54.2 ・tableを更新(流れ場を記述する方程式)
Ver.1.53.2 ・plot-dataの選択肢を追加
・testcaseを更新
Ver.1.52.2 ・Ver.1.41.0の再修正(plot用のpmin/pmaxの初期化の不具合を修正)
 既知要素のp値を変更:0 ⇒ 空欄(未知要素を除く)
Ver.1.52.1 ・tableを更新(流れ場を記述する方程式)
Ver.1.51.1 marker-colorsの更新に対応
・plot用canvasのORIGIN{}を更新(Graphing Calculatorに準拠)
Ver.1.50.1 ・Ver.1.49.1のspec追記を取消し([manual]Calculatorに内容を移植)
Ver.1.49.1 ・spec追記
Ver.1.48.1 ・?testcase=-11追加
・?testcase link-backstep-high_Reを追加表示
Ver.1.47.1 ・spec訂正
Ver.1.46.1 ・?testcase link-mazeを追加表示
・spec追記
Ver.1.45.1 ・pen描画の機能不全(約1week)を解消
 pen.js@Ver.6.389.267.19.103の実装上、input-Δframeが必須
 pen.jsの二重対策:options.dfのlimiterを追加
Ver.1.45.0 ・?testcase=34追加
Ver.1.44.0 ・?testcase=31追加(old 31~32 ⇒ 32~33)
・?testcase=29||30更新(Re=500 ⇒ 1e-3)
Ver.1.43.0 ・?testcase=-22||-23||-24||-25||-26追加(old -24 ⇒ -22)
Ver.1.42.0 ・?testcase=-7||-24||-27追加
Ver.1.41.0 ・上段csv出力の仕様修正(行と列を転置)
 各軸を明示してcanvas表示通りに出力:u||v||p(y|x->)
 (u,v)指定要素のp値を変更:0 ⇒ 空欄
Ver.1.40.0 ・?testcase=32追加
Ver.1.39.0 ・?testcase=28||29||30||31追加
・spec追記
Ver.1.38.0 ・?testcase=-9||27追加
Ver.1.37.0 ・spec追記
Ver.1.36.0
Ver.1.35.0
・unit.js更新に伴い、math_com.jsを追加include依存関係を解消
Ver.1.34.0 ・Re/sx/syを時間tの関数化
・plot-dataにRe/sx/syを追加
・handler_calc.jsを新規作成
・testcaseを更新

流体流れの数値simulation(CFD解析)
項目 内容 実装
目的 [test]solverの応用(解法のstep1) 解の厳密さよりcodeの簡潔さを優先
・pre/solver/post統合の最小構成
・3次元化を含む拡張が容易
流体の種類 実在の粘性流体 非圧縮性のNewton流体を想定
・Mach数<0.3
・動粘度ν=粘性係数/密度=const.
完全流体(非粘性の流体) Re無限大を想定
理想流体(非圧縮性の完全流体) 通常、完全流体と同義
保存則 無次元のNavier-Stokes方程式
無次元の連続の式(質量保存の式)
直接、連立方程式のJacobi行列を構成して反復法で解くのは困難であり、
離散化した係数行列を優対角化する等、安定な解法が工夫される
・圧力のPoisson方程式(2階の楕円型偏微分方程式)を構成
・奇数階偏微分の移流項に数値粘性を導入
保存則の無次元化 系内の代表||特性値から規格化 代表||特性速さ:U
代表||特性長さ:L
解法 Fractional Step法(FS法) step0: 現在の時間stepの未知変数を更新
step0.5: 非線形な移流拡散方程式から中間速度を陽的に算出
step1: 線形な連立方程式から次の時間stepの未知変数を陰的に求解
solver@step1 Gaussの消去法(直接解法) 処理時間と演算costの大半を占有するが、Multi-thread化しない

反復解法と比較
・大規模行列の実用は不向き
 密行列の演算量=O(N**3)
 memory使用量=O(N**2)
・並列化は不向き(順次処理)
・収束判定不要

詳細はGraphing Calculator-test case-methods参照
・要素数Nに対する処理時間tの関係を仮定
 直接解法:t∝N**2.5
 反復解法:t∝N**2(不定)
・各step(step0.5||step1)の計測結果
 N=100: t=0||13[msec/step]
 N=400: t=0||318[msec/step]
 N=900: t=1||2213[msec/step]
DNS
Ver.1.37.0追加
乱流modelなし
保存則から直接数値simulation
上記costから実用困難
・最小単位の渦scaleの解像度で離散化

Re>>1000の2次元計算から3次元現象の予測は困難
・本仕様で非現実的な境界条件を除外することで安定的に時間発展可能
乱流model
Ver.1.37.0追加
scale間の輸送をmodel式で記述 DNSの代替として実用化
・現実的なcostで離散化

渦scale||scale間の輸送無視の非定常計算から定量評価は困難
・乱流modelは未実装(層流を想定)
渦scale
Ver.1.37.0追加
scaleの異なる渦の大きさ 物体表面~後流で渦scaleが異なる
格子||grid 2次元等間隔直交格子 描画canvasのclient座標(x,y)を規格化
・左右がx方向(右向きが正)
・上下がy方向(下向きが正)

汎用的な有限要素法と比較
・格子生成が容易
・複雑形状の適合性が低い
解像度 格子sizeに反比例
格子size grid-width
grid-height
gridWidth=1~canvasWidth
gridhHeight=1~canvasHeight
要素 1個の格子sizeの計算領域
既知要素 rgbaで条件を指定する要素 a>0
未知要素 未知変数を定義する要素 a=0
p=0指定の未知要素 全時間のgauge圧力が既知で
p(t)=0の要素
a>0
b=255
・求解上、系毎に1要素以上の指定が必須(testcase=12参照)
未知変数 速度(u,v)
圧力p
強連成@step1
・弱連成の場合、SOR法等で緩和後の擬圧力分布から速度場を更新
未知変数の定義点 集中格子(要素中心) 一般的な有限体積法のFS法と比較
・staggered格子より数値誤差が蓄積しやすい
・fluxを厳密に考慮しない
・境界条件や保存量の評価手法が異なる
離散化手法 有限差分法
保存特性 解の厳密さ(保存則の満足度) 保存量を指標として表示
1要素の保存量 連続の式 c=0(有限体積法の場合、要素毎に成立)
全要素の保存量
Ver.1.19.0更新
領域外境界の体積流出入量
全領域の連続の式
q=0(|q|>1e-1で解が発散傾向)
計算対象の全領域 全要素の計算領域 1要素でp=0の不変を仮定できる十分な領域を取ることが望ましい
・Re依存で領域不足の場合、保存量が拡大し、dt依存で解が発散
境界条件の仮想点 境界条件で仮定する境界外の補間点 便宜上、仮想点を使用
・1分割の0~1次元計算が可能
領域外の境界条件 (u,v,p)のNeumann条件 境界の法線方向n
du/dn=dv/dn=dp/dn=0
既知要素の境界条件0 (u,v)のDirichlet条件
pのNeumann条件
(u,v)=(r/255,g/255)
dp/dn=0
境界位置が不正確(実質、要素中心に界面が存在)
有限差分法の場合、粘性項のfluxが不正確
既知要素の境界条件1
Ver.1.7.0追加
(u,v)のNeumann条件
pのNeumann条件
境界面の(u,v)を指定値として内側1点から仮想点に線形外挿
(u,v)=lerp(r/255,g/255)
dp/dn=0
境界条件0より境界位置が厳密で全要素の保存量が改善
有限差分法の場合、粘性項のfluxが不正確
中間速度@step0.5 圧力分布なしの速度場 不連続が大きい場合、有限の領域境界で解が破綻しやすい
移流項scheme@step0.5
Ver.1.17.0追加
Ver.1.31.0更新
1~3次精度の上流差分(非保存型) 数値不安定な中心差分に数値粘性を付加
・1次精度の場合、2階偏微分の誤差からReを過小評価(要解像度)
・数値粘性の適用率を調整可

scheme=o1||o2||o3
粘性項@step0.5
Ver.1.31.0更新
Ver.1.32.0追加
2||4次精度の中心差分 scheme=o1~2||o3
diffusion=o2||o4
時間積分@step0.5
Ver.1.32.0更新
1~3次精度のAdams-Bashforth法 time=o1||o2||o3
連続の式||圧力項@step1 2次精度の中心差分 有限体積法の場合、2次精度(4次精度は未実装
・本来、中間速度の仮想点は不要
・有限差分法との整合性から境界条件1が望ましい
最適化
Ver.1.4.0追加
Ver.1.28.0追加
Ver.1.31.0更新
Ver.1.32.0追加
処理時間の低減 差分式の演算
・除算を含む係数をまとめて乗算に変換

scheme||orderの切替
・if文を削除(関数で切替)Ver.1.31.0以降、効果少で削除
・if文で切替(関数で切替は未実装

境界条件の切替
・if文で切替(関数で切替は未実装

境界位置の切替
・if文で切替(関数で切替は未実装

solver
・COO形式⇒LIL形式
・不要な複製処理を削除して速度の配列を共通化(順次更新)
演算costの低減 時間積分用の配列
・time選択値から追加で複製
安定化
Ver.1.13.0更新
Ver.1.17.0更新
解が発散時の対策 時間刻みを小さくする
・流出境界で逆流が存在する場合、|Ndt|>>1(逆流支配で解がNaN)
・非粘性に近い場合(Re無限大)、|Ndt|>>1
・粘性が支配的な場合(Re≒0)、|Ndt|>>10粘性項の陰解法は未実装
・scheme-a依存の数値粘性が分子粘性より支配的な場合、|Ndt|>>1

初期値を見直す
・Re>>1000の場合、徐々にReを上げる(testcase=-1||9参照)
解がNaN時の対策
Ver.1.56.2更新
Ver.1.60.2更新
領域を見直す
・閉じた領域が残存する場合、塗りつぶす
・助走区間不足の場合、領域を広げる
・p=0指定の未知要素が複数存在する場合、領域を広げて結合する

retry機能を追加(Newton法同様)
・連立方程式の列挙順序:昇順 ⇒ Fisher-Yates shuffle
・試行回数最大値:nmax


retry機能の問題を解消(pivot選択の処理順を修正)
page未応答時の対策 描画頻度を上げる
・格子sizeを大きくする
・Nntを小さくする

主な無次元数
項目 内容 実装
Mach数 慣性力/弾性力 Ma=U/音速
Ma>1: 超音速
Ma<0.3: 非圧縮性を想定(弾性力が支配的)
Reynolds数 慣性力/粘性力 Re=U*L/ν
Froude数 慣性力/外力 Fr=U/(L*加速度の大きさ)^0.5
Fr>1: 射流(Fr>>1の場合、慣性が支配的)
Fr=1: 限界流
Fr<1: 常流(Fr<<1の場合、外力が支配的)
Strouhal数 振動現象の周波数を無次元化 St=周波数*L/U
Rayleigh数 浮力/温度拡散率 Ra<臨界値: 熱拡散による熱輸送(熱伝導が支配的)
Ra>臨界値: 対流による熱輸送(対流を形成)

流れ場を記述する方程式
項目 内容 実装 Graphing Calculator
test case
Ver.1.52.1追加
Navier-Stokes方程式 運動量保存の式 移流項
圧力項(圧力勾配項)
粘性項(分子粘性項)
生成項(重力を含む外力項)
Euler方程式 粘性項なし(慣性が支配的⇒粘性を無視) Re無限大
Stokes方程式 移流項なし(粘性が支配的⇒慣性を無視) Re≒0
Bateman-Burgers方程式
移流拡散方程式
圧力項なし(連続の式を無視) 圧力分布なしの中間速度 Bateman-Burgers
advection-diffusion
移流方程式 粘性項なし
圧力項なし
Re無限大の中間速度 advection
拡散方程式 移流項なし
圧力項なし
Re≒0の中間速度 diffusion
↑連続体
Ver.1.56.2追加
↓要素の集合を連続的に扱う拡張 統計的な極限の仮定(定常状態)
・時間scale:不変性(運動の3法則)
・空間scale:等方性・自己相似性
・外力:体積力
Langevin方程式
Ver.1.54.2追加
Brown運動を記述する確率微分方程式 各軸独立の正規分布に従う
random力を仮定
(連続性を考慮)
Langevin
Brown
random-walk
Ver.1.39.0追加
Ver.1.46.1追記
Ver.1.52.1移植
Ver.1.54.2更新
流体中の微粒子の軌跡表現 均一な媒体中で不規則な
等方性の等速運動を想定
(不連続)
random-walk

URL-parameter@browser上部URL入力欄
項目 内容 実装
nmax
Ver.1.12.0追加
描画更新の最大回数 start~自動停止の間
plot-canvas-width
plot-canvas-height
Ver.1.21.0追加
plot用canvas-size その他、plot-config参照
testcase
Ver.1.5.0追加
Ver.1.6.0追加
Ver.1.7.0追加
Ver.1.12.0追加
全data軽量化svg⇒png

Ver.1.14.0追加
Ver.1.15.0追加
Ver.1.20.0追加
Ver.1.26.0追加
Ver.1.29.0追加
Ver.1.34.0更新
Ver.1.38.0追加
Ver.1.39.0追加
Ver.1.40.0追加
Ver.1.42.0追加
Ver.1.43.0追加
Ver.1.44.0追加
Ver.1.45.0追加
Ver.1.48.1追加
Ver.1.49.1追記
Ver.1.53.2更新
Ver.1.55.2更新
Ver.1.56.2更新
Ver.1.58.2更新
Ver.1.59.2更新
Ver.1.60.2削除
Ver.1.61.2更新
test case -1: backstep流れの再付着点距離の検証
・backstep流れ:backward-facing step flow
・U=inlet平均速さUi(redを指定)
・L=step高さS(Lyを設定)
・ReS:=Ui*S/ν
・ReS=200,400,600に対して
・t>>100で評価する
・付着面直近の速度をplot: (x,u[][8])
・無次元の再付着点距離=約5,7,10(助走区間長=1、inlet未発達)
・無次元の再付着点距離=約6,9,11(助走区間長=3)
・ReS≒800以降、乱流遷移で再付着点距離が減少傾向
・実験も同様、流れ場が徐々に3次元化

0: 左右の一様流
1: 上下の一様流
2: 斜めの一様流
3: 左右のKármán渦列(領域不足、Ly=3相当のRe)
・scheme=o3
・Ly=3
・後流の速度をplot: (t,u||v[4][4])
・Re>20でSt≒0.2
4: 上下のKármán渦列(同上)
|5|: 左右のKármán渦列(同上)
6: 上下のKármán渦列(同上)
|7|: Hagen-Poiseuille流れ
8: cavity流れ(速度指定)
|9|: cavity流れ(圧力指定)
10: cavity流れ(模擬条件)
11: backstep流れ(領域不足、助走区間不足、Ly=2相当のReS)
-11: backstep流れ(高Reの検討、領域不足、解像度不足)
12: cavity+backstep流れ(解像度不足)
12.1: 上下左右独立の系のcavity流れ(左右非対称の流出境界)
12.2: 上下左右独立の系のcavity流れ(左右対称の流出境界)
12.3: 上下左右結合のcavity流れ(流出境界を結合)
13: 合流の一様流
14: 対称な合流(圧力分布なしの中間速度を表示)
15: 非対称な合流(同上)
16: 左右の不連続流(同上)
17: 上下の不連続流(同上)
18: 左右の合流
19: 上下の合流
20: 右斜め下方向の合流
21: 左斜め下方向の合流
22: 左斜め下方向の合流(圧力分布なしの中間速度を表示)
23: 閉空間の循環流(速度指定)
24: 閉空間の循環流(圧力指定)
-22~-26.2: 閉空間の循環流(圧力指定)
・磁石の磁力線のanalogy:速度⇔磁束密度、渦糸⇔導線
・-22:磁石単体の磁力線
・-23:NS相互作用の引力
・-24:NN相互作用の斥力
・-25:SS相互作用の斥力
・-26:SS相互作用の斥力(右側の磁束密度を左側の2倍)
・-26.1||-26.2: 非対称な循環流
25: 蛇行流(速度指定、解像度不足)
26: 蛇行流(圧力指定、解像度不足)
|27|: 合流の少ない単純な迷路
・流路の流れやすさで流出入の圧力差が減少
・流出経路の確率(Re依存)=流量/全流量
27.1||27.2||27.3||27.4||27.5||27.6||27.7: 合流を伴う多少複雑な迷路
・最短経路(Stokes~完全流体流れ):各分岐点で流量最大の経路を選択
・妥当な初期値:不定で収束困難
・連立方程式の列挙順序:Fisher-Yates shuffleの試行の反復で収束改善
・収束の確率:全領域に対する流量≒0の体積割合と流路の複雑さに依存(→0で確率=1)

28: Bénard対流2cells模擬(水平方向)
29: Bénard対流2cells模擬(周方向)
30: Bénard対流4cells模擬(周方向)
31: Bénard対流6cells模擬(周方向)
・周期境界の場合、偶数個cells
32: 大規模循環流
33: 翼断面(領域不足、助走区間不足、解像度不足)
・揚力:推進中に翼の下面(正圧)と上面(負圧)の圧力差で生じる上向きの力
・翼形状:上面の流れがはく離なしで合流する最適形状の流線形(はく離で失速)
34: 一様流の中で渦糸が受けるMagnus効果(領域不足、助走区間不足、解像度不足)
・back-spinの場合、上向きの揚力

UI設定
項目 内容 実装
i=0~Ni-1 x方向の要素index
j=0~Nj-1 y方向の要素index
Ni=1~ x方向の要素数 Ni=ceil(canvasWidth/round(gridWidth))
Nj=1~ y方向の要素数 Nj=ceil(canvasHeight/round(gridHeight))
割り切れない場合、pre/post表示の座標に乖離あり
dx
Ver.1.1.0変更
x方向の無次元grid刻み幅 dx=1/Ni
dx=dy*round(gridWidth)/round(gridHeight)
dy
Ver.1.1.0変更
Ver.1.10.0変更
y方向の無次元grid刻み幅 dy=dx*round(gridHeight)/round(gridWidth)
dy=Ly/Nj
Lx
Ver.1.10.0追加
x方向の無次元全長 Lx=dx*Ni
Ly
Ver.1.10.0追加
y方向の無次元全長 L=1から換算
rgba=0~255 pixelのRGBA 要素左上のpixelを判定
a>0 -> 既知要素
a=0 -> 未知要素
(u,v)=(r/255,g/255)
Ver.1.20.0追加
無次元速度vector blackを含むr=g=0で壁指定
b=1 -> uの符号反転
b=2 -> vの符号反転
b=3 -> uvの符号反転
p 無次元gauge圧力 p=0指定の未知要素@b=255
・境界条件の都合上、流出側の指定が妥当
・b=255未定義時、右下の未知要素p=0
・(u,v)の同時指定不可
t
Ver.1.56.2更新
無次元時間 解がNaNの場合、false
Re=Re(t)
Ver.1.34.0更新
Reynolds数 y方向の全長=1と(u,v)から実際の問題に換算が必要
例)代表長さが全長の半分の場合、実際のReは指定値の半分

Ver.1.10.0以降、Lyと(u,v)から実際の問題に換算が必要
(sx,sy)=(sx(t),sy(t))
Ver.1.27.0追加
Ver.1.34.0更新
無次元の生成項vector s=1/Fr^2
Ndt
Ver.1.11.0追加
dtmaxの分割数 Ndt<0の場合、CFL条件適応の時間刻みの時間発展
dt 時間発展の時間刻み dt=dtmax/|Ndt|
dtmax
Ver.1.13.0更新
時間刻み最大値 dtmax=min(dtmax_CFL,dtmax_VNSA)
dtmax_CFL
Ver.1.11.0追加
CFL条件を満たす時間刻み最大値 Ndt≥0 -> 固定dtmax_CFL=min(dx,dy)/1
Ndt<0 -> 可変dtmax_CFL=min(dx/(max(|u|)||1),dy/(max(|v|)||1))
dtmax_VNSA
Ver.1.13.0追加
Ver.1.17.0更新
拡散の安定条件を満たす時間刻み最大値 dtmax_VNSA=0.5*Re*min(dx*dx,dy*dy)
・数値粘性は未考慮
Nnt=1~1000
Ver.1.12.0追加
描画更新の間隔 時間間隔=Nnt*dt
c
Ver.1.3.0削除
Ver.1.9.0復帰
1要素の保存量最大値 厳密な評価困難で流量qの指標で代替
q
Ver.1.3.0追加
Ver.1.19.0更新
全要素の保存量 2次精度の数値積分
start 計算開始/再開button
stop 計算一時停止button
scheme=o3||o2||o1
Ver.1.31.0追加
移流項の差分精度次数の選択
scheme-a
Ver.1.17.0追加
Ver.1.31.0更新
数値粘性の適用率 a=0 -> (order+1)次精度の中心差分@o1||o3
a=1 -> (order+0)次精度の上流差分
a=3 -> Kawamura-Kuwahara scheme@o3
diffusion=o4||o2
Ver.1.32.0追加
粘性項の差分精度次数の選択
time=o3||o2||o1
Ver.1.32.0追加
時間積分の精度次数の選択 描画更新毎に追加の配列を確保(常に保持しない)
bound=境界条件0||1
Ver.1.7.0追加
既知要素の境界条件の種類
k_arrow=-100~100
Ver.1.15.0追加
post表示用
矢印のsize倍率=|k_arrow|
k_arrow>0の場合、矢印全体をre-size(始点基準)
k_arrow≤0の場合、矢印部分をre-size(終点基準)

矢印はcanvas中面に描画
矢印vector:=(u,v)
arrow-color
Ver.1.16.0追加
post表示用
矢印の色
矢印の色:=black(固定)

矢印の色(青~緑~黄~橙~赤):=|velocity|(最低値~最高値)

矢印の色(青~緑~黄~橙~赤):=pressure(最低値~最高値)
・圧力分布なしの場合、黒色
・既知要素p=0(境界条件を未代入)
arrows=false||true
Ver.1.8.0追加
矢印のdownloadを有効化 png出力はcanvas中面を出力(grid||矢印のみ)
download-csv
Ver.1.18.0追加
Ver.1.41.0修正
Ver.1.52.2再修正
(u,v,p)のdownload機能 各軸を明示してcanvas表示通りに出力:u||v||p(y|x->)
横軸: 要素中心のx座標
縦軸: 要素中心のy座標
既知要素のp値を変更:0 ⇒ 空欄(未知要素を除く)

再downloadのbrowser-blockあり(保存file更新の許可が必要)
plot
Ver.1.22.0追加
Ver.1.30.0更新
Ver.1.47.1訂正
Ver.1.53.2更新
plotするdataの選択 時系列の(t,data)をplot用canvasに描画
・u[i][j]/v[i][j]/p[i][j]のdata追加(St検証用)
・(x,u[][j]/v[][j]/p[][j])の選択肢を追加(plot専用)
・(y,u[i][]/v[i][]/p[i][])の選択肢を追加(plot専用)
plot-(i,j)
Ver.1.30.0追加
plotする変数の要素index 範囲外の場合、0||最終indexを参照
plot-
download-png/svg
Ver.1.23.0追加
imageのdownload機能 png出力は停止中のみ
plot-
download-csv
Ver.1.24.0追加
Ver.1.53.2更新
時系列の(t,data)のdownload機能 時系列の全dataを出力