我想知道以下FORTRAN 77代码的作用

时间:2009-06-24 23:14:53

标签: fortran interpolation fortran77

在.f文件中有代码执行此操作:

real Bob, avar
...
avar = Bob( 8.3 )
...

鲍勃似乎是一个函数,但它在文件的开头被声明为真实的。

然后有一个.d文件,它引用了Bob。另外我知道avar持有一个出现的值是插值的,问题是插值并不总是正确的。

Bob    John      35
-17.     -16.     -15.     -14.     -13.     -12.     -11.     -10.     -9.      -8.  
-7.      -6.      -5.      -4.      -3.      -2.      -1.       0.       1.       2.5  
 3.       4.       5.       6.5      7.       8.       9.       10.      11.      12.  
 13.      14.      15.      16.      17.  
 0.001    0.001    0.041    0.098    0.155    0.213    0.27     0.327    0.384    0.441   
 0.499    0.556    0.613    0.670    0.728    0.785    0.844    0.904    0.965    1.058   
 1.089    1.152    1.216    1.314    1.347    1.413    1.479    1.543    1.609    1.670   
 1.733    1.799    1.860    1.925    1.937 

这是所有遗留代码。我没有写。我正在努力解决它。我的问题包括以下内容:

  

这是做什么以及如何做?什么是.d文件?

我认为它试图进行插值,但我认为你不能用FORTRAN 77做到这一点(以这种方式)。

4 个答案:

答案 0 :(得分:1)

看起来Bob是一个函数,它将传递给它的真实值8.3,并且返回存储在avar中的真实值。但是,这些都可以从您发布的代码中收集到。

答案 1 :(得分:1)

看起来.d文件包含一些几乎是线性的数据。看起来像实验数据。 35是您拥有的点数,然后是x,然后是y。

鲍勃和约翰似乎就像某种字符串标记或标识符。它们可能在代码中的某处用于决定如何处理数据,或者它们代表什么类型的数据。

鲍勃似乎是一个功能。请注意,您有两种声明功能的方法。

real function foo(a)
    implicit none
    real, intent(in) :: a
    foo = 3.0+a
end function

program test
   implicit none
   real foo, bar, a, b
   bar(b) = b+5.0

   a=foo(5.3)
   print *, a, bar(2.3)
end program

一个是显式情况(foo),通过赋值给函数本身的变量返回值。 另一种情况是“隐含”(不知道正式名称),见吧。您将其声明为“数组”,然后表达它应该如何表现。看得很少,但这是一个非常紧凑的写作。

答案 2 :(得分:0)

很抱歉这个混乱。答案是系统使用专有的宏c来进行插值的FORTRAN程序。这发生在make文件中。我通过查看一些不起眼的文档找到了。感谢大家的投入。再次抱歉,它的简洁性。我并不想变得困难。用我所看到的东西让我感到困惑。有时很难使用从不同公司购买的30年遗留代码。我是FORTRAN的新手,所以我觉得我没有看到一些我应该看到的东西,就像我不熟悉的语言特征一样。我觉得很愚蠢。它确实让我深入挖掘。学过的知识。

答案 3 :(得分:0)

.d文件可能是一些使用.dat的方法。他懒得输入两个额外的角色。旧时代的程序员就是这样。

看起来你在图形上有一个简单的插值函数,其中“Bob”是从-17到+17的X轴,“John”是与Bob点对应的Y方向的一组值。 (不知道35是什么,因为只显示了32分。)

代码询问:对于X轴上的值,8.3,Y方向上的内插值是多少。在线性形式中,它将返回1.413和1.479之差的.3倍。它可能是一个更高阶的插值器,但你没有显示代码,所以我假设最简单。