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がちゃんと表示されるか確かめて作業終了です。

code_aster 14.4 parallel version with PETSc

This page is a note of the work to build parallel version.

The linux box is xUbuntu 18.04LTS on VMware.

0.preparation

Preparation is same as the case of CodeAster 14.4.
Some packages are installed as follows.

$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 libboost-all-dev swig

And install superlu package.

$sudo apt-get install libsuperlu-dev
1.OpenBLAS

To get source code from author’s HP. Then execute following procedure.

$ tar xfvz OpenBLAS-0.2.20.tar.gz
$ cd OpenBLAS-0.2.20
$ make NO_AFFINITY=1 USE_OPENMP=1
$ make PREFIX=/opt/OpenBLAS install
$ echo /opt/OpenBLAS/lib | sudo tee -a /etc/ld.so.conf.d/openblas.conf
$ sudo ldconfig
2.Code_Aster eith OpenBLAS
First, the source code of code_aster is unpacked. Next, “setup.py” is modified according to the reference.
$ cd aster-full-src-14.4.0
$ sed -i "s:PREFER_COMPILER\ =\ 'GNU':PREFER_COMPILER\ =\'GNU_without_MATH'\nMATHLIB=\ '/opt/OpenBLAS/lib/libopenblas.a':g" setup.cfg

And

$ python3 setup.py install

After the build complete, to make host file for parallel calculation.

$ echo "$HOSTNAME cpu=$(cat /proc/cpuinfo | grep processor | wc -l)" > /opt/aster/etc/codeaster/mpi_hostfile
3.ScaLAPACK
$ tar xfvz scalapack_installer.tgz
$ cd scalapack_installer
$ ./setup.py --lapacklib=/opt/OpenBLAS/lib/libopenblas.a --mpicc=mpicc --mpif90=mpif90 --mpiincdir=/usr/lib/x86_64-linux-gnu/openmpi/include --ldflags_c=-fopenmp --ldflags_fc=-fopenmp --prefix=/opt/scalapack-n
Over.
4.Parmetis

Get source code and unpack it. Integer size is 8 byte in this work.
#define IDXTYPEWIDTH 64″ and “#define REALTYPEWIDTH 32” is written in ~/parmetis-4.0.3/metis/include/metis.h. or add followings to metis.h

#ifdef INTSIZE32
#define IDXTYPEWIDTH 32
#else
#define IDXTYPEWIDTH 64
#endif

then

$ tar xvf parmetis-4.0.3.tar.gz
$ cd parmetis-4.0.3
$ make config prefix=/opt/parmetis-4.0.3
$ make

Next, checking.

$ cd Graphs
$ mpirun -np 8 ptest rotor.graph rotor.graph.xyz

When any error is reported, go to~/parmetis-4.0.3 and execute follows:

$ make install

This part is finished.

5.Scotch and Ptscotch

Unpack scotch-6.0.4-aster5.tar.gz which is included the package of code_aster in /opt.

$ cd /opt/scotch-6.0.4/src

Makefile.inc is here

$ make scotch esmumps ptscotch ptesmumps CCD=mpicc

After building, check it.

$ make check
$ make ptcheck

This part is finised.

6.MUMPS

Pick mumps-5.1.2-aster6.tar.gz from the package of code_aster out and unpack it. The name of folder is changed to mumps-5.1.2_mob.

$ cd /opt/mumps-5.1.2_mob

Makefile.inc is.here.

$ make all

Next, to go to ~/examples and check the MUMPS.

7.Petsc

petsc-3.9.4.tar.gz is downloaded from author’s HP. Then unpack it in /opt. First , a few line (line 43 to 48) is commented out metis.py in /opt/petsc-3.9.4/config/BuildSystem/config/packages.

def configureLibrary(self):
config.package.Package.configureLibrary(self)
oldFlags = self.compilers.CPPFLAGS
self.compilers.CPPFLAGS += ' '+self.headers.toString(self.include)
# if not self.checkCompile('#include "metis.h"', '#if (IDXTYPEWIDTH != '+ str(self.getDefaultIndexSize())+')\n#error incompatible IDXTYPEWIDTH\n#endif'):
# if self.defaultIndexSize == 64:
# msg= '--with-64-bit-indices option requires a metis build with IDXTYPEWIDTH=64.\n'
# else:
# msg= 'IDXTYPEWIDTH=64 metis build appears to be specified for a default 32-bit-indices build of PETSc.\n'
# raise RuntimeError('Metis specified is incompatible!\n'+msg+'Suggest using --download-metis for a compatible metis')

