• 検索結果がありません。

制御

ドキュメント内 OpenFOAM User Guide (ページ 54-59)

2.2 穴あき板の応力解析

2.2.1.4 制御

通常どおり,解法の制御に関する情報は

controlDict

ディクショナリから読み込まれます.本 ケースでは,

startTime

0

です.本ケースは定常状態ですので,時間刻みは重要ではありま せん.このような状況では,定常状態のケースにおける反復回数カウンタとして働くよう,時

間刻み

deltaT

1

に設定するのが最善です.このようにした場合,本ケースで

100

に設定し

endTime

は反復回数の上限として働きます.

writeInterval

20

に設定します.

controlDict

のエントリは以下のようになります.

17

18 application solidDisplacementFoam;

19

20 startFrom startTime;

21

22 startTime 0;

23

24 stopAt endTime;

25

26 endTime 100;

28 deltaT 1;

29

30 writeControl timeStep;

31

32 writeInterval 20;

33

34 purgeWrite 0;

35

36 writeFormat ascii;

37

38 writePrecision 6;

39

40 writeCompression off;

41

42 timeFormat general;

43

44 timePrecision 6;

45

46 graphFormat raw;

47

48 runTimeModifiable true;

49 50

51 // ************************************************************************* //

2.2.1.5

離散化スキームおよび線形方程式ソルバ制御

次は

fvSchemes

ディクショナリについて見てみましょう.まず,この問題は定常状態ですの

で,

timeScheme

における時間微分としては

steadyState

を選択します.これによって時間微 分項がオフの状態になります.全てのソルバが定常状態および過渡的状態の双方に対して適用 可能な訳ではありませんが,

solidDisplacementFoam

は基本的なアルゴリズムが双方のシミュ レーションともに共通であるため,双方に適用可能となっています.

線形弾性応力解析における運動方程式には,変位の勾配を含む陽な項がいくつか存在します.

この勾配を正確かつ滑らかに評価できれば,良い計算結果が得られます.通常,有限体積法にお ける離散化は,ガウスの定理に基づいています.ガウス法は大抵の目的においては十分に正確 ですが,本ケースにおいては最小二乗法を使用することとします.したがって

fvSchemes

ディ クショナリを開き,

grad(U)

勾配離散化スキームとして

leastSquares

を選択してください.

17

18 d2dt2Schemes

19 {

20 default steadyState;

21 }

22

23 ddtSchemes

24 {

25 default Euler;

26 }

27

28 gradSchemes

29 {

30 default leastSquares;

31 grad(D) leastSquares;

32 grad(T) leastSquares;

33 }

34

35 divSchemes

36 {

37 default none;

38 div(sigmaD) Gauss linear;

39 }

40

41 laplacianSchemes

42 {

43 default none;

44 laplacian(DD,D) Gauss linear corrected;

45 laplacian(DT,T) Gauss linear corrected;

46 }

47

48 interpolationSchemes

49 {

50 default linear;

51 }

52

53 snGradSchemes

54 {

55 default none;

56 }

57

58 fluxRequired

59 {

60 default no;

61 D yes;

62 T no;

63 }

64 65

66 // ************************************************************************* //

system

ディレクトリにある

fvSolution

ディクショナリでは,求解に使用される線形方程式のソ

ルバおよびアルゴリズムを設定します.まず

solvers

サブディクショナリを見ると,

D

solver

GAMG

になっていることがわかります.

tolerance

で表されるソルバ許容値(ソルバ名の次の 数値)は,本問題では106を設定します.

relTol

で表されるソルバの相対許容値(さらにそ の次の数値)には各反復ごとの残差の所要低減量を設定します.本問題においては多くの項が 陽であり,また個別の反復的手順の一部としてアップデートされるため,各反復において厳し い相対許容値を設定することは非効率的です.したがって相対許容値として合理的な値は0.01 もしくはさらに高めの0.1,あるいはせいぜいこのケースのように0.9程度にしておきます.

17

18 solvers

19 {

20 "(D|T)"

21 {

22 solver GAMG;

23 tolerance 1e-06;

24 relTol 0.9;

25 smoother GaussSeidel;

26 cacheAgglomeration true;

27 nCellsInCoarsestLevel 20;

28 agglomerator faceAreaPair;

29 mergeLevels 1;

30 }

31 }

32

33 stressAnalysis

34 {

35 compactNormalStress yes;

36 nCorrectors 1;

37 D 1e-06;

38 }

39 40

41 // ************************************************************************* //

fvSolution

ディクショナリは,アプリケーションソルバに特有の制御パラメータを含む

stress-Analysis

サブディクショナリを含みます.まず,各時刻ステップ内での表面力境界条件処理を 含めた,全方程式系に関する外側ループの数を指定する

nCorrectors

があります.本問題は定 常状態を扱いますので,「時刻ステップ」を反復回数カウンタとして使い収束解へと向かう反復 を実行することになります.したがって

