OpenFOAM 学习笔记

目录

目录

OpenFOAM在Centos7系统集群上OpenMPI并行的配置

1)环境说明

2)建立节点间SSH无密码连接

3)NFS的配置(已安装NFS)

(1)管理节点配置

(2)计算节点配置

4)环境的配置与注意事项

OpenFOAM使用小Tips

foamNewApp

基于.msh格式的OpenFOAM轴对称网格生成

基于redistributePar的网格剖分与重组


OpenFOAM在Centos7系统集群上OpenMPI并行的配置

主要参考:

http://www.4k8k.xyz/article/PitBXu/109643758

https://qizhanming.com/blog/2018/08/08/how-to-install-nfs-on-centos-7

 https://deepzz.com/post/how-to-setup-ssh-config.html

https://cfd-china.com/topic/5502/cfd%E6%80%A7%E8%83%BD%E6%80%AA%E5%85%BD%E4%B9%8B%E5%8F%8C%E6%9C%BA%E5%B9%B6%E8%81%94?lang=zh-CN

 https://blog.csdn.net/shenyuye/article/details/107696635

问题集锦:

https://www.open-mpi.org/faq/?category=running

https://www.cfd-online.com/Forums/openfoam-solving/219020-openfoam-v1812-over-infiniband.html

https://serverfault.com/questions/240897/how-to-properly-set-permissions-for-nfs-folder-permission-denied-on-mounting-en

 https://blog.csdn.net/wenfeifang/article/details/83029067

 https://blog.csdn.net/xiyangyang8/article/details/49725039

https://github.com/open-mpi/ompi/issues/6377

1)环境说明

已有设备(CentOS Linux 7.6.1810  Kernel:Linux 3.10.0-95)

管理节点:manager 计算节点:node1~6 (上述节点名称与ip address对应,通过/etc/hosts可设置)

[root@manager etc]# cat hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.0.0.10  manager
10.0.0.11  node01
10.0.0.12  node02
10.0.0.13  node03
10.0.0.14  node04
10.0.0.15  node05
10.0.0.16  node06
10.0.0.17  node07

可先测试各节点间是否可以ping通 (ping node01)

预先需要在各节点安装ssh 和 NFS 

sudo yum install ssh
sudo yum install nfs-utils

2)建立节点间SSH无密码连接

  1.  在服务器节点上生成一对SSH 私钥和公钥
  2. 将公钥上传到集群计算节点

管理节点上生成SSH私钥和公钥

ssh-keygen -t rsa #连续回车

在管理节点的~/.ssh/目录下执行上述命令,生成名为id_rsa的私钥文件和名为id_rsa.pub的公钥文件,-t 表示密钥类型是rsa。

计算节点配置

1)将本地的公钥文件上传

scp -p ~/.ssh/id_rsa.pub root@node01:/root/.ssh/ #将公钥上传到相应(node01)节点的指定免密登录用户(root)的.ssh目录下

2)在相应的节点中需免密登录的用户家目录下查看是否有 ~/.ssh/authorized_keys 这个文件,
如果没有手动创建一个:

touch ~/.ssh/authorized_keys

3)将公钥内容写入到authorized_keys文件中

cat -n ~/.ssh/rsa.pub ~/.ssh/authorized_keys

配置权限

  1. 将用户的home目录权限设为700
  2. 将.ssh目录的权限为700
  3. 将authorized_keys目录的权限为600

注:计算节点配置公钥的方式还可使用 ssh-copy-id 复制公钥

ssh-copy-id username@host #它会将本地的所有公钥都传到对应的节点

或者手动复制服务器节点中id_rsa.pub文件的内容到计算节点的authorized_keys文件中。

为了实现相互免密访问,需要在服务器节点上也储存计算节点的公钥。为了方便起见,可以将服务器节点的公钥和私钥以及authorized_keys(也即.ssh目录)复制到所有计算机节点相应免密用户的.ssh目录,并配置权限,从而不必在每个计算节点上单独生成key和复制key到其他节点。

 测试是否已经实现免密登录

ssh user@host

 有时为了方便可以在.ssh目录中添加config文件,并配置相应的信息,从而实现默认用户连接方式,更详细的内容可参见:https://deepzz.com/post/how-to-setup-ssh-config.html

$ vim ~/.ssh/config
Host sshtest
    HostName ssh.test.com
    User user
    Port 2200
    IdentityFile ~/.ssh/id_rsa_test

