2009-06-24 2 views
1

В файле .f есть код, который делает это:Я хотел бы знать, что следующий FORTRAN 77 делает код

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.

+1

Ваш вопрос очень неясен. Боб - функция? почему вы говорите, что делаете это, но тогда вы не знаете, что он делает? Где код, о котором вы говорите, в заголовке вопроса? Какова связь с файлом .d? –

+1

Пожалуйста, напишите больше, реальный код, без ... материала. – 2009-06-24 23:19:32

+0

Хорошо, что это весь код, который имеет значение. Остальное не имеет ничего общего с этим. – Paul

ответ

0

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

+1

Не должен ли быть какой-то интерфейс вызова в программе fortran, тогда? – Rook

+1

Человек, как дикий. Мне это нравится. Я начинаю завидовать тебе. :-) – Nosredna

+0

Код вызова создается файлом make, который вызывает программу C. Он создал функцию Bob_(). Кажется, пока этого не найти. :) Сам код запускается как часть другой системы. Существует много CRAP, которые мне еще предстоит выяснить. Да, Носренда это весело :). – Paul

1

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

+0

Что такое .d-файл? – Paul

+0

Боб не объявлен с использованием синтаксиса, как реальная функция bob (что-то) – Paul

+0

Файл с расширением .d? Я бы предположил, что это файл данных. F77 не требует или не ожидает каких-либо конкретных расширений файлов. – 2009-06-25 00:17:10

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

+0

Я согласен со всеми, за исключением того, что в коде это не так. Я растерялся ...Я буду копать и возвращаться. – Paul

+1

Вы абсолютно уверены, что файл .d был создан через эту программу? люди оставляют много мусора. –

+0

Я нашел причину ... спасибо ... см. Мой ответ на вопрос. Я чувствую себя глупо. – Paul

0

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

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

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