24小时热门版块排行榜    

查看: 699  |  回复: 4

gelitao1234

金虫 (正式写手)

[求助] 子程序变量赋值后自动改变 已有2人参与

调动子程序的时候,第一调动子程序运行一切正常,第二次调动子程序的时候变量就变了,这是为什么呢?
NZ2=31
NZ3=131
DZ1=0.015D0
DZ2=DZ1
DZ3=DZ1
CZ2=1.5D0


CALL STRETCH1(NZ2,NZ3,CZ2,DZ2,DZ3,ZZ)
      DO K=NZ2,NZ3
      ZZ(K)=ZZ(K)+CZ1
      END DO

SUBROUTINE STRETCH1(N0,N,C,DX0,DXN,X)
SEP=1.D0/DFLOAT(N-N0)
      S0=C*SEP/DX0
    S1=C*SEP/DXN
WRITE(6,*) S0,S1
WRITE(6,*) C,SEP,DX0
在屏幕上C现实为:0000000
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
感谢参与,应助指数 +1
gelitao1234: 金币+150, ★★★★★最佳答案 2015-02-06 14:32:38
那个变量变了,C吗 ?

你这有两个问题
(1)  WRITE(6,*) C,SEP,DX0里面第二个逗号不是ascii 码
(2) 在SUBROUTINE STRETCH1里 没有定义哑元,也许你删了?

如果你定了所有的变量,应该没问题,像这样
subroutine testStretch1
  implicit none
  integer ::  nz2,nz3
  real*8 :: dz1,dz2,dz3,cz2,zz
  nz2=31
  nz3=131
  dz1=0.015d0
  dz2=dz1
  dz3=dz1
  cz2=1.5d0
  zz=1d0
  call stretch1(nz2,nz3,cz2,dz2,dz3,zz)
end subroutine testStretch1

subroutine stretch1(n0,n,c,dx0,dxn,x)
  implicit none
  integer ::  n0,n
  real*8 :: c,dx0,dxn,x,sep,s0,s1
  sep=1.d0/dfloat(n-n0)
  s0=c*sep/dx0
  s1=c*sep/dxn
  write(6,*) s0,s1
  write(6,*) c,sep,dx0
end subroutine stretch1
2楼2015-02-05 11:10:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gelitao1234

金虫 (正式写手)

引用回帖:
2楼: Originally posted by pippi6 at 2015-02-05 11:10:30
那个变量变了,C吗 ?

你这有两个问题
(1)  WRITE(6,*) C,SEP,DX0里面第二个逗号不是ascii 码
(2) 在SUBROUTINE STRETCH1里 没有定义哑元,也许你删了?

如果你定了所有的变量,应该没问题,像这样
subro ...

非常感谢您的回答。程序用fortran77写的,,不用提前定义变量。你的解答给我了很多提示,非常感谢您的热心帮助。
3楼2015-02-06 14:32:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jiangxingge

金虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
gelitao1234: 金币+50, ★★★★★最佳答案 2015-02-11 09:52:01
既然 不用提前定义变量,按规定 ,CZ2 是 实型(4字节),你为啥 要赋一个 双精度 的 值 1.5D0(8字节)。 这样 的 情况 有好几处,你到底 要用 单精度还是 双精度?搞不明白,在子程序传来传去,很容易出问题。
你只要把所有 变量 的 类型 搞明白了,简单一点 ,全部 显式定义,不要利用缺省规定。
估计就没问题了。
4楼2015-02-10 15:58:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gelitao1234

金虫 (正式写手)

引用回帖:
4楼: Originally posted by jiangxingge at 2015-02-10 15:58:11
既然 不用提前定义变量,按规定 ,CZ2 是 实型(4字节),你为啥 要赋一个 双精度 的 值 1.5D0(8字节)。 这样 的 情况 有好几处,你到底 要用 单精度还是 双精度?搞不明白,在子程序传来传去,很容易出问题。
你 ...

CZ2是变量符号,非变量赋值。非常感谢您的提醒,以前确实没有注意到这个问题。
5楼2015-02-11 09:52:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 gelitao1234 的主题更新
信息提示
请填处理意见