Fortran Coder

查看: 20743|回复: 10
打印 上一主题 下一主题

[求助] 写了一个程序,结果输出的数组是一个值,求赐教啊

[复制链接]

55

帖子

17

主题

0

精华

熟手

F 币
261 元
贡献
169 点
跳转到指定楼层
楼主
发表于 2015-8-20 15:02:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
01program solard
02     implicit none
03     REAL TMAX, TMIN, E, TTHIRTY
04     INTEGER I, YEAR, DOY ,a
05     INTEGER ,parameter:: ndays=730
06     REAL  B,delta,sita,R,womiga0,womiga1,womiga2,womiga3
07     REAL  tuo0,alfa,C,b0,PAI,FAI,PZ,P0,Tfmax,q1
08     real b1,b2,I0,D
09     real, allocatable::Q0(:)
10     real, allocatable::Qh(:)
11     real, allocatable::TTMAX(:)
12 !      NDAYS=730
13       tuo0=0.87
14       alfa=-0.000061
15       C=1.5
16       b0=0.031
17       b1=0.201
18       b2=0.185
19       I0=1367.0
20       D=86400
21       PAI=3.14159
22       FAI=38.33/(180*PAI)
23       PZ=90810
24       P0=101325
25    DO I=1,NDAYS
26     OPEN (UNIT = 9, FILE = '\B90V3\DAT\SOLARDFILE.DAT')
27      rewind(9)
28     READ (9, *) YEAR, DOY, TMAX, TMIN, E, TTHIRTY
29     enddo
30    Allocate( Q0( ndays ) )
31    Allocate( Qh( ndays ) )
32    Allocate( TTMAX( ndays ) )
33    DO I=1,NDAYS
34    !TTHIRTY 30日平均温差
35      delta=23.45*PAI/(180*sin(2*PAI*(284+i)/365))
36      sita=2*PAI*i/365
37      R=1.000109+0.033494*cos(sita)+0.001472*sin(sita)
38      R=R+0.000768*cos(2*sita)+0.000079*sin(2*sita)
39      womiga0=ABS(acos(-tan(delta)*tan(fai)))
40      q1=womiga0*sin(fai)*sin(delta)+cos(fai)*cos(delta)*sin(womiga0)
41      q0=q1*I0*D/(PAI*R*R)
42      womiga3=0
43        DO A=1,100
44            womiga1=-womiga0+womiga0/100+womiga0*a/50
45          womiga2=sin(fai)*sin(delta)+cos(fai)*cos(delta)*cos(womiga1)
46          womiga3=womiga3+(womiga2*tuo0**(PZ/(P0*womiga2)))*womiga0/50
47        ENDDO
48        Ttmax=womiga3/(q0*2*PAI*R*R/I0/D)+alfa*e*1000;
49       B=b0+b1*exp(-b2* TTHIRTY);
50       Tfmax=1.0-0.9*exp(-B*(Tmax-Tmin)**(C));
51       Qh=q0*Ttmax*Tfmax/1000000;
52    ENDDO
53     open(2,file='QH.dat')
54       do I=1,ndays-1
55      write(2,'(i4,2x,f15.1,f6.1,f15.1)') I,Q0(I),TTMAX(I),QH(I)
56       enddo
57    CLOSE(2)
58    END

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

55

帖子

17

主题

0

精华

熟手

F 币
261 元
贡献
169 点
沙发
 楼主| 发表于 2015-8-20 15:02:59 | 只看该作者
就是数组都是一个值似乎计算了一遍

955

帖子

0

主题

0

精华

大师

F 币
188 元
贡献
77 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
板凳
发表于 2015-8-20 16:04:20 | 只看该作者
本帖最后由 vvt 于 2015-8-20 16:07 编辑

[Fortran] 纯文本查看 复制代码
1DO I=1,NDAYS
2 OPEN (UNIT = 9, FILE = '\B90V3\DAT\SOLARDFILE.DAT')
3  rewind(9)
4 READ (9, *) YEAR, DOY, TMAX, TMIN, E, TTHIRTY
5 enddo

这样没有意义。你读了 NDAYS 次第一行。所以每次结果都一样。

