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ボタンをクリックします。

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

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

Aster Studyではりの計算

こちらの梁の計算 についてbeam要素を用いてAster Studyを使って計算します。

Salome-Mecaを起動します。

$ LANG='en_EN.utf8' ./salome

GeometryからMeshに移動して、Femモデルを作成します。

Femモデルを作成し終えたら、Aster Studyへ移動します。

節点1は拘束しますから、”fix”と名前を付けておきます。同様に荷重が作用する節点2には”load”とします。

Aster Study に移動し、”Add stage”で新しいcommを作成します。

Mesh > Read meshを選択します。

Mesh Fileは、”Mesh”メニューで作成したMesh_1を選択します。Formatはmedです。Model definition > Assign finite elementで解析の種類、要素の種類を設定します。

梁の曲げなので”Mechanic”、要素にはTimoshenko梁を選びます。

Model definition > AFFE_CARA_ELEMを選び、梁要素の断面特性値を入力します。

設定する特性値の名前を入力し、

対応する数値を入力します。

材料特性を入力します。Material > Define a materialを選択します。

材料名は”steel”として、線形等方性を選んで、縦弾性係数とポアソン比を入力します。そして、Material > Assign a materialから、”steel”を要素に適用します。

境界条件の設定です。BC and Load > Assign mechanical loadから

を選択して、それぞれについて次のように入力します。

次に、AnalysisからStatic mechanical analysisを選択して、material、Model、Loadsを入力します。

計算結果はreslinに格納されます。そして、出力のための処理を設定します。ここでは、Paraview用と、節点変位をtextファイルに出力するための2つの設定を行います。

Post processing > CALC_CHAMP

Post processing > POST_RELEVE_T

次に、出力を指示します。Output > Set output resultsでParaview用のmed形式の出力を指示します。

もう一つ、荷重作用点の変位をtext出力するための指示をだします。

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

あとは、緑印の実行完了を待つだけです。

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

荷重点の変位のtext出力は次のとおり。

Shell要素を用いた計算結果と同じ値になりました。

今回使用したbeam_1_bend.zipです。

Aster Studyで断面性能の計算

Salome-Mecaに挑戦です。こちらの断面 についてAster Studyを使って計算します。内側の境界線に”inn”と名前を付けます。

Salome-Mecaを起動します。

$ LANG='en_EN.utf8' ./salome

断面を作成して、Meshを作成したらAster Studyへ移動します。

“Add stage”で新しいcommを作成します。

Stage1 →Mesh→” Read a mesh”と選択していきます。

一番上のMesh file locationで先に作成したMesh_1を選んでOKボタンを押します。

次にMesh_1に含まれるMeshにグループ名を付けます。

stage1 Show allで検索ダイアログからMACRO_CARA_POUTREを選択します。

そして、計算時の原点となるNodeを入力します。ここではoriginと名付けたNodeです。

続けて、境界のエッジのグループを入力します。GROUP_MAで要素のグループ”shell”を入力すると、JXの値が?になってしまいます。

最後に結果出力の指定です。Stage1→ Output→ IMPR_TABLEと進みます。

一番上は標準のまま。二番目は結果が入ったファイル名です。FORMAT_Rは出力書式です。指数形式で20マスを使い、そのうち9マスが数値の小数点以下の桁数となります。FORTRANのFORMAT文と同じですね。

以上で準備ができました。それでは実行です。

画面の下のRunボタンをクリックします。

回転する砂時計が現れます。

無事に終了すると緑の円マークとなります。

で完了です。先に出力先に指定したbox_section.resuが作成されています。

code_aster v13.6 parallel version

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

(In the case of Code aster v14.4 is here.)

0.preparation

Preparation is same as the case of CodeAster 13.6.
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

 

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-13.6.0
$ sed -i "s:PREFER_COMPILER\ =\ 'GNU':PREFER_COMPILER\ =\'GNU_without_MATH'\nMATHLIB=\ '/opt/OpenBLAS/lib/libopenblas.a':g" setup.cfg

And

$ python 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
Over.
4.Parmetis

Get source code and unpack it.

$ 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.1-aster2.tar.gz from the package of code_aster out and unpack it in /opt. The name of folder is changed to mumps-5.1.1-mpi.

$ cd /opt/mumps-5.1.1-mpi

Makefile.inc is here.

$ make all

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

7.Petsc

petsc-3.7.7.tar.gz is downloaded from author’s HP. Then unpack it in /opt. First step is “config”.

$ cd /opt/petsc-3.7.7
$ ./config/configure.py --with-mumps-dir=/opt/mumps-5.1.1-mpi --with-openmpi-dir=/usr/lib/x86_64-linux-gnu/openmpi --with-blas-lapack-lib=[/opt/OpenBLAS/lib/libopenblas.a] --download-hypre=yes --download-ml=yes --with-debugging=0 COPTFLAGS=-O1 CXXOPTFLAGS=-O1 FOPTFLAGS=-O1 --with-x=0 --with-shared-libraries=0 --with-scalapack-dir=/opt/scalapack --PETSC_ARCH=linux-metis-mumps --with-metis-dir=/opt/aster/public/metis-5.1.0 --with-parmetis-dir=/opt/parmetis-4.0.3 --with-scotch-dir=/opt/scotch-6.0.4 --with-ptscotch-dir=/opt/scotch-6.0.4 LIBS=-lgomp --configModules=PETSc.Configure --optionsModule=PETSc.compilerOptions

Next step is “make”

$ make PETSC_DIR=/opt/petsc-3.7.7 PETSC_ARCH=linux-metis-mumps all

Then a check of function.

$ make PETSC_DIR=/opt/petsc-3.7.7 PETSC_ARCH=linux-metis-mumps test
$ make PETSC_DIR=/opt/petsc-3.7.7 PETSC_ARCH=linux-metis-mumps streams

This part is finished.

8.Parallel version Code_Aster

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

$ cd ~/Install_Files
$ cd aster-full-src-13.6.0/SRC
$ tar xfvz aster-13.6.0.tgz
$ cd aster-13.6.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
$ ./waf configure --use-config-dir=$ASTER_ROOT/13.6/share/aster --use-config=Ubuntu_gnu_mpi --prefix=$ASTER_ROOT/PAR13.6MUPT2
$ ./waf install -p

When build is finised. 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/13.6/share/aster
vers : 13.6MUPT:/opt/aster/PAR13.6MUPT2/share/aster
7.Change the setting
Open /opt/aster/etc/codeaster/asrun and edit the line of “mpi_get_procid_cmd”.
mpi_get_procid_cmd : echo $OMPI_COMM_WORLD_RANK
Next, the line regarding to “mpirun” is modified as follows.
mpirun_cmd : mpirun -np %(mpi_nbcpu)s %(program)s

Whole work is finished. Let’s Enjoy!