And when openmpi is used, path to openmpi library is added to LD_LIBRARY_PATH. Next is a sample.

$ export LD_LIBRARY_PATH =/usr/lib/x86_64-linux-gnu/openmpi/lib/:$LD_LIBRARY_PATH

Then, “configure” is done.

$./configure --with-debugging=0 COPTFLAGS=-O CXXOPTFLAGS=-O FOPTFLAGS=-O --with-shared-libraries=0 --with-scalapack-dir=/opt/scalapack-n --PETSC_ARCH=linux-metis-mumps --with-metis-dir=/opt/aster/public/metis-5.1.0 --with-parmetis-dir=/opt/parmetis-4.0.3 --with-ptscotch-dir=/opt/scotch-6.0.4 --LIBS="-lgomp" --with-mumps-dir=/opt/mumps-5.1.2_mob -with-x=0 --with-blas-lapack-lib=[/opt/OpenBLAS/lib/libopenblas.a] --download-hypre=yes --download-ml=yes

and “make”

$ make PETSC_DIR=/opt/petsc-3.9.4 PETSC_ARCH=linux-metis-mumps all
8.Parallel version Code_Aster

Go to the folder stored the source code of code_aster. And unpack aster-14.4.0.

$ cd ~/Install_Files
$ cd aster-full-src-14.4.0/SRC
$ tar xfvz aster-14.4.0.tgz
$ cd aster-14.4.0

Next a part of ~/waftools/mathematics.py is modified to skip the checking of blacs.

# program testing a blacs call, output is 0 and 1
blacs_fragment = r"""
program test_blacs
    integer iam, nprocs
#    call blacs_pinfo (iam, nprocs)
#    print *,iam
#    print *,nprocs
end program test_blacs
"""

Then copy Ubuntu_gnu.py and Ubuntu_gnu_mpi.py to the folder. Now preparation of build is ready.

$ export ASTER_ROOT=/opt/aster
$ export PYTHONPATH=/$ASTER_ROOT/lib/python3.6/site-packages/:$PYTHONPATH
$ ./waf configure --use-config-dir=$ASTER_ROOT/14.4/share/aster --use-config=Ubuntu_gnu_mpi --prefix=$ASTER_ROOT/PAR14.4MUPT
$ ./waf install -p --jobs=1

When build is finished. add register the parallel version to /opt/aster/etc/codeaster/aster.

# Code_Aster versions
# versions can be absolute paths or relative to ASTER_ROOT
# examples : NEW11, /usr/lib/codeaster/NEW11

# default version (overridden by --vers option)
default_vers : stable

# available versions
# DO NOT EDIT FOLLOWING LINE !
#?vers : VVV?
vers : stable:/opt/aster/14.4/share/aster
vers : 13.6MUPT:/opt/aster/PAR14.4MUPT/share/aster

Whole work is finished.
I got many information from Code_aster forum. I appreciate the form members.



Code Aster 14.4.0をxUbuntu18.04LTS環境にインストール

新しいCode Aster 14.4.0をインストールしてみました。

まずは

現在使っているxUbuntu18.04LTSには、Code aster13.6とParallel版の構築で次の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 libboost-all-dev swig

また、Salome meca2019のときに

$sudo apt-get install libQt5* net-tools libnlopt0

を追加しました。
今回、公式サイトの記事に従って

$sudo apt-get install python3 python3-dev python3-numpy

を追加しました。

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

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

とするだけです。build終了後に

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

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

ここで、すでにParallelisme OpenMP : actifとなっています。標準でparallel版なのでしょうか?

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

 

 

 

Salome-meca 2019をxUbuntu18.04LTS環境にインストール

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

GCCのバージョンを確認しました。gcc-7.4.0が入っています。

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

ダウンロードが完了したら、展開してsalome_meca-2019.0.0-1-LGPL.runとします。

必要なpackageをインストールするため、次を実行します。

$sudo apt-get install libQt5* net-tools libnlopt0

