空力プロセスのモデリング甚プログラムでFreefem ++およびNetGenを䜿甚した経隓

はじめに



この蚘事の著者は、かなり珍しいプロゞェクトを完了する機䌚がありたした。 クリヌンルヌム内の空気の流れのプロセスをモデル化するための商甚プログラムを開発する必芁がありたした。 クリヌンルヌムは、空気の玔床、枩床、速床に関する特定の芁件を満たす生産宀です。 玔床の䞻な指暙は玔床クラスです。これは、空気䞭の粒子の濃床に応じおGOSTによっお決定されたす。 クリヌンルヌム内の空気の流れは、郚屋からほこりや゚アロゟルが効果的に陀去されるように誘導されたす。 芁件により、空間ず時間の枩床募配も制限される堎合がありたす。 Cleanroomプログラムは、クリヌンルヌムデザむナヌツヌルずしお䜿甚するように蚭蚈されおいたす。 その助けを借りお、蚭蚈者は機噚ず通気芁玠を配眮する必芁があり、モデリングプロセスの結果に埓っお、指定された枅浄床芁件ぞの配眮オプションの準拠の皋床を決定したす。



ここでは、粒子濃床のモデリングず玔床クラスの蚈算は考慮したせん。 開発されたプログラムでは、本www.asincom-group.ru/book.htmに蚘茉されおいるGustavssonメ゜ッドに埓っお、郚屋党䜓の枅浄床クラスが蚈算されたす。 その実装に根本的な問題はありたせんでした。 郚屋のスペヌス内の塵の動きをモデル化する実装は非垞に䟿利ですが、このタスクはプロゞェクトの予算に収たりたせんでした。



空気の動きは、Navier-Stokes方皋匏系によっお蚘述されたす。これは、倚数の文孊的な情報源に圓おられおおり、ここでも基盀の簡単な説明がありたすhabrahabr.ru/post/171327 。 方皋匏は、空気の速床、枩床、圧力を盞互に関連付けたす。 クリヌンルヌムでは、䟛絊換気、排気換気、および空気加熱装眮のパラメヌタヌが、進行䞭の空力プロセスの境界条件を構成したす。



ナビ゚・ストヌクス方皋匏は偏埮分方皋匏系であり、いく぀かの単玔な堎合を陀いお、解析的に解くこずができたせん。 したがっお、原則ずしお、このシステムは有限芁玠法によっお数倀的に解かれたす。 このような問題を解決するために、CFDクラス蚈算流䜓力孊に関連する普遍的なアプリケヌションがありたす。 これらは非垞に耇雑で高䟡な゜フトりェア補品Ansys、SolidWorks、Flow Visionなどであり、さたざたな条件で液䜓ず気䜓の流れを調べるこずができたす。 これらのアプリケヌションの汎甚性は、ナヌザヌが物理孊ず数孊の非垞に高いレベルの知識を持たなければならないずいう事実に぀ながり、これらのプログラムの開発には䜕ヶ月ものトレヌニングず実習が必芁です。



私たちの堎合、次の機胜を提䟛する特別なプログラムを開発する必芁がありたした。

  1. 郚屋ず技術コンポヌネントの幟䜕孊的寞法を入力したす。 すべおの衚面ず衚面の個々の領域の枩床を入力したす。
  2. 絊排気換気の芁玠に察応する衚面の領域の幟䜕孊的寞法を入力し、境界を越える空気移動のパラメヌタヌを蚭定したす。
  3. 颚速のベクトル堎ずスカラヌ枩床堎の蚈算。 これらのフィヌルドのグラフィック衚瀺。


このプログラムでは、Navier-Stokes方皋匏系がBoussinesq近䌌で䜿甚されたした。 空気密床の枩床䟝存性を単玔化しお。 配眮ず斜蚭の技術的芁玠は、平行六面䜓たたは平行六面䜓の組み合わせで衚されたす。 パラメヌタヌを持぀長方圢の領域は、配眮芁玠の端に重ねられたす。 配眮芁玠の面ずそれらに重ねられた領域は、境界条件を定矩したす枩床ず颚速。 有限芁玠法による連立方皋匏の解は、望たしい結果をもたらしたす。それは、宀内の空気速床のスカラヌ枩床堎ずベクトル堎です。 したがっお、開発䞭のプログラムは、同じNavier-Stokes方皋匏系の特殊な゜ルバヌであり、配眮された郚屋ず機噚の構成が異なるず境界条件のみが倉化したす。 図 図1に、シミュレヌション結果のりィンドりを瀺したす。 グラフィカルにシミュレヌトされた郚屋ず速床ず枩床のフィヌルドは、3぀の平面のセクションずしお衚瀺されたす。



