Presentation is loading. Please wait.

Presentation is loading. Please wait.

11回オープンCAE初心者勉強会 秋山善克.

Similar presentations


Presentation on theme: "11回オープンCAE初心者勉強会 秋山善克."— Presentation transcript:

1 11回オープンCAE初心者勉強会 秋山善克

2 発表内容 Salome-mecaのヘキサメッシュ作成方法 Salome-mecaの熱伝導解析 OpenFOAMの非ニュートンモデル

3 メッシュ

4 Salome-mecaヘキサメッシュ作成方法
Partitionにより六面体になるようにCADを分割する→要素の分割数毎にグループ化(サブメッシュで使用)

5 Salome-mecaヘキサメッシュ作成方法
六面体を作成できればエッジは途中で分割されていても作成可能 つじつまが合うようにメッシュ分割数を指定する(平面でマップドメッシュが作成できるようにする) 2 2 4 2 2 2 2 2 4 4 4 2 4

6 Salome-mecaヘキサメッシュ作成方法
3Dの指定 2Dの指定 1Dの指定 サブメッシュも同様の指定 分割数を変える

7 メッシュ

8 変位結果(変形量100倍) μm 変位(mm) 0.015

9 節点値・要素値の取得 View→Windows→Selection 節点及び要素をピックすることで値を取得可能

10 応力値 応力(MPa) 100

11 Salome-mecaによる定常熱伝導解析
Eficas Inlet:雰囲気温度15℃、熱伝達率500W/m2℃ Outlet:190℃ 条件 熱伝達率 雰囲気温度 結果

12 Salome-mecaによる非定常熱伝導解析
Inlet:雰囲気温度15℃、熱伝達率500W/m2℃ Eficas 初期温度:190℃ 条件 NommerConceptが入力できない 10sを10stepで計算 熱伝導解析 初期温度 設定できない 不要? Inlet設定

13 OpenFOAMに組み込まれている非ニュートンモデル
Src\transportModels\incompressible\viscosityModels内 5 ( BirdCarreau CrossPowerLaw HerschelBulkley Newtonian powerLaw ) BirdCarreau CrossPowerLaw

14 非ニュートンモデルの使用方法 Constant\transportProperties
transportModel CrossPowerLaw; nu nu [ ] 1; CrossPowerLawCoeffs { nu nu0 [ ] 0.01; nuInf nuInf [ ] 10; m m [ ] 0.4; n n [ ] 3; } ←任意の非ニュートンモデルを記述 各モデルの定数(材料にあわせて変更する) 粘性係数は密度で割る(動粘性係数で入力) interFoamの場合はphase1、phase2それぞれに指定する

15 ひずみ速度の出力 同様に記述することで simpleFoam interFoam buoyantBoussinesqSimpleFoam
applications\solvers\incompressible\nonNewtonianIcoFoam内 createFields.H内に下記を追加 nonNewtonianIcoFoam.C内に下記を追加 volScalarField strRatio ( IOobject "strRatio", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE ), dimensionedScalar("strRatio", dimensionSet(0,0,-1,0,0,0,0), scalar(0.0)) ); strRatio = Foam::sqrt(2.0)*mag(symm(fvc::grad(U))); runTime.write(); runTime.write()の直前に追加する 同様に記述することで simpleFoam interFoam buoyantBoussinesqSimpleFoam でも可能

16 HerschelBulkley.C #include "HerschelBulkley.H"
#include "addToRunTimeSelectionTable.H" #include "surfaceFields.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { namespace viscosityModels defineTypeNameAndDebug(HerschelBulkley, 0); addToRunTimeSelectionTable ( viscosityModel, HerschelBulkley, dictionary ); } // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // Foam::tmp<Foam::volScalarField> Foam::viscosityModels::HerschelBulkley::calcNu() const { dimensionedScalar tone("tone", dimTime, 1.0); dimensionedScalar rtone("rtone", dimless/dimTime, 1.0); tmp<volScalarField> sr(strainRate()); return ( min nu0_, (tau0_ + k_*rtone*pow(tone*sr(), n_)) /(max(sr(), dimensionedScalar ("VSMALL", dimless/dimTime, VSMALL))) ) ); }

