2015年2月5日星期四

ubuntu上装Generic Grid Generator (g3)或(gCubed)

在ubuntu上装Generic Grid Generator (g3)或(gCubed)
g3是专门为pop海洋模式设计模式水平网格所用的图形软件。由POP的娘家LANL开发(小作坊式的),现在已经停止技术支持。但如果你用ccsm3,或者干脆就是pop,又想做古气候模拟,那很抱歉,你不得不和这个小工具打交道了。
---------------------------------------
编译gCubed需要安装的库函数包:netCDF和VTK4.2
编译器为F90,C++
GUI解释器还需要expectk
此外,为编译上述库函数或gCubed本身,还需要cmake, icc,ifort,g++,c++,gfortran
(如果是在裸机上装,境况将相当悲惨。。。)
所幸,在小U上,大部分软件都直接可以sudo apt-get install 软件名,一个命令就OK,当然,前提是你连在网上。
这些可以直接安装的软件包括: cmake ,VTK 5.0(注意不是4.2,版本不一样,所以才麻烦大了,万恶的gcubed...),gcc/g++/c++/gfortran(感谢强大的gcc编译家族,虽然有些时候也会失灵,而暂时的输给intel家族),expectk
---------------------------------------
当然,netCDF也是可以直接sudo apt-get install,不过,默认安装路径似乎不能自己指定,这让我很不爽,于是自己下载3.6.2版源代码,自己编译,用起来自己知道在那里,方便了很多。具体方法也说一下吧: 
先要装ifort(intel fortran)
用电子邮件注册,取得注册码,下载源码包,解压,照着说明书一步一步装,命令记得最好加sudo。
ifort装好后,在.bashrc中添加如下两行: 
export PATH=$PATH:/opt/intel/idb/10.0.023/bin/ 
export PATH=$PATH:/opt/intel/fc/10.0.023/bin/ 
之后,一切正常 
编译netcdf时可能会遇到gcc版本问题,在.bashrc中添加如下一行以设置gcc路径: 
export GXX_ROOT=/usr/lib/gcc/i486-linux-gnu/4.0.3/ 
编译安装netcdf,需要使用下面命令: 
(如果ifort命令可以使用的话) 
export FC=ifort 
export F90=ifort 
export FFLAGS="-O -mp" 
export CPPFLAGS="-DNDEBUG -DpgiFortran" 
如果ifort不能使用,则将其替换为/opt/intel/fc/9.1.043/bin/ifortbin; 
然后: 
sudo ./configure --prefix=/usr/local 
sudo make check 
sudo make install
---------------------------------------
然后是VTK4.2,不得不说,本来5.0就够用了,如果不是gcubed的话。可惜4.2版本里的有些过时的内容还要在gcubed里用到,没办法,只好千辛万苦从网上下一个源码包,解压到/home/wy/下,然后:
> cd   /home/wy/VTK
> cmake -i
> make
make过程中,有几个地方报错,是由于c++编译器版本太高了,我把出错的函数都给注释了,不影响大局的,就OK了。
注意安装顺序,icc装好设置好之后,cmake会默认使用icc编译,但这里用icc过不去,所以只好把.bashrc中路径设置注释掉,重启系统,默认使用cc或gcc,g++编译,才顺利装好VTK4.2。
---------------------------------------
之后(最好是在装好VTK4.2之后),装icc,和ifort类似,只不过路径设置只需在.bashrc中添加如下一行即可:
export PATH=$PATH:/opt/intel/cc/10.1.008/bin/
注意设置.bashrc之后都要重启终端,以刷新.bashrc
---------------------------------------
最后才是gcubed包,版本为2007年8月16日更新的版本。解压到/home/wy,然后:
cd /home/wy/gCubed/tripole/build/   %这里不需修改,但要删除原来编译好的.o文件
rm *.o
make
第一个部分tripole编译没什么问题
********************************
cd /home/wy/gCubed/hg2nc/build/
需要修改该目录下的makefile文件:
CC = g++ 
CCFLAGS = -g 
VTK_INC = -I/home/wy/VTK \ 
-I/home/wy/VTK/Common \ 
-I/home/wy/VTK/Filtering \ 
-I/home/wy/VTK/Graphics \ 
-I/home/wy/VTK/Hybrid \ 
-I/home/wy/VTK/IO \ 
-I/home/wy/VTK/Imaging \ 
-I/home/wy/VTK/Rendering \ 
-I/home/wy/VTK/Utilities/jpeg \ 
-I/home/wy/VTK/Utilities/png \ 
-I/home/wy/VTK/Utilities/zlib \ 
-I/home/wy/VTK/Wrapping \ 
-I/home/wy/VTK/Wrapping/Tcl 
netCDF_INC = -I/user/local/include \ 
              -I/home/wy/netcdf-3.6.2/cxx 
