| 最近在调用IMSL函数库的曲面拟合问题,其代码中用到了指针变量作为结构体的一个成员变量随着结构体一起定义作为形参在函数中调用,我写了一个类似的代码,有幸QQ群里的高人指点了下,有几个地方还不明白:1、Type Api中,Real(Kind=8),Pointer::Bus(:)为什么要这样定义?能否定义为Real(Kind=8),Pointer::Bus(10)? 2、下述代码运行是OK的,但是逐步跟踪时,在函数Hello外部,Tiger%Bus是有值的,但是到了函数内部,Tiger%Bus 就变成了 Undefined Pointer/Array,现实没有进行内存分配,这是什么原因,但是计算结果又是对的。
 
 
 [Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode Module Pointer_Mod
          Implicit None
          Type Api
          Integer::Id
          Real(Kind=8),Pointer::Bus(:)
          End Type Api
          Contains
          Subroutine Hello(Moon,Tiger,Fish)
          Integer,Intent(In)::Moon
          Type(Api),Intent(In)::Tiger
          Real(Kind=8),Intent(Out)::Fish
          Integer::I
          Fish=0.d0
          If(Moon==1)Then
          Do I=1,10,1
          Fish=Fish+Tiger%Bus(I)
          End Do 
          Else if(Moon==2)Then
          Do I=1,10,1
          Fish=Fish-Tiger%Bus(I)
          End Do 
          End If   !!
          End Subroutine        
End Module    
    program Test_Pointer
    Use Pointer_Mod
    implicit none
    Integer::Moon,I
    Type(Api)::Tiger
    Real(Kind=8)::Fish
    Moon=1
    Tiger%Id=10
    Allocate(Tiger%Bus(10))
    Do I=1,10,1
    Tiger%Bus(I)=I+1.d0
    End Do    
    Call Hello(Moon,Tiger,Fish)
    Write(*,*)Fish
    Pause
    end program Test_PointerPs:
 3、还有一个问题,如果该帖子有幸被堂主见到,在前面的贴中,关于IMSL的Surface_Fitting和Surface_Values两个函数,堂主都进行了接口的重新编写,可以实现IMSL库中对应例子的调用,但是有如下的扩展问题,对于Surface_Values的接口,当时堂主编写如下:
 
 
 [Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode interface SURFACE_VALUES    
    function DV_SURFACE_VALUES(DERIVATIVE, VARIABLESX, VARIABLESY, KNOTSX, KNOTSY, COEFFS)
      import
      implicit none
      integer :: DERIVATIVE(2)
      real(kind(1d0)) :: VARIABLESX(:), VARIABLESY(:)
      type (d_spline_knots) :: knotsx, knotsy
      real(kind(1d0)) :: COEFFS(:,:)
      real(kind(1d0)) :: DV_SURFACE_VALUES(size(VARIABLESX),size(VARIABLESY))
    end function DV_SURFACE_VALUES
  end interface SURFACE_VALUES
 请问,上面的函数名字为什么要叫DV_SURFACE_VALUES,而改成D_SURFACE_VALUES时,调用就会报错?其次,VARIABLESX, VARIABLESY以及函数本身的返回值一定要是一维数组类型吗?能否使单纯的Real(Kind(1d0))类型?如果可以的话,是否可以做一个函数重载,再写一个function DV_SURFACE_VALUES(DERIVATIVE, VARIABLESX, VARIABLESY, KNOTSX, KNOTSY, COEFFS),其中对应的返回值与型参的是浮点型呢?
 4、本人愚钝,堂主能否伸出您那充满光芒的双手再将另外一个IMSL库函数 Surface_Constraints也一并编写一个接口,我写了半天,调用老是不成功,不胜感激!跪谢!
 
 
 
 |