24小时热门版块排行榜    

查看: 1716  |  回复: 10

brqhl_ing

银虫 (小有名气)

[交流] 【求助】fortran出错 编译通过 运行溢出

subroutine  adams(t,h,m,y,n,z,f,d,eps,b,e,s,g,kp1,kp2)
        external f,rkt
        dimension y(n),d(n),z(n,m),b(4,n),e(n),s(n),g(n)
       real*8 kp1,kp2
        a=t
        do 10 i=1,n
10     z(i,1)=y(i)
       call f(t,y,n,d,kp1,kp2)
             do 20 i=1,n
20      b(1,i)=d(i)
        do 50 i=2,4
            if (i.le.m)then
              t=a+(i-1)*h
              call rkt(t,h,y,n,f,eps,d,e,s,g,kp1,kp2)
             do 30 k=1,n
30           z(k,i)=y(k)
             call f(t,y,n,d,kp1,kp2)
               do 40 k=1,n
40            b(i,k)=d(k)
             end if
50      continue
       do 100 i=5,m
             do 60 j=1,n
                   q=55*b(4,j)-59*b(3,j)+37*b(2,j)-9*b(1,j)
                   y(j)=z(j,i-1)+h*q/24.0
                   b(1,j)=b(2,j)
                   b(2,j)=b(3,j)
                   b(3,j)=b(4,j)
60         continue
            t=a+(i-1)*h                 
              call f(t,y,n,d,kp1,kp2)
              do 70 k=1,n
70           b(4,k)=d(k)
                  do 80 j=1,n
                     q=9*b(4,j)+19*b(3,j)-5*b(2,j)+b(1,j)
                     z(j,i)=z(j,i-1)+h*q/24.0
                       y(j)=z(j,i)
80                 continue
              do 90 k=1,n       
90             b(4,k)=d(k)
100     continue
       t=a
       return       
         end
             
                 
                 subroutine rkt(t,h,y,n,f,eps,d,b,c,g,kp1,kp2)
                 dimension y(n),d(n),a(4),b(n),c(n),g(n)
           real*8 kp1,kp2
                 h1=h
                 m=1
                 p=1+eps
                 x=t
                 do 10 i=1,n
10     c(i)=y(i)
20     if (p.ge.eps)then
            a(1)=h1/2.0
               a(2)=a(1)
                a(3)=h1
                a(4)=h1
                do 30 i=1,n
                 g(i)=y(i)
                  y(i)=c(i)
30             continue
               dt=h/m
               t=x
              do 80 j=1,m
                  call f(t,y,n,d,kp1,kp2)
                   do 40 i=1,n
40                b(i)=y(i)
                 do 60 k=1,3
                      do 50 i=1,n
                          y(i)=y(i)+a(k)*d(i)
                         b(i)=b(i)+a(k+1)*d(i)/3.0
50                   continue
                     tt=t+a(k)
                        call f(tt,y,n,d,kp1,kp2)
60                continue
                   do 70 i=1,n
70                    y(i)=b(i)+h1*d(i)/6.0
                    t=t+dt
80             continue
         p=0.0
         do 90 i=1,n
        q=abs(y(i)-g(i))
        if(q.gt.p) p=q
90     continue
          h1=h1/2.0
            m=m+m
            goto 20
       endif
        t=x
        return
        end


        program madams
c     -----------------------------------------------------------------------
c      this rpogram is used to solve a systwem of differential equagtion
c       by using adams method
c      -------------------------------------------------------------------
       external f
        dimension  y(11),d(11),z(11,500000),b(4,11),e(11),s(11),g(11)
        real*8 wucha,kp1,kp2,t,tao,variable,Parameters

      open(26,file='variable.dat')
        open(28,file='Parameters.dat')
      open(10,file='wucha.dat')
        h=0.001d0

        y(1)=0.01d0
        y(2)=0.02d0   
        y(3)=0.03d0

        y(4)=0.4d0
        y(5)=0.2d0   
        y(6)=0.8d0

        y(7)=0.8d0
        y(8)=2.5d0   
        y(9)=0.9d0
        y(10)=6d0
        y(11)=1d0


        m=500000
        n=11
        eps=0.00001d0
      
       do kp1=1.50d0,1.60d0,0.1d0
         do kp2=0.00d0,0.50d0,0.1d0
        call adams(a,h,m,y,n,z,f,d,eps,b,e,s,g,kp1,kp2)
        do i=1,m
           t=(i-1)*h
      detae=((z(1,i)-z(4,i))**2.0+(z(2,i)+z(5,i))**2.0+
     $        (z(3,i)-z(6,i))**2.0)**0.5
   
