检验程序verify移植到Windows系统

与狼共舞 的头像

一、移植的理由
1。历史数据往往很多,很大,在现有的高性能计算机中没有足够的空间存放。而现在的硬盘越做越大,1T的硬盘都有了。因此用本地硬盘做备份有很大优势了。
2。由于高性能计算机的带库中的资料恢复起来,总是特别慢。而本地硬盘的读写速度相对来说就快很多了。
 
二、移植的步骤
1。安装了windows版本Fortran编译器powerstation 4.0。
2。将verify的程序verifyv2.2.2放在本地硬盘中。
3。打开powerstation,新建静态函数库类型的工程文件,包括share.lib,io.lib,util.lib。
     其中,share.lib就是包含verifyv2.2.2/share目录下的程序的函数库,io.lib是包含verifyv2.2.2/io目录下的程序的函数库,util.lib是包含verifyv2.2.2/util目录下程序的函数库。
 4。新建可执行文件类型的工程文件 vrain。工程中包含的文件包括vrain目录下的vrain.F, module_verify_rain.F, output_city.F。
5。设置编译参数,所有的程序都是采用F90的自由格式编写的,所以编译的时候必须采用自由格式来编译。具体设置是 build -> settings,在弹出框中选择 “Fortran” 页,在此页中 Category的类型选择中选择“Fortran Language”类型。接着在页面的下部选项中,选择source Form中的“force free form”。而Fixed Form Line Length选项中我选择了132,不管它起不起作用。
6。由于编译vrain.exe程序时,肯定是要用到其他三个静态函数库。所以在编译的时候,要将三个函数库通过参数修改放进去。具体设置是 build -> settings,在弹出框中选择 “Link” 页,在此页中 Category的类型选择中选择“Input”类型。接着在页面的下部选项Object/library modules中添加share.lib io.lib util.lib。
7。设置编译器搜索模块和静态库函数文件的路径。具体设置是 tools -> options,在弹出框中选择 “Directories” 页,在此页中 show directories for:的类型选择中分别选择“include files”类型和"library files"类型。接着在页面的下部选项directories中添加库模块文件和库函数文件存放的路径。
8。移植时,需将程序module_constant_variable.F中的slash变量改成反斜杠'\'。
9。在powerstation中使用read读取字符串中的数值时与UNIX的编译器有区别。在windows中它会吃掉字符串中的第一个字符,所有在程序中需在字符串前面添加一个空格,才能保证结果与UNIX系统中的相同。它影响到程序module_read_namelist.F中使用read读取字符串中的整数和实型数,程序module_grads_util.F中使用read读取字符串中的dt整型数。以module_grads_util.F中读取dt数值为例:
   原程序:  read(dtunit(1:len-2),*) CurDF%dt
   修改后:  tmpstr = '  '//dtunit(1:len-2)
             read(tmpstr,*) CurDF%dt
10。在powerstation中释放链表数据时需要注意。如有一个数据Curr%data%grid,其中grid是一个二维实型数组指针,curr和data都是自定义类型数据指针,在释放grid数组内存后,使用deallocate(curr%data)释放内存时,出现windows的异常错误(出现信息“内存xxxxxx不能read”),程序异常退出。
    经过调试发行,如果使用一个临时指针tmpdata指向curr%data,即tmpdata => curr%data, 然后用deallocate(tmpdata)来释放内存,程序运行正常,不会出现异常。
    基于以上考虑,编写了一个释放data指针的子程序,而将curr%data作为实参传给子程序,这样就能解决上面的问题。
11。移植时,程序中的预编译语句的前导符"#"需要改成"$"。且预编译变量定义语句"#ifdef RECL4"需要修改成"$if defined (RECL4)"。编译器的预编译变量定义则是在具体设置是在菜单build -> settings,在弹出框中选择 “Fortran” 页,在此页中 Category的类型选择中选择“Preprocessor”类型。接着在页面的下部选项中,选择Predefined Preprocessor Variables:中添加预定义变量,如 RECL4。
12。在Windows的powerstation中,整型数没有8个字节(即64位)的整型数,所以在开发byteswap函数时,没有swap64_int。
13。在GrADS模块中添加了判断机器大小端(endianess)函数,解决了在微机上读IBM机器的产品问题。
14。在删除DF文件指针的函数中,在删除完成后没有将DF指针置空。现在添加了一个置空DF指针的语句。
15。在IBM机器上可以调用NewDateByDay(VER_TIME(1:3),VER_TIME(1:3),1)形式的函数,但在windows中则不可以。必须使用不同的变量。
 16。Powerstation编译器中的getarg( )函数需要使用库函数模块“USE MSFLIB”。
 

10
你的投票: 没有 平均: 10 (1 票)

评论

天气预报查询 的头像

 这个比较复杂啊

 这个比较复杂啊

twotighers 的头像

(无主题)

生活的理想就是理想的生活

相关文章列表

在线用户

目前共有 0 个用户8 位游客 在线。

最新评论