Domanda

In un file .f c'è un codice che lo fa:

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

Bob sembra essere una funzione ma è dichiarato all'inizio del file come reale.

Quindi c'è un file .d che ha un riferimento a Bob. Inoltre so che avar ha un valore che appare interpolato, il problema è che l'interpolazione non è sempre corretta.

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 

Questo è tutto il codice legacy. Non l'ho scritto Sto cercando di risolverlo. La mia domanda è la seguente:

  

Cosa sta facendo e come? Che cos'è un file .d?

Penso che stia cercando di interpolare ma non pensavo che potessi farlo (in questo modo) con FORTRAN 77.

È stato utile?

Soluzione 3

Ci scusiamo per la confusione. La risposta è che il sistema sta usando una macro proprietaria da c al programma FORTRAN che esegue l'interpolazione. Questo succede nel file make. Ho trovato guardando una documentazione oscura. Grazie a tutti per il loro contributo. Scusami ancora per la sua morbidezza. Non stavo cercando di essere difficile. Mi ha confuso anche quello che ho visto. A volte è difficile lavorare con un codice legacy di 30 anni acquistato da una società diversa. Sono nuovo di FORTRAN, quindi pensavo di non vedere qualcosa che avrei dovuto vedere come una caratteristica linguistica con cui non avevo familiarità. Mi sento sciocco. Mi ha portato a scavare più a fondo. Lezione imparata.

Altri suggerimenti

Sembra che Bob sia una funzione, che sta ottenendo il valore reale 8.3 passato ad essa, e che viene restituito un reale che è memorizzato in Avar. Ma questo è tutto ciò che può essere ricavato dal codice che hai pubblicato.

Sembra che il file .d contenga alcuni dati quasi lineari. Sembra dati sperimentali. 35 è il numero di punti che hai, quindi hai la x e quindi la y.

Bob e John sembrano essere una sorta di marcatori di stringhe o identificatori. Probabilmente vengono utilizzati da qualche parte nel codice per decidere cosa fare dei dati o che tipo di dati rappresentano.

Bob sembra una funzione. Si noti che esistono due modi per dichiarare una funzione.

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

Uno è il caso esplicito (pippo), in cui si restituisce il valore assegnando alla variabile denominata come funzione stessa. L'altro caso è "implicito" (non conosco il nome formale), vedi barra. Lo dichiari come un "array" e quindi esprimere come dovrebbe comportarsi. L'ho visto molto raramente, ma è una scrittura molto compatta.

Un file .d è probabilmente un modo stupido di abbreviare .dat. Era troppo pigro per scrivere i due personaggi extra. I programmatori dei vecchi tempi erano così.

Sembra che tu abbia una semplice funzione di interpolazione su un grafico in cui " Bob " è l'asse X che va da -17 a +17 e "John" è un insieme di valori nella direzione Y corrispondente ai punti Bob. (Non so a cosa serva il 35, dato che sono mostrati solo 32 punti.)

Il codice chiede: per un valore sull'asse X, 8.3, quale sarebbe il valore interpolato nella direzione Y. Nella forma lineare restituirebbe 3 volte la differenza tra 1.413 e 1.479. Potrebbe essere un interpolatore di ordine superiore ma non mostri il codice, quindi presumo il più semplice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top