Fortran Coder

查看: 276|回复: 1

[求助] 求助大佬,这个程序没有错误,为什么运行不出来?

[复制链接]

1

帖子

1

主题

0

精华

新人

F 币
18 元
贡献
8 点
发表于 2020-10-22 15:26:56 | 显示全部楼层 |阅读模式
[Fortran] 纯文本查看 复制代码
PROGRAM MAIN
      integer(8)::m
    integer(8)::delay_max
    PARAMETER(M=3,delay_max=100000)
    real(8)::pi=3.1415926
    real(8)::c=2.997e8
    dimension::a(M),b(m),x(m)
    real(8)::h,q,qq,v,t,a,b,x
    real(8)::transient
    integer(8)::trans
    integer(8)::n,i,k
    real(8)::r3
    real(8)::jratio
    real(8)::l
    real(8)::r2
    real(8)::tauin
    real(8)::lambda
    real(8)::gn
    real(8)::N0
    real(8)::taup
    real(8)::taus
    real(8)::alpha
    real(8)::nth
    real(8)::jth
    real(8)::j,theta
    real(8)::kap
    real(8)::tau
    real(8)::detun,omega0,phaseshift
    real(8)::tmax
    integer(8)::delayindex,delaynum
    integer(8)::div
    dimension::edelay(delay_max),phidelay(delay_max)
    real(8)::edelay,phidelay
     common c,pi,i,theta,z

       r3=0.01
    jratio=1.11
    l=0.225
    r2=0.556
    tauin=8.0e-12
    lambda=1.537e-6
    gn=8.4e-13
    N0=1.4e24
    taup=1.927e-12
    taus=2.04e-9
    alpha=3.0
     h=5.0e-12
    transient=5000.0e-9
    tmax=20.0e-9
    div=10
    nth=n0+1.0/taup/gn
    jth=nth/taus
    j=jratio*jth
    kap=(1-r2**2)*r3/r2/tauin
    tau=2.0*l/c
omega0=2.0*pi*c    
phaseshift=mod(omega0*tau,2.0*pi)
delaynum=tau/h
trans=transient/h
    n=tmax/h
    a(1)=1.3e10
    a(2)=0.0
    a(3)=1.90e24
   delayindex=1 
     do i=1,trans
    t=h*i
    call rungekutta(a,h,m,x,phaseshift,phidelay,delayindex,delaynum,delay_max)
     end do
     do i=1,n
    t=h*(trans+i)
    v=mod(i,div)
    if(v==0)then
       q=h*i*1e9
       qq=a(1)**2*1e-20
        write(*,*) q
        write(*,*) qq
    end if
    call rungekutta(a,h,m,x,phaseshift,phidelay,delayindex,delaynum,delay_max)
     end do


    end program
    !####################################################################################################
    subroutine laser(x,b,m,delayindex,delay_max,gn,n0,taup,kap,edelay,theta,alpha,j,taus)
    integer(8)::m,delay_max
    dimension::b(m),x(m)
    dimension::edelay(delay_max),phidelay(delay_max)
    integer(8)::delayindex,delaynum
    real(8)::gn,taup,taus,kap,alpha,n0,j,b,x,edelay,phidelay
    b(1)=1.0/2.0*(Gn*(x(3)-N0)-1.0/taup)*x(1)+kap*eDelay(delayIndex)*cos(theta)
        b(2)=alpha /2.0*(Gn*(x(3)-N0)-1.0/taup)+kap*eDelay(delayIndex)*sin(theta)
        b(3)=J-x(3)/taus-Gn*(x(3)- N0)*x(1)**2
    end subroutine
    !###################################################################################################
    subroutine rungekutta(a,h,m,x,phaseshift,phidelay,delayindex,delaynum,delay_max)
    integer(8)::m,delay_max
    dimension::a(m),x(m),d(4,m),b(m)
    real(8)::a,x,d,b
    real(8)::h,Z
    dimension::edelay(delay_max),phidelay(delay_max)
    real(8)::edelay,phidelay
    integer(8)::delayindex,delaynum
    real(8)::phaseshift
     real(8)::gn,taup,taus,kap,alpha,n0,j
     theta=mod(phaseshift+a(2)-phidelay(delayindex),2.0*pi)
       do i=1,delay_max
    edelay(i)=a(1)
    phidelay(i)=a(2)
    end do
      do i=1,4
         do z=1,m

              if(i==1)then
                x(z)=a(z)
            end if
             if(i==2)then
                x(z)=a(z)+h*d(z,1)/2.0
             end if
      if(i==3)then
                x(z)=a(z)+h*d(z,2)/2.0
      end if
        if(i==4)then
                x(z)=a(z)+h*d(z,3)
        end if
        end do
        call laser(x,b,m,delayindex,delay_max,gn,n0,taup,kap,edelay,theta,alpha,j,taus)
      end do 
        do i=1,m
          a(i)=a(i)+h*(d(i,1)+2.0*d(i,2)+2.0*d(i,3)+d(i,4))/6.0
      end do
      edelay(delayindex)=a(1)
      phidelay(delayindex)=a(2)
      delayindex=mod(delayindex+1,delaynum)
    end subroutine
回复

使用道具 举报

2

帖子

0

主题

0

精华

新人

F 币
30 元
贡献
8 点
发表于 2020-10-22 23:02:21 | 显示全部楼层
个人觉得:
(1)程序中使用implciit none 有助于避坑。
(2)subroutine rungekutta中z定义为real,却用在了循环。
(3)编译时使用 -fcheck=all 就会知道哪里有问题了,如:
At line 129 of file test.f95 Fortran runtime error: Index '4' of dimension 2 of array 'd' above upper bound of 3
(4)其他问题,类推

评分

参与人数 1F 币 +3 收起 理由
fcode + 3 赞一个!

查看全部评分

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

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2020-12-5 09:38

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

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