該專題主要包括以下的主要內容:
一、動網格的相關知識介紹;
二、以NACA0012翼型俯仰振蕩實例進行講解動網格的應用過程;
三、與動網格應用有關的參考文獻;
四、使用動網格進行計算的一些例子。
一、動網格的相關知識介紹
有關動網格基礎方面的東西,請具體參考FLUENT User’s Guide或FLUENT全攻略的相關章節,這裡只給出一些提要性的知識要點。
1、簡介
動網格模型可以用來模擬流場形狀由於邊界運動而隨時間改變的問題。邊界的運動形式可以是預先定義的運動,即可以在計算前指定其速度或角速度;也可以是預先未做定義的運動,即邊界的運動要由前一步的計算結果決定。網格的更新過程由FLUENT 根據每個迭代步中邊界的變化情況自動完成。在使用動網格模型時,必須首先定義初始網格、邊界運動的方式並指定參予運動的區域。可以用邊界型函數或者UDF定義邊界的運動方式。FLUENT 要求將運動的描述定義在網格面或網格區域上。如果流場中包含運動與不運動兩種區域,則需要將它們組合在初始網格中以對它們進行識別。那些由於周圍區域運動而發生變形的區域必須被組合到各自的初始網格區域中。不同區域之間的網格不必是正則的,可以在模型設置中用FLUENT軟件提供的非正則或者滑動界面功能將各區域連接起來。
註:一般來講,在Fluent中使用動網格,基本上都要使用到UDF,所以你最好具備一定的C語言編程基礎。
2、動網格更新方法
動網格計算中網格的動態變化過程可以用三種模型進行計算,即
彈簧近似光滑模型(spring-based smoothing)、
動態分層模型 (dynamic layering)
局部重劃模型 (local remeshing)
1)彈簧近似光滑模型
原則上彈簧光順模型可以用於任何一種網格體系,但是在非四面體網格區域(二維非三角形),最好在滿足下列條件時使用彈簧光順方法:(1)移動為單方向。(2)移動方向垂直於邊界。
如果兩個條件不滿足,可能使網格畸變率增大。另外,在系統缺省設置中,只有四面體網格(三維)和三角形網格(二維)可以使用彈簧光順法,如果想在其他網格類型中激活該模型,需要在dynamic-mesh-menu 下使用文字命令spring-on-all-shapes?,然後激活該選項即可。
2)動態分層模型
動態分層模型的應用有如下限制:
(1)與運動邊界相鄰的網格必須為楔形或者六面體(二維四邊形)網格。
(2)在滑動網格交界面以外的區域,網格必須被單面網格區域包圍。
(3)如果網格周圍區域中有雙側壁面區域,則必須首先將壁面和陰影區分割開,再用滑動交界面將二者耦合起來。
(4)如果動態網格附近包含周期性區域,則只能用FLUENT 的串行版求解,但是如果周期性區域被設置為周期性非正則交界面,則可以用FLUENT 的並行版求解。
如果移動邊界為內部邊界,則邊界兩側的網格都將作為動態層參與計算。如果在壁面上只有一部分是運動邊界,其他部分保持靜止,則只需在運動邊界上應用動網格技術,但是動網格區與靜止網格區之間應該用滑動網格交界面進行連接。
3——局部網格重劃模型
需要注意的是,局部網格重劃模型僅能用於四面體網格和三角形網格。在定義了動邊界面以後,如果在動邊界面附近同時定義了局部重劃模型,則動邊界上的表面網格必須滿足下列條件:
(1)需要進行局部調整的表面網格是三角形(三維)或直線(二維)。
(2)將被重新劃分的面網格單元必須緊鄰動網格節點。
(3)表面網格單元必須處於同一個面上並構成一個循環。
(4)被調整單元不能是對稱面(線)或正則周期性邊界的一部分。動網格的實現在FLUENT 中是由系統自動完成的。如果在計算中設置了動邊界,則FLUENT 會根據動邊界附近的網格類型,自動選擇動網格計算模型。如果動邊界附近採用的是四面體網格(三維)或三角形網格(二維),則FLUENT 會自動選擇彈簧光順模型和局部重劃模型對網格進行調整。如果是稜柱型網格,則會自動選擇動態層模型進行網格調整。在靜止網格區域則不進行網格調整。
動網格問題中對於固體運動的描述,是以固體相對於重心的線速度和角速度為基本參數加以定義的。既可以用型函數定義固體的線速度和角速度,也可以用UDF 來定義這兩個參數。同時需要定義的是固體在初始時刻的位置。
注:這一小節主要講述了動網格的更新方法,最好能掌握,尤其是各種方法的適用範圍,通常來講,在一個case中,我們使用的更新方法都是根據網格類型以及和要實現的運動來選擇的,很多時候都是幾種更新方法搭配起來使用的。總結一下:
使用彈簧近似光滑法網格拓撲始終不變,無需插值,保證了計算精度。但彈簧近似光滑法不適用於大變形情況,當計算區域變形較大時,變形後的網格會產生較大的傾斜變形,從而使網格質量變差,嚴重影響計算精度。動態分層法在生成網格方面具有快速的優勢,同時它的應用也受到了一些限制。它要求運動邊界附近的網格為六面體或楔形,這對於複雜外形的流場區域是不適合的。使用局部網格重劃法要求網格為三角形(二維)或四面體(三維),這對於適應複雜外形是有好處的,局部網格重劃法只會對運動邊界附近區域的網格起作用。
3、動網格問題的建立
設置動網格問題的步驟中需要注意的如下:
在Solver(求解器)面板中選擇非定常流(unsteady)計算;設定邊界條件,即設定壁面運動速度;激活動網格模型,並設定相應參數;指定移動網格區域的運動參數;保存算例文件和數據文件;預覽動網格設置,菜單操作為:Solve -> Mesh Motion…;應用自動保存功能保存計算結果,在動網格計算中,因為每個計算步中網格信息都會改變,而網格信息是儲存在算例文件中的,所以必須同時保存算例文件和數據文件;如果想建立網格運動的動畫過程,可以在Solution Animation(計算結果動畫)面板中進行相關設置。
註:在這一步中,需要提醒一下,使用動網格進行正式計算之前,最好養成預覽動網格更新的習慣;就是在正式計算前,瀏覽一下動網格的更新情況,這樣可以避免在計算過程中出現動網格更新本身的問題。在預覽更新時,很多人都說會出現負體積的警告,更新不成功,出現這樣的問題時,最好先把時間步長改的更小點兒試試,一般來講,排除UDF本身的原因,出現更新出錯的原因都與時間步長有關,這需要結合所使用的更新方法多琢磨。
4、設定動網格參數
為了使用動網格模型,需要在dynamic mesh(動網格)面板中激活Dynamic Mesh(動網格)選項。如果計算的是活塞運動,則同時激活In-Cylinder(活塞)選項。然後選擇動網格模型,並設置相關參數。
1)選擇網格更新模型
在Mesh Methods(網格劃分方法)下面選擇Smothing(彈簧光順模型),Layering(動態層模型)和(或)Remshing(局部網格重劃模型)。2)設置彈簧光順參數
激活彈簧光順模型,相關參數設置位於Smoothing(光順)標籤下,可以設置的參數包括Spring Constant Factor(彈簧彈性係數)、Boundary Node Relaxation(邊界點鬆弛因子)、Convergence Tolerance(收斂判據)和Number of Iterations(迭代次數)。彈簧彈性係數應該在0 到1 之間變化,彈性係數等於0 時,彈簧系統沒有耗散過程,在圖中算例中,靠近壁面的網格沒有被改變,而是保持了原來的網格形狀和密度;在彈性係數等於1 時,彈簧系統的耗散過程與缺省設置相同,從圖中可以發現壁面發生變形,壁面附近網格因為過度加密而質量下降。因此在實際計算中應該在0 到1 之間選擇一個適當的值。邊界點鬆弛因子用於控制動邊界上網格點的移動。當這個值為零時,邊界節點不發生移動;在這個值為1 時,則邊界節點的移動計算中不採用鬆弛格式。在大多數情況下,這個值應該取為0 到1 之間的一個值,以保證邊界節點以合適的移動量發生移動。
收斂判據就是網格節點移動計算中,迭代計算的判據。迭代次數是指網格節點移動計算的最大迭代次數。
3)動態分層
在Layering(動態分層)標籤下,可以設置與動態層模型相關的參數。通過設定Constant Height(常值高度)與Constant Ratio(常值比例)可以確定分解網格的兩種方法。Split Factor(分割因子)和Collapse Factor(合併因子)則分別為上面介紹的alpha_s和alpha_c。
4)局部網格重新劃分網格
在Remeshing(重劃網格)標籤下,設置與局部重劃模型相關的參數。可以設置的參數包括Maximum Cell Skewness(最大畸變率)、Maximum Cell Volume(最大網格體積)和Minimum Cell Volume(最大網格體積),其含義如前所述,主要用於確定哪些網格需要被重新劃分。在缺省設置中,如果重新劃分的網格優於原網格,則用新網格代替舊網格;否則,將保持原網格劃分不變。如果無論如何都要採用新網格的話,則可以在Options(選項)下面選擇Must Improve Skewness(必須改善畸變率)選項。如果Options(選項)下面的Size Function(尺寸函數)被激活,則還可以用網格尺寸分佈函數標誌需要重新劃分的網格。假設在某點附近的理想網格尺寸為L,而某個網格的尺寸為L‘,如果:
L不屬於[0.8*gamma*L,1.25*gamma*L]
則網格被標誌為需要重新劃分的網格,並在隨後的計算中被重新劃分。式中的gamma用下面的公式計算:
當alpha>0時,gamma=1+alpha*d_b^(1+2*beta)
當alpha<0時,gamma=1+alpha*d_b^[(1-beta)^-1]
式中d_b為網格到壁面邊界的最小距離,alpha和beta就是需要設置的Size Function Variation(尺寸函數增量)和Size Function Rate(尺寸函數變化率)。
以上兩式中,alpha以邊界網格尺寸為基準控制內部網格的大小,alpha等於0.5表示內部網格的尺寸至少是邊界網格的1.5倍,alpha等於-0.5表示內部網格的尺寸等於邊界網格的0.5倍,如果alpha等於0則表示內部網格與邊界網格大小相同;bata的取值在-1到1之間,用於控制網格從邊界到內部區域的變化速率。Beta取正值表示網格變化速率較慢,取負值則表示變化速率較快,取0 則表示網格從邊界到內部區域呈線性變化。
另外一個選項Size Function Resolution(尺寸函數分辨率)用於定義尺寸分佈函數對網格大小的分辨率,其參照值是最小網格尺寸。
點擊Use defaults(使用缺省值)按鈕,可以恢復系統缺省設置。
5)設定活塞運動參數
如果在計算中選擇使用In-cylinder(活塞)模型,需要指定Crank Shaft Speed(曲柄速度)、Starting Crank Speed(曲柄起始速度)、Crank Period(曲柄周期)以及Crank Angle Step Size(曲柄角度時間步長)。
FLUENT 中還提供一個內建函數用於計算活塞位置。這個函數的自變量為曲柄轉角,如果選用這個函數,還需要指定Piston Stroke(活塞行程)和Connecting Rod Length(連接桿長度)二個參數。
註:以上的一些參數設定對動網格的更新質量影響很大,如果設置不當,可能引起更新不成功,如果不清楚這些設定因子對更新的影響,可以固定一些參數調節一兩個參數查看效果。另外,在這些更新方法中比較容易出問題的就是Remeshing方法中的一些參數設定:Remeshing中的參數Minimum length scale和Maximum Length Scale,這兩個參數你可以參考mesh scale info中的值,僅是參考,因為mesh scale info中的值是整個網格的評價值,設置的時候看一下動網格附近的網格和整個網格區域的大小比較,然後確定這兩個參數,一般來講,動網格附近的網格較密,這些值都比整體的小,所以在設置時通常設置為比mesh scale info中的Minimum length scale大一點,比Maximum Length Scale小一點。
5、定義動網格的運動方式
在計算動網格問題時,必須定義動網格區的運動方式。在動網格區為剛體運動時,可以用型函數和UDF 來定義其運動;在動網格區為變形區域時,則需要定義其幾何特徵及局部網格重劃參數;如果動網格區既做剛體運動又有變形發生,則只能用UDF 來定義其幾何形狀的變化和運動過程。
上述定義在Dynamic Zones(動態區域)面板中設置,在這個面板中可以修改動態區域的設置、計算剛體運動區域的重心或刪除一個動態區域。方法是首先在Dynamic Zones(動態區域)列表中選擇一個動網格區,然後修改其設置參數,或計算其重心,或進行刪除操作,最後點擊Create(創建)按鈕保存設置。
對於新加入的區域,需要先從Zone Names(區域名稱)下選擇相關區域,然後在Type(類型)下選擇其運動類型。可供選擇的運動類型包括:Stationary(靜止)Rigid Body(剛體運動)Deforming(變形)User-Defined(用戶自定義)
補充資料:FLUENT三種動邊界控制實現方法
1) void DEFINE_CG_MOTION (UDFname,Dynamic_Thread * dt,real vel[ ], real omega[ ], real time,real dtime)。
此函數接口用於控制剛體的運動,用戶把剛體質心運動速度和角速度分別賦值給vel和omega, FLUENT根據它們的值來自動計算出邊界下一步的位置,從而實現動邊界的控制; 剛體質心的位置可以在函數接口界面對話框中定義。Dynamic Zones中的dwall就是要控制的動邊界,Motion UDF/Profile中的就是UDFname,從中可看出它已被制定成用於控制dwall,理論上 FLUEN T可以通過這種方式實現無窮多個動邊界的控制; C.G.Location用於設定初始位置的質心,C.G.Orientation用於設定剛體的初始角度。一般適用於剛體本身不變形的運動。
2) void DEFINE_GEOM(char name,Domain * d,Dynamic_Thread * dt,real * position)。
此函數接口用於控制變形體的邊界運動, position就是運動邊界上某網格節點的位置值,用戶可以通過對其賦值達到控制效果, position [0]對應邊界節點的x坐標, position [1]對應y 坐標, position [2]對應z坐標; FLUENT自動遍歷所有的邊界節點,因此適用於有規律的可以用函數描述的運動邊界。
3) void DEFINE_ GRID_MOTION(name,d,dt,time,dtime)。
此函數接口也用於控制形體的邊界運動。主要用於更加複雜的控制,用戶需要自己利用 FLUENT提供的其他函數來遍歷運動邊界上的節點,並對其位置進行控制,因此 UDF編程比前面兩種複雜得多。它甚至可以事先生成好邊界數據,在計算中把數據讀入,完成複雜形體控制。
6、預覽動網格
在設置好動網格模型及動網格區的運動方式後,可以通過預覽的方式檢查設置效果。預覽功能在Mesh Motion(網格運動)面板中進行設置,啟動這個面板的菜單操作為:Solve -> Mesh Motion…
預覽操作步驟如下:
(1)在參數設置完畢後,首先保存算例(case)文件。因為與網格設置有關的記錄都保存在算例文件中,在預覽過程中伴隨着網格的更新,與網格有關的記錄也不斷被刷新,如果不進行保存,則無法恢復原始設置狀態,在發現參數設置問題後就無法進行更改了。
(2)設置迭代時間步數和時間步長。在計算過程中,當前時間將被顯示在Current Mesh Time(當前網格時間)欄中。如果在計算中選用了活塞模型選項,則時間步長用曲柄速度(shaft speed)和曲柄轉動步長(crank angel step size)計算得出。
(3)為了在圖形窗口中預覽網格變化過程,需要激活Display Options(顯示選項)下的Display Grid(顯示網格),並在Display Frequency(顯示頻率)中設置顯示頻率,即每分鐘顯示圖幅數量。如果要保存顯示的圖形,則同時激活Save Hardcopy(保存硬拷貝)選項。
(4)點擊Preview(預覽)按鈕開始預覽。
在定義了活塞運動時,活塞運動的預覽是在IC Zone Motion(活塞運動)面板中實現的,激活這個面板的菜單操作為:Display -> IC Zone Motion…
預覽操作的具體步驟為:
(1)在Display Grid(顯示網格)面板中選擇準備預覽的網格區域。
(2)在IC Zone Motion(網格運動)面板中,設置曲柄角度增量(Increment)和迭代步數(Number of Steps)。
(3)點擊Preview(預覽)按鈕開始預覽。
註:在動網格的建立內容中,已經說到了預覽動網格在整個計算之中的重要性,請參考。
二、以NACA0012翼型俯仰振蕩實例進行講解動網格的應用過程
首先需要聲明的是,這個例子也是來源於網絡,原作者不詳,在此向他表示感謝。
1、問題描述
本例是想對作簡諧振蕩運動的NACA0012翼型的氣動特性(升力係數,阻力係數和力矩係數)進行數值計算,來流速度為V, 攻角的變化規律為:
Alpha(t)=A/2*sin(omega*t)
其中,A=10度,omega=10*pi 弧度/秒。
2、該例需要使用動網格來實現,首先需要編寫剛體運動UDF實現翼型的俯仰運動,由於在FLUENT的UDF中只能指定速度,角速度;所以,需要將攻角對時間求導,得到轉動角速度的規律:
D(alpha)/dt=A*omega/2*cos(omega*t)
編寫的UDF在附件中。
3、由於本例只是為了講述動網格的實現,至於其他方面的設置及分析就不再討論;這裡詳細講述下動網格的建立以及動網格的預覽的結果。步驟如下:
1)將mesh文件讀入到FLUENT中,Grid:check,scale…,Smooth/Swap…;Display Grid;
2)定義求解器為,Define:pressure-based,2D,unsteady,Implicit,Green-Gauss Node Based(因本例使用的是三角形單元).
3)編譯UDF,Define->User-Defined->Functions->Complied…
此時打開了Complied UDFs的窗口,Add…在選擇UDF的對話框中找到NACA0012DM文件夾中的airfoil.c文件,選中,ok;此時返回到Complied UDFs的窗口點擊Build,FLUENT開始進行編譯,可以在FLUENT窗口看到編譯的一些過程提示;等編譯完成,點擊Load;就將已經編譯好的UDF加載到FLUENT中了。
4)定義動網格參數,Define->Dynamic Mesh(選勾,激活動網格模型)->Parameters…
此時打開了Dynamic Mesh Parameters 窗口,在Models中只選取Dynamic Mesh,本例的網格類型為三角形單元,要實現的運動為小幅度的轉動,因此選用的動網格更新方法為Smoothing+Remeshing;開始依次對這兩種更新方法進行參數設定:Smoothing中的參數設定:Spring Constant Factor(彈簧倔強係數),該值設定為一個較小的值,在0.01到0.1之間,本例選取0.08;Boundary Node Relaxation(邊界節點鬆弛),設定為0.5;Convergence Tolerance(收斂判據),保持默認的0.001;Number of Iterations(迭代次數),保持默認的20;Remeshing中的參數設定:
為了得到較好的網格更新,本例在使用局部網格重新劃分方法時,使用尺寸函數,也就是Remeshing+Must Improve Skewness+Size Function的策略。將Minimum Length Scale及Maximum Length Scale均設置為0,為了使所有的區域都被標記重新劃分;Maximum Cell Skewness(最大單元畸變),參考Mesh Scale Info…中的參考值0.51,將其設定為0.4,以保證更新後的單元質量;Size Remesh Interval(依照尺寸標準重新劃分的間隔),將這個值設定為1,在FLUENT,不滿足最大網格畸變的網格在每個時間步都會被標記,而後重新劃分,而不滿足最小,最大及尺寸函數的網格,只有在Current Time=(Size Remesh Interval)*delta t的時候,才根據這些尺寸的標準標記不合格的單元進行重新劃分,為了保證每步的更新質量,將其修改為1,就是每個時間都根據尺寸的標準標記及更新網格。
Size Function Resolution(尺寸函數分辨率),保持默認的3;
Size Function Variation(尺寸函數變量):建議使用一個小值,在0.1到0.5之間,本例將其設置為0.3;
Size Function Rate(尺寸函數變化率),保持默認的0.3。
5)定義動網格區域,Define->Dynamic Mesh->Zones…
此時打開了Dynamic Mesh Zones窗口,本例是使用UDF控制翼型上下邊的剛體運動,因此,在Zone Names的下拉菜單中選中airfoil的邊界,在Type中選擇Rigid Body,而編譯好的airfoil UDF已經在Motion UDF/Profile中了,不用管它;在Center of Gravity Location中定義剛體重心的初始位置(在這裡其實該坐標就是轉動點坐標,翼型繞這個點俯仰,本應該設定在1/4弦線點,但由於不清楚模型情況,在此讓翼型繞原點俯仰。);Center of Gravity Orientation定義重力在慣性系中的方向,均保持默認,這兩項如果需要跟蹤物體運動的質心位置變化規律則比較有用,如在6DOF中,這裡由於不清楚模型情況,保持默認。Meshing Options中Cell Height設定為0.001,用於定義局部網格重新劃分時與邊界相鄰網格的理想尺寸,由於不知道網格劃分間距,大致填寫。
到此,動網格已經定義完成,接下來,預覽動網格更新情況。
6)預覽動網格,Solve->Mesh Motion…設置Time Step Size(時間步長)為0.001秒,Number of Time Steps(時間步數)設置為400,之後點擊Preview就可以看動網格的更新情況了。
初始網格如圖:

經0.02秒後的網格:

經0.1秒後的網格:

經0.17秒後的網格:
由以上的圖可以看出,此次網格更新的質量很好,可以用於計算。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/250100.html