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ステップを超えても計算が停止しませんでした。設定が悪かったのかもしれません。
以上です。
コメント