INC_DIRS = $(VTK_INC) $(netCDF_INC) -I../include 
OBJS = goyou2pop.o etopo.o text2nc.o 
VTK_LIBS = -L/home/wy/VTK/bin -lvtkRendering   -lvtkGraphics \ 
-lvtkImaging -lvtkFiltering -lvtkCommon -lvtkIO -lvtkHybrid \ 
     -lvtkftgl -lvtkfreetype 
netCDF_LIBS = -L/usr/local/lib -lnetcdf_c++ -lnetcdf
上面是makefile文件需要修改的部分,VTK的库用的是4.2版本的,其lib在/home/wy/VTK/bin下,我的netCDF装在/user/local/下的lib和include下,源代码在/home/wy/netcdf-3.6.2/下。
改好之后,make就可以了。
这样,第二部分ok。
******************************
cd /home/wy/gCubed/e3/build/
修改Makefile文件: 
CC = c++ 
CCFLAGS = 
VTK_INC = -I/usr/include/vtk-5.0 
netCDF_INC = -I /usr/local/include 
INC_DIRS = $(VTK_INC) $(netCDF_INC) -I../source 
OBJS = coastlines.o gridLines.o pickCallBack.o subPickCallBack.o \ 
        controls.o gridValues.o subGridLines.o textDisplay.o \ 
        fastEd.o subGridValues.o topography.o 
VTK_LIBS = -L/usr/lib -L/usr/lib/vtk-5.0/CMake \
       -L/home/wy/VTK/bin    -lvtkRendering   -lvtkGraphics \ 
-lvtkImaging -lvtkFiltering -lvtkCommon -lvtkIO -lvtkHybrid \ 
     -lvtkftgl -lvtkfreetype 
netCDF_LIBS = -L/usr/local/lib   -lnetcdf_c++ -lnetcdf
上面修改的部分中,VTK的include文件用的是5.0版本,lib也大部分是5.0版本,但只用5.0版本编译时会报错,说有个libvtkfreetype.so找不到,据查,这个库在5.0中已经消失不见,只好补上4.2版本的lib文件路径,于是make,顺利ok。
第三部分也好了
**********************************
cd /home/wy/gCubed/nc2pop/build/
修改makefile为如下内容:
FC = gfortran         
FFLAGS = 
INCS = -I/usr/local/include 
OBJS = pop2grid.o 
LIBS = -L/usr/local/lib -lnetcdf 
../../run/pop2grid: pop2grid.o netcdf.o 
gfortran -o ../../run/pop2grid -g -O0 pop2grid.o netcdf.o -L/usr/local/lib -lnetcdf 
pop2grid.o: ../source/pop2grid.f90 netcdf.mod 
$(FC) $(FFLAGS) $(INCS) -c $< 
netcdf.o: 
cp /home/wy/netcdf-3.6.2/f90/netcdf.o . 
netcdf.mod: typesizes.mod 
cp /home/wy/netcdf-3.6.2/f90/netcdf.mod . 
typesizes.mod: 
cp /home/wy/netcdf-3.6.2/f90/typesizes.mod .
这个文件里用的编译器本来是pgf90,就是前面提到的f90,用gfortran替换。
然后make,一切顺利的话就搞定了,万事OK.

没有评论:

发表评论