正确的做法是:
[Fortran] 纯文本查看 复制代码
1OPEN (UNIT = 9, FILE = '\B90V3\DAT\SOLARDFILE.DAT')
2DO I=1,NDAYS 
3    !TTHIRTY 30日平均温差
4     READ (9, *) YEAR, DOY, TMAX, TMIN, E, TTHIRTY
5    ! 计算
6END DO
7Close( 9 )

55

帖子

17

主题

0

精华

熟手

F 币
261 元
贡献
169 点
地板
 楼主| 发表于 2015-8-20 16:29:46 | 只看该作者
vvt 发表于 2015-8-20 16:04
    DO I=1,NDAYS
     OPEN (UNIT = 9, FILE = '\B90V3\DAT\SOLARDFILE.DAT')
...

[Fortran] 纯文本查看 复制代码
01program solard
02     implicit none
03     REAL TMAX, TMIN, E, TTHIRTY
04     INTEGER I, YEAR, DOY ,a
05     INTEGER ,parameter:: ndays=730
06     REAL  B,delta,sita,R,womiga0,womiga1,womiga2,womiga3
07     REAL  tuo0,alfa,C,b0,PAI,FAI,PZ,P0,Tfmax,q1
08     real b1,b2,I0,D
09     real, allocatable::Q0(:)
10     real, allocatable::Qh(:)
11     real, allocatable::TTMAX(:)
12 !      NDAYS=730
13       tuo0=0.87
14       alfa=-0.000061
15       C=1.5
16       b0=0.031
17       b1=0.201
18       b2=0.185
19       I0=1367.0
20       D=86400
21       PAI=3.14159
22       FAI=38.33/(180*PAI)
23       PZ=90810
24       P0=101325
25    !38.33是样地纬度
26     OPEN (UNIT = 9, FILE = '\B90V3\DAT\SOLARDFILE.DAT')
27     DO I=1,NDAYS
28      rewind(9)
29     READ (9, *) YEAR, DOY, TMAX, TMIN, E, TTHIRTY
30     enddo
31     close(9)
32    Allocate( Q0( ndays ) )
33    Allocate( Qh( ndays ) )
34    Allocate( TTMAX( ndays ) )
35    DO I=1,NDAYS
36    !TTHIRTY 30日平均温差
37      delta=23.45*PAI/(180*sin(2*PAI*(284+i)/365))
38      sita=2*PAI*i/365
39      R=1.000109+0.033494*cos(sita)+0.001472*sin(sita)
40      R=R+0.000768*cos(2*sita)+0.000079*sin(2*sita)
41      womiga0=ABS(acos(-tan(delta)*tan(fai)))
42      q1=womiga0*sin(fai)*sin(delta)+cos(fai)*cos(delta)*sin(womiga0)
43      q0=q1*I0*D/(PAI*R*R)
44      womiga3=0
45        DO A=1,100
46            womiga1=-womiga0+womiga0/100+womiga0*a/50
47                womiga2=sin(fai)*sin(delta)+cos(fai)*cos(delta)*cos(womiga1)
48                womiga3=womiga3+(womiga2*tuo0**(PZ/(P0*womiga2)))*womiga0/50
49        ENDDO
50        Ttmax=womiga3/(q0*2*PAI*R*R/I0/D)+alfa*e*1000;
51       B=b0+b1*exp(-b2* TTHIRTY);
52       Tfmax=1.0-0.9*exp(-B*(Tmax-Tmin)**(C));
53       Qh=q0*Ttmax*Tfmax/1000000;
54    ENDDO
55     open(2,file='QH.dat')
56       do I=1,ndays-1
57            write(2,'(i4,2x,f15.1,f6.1,f15.1)') I,Q0(I),TTMAX(I),QH(I)
58       enddo
59    CLOSE(2)
60    END

按您说的改了,可是结果还是一样的

955

帖子

0

主题

0

精华

大师

F 币
188 元
贡献
77 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
5#
发表于 2015-8-20 16:39:30 | 只看该作者
本帖最后由 vvt 于 2015-8-20 16:43 编辑

你改得不对

