Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. preCICE软件在CentOS7超算集群上无root权限从源码编译安装记录贴

preCICE软件在CentOS7超算集群上无root权限从源码编译安装记录贴

已定时 已固定 已锁定 已移动 OpenFOAM
11 帖子 4 发布者 1.8k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • A 离线
    A 离线
    Amadeus 神
    写于 最后由 编辑
    #1

    最近想学习一下用OpenFOAM做流固耦合,看了一圈对preCICE起了一点兴趣,于是在学校超算集群上安装了一下preCICE,想以后能把OpenFOAM和其他的软件结合起来算点东西.

    看论坛里面似乎没有人说preCICE的安装,所以开一个贴记录一下从源码编译安装preCICE的痛苦经历,希望日后可以帮到需要帮助的同学哈哈哈.

    首先介绍一下集群的配置: 浪潮的机架式服务器,操作系统CentOS Linux release 7.5.1804,内核3.10.0-862.el7.x86_64. 对就是这么老...更可喜的是我的账号没有root权限,所以无论是OpenFOAM的各项依赖还是preCICE,我都是从源码编译安装的. (spack不知道为什么也用不了,非常奇怪,暴风哭泣)

    CPU是intel Platinum 8358 CPU @ 2.60GHz(双路CPU,单节点64核心,关闭超线程),内存1TB,支持InfiniBand网络. 一共80个节点,有那么几十张sxm-80GB-A100.

    学校集群上我能用上且现有的依赖只有gcc-9.2.0,m4,openMPI-4.0.3,Cmake. 其他的全都要从源码编译.

    OpenFOAM的依赖主要有flex,bison,boost,zlib? 这些都比较好解决. OpenFOAM高版本的编译安装就很奇怪,2312版本的solvers编译我是改了源码才编译完成,不过src和utilities无报错.

    下面开始preCICE的依赖安装.

    博士在读,欢迎探讨,共同进步!

    1 条回复 最后回复
  • A 离线
    A 离线
    Amadeus 神
    写于 最后由 编辑
    #2

    首先从preCICE官网发现CentOS7最高只支持到preCICE v2.3.0,而依赖项中Eigen3非常好处理,难点在于libxml2...

    对,集群上libxml2库我找不到,只能自己安装. 推荐安装libxml2-2.9.13,这个版本修复了一个关于Python的bug. 在configure时要编译有动态链接库的版本:

    ./configure --prefix=libxml2的/安装/路径 CPPFLAGS="-I集群中python3的位置(我是miniconda3)" LDFLAGS="-L$HOME/miniconda3/lib" --enable-shared=yes
    

    然后PETSc库也得自己装,顺带把lapack和BLAS也让他一起装了

    ./configure  --with-precision=double --prefix=petsc/的/安装路径  --with-openmpi=1 --with-openmpi-dir=/openMPI/的路径 --download-f2cblaslapack --with-fc=0
    

    make和make install步骤就省略了

    博士在读,欢迎探讨,共同进步!

    1 条回复 最后回复
  • A 离线
    A 离线
    Amadeus 神
    写于 最后由 编辑
    #3

    preCICE的安装包解压至指定位置后,configure步骤也是有一些坑,在build文件夹内

    cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/precice/的安装/路径 -DPYTHON_EXECUTABLE=miniconda3中的/python/路径 ..
    

    没指定Python就会出现一些奇怪的问题,我也没搞明白为啥...

    其后就正常make和make install即可,最后make test_install应该是OK的

    博士在读,欢迎探讨,共同进步!

    1 条回复 最后回复
  • Mina LeeM 离线
    Mina LeeM 离线
    Mina Lee
    写于 最后由 编辑
    #4

    我之前在超算里安装precice+ccx+of,安装了一个月才装上,同样也是没有root权限,找了一大堆人,花了七八张毛爷爷才搞上。
    我遇到的问题,OF编译就会报错,超算里所有的C++都试过了,都报错。最后找人查到了原因,超算的C++缺mpicxx环境,重新装的C++才搞上。

    A 1 条回复 最后回复
  • 尚 在线
    尚 在线
    尚善若水
    写于 最后由 编辑
    #5

    这种用conda安装环境再编译使用是不是好一些?有一些第三方库我就是这样弄的

    Mina LeeM 1 条回复 最后回复
  • Mina LeeM 离线
    Mina LeeM 离线
    Mina Lee
    在 中回复了 尚善若水 最后由 编辑
    #6

    @尚善若水 可能不太行,我这个所有三方库、所有软件都用新C++重新编译的。

    1 条回复 最后回复
  • A 离线
    A 离线
    Amadeus 神
    在 中回复了 Mina Lee 最后由 编辑
    #7

    @Mina-Lee 在 preCICE软件在CentOS7超算集群上无root权限从源码编译安装记录贴 中说:

    我之前在超算里安装precice+ccx+of,安装了一个月才装上,同样也是没有root权限,找了一大堆人,花了七八张毛爷爷才搞上。
    我遇到的问题,OF编译就会报错,超算里所有的C++都试过了,都报错。最后找人查到了原因,超算的C++缺mpicxx环境,重新装的C++才搞上。

    那可真是太痛苦了... 幸好我这边自带openMPI

    博士在读,欢迎探讨,共同进步!

    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #8

    你们可真厉害啊,没root都能装..

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • A 离线
    A 离线
    Amadeus 神
    写于 最后由 编辑
    #9

    安装完成preCICE之后,继续编译安装calculix-preCICE-adapter.

    编译依赖项

    根据官网指南编译SPOOLES2.2, ARPACK和yaml-cpp.

    spooles可以按照指南编译,但是在make.inc文件中需要修改第106行左右的

    MPI_INSTALL_DIR = mpi/安装/路径
    

    在编译安装arpack96时,由于PETSc库是在preCICE安装时的依赖项,而PETSc安装时自动安装了BLAS和LAPACK,因此除了指南里面的要求之外,还需要修改ARmake.inc文件中第60行左右的

    LAPACKLIB = PETSc库的安装路径/petsc-3.22.2/arch-linux-c-debug/externalpackages/f2cblaslapack-3.8.0.q2/libf2clapack.a
    BLASLIB = PETSc库的安装路径/petsc-3.22.2/arch-linux-c-debug/externalpackages/f2cblaslapack-3.8.0.q2/libf2cblas.
    

    yaml-cpp在集群中的安装有点坑,首选是查看自己的集群中是否已经安装好了. 次选才是自己从源码编译安装,因为在编译时必须注意集群中的默认gcc版本,例如CentOS7自带的gcc-4.8.5就坑了我好一会儿....

    根据指南走,在进入build文件夹之后,cmake命令修改为

    CC=$(which gcc) CXX=$(which g++) cmake -DBUILD_SHARED_LIBS=ON ..
    

    以此指定为自己OpenFOAM和preCICE常用的编译器.

    不然可能在编译calculix-adapter时出现如下错误

    mpifort -fopenmp -Wall -O3 -o bin/ccx_preCICE bin/ccx_2.20.o bin/ccx_2.20.a /beegfs/home/20144242/software/Calculix/dependencies/SPOOLES.2.2/spooles.a -L/beegfs/home/20144242/app/precice/lib64 -lprecice   -lstdc++ -L/beegfs/home/20144242/software/Calculix/dependencies/yaml-cpp-yaml-cpp-0.6.2/build -lyaml-cpp /beegfs/home/20144242/software/Calculix/dependencies/ARPACK/libarpack_INTEL.a -lpthread -lm -lc
    /usr/bin/ld: warning: libgfortran.so.3, needed by /beegfs/software/openmpi-403/lib/libmpi_usempi.so, may conflict with libgfortran.so.5
    /usr/bin/ld: warning: libgfortran.so.3, needed by /beegfs/software/openmpi-403/lib/libmpi_usempi.so, may conflict with libgfortran.so.5
    bin/ccx_2.20.a(ConfigReader.o): In function `ConfigReader_Read':
    ConfigReader.cpp:(.text+0x84): undefined reference to `YAML::LoadFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    bin/ccx_2.20.a(ConfigReader.o): In function `YAML::detail::node_ref::set_scalar(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
    ConfigReader.cpp:(.text._ZN4YAML6detail8node_ref10set_scalarERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE[_ZN4YAML6detail8node_ref10set_scalarERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE]+0x2a): undefined reference to `YAML::detail::node_data::set_scalar(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    bin/ccx_2.20.a(ConfigReader.o): In function `YAML::Node::Scalar[abi:cxx11]() const':
    ConfigReader.cpp:(.text._ZNK4YAML4Node6ScalarB5cxx11Ev[_ZNK4YAML4Node6ScalarB5cxx11Ev]+0x64): undefined reference to `YAML::detail::node_data::empty_scalar[abi:cxx11]'
    collect2: error: ld returned 1 exit status
    make: *** [bin/ccx_preCICE] Error 1
    

    编译calculix-adapter

    在依赖项编译完成后,根据指南修改makefile文件,最后编译即可.

    但是如果碰到了如下和_MT相关的错误

    bin/ccx_2.19.a(spooles.o): In function `factor_MT':
    spooles.c:(.text+0x58b): undefined reference to `FrontMtx_MT_factorInpMtx'
    bin/ccx_2.19.a(spooles.o): In functio
    [Makefile.txt|attachment](upload://hTRrap8IGPDYBU68AlxhityA5RU.txt) (3.7 KB)
    n `fsolve_MT':
    spooles.c:(.text+0x716): undefined reference to `FrontMtx_MT_solve'
    collect2: error: ld returned 1 exit status
    make: *** [Makefile:107: bin/ccx_preCICE] Error 1
    

    则需要删除makefile文件中第55行左右的-DUSE_MT标志,把CFLAGS修改为

    CFLAGS = -Wall -O3 -fopenmp $(INCLUDES) -DARCH="Linux" -DSPOOLES -DARPACK -DMATRIXSTORAGE
    

    然后再次编译即可.

    博士在读,欢迎探讨,共同进步!

    A 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #10

    感谢分享!!

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • A 离线
    A 离线
    Amadeus 神
    在 中回复了 Amadeus 最后由 编辑
    #11

    @Amadeus 在 preCICE软件在CentOS7超算集群上无root权限从源码编译安装记录贴 中说:

    但是如果碰到了如下和_MT相关的错误

    此处错误的原因在于spooles库编译时没有开启多线程(Multi-Thread),如果你的calculix-preCICE不需要启用多线程,那么就无需往下看了.

    spooles多线程编译

    @Amadeus 在 preCICE软件在CentOS7超算集群上无root权限从源码编译安装记录贴 中说:

    spooles可以按照指南编译

    按照preCICE官方给出的指南是默认没有打开spooles库的多线程编译选项的.
    因此在make lib之后,需要进入 spooles库所在路径/spooles.2.2/MT/src 中,然后执行

     make makeLib
    

    注意大小写敏感. 然后就会把多线程支持库合并编译进之前生成的spooles.a文件.

    最后回到calculix-adapter文件夹,make clean清理之前生成的文件,把makefile文件第55行的CFLAGS改回来即可

    CFLAGS = -Wall -O3 -fopenmp $(INCLUDES) -DARCH="Linux" -DSPOOLES -DARPACK -DMATRIXSTORAGE -DUSE_MT
    

    最后 make -j 重新编译

    博士在读,欢迎探讨,共同进步!

    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]