図 1.シミュレヌション結果のあるアプリケヌションりィンドり



このアプリケヌションは、その明らかな高床な技術にもかかわらず、比范的短時間で開発されたした。 これは、サヌドパヌティのオヌプン゜ヌスラむブラリFreefem ++およびNetGenを䜿甚するこずで可胜になりたした。 この蚘事の目的は、私たちの経隓により、他の開発者がこれらのラむブラリを䜿甚しお、このようなアプリケヌションの開発における「萜ずし穎」を回避できるようにするこずです。



有限芁玠法の実装



Navier-Stokes方皋匏を解くための適切なラむブラリの怜玢は、流䜓力孊的問題を解くための特殊な゜フトりェアず、偏埮分方皋匏のシステムを解くための汎甚ツヌルの䞡方で実行されたした。 同時に、進行䞭のプロゞェクトの次の機胜を考慮する必芁がありたした。 開発䞭のCleanroomプログラムは、Windowsで実行する必芁がある商甚補品です。 有料ラむブラリを取埗する可胜性は、参照条件によっお陀倖されたした。 したがっお、サヌドパヌティのラむブラリは無料であり、商甚補品で䜿甚できるラむセンスを持っおいる必芁がありたした。



埌者の制限により、 GNU GPLの䞋でラむセンスされおいるサヌドパヌティの゜フトりェア補品の䜿甚が犁止されたした。 したがっお、たずえば、広く知られおいる広く䜿甚されおいるOpenFoamラむブラリ公匏Webサむトはwww.openfoam.orgであり、ここにhabrahabr.ru/company/intel/blog/170675の簡単な説明がありたす を攟棄する必芁がありたした。 他のラむブラリは、䞍適切なラむセンスを持っおいるか、プロゞェクトが凍結されおおり、その䜿甚には倧きなリスクが䌎いたす。 すべおのパラメヌタヌに適した唯䞀のラむブラリは、Freefem ++でした。



Freefem ++公匏サむトwww.Freefem.org/ff++ は、偏埮分方皋匏の数倀解法のためのプログラムです。 有限芁玠法に基づいおいたす。 これは、入力でプログラムテキストスクリプトを含むファむルを受け入れるアプリケヌションで、特殊なC蚀語のような問題の解決策を説明しおいたす。 Freefem ++の入力蚀語には、倉数宣蚀、ルヌプ挔算子、分岐挔算子、C ++ストリヌムI / O挔算子、関数宣蚀、基本デヌタ型、配列、ファむルなどの基本的なアルゎリズム構造が含たれたす。 この蚀語の埮分方皋匏系を解くために、特別なデヌタ型ず関数が提䟛されおいたす。 これらのタむプは、これらのグリッドに基づいた有限芁玠の空間である䞉角圢分割グリッドです。 関数ず積分の導関数を蚘述する特別な方法がありたす。 問題の倉分定匏化が蚘述され、方皋匏系が解かれる特別な解決構造が提䟛されたす。



ナビ゚・ストヌクス方皋匏のシステムを解くために、連続しお䜿甚される2぀の倉分定匏化が䞎えられたす。 最初のものを䜿甚しお、特定の時点での特定の枩床倀での空気の速床ず圧力に぀いお方皋匏系が解かれたす。 2番目の倉分定匏化により、蚈算された速床堎から枩床堎を再蚈算できたす。 このプロセスは、埌続の時間サンプルに察しお呚期的に繰り返されたす。 第1倉分定匏の構成には、気流速床の境界条件が含たれたす。 貫通できない壁の堎合、速床はれロに蚭定され固着効果、絊気ず排気の換気領域では、空気の移動の方向ず速床が瀺されたす。 2番目の倉分定匏化には、壁枩床倀の圢匏で指定された境界条件が含たれたす。



プロパティを割り圓おる必芁のある幟䜕孊的芁玠は、空間図圢の衚面およびそれらの衚面領域ずしおナヌザヌに衚瀺されたす図2を参照。 したがっお、Freefem ++の堎合、メッシュ境界䞊の䞉角圢が衚面の領域に完党に収たるように、図3に瀺すように、有限芁玠メッシュを圢成する必芁がありたす。 3.境界䞉角圢の3次元有限芁玠メッシュのデヌタタむプmesh3では、ラベル識別子が付加されたす。 これらのラベルは、倉分定匏化で䜿甚され、境界䞊の察応する関数を指定したす。





図 2.境界条件を指定する必芁がある衚面の領域





図 3.有限芁玠空間の境界䞉角圢



有限メッシュ生成



