回 帖 发 新 帖 刷新版面

主题:[讨论]!!紧急求助:IVF数组传递-类型不匹配

各位好,这几天在下为一事烦的很。
在IVF中,我调用一个子函数,主要功能是传递数组做运算。
结果我明明把数组的大小,还有类型都申明的一致,但是编译却出问题。实在不知道如何处理。请大家指点在下。
在此,贴出关键代码。
module  data_module
    implicit double precision (a-h,o-z) !默认双精度
    real(8),parameter :: pi = 3.14159265358979323846d0
          real(8),parameter :: epsilon = 1.0/4/pi/8.9880/1.0d9 !误差
    real(8),parameter :: mu0 = 4.0*pi*1.0d-7
          integer,parameter :: nns = 20
          integer,parameter :: nf=40
end  module  data_module
subroutine Jacobian(rho,h,layer,fre,Arho,J1)
  use data_module,only : nns,nf
  implicit none
  integer::layer,i,j,n
  real(8)::Arho(nf),fre(nf)
  real(8),dimension(nns)::rho,h,tran
  real(8)::dif,fa,a,frho
  real(8)::J1(nf,2*layer-1)
     do n = 1,layer
        do j = 1,layer
             do i = 1,nf
                tran = rho
                dif = 0.1*rho(j)
                tran(j) = tran(j) + dif
                fa = fre(i)
                  call Forward(tran,h,layer,fa,frho)(the type of the actual argument differs from the type of dummy argument.  (fa))
                a = Arho(i)
                J1(i,n) = 10*(frho/a - 1)
             end do
         end do
     end do
  
     do n = layer+1,2*layer-1
         do j = 1,layer
             do i = 1,nf
                tran = h
                dif = 0.1*h(j)
                tran(j) = tran(j) + dif
                fa = fre(i)
                  call Forward(rho,tran,layer,fa,frho)  
                a = Arho(i)
                J1(i,n) = 10*(frho/a - 1)
             end do
         end do
     end do  
end subroutine Jacobian
subroutine forward(R1,ho,np,fj,rhok)
   use  data_module
    implicit real(8)(a-h,o-z)
    real(8)::R1(nns),ho(nns)
    real(8)::rhok,fj
    complex(8)  ep1,ep2,ep3,er1,er2,er3,hr1,hr2,hp1
    complex(8)  rk,ex,er,ep,hr,hp,hy
    complex(8)  er_add,ep_add,hr_add,hp_add
    complex(8)  k2(nns),ter1,tep2,tep3
    complex(8) c1,e1,e2,e3,ex90,ex0,h1,h2,hy90,hy0
    complex(8),external:: fe1,fe2,fe3,fh1
    complex(8),external::  fep1,fep2,fep3,fer2,fhr1,fhr2
    character fname *30
    common      /kk/k2
    common      /pr/rho(nns)
    common      /ps/h(nns)
    common      /pp/ns
  dX=1.0
  rho = R1
  h = ho
  ns = np
  ab = 1000.0
  amp = 1.0
  xo = -1*ab/2.0
  yo = 0.0
  xp = -300.0
  yp = 7000.0
   wj = 2*pi*fj
   k2 = -dcmplx(0,1.0)*wj*mu0/rho
  ex = dcmplx(0,0)
  hy = dcmplx(0,0)
  r = dsqrt((yp-yo)**2+(xp-xo)**2)
  fai = cos((xp-xo)/r)
  c1 = dcmplx(0,1.0)*wj*mu0*amp*dx/2.0/pi
 。。。
  rhok = cdabs(ex/hy)**2/wj/mu0
   end subroutine forward
这是最主要的错误了,限于篇幅,主程序就不给了,太长了。关键是在CVF中运行是对的。昏~
另外,A non-optional actual argument must be present when invoking a procedure with an explicit interface.是什么意思啊?non-optional不太懂,请指教。祝大家周末愉快!
注:那是第一个错误。先说这个错误。另外,那一个子程序中,下面有类似的代码页有错误就不标明了。附件是完整代码!!

回复列表 (共9个回复)

沙发

编程没有好习惯,吃些苦头难免。自己首先把 警告信息 逐个“消掉”再说。

板凳

asymptotic,你好,我贴出的代码的部分的。IVF上和CVF上都没有Warnings,只有Errors。而且在CVF中都没有错误,但是结果是错的。显然是有问题的,但是鄙人不清楚。另,本人的编程习惯是不怎么地,正在改正。全部代码请见附件,谢谢您的回复。之前好像没传上,现在已经传上了。

3 楼

这是 IVF11.1 Compiler 给出的部分 Warning 信息,我无法帮你一个一个改正。

