« COMP_INCRとCOMP_ELASの違い(弾塑性編) | トップページ | 面荷重(FORCE_FACE)を荷重の合計値で与えるには »

2012年9月16日 (日)

荷重を与えて変形させた状態で固定する方法(境界条件の切り替え)

「解析対象物に荷重を与えて変形させ、その変形の状態で固定する。
その後、更に荷重や変位条件を与えていく」

という解析をしたい場合があります。
この場合、解析の途中の段階で、荷重条件から変位条件への切り替えが必要になります。

途中から適用される条件も荷重であれば、荷重対象面(または辺・点)を指定しておき、最初の値はゼロで解析の途中から値が増えるように設定すれば良いのですが、変位条件の場合、解析の途中で「変位=0」等という与え方は(通常の方法では)出来ません。これをすると、「変形前の変位=0の点」に戻ってしまいます(多くの場合、変位増分が大きすぎてエラーになります)。

Code_Asterの非線形解析において、このような境界条件の切り替えをしたい場合はどうするかというと、どうやら「STAT_NON_LINE」を2つ続けて記述し、解析を2段構えにすると良いようです。
まず第1段階で引っ張り荷重を与える計算を行い、続く第2段階にて変位条件を「TYPE_CHARGE='DIDI'」のオプション付きで与えます。

これは公式ドキュメント「U4.51.03(STAT_NON_LINE)」の3.2.3項で説明されていますが、「ETAT_INIT/NUME_DIDI」で指定された時点(デフォルトでは計算の再開時点)において、その時点での位置を基準にして変位条件を適用するものです(正しくは“Dirichlet条件”と言うようですが、構造解析においてはおおよそ“変位条件”という理解で良いようです。)。

変位条件なので、固定(変位0)に限らず、指定した時点からの相対変位で変形させていくことも出来るようです。

-------------------------------------------------------
さて、この「TYPE_CHARGE='DIDI'」について検証をしてみました。

ソフトウェアはこれまで同様、DEXCS2011-Salome-A3(64)(SALOME6.3 + Code_Aster STA10.5)の利用です。

解析モデル(メッシュ)です。

Bound0201

長さ100mm × 幅10mm × 厚み4mm
の単純なゴム板です。要素は六面体2次要素で、一辺2mmのサイズで分割しました。

解析手順ですが、今回は先に結果を見て頂くことにします。

【第1段階】X方向が長手方向となるゴム板の一方の端面(fix)を固定し、他端面(dispX)に4[N/mm^2]の面荷重(合計では160[N])を与えて引っ張ります。

Bound0202


【第2段階】dispX面を第1段階が終了した時点の位置で固定し、ゴム板の上面(fz)に0.5[N/mm^2]の面荷重(合計で500[N])をZ方向マイナス向きに与えてたわませます。

Bound0203


解析結果の動画です。

この解析のcommファイルについて、ポイントをEficasの編集画面でご説明します。

●ゴム物性

Bound0204

Mooney-Rivlin形式としました。

●境界条件

Bound0205

・CHAR0:fix面の拘束(第1段階、第2段階共通)

・CHAR1:dispX面の拘束(第2段階のみ適用)

・fx:dispX面への荷重(第1段階のみ適用、fonc_fxで徐々に増加)。

・fz:fz面への荷重(第2段階のみ適用、fonc_fzで徐々に増加)。

●非線形計算部分(STAT_NON_LINE)

・STAT_NON_LINE を2段重ねにしました。

Bound0206

・第1段階は、time = 0~1
・第2段階は、time = 1~2

・第1段階は単純に引っ張るだけです。

・第2段階で、第1段階の計算完了時の状態(応力や変形)を取り込むため、「ETAT_INIT」を指定しました。これも色々とオプションがありますが、今回のように単に第1段階の完了時の状態を指定するだけなら、「EVOL_NOLI」で良いようです。

・境界条件は、fxに代わってCHAR1を、「TYPE_CHARGE='DIDI'」のオプション付きで指定しました。これで、ETAT_INITで指定した時点の状態に対し、変位条件が与えられます。

・更に、ゴム板上面への荷重「fz」を追加しました。

これらの他、「自動時間ステップ調整」、「結果の出力間隔の指定」、「反力の集約値を出力」などの機能を使っています(詳細は各記事とcommファイルをご覧ください)。
時間ステップの指定については、第1段階と第2段階でそれぞれ別に定義しています。

設定については以上です。

結果(変形図)は上の方で示した通りですが、反力についても下図の通り、与えた条件通りの値が出ています。
(X方向の反力は、Z方向の荷重の増加につれて増えています)。

Bound0207


----------------------------------------------------

さて、今回の主題は以上なのですが、今回のように複数の段階を続けて計算する場合、第2段階の計算で何らかの不具合があって異常終了すると、もう一度第1段階からやり直しになってしまいます。第1段階に多くの計算時間を必要とするケースの場合、これはかなり非効率です。

このようなとき、「POURSUITE」を使うと、複数の段階をそれぞれ分けて、ひとつづつ計算出来ます。

「POURSUITE」の使い方ですが、
OpenCAE Users Wiki」の「オープンCAE初心者勉強会

にて、MK2さんが「SALOME-Mecaの活用技術

を公開されており、この中の「ポスト処理」-「Post_Lin_ver10.pdf 」で詳細に説明されています。

この「SALOME-Mecaの活用技術」は非常に役に立つ情報が多く、私はいつもこちらの情報を参考にさせて頂いております。また、現在はGoogleの「https://sites.google.com/site/codeastersalomemeca/」の方にも活用情報をまとめられつつあります。

【余談】
あと、実戦的な情報源としては「公式フォーラム」の情報が充実していると思います。「こんなことは出来ないのかな?」というような疑問があったとき、ここでキーワード検索してみると、おおむね何か出てきます。Code_Asterを始めたばかりの私が悩むようなことは、既に多くの方が色々と考えてきたことなのでしょう。しかし英語やフランス語なので、細かなニュアンスとかがちょっと分かりにくいですね。

さて、「POURSUITE」を用いて複数の計算を分けて実行する場合、計算データを格納する「.base」フォルダをASTKで指定する必要があります。この「.base」フォルダですが、計算が正常に完了した場合には最新の状態に更新されるようです。そのため、例えば第2段階だけについて設定を変えて何度も実行したいというような場合、第2段階の実行時には、終了後にデータが更新されないよう、「R」のチェックを外しておく必要があります。

Bound0208

ただしこの場合には、第2段階の計算結果は「.base」には保存されません(medやresuなどのファイルには、もちろん出力されます)。別名でバックアップを取っておく等の方法でも良いかもしれません

今回のファイルは下記のzipにまとめています。

bound02.zip

bound02.mmed (メッシュファイル)
bound02.comm (2段階分を通して計算)
bound02-2a.comm(2段階を分けて計算・第1段階)
bound02-2b.comm(2段階を分けて計算・第2段階)

なお、第1段階終了時にも結果を可視化したいため、結果出力の処理を行っています。これについても、結果出力の部分だけを別のcommにするなど、様々な実行パターンが考えられます。

« COMP_INCRとCOMP_ELASの違い(弾塑性編) | トップページ | 面荷重(FORCE_FACE)を荷重の合計値で与えるには »

条件設定」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1605696/47092961

この記事へのトラックバック一覧です: 荷重を与えて変形させた状態で固定する方法(境界条件の切り替え):

« COMP_INCRとCOMP_ELASの違い(弾塑性編) | トップページ | 面荷重(FORCE_FACE)を荷重の合計値で与えるには »