Code Asterでは非線形解析コマンドのSTAT_NON_LINEでも座屈解析を行うことができます。
- STAT_NON_LINEで座屈解析
- 座屈発生時の座屈モードの取り出し
- 初期ひずみを与えて解析した線形座屈解析との比較
1.解析モデル

Meshはこんな感じです。

要素は他のアプリと合わせるためDKTを使いました。
model2 = AFFE_MODELE(AFFE=_F(GROUP_MA=('web', 'top'),
MODELISATION=('DKT', ),
PHENOMENE='MECANIQUE'),
MAILLAGE=mesh2)
STAT_NON_LINEのループは、CRIT_STABの判定結果によってループを抜けるようにしています。
ii = 1
FLAG = True
while FLAG:
resu = STAT_NON_LINE(reuse = resu,
MODELE=model2,
CHAM_MATER=fieldma2,
CARA_ELEM=carac2,
CONVERGENCE=_F(ITER_GLOB_ELAS=25,ITER_GLOB_MAXI=20),
CRIT_STAB=_F(CHAR_CRIT=(-1., 0.), ),
EXCIT=(_F(CHARGE=clim2,TYPE_CHARGE='FIXE_CSTE'),
_F(CHARGE=charge_2,FONC_MULT=func)),
COMPORTEMENT=_F(RELATION='ELAS',DEFORMATION='PETIT', ),
INCREMENT=_F(LIST_INST=list0, NUME_INST_INIT=ii, NUME_INST_FIN=ii+1),
ETAT_INIT=_F( EVOL_NOLI = resu),
METHODE='NEWTON',
NEWTON=_F(MATRICE='TANGENTE',REAC_INCR=1,REAC_ITER=10)
)
ccc = resu.LIST_CHAMPS()['MODE_FLAMB']
if len(ccc) > 0: FLAG=False
if ii >= nlimit:
FLAG=False
else:
ii = ii+1
としています。座屈発生時の変形を取り出して、モデルを修正するところは次の様になっています。
aaa = resu.LIST_VARI_ACCES()['INST'] print aaa bbb = resu.LIST_CHAMPS()['DEPL'] print bbb print ccc defo =CREA_CHAMP(TYPE_CHAM='NOEU_DEPL_R',OPERATION='EXTR', RESULTAT=resu,NOM_CHAM='DEPL',INST= aaa[ccc[0]],); mesh2 =MODI_MAILLAGE(reuse =mesh2, MAILLAGE=mesh2,DEFORME=_F(OPTION='TRAN',DEPL=defo,),); resuSI = CREA_CHAMP(NOM_CHAM='SIEF_ELGA', OPERATION='EXTR',RESULTAT=resu,INST= aaa[ccc[0]],TYPE_CHAM='ELGA_SIEF_R') Smesh = CALC_MATR_ELEM(CARA_ELEM=carac2, CHAM_MATER=fieldma2,CHARGE=(clim2, charge_2),MODELE=model2,OPTION='RIGI_MECA')
commファイルはこちら。
2.解析結果

変形は300倍で表示してあります。取り出した座屈モードはこんな感じ。

そして、座屈発生時の変形(と応力も?)を初期状態として線形座屈解析を行った結果がこちら。

同じような結果となりました。(当たり前か・・・・)
3.他のアプリによる結果
ADINAの場合
変形は、XとY方向成分を300倍程度に拡大しています。
Optstructの場合
Optstructの場合、0.22ステップを超えても計算が停止しませんでした。設定が悪かったのかもしれません。
以上です。
コメント