爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4891|回复: 7

[分享资料] 大侠们再帮我看看问题在哪里, 我实在不会啊

[复制链接]

新浪微博达人勋

发表于 2012-9-9 10:05:07 | 显示全部楼层 |阅读模式

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

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

x
这是一个处理全国160个站点数据的程序, 但运行后出现了问题, 请大侠帮助指点一下: 错在哪里了, 如何改? 谢谢!
程序如下:
! ######################################################################################
! Description: This programe is designed for reading the temperature &
!    rainfall data from 160 national meteorological stations. The output
!    is in GrADS station format including the CTL file for STNMAP.
!
! Version: 1.0
! Author: cwystar
! Date: 2005-06-16 For Ver 1.0
!
! History: 2005-06-16 For Ver 1.0
! #######################################################################################
program main
implicit none
! #######################################################################################
! MODIFIED PARAMETER --------------------------------------------------------------------
integer, parameter :: dataFirstYer = 1951, dataLastYer = 2011 ! 数据起止年份
character ( len = * ), parameter :: dataInfo = "C:/zhongfang/stationdata/station/sta.txt" ! 输入的台站信息文件
character ( len = * ), parameter :: dataPath = "C:/zhongfang/stationdata/station/" ! 输入的数据存放路径,末尾带/
character ( len = 1 ), parameter :: dataType = "T"  ! R -> precipation T -> temperature ! 温度或降水资料
character ( len = * ), parameter :: outputPath = "C:/zhongfang/stationdata/station/"  ! 输出文件路径,以/结尾
character ( len = * ), parameter :: outputFileName = "t160"  ! 不含扩展名的输出文件名,用于CTL、MAP文件等
! END OF MODIFIED PARAMETER -------------------------------------------------------------
! #########################################################################
integer :: i, yer, mon
integer :: stdTemp, nlev, nflag
real :: tim
real, dimension( 160 ) :: lat, lon
real, dimension( dataFirstYer : dataLastYer, 12, 160 ) :: val
character( len = 8 ), dimension( 160 ) :: stdid
character( len = 100 ) :: temp
character( len = 4 ), dimension( 12 ) :: fileName = (/ "1601", "1602", "1603", "1604", "1605", "1606", "1607", "1608", "1609", "1610", "1611", "1612" /)

! 读入台站信息 -------------------
open ( 1, file = dataInfo, status = "old" )
do i = 1, 21
read ( 1, "(a)" ) temp
end do
do i = 22, 181
read( 1, "(a)" ) temp
if ( i <= 9 ) then
  temp( 1:12 ) = ""
else if ( i >= 10 .and. i <= 99 ) then
  temp( 1:13 ) = ""
else if ( i >= 100 ) then
  temp( 1:14 ) = ""
end if

read( temp, * ) stdTemp, lat( i - 21 ), lon( i - 21 )
write( stdid( i - 21 ), "(i8)" ) stdTemp
stdid( i - 21 ) = trim( adjustl( stdid( i - 21 ) ) )
end do
close( 1 )
! 读入各台站所有时次的数据 -------------------
do mon = 1, 12
open ( 2, file = dataPath // dataType // fileName( mon ) // ".txt", status = "old" )
read( 2, * ) ( ( val( yer, mon, i ), i = 1, 160 ), yer = dataFirstYer, dataLastYer )
close( 2 )
end do
! 输出台站数据 -------------------
tim = 0.
nflag = 1
open ( 3, file = outputFileName // ".dat", status = "unknown", form = "unformatted" )
do yer = dataFirstYer, dataLastYer
do mon = 1, 12
  nlev = 1
  do i = 1, 160
   write( 3 ) stdid( i ), lat( i ), lon( i ), tim, nlev, nflag
   write( 3 ) val( yer, mon, i )
   if ( i == 160 ) then
    nlev = 0
    write( 3 ) stdid( i ), lat( i ), lon( i ), tim, nlev, nflag
   end if
  end do
end do
end do
close( 3 )
! 输出相应的CTL文件 -------------------
open ( 4, file = outputPath // outputFileName // ".ctl", status = "unknown" )
write( 4, "(a)" ) "dset " // outputPath // outputFileName // ".dat"
write( 4, "(a)" ) "dtype station"
write( 4, "(a)" ) "stnmap " // outputPath // outputFileName // ".map"
write( 4, "(a)" ) "options sequential"
write( 4, "(a)" ) "undef -999.0"
if ( dataType == "R" ) then
write( 4, "(a)" ) "title 160 station rainfall"
else if ( dataType == "T" ) then
write( 4, "(a)" ) "title 160 station temperature"
end if
write( temp, "(i)" ) ( dataLastYer - dataFirstYer + 1 ) * 12
write( 4, "(a)" ) "tdef " // trim( adjustl( temp ) ) // " linear jan1951 1mo"
write( 4, "(a)" ) "vars 1"
if ( dataType == "R" ) then
write( 4, "(a)" ) "r 0 99 station rainfall"
else if ( dataType == "T" ) then
write( 4, "(a)" ) "t 0 99 station temperature"
end if
write( 4, "(a)" ) "endvars"
close( 4 )
write( *,* ) "--- The data and relatived ctl file have been outputed successfully. ---"
write( *,* ) "--- Please run STNMAP next. ---"
write( *,* )
end program main

运行结果如下:

result.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-9-9 11:52:24 | 显示全部楼层
不会就学吧,贴这么一大段程序上来都懒得看了,先自己找出问题所在,不会找就一行行的删除,直到没错了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2012-9-9 13:01:35 | 显示全部楼层
诚如楼上所有,你这一段程序里面包含的东西太多了···
鉴于你的初学fortran的,建议一段一段搞,搞出来一点儿是一点儿,前一个帖子http://bbs.06climate.com/forum.p ... mp;page=2#pid101096里面的问题不知楼主是否解决掉,如果已经能够实现将数据分离,建议你下面书写ctl的时候重新写一个程序,这样不至于错在哪里自己都找不出来。

初步目测,只能说有可能是你的文件命名出错了。你在定义文件名的时候显的比较凌乱,这个除非你自己,别人是没有办法认真阅读的。

【建议】简化程序,分程序进行,各个击破

祝你成功
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-9 13:16:20 | 显示全部楼层

谢谢, 前一个解决了, 昨天晚上看到了这个, 就想试试, 可是没弄清楚问题出在哪里!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-9 13:16:57 | 显示全部楼层
mofangbao 发表于 2012-9-9 11:52
不会就学吧,贴这么一大段程序上来都懒得看了,先自己找出问题所在,不会找就一行行的删除,直到没错了

谢谢清风, 只能慢慢来了.
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2012-9-9 15:44:03 | 显示全部楼层
liuzf406 发表于 2012-9-9 13:16
谢谢, 前一个解决了, 昨天晚上看到了这个, 就想试试, 可是没弄清楚问题出在哪里!

确实不是很容易的活,解铃还须系铃人人,希望楼主早日修成正果
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-9-10 10:22:36 | 显示全部楼层
楼主的定义却是很繁琐啊,建议变量名定义的简单一些,可以用一两个字母来代替,不用英文的全拼。而且写程序时要边写边检查,先写框架再慢慢添内容,这样可以准确定位错误。祝你成功!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-10 10:48:11 | 显示全部楼层
wode_q_x 发表于 2012-9-10 10:22
楼主的定义却是很繁琐啊,建议变量名定义的简单一些,可以用一两个字母来代替,不用英文的全拼。而且写程序 ...

谢谢啊, 已经搞定了!
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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