!     write(26,'(2f15.6)')t,detae
!     write(28,'(6f15.6)')t,z(7,i),z(8,i),z(9,i),z(10,i),z(11,i)
        if(detae>50)then
        write(10,*)kp1,kp2,1
      write(*,*)kp1,kp2,1
        goto 20
        elseif(detae>1.0d-3)then
        tao=t
        endif
        enddo
        if(tao<=50)then
        write(10,*)kp1,kp2,0
      write(*,*)kp1,kp2,0
        else
        write(10,*)kp1,kp2,1
      write(*,*)kp1,kp2,1
        endif
20      continue
       enddo
        enddo
       close(2)
         end


        subroutine f(t,y,n,d,kp1,kp2)
c     ----------------------------------------------------------------------
    !   real*8 kp1,kp2
       dimension  y(n),d(n)
        double precision ex,ey,ez,u1,kp1,kp2
cccccccccccccc
       ex=y(1)-y(4)
         ey=y(2)+y(5)
         ez=y(3)-y(6)

c        u1=ey-ez+y(8)*(y(1)+y(4))*ex-y(10)*(y(1)+y(4))*ey+4d0*y(11)*ez
c        u2=0d0

cc       u1=ey+y(8)*(y(1)+y(4))*ex-y(10)*(y(1)+y(4))*ey
cc       u2=-ex+4d0*y(11)*ex

          u1=ey+y(8)*(y(1)+y(4))*ex-y(10)*(y(1)+y(4))*ey+4d0*y(11)*ez
         u2=-ex
!         do kp1=0.00d0,10.0d0,0.01d0
!         do kp2=0.00d0,10.0d0,0.01d0
    !   kp1=2.0d0
    !  kp2=0.5d0
cccccccccccccc
       d(1)=y(2)-1d0*y(1)**3+3d0*y(1)**2-y(3)+3d0

         d(2)=1d0-5d0*y(1)**2-y(2)

         d(3)=0.006d0*(4d0*(y(1)+1.6d0)-y(3))

cccccccccccccccccccccccc
       d(4)=y(5)-y(7)*y(4)**3+y(8)*y(4)**2-y(6)+3d0+u1

         d(5)=y(9)-y(10)*y(4)**2-y(5)

         d(6)=y(11)*(4d0*(y(4)+1.6d0)-y(6))+u2
cccccccccccccccccccccccccccccccccc

        d(7)=-kp1*kp2*y(1)**3*ex

        d(8)=kp1*kp2*y(1)**2*ex

        d(9)=kp1*kp2*ey

        d(10)=-kp1*kp2*y(1)**2*ey

      d(11)=kp1*kp2*(4d0*(y(1)+1.6d0)-y(3))*ez
  !     enddo
!        enddo
         
        return
        end
高手看看 这个程序 出错了 为什么  溢出了!!

回复此楼

» 猜你喜欢

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

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

snoopyzhao

至尊木虫 (职业作家)


余泽成(金币+1):谢谢参与应助! 2010-09-15 13:32:14
我这里很顺利地结束了啊,呵呵……

我用 gfortran 编译的……
2楼2010-09-14 20:22:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)


余泽成(金币+1):谢谢参与应助! 2010-09-15 13:32:24
do kp1=1.50d0,1.60d0,0.1d0
         do kp2=0.00d0,0.50d0,0.1d0
        call adams(a,h,m,y,n,z,f,d,eps,b,e,s,g,kp1,kp2)
        do i=1,m
           t=(i-1)*h
      detae=((z(1,i)-z(4,i))**2.0+(z(2,i)+z(5,i))**2.0+
     $        (z(3,i)-z(6,i))**2.0)**0.5
   
!     write(26,'(2f15.6)')t,detae
!     write(28,'(6f15.6)')t,z(7,i),z(8,i),z(9,i),z(10,i),z(11,i)
        if(detae>50)then
        write(10,*)kp1,kp2,1
      write(*,*)kp1,kp2,1
        goto 20
        elseif(detae>1.0d-3)then
        tao=t
        endif
        enddo
        if(tao<=50)then
        write(10,*)kp1,kp2,0
      write(*,*)kp1,kp2,0
        else
        write(10,*)kp1,kp2,1
      write(*,*)kp1,kp2,1
        endif
20      continue
       enddo
        enddo