そしてSalome-mecaをインストールします。インストール先は/opt/salome_mecaとしました。

 $./salome_meca-2019.0.0-1-LGPL.run -t /opt/salome_meca

このままでは、起動時にエラーとなるので、libstdc++.so.6へのリンクを変更します。

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

既存のリンクを削除して、新しいリンクを作成します。

salomeがあるfolderへ移動し、LD_LIBRARYのPATHを追加してから実行します。

$cd /opt/salome_meca/V2019_univ$export LD_LIBRARY_PATH=/opt/salome_meca/V2019_univ/prerequisites/Qt-591/lib/lib:$LD_LIBRARY_PATH
$export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
$./salome

(多分)うまくいくと、次の画面が見られます。

なぜか、2018の表示なのですが・・・

KERNEL他のversionは9.3.0となっていました。

code asterのversionも14.4.0になっていました。

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



はりの線形座屈解析

SSLL103を参考に線形座屈解析をしてみました。

線形座屈解析は
$$ (K+\lambda K_{g})x = 0 $$
ここで
$$K:剛性マトリックス\\
K_{g}:形状剛性マトリックス\\
\lambda :固有値$$
を解くことです.解析の手順は次の通りですね。

  1. 静解析を行う
  2. 静解析の結果を使って、剛性マトリックスと形状剛性マトリックスを作成
  3. 固有値解析

解析対象のモデルは次のとおり。はりの断面形状は、こちらのものです。

DEBUT(identifier=u'0:1',
LANG='EN')

mesh = LIRE_MAILLAGE(identifier=u'1:1',
FORMAT='MED',
UNITE=3)

meshsect = LIRE_MAILLAGE(identifier=u'2:1',
FORMAT='MED',
UNITE=20)

model = AFFE_MODELE(identifier=u'3:1',
AFFE=_F(MODELISATION=('POU_D_T', ),
PHENOMENE='MECANIQUE',
TOUT='OUI'),
MAILLAGE=mesh)

tsect = MACR_CARA_POUTRE(identifier=u'4:1',
GROUP_MA_BORD=('border', ),
GROUP_MA_INTE=('inn', ),
GROUP_NO=('origin', ),
MAILLAGE=meshsect,
NOM='1',
TABLE_CARA='OUI')

elemprop = AFFE_CARA_ELEM(identifier=u'5:1',
MODELE=model,
ORIENTATION=_F(CARA='VECT_Y',
GROUP_MA=('beam', ),
VALE=(0.0, 1.0, 0.0)),
POUTRE=_F(GROUP_MA=('beam', ),
NOM_SEC='1',
SECTION='GENERALE',
TABLE_CARA=tsect,
VARI_SECT='CONSTANT'))

steel = DEFI_MATERIAU(identifier=u'6:1',
ELAS=_F(E=210000.0,
NU=0.3))

fieldma0 = AFFE_MATERIAU(identifier=u'7:1',
AFFE=_F(MATER=(steel, ),
TOUT='OUI'),
MAILLAGE=mesh,
MODELE=model)

load = AFFE_CHAR_MECA(identifier=u'8:1',
DDL_IMPO=_F(DRX=0.0,
DRY=0.0,
DRZ=0.0,
DX=0.0,
DY=0.0,
DZ=0.0,
GROUP_NO=('fix', )),
FORCE_NODALE=_F(FZ=-10.0,
GROUP_NO=('load', )),
MODELE=model)

STAT1 = MECA_STATIQUE(identifier=u'9:1',
CARA_ELEM=elemprop,
CHAM_MATER=fieldma0,
EXCIT=_F(CHARGE=load),
MODELE=model)

SIGMA_1 = CREA_CHAMP(identifier=u'10:1',
NOM_CHAM='SIEF_ELGA',
NUME_ORDRE=1,
OPERATION='EXTR',
RESULTAT=STAT1,
TYPE_CHAM='ELGA_SIEF_R')

RIGEL = CALC_MATR_ELEM(identifier=u'11:1',
CARA_ELEM=elemprop,
CHAM_MATER=fieldma0,
CHARGE=(load, ),
MODELE=model,
OPTION='RIGI_MECA')

NU = NUME_DDL(identifier=u'12:1',
MATR_RIGI=(RIGEL, ))

