我正在尝试使用gfortran解决方程,但我一直在收到错误

时间:2010-06-13 15:01:32

标签: gfortran

我正在使用以下程序,但我一直收到错误。我的程序出了什么问题?

  real x
  complex y
  real m1,H0,Ms,P1,P2,P3,w0,wm,wh
  complex w1,w2,o1,o2
  integer i,n
  real pi
  n=4000000000  
  pi=4*atan(1.0)
  m1=4*pi*1e-7
  H0=39.79e3
  Ms=1400e3
  P1=0.7*0.12
  P2=0.3*0.12
  P3=P1-P2
  w0=m1*(1.76e11)*H0
  wm=m1*(1.76e11)*Ms
  wh=w0-P3*wm
  im=cmplx(0,1)
  w1=wm/2+wh-im*0.06*2*pi*x
  w2=wm/2-wh-im*0.06*2*pi*x
  o1=x**2-x*(2*wh-(P3*wm)/2)-w1*w2+(wm/2)*(P1*w2+P2*w1)
  o2=x**2+x*(2*wh-(P3*wm)/2)-w1*w2+(wm/2)*(P1*w2+P2*w1)

  do i=0,n
     x=i
     y=1+wm*(P1*w1*((w2)**2-x**2))/(o1*o2)
 &        +wm*(P2*w2*((w1)**2-x**2))/(o1*o2)
 &        -wm*((wm/2)*((P1*w2+P2*w1)**2)))/(o1*o2)
 &        +wm*((wm/2)*((P3*x)**2))/(o1*o2)
     write(10,*)x,y
  enddo
  return
  end

1 个答案:

答案 0 :(得分:4)

这一行(多行语句中的第三行):

-wm*((wm/2)*((P1*w2+P2*w1)**2)))/(o1*o2)
    ||    | ||           |   ||| |     |
    |+----+ |+-----------+   ||| +-----+
    |       +----------------+||
    +-------------------------+|
??? <--------------------------+

有一个太多的结束括号{恐惧我的真棒绘画技巧:-)}。它应该是:

-wm*((wm/2)*((P1*w2+P2*w1)**2))/(o1*o2)

我从该来源获得的完整问题列表是:

source.f90:7.18: n=4000000000
                             1
                 Error: Integer too big for its kind at (1). This check can
                 be disabled with the option -fno-range-check.
source.f90:26.9: y=1+wm*(P1*w1*((w2)**2-x**2))/(o1*o2) &
                 1
                 Error: Unclassifiable statement at (1)

其中第二个是您可能拥有的(以及您可以使用上述解决方案修复的那个)。第一个,如果你有它,会引起问题,但我怀疑这只是因为我的环境。

相关问题