>C:\Documents and Settings\Administrator\My Documents\TemporaryProgram\Intel  Visual Fortran Temporary Program\005.f90(18): warning #5112: Extension to FORTRAN-90: tab formatting
1>C:\Documents and Settings\Administrator\My Documents\TemporaryProgram\Intel  Visual Fortran Temporary Program\005.f90(86): warning #7356: The PAUSE statement has been deleted in Fortran 2003.
1>C:\Documents and Settings\Administrator\My Documents\TemporaryProgram\Intel  Visual Fortran Temporary Program\005.f90(148): warning #5112: Extension to FORTRAN-90: tab formatting
1>C:\Documents and Settings\Administrator\My Documents\TemporaryProgram\Intel  Visual Fortran Temporary Program\005.f90(163): warning #6717: This name has not been given an explicit type.   [DX]
1>C:\Documents and Settings\Administrator\My Documents\TemporaryProgram\Intel  Visual Fortran Temporary Program\005.f90(164): warning #6717: This name has not been given an explicit type.   [RHO]
1>C:\Documents and Settings\Administrator\My Documents\TemporaryProgram\Intel  Visual Fortran Temporary Program\005.f90(165): warning #6717: This name has not been given an explicit type.   [H]
1>C:\Documents and Settings\Administrator\My Documents\TemporaryProgram\Intel  Visual Fortran Temporary Program\005.f90(166): warning #6717: This name has not been given an explicit type.   [NS]
1>C:\Documents and Settings\Administrator\My Documents\TemporaryProgram\Intel  Visual Fortran Temporary Program\005.f90(166): warning #6717: This name has not been given an explicit type.   [NP]
1>C:\Documents and Settings\Administrator\My Documents\TemporaryProgram\Intel  Visual Fortran Temporary Program\005.f90(167): warning #6717: This name has not been given an explicit type.   [AB]
1>C:\Documents and Settings\Administrator\My Documents\TemporaryProgram\Intel  Visual Fortran Temporary Program\005.f90(168): warning #6717: This name has not been given an explicit type.   [AMP]
1>C:\Documents and Settings\Administrator\My Documents\TemporaryProgram\Intel  Visual Fortran Temporary Program\005.f90(169): warning #6717: This name has not been given an explicit type.   [XO]
1>C:\Documents and Settings\Administrator\My Documents\TemporaryProgram\Intel  Visual Fortran Temporary Program\005.f90(170): warning #6717: This name has not been given an explicit type.   [YO]
1>C:\Documents and Settings\Administrator\My Documents\TemporaryProgram\Intel  Visual Fortran Temporary Program\005.f90(171): warning #6717: This name has not been given an explicit type.   [XP]
1>C:\Documents and Settings\Administrator\My Documents\TemporaryProgram\Intel  Visual Fortran Temporary Program\005.f90(172): warning #6717: This name has not been given an explicit type.   [YP]
1>C:\Documents and Settings\Administrator\My Documents\TemporaryProgram\Intel  Visual Fortran Temporary Program\005.f90(181): warning #6717: This name has not been given an explicit type.   [WJ]

4 楼

既然知道是 类型 不匹配,还用 Implicit  real(8)(a-h,o-z)
语句?? 改为 Implicit none,最好把 Common 语句也改掉。

5 楼

我的是IVF11.0.0.72-ia32,不支持for2003的语法吧?你的已经支持了!现在我把Forward函数中的变量重新进行了声明,可是依然有问题。
问题出在Jacobian矩阵调用Forward中的实虚参不对应!怎么回事呢?Jacobian中可没有用默认变量呢。而且问题和Common无关吧?因为所有的参数传递都出问题了。我觉得是不是语法我记错了?但是我翻书,书上都是这样讲的啊!!请帮忙解惑,不胜感激!
Ps:那么多Warings是不用你改,可是你能否改一两让他不出错呢?这样就找到解决办法啦。谢谢~

6 楼

我会一直等着大家,看有没有什么好的办法。谢谢~~

7 楼

你的代码并没有用到f2003语法. warning虽然没有error强, 但一个存在warning的代码能用吗?(我只知道少数情况没问题.) 看文件名和部分内容, 好像我在某群里帮忙看过代码的一个群友的.
如果你是调用别人的代码还是用module封装好再调用吧.

8 楼

你好,yeg001,是的,是同学的代码。谢谢提醒,我试试这个啊!有问题再问你!

9 楼


这个问题很早已经解决了。现在回帖是了结此贴。其实是个很小的问题。不知道为什么,IVF中,至少我的是这样的。有时候传递数组a(N)时,必须要传一个元素的地址,即:  a(1),而不是a!传a的话就会出错!!
这就是问题所在。

我来回复

您尚未登录,请登录后再回复。点此登录或注册