OpenFOAM beginner 勉強会 進捗報告 2011年2月27日 髙橋 功一
進捗概要 データ付与・抽出ツールの使用法 ソース読解トライ セルデータ付与(setFields) 数値データ出力(controlDictのfunction, sample) ・・・勉強中 ソース読解トライ Eclipse(なんとかつかえるところまで) SimpleFoamから勉強 狭間さん講義の予習
setFieldsの使い方:探索してみました Dambreakチュートリアル setFieldsDict FoamFile { version 2.0; format ascii; class dictionary; location "system"; object setFieldsDict; } defaultFieldValues ( volScalarFieldValue alpha1 0 ); regions boxToCell box (0 0 -1) (0.1461 0.292 1); fieldValues volScalarFieldValue alpha1 1 boxToCellで指定した直方体内の セルだけAlpha1を1にする 直方体以外で指定したいときは? dambreak 【いろいろな方法で探索トライ】 ・わざと間違えて記述 boxToCell → aboxToCell エラーメッセージにヒントあり ・ソースと同じ場所に置いてあるsetFieldsDict setFieldsのソースの場所にDictファイルの例題もおいてある ・分かっているキーワードで全文検索 “boxToCell”で“OpenFOAM-1.7.1”以下を全文検索
setFieldsの使い方探索 “boxToCell”で全文検索 cellSetDictに同じキーワードあり
setFieldsの使い方探索 cellSetDict Dambreakチュートリアル setFieldsDict 直方体 // Cells with cell centre within box boxToCell { box (0 0 0) (1 1 1); } // Is skewed, rotated box. Given as origin and three spanning vectors. rotatedBoxToCell origin (0.2 0.2 -10); i (0.2 0.2 0); j (-0.2 0.2 0); k (10 10 10); // Cells with centre within cylinder cylinderToCell p1 (0.2 0.2 -10); // start point on cylinder axis p2 (0.2 0.2 0); // end point on cylinder axis radius 5.0; // Cells with centre within sphere sphereToCell centre (0.2 0.2 -10); 直方体 (dambreakと同じ) FoamFile { version 2.0; format ascii; class dictionary; location "system"; object setFieldsDict; } defaultFieldValues ( volScalarFieldValue alpha1 0 ); regions boxToCell box (0 0 -1) (0.1461 0.292 1); fieldValues volScalarFieldValue alpha1 1 直方体を回転させた形状 円筒 球 cellSetDictの記載に この記述を足せばよさそう
// Select by explicitly providing cell labels labelToCell //セルラベル(boundaryファイル) { value (12 13 56 250 350); // labels of cells fieldValues ( volScalarFieldValue alpha1 1 ); } // Cells with cell centre within box boxToCell //直方体 { box (0.1 0.1 -1) (0.3 0.3 1); fieldValues ( volScalarFieldValue alpha1 1 ); } // Cells with cell centre within box // Is skewed, rotated box. Given as origin and three spanning vectors. rotatedBoxToCell //並行六面体? { origin (0.2 0.2 0); i (0.1 0.1 0.1); j (0 0 -0.1); k (0 0.1 0); fieldValues ( volScalarFieldValue alpha1 1 ); }
// Cells with centre within cylinder cylinderToCell //円筒 { p1 (0.2 0.2 -1); // start point on cylinder axis p2 (0.2 0.2 1); // end point on cylinder axis radius 0.1; fieldValues ( volScalarFieldValue alpha1 1 ); } // Cells with centre within sphere sphereToCell //球 { centre (0.2 0.2 0); radius 0.1; fieldValues ( volScalarFieldValue alpha1 1 ); } // Cells with cellCentre nearest to coordinates nearestToCell //指定点に一番近いセル { points ((0.1 0.1 0) (0.2 0.2 0) (0.4 0.1 0)); fieldValues ( volScalarFieldValue alpha1 1 ); }
p alpha1 その他 (未実施) cellToCell :cellSetで指定 // values of field within certain range fieldToCell //フィールド値の範囲で指定(ベクトル値Uはmag(U)と指定) { fieldName p; // Note: uses mag(U) since volVectorField min 300; max 500; fieldValues ( volScalarFieldValue alpha1 1 ); } alpha1 cellToCell :cellSetで指定 faceToCell :指定したfaceSetに隣接するセル (option owner/neighbour/any/all) pointToCell :指定したpointSet (に隣接するセル?) (option any/all) zoneToCell :cellzoneで指定 faceZoneToCell :指定したfacezoneに隣接するセル (option master/slave) shapeToCell :セル形状で指定 (option hex/wedge/prism/pyr/tet/tetWedge/splitHex) surfaceToCell :STLファイルで指定 (option …) regionToCell :? その他 (未実施)
ソース読解トライ 今後、最も応用範囲の広そうなsimpleFoamをベースに勉強 ○ソルバーの主ソース ・simpleFoam.C ○ヘッダファイル ・createFields.H ・・・変数定義 ・UEqn.H ・・・Uの方程式を記述 ・pEqn.H ・・・pの収束計算(simple法)を記述 ・convergenceCheck.H ・initConvergenceCheck.H どのソルバーにも必ずある? ソルバーによっては ないことも (主ソースに直接書き) 興味なし (*)kやεの保存方程式はsimpleFoamディレクトリ内のソースに書かれていない 【UEqn.H】 tmp<fvVectorMatrix> UEqn ( fvm::div(phi, U) + turbulence->divDevReff(U) ); UEqn().relax(); eqnResidual = solve UEqn() == -fvc::grad(p) ).initialResidual(); maxResidual = max(eqnResidual, maxResidual); ? 元の方程式(想像)
皆様にご相談(特に知りたいところ) ソースが難解すぎて、全く手が付けられず 皆様、どうやって調べていますか? 1.乱流 RASModel(kepsilon)の機能を 調べたい 【createFields.H】 autoPtr<incompressible::RASModel> turbulence ( incompressible::RASModel::New(U, phi, laminarTransport) ); tmp<fvVectorMatrix> UEqn ( fvm::div(phi, U) + turbulence->divDevReff(U) ); RASModelにはdivDevReff以外にも 使える機能がありそう 2.境界条件 使い方不明の境界条件が多数 使い方を調べたい // dambreak/0/p の境界条件部分 atmosphere { type totalPressure; p0 uniform 0; U U; phi phi; rho rho; psi none; gamma 1; value uniform 0; } ここに入るパラメータ 各境界条件ごとに 項目が変わる