Host *
    User amber

3)NFS的配置(已安装NFS)

(1)管理节点配置

设置 NFS 服务开机启动

$ sudo systemctl enable rpcbind
$ sudo systemctl enable nfs

启动 NFS 服务

$ sudo systemctl start rpcbind
$ sudo systemctl start nfs

防火墙需要打开 rpc-bind 和 nfs 的服务(如未设置防火墙则不需要打开)

$ sudo firewall-cmd --zone=public --permanent --add-service={rpc-bind,mountd,nfs}
success
$ sudo firewall-cmd --reload
success

配置共享目录(已安装OpenFOAM)

服务启动之后,在管理节点配置一个共享目录。选择OpenFOAM的安装目录(~/OpenFOAM)作为共享目录。根据这一目录,配置相应的导出目录

[amber@manager OpenFOAM]$ cat /etc/exports
/home/amber/OpenFOAM *(rw,sync,no_root_squash,no_subtree_check)

<<COMMENT

/data: 共享目录位置。
192.168.0.0/24: 客户端 IP 范围,* 代表所有,即没有限制。
rw: 权限设置,可读可写。
sync: 同步共享目录。
no_root_squash: 可以使用 root 授权。
no_all_squash: 可以使用普通用户授权。

COMMENT

保存设置之后,重启 NFS 服务。

$ sudo systemctl restart nfs

可以检查一下本地的共享目录

$ showmount -e localhost
Export list for localhost:
/home/zhangzheng/OpenFOAM *

(2)计算节点配置

在对计算节点进行NFS配置前需要建立与管理节点相对应的用户和组以及共享目录

①建立相应的用户和组

在此采用一个shell脚本(adduser.sh)实现批量建立User和Group:

#! /bin/bash
G=$2
U=$3
P=$4
if [[ $1 = "create" ]] && [[ $# -eq 4 ]]
then
        # Linux 用户存在则退出
        A=`grep -w $U /etc/passwd | wc -l`
        if [[ $A -ne 0  ]]
        then
                echo  "USER ALREADY EXIST"
                exit 1
        fi
        # create linux gproup/user/passwd
        for i in node01
        do
               ssh $i "useradd -d /home/$U -g $G $U;echo "$P" | passwd --stdin $U" 
                #通过echo, 标准输入密码,在sudo命令中也可如此应用 sudo --stdin
        done

elif [[ $1 = "delete" ]] && [[ $# -eq 3 ]]
then
        # delete linux user,参数依次为 组名、用户名
        for i in node01
        do
               ssh $i "userdel -r $U"
        done

else
        echo 400
fi

使用一下命令执行adduser.sh( chmod 700) 脚本:

./adduser.sh create GID UID Passwd #输入脚本中创建用户和密码所需的参数

注意在执行此脚本时,应该通过ssh免密登录至对应节点的root用户,可在.ssh的config文件中设置.

②建立共享文件夹

在各计算节点的amber用户下建立相应的文件/home/amber/OpenFOAM,相似的也可采用shell脚本实现,同时需要将免密登录的用户更改为amber。

③挂载共享目录到计算节点

$ sudo mount -t nfs manager:/home/amberMpi/OpenFOAM  /home/amberMpi/OpenFOAM

挂载成功后可用df -h命令查看当前节点是否挂载管理节点共享文件

④开机自动挂载共享目录

由于使用mount命令挂载共享目录在重启系统之后会失效,需要进行以下设置以实现开机自动挂载

echo "mount -t nfs manager:/home/amberMpi/OpenFOAM  /home/amberMpi/OpenFOAM" >> /etc/rc.local && chmod 777 /etc/rc.local && chmod -R 777 /etc/rc.d

#将挂载命令写入/etc/rc.local 文件尾部,同时将上述文件的可执行权限打开

4)环境的配置与注意事项

SSH免密登录和NSF共享目录配置好后,需要将管理节点和登录节点/home目录中,OpenFOAM的环境变量配置到~/.bashrc 中

source ~/OpenFOAM/OpenFOAM-v2112/etc/bashrc
alias of2112=“source ~/OpenFOAM/OpenFOAM-v2112/etc/bashrc”
  • 注意事项:
  • 1)需要注意SSH免密登录中相关文件和文件夹的权限设置;注意登录的用户的设置,最好在管理节点和计算节点建立相同的用户;
  • 2)NSF共享文件的配置需要建立在相同的用户和用户组间,且其UID和GROUPID均需要相同,通过/etc/passwd可以查看用户的所有信息;如过未满足上述要求则可能出现计算节点写入共享文件夹受限,这点也可通过修改/etc/exports文件中的权限参数进行修改。可参考:https://blog.csdn.net/wenfeifang/article/details/83029067
cat /etc/passwd
amber:x:1001:1001::/home/amberMpi:/bin/bash
# 第一个1001对应UID 后一个为GID
  • 3)使用mpirun命令执行相应的OpenFOAM程序时,需要注意mpirun的参数设置问题。否则可能出现无法连接相应计算节点的错误,这种错误与节点间的网络连接方式有关
