OpenFOAM-1.5 编译手记

最近见有编译 OpenFOAM-1.5 的,于是当初编译 OpenFOAM-1.4 的惨痛经历重现眼前,之后决定重新试一试。

这里感慨一下,OpenFOAM 中展开的编译命令实在是太长了,编译一个文件可以填满整整一屏,尤其是一堆 VTK 的 include 目录。

首先,给一下系统配置:

  1. $ cat /etc/issue
  2. Ubuntu 7.04 /n /l

  3. $ lsb_release -a
  4. No LSB modules are available.
  5. Distributor ID: Ubuntu
  6. Description:    Ubuntu 7.04
  7. Release:        7.04
  8. Codename:       feisty

  9. $ uname -a
  10. Linux hu-desktop 2.6.20-16-generic #2 SMP Fri Aug 31 00:55:27 UTC 2007 i686 GNU/Linux

  11. $ cat /proc/cpuinfo
  12. processor       : 0
  13. vendor_id       : AuthenticAMD
  14. cpu family      : 6
  15. model           : 10
  16. model name      : AMD Athlon(tm) XP 2500+
  17. stepping        : 0
  18. cpu MHz         : 1852.085
  19. cache size      : 512 KB
  20. fdiv_bug        : no
  21. hlt_bug         : no
  22. f00f_bug        : no
  23. coma_bug        : no
  24. fpu             : yes
  25. fpu_exception   : yes
  26. cpuid level     : 1
  27. wp              : yes
  28. flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr ge mca cmov                  
  29.                   pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnow up ts
  30. bogomips        : 3708.47
  31. clflush size    : 32

由于 OpenFOAM 的后处理依赖于 paraview,而 paraview 依赖于 QT 库。因为之前安装过 GCC-4.3.0 和 QT-4.3.4,不用再重新编译或使用 OpenFOAM 提供的 binary,这里给下版本信息。paraview 可以使用源码包自带的 VTK 库,以前编译的 VTK-5.0 就用不上了。这里将系统的 qmake 链接到 QT-4.3.4 的 qmake。

  1. $ /xxx/xxx/gcc --version
  2. gcc (GCC) 4.3.0
  3. Copyright (C) 2008 Free Software Foundation, Inc.
  4. This is free software; see the source for copying conditions.  There is NO
  5. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

  6. $ qmake --version
  7. QMake version 2.01a
  8. Using Qt version 4.3.4 in /xxx/xxx/qt/lib


虽然 OpenCFD 网站上提供了 OpenFOAM-1.5 的源码包,但还是用 git 拖个最新的 development 版本吧。

  1. $ gitfm -v

  2. GNU Interactive Tools 4.3.20

  3. $ git-clone git://repo.or.cz/OpenFOAM-1.5.x.git

其它 ThirdParty 的软件就直接用网站提供的  ThirdParty.General.gtgz,自己单独下的话后面会比较麻烦。

  1. $ wget http://downloads.sourceforge.net.sixxs.org/foam/ThirdParty.General.gtgz?use_mirror=mesh

  2. $ tar xvf ThirdParty.General.gtgz

一切都准备好了,找一个安装目录吧。由于习惯将软件装在 /opt/progs 下面,而其所在分区的空闲存储空间已经不足。好吧,做个链接吧。

  1. $ ln -sv /xxx/xxx/OpenFOAM-1.5.x /opt/progs/OpenFOAM/OpenFOAM-1.5.x
  2. $  ln -sv /xxx/xxx/ThirdParty /opt/progs/OpenFOAM/ThirdParty
OpenFOAM 的编译和运行需要添加一些环境变量,一般通过执行 OpenFOAM- 1.5 .x/etc/bashrc 完成。不过,需要根据实际情况修改一些内容,在 OpenFOAM- 1.5 .x/etc/bashrc 和 OpenFOAM- 1.5 .x/etc/settings.sh在 bashrc 修改版本信息和安装目录。
  1. # etc/bashrc
  2. ...
  3. export WM_PROJECT=OpenFOAM
  4. export WM_PROJECT_VERSION=1.5.x
  5. ...
  6. foamInstall=/opt/progs/OpenFOAM
  7. ...
settings.sh 中修改一下编译器信息。

  1. # etc/settings.sh
  2. ...
  3. # Compiler settings
  4. # ~~~~~~~~~~~~~~~~~
  5. WM_COMPILER_BIN=/xxx/xxx/xxx/bin
  6. WM_COMPILER_LIB=/xxx/xxx/xxx/lib
  7. # Select compiler installation
  8. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  9. # WM_COMPILER_INST = OpenFOAM | System
  10. WM_COMPILER_INST=System
  11. ...

这样设置基本搞定,开始吧。

  1. $ . /opt/progs/OpenFOAM/OpenFOAM/etc/bashrc

  2. $ cd ${WM_PROJECT_DIR}

  3. $ ./Allwmake

由于机器比较弱,编译时间很长,等着吧。完成后,OpenFOAM 的库文件和求解器都已生成,差的后处理所需的 paraview。这里用源码带的 buildParaView3.3-cvs 可以轻松搞定。也可以修改脚本,选择一下 paraview 的编译选项,如 python 脚本支持之类的,默认这些选项都是关闭的。

  1. $ cd ${WM_PROJECT_DIR}/bin

  2. $ ./buildParaView3.3-cvs

 
paraview 编译完之后,还得编译 PV3FoamReader 这个模块。
  1. $ cd ${WM_PROJECT_DIR}/applications/utilities/postProcessing/graphics/PV3FoamReader

  2. $ ./Allwmake

这里需要设置一些环境变量
  1. ParaView_INST_DIR=/opt/progs/OpenFOAM/ThirdParty/ParaView3.3-cvs
  2. ParaView_BIN=${ParaView_INST_DIR}/platforms/linuxGcc/bin
  3. export PATH=$PATH:$ParaView_BIN
  4. export PV_PLUGIN_PATH=/opt/progs/OpenFOAM/OpenFOAM-1.5.x/lib/linuxGccDPOpt

此外还需要将编译出来的模块复制到 PV_PLUGIN_PATH。

  1. $ cd ${WM_PROJECT_DIR}/applications/utilities/postProcessing/graphics/PV3FoamReader
  2. $ cd Make/linuxGccDPOpt
  3. $ cp libPV3FoamReader_SM.so libPV3FoamReader.so ${PV_PLUGIN_PATH}

至此基本完成,先学习一下 tutorials 里的例子 cavity 。







你可能感兴趣的:(Linux,CFD,software,C/C++)