17 HerschelBulkley.C // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::viscosityModels::HerschelBulkley::HerschelBulkley ( const word& name, const dictionary& viscosityProperties, const volVectorField& U, const surfaceScalarField& phi): viscosityModel(name, viscosityProperties, U, phi), HerschelBulkleyCoeffs_(viscosityProperties.subDict(typeName + "Coeffs")), k_(HerschelBulkleyCoeffs_.lookup("k")), n_(HerschelBulkleyCoeffs_.lookup("n")), tau0_(HerschelBulkleyCoeffs_.lookup("tau0")), nu0_(HerschelBulkleyCoeffs_.lookup("nu0")), nu_ ( IOobject ( name, U_.time().timeName(), U_.db(), IOobject::NO_READ, IOobject::AUTO_WRITE ), calcNu() ) {} // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // bool Foam::viscosityModels::HerschelBulkley::read ( const dictionary& viscosityProperties ) { viscosityModel::read(viscosityProperties); HerschelBulkleyCoeffs_ = viscosityProperties.subDict(typeName + "Coeffs"); HerschelBulkleyCoeffs_.lookup("k") >> k_; HerschelBulkleyCoeffs_.lookup("n") >> n_; HerschelBulkleyCoeffs_.lookup("tau0") >> tau0_; HerschelBulkleyCoeffs_.lookup("nu0") >> nu0_; return true; }

18 powerLaw.C // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // Foam::tmp<Foam::volScalarField> Foam::viscosityModels::powerLaw::calcNu() const { return max ( nuMin_, min nuMax_, k_*pow max dimensionedScalar("one", dimTime, 1.0)*strainRate(), dimensionedScalar("VSMALL", dimless, VSMALL) ), n_.value() - scalar(1.0) ) ) ); } #include "powerLaw.H" #include "addToRunTimeSelectionTable.H" #include "surfaceFields.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { namespace viscosityModels defineTypeNameAndDebug(powerLaw, 0); addToRunTimeSelectionTable ( viscosityModel, powerLaw, dictionary ); }

19 powerLaw.C // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::viscosityModels::powerLaw::powerLaw ( const word& name, const dictionary& viscosityProperties, const volVectorField& U, const surfaceScalarField& phi): viscosityModel(name, viscosityProperties, U, phi), powerLawCoeffs_(viscosityProperties.subDict(typeName + "Coeffs")), k_(powerLawCoeffs_.lookup("k")), n_(powerLawCoeffs_.lookup("n")), nuMin_(powerLawCoeffs_.lookup("nuMin")), nuMax_(powerLawCoeffs_.lookup("nuMax")), nu_ (IOobject ( name, U_.time().timeName(), U_.db(), IOobject::NO_READ, IOobject::AUTO_WRITE ), calcNu() ) {} // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // bool Foam::viscosityModels::powerLaw::read ( const dictionary& viscosityProperties ) { viscosityModel::read(viscosityProperties); powerLawCoeffs_ = viscosityProperties.subDict(typeName + "Coeffs"); powerLawCoeffs_.lookup("k") >> k_; powerLawCoeffs_.lookup("n") >> n_; powerLawCoeffs_.lookup("nuMin") >> nuMin_; powerLawCoeffs_.lookup("nuMax") >> nuMax_; return true; }

20 CrossLawの作成 Src\transportModels\incompressible\viscosityModels内のCrossPowerLawをコピー 名前をCrossPowerLawからCrossLawに変更(フォルダ、ファイル名) CrossLaw.C内 粘性を計算しているところのnuInf_を削除 CrossPowerLawをCrossLawに置き換え CrossLaw.H内 dimensionedScalar nuInf_を削除 CrossLaw.dep内 Src\transportModels\incompressible\Make内のfiles viscosityModels/CrossLaw/CrossLaw.Cを追加 Src\transportModelsで./Allmake CrossLaw 6 ( BirdCarreau CrossLaw CrossPowerLaw HerschelBulkley Newtonian powerLaw ) ←CrossLawが追加される

21 質問 非ニュートンモデルでArrheniusLawを作りたいがどのように温度変数Tを読み込めばよいかわからない
温度計算にせん断発熱を組み込みたいがどのように作ればよいかわからない ArrheniusLaw CrossLaw作成と同じような手順でArrheniusLaw.CまたはArrheniusLaw.Hで現在計算している温度Tを読み込みたい どのように粘度とひずみ速度を定義し計算に組み込むのか buoyantBoussinesqSimpleFoam内のTeqn.h fvScalarMatrix TEqn ( fvm::div(phi, T) - fvm::Sp(fvc::div(phi), T) - fvm::laplacian(kappaEff, T) ==Q ); 現時間の非ニュートンモデルから計算される粘性係数とひずみ速度を読み込みたい


Download ppt "11回オープンCAE初心者勉強会 秋山善克."

Similar presentations


Ads by Google