[Fortran] 纯文本查看 复制代码
01program solard
02     implicit none
03     REAL TMAX, TMIN, E, TTHIRTY
04     INTEGER I, YEAR, DOY ,a
05     INTEGER ,parameter:: ndays=730
06     REAL  B,delta,sita,R,womiga0,womiga1,womiga2,womiga3
07     REAL  tuo0,alfa,C,b0,PAI,FAI,PZ,P0,Tfmax,q1
08     real b1,b2,I0,D
09     real, allocatable::Q0(:)
10     real, allocatable::Qh(:)
11     real, allocatable::TTMAX(:)
12 !      NDAYS=730
13       tuo0=0.87
14       alfa=-0.000061
15       C=1.5
16       b0=0.031
17       b1=0.201
18       b2=0.185
19       I0=1367.0
20       D=86400
21       PAI=3.14159
22       FAI=38.33/(180*PAI)
23       PZ=90810
24       P0=101325
25    !!!DO I=1,NDAYS
26     OPEN (UNIT = 9, FILE = '\B90V3\DAT\SOLARDFILE.DAT')
27    !!  rewind(9)
28    !! READ (9, *) YEAR, DOY, TMAX, TMIN, E, TTHIRTY
29    !! enddo
30    Allocate( Q0( ndays ) )
31    Allocate( Qh( ndays ) )
32    Allocate( TTMAX( ndays ) )
33    DO I=1,NDAYS
34    !TTHIRTY 30日平均温差
35      READ (9, *) YEAR, DOY, TMAX, TMIN, E, TTHIRTY !////// 加到这里
36      delta=23.45*PAI/(180*sin(2*PAI*(284+i)/365))
37      sita=2*PAI*i/365
38      R=1.000109+0.033494*cos(sita)+0.001472*sin(sita)
39      R=R+0.000768*cos(2*sita)+0.000079*sin(2*sita)
40      womiga0=ABS(acos(-tan(delta)*tan(fai)))
41      q1=womiga0*sin(fai)*sin(delta)+cos(fai)*cos(delta)*sin(womiga0)
42      q0(i)=q1*I0*D/(PAI*R*R)
43      womiga3=0
44        DO A=1,100
45            womiga1=-womiga0+womiga0/100+womiga0*a/50
46         womiga2=sin(fai)*sin(delta)+cos(fai)*cos(delta)*cos(womiga1)
47         womiga3=womiga3+(womiga2*tuo0**(PZ/(P0*womiga2)))*womiga0/50
48        ENDDO
49        Ttmax(i)=womiga3/(q0(i)*2*PAI*R*R/I0/D)+alfa*e*1000;
50       B=b0+b1*exp(-b2* TTHIRTY);
51       Tfmax=1.0-0.9*exp(-B*(Tmax-Tmin)**(C));
52       Qh(i)=q0(i)*Ttmax(i)*Tfmax/1000000;
53    ENDDO
54     open(2,file='QH.dat')
55       do I=1,ndays-1
56     write(2,'(i4,2x,f15.1,f6.1,f15.1)') I,Q0(I),TTMAX(I),QH(I)
57       enddo
58    CLOSE(2)
59    END

55

帖子

17

主题

0

精华

熟手

F 币
261 元
贡献
169 点
6#
 楼主| 发表于 2015-8-21 09:46:06 | 只看该作者
读不到那个位置是什么原因

微信截图_20150821095334.png (49.17 KB, 下载次数: 1)

微信截图_20150821095334.png

55

帖子

17

主题

0

精华

熟手

F 币
261 元
贡献
169 点
7#
 楼主| 发表于 2015-8-21 10:15:40 | 只看该作者
vvt 发表于 2015-8-20 16:39
你改得不对

[mw_shl_code=fortran,true]

?可是你这样写读不出来啊

17

帖子

4

主题

0

精华

熟手

F 币
186 元
贡献
105 点
8#
发表于 2015-8-21 10:16:33 | 只看该作者
开头自己声明
integer::ierror
character(len=80)::msg
自己改
read(9,*) 改成 read(9,*,iostat=ierror,iomsg=msg)  
后面加一行
if (ierror/=0) write(*,*) msg
报什么错误自己调

评分

参与人数 1F 币 +9 贡献 +9 收起 理由
fcode + 9 + 9 很给力!

查看全部评分

2038

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1676 元
贡献
715 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

9#
发表于 2015-8-21 10:42:11 | 只看该作者
请给出数据文件(上传附件)

55

帖子

17

主题

0

精华

熟手

F 币
261 元
贡献
169 点
10#
 楼主| 发表于 2015-8-21 10:47:08 | 只看该作者
数据文件

SOLARDFILE.dat

22.45 KB, 下载次数: 2

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2025-5-1 07:20

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

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