【OpenFOAM】snappyHexMesh
個人學習記錄。
原創內容請查看以下鏈接。
參考
? ?網格劃分篇-SnappyHexMesh (之一)
? ?網格劃分篇-SnappyHexMesh(之三)
個人經驗
snappyhexmesh用于從三角化曲面或簡單基本形狀的輸入自動創建高質量的三維十六進制主網格。
特點
? ? 完全并行執行
? ? 基本網格以串行方式創建,然后分發到n個處理器
? ?真正的并行性能取決于網格的組成,但在復雜的幾何結構上可以快速創建數以千萬計的單元
? ?通過ptScotch和動態負載平衡實現最佳分解,從而提高性能
? ?表面、體積、邊緣細化
? ?基于輸入幾何曲率的曲面精化
? ?基于基本體對象或其他導入的幾何體的體積求精(內部/外部/距離)
? ?基于eMesh描述的邊緣細化
? ?特征邊緣和表面細節保護
? ?在邊、曲面和體積優化和特征捕捉階段創建的自動曲面網格
? ?用戶提供STL、OBJ或NASTRAN曲面網格文件
? ?曲面細節由曲面幾何細節和局部單元大小控制
? ?分區網格
? ?允許為源條款創建cellZones。例如 多孔介質,MRF和其他fvOptions
? ?通過AMI修補程序自動生成耦合,實現共軛傳熱和/或動態網格情況的多區域網格劃分
? ?墻層附加
? ?為了更好地模擬近壁現象。例如 邊界層形成
? ?要指定的近壁第一單元高度,總層厚度,層數等
? ?質量保證的最終網格將在OPENFOAM運行
生成流程
? ?1. 使用blockMesh工具(或任何其他六面體網格生成器)創建背景網格
? ?2. 使用surfaceFeatureExtract實用程序提取表面上的特征
? ?3. 設置snappyHexMeshDict輸入字典
? ?4. 以串行或并行方式運行snappyHexMesh
背景網格(blockMesh)
全局參數(Global)
? ?snappyHexMesh采用自上而下生成網格的方法,即先生成求解域內體網格,在將體網格擬合到幾何表面。
? ?全局性參數設置主要包含全局網格細化控制參數(castellatedMesh-Controls)與面貼合參數設置(snapControls)。
? ?全局網格細化參數
? ?全局網格細化參數在castellatedMeshControls中設置,其目的為細化背景網格,通過細化背景網格以使幾何特征與幾何表面上擁有一定網格量,以提高幾何特征捕捉的準確性。同時通過參數設置,保證網格細化時尺寸變化盡量平緩。
? ?完整命令輸入示例如下:
castellatedMeshControls
{
maxLocalCells 10500000;
maxGlobalCells 80000000;
minRefinementCells 1;
maxLoadUnbalance 0.2;
nCellsBetweenLevels 3;
resolveFeatureAngle 30;
allowFreeStandingZoneFaces false;
locationInMesh (0 0 0);
features
( … );
refinementSurfaces
{ … }
refinementRegions
{ … }
}
其中features、refinementRegions、refinementSurfaces為局部網格細化功能,會在后面章節詳細講解。本章節主要針對網格細化時全局性優化算法控制參數。
? ?maxGlobalCells 全局最大網格量 網格細化過程中的最大網格數量。避免劃分網格量太大,導致計算機內存溢出。當網格量超過此值時,細化過程立即終止。此時,局部細化功能可能終止運行(例如,未執行某些體域或面域的細化)。
? ?注:其最大網格量是在網格創建步驟中,未去除計算域外單元時的總單元數。最終生成的單元總數可能比此值小。
? ?maxLocalCells 單核最大網格量 該參數主要應用于網格并行計算,指定了細化網格過程中每個處理器處理的最大數量網格數。設置合理的單核最大網格量可極大地提高網格并行計算效率,有助于平衡每個處理器的網格計算量。若太小將導致處理器間迭代次數增加,計算效率降低。如果單核處理實際單元數量大于該設定參數,則網格分配算法由平衡細化后單元數控制(默認算法)改為加權平衡細化前單元數控制。固設置該參數時請保證一定的富余量,經常重新平衡每個處理器計算量將減慢網格生成過程。
? ?注:在大型集群網格并行計算時,從最優單核計算效率上考慮,單核單線程網格計算量可控制在3-5十萬個網格之間。
? ?maxLoadUnbalance 最大負載平衡參數 該參數主要應用于網格并行計算。用戶可通過設置該值,以允許各個處理器間網格計算負載一定程度上不均衡。當該參數值為0時,即強制負載平衡,即各處理器間處理的網格量嚴格保持單元總數/計算核數。較低的值(例如0)可能會導致系統頻繁的均衡網格負載量。而參數值設置為1時,則完全禁用網格均衡操作。
? ?minRefinementCells 最小細化單元數 該參數指定了需細化特征的最小單元數。若特征上網格單元數量小于該參數,則停止對其細化。例如:進行表面細化算法時,軟件可能會對小特征面上幾個單元網格進行大量細化迭代,占用了較多計算資源,而細化后的網格質量并不理想。用戶可以通過該參數,停止其細化迭代。
? ?注意:除非要細化表面上沒有網格單元,否則至少要執行一次迭代。
? ?nCellsBetweenLevels 緩沖層數 snappyHexMesh網格拆分采用八叉樹法,在網格等級相差較大區域,網格尺寸大小變化比較劇烈。該參數指定不同細化級別之間的緩沖區體網格層數,使網格大小變化更平緩,該參數值必須大于或等于1。若用戶設置參數值為1,則表示不添加過渡區域。越大的值可使得網格大小過渡越平緩,但將導致網格量增加。
? ?注:建議參數值設為3,既保證了不同單元等級間網格過渡性,也將網格數量控制在可接受范圍內。
? ?resolveFeatureAngle 自動檢測角 若用戶想自動加密相交面、邊以及曲率較大的面、邊時,可使用resolveFeatureAngle參數。當曲率變化角超過該參數值時,特征區域網格使用最大面細化等級,而低于此角度的特征均采用最小面細化級別。默認參數值為30,參數值設置為360時,表示關閉此功能。
? ?該參數生效的前置條件:1、面細化參數中最小和最大細化等級需不同。2、面貼合過程中特征捕捉需采用隱式方法。
? ?locationInMesh 網格域控制點 snappyHexMesh網格劃分方法需要用戶先提供一套背景網格,然后根據用戶導入的封閉幾何文件劃分網格。在此過程中,用戶可通過設置網格域控制點(locationInMesh)參數,指定需要保留背景網格表面與封閉幾何表面之間的網格,還是封閉幾何內部的網格。
? ? 保留區域網格中需包含指定的參數點,該點的位置不能和網格單元的面或邊重合。
? ?allowFreeStandingZoneFaces 允許有獨立面 該參數定義是否允許幾何中有獨立的面存在。若值為false,則表示在面加密(refinementSurfaces)中用戶指定的faceZones僅位于相應cellZones的邊界上,作為不同域之間交界面。若值為true,則允許此faceZones作為獨立面域(例如:擋板界面等)。如果用戶沒有指定faceZones,則該參數不生效。
? ?features 特征邊
? ?定義特征邊文件(.eMesh),并且指定特征邊的細化等級。軟件根據用戶設置的參數對特征邊進行細化,以提升幾何特征邊的捕捉成功率。特征邊可通過surfaceFeatures工具來提取。
? ?refinementSurfaces 面加密
? ?面加密是針對與幾何表面相交的體網格進行加密,以保證后續面貼合的準確性。面加密相關參數設置包括幾何體名稱、細化等級(Level),最小、最大細化等級(levelMin, levelMax)。并允許用戶依據幾何表面指定面域(faceZone ),以及依據封閉幾何面指定體域(cellZone )。
? ?面加密中,不僅可以對幾何所有表面進行初步面加密,也可以針對特定面網格進一步細化。
? ?初步整體面加密時,只需在幾何名稱下設置參數level,命令示例如下:
refinementSurfaces
{
? lmt_logo
? {
? ? level(5 5);
? ?regions { }
? }
}
? ?針對幾何中某個特征面進行面加密設置,參數如下圖所示:
refinementSurfaces
{
? lmt_logo
? {
? ? level(5 5);
? ? regions
? ? {
? ? ? Face_12//(這個面設如何定義的?)
? ? ? { level(6 6) }
? ? }
? }
}
面加密(refinementSurfaces)
? ? 面貼合(snapControls)
?? 面貼合是將體網格節點移動到幾何表面上,貼合體網格中鋸齒狀表面。軟件優先保證網格達到最低質量標準,其次才考慮網格的貼體性。
?? 參數功能包含:控制體網格貼合到幾何面上的迭代次數nSolveIter、捕捉面特征距離tolerance等。命令輸入示例如下:
snapControls
{
nSmoothPatch 5;
nSmoothInternal 5;
tolerance 2.0;
nSolveIter 30;
nRelaxIter 5;
nFeatureSnapIter 10;
implicitFeatureSnap false;
explicitFeatureSnap true;
multiRegionFeatureSnap false;
…
}
? ?tolerance 捕捉點最大相對距離
? ?該參數指定貼合算法中捕捉與特征面相關網格節點的最大相對距離,實際捕捉距離為tolerance參數值乘以相鄰體網格尺寸。參數值必須大于或等于1,如果值太低,則可能無法使偏差較大的網格節點移動到幾何表面上。較高的值有助于增加幾何的捕捉范圍,但如果參數值設置過高,則有可能捕捉到與表面無關的網格節點。建議值為2-5之間。
? ?nSolveIter 網格貼合最大迭代次數
? ?該參數指定了網格貼合算法的最大迭代次數。較高的值會提高網格的質量,網格一致性更好,但網格劃分時間會更長。簡單模型可以將該參數值設置為100,若貼合后網格質量不太理想,可嘗試將該參數值增加到300。
? ?nSmoothPatch 面平滑迭代次數
? ?該參數指定了表面上網格貼合的平滑迭代次數。增加迭代次數可以使曲面上網格平滑、貼合性更好,且能降低曲面上網格的歪斜率,但可能導致曲率突變特征(如直角等)弱化。參數值設置為0,表示保留初始網格外形。建議值為5。
? ?nSmoothInternal 體網格平滑迭代次數
? ?在不同細化等級網格間,軟件采用多面體網格過渡。初始的多面體網格將產生30度以上的非正交性。通過使用內部網格平滑處理的迭代,以減小細化過渡區域多面體網格的非正交性(如下圖中紅框標識部分)。
? ?在執行網格平滑迭代時,邊界面網格平滑迭代nSmoothPatch將與內部體網格平滑迭代nSmoothInternal聯合使用。平滑迭代順序為優先執行一次面平滑迭代(nSmoothPatch),再執行一次體網格平滑迭代(nSmoothInternal),以此循環。若用戶設置nSmoothInternal參數值大于nSmoothPatch值時,平滑迭代次數統一采用nSmoothPatch參數值。默認值為零,表示禁用體網格平滑迭代。使用此功能時,建議參數值與面平滑迭代(nSmoothPatch)參數值一致。
? ?nRelaxIter 貼合松弛迭代次數
該參數指定貼合過程中松弛迭代次數,用以消除質量較差的單元或網格節點。如果迭代完成后網格仍存在質量較差單元,則用戶可以嘗試增加此迭代次數,較高的值將確保更好的網格質量,但會花費更多計算時間。建議值為5-8之間。
? ?features 特征捕捉方法
? ?在表面貼合步驟中,需保證網格節點捕捉到幾何特征。通常表面貼合過程中,點只需沿垂直于表面的方向捕捉特征。但在邊緣的位置捕捉方式更復雜,需要更多的迭代次數。SnappyHexMesh提供了兩種特征捕捉方法,顯示(explicitFeatureSnap)與隱式(implicitFeatureSnap)特征捕捉。用戶通過輸入true或者false值,來開啟或者關閉此功能。
? ?其中顯示特征捕捉方法需要用戶自定義特征邊文件(.eMesh),并且指定特征邊的細化等級(通過castellatedMeshControls子字典中features參數指定)。軟件根據用戶設置的參數對特征邊進行細化,以提升用戶關注幾何特征邊的捕捉成功率。
? ?隱式方法不需要用戶提取幾何特征邊,其特征識別自動化程度優于顯示特征捕捉方法。它使用全局細化參數中resolveFeatureAngle參數識別曲面幾何特征(例如:面的相交線、曲率變化較大的曲面特征)。但在尖角特征或者擋板界面處,顯示方法捕捉特征效果優于隱式方法。
? ?現通過以下案例來展示兩種捕捉方式的區別,將方盒模型頂面改為帶較高曲率變化的曲面(如下圖幾何模型展示),其用戶自定義幾何特征線(.eMesh文件)如下圖所示。
? ?nFeatureSnapIter 特征邊捕捉迭代次數
? ?該參數指定了特征捕捉迭代次數,以將網格點捕捉到表面邊緣。如果在nFeatureSnaplter迭代后局部特征區域網格沒有達到足夠的質量標準,則取消該區域特征邊捕捉并恢復到之前狀態。未指定該參數,特征捕捉功能將被禁用。建議參數值為10。
? ?nFaceSplitInterval 面拆分迭代
? ?當系統執行完特征邊捕捉迭代步驟后,若網格邊緣與特征邊未完全對齊,則有可能在特征邊處網格產生凹面。從而導致在添加邊界層時,其投影體網格的非正交性增大。如果體網格不滿足質量要求,則取消該處邊界層生成。用戶可以嘗試使用nFaceSplitInterval參數優化對齊特征邊處網格。需注意該迭代為間隔若想進一步提高邊界層覆蓋率,可在addLayerControls字典中配合使用layerTerminationAngle和detectExtrusionIsland參數。
nFaceSplitInterval參數默認值為-1(禁用),使用建議參數值設置為特征邊捕捉迭代(nFeatureSnaplter)次數的一半。
? ?multiRegionFeatureSnap 多域特征捕捉
? ?該參數用于捕捉多域網格間的特征面,這對于具有多個區域(例如流體區域和固體區域)的網格進行共軛傳熱模擬或類似操作很重要。該參數生效的前置條件為采用顯示特征捕捉方法explicitFeatureSnap。使用該參數時,它會加強特征面兩邊網格貼合,即內部區域和外部區域,這可能會導致特征面處網格歪斜率上升。用戶通過輸入參數值true或者false,來開啟或者關閉此功能。
總結
以上是生活随笔為你收集整理的【OpenFOAM】snappyHexMesh的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: three.js 3D室内设计 -
- 下一篇: ZBrush中Nudge推动笔刷介绍