Pergunta

Em um arquivo .f existe código que faz isso:

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

Bob parece ser uma função, mas é declarado no início do arquivo como um real.

Depois, há um arquivo .d que tem uma referência a Bob. Também sei avar detém um valor que aparece é interpolada, o problema é a interpolação não é sempre certo.

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 

Este é todo o código legado. Eu não escrevi isso. Eu estou tentando corrigi-lo. A minha pergunta é composto pelo seguinte:

O que é esta fazendo e como? O que é um arquivo .d?

Eu acho que ele está tentando interpolar mas eu não acho que você poderia fazer isso (desta forma) com Fortran 77.

Foi útil?

Solução 3

Desculpe pela confusão. A resposta é o sistema está usando um proprietário c macro para o programa Fortran que faz interpolação. Isso acontece no arquivo make. Eu encontrei olhando para alguma documentação obscura. Obrigado a todos por sua entrada. Desculpe novamente para a concisão dele. Eu não estava tentando ser difícil. Ele foi confuso para mim com o que eu vi bem. Às vezes é difícil de trabalho com código legado de 30 anos comprou de uma empresa diferente. Eu sou novo para Fortran, então eu pensei que eu não estava vendo algo que eu deveria ter sido visto como um recurso de linguagem que eu não estava familiarizado com. Eu me sinto tolo. Ele fez levam-me a cavar mais fundo. Lição aprendida.

Outras dicas

Parece que Bob é uma função, que está recebendo o valor real 8.3 passado para ele, e é returniung um real que é armazenado em avar. Mas isso é tudo o que pode ser adquirida a partir do código que você postou.

Parece que o arquivo .d contém alguns dados que é quase linear. Parece com dados experimentais. 35 é o número de pontos que você tem, então você tem a x, e então o y.

Bob e John parece ser como uma espécie de marcadores de cordas, ou identificadores. Eles provavelmente são usados ??em algum lugar no código para decidir o que fazer com os dados, ou que tipo de dados que representam.

Bob parece ser uma função. Por favor, note que você tem duas maneiras de declarar uma função.

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

Um é o caso explícita (foo), onde você devolver o valor por atribuir à variável nomeada como a própria função. O outro caso é "implícito" (não sei o nome formal), consulte bar. Você declará-lo como um "array" e depois expressar como ele deve se comportar. Visto que muito raramente, mas é uma escrita muito compacto.

Um arquivo .d é provavelmente o caminho de alguma droga de abreviating .dat. Ele estava com preguiça de digitar os dois personagens extras. programadores velhos tempos eram assim.

Parece que você tem uma função de interpolação simples em um gráfico onde "Bob" é o eixo X abrangendo desde -17 a +17 e "John" é um conjunto de valores no sentido Y correspondente aos pontos Bob . (Não sei o que o 35 é para, uma vez que apenas 32 pontos são mostrados.)

O código está pedindo: para um valor no eixo X, 8,3, qual seria o valor interpolado na direção Y. Na forma linear ele retornaria .3 vezes a diferença entre 1.413 e 1.479. Poderia ser um interpolador de ordem superior, mas você não mostrar o código, então eu assumo o mais simples.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top