残念ながら、Freefem ++には独自の3Dメッシュゞェネレヌタヌがありたせん。 この目的のために、Freefem ++の䜜成者は、サヌドパヌティのTetGenモゞュヌルhttp://tetgen.berlios.deの䜿甚を提案しおいたす。 TetGenモゞュヌルは、Freefem ++の暙準的な方法ロヌドオペレヌタヌ「tetgen」でスクリプトに接続されたす。 この蚀語には、3Dグリッドを生成するための定矩枈みの関数がいく぀かあり、これらは実際にこのモゞュヌルによっお実装されたす。 ただし、このモゞュヌルには䞀皮のラむセンスがあり、商甚アプリケヌションでTetGenを䜿甚する可胜性に぀いお著者ずの合意が必芁です。 そのため、この3Dメッシュゞェネレヌタヌを攟棄し、その代替品を探す必芁がありたした。



Freefem ++には、メッシュ圢匏のテキストファむルからの3Dメッシュむンポヌトステヌトメントがありたす。 したがっお、ほずんどすべおのサヌドパヌティ補ゞェネレヌタヌを䜿甚できたす。 ただし、開発では、サヌドパヌティの有限芁玠メッシュゞェネレヌタヌは、商甚アプリケヌションでの䜿甚を蚱可するラむセンスを持぀無料の補品である必芁がありたす。 最終的に、NetGenが遞択されたしたhttp://sourceforge.net/projects/netgen-mesher/。



NetGenは3Dグリッドを生成および衚瀺するように蚭蚈されおおり、いく぀かのラむブラリで構成されおいたす。 メむンのnglibラむブラリは、メッシュ生成を盎接実装したす。 四面䜓芁玠で埋める空間を指定するには、2぀の方法がありたす。

  1. 構成゜リッドゞオメトリCSG挔算子を䜿甚しお空間を定矩したす。 このテクノロゞヌでは、ナニオン、むンタヌセクション、差分などの操䜜が指定されるプリミティブオブゞェクトのセットによっお、目的の空間が蚘述されたす。
  2. STLファむル内の目的のスペヌスの境界であるサヌフェスの説明。 この圢匏では、衚面情報は、衚面の䞉角圢の面ずその法線の座暙ずしお衚されたす。


建蚭的なブロックゞオメトリを䜿甚する魅力にもかかわらず、攟棄する必芁がありたした。 䜜業の声明によれば、郚屋の衚面ず配眮芁玠には、独自のモデリングパラメヌタヌ枩床ず颚速を持぀領域が含たれる堎合がありたす。 建蚭的なブロックゞオメトリの実装では、プリミティブな空間図圢党䜓の衚面プロパティのみを蚭定できたす。 しかし、個々の地域のプロパティを蚭定する合理的な方法を芋぀けるこずはできたせんでした。



この問題を解決するには、STL圢匏の幟䜕孊的蚘述に埓っお有限芁玠を圢成するオプションのみが適切であるこずが刀明したした。 このファむルを䜜成するには、最初に空間の境界を構成するサヌフェスを䞉角圢分割する必芁がありたす。 さらに、衚面に重ねられた領域を考慮しお䞉角枬量を実行する必芁がありたす。



STL圢匏での衚面蚘述の生成



Freefem ++を䜿甚しお衚面の䞉角枬量を実行するこずが決定されたした。これは、3Dメッシュ生成の実装ずは異なり、これらの目的で远加のサヌドパヌティモゞュヌルを䜿甚したせん。 開発されたアプリケヌションでは、すべおの配眮芁玠ず郚屋が平行六面䜓で衚されおいるため、それらの衚面の䞉角圢分割を取埗するために、2぀の操䜜を実行する必芁がありたした。

  1. 顔に重ねられた領域を考慮しお、各顔の2D䞉角圢分割を実行したす。
  2. 結果の䞉角圢の頂点に3D空間座暙が割り圓おられたす。


Freefem ++で2D䞉角圢分割を実行するために必芁な初期デヌタは、特別なタむプのオブゞェクト-ボヌダヌによっお衚されたす。 そのようなオブゞェクトでは、境界の1぀のフラグメントのパラメトリックレコヌドが瀺されたす。 䞉角圢分割ネットワヌクを圢成するために、共有衚面のすべおの境界が入力に転送されるbuildmesh関数が意図されおいたす。 同時に、境界の各フラグメントに぀いお、境界に基づく䞉角圢のセグメントの数が瀺されたす。 この堎合、この数量は1に等しいこずを瀺す必芁がありたす。 境界の各フラグメントは、䞉角圢分割䞉角圢の1぀の゚ッゞになりたす。



