737
回編集
(→前処理) |
(→数値) |
||
656行目: | 656行目: | ||
= 数値 = | = 数値 = | ||
== コミュニティへの貢献 k-omega SST モデルの新しいアドジョイント == | |||
Spalart-Allmaras モデルの既存のアドジョイントを補完するために、k-ω SST 乱流モデルの新しいアドジョイントが利用可能になりました。 | |||
乱流の凍結」仮定、つまり最適化を通じて形状が変化しても乱流粘性場が変化しないと仮定すると、感度微分の計算が誤って行われることがあります。一例として、「凍結乱流」仮定と完全微分k-ω SSTモデルを使用してアハメド本体の表面で計算された抗力感度マップを以下に示しますが、乱流を微分しない場合に感度マップの符号が変化する領域があることが分かります。 | |||
これをさらに進めて、「凍結乱流」(FT)と「微分化乱流」(DT)で最適化を行うと、この場合のk-ω SSTモデルを微分化する必要性が浮き彫りになります。 | |||
DT法では20回の最適化で抗力が6%以上減少しましたが、FT仮定に基づく最適化では4回目で発散してしまいました。 | |||
この研究は,Kavvadiasらの研究に基づき,多くの微分演算子の離散化と,原始モデルで採用されている壁関数のアドジョイントの定式化を変更したものである. | |||
ソースコード | |||
* $FOAM_SRC/optimisation/adjointOptimisation/adjoint/turbulenceModels/incompressibleAdjoint/adjointRAS/adjointkOmegaSST | |||
チュートリアル | |||
* $FOAM_TUTORIALS/incompressible/adjointOptimisationFoam/shapeOptimisation/naca0012/kOmegaSST/lift | |||
* $FOAM_TUTORIALS/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/kOmegaSST/opt | |||
参考文献 | |||
* Kavvadias, I., Papoutsis-Kiachagias, E., Dimitrakopoulos, G., & Giannakoglou, K. (2014). The continuous adjoint approach to the k– SST turbulence model with applications in shape optimization. Engineering Optimization, 47(11), 1523-1542. <nowiki>https://doi.org/10.1080/0305215X.2014.979816</nowiki> | |||
アトリビュート | |||
* 参考文献にあるように、最初の実装は、Ioannis Kavvadias博士がPCOpt/NTUAの博士課程で行ったものです。 | |||
* 現在のバージョンはPCOpt/NTUAとFOSS GPによって刷新され、OpenCFDとのコラボレーションによって統合されたものです。 | |||
== コミュニティへの貢献:アドジョイント最適化の更新 == | |||
アドジョイント最適化ライブラリが更新され、3つの主要な側面に対処しています。 | |||
* ''既に実行された最適化の(部分的な)再実行がより簡単に、より正確になりました'' | |||
** Adjointソルバーは、I/Oによる精度の潜在的な損失を避けるために、均一なフォルダーの下でそれらの感度導関数を書き込み/読み込みます。 | |||
** 各最適化サイクルのVolumetric B-Splinesコントロールポイントはuniformの下で書き込まれ、さらにバイナリI/Oをサポートするようになりました。その結果、constant/dynamicMeshDictのcontrolPointsDefinitionは、継続を実行するためにfromFileに変更する必要がなくなり、ミスセットアップの原因となり得るものを取り除くことができました。 | |||
** アドジョイントグリッド変位フィールド(ma)は、アドジョイントソルバーが複数存在する場合、その名前が付加されるようになりました。この変更前は、最後のアドジョイントソルバーの ma フィールドのみがファイルに書き込まれていたため、この変更により継続が容易になりました。fvSchemes と fvSolution への変更は必要ありません。 | |||
* ''ターンアラウンドタイムの短縮'' | |||
** 随伴方程式の解のターンアラウンドタイムを短縮するための多くの変更(詳細はbac1d8baを参照してください)。簡単に言うと、高価だが一定の量のキャッシュと、コーディングの欠点の除去です。例えば、バイクのチュートリアルのアドジョイントソルバーの所要時間は約9.5%短縮されましたが、後者は多くの出口境界があるケースでより顕著になる可能性があります。 | |||
* ''ピーク時のメモリ消費量の削減'' | |||
** FI または E-SI アプローチを使用した場合,アドジョイントコードのメモリ消費量のピークは感度微分の計算中に発生します.これは,グリッド感度の空間勾配の乗数を計算するために,多数の volTensorField を操作する必要があるためです.コードのこの部分は、このピークメモリ消費量を減らすために書き直されました。 | |||
Attribution | |||
* The adjoint library was updated/reviewed by PCOpt/NTUA, FOSS GP and OpenCFD | |||
Source code | |||
* $FOAM_SRC/optimisation/adjointOptimisation | |||
== 改良型QR分解アルゴリズム == | |||
QR分解アルゴリズムは、オープンソースのTemplate Numerical Toolkit(TNT)のアルゴリズムを利用して、リファクタリング、簡略化、改良が行われました。 | |||
改良型 QRMatrix ソルバは,与えられたスカラー/複素矩形/正方行列 A に対して,以下のように QR 分解を行う. | |||
<code>A = Q R</code> | |||
または列のピボット化を伴う QR 分解の場合。 | |||
<code>A P = Q R</code> | |||
どこ | |||
* Q : ユニタリー/直交行列 | |||
* R : 上三角行列 | |||
* P: 順列行列 | |||
QR分解アルゴリズムでは、列のピボット化を伴う場合と伴わない場合のフルサイズおよびエコノミーサイズのQR分解を計算することができます。出力形式は、Q-matrix、R-matrixのいずれか、または両方を選択することができます。 | |||
ソースコード | |||
* $FOAM_SRC/OpenFOAM/matrices/QRMatrix | |||
チュートリアル | |||
* $FOAM_TUTORIALS/../applications/test/matrices/QRMatrix/Test-QRMatrix.C | |||
マージ要求 | |||
* MR!540 | |||
参考文献 | |||
* Pozo, R. (1997). Template Numerical Toolkit for linear algebra: High performance programming with C++ and the Standard Template Library. The International Journal of Supercomputer Applications and High Performance Computing, 11(3), 251-263. DOI:10.1177/109434209701100307 | |||
== 改良型半陰解法ソース == | |||
SemiImplicitSourceは、新しいexprField仕様をサポートするようになり、ソースの位置や強度を定義する際に柔軟性を持たせることができるようになりました。 | |||
<code>{ | |||
type scalarSemiImplicitSource; | |||
volumeMode specific; | |||
selectionMode all; | |||
sources | |||
{ | |||
tracer0 | |||
{ | |||
explicit | |||
{ | |||
type exprField; | |||
functions | |||
{ | |||
square | |||
{ | |||
type square; | |||
scale 0.0025; | |||
level 0.0025; | |||
frequency 10; | |||
} | |||
} | |||
expression | |||
#{ | |||
(hypot(pos().x() + 0.025, pos().y()) < 0.01) | |||
? fn:square(time()) | |||
: 0 | |||
#}; | |||
} | |||
} | |||
} | |||
}</code> | |||
SemiImplicitSource は、入力エントリを旧来の injectionRateSuSp 構文よりも直感的に理解できるように、明示的または暗黙的な寄与を持つ新しいソース辞書エントリを使用することに注意してください。 | |||
チュートリアル | |||
* $FOAM_TUTORIALS/compressible/rhoSimpleFoam/squareBend | |||
ソースコード | |||
* $FOAM_SRC/fvOptions/sources/general/semiImplicitSource | |||
= ソルバーと物理モデル = | = ソルバーと物理モデル = |