日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenFOAM中重力的植入方式

發布時間:2023/12/16 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenFOAM中重力的植入方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

OpenFOAM中重力的植入方式


考慮重力的NS方程可以寫為:
ρ?u??t+ρ?(u?u?)=?(μ?u?)??P+ρg?(1)\rho \frac{\partial \vec u}{\partial t}+\rho \nabla(\vec u \vec u)=\nabla(\mu\nabla \vec u)-\nabla P +\rho \vec g \tag {1}ρ?t?u?+ρ?(uu)=?(μ?u)??P+ρg?(1)在openFOAM中,許多求解器中都耦合了重力,以interFoam為例,其中的重力定義處的代碼塊為:

fvc::reconstruct((mixture.surfaceTensionForce()- ghf*fvc::snGrad(rho)- fvc::snGrad(p_rgh)) * mesh.magSf()

將其中的重力抽離出來,其表達式為fvc::reconstruct( (ghf*fvc::snGrad(rho) )* mesh.magSf() )。通過溯源代碼,我們可以進一步得到其中ghf的表達式:

new surfaceScalarField ("ghf",(gFluid[i] & fluidRegions[i].Cf()) - ghRef )

其中gFluid[i]返回了通過字典(constant/g)讀取得到的重力加速度項,fluidRegions[i].Cf()返回了當前網格表面的面心矢量,ghRef是給定的相對重力加速度,一般為0。綜上所述,openFOAM中的重力的表達式為:G?=?(g??s?)?ρ(2)\vec G=-(\vec g \cdot \vec s)\nabla \rho\tag {2}G=?(g??s)?ρ(2)其中s?\vec ss是待求點的位置矢量,這顯然與方程1使用的重力表達式相差很大,接下來我們就一步一步推導這個結果。
首先明確,在涉及到重力的求解器中,其求解的壓力p并不是總壓P,而是動壓,即:P=p+ρg??s?(3)P=p+\rho \vec g \cdot \vec s\tag {3}P=p+ρg??s(3)之所以要這樣處理是為了方便用戶設置初場,大家可以設想最簡單的潰壩算例,如果直接對總壓設置初場,那我們要設置的則是一個梯形的壓力分布,計算域的y坐標越高其凈水壓強就越大,而如果我們拆分成動壓和靜壓的形式,就可以直接設置初場為0了。可能有小伙伴對g??s?\vec g \cdot \vec sg??s項不太理解,其實我們只要對其展開就很好說明問題了:g??s?=(0,g,0)?(x,y,z)=gy(4)\vec g \cdot \vec s=(0,g,0)\cdot(x,y,z)=gy\tag {4}g??s=(0,g,0)?(x,y,z)=gy(4)在動量方程中,我們存在對總壓的壓力梯度項,將總壓拆成靜壓和動壓即可得到: ?P=?(p+ρg??s?)=?p+?(ρg??s?)=?p+(g??s?)?ρ+ρ?(g??s?)(5)\nabla P=\nabla (p+\rho \vec g \cdot \vec s)=\nabla p+\nabla(\rho \vec g \cdot \vec s)=\nabla p+ ( \vec g \cdot \vec s)\nabla\rho+\rho\nabla( \vec g \cdot \vec s)\tag {5} ?P=?(p+ρg??s)=?p+?(ρg??s)=?p+(g??s)?ρ+ρ?(g??s)(5)其中關鍵點在于處理?(g??s?)\nabla(\vec g \cdot \vec s)?(g??s)項,根據式4有:?(g??s?)=?(gy)=(?(gy)?x,?(gy)?y,?(gy)?z)=(0,g,0)=g?(6)\nabla(\vec g \cdot \vec s)=\nabla (gy)=(\frac{\partial (gy)}{\partial x},\frac{\partial (gy)}{\partial y},\frac{\partial (gy)}{\partial z})=(0,g,0)=\vec g\tag {6}?(g??s)=?(gy)=(?x?(gy)?,?y?(gy)?,?z?(gy)?)=(0,g,0)=g?(6)因此,式5最終寫為:?P=?p+(g??s?)?ρ+ρ?(g??s?)=?p+(g??s?)?ρ+ρg?(7)\nabla P=\nabla p+ ( \vec g \cdot \vec s)\nabla\rho+\rho\nabla( \vec g \cdot \vec s)=\nabla p+ ( \vec g \cdot \vec s)\nabla\rho+\rho \vec g\tag {7}?P=?p+(g??s)?ρ+ρ?(g??s)=?p+(g??s)?ρ+ρg?(7)將式7帶回方程1,即可得到OpenFOAM代碼中使用的含重力的動量方程了:
ρ?u??t+ρ?(u?u?)=?(μ?u?)??p?(g??s?)?ρ(8)\rho \frac{\partial \vec u}{\partial t}+\rho \nabla(\vec u \vec u)=\nabla(\mu\nabla \vec u)-\nabla p - ( \vec g \cdot \vec s)\nabla\rho \tag {8}ρ?t?u?+ρ?(uu)=?(μ?u)??p?(g??s)?ρ(8)

總結

以上是生活随笔為你收集整理的OpenFOAM中重力的植入方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。