在循环的时候,=((z(1,i)-z(4,i))**2.0+(z(2,i)+z(5,i))**2.0+
     $        (z(3,i)-z(6,i))**2.0
是一个无穷大或者无穷小的数字,cvf不识别,不予计算,就提示溢出了。

gfortran 编译计算的时候,即使是NaN 也会继续计算不提示任何错误。
3楼2010-09-14 22:22:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

引用回帖:
在循环的时候,=((z(1,i)-z(4,i))**2.0+(z(2,i)+z(5,i))**2.0+
     $        (z(3,i)-z(6,i))**2.0
是一个无穷大或者无穷小的数字,cvf不识别,不予计算,就提示溢出了。

gfortran 编译计算的时候,即使是NaN 也会继续计算不提示任何错误。

多谢指教……
4楼2010-09-14 22:43:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

引用回帖:
Originally posted by snoopyzhao at 2010-09-14 22:43:47:


多谢指教……

snoopyzhao ,嘿嘿,
我猜的,我没试,哈哈,在宿舍不方便调试。哈哈。
5楼2010-09-14 22:57:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zyj8119

木虫 (著名写手)

SQRT范围错误?就是SQRT的数值里面出现了负数?
好好学习,天天向上。
6楼2010-09-15 08:54:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

建议楼上的看看程序再发言
实数的平方和怎么可能是负数。
7楼2010-09-15 09:07:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

brqhl_ing

银虫 (小有名气)

引用回帖:
Originally posted by snoopyzhao at 2010-09-14 20:22:34:
我这里很顺利地结束了啊,呵呵……

我用 gfortran 编译的……

运行结果出现NAN啊  你那没有?
8楼2010-09-15 09:22:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

brqhl_ing

银虫 (小有名气)

引用回帖:
Originally posted by maomao1210 at 2010-09-14 22:22:30:
do kp1=1.50d0,1.60d0,0.1d0
         do kp2=0.00d0,0.50d0,0.1d0
        call adams(a,h,m,y,n,z,f,d,eps,b,e,s,g,kp1,kp2)
        do i=1,m
           t=(i-1)*h
      detae=((z(1,i)-z(4,i))**2.0+( ...

如何解决这个问题呢
9楼2010-09-15 09:23:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)


余泽成(金币+1):辛苦! 2010-09-15 13:33:10
引用回帖:
Originally posted by brqhl_ing at 2010-09-15 09:23:21:

如何解决这个问题呢

微分方程组的那一块有点问题,
或者 给定解微分方程组的参数有问题。
或者这块缺少一些句子之类。
具体需要你自己仔细排查。。。。
10楼2010-09-15 09:48:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 brqhl_ing 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 机械专硕调剂 +3 笨笨兔子 2026-03-12 3/150 2026-03-15 20:02 by 栗子粥?
[考研] 274求调剂 +4 时间点 2026-03-13 4/200 2026-03-15 15:29 by Rambo13
[考研] 26考研一志愿中国石油大学(华东)305分求调剂 +3 嘉年新程 2026-03-15 3/150 2026-03-15 13:58 by 哈哈哈哈嘿嘿嘿
[考研] 211本,11408一志愿中科院277分,曾在中科院自动化所实习 +3 Losir 2026-03-12 3/150 2026-03-14 12:11 by 热情沙漠
[考研] 【0703化学调剂】-一志愿华中师范大学-六级475 +5 Becho359 2026-03-11 5/250 2026-03-14 11:35 by 哦哦123
[考研] 288求调剂 +14 王晓阳- 2026-03-09 19/950 2026-03-14 02:05 by JourneyLucky
[考研] 307求调剂 +7 超级伊昂大王 2026-03-10 7/350 2026-03-14 00:49 by JourneyLucky
[考研] 0856材料与化工309分求调剂 +6 ZyZy…… 2026-03-10 6/300 2026-03-14 00:38 by JourneyLucky
[考研] 271求调剂 +10 生如夏花… 2026-03-11 10/500 2026-03-14 00:35 by 卖报员小雨
[考研] 311求调剂 +5 牛乳糖的卡卡 2026-03-10 5/250 2026-03-14 00:05 by JourneyLucky
[考研] 材料工程,326分,求调剂 +6 KRSLSR 2026-03-10 6/300 2026-03-13 23:47 by JourneyLucky
[考研] 341求调剂 +3 番茄头--- 2026-03-10 3/150 2026-03-13 23:07 by JourneyLucky
[考研] 四川大学085601材料工程专硕 初试294求调剂 +4 祝我们好在冬天 2026-03-11 4/200 2026-03-13 21:39 by peike
[考研] 332求调剂 +3 Zz版 2026-03-13 3/150 2026-03-13 20:36 by 18595523086
[考研] 【0856】化学工程(085602)313 分,本科学科评估A类院校化学工程与工艺,诚求调剂 +7 小刘快快上岸 2026-03-11 7/350 2026-03-13 16:06 by ruiyingmiao
[考研] 295求调剂 +3 小匕仔汁 2026-03-12 3/150 2026-03-13 15:17 by vgtyfty
[考研] 一志愿华中师范071000,325求调剂 +5 RuitingC 2026-03-12 5/250 2026-03-13 10:43 by hyswxzs
[考研] 工科0856专硕化学工程269能调剂吗 +10 我想读研11 2026-03-10 10/500 2026-03-13 10:14 by Yuyi.
[考研] 化工0817调剂 +8 灿若星晨 2026-03-10 8/400 2026-03-10 22:44 by 星空星月
[考研] 调剂 +5 呵唔哦豁 2026-03-10 5/250 2026-03-10 22:00 by 28375m
信息提示
请填处理意见