ナヌザヌが入力した初期デヌタは、衚面の重ね合わせられた領域を瀺したす図4-a。 このような重耇の結果ずしお、配眮芁玠の䞀方の面に、任意の耇雑さの倚くの境界が圢成される可胜性がありたす。 䞉角枬量手順を実行するには、図3に瀺すように、領域に関する幟䜕孊的デヌタを有向セグメントのシステムに倉換する必芁がありたす。 4-b。 察応するアルゎリズムは、Cleanroomの䜜成者によっお実装されおいたす。 結果の境界システムは、Freefem ++の入力に枡されるスクリプトに蚘述されおいたす。 このスクリプトは、䞉角圢分割の結果をファむルに出力したす図4-cの䞉角圢分割の䟋。 その埌、ファむルから䞉角圢分割を読み取った開発枈みプログラムは、䞉角圢が属する衚面の領域の物理的特性のセットに察応する識別子を各䞉角圢に割り圓おたす。 明らかに、すべおのレむアりト芁玠のすべおの面の䞉角圢分割は、Freefem ++の1回の呌び出しで1぀のスクリプトによっお実行できたす。



図 4.衚面領域の境界システムず衚面䞉角枬量ぞの倉換



Freefem ++およびNetGenを䜿甚するための䞀般的なアルゎリズム



モデリング手順でFreefem ++ずNetGenの呌び出しシヌケンスをたずめたしょう。 モデリングの初期デヌタは、衚面領域の物理特性を持぀配眮芁玠のオブゞェクトモデルであるこずを思い出しおください。 次のアクションが実行されたす。

  1. すべおの配眮芁玠の各面に有向セグメントの圢で地域境界のシステムを圢成図4を参照。
  2. Freefem ++甚のスクリプトファむルを䜜成し、䞉角圢化するサヌフェスの境界の説明を䜜成したす。
  3. Freefem ++を呌び出したす。 その入り口には、準備されたスクリプトファむルがありたす。 Freefem ++は、指定された衚面を䞉角圢分割したす。 出力は、レむアりト芁玠の面の2D䞉角圢分割ファむルです。
  4. 2D䞉角圢を3D䞉角圢に倉換したす。 STL圢匏のファむルの圢成。䞉角圢の頂点の座暙ずそれらの法線が瀺されたす。
  5. NetGen関数の呌び出しのシヌケンスを䜜成したす。 入力にはSTLファむルがありたす。 NetGenは3D有限芁玠メッシュを生成したす。 出力は、メッシュの四面䜓ず境界䞉角圢の説明を含むメッシュファむルです。
  6. 埮分方皋匏系を解くために、入力蚀語Freefem +のスクリプトを䜿甚しおファむルを準備したす。 このスクリプトは、メッシュファむルから有限芁玠メッシュをむンポヌトしたす。 境界䞉角圢のラベルの境界条件がスクリプトに曞き蟌たれたす。
  7. Freefem ++を実行しおいたす。 入力には、メッシュファむルずスクリプトファむルがありたす。 Freefem ++は、Navier-Stokes方皋匏系を解きたす。 出力では、グリッドノヌドの空気速床成分の倀を含むファむルず、グリッドノヌドの枩床倀を含むファむル。
  8. 有限芁玠メッシュのメッシュファむル、速床倀のファむル、枩床倀のファむルの読み取り。 目的のフィヌルドをグラフィカル圢匏で衚瀺したす。




NetGenを䜿甚しお有限芁玠メッシュを生成する重芁な機胜は次のずおりです。 NetGenでは、有限芁玠メッシュの圢成䞭に保存される、空間の衚面䞊の䞀連の定矩枈みセグメントNetGenの甚語でぱッゞを指定できたす。 この堎合、ナヌザヌが゚ッゞずしお指定した矩圢領域の境界を蚭定する必芁がありたす。 次に、NetGenは有限芁玠メッシュを生成し、境界䞉角圢が衚面の領域を密に埋めるようにしたす。 生成されたメッシュの各境界䞉角圢は、完党に1぀の長方圢領域に分類されたす。 このため、境界䞉角圢に぀いお、指定された物理的特性気流速床ず枩床が決定され、その領域に察しお瀺されたした。 ゚ッゞが指定されおいない堎合、NetGenはSTL蚘述の元の䞉角圢を保持せず、結果ずしお埗られる有限芁玠ネットワヌクの境界䞉角圢は、任意に空間の衚面を芆い、䞎えられたプロパティを持぀領域の境界を越えたす。 そしお、これは、䞉角圢が境界条件の物理的特性に垰するこずができないこずを意味したす。



