v1.0 可编辑可修改 那么设置文件“arch/”中的模板将会被扫描检测,提取相应的配置模块信息,并且会列出一个选择菜单共用户选择:
$ configure
checking for perl5... no
checking for perl... found /usr/bin/perl (perl) Will use NETCDF in dir: /usr/local/netcdf
------------------------------------------------------------------------
Please select from among the following supported platforms.
1. AIX (single-threaded, no nesting) 2. AIX SM (OpenMP, no nesting)
3. AIX DM-Parallel (RSL_LITE, IBM-MPI, Allows nesting) 4. AIX DM-Parallel (RSL, IBM-MPI, allows nesting)
5. AIX DM-Parallel (RSL, IBM-MPI, allows nesting )(PARALLEL HDF5) 6. AIX DM-Parallel (RSL_LITE, IBM-MPI, Allows nesting )(PARALLEL HDF5) 7. AIX DM-Parallel/SM-Parallel (not recommended) (RSL, IBM-MPI, OpenMP, allows nesting)
8. AIX DM-Parallel (RSL, IBM-MPI, MCEL) May 2003, EXPERIMENTAL 9. AIX DM-Parallel ESMF (RSL, IBM-MPI, ESMF coupling, no nesting) EXPERIMENTAL 10. AIX (single-threaded, nesting using RSL without MPI) 11. AIX (OpenMP, nesting using RSL without MPI)
Enter selection [1-11] :
用户输入一个1~11的整数,然后按回车。如果选择有效,则所作的选择和提示符会显示出来。用户选择结束后,正常运行脚本程序时,会在顶级目录中创建文件“”,并退出程序,回到操作系统。如果在选择时要退出设置脚本程序,
19
v1.0 可编辑可修改 用shell的中断命令即可(如按“Control-C”)。
配置脚本“configure”会试图在编译主机上查找netCDF函数库以及引用文件。也可通过设置环境变量NETCDF来强制定义到系统中安装netCDF的正确目录。如果没有设置环境变量,而设置脚本也没有找到netCDF,那么程序将会要求用户输入一个路径。如果所有这些尝试都失败的话,程序将尝试以没有netCDF的状态来进行编译;不过,由于当前版本的程序只能用netCDF的输出/输入接口,所以必然会造成程序的运行失败。
模式目录中还提供了用于卸载的清除程序clean(Csh类shell脚本)。安装失败时,可以使用这一程序来恢复到最初的状态。当未指定任何参数时,清除程序“clean”将删除src目录中的目标文件(*.o)以及编译时产生的一些中间文件,文件“”会保留。当指定“-a”为“clean”的参数时,则会连同文件“configure”以及一些在“external”目录中的库函数一起删除。所以,用带参数“-a”的清除命令,则会将模式恢复到模式的安装最原始的状态,而文件“”中的一些修改信息都会丢失。(注意,清除程序并不会将run或test子目录中的数据文件或可执行文件删除掉)。
在“”创建后,还可以根据需要来修改编译选项。值得注意的是,WRF模式可实时配置计算范围大小,处理器数量,以及其他选项,并且仅需要在运行程序之前通过修改文件“”即可。而针对这些选项设置,并没有修改文件“”的必要。只是在编译器、编译选项或者编译规则需要变动时,才有必要对“”文件进行修改。
在WRF模式调试运行过程中,发现由于WRF模式采用动态分配数组的方式来分配模式中的数组单元,因此对计算机的逻辑内存、堆栈段内存以及数据段内存开销较大。在IBM SP 上编译时,默认的内存设置可能满足不了模式计算时的内存需求。而“”中没有设置内存编译选项(-bmaxdata, -bmaxstack 和-qmaxmem),这就需要用户对其进行修改。通常将他们的限制值设置的稍微大些比较好。例如,可以将“”的原始设置:
20
v1.0 可编辑可修改 FCBASEOPTS = -qarch=auto -qfree=f90 -qzerosize -qnosave -qmaxmem=-1 -qspill=20000 $(FCDEBUG) $(OMP)
. . . . . .
LDFLAGS =
. . . . . .
wrfio_nf : (
cd
../external/io_netcdf
FC=\-qzerosize
;
make
NETCDFPATH=/u/denglt/netcdf -qarch=auto
-qfree=f90
$(FCDEBUG)
;
-qnosave\
/bin/cp ../../inc )
wrfio_int :
( cd ../external/io_int ; \\
make CC=$(CC) FC=\$(FCDEBUG) -qarch=auto
-qfree=f90 -qzerosize -qnosave\
:
$(RM) $@
$(CPP) -I../inc $(CPPFLAGS) $*.F > $*.f
$(FC) -c -qfree=f90 -qspillsize=32767 -I. $(MODULE_DIRS) $*.f 修改为:
FCBASEOPTS = -qarch=auto -qfree=f90 -bmaxdata:0x -bmaxstack:0x -qzerosize -qnosave -qmaxmem=-1 -qspill=20000
21
v1.0 可编辑可修改 $(FCDEBUG) $(OMP)
. . . . . .
LDFLAGS = -bmaxdata:0x -bmaxstack:0x -qmaxmem=-1
. . . . . .
wrfio_nf : (
cd
../external/io_netcdf
FC=\-bmaxdata:0x
;
make
NETCDFPATH=/u/denglt/netcdf -qarch=auto
-qfree=f90
$(FCDEBUG)
-bmaxstack:0x
-qmaxmem=-1 -qzerosize -qnosave\
wrfio_int :
( cd ../external/io_int ; \\
make CC=$(CC) FC=\$(FCDEBUG) -qarch=auto
-qfree=f90
-bmaxdata:0x
-bmaxstack:0x
-qmaxmem=-1
-qzerosize -qnosave\
:
$(RM) $@
$(CPP) -I../inc $(CPPFLAGS) $*.F > $*.f
$(FC) -c -qfree=f90 -bmaxdata:0x -bmaxstack:0x -qmaxmem=-1
-qspillsize=32767 -I. $(MODULE_DIRS) $*.f
由于以上的修改,在运行清除程序clean后会被自动删除掉,造成修改信息丢失。有鉴于此,用户除了修改外,还可以直接修改arch子目录中的文件。找到文件中与AIX相关的十一个配置模块,按在中的修改方法一样修改。这样做
22
v1.0 可编辑可修改 好修改后,以后的每次清除编译环境重新配置编译环境时,都不会丢失修改好的信息。
在编译版时,发现有些程序在选用“优化”编译时,往往会编译很慢,甚至会由于优化消耗内存,造成内存不足后而导致编译失败。因此,一种解决方法是可以在编译选项中去掉优化选项“-O2”;另一种解决方法就是将优化编译时耗时很长或者耗内存很大的程序加入到优化的编译规则中。这一修改,也可以在arch子目录中的中进行。在IBM SP2机器上,要添加的的目标文件有:
\\ \\ \\ \\ \\ \\
当文件中的ARCHFLAG标志参数包含-DDM_PARALLEL参数值,并且连接好相应的消息传递库函数时,可用分布式内存并行机制进行编译。目前连接库只有一种可供选择:external/RSL/RSL/。此时,其他一些必须设置生效的参数值包括:-DWRF_RSL_IO和_DRSL。CFLAGS参数必须取有-DWRF_RSL_IO,-DMAXDOM_MAKE = $(MAX_DOMAINS),DMAXPROC_MAKE= $(MAX_PROC ),DMAXPROC_MAKE = $(MAX_PROC),-I../external/RSL/RSL。在设置文件arch/的用于设置分布式内存并行编译的模板中包含了上面这些参数值。而在文件中设置相应的编译标志参数时,就可以用共享式内存并行机制来进行编译。内存共享式并行机制采用OpenMP线程形式。
编译代码
在配置完编译环境变量之后,就可以输入编译命令“compile”进行程序代码编译了。首先,输入“compile”,则会出现以下帮助选项:
23