1

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

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

Bob 看起来是一个函数,但它在文件的开头被声明为一个实数。

然后是一个引用 Bob 的 .d 文件。我也知道 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

4 回答 4

1

看起来 Bob 是一个函数,它获取传递给它的实数 8.3,并返回一个存储在 avar 中的实数。但这就是您发布的代码中可以收集到的全部内容。

于 2009-06-25T00:10:26.657 回答
1

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

Bob 和 John 看起来像是某种字符串标记或标识符。它们可能在代码中的某处用于决定如何处理数据,或者它们代表什么类型的数据。

Bob 似乎是一个函数。请注意,您有两种声明函数的方法。

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),您可以通过将值分配给名为函数本身的变量来返回值。另一种情况是“隐式”(不知道正式名称),见栏。您将其声明为“数组”,然后表达它的行为方式。很少看到,但是写的很紧凑。

于 2009-06-25T00:45:00.193 回答
0

对困惑感到抱歉。答案是系统使用专有的宏 c 到 FORTRAN 程序进行插值。这发生在 make 文件中。我通过查看一些晦涩难懂的文档发现。感谢大家的意见。再次为它的简洁性感到抱歉。我并没有试图变得困难。我所看到的也让我感到困惑。有时很难使用从另一家公司购买的 30 年历史的遗留代码。我是 FORTRAN 的新手,所以我认为我没有看到我应该看到的东西,比如我不熟悉的语言功能。我觉得很愚蠢。它确实让我更深入地挖掘。学过的知识。

于 2009-06-25T01:01:58.643 回答
0

.d 文件可能是某种涂料的缩写 .dat 的方式。他懒得打两个多余的字。旧时的程序员就是这样。

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

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

于 2009-06-30T19:33:55.767 回答