737
回編集
(→数値演算) |
|||
768行目: | 768行目: | ||
=== 改良された任意メッシュインターフェース (AMI) === | === 改良された任意メッシュインターフェース (AMI) === | ||
AMI コードは大幅なリファクタリングが行われ、オプションのトポロジカル変更を含むように拡張されました。 | |||
'''AMI コードリファクタリング''' | |||
AMIコアが更新され、ユーザーレベルの下位互換性を維持しつつ、より大きな制御と簡単なコードメンテナンスを可能にしました。AMIコントロールが公開され、constant/polyMesh/boundaryファイルで指定できるようになりました。 | |||
<syntaxhighlight> | |||
AMI1 | |||
{ | |||
type cyclicAMI; | |||
inGroups 1(cyclicAMI); | |||
nFaces 2880; | |||
startFace 276288; | |||
matchTolerance 0.0001; | |||
transform noOrdering; | |||
neighbourPatch AMI2; | |||
// Exposed entries | |||
AMIMethod faceAreaWeightAMI; | |||
restartUncoveredSourceFace yes; | |||
} | |||
</syntaxhighlight> | |||
追加の改良点。 | |||
directAMIメソッドは廃止されました。新しい nearestFaceAMIメソッドは、低コストで同等の機能を提供します。 | |||
faceAreaWeightAMIメソッドで使用されていた顔照合手順が、バッフルを「歩く」ことができるようになり、より完全なアドレッシングと重みが提供されるようになりました。 | |||
'''トポロジカル変化を伴うAMI''' | |||
注意: これはベータレベルのコードで、妥当なテストが行われ、堅牢であることが示されています。 | |||
このリリースでは、cyclicAMIとcyclicACMIパッチにトポロジカル変更機能が追加されました。これにより、AMIの多対多のアドレッシングが、Aguerreらによって記述されたアプローチを使用して、結合されたパッチの両側の面間で1対1の面のマッチングを構築するために使用されます(参考文献参照)。 | |||
トポロジカルな変更は、constant/dynamicFvMeshDictファイルで新しいモーションソルバーを選択したときに有効になります。 | |||
<syntaxhighlight> | |||
dynamicFvMesh dynamicMotionSolverFvMeshAMI; | |||
</syntaxhighlight> | |||
注意: これは将来のリリースでは、「標準」のdynamicMotionSolverFvMeshモデルに吸収される可能性があります。 | |||
この効果は、AMIパッチ全体での保存を確実にし、力とモーメントの予測を改善するために圧力の数値ノイズを除去することにあります。 | |||
既知の問題 | |||
restart は現在のところトポロジカルな変更には対応していません。 | |||
ソースコード | |||
FOAM_SRC/meshTools/AMIInterpolation | |||
チュートリアル | |||
FOAM_TUTORIALS/incompressible/pimpleFoam/laminar/mixerVesselAMI2D/mixerVesselAMI2D-topologyChange | |||
参考文献 | |||
H.J. Aguerre, S. Marquez Damian J.M. Gimenez, N.M. Nigro, Conservative handling of arbitrary non-conformal interfaces using an efficient supermesh, Journal of Computational Physics 335(15)21-49. 2017. https://doi.org/10.1016/j.jcp.2017.01.018 | |||
謝辞 | |||
方法論を我々に注目させ、これらの開発を通して多くの有益な議論とテストを行ってくれたHoracio Aguerre氏とSantiago Marquez氏に多くの感謝の意を表します。 | |||
=== 新しいOpenQBMMコミュニティモジュール === | |||
OpenQBMMモジュールは、母集団バランスモデリングと多相流のための直交法ベースのモーメント法で構成されています。OpenQBMMは、キャリア流体中の非慣性粒子の最も単純なサイズ変化から、気液系の気泡や気粒子流中の慣性粒子を含むより複雑なケースまで、多分散多相流を記述するための手法を実装しています。これらの機能は、一連のソルバーで実装されています。 | |||
pbeFoamは、単一の制御体積で母集団バランス方程式を解きます。このソルバーは、母集団均衡方程式のカーネル関数をテストしたり、空間的に均質な問題を解くのに役立ちます。例題はOpenQBMM/validation/pbeFoamにあり、E. Madadi-Kandjani, A. Passalacqua, An extended quadrature-based moment method with log-normal kernel density functions, Chemical Engineering Science. 131 (2015) 323339. https://doi.org/10.1016/j.ces.2015.04.005。 | |||
pbeTransportFoamを使用すると、凍結した流れ場を使用して、事前に課された流れの動きを持つ母集団均衡方程式を解くことができます。検証事例はOpenQBMM/validation/pbeTransportFoam/serraTaylorCouetteにあり、A. Passalacqua, F. Laurent, E. Madadi-Kandjani, J.C. Heylmun, R.O. Fox, An open-source quadrature-based population balance solver for OpenFOAM, Chemical Engineering Scienceで議論されています。176 (2018) 306318. https://doi.org/10.1016/j.ces.2017.10.043。 | |||
buoyantPbePimpleFoamは、母集団均衡方程式を持つ過渡的な流れをモデル化することを可能にします。 | |||
polydisperseBubbleFoamは、合体と破断による気泡サイズの進化を伴う気液流に特化したソルバーです。気泡は速度分布を持つことができ、多面性も考慮され、同じ制御体積内で異なるサイズの気泡が異なる速度を持つことができます。例題はOpenQBMM/validation/polydisperseBubbleFoamにありますが、実装についてはJ.C. Heylmun, B. Kong, A. Passalacqua, R.O. Fox, A quadrature-based moment method for polydisperse bubbly flows, Computer Physics Communicationsの論文で議論されています。244 (2019) 187204. https://doi.org/10.1016/j.cpc.2019.06.005。 | |||
denseAGFoamは、密な気体粒子流のための異方性ガウスモデルを実装しています。実装の詳細は、B. Kong, R.O. Fox, A solution algorithm for fluid-particle flows across all flow regimes, Journal of Computational Physics. 344 (2017) 575594. https://doi.org/10.1016/j.jcp.2017.05.013。 | |||
velocityDistribitionTransportのソルバーは、速度分布のための直交法に基づくモーメント法を実装しています。これらの手法は、粒子や液滴のジェットが交差するような非平衡速度分布を持つ分散流を記述するのに適しています。diluteVdfTransportFoamソルバーは、担体流体に結合していない分散相のための直交法に基づく速度分布輸送アルゴリズムを実装しています。分散相とキャリア流体の間の一方向結合は、oneWayCoupledVdfTransportFoamを実装しています。両方のソルバーでは、粒子径は空間と時間で進化することができ、粒子は衝突を介して相互作用することができます。 | |||
ソースコード | |||
$WM_PROJECT_DIR/modules/OpenQBMM | |||
チュートリアル | |||
$WM_PROJECT_DIR/modules/OpenQBMM/tutorials | |||
バリデーションケース | |||
$WM_PROJECT_DIR/modules/OpenQBMM/validation | |||
帰属 | |||
Alberto PassalacquaとOpenQBMMコミュニティ | |||
=== 新しい密行列固有分解ソルバー.固有行列 === | |||
新しい EigenMatrix ソルバーは,対角化可能な密行列,非対称行列,実数正方行列の eigendecomposition を行います. | |||
EigenMatrix は行列を正規形に分解します. | |||
固有値の方程式,すなわち固有値問題は,次のように書かれます. | |||
Av = λv | |||
ここで | |||
A : m x m 次元の対角化可能な正方行列 | |||
v : 次元 m の(非ゼロではない)ベクトル(右固有ベクトル | |||
λ : v(固有値)に対応するスカラー | |||
Aが対称であれば、次の関係を満たす。 | |||
A = v * D * v^T | |||
孰れ | |||
D : 対角実固有値行列 | |||
v : 直交固有ベクトル行列 | |||
Aが対称でない場合、Dはブロック対角行列となり、実数固有値は1×1ブロック内の対角線上に存在し、複素数固有値は2×2ブロック内に存在します。 | |||
vの列は固有値に対応する固有ベクトルを表し、固有値の方程式を満たします。行列の固有値は一意であっても,行列の固有ベクトルは一意ではない.同じ固有値に対して、対応する固有ベクトルは、一意ではない項目を持つ実数または複素数であることがあります。さらに、A = v ∗ D ∗ vT の方程式の有効性は v の条件数に依存しますが、これは条件付きではない場合もあれば、無効な方程式の場合は特異値になる場合もあります。 | |||
このソルバーの最小動作例を以下に示します。 | |||
<syntaxhighlight> | |||
// A is a m-by-m SquareMatrix<scalar>. | |||
const EigenMatrix<scalar> EM(A); | |||
const DiagonalMatrix<scalar>& realEigenvalues = EM.EValsRe(); | |||
const DiagonalMatrix<doubleScalar>& imagEigenvalues = EM.EValsIm(); | |||
const SquareMatrix<scalar> eigenvectors(EM.EVecs()); | |||
const SquareMatrix<complex> complexEigenvectors(EM.complexEVecs()); | |||
</syntaxhighlight> | |||
ソースコード | |||
FOAM_SRC/OpenFOAM/matrices/EigenMatrix.C | |||
チュートリアル | |||
$FOAM_APP/test/matrix/EigenMatrix/Test-EigenMatrix.C | |||
帰属 | |||
本実装は、OpenQBMMのeigenSolverクラス(2019)の内部機構を変更せずに統合したものです。したがって、入力-プロセス-出力演算の点では、EigenMatrixクラスとeigenSolver(2019)クラスの違いは期待できないはずです。 | |||
OpenQBMMのeigenSolverクラスは、NISTとMathWorksが1998年から2012年までに開発したパブリックドメインライブラリであるTNT/JAMAの実装からほぼ完全に派生しており、http://math.nist.gov/tnt/index.html で入手可能です(Geturled June 6, 2020)。彼らの実装はEISPACKをベースにしています。 | |||
OpenCFDはOpenQBMMへの貢献者、特にAlberto Passalacqua博士(アイオワ州立大学)に感謝します。 | |||
== 見出し文 == | == 見出し文 == |