Fortran Coder

查看: 10012|回复: 7

[通用算法] 求30年的5-10月的逐日降水平均值

[复制链接]

7

帖子

2

主题

0

精华

入门

F 币
43 元
贡献
26 点
发表于 2020-12-3 15:56:48 | 显示全部楼层 |阅读模式
有1981-2010年共30年的5-10月(184天)的逐日降水的30个二进制(bin)文件,经度为0-360,共240个格点,纬度为-90-90,共121个格点。想输出5-10月份(184天)逐日降水平均值的一个二进制文件,不知道该怎么求,求指教! 捕获.PNG

213

帖子

2

主题

0

精华

宗师

F 币
2126 元
贡献
875 点

规矩勋章

发表于 2020-12-3 23:51:31 | 显示全部楼层
需要知道原始数据格式,二进制只是存储格式。

7

帖子

2

主题

0

精华

入门

F 币
43 元
贡献
26 点
 楼主| 发表于 2020-12-4 19:19:25 | 显示全部楼层
风平老涡 发表于 2020-12-3 23:51
需要知道原始数据格式,二进制只是存储格式。

[Fortran] 纯文本查看 复制代码
Program main
Integer:: nx=240, ny=121,nt=31,i,j,m,k
real surp(240,121,31,30),dp(240,121,31)
character::  filename, year

do k=1981,2010  
   write(year,'(i4)') k
   filename=year//'.bin'
   open(11,file='F:\cut\surp-\'//filename,form='binary')
   do m=1,nt
     do j=1,ny
	   do i= 1,nx
       read(12)surp(i,j,m,k-1980)
	  enddo							
 	 enddo
   enddo
   Close(11)
enddo


do i= 1,nx
do j= 1,ny
do m= 1 ,nt
   ss=0.0
   do k = 1,30
      ss= ss+surp(i,j,m,k)
   enddo
   dp(i,j,m)=ss/30.0
enddo
enddo
enddo
open(12,file='F:\surp.interim.daily.climato.bin',form='binary')
write(12)(((dp(i,j,m),i=1,240),j=1,121),m=1,31)	
End Program	main


我试图一下输出5-10月的平均,显示写出溢出,我把之前的二进制数据按月拆开后,想改成先只输出5月份的数据还是报错C:\Users\cjq\Desktop

7

帖子

2

主题

0

精华

入门

F 币
43 元
贡献
26 点
 楼主| 发表于 2020-12-4 19:20:58 | 显示全部楼层
风平老涡 发表于 2020-12-3 23:51
需要知道原始数据格式,二进制只是存储格式。

运行结果显示run-time error F6600: WRITE(internal)
- internal file overflow
有什么办法,不知道该怎么搞

155

帖子

2

主题

1

精华

大师

Vim

F 币
944 元
贡献
461 点

规矩勋章

发表于 2020-12-4 19:57:25 | 显示全部楼层
陌曦 发表于 2020-12-4 19:20
运行结果显示run-time error F6600: WRITE(internal)
- internal file overflow
有什么办法,不知道该怎 ...

character(len=20)

没有给定的话,字符串长度默认为1,不够拿来存储4位字符

7

帖子

2

主题

0

精华

入门

F 币
43 元
贡献
26 点
 楼主| 发表于 2020-12-4 20:31:54 | 显示全部楼层
Transpose 发表于 2020-12-4 19:57
character(len=20)

没有给定的话,字符串长度默认为1,不够拿来存储4位字符

天啊  谢谢!!

7

帖子

2

主题

0

精华

入门

F 币
43 元
贡献
26 点
 楼主| 发表于 2020-12-5 15:48:35 | 显示全部楼层
陌曦 发表于 2020-12-4 20:31
天啊  谢谢!!

请问我在读取上面出来的数据时?
[Fortran] 纯文本查看 复制代码
open(11,file='F:\ERA_Interim_1.5\cut5-10\surp.interim.daily.climato.bin',FORM='UNFORMATTED',ACCESS='DIRECT',action='read',RECL=NX*121)
LOOPDAY: DO K=1,nt
  print *,'Begin time = ',k
        HT  =-9.99E33        
        ffG =-9.99e33       
        tg  =-9.99e33        
        ug  =-9.99e33        
        wg  =-9.99e33        
        ft  =-9.99e33        
        fv  =-9.99e33        
        fw  =-9.99e33       
  read (11,rec=k)((orog1(i,j),i=1,nx),j=1,121)
  pres(:,1:119)=orog1(:,2:120)
  if (yrev) then
    pres(:,1:119)=pres(:,119:1:-1)
  endif


出现这种报错是为何,该怎么办呢?
Begin time =           1
run-time error F6508: READ(F:\ERA_Interim_1.5\cut5-10\surp.interim.daily.climato.bin)
- too many bytes read from unformatted record

250

帖子

2

主题

0

精华

宗师

F 币
1730 元
贡献
872 点

规矩勋章

发表于 2020-12-8 08:22:06 | 显示全部楼层
要找数据格式的说明才能读入,或者上传部分数据,或者有大神可以帮你分析
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-3-29 02:59

Powered by Tencent X3.4

© 2013-2024 Tencent

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