爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: lqouc

[求助] fortran算出来的全都是0,求高手指教。

[复制链接]

新浪微博达人勋

发表于 2012-11-30 19:11:48 | 显示全部楼层

因为没做过的人很难看懂你的程序,你就按照你的思路,还有你的要求,一步步print出相应的量,在屏幕显示一下,就很容易查出你的错误了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-11-30 19:18:50 | 显示全部楼层
topmad 发表于 2012-11-30 19:11
因为没做过的人很难看懂你的程序,你就按照你的思路,还有你的要求,一步步print出相应的量,在屏幕显示一 ...

额,问题就在于没有发现问题,其实就是在这里,前面全是正常的,我print过了,就在这个计算里面出了问题,很奇怪的就全部是0了。同学也有帮忙检查的,没觉得不妥,我自己之前写过类似而时间滤波也很正常。

!第三步,计算每个谐波的系数
do k=1,6
do m=0,12
   w=360/144
   do j=1,73
    do i=1,144
     a(m,j,k)=a(m,j,k)+ahgt(i,j,k)*cosd(m*w*i)
     b(m,j,k)=b(m,j,k)+ahgt(i,j,k)*sind(m*w*i)
   end do
   end do
end do
end do
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-11-30 19:29:07 | 显示全部楼层
lqouc 发表于 2012-11-30 19:08
额,不好意思啊。第一次发帖求助。是在走投无路了,第一个的问题就在第三步求谐波的系数a和b。那之后就全 ...

a和b赋初值放的位置是不是有问题呢,我感觉应该放在k m j的do后面。还有就是有几个做除法的运算,虽然定义了real,但为了以防万一在运算过程中变成整形的,所以在每个数字后面都加一个小数点儿吧,比如那个W=360./144.
我的fortran一般般,第二个程序没看太懂,那几个write看的稀里糊涂,而且我怎么都看不出来是哪一句把他写成grads格式数据的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-11-30 19:42:35 | 显示全部楼层
river 发表于 2012-11-30 19:29
a和b赋初值放的位置是不是有问题呢,我感觉应该放在k m j的do后面。还有就是有几个做除法的运算,虽然定义 ...

多谢啦,我去试试,第二个里面的前面的write是把整形转化为字符型的转换语句,只有带write(11,rec=  )的语句是用来写二进制文件的,第二的问题也就是出在这里,之前的读取还都是正确的。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-11-30 19:50:36 | 显示全部楼层
river 发表于 2012-11-30 19:29
a和b赋初值放的位置是不是有问题呢,我感觉应该放在k m j的do后面。还有就是有几个做除法的运算,虽然定义 ...

话说我改了下实型的问题,还是算出来的0。至于那个初值是让整个场初值全是0因为在这里进行的是求和,求和之后会对整个场在求平均,如果把a=0放在里面会不断地使整个场为0,这样最后只有k,m,j的最后一维有数据。我是这样认为的.........
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-11-30 20:03:49 | 显示全部楼层
lqouc 发表于 2012-11-30 19:42
多谢啦,我去试试,第二个里面的前面的write是把整形转化为字符型的转换语句,只有带write(11,rec=  ) ...

,第二个里面我没有看到write(11,rec=  )啊。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-11-30 20:09:46 | 显示全部楼层
river 发表于 2012-11-30 20:03
额,第二个里面我没有看到write(11,rec=  )啊。

写错了一点, write(12,rec=k)(x(t),t=1,40)这个就是写进去啦,话说我不太爱用form=‘binary’这个命令,所以可能大家不是很习惯。我们学的都是用form=‘unformatted’再加上recl=***来控制二进制格式的书写。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-11-30 20:15:19 | 显示全部楼层
lqouc 发表于 2012-11-30 20:09
写错了一点, write(12,rec=k)(x(t),t=1,40)这个就是写进去啦,话说我不太爱用form=‘binary’这个命令, ...

我所有的程序都是用form='binary',你那个很少用。你屏幕上输出看看,也是零的话,那还是读取有问题吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-11-30 20:20:26 | 显示全部楼层
river 发表于 2012-11-30 20:15
我所有的程序都是用form='binary',你那个很少用。你屏幕上输出看看,也是零的话,那还是读取有问题吧

这个屏幕输出过了,读取的时候没有问题,都好好的,然后什么也没做就直接写入了,还是不行,其实我也用过那个binary的来写,一样不行,很郁闷。其实在我们学的时候根本没有学过binary,只有formatted和unformatted,我直接学的90,77的用法很多不会。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-11-30 20:24:17 | 显示全部楼层
你的编译器是什么,cvf还是powerstation   粗略的试了一下
我个人根据问题可能出在cosd上面  你再试试
我这边直接输出cosd(30)会出现问题  提示没有定义  个人没有用过这个函数  一起讨论下
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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