RIGAS = ASSE_MATRICE(identifier=u'13:1',
MATR_ELEM=RIGEL,
NUME_DDL=NU)

RIGELG_1 = CALC_MATR_ELEM(identifier=u'14:1',
CARA_ELEM=elemprop,
MODELE=model,
OPTION='RIGI_GEOM',
SIEF_ELGA=SIGMA_1)

RIGASG_1 = ASSE_MATRICE(identifier=u'15:1',
MATR_ELEM=RIGELG_1,
NUME_DDL=NU)

MOD_1 = CALC_MODES(identifier=u'16:1',
MATR_RIGI=RIGAS,
MATR_RIGI_GEOM=RIGASG_1,
SOLVEUR_MODAL=_F(COEF_DIM_ESPACE=4),
TYPE_RESU='MODE_FLAMB')

IMPR_RESU(identifier=u'17:1',
FORMAT='MED',
RESU=_F(RESULTAT=MOD_1,
TOUT='OUI'),
UNITE=4)

IMPR_RESU(identifier=u'18:1',
FORMAT='RESULTAT',
RESU=_F(RESULTAT=MOD_1,
TOUT='OUI'),
UNITE=8)

FIN(identifier=u'19:1',
)

解析結果は

座屈荷重$P_{c}$は、$\lambda x F = 34.05×10=340.5N$でした。
Euler座屈の式から求めた値は
$P_{c}= n\frac{\pi^{2} E I}{L^{2}} $
$ = \frac{1}{4} \frac{\pi^{2} 210000 0.067333}{10^{2}}$
$ = 3.49×10^{2} N$
ですので、ほぼ一致しました。

はりの大変形解析

こちらの解析結果をみると、あることに気がつきます。

はりの変形図の先端部分の変位ですが、荷重方向にだけ変位しています。これは、解析に使用したはり要素が微小変形を扱うものだからです。そこで大変形を扱えるPOU_D_T_GD要素を使って計算してみました。

変更点だけとり上げていきます。まず、解析に使用する要素の設定です。

AFFE_MODELEの設定を次のようにします。

前回のPOU_D_TをPOU_D_T_GDにします。

解析方法にSTAT_NON_LINを使うため、計算ステップについて設定します。まず、DEFI_LIST_REELで計算ステップと値の増分(変化)について設定します。

0から10までの変化を10等分しています。

この設定をSTAT_NON_LINで使用するために、DEFI_LIST_INSTで関数にします。

10ステップで10の値を出力するので、10ステップめに荷重が100となるように設定を変更します。

続いて、計算の進展を制御するタイマー役の関数を設定します。

グラフにすると次のとおり。

解析方法のSTAT_NON_LINを設定します。入力結果は次の様になります。

出力を得るため、後処理について2つ設定します。1つ目は、表出力のためのものです。

もう一つは、部材力などの出力を得るためのものです。

計算を実行したら、Para Viewで見てみます。

先端部を拡大すると、

しっかりはりの長手方向にも変形していることが分かります。

 

 

MACR_CARA_POUTREの結果をAFFE_CARA_ELEMへ

ここの梁の計算ではbeam要素のpropertyを入力していました。

Code AsterではMACR_CARA_POUTRE の結果を取り込む機能が容易されていますので、使ってみます。

梁のmesh名と断面のmesh名が重複すると面倒なので、お互いに違う名前にしておきます。ここでは、断面のmesh名を”Mesh_11″とします。

このmeshをmed形式で書き出します。そして、梁要素のAster Studyの方で、梁要素のmesh読み込みと同様に、med形式の読み込み命令を追加します。

読み込んだmeshには”meshsect”と名前を付けます。次に、MACR_CARA_POUTRE の設定です。

“TABLE_CARA”と右隣のチェックボックスをチェックします。”NOM”は1とします。断面特性の名前は”tsect”としています。

AFFE_CARA_ELEMの設定です。

TABLE_CARA の欄で”tsect”を選択します。そして、NOM_SEC も特性計算のところで設定した1と入力します。

後の設定はこちらと同じです。

タグを選択してHistory Viewへ移動し、メモリや計算時間の設定を確認してから、Runボタンをクリックします。

変位について解析結果を示します。

こちらと同じ結果となりました。