气象ts评分_给大家分享一个格点插值到站点然后TS评分的程序
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
!****************************************************************************
!
! PROGRAM: T639格点资料插值成站点资料
!
!****************************************************************************
module pra_mod
implicit none
integer,parameter :: Nlon=90 ! T639 E0-180 2
integer,parameter :: Nlat=45 ! T639 N0-90 2
integer,parameter :: Nsta_max=5000 ! 最多5000站
real,parameter :: yuezhi=0.1 ! 有无降水的阈值 mm
character(len = *), parameter :: dir_T639='C:\Users\Tianle\Desktop\插值检验\t639-05\' ! input original_data
character(len = *), parameter :: file1_t639_name='16112102.027' ! input original_data 体现那一天
character(len = *), parameter :: file2_t639_name='16112202.027' ! input original_data
character(len = *), parameter :: dir_station='C:\Users\Tianle\Desktop\插值检验\' ! input original_data
character(len = *), parameter :: filename_station='STATIONS.DAT' ! input original_data
character(len = *), parameter :: dir_obs='C:\Users\Tianle\Desktop\插值检验\sur-05-24\' ! input original_data
character(len = *), parameter :: file1_obs_name='16112205.000' ! input original_data 文件日期
character(len = *), parameter :: file2_obs_name='16112305.000' ! input original_data
endmodule pra_mod
module data_mod
use pra_mod
implicit none
real lon_t639(0:Nlon)
real lat_t639(0:Nlat)
real Rain_t639(0:Nlon,0:Nlat)
integer Nsta_t639,Nsta_obs,Nsta_common
integer sta_number_t639(Nsta_max)
real sta_lat_t639(Nsta_max),sta_lon_t639(Nsta_max),Rain_t639_sta(Nsta_max)
character(len=10) sta_name_t639(Nsta_max)
real Rain_obs(Nsta_max)
integer sta_number_obs(Nsta_max)
integer sta_number_common(Nsta_max)
real Rain_t639_common(Nsta_max),Rain_obs_common(Nsta_max)
end module data_mod
program data_chazhi ! main program
use pra_mod
use data_mod
implicit none
character(len=50) cha
character(len=10) cha10
integer station,stat,templat,templon,temp1,temp2
real lon,lat,gh,rain,ts
real rf,lf,uf,df,lonP,latP
integer rn,ln,un,dn,i,j
do i=0,Nlon
lon_t639(i)=i*2
!write(*,*) "lon",i,lon_t639(i)
enddo
do j=0,Nlat
lat_t639(j)=j*2
!write(*,*) "lat",j,lat_t639(j)
enddo
write(*,*)'step1'
Rain_t639(:,:)=0.
open(22,file=dir_T639//file1_t639_name,form="formatted")
read(22,*) cha
!write(*,*) cha
read(22,*) cha
!write(*,*) cha
do while(1)
read(22,'(i6,f8.3,f8.3,f8.1,x,f8.1)',iostat=stat) station,lon,lat,gh,rain
if (stat.lt.0) exit ! stat.lt.0 文件结束
i=lon/2
j=lat/2
!write(*,*) i,j,rain
Rain_t639(i,j)=rain
enddo
close(22)
i=90
j=45
write(*,'(f8.1,f8.1,4x,f8.1)') i*2.0,j*2.0,Rain_t639(i,j)
Nsta_t639=0
open(22,file=dir_station//filename_station,form="formatted")
do while(1)
read(22,*,iostat=stat) station,templat,templon,gh,temp1,temp2,cha10
if (stat.lt.0) exit ! stat.lt.0 文件结束
Nsta_t639=Nsta_t639+1
!write(*,*) Nsta_t639,station,templat,templon,cha10
sta_number_t639(Nsta_t639)=station
sta_lat_t639(Nsta_t639)=templat/100.
sta_lon_t639(Nsta_t639)=templon/100.
sta_name_t639(Nsta_t639)=cha10
enddo
close(22)
write(*,'(a20,i6)') "stations number",Nsta_t639
! test integrate_point
!lonP=115.7
!latP=36.2
!call integrate_point(lon_t639,Nlon,lat_t639,Nlat,lonP,latP, &
! rf,lf,uf,df,rn,ln,un,dn)
open(22,file=dir_station//"Rain_t639_station.txt",form="formatted")
do i=1,Nsta_t639
lonP=sta_lon_t639(i)
latP=sta_lat_t639(i)
call integrate_point(lon_t639,Nlon,lat_t639,Nlat,lonP,latP, &
rf,lf,uf,df,rn,ln,un,dn)
Rain_t639_sta(i)= Rain_t639(rn,un)*rf*uf &
+Rain_t639(rn,dn)*rf*df &
+Rain_t639(ln,dn)*lf*df &
+Rain_t639(ln,un)*lf*uf
if (((rn+ln).eq.0).or.((un+dn).eq.0)) then
write(*,'(a10,i5,2x,2f5.1)') "bianjie:",i,sta_lon_t639(i),sta_lat_t639(i) ! 超出边界
sta_number_t639(i)=0
endif
write(22,'(i5,2x,2f5.1,2x,4f6.1,x,4f7.2,2x,i6,f7.2)') i,sta_lon_t639(i),sta_lat_t639(i), &
lon_t639(ln),lon_t639(rn),lat_t639(un),lat_t639(dn), &
Rain_t639(rn,un),Rain_t639(rn,dn),Rain_t639(ln,un),Rain_t639(ln,dn),sta_number_t639(i),Rain_t639_sta(i)
enddo
close(22)
Rain_obs(:)=0
open(22,file=dir_obs//file1_obs_name,form="formatted")!jianyandiertianjiangshui
do i=1,14
read(22,*) cha
!write(*,*) cha
enddo
Nsta_obs=0
do while(1)
read(22,'(i6,f8.3,f8.3,f6.0,f6.1)',iostat=stat) station,lon,lat,gh,rain
if (stat.lt.0) exit ! stat.lt.0 文件结束
Nsta_obs=Nsta_obs+1
sta_number_obs(Nsta_obs)=station
Rain_obs(Nsta_obs)=rain
!write(*,*) Nsta_obs,sta_number_obs(Nsta_obs), Rain_obs(Nsta_obs)
enddo
close(22)
write(*,'(a20,i6)') "stations_obs number",Nsta_obs
open(22,file=dir_station//"Rain_t639_obs_common.txt",form="formatted")
Nsta_common=0
do i=1,Nsta_t639
stat=0
do j=1,Nsta_obs
if (sta_number_t639(i).eq.sta_number_obs(j)) then
stat=1
exit
endif
enddo
Nsta_common = i
if (stat.eq.0) then
! sta_number_t639(i)=0
write(22,'(i5,2i6,2x,2f7.1)')i,sta_number_t639(i),sta_number_t639(i),Rain_t639_sta(i),0
Rain_t639_common(Nsta_common)=Rain_t639_sta(i)
Rain_obs_common(Nsta_common)=0
else
Rain_t639_common(Nsta_common)=Rain_t639_sta(i)
Rain_obs_common(Nsta_common)=Rain_obs(j)
write(22,'(i5,2i6,2x,2f7.1)') i,sta_number_t639(i),sta_number_obs(j),Rain_t639_sta(i),Rain_obs(j)
endif
enddo
write(*,'(a20,i6)') "Nsta_common number",Nsta_common
call QETS(Nsta_common,Rain_t639_common(1:Nsta_common),Rain_obs_common(1:Nsta_common),ts)
open(33,file='C:\Users\Tianle\Desktop\插值检验\ts\ts1.txt')
write(33,*) "ts:",ts
endprogram data_chazhi
subroutine QETS(N,forc,obse,ts)
use pra_mod,only:yuezhi
implicit none
integer :: N ! 用于评分的站点数目
real :: forc(N),obse(N) ! 预报和观测的降水序列
real :: ts ! ts得分
integer :: A,B,C ! 命中,空报,漏报
integer :: i
A=0
B=0
C=0
write(*,*)'yuezhi',yuezhi
do i=1,N
if(forc(i)>=yuezhi.and.obse(i)>=yuezhi) A=A+1
if(forc(i)>=yuezhi.and.obse(i)
if(forc(i)=yuezhi) C=C+1
enddo
ts=A*1.0/(A+B+C)
write(*,*) A,B,C
end subroutine QETS
subroutine integrate_point(lonMap,Ncols,latMap,Nrows,lonP,latP, &
rf,lf,uf,df,rn,ln,un,dn)
implicit none
integer,intent(in) :: Ncols,Nrows
real,intent(in) :: lonMap(0:Ncols),latMap(0:Nrows)
real,intent(in) :: lonP,latP
real,intent(out) :: rf,lf,uf,df
integer,intent(out) :: rn,ln,un,dn
integer i,j
if ((lonP.le.lonMap(0)).or.(lonP.ge.lonMap(Ncols))) then ! 超出边界 rn=ln=0
rn=0
ln=0
rf=0.
lf=0.
write(*,*) " (lonP.le.lonMap(0)).or.(lonP.ge.lonMap(Ncols))",lonP
return
endif
if ((latP.le.latMap(0)).or.(latP.ge.latMap(Nrows))) then ! 超出边界 un=dn=0
un=0
dn=0
uf=0.
df=0.
write(*,*) "(latP.le.latMap(0)).or.(latP.ge.latMap(Nrows))",latP
return
endif
rn=1
ln=1
rf=1.
lf=0.
do i=1,Ncols
if (lonP.le.lonMap(i)) exit
enddo
rn=i
ln=i-1
rf=(lonP-lonMap(i-1))/(lonMap(i)-lonMap(i-1))
lf=(lonMap(i)-lonP)/(lonMap(i)-lonMap(i-1))
!write(*,'(2i5,6f8.3)') ln,rn,lf,rf,lonP,lonMap(ln),lonMap(rn),lf+rf
un=1
dn=1
uf=1.
df=0.
do j=1,Nrows
if (latP.le.latMap(j)) exit
enddo
un=j
dn=j-1
uf=(latP-latMap(j-1))/(latMap(j)-latMap(j-1))
df=(latMap(j)-latP)/(latMap(j)-latMap(j-1))
!write(*,'(2i5,6f8.3)') dn,un,df,uf,latP,latMap(dn),latMap(un),df+uf
end subroutine integrate_point
气象ts评分_给大家分享一个格点插值到站点然后TS评分的程序相关推荐
- cdt规约报文用程序解析_用 Python 撸一个 Web 服务器第3章:使用 MVC 构建程序
Todo List 程序介绍 我们将要编写的 Todo List 程序包含四个页面,分别是注册页面.登录页面.首页.编辑页面.以下分别为四个页面的截图. 注册页面: 登录页面: 首页: 编辑页面: 程 ...
- 乐高机器人java程序代码_用JAVA编写一个乐高机器人躲避障碍物运动到目标点的程序....
写出一个可以控制机器人的小程序,使机器人从一边到一个相对面,并至少跨越一个障碍物.规则如下:1,障碍物必须设置在机器人行走的路线上.2,空间的基本配置如插图3,不能用轨道之类的东西... 写出一个可以 ...
- 分享一个香橙派PC2的C语言点亮LED程序
首先要编写字符设备驱动,代码大同小异,随便复制粘贴就行了. 但是要注意了,一定要保护好寄存器,不要乱搞,要不然系统崩了,就等着你妈妈喊你回家吃饭吧. led.c #include <linux/ ...
- linux qt程序崩溃_【工程师分享】在MPSoC上运行基于eglfs_kms的QT应用程序
作者:付汉杰,hankf@xilinx.com 文章转载自:赛灵思中文社区论坛 1Xilinx backend Xilinx为MPSoC支持4种libMali的backend: X11, Waylan ...
- python垃圾语言-分享一个用python写的window清理缓存垃圾小程序
[Python] 纯文本查看 复制代码# coding: utf-8 import os import shutil del_extension = [".tmp", " ...
- java 给qq邮箱发邮件_用java写一个给自己QQ邮箱发一封电子邮件的程序
首先,需要各位去java官网下载JavaMail mail.jar 和JAF activaton.jar,本程序使用的分别是1.4.5和1.1.1版本,在这里也给大家贴上链接,点击打开链接 接下来大家 ...
- 发现一个非常好的ftp站点,有大量的程序
http://bbs.downsurf.com 主论坛 ftp://list:list@soft.downsurf.com 软件站24小时开放高速下载 已经更新超过300G的软件 水晶报表9.2中文版 ...
- 气象ts评分_天气预报评分方法评述.doc
天气预报评分方法评述 天气预报评分方法评述 氕孑定拉圩方>多暇 第l8卷第1期 1995年3月 南京气象学院 JournalofNanjingInstituteofMeteorology VoI ...
- 编写一个弹出式菜单的shell程序_分享一个有趣的shell脚本--实现抓阄程序
概述 今天主要分享一个有趣的shell脚本,用来实现抓阄,平时就不用剪刀石头布了. 需求 使用shell编写一个抓阄的程序: 1.执行脚本后,输入英文名字全拼,产生随机数01-99之间的数字,数字越大 ...
最新文章
- ubuntu deepin等debian系Linux发行版安装docker-ce命令
- pb - unable to initialize client library context
- 面试官:DDD如何指导微服务拆分?90%的程序员都答不上来!
- Hibernate3 r的SLF4J问题
- E. Almost Sorted(构造,递归)
- Struts2中我所遇到的内存溢出(java.lang.OutOfMemoryError)异常错误介绍
- opencv中Mat与IplImage,CVMat类型之间转换
- linux下转移mysql目录
- java 线程 interrupted_Java:当被另一个线程中断时,如何在线程上捕获InterruptedException?...
- 在某个文件夹中打开 cmd黑窗口
- 向日葵服务器怎么修改密码,向日葵远程服务器ip
- Python GUI | 利用Tkinter制作签名设计软件!
- 免费的Bootstrap管理后台模板集合
- 【公司邮箱怎么注册】Foxmail帐户邮箱数据保存在什么地方?如何备份一个帐户?
- Python中使用多个分隔符分隔字符串re.split
- web网页设计期末课程大作业:基于HTML+CSS+JavaScript个人书画作品展示HTML模板(6页)
- Mysql-五种join类型
- 00 SQL课程简介
- 【帝国CMS】灵动标签调用标题图片没有图片时显示默认图片
- 2020-01-16
热门文章
- 如何从零开始,成为element-plus的contributor
- Java语言中的-----访问修饰符
- Blog-LOGO原型
- Fread 和fwrite的参数不同,返回值不同
- MATLAB图像增强程序举例
- halcon联合C#测量十字Mark中心
- java基础实例代码_Java基础实例
- hbase hmaster一会就没了_浅析HBase
- 二元隐函数求二阶偏导_在线计算专题(03):具体、抽象函数的导数、微分与方向导数的计算...
- 为什么torch.nn.Linear的表达形式为y=xA^T+b而不是常见的y=Ax+b?