原文地址链接:http://blog.sina.com.cn/s/blog_6c3a275f0100ymk4.html,个人收藏方便查看
1 编译安装 MPICH2
MPICH是MPI标准的一种最重要的实现,MPI是为统一不同的MPP产家的消息传递API而制订的工业标准。MPI是一个库,而不是一门语言。
$tar -zxvf mpich2-1.1.1p1.tar.gz
**到MPICH官方网站下载源代码包,解压到$ WM_THIRDPARTY_DIR
$./configure --prefix=$WM_THIRDPARTY_DIR/platforms/linux64Gcc/mpich2-1.1.1p1
**设置安装目录
$make
**编译
$make install
**安装
$which mpd
$which mpicc
$which mpiexec
$which mpirun
**测试环境变量设置
#gedit mpd.hosts
**写入节点名称集合文件/$HOME/mpd.hosts
文件内容如下:
chess_001
chess_002
$mpdtrace
**查看启动几台机器:
$mpdallexit
chess_001
chess_002
**退出
$mpdboot -n 2 -f mpd.hosts
**运行集群系统
参数-n 2指定了要启动的机器个数,-f mpd.hosts指定了通过mpd.hosts运行。
测试运行MPICH的圆周率的程序
在软件的安装包里有圆周率计算的原代码icpi.c,先编译成可执行文件。
mpicc examples/icpi.c -o icp1
**编译程序,生成icp1
mpiexec -l –n 8 ./cpi1
**执行程序
参数-l指定查看线程,-n 8指定了要启动的机器个数。./cpi1绝对路径执行。
2 配置OpenFoam环境变量
cd $WM_PROJECT_DIR/etc/bashrc
: ${WM_MPLIB:=SYSTEMOPENMPI}; export WM_MPLIB
**将原来系统中默认的并行库OPENMPI修改成MPICH,OpenFOAM-1.7.1中ThirdParty中自带的OpenMPI-1.4.1在RHEL系统上实验一直有MPI_INIT的错误无法解决,无法用多节点并行计算。
3 编译Pstream
根据OpenFOAM WIKI 上提供的介绍,所有求解器如果要并行数据交换都要使用Pstream库。
cd $WM_PROJECT_DIR/src/Pstream
./Allwmake
**编译生成libPstream.so
4 编译Scotch
cd $WM_THIRDPARTY_DIR/scotch_5.1/src
./make
**编译生成libscotchmetis.so。
5并行计算过程
1) 在需要并行求解的例子目录下面创建decomposeParDict文件,对其中包含的内容进行设置。
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
numberOfSubdomains 4; //需要的并行处理器的个数;
method simple; //分割数据的方法;
simpleCoeffs
{
n ( 2 2 1 );
delta 0.001;
}
hierarchicalCoeffs
{
n ( 1 1 1 );
delta 0.001;
order xyz;
}
metisCoeffs
{
processorWeights ( 1 1 1 1 );
}
manualCoeffs
{
dataFile "";
}
distributed no;
roots ( );
注:分割数据的方法,包括simple(按照xyz的顺序,对各个方向的分块数进行设定),hierarchical(对各个方向的分块数进行设定,各方向的顺序可以更改),metis(按照各个处理器需要分配的比重进行分配),manual(手动进行人工分配,需包含分配的文件);分散后的数据是否需要分配在不同的磁盘,如果需要则应该写明分配磁盘的路径。
2) 执行分散命令,如decomposePar –case case1
3) 执行并行运算命令,其格式为:mpiexec -machine< machinefile> -np< nProcs>< foamExec>< otherArgs> > log&
4) 对计算后的结果进行重组,如reconstructPar –case case1
6第一个并行算例
OpenFOAM -1.7.1 中自带的并行计算的算例位于
~/OpenFOAM/OpenFOAM-2.0.0/tutorials/multiphase/interFoam/laminar/damBreak
gedit machinefile
**编辑machinefile
chess_001:8
chess_002:8
**指定每个节点,几个线程
mpdallexit
**退出所有节点
mpdboot -n 2 -f mpd.hosts
** 启动集群系统,注意这个命令不能重复执行
mpdtrace
**计算之前检查启动了几台节点
通过下面步骤运行interFoam
cd 0
mv alpha1.org alpha
cd ..
blockMesh
setFields
decomposePar
mpiexec –machinefile machinefile 16 interFoam
posted on
浙公网安备 33010602011771号