nCorrectors

1

に設定します.

D

キーワードには外側反復ループにおける収束許容値,すなわち初期残差に対して反復計算 によって消去されるべきレベルを設定します.本問題では前述において設定したソルバ許容値 の106に設定します.

2.2.2

コードの実行

以下に示すようなコマンドによって,実行後にログファイルに記録された収束状況を見るこ とができるよう,バックグラウンドでコードを実行します.

cd $FOAM_RUN/tutorials/stressAnalysis/solidDisplacementFoam/plateHole solidDisplacementFoam > log &

実行後には生成されたログファイルを見て,反復回数および解を求める各方向変位の初期・最 終残差などの収束状況を確認できます.本ケースの反復許容回数設定では,最終残差は必ず初 期残差の0.1倍以下となるはずです.いったん両初期残差ともに106の収束許容残差以下とな れば,その計算は収束したとみなしバッチジョブを

kill

することによって止めることができ ます.

2.2.3

後処理

後処理は2.1.4項と同様に行うことができます.

solidDisplacementFoam

ソルバは,応力場σ を対称テンソル場として出力します.したがって例えば,σxx

paraFoam

で見ることができま

す.

OpenFOAM

ソルバにおける変数名は通常,それらを表す数学記号にならって名付けられ

ることは,ここで再度述べるに値するでしょう.ギリシア記号の場合は,変数は発音どおりに 名付けられます.例えば,σxx

sigmaxx

と名付けられます.

独立したスカラ成分のσxxσxy などは,2.1.5.7で述べた

foamCalc

sigma

に関して実行 して求めます.

foamCalc components sigma

sigmaxx

sigmaxy

などと名づけられた成分のファイルが時間のディレクトリに生成されます.

図2.18のように応力を

paraFoam

で見ることができます.

式 (2.14) の解析解とここで得られた数値解を比較しましょう.そのためには,解析領域左

端の対称面に沿ってのデータを出力しなければなりません.このようなグラフのために必要な データは,

sample

ユーティリティによって作成することができます.

sample

の設定は

system

ディレクトリ内の

sampleDict

で行い詳細は表6.3に要約しています.データのサンプリングを 行う座標区間は,

sets

によって(0.0,0.5,0.25)から(0.0,2.0,0.25)に指定されています.物理 量は

fields

に指定します.

0 5 10 15 20 25 30

σ

xx

(kP a)

図2.18 穴あき板における応力場

17

18 interpolationScheme cellPoint;

19

20 setFormat raw;

21 22 sets

23 (

24 leftPatch

25 {

26 type uniform;

27 axis y;

28 start ( 0 0.5 0.25 );

29 end ( 0 2 0.25 );

30 nPoints 100;

31 }

32 );

33

34 fields ( sigmaxx );

35 36

37 // ************************************************************************* //

通常通り

sample

を実行してください.

writeFormat

raw

形式で

2

列のフォーマットとなっ ています.データは

sets

ディレクトリの時刻サブディレクトリの中のファイルに書き込まれ ます.たとえば,時刻t= 100 sのデータは

sets/100/leftPatch_sigmaxx.xy

に書き込まれます.

GnuPlot

のようなアプリケーションでは,コマンドプロンプトで以下を入力することで,数値

解および解析解の両方をプロットすることができます.

plot [0.5:2] [0:] ’sets/100/leftPatch_sigmaxx.xy’, 1e4*(1+(0.125/(x**2))+(0.09375/(x**4)))

プロット例を図2.19に示します.

2.2.4

演習

以下は

solidDisplacementFoam

に習熟していただくための演習課題です.

0 5 10 15 20 25 30 35

0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0

Stress ( σ

xx

)

x=0

(kP a)

Distance, y (m)

Numerical prediction Analytical solution

図2.19 垂直方向対称面における法線方向応力

2.2.4.1

メッシュ解像度の増加

xy方向それぞれのメッシュ解像度を増やしてみましょう.2.2.3項の最終的な粗メッシュ の結果を,

mapFields

を使って密メッシュの初期条件にマッピングしてください.

2.2.4.2

非等間隔メッシュの導入

穴に近いセルが遠いセルより密になるよう,メッシュ幅を変化させてください.隣接するセ ルの大きさの比率が1.1以上にならないように,またブロック間のセルの大きさの比率がブロッ ク内の比率と同様となるようメッシュを作成してください.メッシュの非等間隔化については

2.1.6項で述べました.ここでも,2.2.3項の最終的な粗メッシュでの結果を,

mapFields

を使っ

て非等間隔メッシュの初期条件としてマッピングします.結果を解析解および非等間隔化する 前の結果と比較してみましょう.等間隔メッシュと同一のセル数を使用した場合,解の精度は 改善されるでしょうか?

ドキュメント内 OpenFOAM User Guide (ページ 54-59)