先计算txt文件中指定站点的区域每月总量,再用三点平滑计算每三个月的平均降水量
PS:因为初始文件中降水单位是0.1mm所以最后结果要除1,而且月降水量是指这个月的降水总量,不用除以天数!
初始数据文件格式:年份-月份-月平均降水量
站点名文件存放格式:
实现数据处理代码:
!计算区域总降水量三月滑动平均
program main
implicit none
integer,parameter :: num = 10, year = 10, mon = 12 !num 为站点数 year为年数 mon为月数
integer i,n,m,u,y(year)
real x(num,year,mon)
character(9) filename(num) !申明字符型变量储存文件名
real :: s(num,mon),mave(year,mon) = 0.0,xy(year) = 0
open(10,file = 'E:\cjlist.txt') !存放使用站点名的文件
do i = 1,num
read(10,*) filename(i) !读取文件中的站点名+后缀
open(20,file='E:\pre\'//filename(i)) !存放站点数据的文件路径
do n = 1,year
do m = 1,mon
read(20,*) y(n),u,x(i,n,m) !y(n)为年份 x为每个月的平均降水数据
enddo
enddo
enddo
open(30,file = 'E:\prey.dat') !存放每年降水量的文件
open(60,file = 'E:\prem.dat') !存放每月降水量的文件
do n = 1,year
do m = 1,mon
do i = 1,num
mave(n,m) = mave(n,m) + x(i,n,m)
enddo
mave(n,m) = mave (n,m) / num
xy(n) = xy(n) + mave(n,m)
enddo
write(30,*) xy(n) / 10
write(60,'(12(f10.2,1X))') (mave(n,m) / 10,m = 1,mon)
enddo
open(40,file = 'E:\prejd_3.dat') !存放三个月滑动平均降水量的文件
do n = 1,year-1
do m = 1,mon
SELECT CASE(m)
CASE(1:10)
s(n,m) = mave(n,m) + mave(n,m+1) + mave(n,m+2)
CASE(11)
s(n,m) = mave(n,m) + mave(n,12) + mave(n+1,1)
CASE(12)
s(n,m) = mave(n,m) + mave(n+1,1) + mave(n+1,2)
ENDSELECT
enddo
write(40,'(12(f10.2,3x))') (s(n,m)/10,m = 1,mon)
enddo