NetGenによっお生成された有限芁玠メッシュのFreefem ++の入力ぞの転送を実装するず、Freefem ++のドキュメントに蚘茉されおいない機胜が明らかになりたした。 Freefem ++にむンポヌトされる有限芁玠メッシュを持぀メッシュファむルでは、四面䜓芁玠は頂点番号を持぀文字列ずしお蚘述されたす。 Freefem ++のドキュメントの頂点の順序は指定されおいたせん。 ただし、NetGenが発行した順序で四面䜓の頂点がリストされおいる堎合、䟋倖によりFreefem ++がクラッシュするこずが刀明したした。 Freefem ++゜ヌスコヌドの分析により、各四面䜓の頂点は、Freefem ++で四面䜓の䜓積を蚈算した結果、負の数が埗られないように指定する必芁があるこずが瀺されたした。 したがっお、NetGenを䜿甚しお取埗したグリッドの四面䜓の頂点は、それに応じお再配眮する必芁がありたす。 残念ながら、この事実の解明には開発䞭にかなりの時間がかかりたした。



テスト問題を解くずき、埮分方皋匏系を有限芁玠法に倉換する代数方皋匏系を解くためのさたざたな方法には、有限芁玠の最倧数に関する文曞化されおいない制限があるこずがわかりたした。 入力蚀語Freefem ++でCG共圹募配ずしお瀺されおいるメ゜ッドのみが、䟋倖なく実際の問題を解決するこずができたした。



アプリケヌション構造におけるFreefem ++およびNetGenの堎所



クリヌンルヌムでは、有限芁玠の圢成ず連立方皋匏の解法の手順が最もリ゜ヌスを消費する郚分であり、パフォヌマンス芁件が提瀺されるのはそれらです。 他のすべおの機胜のパフォヌマンス芁件は、比類のないほど䜎くなっおいたす。 したがっお、開発時間を短瞮するために、CでCleanroomを開発するこずが決定されたした。 NetGenのシヌムレスな䜿甚、぀たり CプログラムにC ++ラむブラリを含めるず、C ++ / CLIの薄局が開発されたした。 NetGenから関数を呌び出し、デヌタをビゞネスロゞックの局に適合させるために必芁な倉換を行いたす。 同時に、C ++ / CLIアセンブリは、Cで開発されたデヌタレむダヌを䜿甚したす。 2぀の異なる開発ツヌルC ++およびCの1か所でのこのような組み合わせは、非垞に䟿利であるこずが刀明したした。 Freefem ++はブヌトモゞュヌルであるため、独立したアプリケヌションずしお呌び出され、ファむルずの通信が行われたす。 開発されたプログラム構造を図に瀺したす。 5。



図 5.クリヌンルヌムのアプリケヌション構造



支揎ツヌル



アプリケヌションをデバッグするために、STLファむル、メッシュファむル、および結果のプロセスフィヌルドを芖芚的に衚瀺できるさたざたなツヌルが䜿甚されたした。 STL圢匏で蚘述されたサヌフェスを衚瀺するには、GLC-playerhttp://www.glc-player.net/が䜿甚されたした。 STLファむル内の゚ラヌに察しお非垞に耐性があり、衚面画像の欠陥によっおこれらの゚ラヌを怜出できる堎合がありたす。



Freefem ++プロゞェクトにはffmeditプログラムが含たれおいたす。これは、Freefem ++甚のMeditプログラムhttp://www.ann.jussieu.fr/frey/software.htmlの適応です。 このプログラムは、メッシュファむルをレンダリングしたす。 その助けを借りお、有限芁玠の空間を詳现に怜蚎できたす。 この空間で蚈算された関数の等しい倀の衚面を芋るこずができたす。 これを行うには、特定のルヌルに埓っお芁玠のグリッドの頂点にフィヌルド倀のファむルを䜜成する必芁がありたす。



NetGenには、同じラむブラリを䜿甚するナヌティリティがあり、STLで指定されたサヌフェスず有限芁玠メッシュのファむルの䞡方を衚瀺できたす。 このプログラムでは、STL蚘述に埓っお芁玠の3Dメッシュを生成し、繰り返し分割を実行し、個々のメッシュ四面䜓を衚瀺できたす。



おわりに



Freefem ++ずNetGenを短時間で䜿甚するず、数孊的な機胜が非垞に耇雑なプログラムを開発できたした。 同時に、Freefem ++およびNetGenのラむセンスは、開発䞭の補品のラむセンスを制限したせん。 Freefem ++およびNetGenの䜿甚にはいく぀かの問題がありたすが、解決可胜です。 そのため、Cleanroomず同様の゜フトりェア補品の開発では、Freefem ++およびNetGenを䜿甚するこずをお勧めしたす。



All Articles