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

Slides:



Advertisements
Similar presentations
Item 1:View C++ as a federation of languages. C++ はただの ”C のクラスがあるバージョン ” ではない → 例外安全 (29 項 ) 、テンプレート (41 項 ) 、オーバーロード等の導入によりデザインや目指すコードが 変化している プログラミング言語はあくまで言語.
Advertisements

OWL-Sを用いたWebアプリケーションの検査と生成
SolidWorks Flow Simulation 教師用ガイド
円形管における3次元骨組解析への適用事例 平成16年9月17日 (株)アイエスシイ 犬飼隆義.
第5回OpenFOAM勉強会 for beginner
SolidWorks Flow Simulation講師用ガイド
第10章:自分自身の関数を書く 10月31日(金) 発表者:紺野憲一
概要 基礎理論 1.応力とひずみおよび平衡方程式 2.降伏条件式 3.構成式(応力-ひずみ関係式)
課題 1 キーボードから整数値を 1つ読み込み、その値の二乗と三乗を出力するプログラムを作れ。 動作例: % ./a.out
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
外部拘束係数の適用方法 マスコンクリ-トの温度応力研究委員会報告書 外部拘束係数の見直しとCP法の適用範囲拡大 1998年4月.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
Step-by-Step Guide on How to Start ALICE Analysis
連立一次方程式 a11x1+a12x2+a13x3+...+a1nxn= b1
原子動力工学特論 課題 3、4 交通電子機械工学専攻   齋藤 泰治.
常微分方程式と偏微分方程式 1.常微分方程式 独立変数が一個のもの 振動の運動方程式 2.偏微分方程式 独立変数が二個以上のもの
プログラミング演習(2組) 第12回
第18回全国高専プログラミングコンテスト 課題部門 10020
大阪工業大学 情報科学部 情報システム学科 宇宙物理研究室 B 木村悠哉
条件式 (Conditional Expressions)
OpenFOAM beginner 勉強会 進捗報告
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
エンタープライズアプリケーション II 第7回 / 2006年7月9日
モンテカルロ法と有限要素法の連成による 焼結のマイクロ‐マクロシミュレーション
塑性加工の有限要素シミュレーション 豊橋技術科学大学  森 謙一郎 有限要素法の基礎 鍛造,押出し,深絞り加工への応用.
京大岡山 3.8m 望遠鏡 分割鏡制御に用いる アクチュエータの特性評価
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
ひび割れ面の摩擦接触を考慮した損傷モデル
Rコマンダーで2元配置ANOVA 「理学療法」Vol28(8)のデータ
アルゴリズムとデータ構造 補足資料5-2 「サンプルプログラムsetop.c」
講義では、Cプログラミングの基本を学び 演習では、やや実践的なプログラミングを通して学ぶ
chtMultiRegionSimpleFoamの改造(1) ~ソースを眺める~
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
No.3 No3.電子筐体製品 コメント 使用機能 一覧 従来課題 課題解決策 3D IGESを利用した IGES 「IGES読込み設定」
(昨年度のオープンコースウェア) 10/17 組み合わせと確率 10/24 確率変数と確率分布 10/31 代表的な確率分布
舗装材料小委員会 資料  改質バインダの混合温度および締固め温度 (出典) NCHRP REPORT 459
応力(stress, s, t ) 自由物体図(free-body diagram)において、外力として負荷荷重P が作用したとき、任意の切断面で力の釣り合いを考慮すると、面における単位面積あたりの内力が存在する、それを応力といい、単位は、Pa(N/m2) で表す。面に垂直に働く垂直応力、s と平行に働くせん断応力、
プログラミングコンテストシステムへの 提出履歴データとその分析
連続体とは 連続体(continuum) 密度*が連続関数として定義できる場合
FEM勉強会 (第3回).
リングの回転成形の 近似3次元有限要素シミュレーション 塑性加工研究室 平松直登 一般化平面ひずみを用い た近似3次元FEM
随伴解析を用いた物体表面形状最適化による抵抗低減
Chapter 26 Steady-State Molecular Diffusion
第1回、平成22年6月30日 ー FEM解析のための連続体力学入門 - 応力とひずみ 解説者:園田 恵一郎.
卒研1 第1回資料 OpenCVを用いた画像処理
連立一次方程式 a11x1+a12x2+a13x3+...+a1nxn= b1
AVL木.
流動を伴う物質移動(p.483) y x 壁を伝わって流れ落ちる 薄い液膜にA成分が拡散 δ NA,y 速度分布:p.96.
C#プログラミング実習 第3回.
複雑流動場における物質移行過程の解明を目指した大規模数値計算 :実験計測データとの比較による数値モデルの構築
対象:せん断補強筋があるRCはり(約75万要素)
Action Method の実装 J2EE II 第9回 2004年12月2日.
1.5層スペースフレームの 接合方法に関する研究
プログラミング入門2 第5回 配列 for文 変数宣言 初期化
軸対称近似を用いたしごきスピニングの 有限要素シミュレーション
cp-1. クラスとメソッド (C++ オブジェクト指向プログラミング入門)
塑性加工 第2回 今日のテーマ ・応力ーひずみ線図の正しい見方 (ヤング率はなぜ異なるのか?) (引張と圧縮は同じ?)
Inline 展開のアルゴリズム 長谷川啓
PROGRAMMING IN HASKELL
トルクレンチを用いたPC鋼棒緊張の数値モデル
Bash on Ubuntu on Windowsに オープンCAEのソフトを インストールする(2)
プログラミング入門2 第5回 配列 変数宣言、初期化について
JSFによるWebアプリケーション開発 第7回
Status Report of Thick GEM Development
6.2 高速フーリエ変換 (1)FFT(fast Fourier transform)とは
7.集合 7.1 集合とは [集合と要素] 関東の都道府県 群馬県 栃木県 要素 埼玉県 茨城県 東京都 千葉県 神奈川県
各種荷重を受ける 中空押出形成材の構造最適化
Presentation transcript:

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

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

メッシュ

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

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

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

メッシュ

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

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

応力値 応力(MPa) 100

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

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

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

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

ひずみ速度の出力 同様に記述することで 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 でも可能

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))) ) ); }

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; }

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 ); }

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; }

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が追加される

質問 非ニュートンモデルで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 ); 現時間の非ニュートンモデルから計算される粘性係数とひずみ速度を読み込みたい ←