Fortran Coder

查看: 12261|回复: 8
打印 上一主题 下一主题

[求助] 大神给改改这个代码吧,错误挺多,谢了

[复制链接]

13

帖子

5

主题

0

精华

入门

F 币
62 元
贡献
40 点
跳转到指定楼层
楼主
发表于 2016-9-29 20:45:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
program zuhe
      parameter(aa1=0.005,aa2=100,bb1=0.02,bb2=400,cc1=0.08,cc2=700, &
      dd1=0.06,dd2=200,d1=100,d2=300,s=50.26,L0=461,fd=7000)
      real i
      
      st=0.00001
      et=30
      k1=aa2/aa1
      k2=(cc2-bb2)/(cc1-bb1)
      k3=(dd2-cc1)/(dd1-cc1)
      k4=(aa2-dd2)/(aa1-dd1)
      pp1=log((2*SQRT(d2*d2*(SIN(2*3.14/8))**2+(d2*COS(2*3.14/8)-d1)**2))/LO)
      pp2=bb2+k2*(pp1-bb1)
      do 100  i=0.0,30.0,0.025
      k=floor(MOD(i,1.0),0.25)+1
      fdd=(floor(i,1))*fd+fd
      if(k.eq.1)then
      f=MOD(i,1/4)*fdd*4/1
      elseif(k.eq.2)then
      f=fdd-MOD(i,1/4)*fdd*4/1
      elseif(k.eq.3)then
      f=-MOD(i,1/4)*fdd*4/1
      else
      f=-(fdd-MOD(i,1/4)*fdd*4/1)
      endif
      If ((step / et).lt.0 )Then
      et = -et
      End If
      if((floor(i,(1/4))+1).lt.9)then
       k5=floor(i,(1/4))+1
       else
       k5=floor(mod(i,1),(1/4))+5
      endif
      if(mod(i,(1/4)).eq.0)then
      k5=k5-1
      endif
      if(k5.eq.0)then
          k5=k5+1
      endif
      IF(MOD(i,(1/4)).eq.0)then
          k6=k-1
          else
          k6=k
      endif
      if(k6.eq.0)then
          k6=k6+1
      endif
      
      
      if((k5.eq.1).or.(k5.eq.4).or.(k5.eq.5).or.(k5.eq.8))then
          step=0.5
          else
          step=-0.5
      endif
    
      do 200 x=st,et,step
          
       CALL silk1(x,d1,d2,s1,a1,b1,c1,d1,e1,f1,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk2(x,d1,d2,s2,a2,b2,c2,d2,e2,f2,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk3(x,d1,d2,s3,a3,b3,c3,d3,e3,f3,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0) 
       CALL silk4(x,d1,d2,s4,a4,b4,c4,d4,e4,f4,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk5(x,d1,d2,s5,a5,b5,c5,d5,e5,f5,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk6(x,d1,d2,s6,a6,b6,c6,d6,e6,f6,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk7(x,d1,d2,s7,a7,b7,c7,d7,e7,f7,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk8(x,d1,d2,s8,a8,b8,c8,d8,e8,f8,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0) 
       CALL silk9(x,d1,d2,s9,a9,b9,c9,d9,e9,f9,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk10(x,d1,d2,s10,a10,b10,c10,d10,e10,f10,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk11(x,d1,d2,s11,a11,b11,c11,d11,e11,f11,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0) 
       CALL silk12(x,d1,d2,s12,a12,b12,c12,d12,e12,f12,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk13(x,d1,d2,s13,a13,b13,c13,d13,e13,f13,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk14(x,d1,d2,s14,a14,b14,c14,d14,e14,f14,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk15(x,d1,d2,s15,a15,b15,c15,d15,e15,f15,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk16(x,d1,d2,s16,a16,b16,c16,d16,e16,f16,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0) 
       fx=fx1+fx2+fx3+fx4+fx5+fx6+fx7+fx8+fx9+fx10+fx11+fx12+fx13+fx14+fx15+fx16
        if((k6.eq.1).and.(k6.eq.4))then
       if(fx.gt.f)then
           zx=aa
           zd=x
           do 10 until (abs((fx-f).lt.0.1))
            If ((abs(zd - zx) .lt. 0.00001)) Exit 
           if(fx.gt.f)then
               zd=x
               else
               zx=x
           endif
           x=(zd+zx)/2
           CALL silk1(x,d1,d2,s1,a1,b1,c1,d1,e1,f1,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk2(x,d1,d2,s2,a2,b2,c2,d2,e2,f2,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk3(x,d1,d2,s3,a3,b3,c3,d3,e3,f3,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0) 
       CALL silk4(x,d1,d2,s4,a4,b4,c4,d4,e4,f4,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk5(x,d1,d2,s5,a5,b5,c5,d5,e5,f5,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk6(x,d1,d2,s6,a6,b6,c6,d6,e6,f6,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk7(x,d1,d2,s7,a7,b7,c7,d7,e7,f7,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk8(x,d1,d2,s8,a8,b8,c8,d8,e8,f8,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0) 
       CALL silk9(x,d1,d2,s9,a9,b9,c9,d9,e9,f9,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk10(x,d1,d2,s10,a10,b10,c10,d10,e10,f10,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk11(x,d1,d2,s11,a11,b11,c11,d11,e11,f11,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0) 
       CALL silk12(x,d1,d2,s12,a12,b12,c12,d12,e12,f12,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk13(x,d1,d2,s13,a13,b13,c13,d13,e13,f13,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk14(x,d1,d2,s14,a14,b14,c14,d14,e14,f14,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk15(x,d1,d2,s15,a15,b15,c15,d15,e15,f15,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk16(x,d1,d2,s16,a16,b16,c16,d16,e16,f16,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0) 
       fx=fx1+fx2+fx3+fx4+fx5+fx6+fx7+fx8+fx9+fx10+fx11+fx12+fx13+fx14+fx15+fx16
 10     continue
        st=x
        exit
        else
        aa=x
           endif
        else
        if(fx.lt.f)then
           zd=aa
           zx=x
           do until (abs((fx-f).lt.0.1))
            If ((abs(zd- zx) .lt. 0.00001)) Exit 
           if(fx.lt.f)then
               zx=x
               else
               zd=x
           endif
           x=(zd+zx)/2
           CALL silk1(x,d1,d2,s1,a1,b1,c1,d1,e1,f1,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk2(x,d1,d2,s2,a2,b2,c2,d2,e2,f2,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk3(x,d1,d2,s3,a3,b3,c3,d3,e3,f3,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0) 
       CALL silk4(x,d1,d2,s4,a4,b4,c4,d4,e4,f4,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk5(x,d1,d2,s5,a5,b5,c5,d5,e5,f5,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk6(x,d1,d2,s6,a6,b6,c6,d6,e6,f6,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk7(x,d1,d2,s7,a7,b7,c7,d7,e7,f7,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk8(x,d1,d2,s8,a8,b8,c8,d8,e8,f8,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0) 
       CALL silk9(x,d1,d2,s9,a9,b9,c9,d9,e9,f9,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk10(x,d1,d2,s10,a10,b10,c10,d10,e10,f10,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk11(x,d1,d2,s11,a11,b11,c11,d11,e11,f11,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0) 
       CALL silk12(x,d1,d2,s12,a12,b12,c12,d12,e12,f12,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk13(x,d1,d2,s13,a13,b13,c13,d13,e13,f13,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)   
       CALL silk14(x,d1,d2,s14,a14,b14,c14,d14,e14,f14,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk15(x,d1,d2,s15,a15,b15,c15,d15,e15,f15,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0)
       CALL silk16(x,d1,d2,s16,a16,b16,c16,d16,e16,f16,pp1,pp2,aa1,aa2,bb1,bb2,cc1,cc2,dd1,dd2,k5,k1,k2,k3,k4,f1,fx1,L0) 
       fx=fx1+fx2+fx3+fx4+fx5+fx6+fx7+fx8+fx9+fx10+fx11+fx12+fx13+fx14+fx15+fx16
 20     continue
        st=x
        exit
        else
        aa=x
        endif
       endif
200     continue
100     continue       
         end
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

13

帖子

5

主题

0

精华

入门

F 币
62 元
贡献
40 点
沙发
 楼主| 发表于 2016-9-29 20:49:08 | 只看该作者
Compiling .\zuhe2.f90
.\zuhe2.f90:4.11:

      real
           1
Error: Invalid character in name at (1)
.\zuhe2.f90:79.11:

           do 10 until (abs((fx-f).lt.0.1))
           1
Error: Unclassifiable statement at (1)
.\zuhe2.f90:86.22:

           x=(zd+zx)/2
                      1
.\zuhe2.f90:56.25:

      do 200 x=st,et,step
                         2
Error: Variable 'x' at (1) cannot be redefined inside loop beginning at (2)
.\zuhe2.f90:114.11:

           do 20 until (abs((fx-f).lt.0.1))
           1
Error: Unclassifiable statement at (1)
.\zuhe2.f90:121.22:

           x=(zd+zx)/2
                      1
.\zuhe2.f90:56.25:

      do 200 x=st,et,step
                         2
Error: Variable 'x' at (1) cannot be redefined inside loop beginning at (2)
.\zuhe2.f90:15.20:

      k=floor(MOD(i,1.0),(1.0/4.0))+1
                    1
Error: 'a' and 'p' arguments of 'mod' intrinsic at (1) must have the same type
.\zuhe2.f90:16.17:

      fdd=(floor(i,1))*fd+fd
                 1
Error: 'a' argument of 'floor' intrinsic at (1) must be REAL
.\zuhe2.f90:29.16:

      if((floor(i,(1/4))+1).lt.9)then
                1
Error: 'a' argument of 'floor' intrinsic at (1) must be REAL
.\zuhe2.f90:30.16:

       k5=floor(i,(1/4))+1
                1
Error: 'a' argument of 'floor' intrinsic at (1) must be REAL
.\zuhe2.f90:32.16:

       k5=floor(mod(i,1),(1/4))+5
                1
Error: 'a' argument of 'floor' intrinsic at (1) must be REAL
.\zuhe2.f90:56.12:

      do 200 x=st,et,step
            1
Error: Deleted feature: Loop variable at (1) must be integer
.\zuhe2.f90:14.21:

      do 100  i=0,30,0.025
                     1
Error: Deleted feature: Step expression in DO loop at (1) must be integer
Error(E42): Last command making (build\zuhe2.o) returned a bad status
Error(E02): Make execution terminated

* Failed *
这是错误提示

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

板凳
发表于 2016-9-29 21:10:03 | 只看该作者
聂彪66 发表于 2016-9-29 20:49
Compiling .\zuhe2.f90
.\zuhe2.f90:4.11:

对照理论公式或者推导,用F90重写吧,这类古董级史前Fortran 代码就甭留恋了,火候到位的话,代码行数可以减小一个数量级

13

帖子

5

主题

0

精华

入门

F 币
62 元
贡献
40 点
地板
 楼主| 发表于 2016-9-29 21:16:52 | 只看该作者
pasuka 发表于 2016-9-29 21:10
对照理论公式或者推导,用F90重写吧,这类古董级史前Fortran 代码就甭留恋了,火候到位的话,代码行数可 ...

大神,小的刚学的,实在不会啊,而且老师要求的急,大神能不能帮忙改改,而且f90也没有看过,图书馆的书全是f77的。

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1642 元
贡献
709 点

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

5#
发表于 2016-9-30 10:37:06 | 只看该作者
这代码的问题:
1. 太古老了。until 这种用法,我这里没有一个编译器支持的。fortran 只有 do while 没有 do until ,我也不知道应该如何修改它。
2. 错误太多,根本没有办法修改或运行。比如说
  a. do 100  i=0.0,30.0,0.025 do 循环的循环变量 i 应该是 integer,如果用 real 当做循环变量,后果可能会非常的严重。
  b. f=MOD(i,1/4)*fdd*4/1 既然 i 是 real 类型,那么对于 mod 函数来说,两个参数的类型必须一致。所以 1/4 也必须是 real 类型才可以。
  c.  floor(MOD(i,1.0),0.25) 这里的 floor 函数,第二个参数是 0.25!!!它表示 kind 值啊,只能是整数,哪个编译器支持 kind 为 0.25 的数据??
  d . 1/4 = 0 !!!! 这很可怕。程序代码里到处都是 1/4,而结果却是 0 ,我相信这代码就算运行了,结果也肯定与作者的想法相去甚远。
3. 没有用 implicit none
4. 一大堆 d1,d2,s4,a4,b4,c4,d4,e4,f4 这种变量,为什么不用数组?
5. 一大堆 silk1 ,silk2,silk3.....silk16 这种子程序,真的需要这么多过程?这些过程能否统一?如果不能,为何不取更有意义的名称?

13

帖子

5

主题

0

精华

入门

F 币
62 元
贡献
40 点
6#
 楼主| 发表于 2016-9-30 10:52:39 | 只看该作者
fcode 发表于 2016-9-30 10:37
这代码的问题:
1. 太古老了。until 这种用法,我这里没有一个编译器支持的。fortran 只有 do while 没有 d ...

大神的回答就是专业,我是刚刚学的,不是很懂,望大神谅解,b,c,d,,我度理解了,但是a 就不知道了,那i要实数怎么办呢

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

7#
发表于 2016-9-30 11:01:29 | 只看该作者
聂彪66 发表于 2016-9-29 21:16
大神,小的刚学的,实在不会啊,而且老师要求的急,大神能不能帮忙改改,而且f90也没有看过,图书馆的书 ...

跟着这样不负责任的所谓“导师”读研,lz的苦日子还在后头哩

13

帖子

5

主题

0

精华

入门

F 币
62 元
贡献
40 点
8#
 楼主| 发表于 2016-9-30 11:11:05 | 只看该作者
pasuka 发表于 2016-9-30 11:01
跟着这样不负责任的所谓“导师”读研,lz的苦日子还在后头哩

额。不是了,我不是专业的,老师就是让算一个东西用到这个,我肯定要学咯,开始肯定度不懂,跟导师没关系吧,总之谢了啊

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

9#
发表于 2016-10-2 09:00:38 | 只看该作者
聂彪66 发表于 2016-9-30 11:11
额。不是了,我不是专业的,老师就是让算一个东西用到这个,我肯定要学咯,开始肯定度不懂,跟导师没关系 ...

这样的老师随手扔给学生一个自己都很多年不用更新维护的旧代码,使用文档、理论手册一概没有,也不能亲自指导学生编译调试,这样不负责任当然能撇清一切关系喽。。。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-26 12:40

Powered by Tencent X3.4

© 2013-2024 Tencent

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