爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11546|回复: 13

请教xlf90编译器大小码转换问题

[复制链接]
发表于 2015-1-27 10:31:22 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
各位大侠:请教个问题,我的IBM服务器是xlf90编译器,做regcm4后处理是sigma2p的时候,数据处理出来的都是画的图3e38这种值,直接在ctl里面把big_endian改成little_endian或者改undef值都不起作用,估计是编译器处理大小码的问题,请问一下xlf90编译器怎么转换数据大小码?

ifort编译器处理的命令如下:
ifort - convert big_endian -assume bytered -o sigma2p sigma2p.f90,然后./sigma2p < postproc.in
不知道xlf990的命令是什么??
密码修改失败请联系微信:mofangbao
发表于 2015-1-27 15:58:58 | 显示全部楼层
是段玮吗?

xlf90应该缺省就是big_endian的。你如果前面也是用的是该工作站的话。估计直接编译就行。

你计算是正常结束吧?查查是否浮点溢出。

还有就是postproc.in中的ibyte,设成1试试。

另外就是postproc.in中的jy和ix得比原先小2。
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-1-27 16:38:27 | 显示全部楼层
letsdo8 发表于 2015-1-27 15:58
是段玮吗?

xlf90应该缺省就是big_endian的。你如果前面也是用的是该工作站的话。估计直接编译就行。

非常感谢您的回复,首先说明,偶不是段玮,虽然都姓段,认识他倒是真的,呵呵!
另外,我做后处理的数据不是同一工作站,数据是ifort编译器输出的,现在是xlf90编译器。
按你的方法,如果把ibyte设为1的话,出现如下错误:
"sigma2p.f90", line 510: 1525-003 The unformatted I/O statement on the file /lza/g1/duanhx/regcmdata/output/40km-228x288/40km-228x288_ICBC_P1984010100 cannot be completed because the end of the record was reached.  The program will recover by ignoring the remaining data items.


如果把iy和ix设为比原来小2,会出现格点数不匹配的问题
iy,jx,kz in parameter =  226 286 18
iy,jx,kz in DOMAIN.INFO  228 288 18
They are not consistent
密码修改失败请联系微信:mofangbao
发表于 2015-1-27 18:03:38 | 显示全部楼层
你已经改小了,就不用改了。

我是估计你浮点溢出了。瞎猜
密码修改失败请联系微信:mofangbao
发表于 2015-1-27 18:15:30 | 显示全部楼层
你列一下文件(ATM、SRF、RAD和DOMAIN文件)大小,或者ctl文件内容,帮你看看。
密码修改失败请联系微信:mofangbao
发表于 2015-1-27 18:17:48 | 显示全部楼层
本帖最后由 letsdo8 于 2015-1-27 18:24 编辑

还有就是,你用的什么版本。这套后处理程序是只适合RegCM4.0的,后面的其他版本得用cdo之类的处理。

密码修改失败请联系微信:mofangbao
发表于 2015-1-27 18:24:08 | 显示全部楼层
从你的domain大小来看,我估计是浮点溢出了。要是保存了运行时信息的话,查查有没有NaN

Intel难道浮点溢出后还运行吗?

也是奇怪,照理ICBC的sigma2p应该没这类问题的。试试只转ICBC。
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-1-28 15:35:33 | 显示全部楼层
letsdo8 发表于 2015-1-27 18:24
从你的domain大小来看,我估计是浮点溢出了。要是保存了运行时信息的话,查查有没有NaN

Intel难道浮点溢 ...

模式计算过程是没问题的,是在intel编译器运行,在这个服务器上后处理的结果也是合适的,运行过程没有出现溢出现象,但是现在换了IBM服务器以后,做sigma2p后的结果就是u,v,t,ps这些量的数值是合适的,就是插值后的h数据是5e34这种值,据说是因为xlf90编译器只有big_endian,没有little_endian
密码修改失败请联系微信:mofangbao
发表于 2015-1-28 16:45:43 | 显示全部楼层
本帖最后由 bjj948 于 2015-1-28 16:48 编辑

The following subroutine swap4 in swap.F (from WRF)  file could do byteswaping:

subroutine swap4(in,nn)
!#if defined (DEC) || defined (ALPHA) || defined (alpha) || defined (LINUX)
#ifdef BYTESWAP
! swaps bytes in groups of 4 to compensate for byte swapping within
!    words
  implicit none
  integer, intent(in) :: nn ! number of bytes to be swapped
  logical*1 , dimension(nn) , intent(inout) :: in  ! Array to be swapped

  logical*1, dimension(4) :: ia
  integer :: i
  do i=1,nn,4
     ia = in(i+3:i:-1)
     in(i:i+3) = ia
  enddo
        
#endif
end

评分

参与人数 2金钱 +30 贡献 +2 收起 理由
段段 + 10 + 1
letsdo8 + 20 + 1

查看全部评分

密码修改失败请联系微信:mofangbao
发表于 2015-1-28 16:47:25 | 显示全部楼层
the way to use this subroutine,

!#if defined (DEC) || defined (ALPHA) || defined (alpha) || defined (LINUX)
#ifdef BYTESWAP
      call swap4(trec, isz)
#endif

评分

参与人数 1金钱 +20 收起 理由
letsdo8 + 20

查看全部评分

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表