Buckling analysis with STAT_NON_LINE

In Code Aster, a buckling analysis is conducted to use STAT_NON_LINE command.
At this time, I tried following items.

  • buckling analysis by STAT_NON_LINE
  • Output a mode at buckling occured
  • to do a linear buckling analysis eith initial deformation.
    And to make comparison between this and above result.

1.ANALYSIS MODEL

Mesh is as below.

DKT element was selected for the analysis to compare the result to another application’s result.

model2 = AFFE_MODELE(AFFE=_F(GROUP_MA=('web', 'top'),
MODELISATION=('DKT', ),
PHENOMENE='MECANIQUE'),
MAILLAGE=mesh2)

Loop of STAT_NON_LINE was broken by a judgement of 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

And a modification the model to use deformation is as below.

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 file is here

2.RESULT

In this figure, deformation is times 300. The mode at buckling is next figure.

And the result by linear buckling with initial deformation is here.


Of course, both result are similar.



3.RESULT BY ANOTHER APPLICATIONS

BY ADINA

Z Deformations without Z direction are expanding about 300 times.

 

 

 

 

 

Optstructの場合

Optstructの場合、The calculation was continued when step exceeded 0.22. The cause may be poor setting?

 

 

 

 

 




I hope that it helps you out.

STAT_NON_LINEで座屈解析

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

 

 

 

 

 




以上です。

Install Code aster 14.4 to xUbuntu 20.04 LTS

After installing Salome meca, Code Aster 14.4.0 was installed.

The source code was downloaded.

Then packages were added

$sudo apt-get install  gfortran g++ python-dev python-numpy liblapack-dev libblas-dev tcl tk zlib1g-dev bison flex checkinstall openmpi-bin libx11-dev cmake grace gettext swig

In case of xUbuntu 20.04, python3.8 is standard and it is cause of a trouble at building.(refere to this). Therefore we installed python3.6 and related packages as follows

$sudo apt-get install python3.6 python3.6-dev libboost1.67-all-dev

To get Numpy, visit to here and installed python-numpy_1.16.2-1ubuntu1_amd64.deb.

Then symbolic links was modified that  python3 indicated python3.6.

$cd /usr/bin
$sudo rm python3
$sudo ln -s python3.6 python3
$sudo rm python3-config
$sudo ln -s python3.6-config python3-config

Unpack the source code and move to the folder. Then start building.

$python3 setup.py install --prefix=/opt/aster

In my case, the build finished without any trouble.

After building, python3 was returned to python3.8.

$cd /usr/bin
$sudo rm python3
$sudo ln-s python3.8 python3
$sudo rm python3-config
$sudo ln -s python3.8-config python3-config

For confirmation,  forma01a was conducted.

$/opt/aster/bin/as_run --vers=14.4 --test forma01a

The result was next.

I wish for it to help you.




Code_Aster14.4をxUbuntu20.04にインストール

Salome mecaに続いてCode Aster 14.4.0をインストールしてみました。

まずはソースコードをダウンロードします。

次のPackageを入れていきます。

$sudo apt-get install  gfortran g++ python-dev python-numpy liblapack-dev libblas-dev tcl tk zlib1g-dev bison flex checkinstall openmpi-bin libx11-dev cmake grace gettext swig

を追加しました。xUbuntuの標準のpython3.8はbuild時にエラーとなるのでpython3.6をインストールします。

$sudo apt-get install python3.6 python3.6-dev libboost1.67-all-dev

numpyはここからpython-numpy_1.16.2-1ubuntu1_amd64.debを入手してインストールしました。

次にpython3がpython3.6を指すようにリンクを変更します。

$cd /usr/bin
$sudo rm python3
$sudo ln -s python3.6 python3
$sudo rm python3-config
$sudo ln -s python3.6-config python3-config

ダウンロードしたソースコードを展開し,展開先に移動して

$python3 setup.py install --prefix=/opt/aster

とするだけです。無事に完了しました。

そして、python3をpython3.8に戻します。

$cd /usr/bin
$sudo rm python3
$sudo ln-s python3.8 python3
$sudo rm python3-config
$sudo ln -s python3.8-config python3-config

確認のため、forma01aを実行しました。

$/opt/aster/bin/as_run --vers=14.4 --test forma01a

としたら、次の画面のとおり。

無事にsampleの実行は成功しました。




xUbuntu20.04にSalome-meca2019のインストール

xUbuntu20.04LTSがリリースされたので、Salome-meca 2019をインストールしました。その時の作業記録です。

xUbuntu18.04LTSと同じようにPackageを追加していきます。

$sudo apt-get install libQt5* net-tools libnlopt0
$sudo apt-get install python3 python3-dev python3-numpy

今回はさらに次の3つを追加しました。

$sudo apt-get install libffi* 

