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中重力的植入方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【分享】我在名牌大学毕业后的经历
- 下一篇: unity Reflection Pro