こんにちは(@t_kun_kamakiri)
前回の記事では粒子追跡の設定について解説しました。
今回はキャビティ流れで解析した場に乗った粒子の運動を解析したいと思います。
粒子はキャビティ流れ(定常流れ)の力を受けますが、粒子の運動は流れ場に影響を及ぼしません。いわゆるone-wayの解析です。
キャビティ流れに乗った粒子の解析
とりあえず細かい設定はこだわらずやってみたって感じです_(._.)_
OpenFOAM v2212(WSL2)
必要なチュートリアルをコピー
コピーするのは非圧縮流れのキャビティ流れと粒子追跡用のチュートリアルです。
- キャビティ流れ:流体の定常流れを作る
- 粒子追跡:キャビティ流れで作った流れに乗って粒子が運動
1 2 3 |
cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity 001_cavity cp -r /$FOAM_TUTORIALS/lagrangian/icoUncoupledKinematicParcelFoam/hopper . cp -r hopper/hopperInitialState 002_particle |
コピーすると以下のようなフォルダになります。
1 2 3 |
--- 001_cavity --- 002_particle --- hopper |
キャビティ流れの解析
キャビティ流れは非定常の解析です。ここでは境界条件に従って定常状態を得るための解析をします。
キャビティ流れの境界条件を少し変えておきましょう
流速はできれば速い方が粒子への流体力もわかりやすいのでmovingWallの流速は「(1 0 0);」から「(10 0 0)」に変更します。
0/U
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
dimensions [0 1 -1 0 0 0 0]; internalField uniform (0 0 0); boundaryField { movingWall { type fixedValue; value uniform (10 0 0); } fixedWalls { type noSlip; } frontAndBack { type empty; } } |
キャビティ流れの方に移動して解析を実行します。
1 2 3 |
cd 001_cavity blockMesh icoFoam |
キャビティ流れの結果をParaViewで確認しましょう。
粒子追跡の解析
粒子追跡の方にフォルダ移動します。
1 |
cd ../002_particle |
メッシュ情報が異なるのでキャビティ流れのメッシュ情報をコピーします。
1 |
cp -r ../001_cavity/constant/polyMesh constant/ |
またキャビティ流れの境界条件もコピーします。
1 |
cp -r ../001_cavity/0 . |
キャビティ流れの0.5秒での流速分布と圧力分布をマッピングします。
1 |
mapFields ../001_cavity -sourceTime 0.5 -consistent |
mapFieldsによってキャビティ流れの最終状態を今から解析する粒子追跡の流速分布の初期状態として使うことができます。
ParaViewで初期状態の流速分布を見てみましょう。
キャビティ流れの流速分布が初期状態としてマッピングされています。
次に粒子の配置について設定を行います。
constant/kinematicCloudPositions
1 2 3 4 5 |
( (0.025 0.08 0.05) (0.050 0.08 0.05) (0.075 0.08 0.05) ) |
続いて粒子の設定についてです。
ここでは、粒子の密度や力の種類、壁との接触の定義などを行います。細かい設定内容についてはこだわらずほとんどデフォルトのままいきます。
constant/kinematicCloudProperties
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
solution { active true; coupled true; transient yes; cellValueSourceCorrection off; interpolationSchemes { rho cell; U cellPoint; mu cell; } integrationSchemes { U Euler; } sourceTerms { /* //U のスキームには "explicit" と "semiImplicit" が選べる。 スキームの後の数値は緩和係数らしい。 */ schemes { U explicit 1; } } } constantProperties { parcelTypeId 1; rhoMin 1e-15; minParticleMass 1e-15; rho0 964; youngsModulus 6e8; poissonsRatio 0.35; constantVolume false; } subModels { particleForces { sphereDrag; gravity; } injectionModels { model1 { type manualInjection; massTotal 0; parcelBasisType fixed; nParticle 1; SOI 0; positionsFile "kinematicCloudPositions"; U0 ( 0 0 0 ); sizeDistribution { type fixedValue; fixedValueDistribution { value 0.02; } } } } dispersionModel none; patchInteractionModel standardWallInteraction; heatTransferModel none; surfaceFilmModel none; stochasticCollisionModel none; collisionModel pairCollision; radiation off; pairCollisionCoeffs { // Maximum possible particle diameter expected at any time maxInteractionDistance 0.02; writeReferredParticleCloud no; pairModel pairSpringSliderDashpot; pairSpringSliderDashpotCoeffs { useEquivalentSize no; alpha 0.12; b 1.5; mu 0.52; cohesionEnergyDensity 0; collisionResolutionSteps 12; }; wallModel wallLocalSpringSliderDashpot; wallLocalSpringSliderDashpotCoeffs { useEquivalentSize no; collisionResolutionSteps 12; movingWall { youngsModulus 1e10; poissonsRatio 0.23; alpha 0.12; b 1.5; mu 0.43; cohesionEnergyDensity 0; } fixedWalls { youngsModulus 1e10; poissonsRatio 0.23; alpha 0.12; b 1.5; mu 0.43; cohesionEnergyDensity 0; } frontAndBack { youngsModulus 1e10; poissonsRatio 0.23; alpha 0.12; b 1.5; mu 0.1; cohesionEnergyDensity 0; } }; } standardWallInteractionCoeffs { type rebound; } } cloudFunctions {} |
設定が終わりましたので、計算実行します。
※必要に応じて「system/controlDict」で計算時間の設定を変えれば良いです。
1 |
icoUncoupledKinematicParcelFoam |
計算が終われば解析結果を可視化したいと思います。
粒子の状態はVTKに変換してPraViewで確認します。
1 |
foamToVTK |
解析が終わったら以下の手順でParaViewで可視化してみましょう。
あとはアニメーションなどで挙動を確認。
まとめ
本記事はicoUncoupledKinematicParcelFoamソルバを使ってキャビティ流れの場に乗った粒子の運動の解析をしました。
使いこなすためにはもう少し詳しく設定を見ていかないといけないですね。使えるレベルかどうかの妥当性の検証は行っておらず、さらなる調査が必要です_(._.)_
粒子追跡で使えるソルバ(おまけ)
ESI版の粒子追跡によるソルバの種類を確認します。
coalChemistryFoam | Transient solver for compressible, turbulent flow, with coal and limestone particle clouds, an energy source, and combustion | エネルギー源である石炭や石灰岩の粒子雲、燃焼を伴う圧縮性乱流のトランジェントソルバ |
DPMFoam | Transient solver for the coupled transport of a single kinematic particle cloud including the effect of the volume fraction of particles on the continuous phase | 連続相に対する粒子の体積分率の影響を含む単一の運動学的粒子雲の連成輸送のための過渡ソルバー |
DPMDyMFoam | Transient solver for the coupled transport of a single kinematic particle cloud including the effect of the volume fraction of particles on the continuous phase, with optional mesh motion and mesh topology changes | 連続相に対する粒子の体積分率の影響を含む単一の運動学的粒子雲の連成輸送のための過渡ソルバーで、オプションでメッシュの動きとメッシュのトポロジーを変更することができます。 |
MPPICDyMFoam | Transient solver for the coupled transport of a single kinematic particle cloud including the effect of the volume fraction of particles on the continuous phase. Multi-Phase Particle In Cell (MPPIC) modeling is used to represent collisions without resolving particle-particle interactions, with optional mesh motion and mesh topology changes | 連続相に対する粒子の体積分率の影響を含む、単一の運動学的粒子雲の連成輸送のための過渡ソルバーです。粒子間相互作用を解決せずに衝突を表現するMPPIC(Multi-Phase Particle In Cell)モデリングは、オプションでメッシュの動きとメッシュのトポロジーを変更することができます。 |
MPPICFoam | Transient solver for the coupled transport of a single kinematic particle cloud including the effect of the volume fraction of particles on the continuous phase. Multi-Phase Particle In Cell (MPPIC) modeling is used to represent collisions without resolving particle-particle interactions | 連続相に対する粒子の体積分率の影響を含む、単一の運動学的粒子雲の連成輸送のための過渡ソルバーです。粒子間相互作用を解決せずに衝突を表現するためにMPPIC(Multi-Phase Particle In Cell)モデリングが使用されています。 |
icoUncoupledKinematicParcelFoam | Transient solver for the passive transport of a single kinematic particle cloud | 単一運動論的粒子雲の受動輸送のための過渡ソルバー |
icoUncoupledKinematicParcelDyMFoam | Transient solver for the passive transport of a single kinematic particle cloud, with optional mesh motion and mesh topology changes | 単一の運動学的粒子雲の受動的輸送のためのトランジェントソルバ、オプションでメッシュの動きとメッシュのトポロジーを変更可能 |
reactingParcelFoam | Transient solver for compressible, turbulent flow with a reacting, multiphase particle cloud, and surface film modelling | 反応する多相粒子雲を伴う圧縮性乱流の過渡ソルバー、および表面膜モデリング |
reactingHeterogenousParcelFoam | Transient solver for the coupled transport of a single kinematic particle cloud including the effect of the volume fraction of particles on the continuous phase. Multi-Phase Particle In Cell (MPPIC) modeling is used to represent collisions without resolving particle-particle interactions | 連続相に対する粒子の体積分率の影響を含む、単一の運動学的粒子雲の連成輸送のための過渡ソルバーです。粒子間相互作用を解決せずに衝突を表現するためにMPPIC(Multi-Phase Particle In Cell)モデリングが使用されています。 |
simpleReactingParcelFoam | Steady-state solver for compressible, turbulent flow with reacting, multiphase particle clouds and optional sources/constraints | 反応する多相の粒子雲とオプションのソース/制約を持つ圧縮性乱流の定常状態ソルバー |
simpleCoalParcelFoam | Steady-state solver for compressible, turbulent flow with coal particle clouds and optional sources/constraints | 石炭粒子雲とオプションのソース/制約を含む圧縮性乱流の定常状態ソルバー |
sprayFoam | Transient solver for compressible, turbulent flow with a spray particle cloud | 噴霧粒子雲を有する圧縮性乱流の過渡ソルバー |
engineFoam | Transient solver for compressible, turbulent engine flow with a spray particle cloud | 噴霧粒子雲を有する圧縮性乱流エンジン流れの過渡ソルバー |
simpleSprayFoam | Steady state solver for compressible, turbulent flow with a spray particle cloud and optional sources/constraints | スプレー粒子雲とオプションのソース/制約を持つ圧縮性乱流の定常ソルバー |
sprayDyMFoam | Transient solver for compressible, turbulent flow with a spray particle cloud, with optional mesh motion and mesh topology changes | スプレー粒子雲を伴う圧縮性乱流のトランジェントソルバ、オプションでメッシュの動きやメッシュトポロジーの変更も可能 |
uncoupledKinematicParcelFoam | Transient solver for the passive transport of a particle cloud | 粒子雲の受動輸送のためのトランジェントソルバ |
uncoupledKinematicParcelDyMFoam | Transient solver for the passive transport of a particle cloud | 粒子雲の受動輸送のためのトランジェントソルバ |
日本語はDeepLで直訳したものなので少しおかしな日本語ですが、参考のために載せておきます。これだけを見ても正直どういった用途に使えるソルバなのか区別が付きませんね。
今はそんなに多くのソルバが用意されていません。この辺はよくわかりませんが、ソルバが多すぎるとよくユーザも区別できないですし統一されたのかな?というくらいに思っておきます。
おすすめ参考図書
☟こちらは、OpenFOAMの日本語書籍が無い中唯一わかりやすい参考書だと思います。
☟こちらもOpenFOMの古いバージョンでの和訳になります。さすがにこちらはバージョンに対する日本語でのケアはしていないので、OpenFOAMに慣れている方は購入しても良いかと思います。僕は「日本語でまとまっている内容」なので少し重宝しています。
☟以下に、もっと初心者向けの同人誌を紹介しておきます。
初心者は「ってか、まずどうやってOpenFOAMをインストールするの?」というところからつまずきがちです。
そんな時は、以下の書籍をおすすめします。
改訂新版 OpenFOAMの歩き方 (技術の泉シリーズ(NextPublishing))
インストール方法とチュートリアルで流体解析を体験・・・ちょっと高度な解析まで解説があります。著者曰くOpenFOAMのバージョンの追跡を行いながら、書籍をアップデートするようなので安心ですね。