Code asterのサイト(https://www.code-aster.org/V2/spip.php?article303)へ行き、Salome-meca2019をダウンロードします。

ダウンロードが完了したら、展開してsalome_meca-2019.0.3-1-universal.runとします。
インストール先は/opt/salome_mecaとしました。

 $./salome_meca-2019.0.3-1-universal.run -t /opt/salome_meca

このままでは、起動時にエラーとなるので、libstdc++.so.6への既存のリンクを削除して、新しいリンクを作成します。リンクを変更します。

$cd /opt/salome_meca/V2019.0.3_univ/prerequisites/debianForSalome/lib 
$rm libstdc++.so.6
$ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++.so.6

さらにAsterstudyの起動時対策として次のリンクを作成します。(参考)

$ln -s /usr/lib/x86_64-linux-gnu/libffi.so libffi.so.6

salome-mecaを実行します。

(多分)うまくいくと、起動⇒AsterStudy。HelpでAboutを選ぶと次の画面が見られます。

以上です。各モジュールの動作はこれから確認していこうと思います。



First step for shape optimization?

I tried shape optimization.
Original article is here

COMM file is modified to do on Code Aster13.6.

Changing items are as follows:

  • Comment out Numeric
import numpy as N
#import numeric as N
import math
  • Addition of 1 dim element

After reading mesh data,  a node group ’TOUT’ is added.

msh[0]=DEFI_GROUP(reuse =msh[0],
MAILLAGE=msh[0],
CREA_GROUP_NO=_F(GROUP_MA='model',NOM='TOUT',) ,);

Then  1 dim elements are added on the nodes shown in ‘TOUT’.

nmh[i]=CREA_MAILLAGE(MAILLAGE=msh[0],
                     CREA_POI1=_F(NOM_GROUP_MA='spElmt',
                                    GROUP_NO='TOUT',),);
  • a procedure to make new mesh data

Not msh[i]⇒msh[i+1], renew a calculated mesh group in msh[0].

msh[0]=DEFI_GROUP(reuse =msh[0],
                  MAILLAGE=msh[0],
                  DETR_GROUP_MA=_F(NOM='model',),
                  DETR_GROUP_NO=_F(NOM='TOUT',),
                  CREA_GROUP_MA=_F(NOM='model',MAILLE=NewModel,),
                 CREA_GROUP_NO=_F(GROUP_MA='model',NOM='TOUT',) ,);

 

This is a snapshot of ASTK.

Result of 1st step.

10th step.

20th step

30th step

Final (34step)

A element which are low stress are removed.





Data is Optiastkv13-6.

形状最適化?の最初の一歩

形状の最適化について挑戦してみました。
元ねたはこちら

今のCode Aster13.6で計算できるようにしてみました。

主な変更点は次のとおり

  • Numericは使わないから削除
import numpy as N
#import numeric as N
import math
  • 1次要素を追加するところ

meshを読み込んだ後、節点GROUPの’TOUT’を追加します。

msh[0]=DEFI_GROUP(reuse =msh[0],
MAILLAGE=msh[0],
CREA_GROUP_NO=_F(GROUP_MA='model',NOM='TOUT',) ,);

そして、1次要素を追加します。

nmh[i]=CREA_MAILLAGE(MAILLAGE=msh[0],
                     CREA_POI1=_F(NOM_GROUP_MA='spElmt',
                                    GROUP_NO='TOUT',),);
  • 新しいmeshをつくるところ

msh[i]⇒msh[i+1]ではなく、msh[0]の計算対象のmesh groupを更新しています。

msh[0]=DEFI_GROUP(reuse =msh[0],
                  MAILLAGE=msh[0],
                  DETR_GROUP_MA=_F(NOM='model',),
                  DETR_GROUP_NO=_F(NOM='TOUT',),
                  CREA_GROUP_MA=_F(NOM='model',MAILLE=NewModel,),
                 CREA_GROUP_NO=_F(GROUP_MA='model',NOM='TOUT',) ,);

 

ASTKです。

1回目。

10回目

20回目

30回目

34回目(最終)

応力が低い部分が除かれていました。
 




使用したデータはOptiastkv13-6 です。

FreeFem on xUbuntu18.04LTS

FreeFemをxUbuntu18.04LTSでbuildした作業記録です。
参考はこちら

0. 準備

必要なpackageをインストールします。

#sudo apt-get update
#sudo apt-get upgrade
#sudo apt-get install cpp freeglut3-dev g++ gcc gfortran m4 make patch pkg-config wget python unzip libopenblas-dev liblapack-dev libhdf5-dev libgsl-dev \
    libscotch-dev libfftw3-dev libarpack2-dev libsuitesparse-dev libmumps-seq-dev libnlopt-dev coinor-libipopt-dev libgmm++-dev libtet1.5-dev \
    gnuplot-qt autoconf automake autotools-dev bison flex gdb valgrind git cmake

あと、次のpackageも必要になりました。

#sudo apt-get install mpich autoconf automake cmake libtool

1. Source codeのdownload

#git clone https://github.com/FreeFem/FreeFem-sources.git

そしてautoconfでbuildのためのfileを作ります。

#cd FreeFem-sources
#autoreconf -i
#./configure --enable-download --enable-optim

2. 3rd Party Packages

関連するPackageをdownloadします。今回はHPDDMを組み込みます。

#./3rdparty/getall -a
#./configure --enable-download

/usr/localの下にff-petscがあるのなら、削除します。そして、

#cd 3rdparty/ff-petsc
#make petsc-slepc SUDO=sudo 
(sudoは/usr/localへの書き込みに必要なら付けます)

petscのbuildが完了したら、

#cd -
#./reconfigure

3. build

#make 
#make check

そして

#sudo make install

以上です。

OpenFOAM v1812 on xUbuntu18.04LTS

OpenFOAM v1812をxUbuntu18.04LTSにインストールした時の作業記録です。

参考はこちら

0. 準備

必要なpackageをインストールします。

#sudo apt-get update

そして

#apt-get install build-essential flex bison cmake zlib1g-dev libboost-system-dev libboost-thread-dev \
libopenmpi-dev openmpi-bin gnuplot libreadline-dev libncurses-dev libxt-dev \
qt5-default libqt5x11extras5-dev libqt5help5 qtdeclarative5-dev qttools5-dev \
libqtwebkit-dev freeglut3-dev libqt5opengl5-dev texinfo \
libscotch-dev libcgal-dev python python-dev

そして

#apt-get install libglu1-mesa-dev

をインストールしました。さらに次のpackageが必要だったのでインストールしました。

#apt-get install qt5-default qtwayland5

1. Source codeの取得

#cd ~
#mkdir OpenFOAM
#cd OpenFOAM
#wget "http://downloads.sourceforge.net/openfoamplus/files/OpenFOAM-v1812.tgz?use_mirror=mesh" -O OpenFOAM-v1812.tgz
#wget "http://downloads.sourceforge.net/openfoamplus/files/ThirdParty-v1812.tgz?use_mirror=mesh" -O ThirdParty-v1812.tgz
 
#tar -xzf OpenFOAM-v1812.tgz
#tar -xzf ThirdParty-v1812.tgz

MPI版を構築したいので

#ln -s /usr/bin/mpicc.openmpi OpenFOAM-v1812/bin/mpicc
#ln -s /usr/bin/mpirun.openmpi OpenFOAM-v1812/bin/mpirun

とします。次に

#source $HOME/OpenFOAM/OpenFOAM-v1812/etc/bashrc WM_LABEL_SIZE=64

とあるのですが、エラーが出たので、~/OpenFOAM/OpenFOAM-v1812/etc/のbashrc内の

export WM_LABEL_SIZE=32

export WM_LABEL_SIZE=64

としました。参考どおりにaliasを.bashrcに追加しました。

#echo "alias of1812+='source \$HOME/OpenFOAM/OpenFOAM-v1812/etc/bashrc $FOAM_SETTINGS'" >> $HOME/.bashrc

2. Paraview

Paraviewをbuildします。

#cd $WM_THIRD_PARTY_DIR
#export QT_SELECT=qt5
#./makeParaView -python -mpi -python-lib /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 > log.makePV 2>&1

完了まで時間がかかりました。完了したら、log.makePVの中身を見て、エラーが発生していないことを確認しましょう。

3. Metis と Petsc

Metisはこちらから入手して、~/OpenFOAM/ThirdParty-v1812の下で展開します。metis-5.1.0というフォルダが作成されます。

Petscはこちらからpetsc-3.9.4を入手して、同様に展開します。

~/OpenFOAM/OpenFOAM-v1812/etc/config.sh/のsetupを開いて、

_foamEtc -config FFTW
_foamEtc -config petsc

petscを追加します。次に~/OpenFOAM/OpenFOAM-v1812/etc/config.sh/のpetscを開いて

petsc_version=petsc-3.9.3

petsc_version=petsc-3.9.4

に修正します。最後に、~/OpenFOAM/ThirdParty-v1812/のAllwmakeに

echo ========================================
if [ -n "$FFTW_ARCH_PATH" ]
then
    echo FFTW
    ./makeFFTW -test "$FFTW_ARCH_PATH" || \
    ./makeFFTW || warnBuildIssues FFTW
else
    warnNotFound FFTW # FFTW is optional
fi

echo
echo ========================================
if [ -n "$PETSC_ARCH_PATH" ]
then
    echo PETSC
    ./makePETSC -test "$PETSC_ARCH_PATH" || \
    ./makePETSC || warnBuildIssues PETSC
else
    warnNotFound PETSC # PETSC is optional
fi

echo
echo ========================================
echo Done ThirdParty Allwmake
echo ========================================
echo

#------------------------------------------------------------------------------

追加しました。

4. Build

#cd $WM_PROJECT_DIR
#export QT_SELECT=qt5
#./Allwmake -j 4 > log.make 2>&1

完了後、もう一回

#./Allwmake -j 4 > log.make 2>&1

として、~/OpenFOAM/OpenFOAM-v1812/のlog.make内を見て、エラーがないことを確認します。

#icoFoam -help

として、messageがちゃんと表示されるか確かめて作業終了です。