mpirun –mca btl self,sm,openib //用于 Inifiniband
mpirun –mca mtl psm2 //用于 Omni-Path(OPA)

        以下为本集群所使用的mpirun命令脚本: 

#!/bin/bash
np=`cat system/decomposeParDict |grep "numberOfSubdomains"| tr -cd "[0-9]"`
echo ""
echo "program will run on $np processors!"
echo ""
mpirun -mca btl_openib_allow_ib 1 --hostfile hosts --np $np simpleFoam  -parallel &> log.test &
# -mca btl_openib_allow_ib 1 是比较重要的参数

      上述hosts文件为每个节点上进程的分配,其中np=192,每个节点分配32个进程:

node01 slots=32
node02 slots=32
node03 slots=32
node04 slots=32
node05 slots=32
node06 slots=32

    查看计算节点的CPU信息(参考: https://blog.csdn.net/w8y56f/article/details/89816283),可登录节点后运行:

#列出物理CPU及各自的物理核数
cat /proc/cpuinfo | grep -E "physical id|cpu cores" | sed 'N;s/\n/ /' | sort | uniq
#输出如下
physical id     : 0 cpu cores   : 16
physical id     : 1 cpu cores   : 16

#列出物理CPU及各自的逻辑核数
cat /proc/cpuinfo | grep "physical id" | sort | uniq -c
#输出如下:
 32 physical id     : 0
 32 physical id     : 1

OpenFOAM使用小Tips

  • foamNewApp


    基于.msh格式的OpenFOAM轴对称网格生成

    1)使用ICEM划分平面网格后拉伸extrude一层网格后导出为3D网格,生成的网格导出为ansys fluent 3D *.msh格式。

    2)将*.msh格式的网格转化为wedge型网格(wedgePlease工具),具体过程可参考如下所示:

    #!/bin/sh
    cd ${0%/*} || exit 1    # run from this directory
    
    # Source tutorial clean functions
    . $WM_PROJECT_DIR/bin/tools/CleanFunctions
    
    fluentMeshToFoam -scale 1e-3 fim_01_00_msh_C_01_01.fluentMesh > log.fluentMeshToFoam
    wedgePlease -angle 5
    # checkMesh > log.checkMesh_bad
    collapseEdges -overwrite # remove the 0 length edges on the axis patch
    # checkMesh > log.checkMesh_good
    # type wedge boundary condition
    foamDictionary constant/polyMesh/boundary -entry entry0.FRONT.type -set wedge
    foamDictionary constant/polyMesh/boundary -entry entry0.BACK.type -set wedge
    createPatch -overwrite #removing patch axis which contains no faces

    wedgePleasehttps://github.com/krebeljk/wedgePlease

    3)wedgePlease的原始代码中mesh网格以y轴为旋转轴,因此在icem构建模型和网格时需要注意轴线坐标选取。


基于redistributePar的网格剖分与重组

 redistributePar的功能选项如下:其中reconstruct 和decompose近似于reconstructPar和decomposePar的功能,但可直接实现多节点间的并行。

以网格的剖分为例,bash脚本如下:

#!/bin/bash`
np=`cat system/decomposeParDict |grep "numberOfSubdomains"| tr -cd "[0-9]"`
echo ""
echo "ReconstrcutPar program will run on $np processors!"
echo ""
mpirun -mca btl_openib_allow_ib 1 --hostfile hosts_re --np $np redistributePar -decompose -parallel -latestTime

 注:1)decompose默认为overwrite模式,因此无法如decomposePar -fields一般实现仅剖分变量,而不对网格几何数据进行剖分。2)并行所需核数应等于decomposeParDIict中的分区数。3)对于网格规模千万或亿级和输出变量较多的case,并行相较于串行有十几到几十倍的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值