Frage

In einer .f- Datei gibt es Code, der dies tut:

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

Bob scheint eine Funktion zu sein, aber es ist am Anfang der Datei als echtes erklärt.

Dann gibt es eine .d-Datei, die einen Verweis auf Bob hat. Auch ich weiß avar Wert hält, der interpoliert wird, Das Problem ist die Interpolation nicht immer richtig ist.

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 

Das ist alles Legacy-Code. Ich habe es nicht geschrieben. Ich versuche, es zu beheben. Meine Frage besteht aus folgenden Komponenten:

  

Was ist das tun und wie? Was ist eine .d-Datei?

Ich denke, es versucht zu interpolieren, aber ich glaube nicht, dass Sie dies (auf diese Weise) tun könnten mit Fortran 77.

War es hilfreich?

Lösung 3

Sorry für die Verwirrung. Die Antwort ist das System ein eigenes Makro c Fortran-Programm verwendet, die Interpolation der Fall ist. Dies geschieht in der Make-Datei. Ich fand, indem ich unerfindliche Dokumentation suchen. Vielen Dank allen für ihren Beitrag. Leider wieder für die Prägnanz davon. Ich versuche, nicht schwierig zu sein. Es war verwirrend für mich mit dem, was ich auch sah. Es ist manchmal schwierig, mit 30 Jahren alten Legacy-Code arbeitet von einem anderen Unternehmen gekauft. Ich bin neu in FORTRAN so dachte ich, ich war nicht etwas, da ich wie eine Sprache-Funktion haben seit einiger Zeit erleben sollte ich nicht kannte. Ich fühle mich dumm. Es hat mich führen, tiefer zu graben. Lektion gelernt.

Andere Tipps

Es sieht aus wie Bob eine Funktion ist, dh den realen Wert 8.3 bekommen an sie übergeben und wird returniung eine echte, die in avar gespeichert ist. Aber das ist alles, was aus dem Code aufgelesen werden können, die Sie gebucht haben.

Sieht aus wie die .d-Datei einige Daten enthält, die nahezu linear ist. Sieht aus wie experimentelle Daten. 35 ist die Anzahl der Punkte, die Sie haben, dann haben Sie die x, und dann die y.

Bob und John scheint wie eine Art von String-Marker oder Bezeichner zu sein. Sie werden wahrscheinlich irgendwo im Code verwendet, um zu entscheiden, was mit den Daten zu tun, oder welche Art von Daten sie darstellen.

Bob scheint wie eine Funktion. Bitte beachten Sie, dass Sie haben zwei Möglichkeiten, eine Funktion zu deklarieren.

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

Eine davon ist der explizite Fall (foo), in dem Sie den Wert, der durch assign auf die Variable als die Funktion selbst genannt zurückzukehren. Der andere Fall ist „impliziter“ (weiß nicht den formalen Namen), Bar sehen. Sie erklären es als „Array“ und dann sagen, wie es sich verhalten soll. Gesehen ist es sehr selten, aber es ist ein sehr kompaktes Schreiben.

Eine .d-Datei ist wahrscheinlich in gewisser Weise die dope .dat abzukürzen. Er war zu faul, um die zwei zusätzlichen Zeichen einzugeben. Alte Zeit Programmierer so waren.

Es sieht aus wie Sie eine einfache Interpolation Funktion in einem Diagramm haben, wo „Bob“ die von -17 bis +17 Spanning X-Achse ist und „John“ ist ein Satz von Werten in der Y-Richtung zu dem Bob Punkten entsprechen, . (Sie wissen nicht, was die 35 ist für, da nur 32 Punkte dargestellt sind.)

Der Code wird gefragt: für einen Wert auf der X-Achse, 8,3, was der interpolierte Wert in der Y-Richtung sein würde. In der linearen Form wäre es 0,3 mal den Unterschied zwischen 1,413 und 1,479 zurück. Es könnte eine höhere Ordnung Interpolator sein, aber Sie den Code nicht zeigen, so nehme ich an der einfachste.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top