Я хотел бы знать, что делает следующий код FORTRAN 77

StackOverflow https://stackoverflow.com/questions/1041453

Вопрос

В .f файле есть код, который делает это:

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

Боб выглядит как функция, но в начале файла он объявлен как реальный.

Затем есть файл .d, который имеет ссылку на Боба. Также я знаю, что авар содержит значение, которое, по-видимому, интерполируется, проблема в том, что интерполяция не всегда верна.

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.

Это было полезно?

Решение 3

Извините за путаницу. Ответ заключается в том, что система использует проприетарную макрос c для программы FORTRAN, которая выполняет интерполяцию. Это происходит в файле make. Я нашел, посмотрев некоторые неясные документы. Спасибо всем за их вклад. Извините снова за краткость этого. Я не пытался быть трудным. Меня смущало то, что я видел. Иногда бывает трудно работать с 30-летним устаревшим кодом, купленным у другой компании. Я новичок в Фортране, поэтому я подумал, что не вижу то, что мне следовало бы видеть, как языковую функцию, с которой я не был знаком. Я чувствую себя глупо Это заставило меня копать глубже. Урок выучен.

Другие советы

Похоже, что Боб - это функция, которая получает реальное значение, переданное ей 8.3, и возвращает реальное значение, которое хранится в avar. Но это все, что можно почерпнуть из кода, который вы опубликовали.

Похоже, что файл .d содержит некоторые данные, которые почти линейны. Похоже на экспериментальные данные. 35 - это количество очков, которое у вас есть, затем у вас есть х, а затем у.

Боб и Джон похожи на какие-то строковые маркеры или идентификаторы. Они, вероятно, используются где-то в коде, чтобы решить, что делать с данными или какие данные они представляют.

Боб выглядит как функция. Обратите внимание, что у вас есть два способа объявления функции.

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), где вы возвращаете значение, присваивая переменную, названную самой функцией. Другой случай - «неявный» (не знаю формальное имя), см. бар. Вы объявляете это как " массив " а затем выразить, как оно должно себя вести. Видел это очень редко, но это очень компактный текст.

.d-файл - это, вероятно, какой-то допинг-способ аббревиатуры .dat. Он был слишком ленив, чтобы набрать два лишних символа. Старые программисты были такими.

Похоже, у вас есть простая интерполяционная функция на графике, где " Bob " ось X простирается от -17 до +17 и "Джон"; представляет собой набор значений в направлении Y, соответствующих точкам Боба. (Не знаю, для чего эти 35, поскольку показаны только 32 балла.)

Код запрашивает: для значения по оси X, 8,3, какое будет интерполированное значение в направлении Y. В линейной форме он вернул бы .3 раза разницу между 1.413 и 1.479. Это может быть интерполятор высшего порядка, но вы не показываете код, поэтому я предполагаю самый простой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top