0. 如果是安装完ubuntu后第一次配置phg,那么要首先apt-get install g++ gcc gfortran;
并且还要安装mpich,原因是phg要用到mpi做并行,至于mpich的下载和安装如下,确保安装了g++和gcc和gfortron编译器:
1). 按照自己习惯将mpich-3.1.4.tar.gz源码解压到 /usr/local/src 目录下
2). cd /usr/local/src/mpich-3.1.4/
3). ./configure --prefix=/usr/local/mpich
(...省略...)
make
(...省略...)
make install
(...省略...)
安装结束!
4). 添加下面这行到/etc/profile文件的最后,然后重新起动系统使环境变量永久生效。
export PATH=/usr/local/mpich-3.1.4/bin:$PATH
具体更细节的mpich的安装可以参考:http://www.lupaworld.com/thread-871330-1-1.html
1. 首先从官网下载好压缩文件:http://lsec.cc.ac.cn/phg/
2. 按照我自己在ubuntu14.04下安装软件的习惯,将源码解压到了/usr/local/src目录下
3. 进入到phg-0.9.2目录下
4. 可以查看 INSTALL内容:vim INSTALL
5. 下面是具体配置phg
1). 首先查看configure 的帮助内容: ./configure --help | more
在所有configure‘选项’内容中需要注意的是
a). ----prefix=/path 这个‘选项’,其中/path是自己安装位置的路径,我自的安装路径为/usr/local/phg
b1). 还有下下面的那个静态库的选项,
尤其要在 ./configure 选项中要加入 --disable-shared ,否则在下面的 make all 或make install 操作中会提示下面的错误:
/usr/local/src/phg-0.9.2/src/libphg.so:对‘feenableexcept’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘sqrt’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘tan’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘log’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘feclearexcept’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘tgamma’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘exp’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘sin’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘pow’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘cos’未定义的引用
collect2: error: ld returned 1 exit status
make[1]: *** [navier-stokes] 错误 1
make[1]:正在离开目录 `/usr/local/src/phg-0.9.2/examples'
make: *** [all] 错误 2
b2). 如果在 ./configure 选项中没有加入 --disable-shared 在下面的 make all 或make install 操作中会提示下面的错误:
/usr/local/src/phg-0.9.2/src/libphg.so:对‘feenableexcept’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘sqrt’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘tan’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘log’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘feclearexcept’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘tgamma’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘exp’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘sin’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘pow’未定义的引用
/usr/local/src/phg-0.9.2/src/libphg.so:对‘cos’未定义的引用
collect2: error: ld returned 1 exit status
make[1]: *** [navier-stokes] 错误 1
make[1]:正在离开目录 `/usr/local/src/phg-0.9.2/examples'
make: *** [all] 错误 2
解决方法一:如同 b1) 中在 ./configure 选项中要加入 --disable-shared
解决方法二:由错误提示可知,明显都是对于一些数学函数没有定义,那么肯定是在 make 过程中,没有将 libm.a(这个库其实应该是在安装gcc或个g++时自带的) 包含(include)进去,在根目录下搜索 libm.a,可以看到该库在目录 /usr/lib/x86_64-linux-gnu/ 下,再来对比 phg/Makefile.inc(关于 Makefile.inc 可以再查查具体含义) 文档中 LIBS= 这一项中 -L/usr/lib/x86_64-linux-gnu 后面没有接着 -lm(这里可以自行从网上找找如何包含库文件的语法),所以在 -L/usr/lib/x86_64-linux-gnu -lm,然后保存。
再 make all 或 make install 就ok了。
2). 然后进行./configure 配置
3). make clean; make
4). 按照 INSTALL 的内容,进行 make all
5). make install
6). make install-doc
安装成功,但是还是有下面的警告,貌似可以忽略了:
6. 配置好phg后,接下来就要跑跑example了,要想要用mpich -np 2 ./poisson来开2个进程的话,还需要如下的配置
1). 按照 INSTALL 的内容,在'obj/'文件夹中参考 obj/ReadMe.txt 中说明的操作(要根据自己的机子类型)
只是我自己的操作在 ./configure 和 make 步骤时略微不同,下面是我自己的操作
cd phg-x.x.x
cp obj/mpich-x86_64/double_int/*.o src/.
rm -f src/{refine,coarsen}.c src/libphg.*
./configure --prefix=/usr/local/phg/ --disable-shared
make all
2). 第二点其实是关于 Makefile 的,对于 Makefile 内容并不是很了解,但大概能看懂是什么什么意思,这里想要说的是按照pgh用户手册中提供的方法
如上面phg手册中提供的Makefile文件的内容很简单,但是由此make出来的可执行文件不能用 mpirun -np 2 ./poisson,只能用 mpirun -np 1 ./poisson,
也就是说由此make出的可执行文件只能用单线程,不能用多线程。所以最好的办法是在 phg 源码中的 phg-x.x.x/examples/Makefile 中进行修改,修改
时仍需要特别注意一些路径,比如lib的路径等等
7. phg源码中在 phg-x.x.x/utils 文件夹中提供了几个shell脚本
1). 比较有用的就是 phgdoc 这个 shell 脚本,例如可以利用命令 ./phgdoc phgImport 来查询函数 phgImport 的用法。
如果 ./phgdoc 不是可执行文件时可以利用 chmod a+x phgdoc 来进行权限的修改。
第一次用可能会提示 gawk: 未找到命令,此时要安装 gawk 即可。
2). 最重要的一个脚本就是 utils/tetgen2medit 因为自己一直用的是 tetgen 来生成网格的,所以这条脚本就将 tetgen 生成的网格
转换成 medit 格式的了,所以很重要,但是在 utils/tetgen2medit 文件中没有添加 PATH 路径,以致在执行 ./tetgen2medit 时总
是提示错误
a). 首先可以看到是没添加 PATH 路径的
执行时总是提示有错误:
b). 所以在 tetgen2medit 脚本中添加如下的路径:
其实其中最重要的路径是那个 /usr/local/src/tetgen1.5.0/build,其实也就是可执行文件 tetgen 所在的目录,因为没添加路径时提示的错误就是 tetgen 找不到命令,
当然你把 tetgen 拷贝到其他文件夹下然后添加相应的路径也是可以的。其余添加的路径只是为了以防万一。
这样在执行如下的命令就是成功的
c). 注意上图中的脚本 utils/tetgen2medit 执行命令时命令格式 ./tetgen2medit mytest.poly -pq0.9a0.15 >mytest1.mesh 其中的 -pq0.9a0.15 是 tetgen 的命令选项。