INT_CSV
Zweck:Dieses Programm liest frei formatierte Datendateien (d.h. Zahlen mit Komma oder Leerzeichen getrennt) und interpoliert Fehlwerte.
Methode:
Es wird angenommen, dass jede Variable (V) durch eine Linearkombination
von anderen Variablen (P?) dargestellt werden kann, d.h.
V= a0 + a1*P1 + a2*P2 + a3*P3 + ...Die Variablen P? werden mit der Karte PARA: bestimmt, die zu interpolierende Variablen V mit Karte INTE:
Für jede gewünschte Variable (Karte INTE:) werden die Werte von a1..a? mittels einer Eigenwertzerlegung bestimmt. Dabei werden aber nur Datenwerte innerhalb eines bestimmten Gebietes um den gesuchten Zyklus benutzt. Dieses Gebiet wird durch 1-8 Angaben der Karte Range: festgelegt. Z.B. kann dieses Gebiet +-200dbar im Druck und +-2 Grad in der Länge festgelegt werden. (Ältere Karten mit der gleichen Funktion waren die Karten STAT: und DEPT:).
Mittels der gefundenen Werte wird dann der Variablenwert berechnet. Falls der Originalwert diese Zykluses ein Fehlwert war wird dieser in der Ausgabe durch den gefundenen Wert ersetzt, ansonsten wird der Wert benutzt um die Güte der Anpassung zu berechnen. (Bisher werden wahrer Wert und berechneter Wert in eine Ausgabedatei for??? geschrieben, pro variable eine Datei).
Steuerung-KARTEN:
Wichtig sind nur die ersten 4 Buchstaben einer jeden Karte mit Gross/Klein-
schreibung. Jeder Kartenname muß mit einem : abgeschlossen werden. Zwischenraume
vor dem ersten Buchstaben/Zahl/.. werden ignoriert.
EINGabe
AUSGgabe A-Format
START ENDE
INTE D=INSTAT
DEPT RangePARA
Moden DefaultD-BereichDiff
VAR=M-AUSGABEB-multi
Info MASKZ-Be
eich
EINGabe: Variablenanzahl,Dateiname
Angabe des Namens der Eingabedatei und der Anzahl der Variablen/Zyklus. Ein Zyklus ist jedesmal eine Zeile der Eingabedatei und jeder Zyklus muß immer mindestens die angegeben Anzahl von Variablen besitzen. Die maximale Anzahl von Variablen/Zyklus ist 30, bei Angabe einer höheren Anzahl endet das Programm mit der Fehlermeldung:
stop ' zuviele Eingabevariablen'Bei Auftreten eines Lesefehler endet das Programm mit der Fehlermeldung:
stop 'Fehler beim lesen Rosettendaten'Es können bisher maximal 30000 Zyklen eingelesen werden, bei überschreiten dieser Grenze endet das Programm mit der Fehlermeldung:
stop 'Rosettenarray zu klein'Bei folgenden Angaben dieser Karte wird der Inhalt der zweiten Datei an die Daten der ersten angehängt, falls die Variablenanzahl gleich ist. Es wird dabei vorausgesetzt, dass die gleichen Variablen an der gleichen Position im Zyklus stehen. Angabe einer negativen Variablenanzahl bewirkt ein Überschreiben von schon gelesenen Daten, die aktuelle Variablenanzahl ist der Absolutwert. (Bei Anhängen von Daten beachte auch M-AUsgabe)
AUSGgabe: Dateiname
Angabe des Namens der Ausgabedatei, sie wird gleich geöffnet, davor wird gegebenfalls eine früher angegebene geschlossen.
A-Format: Text
Angabe des Format-strings (FORTRAN) zur Datenausgabe. Ausgabe sind
alles Real-zahlen, daher keine I Formate angeben. Die maximale Länge
einer Ausgabezeile darf 512 Zeichen nicht überschreiten. Anzahl der Ausgabewerte
sind gleich Eingabewerte. Standardmäßig auf (1x,30f15.3) gesetzt.
START:
Führt die Interpolation aus.
Bei i=1 wird das Resultat in die Ausgabedatei geschrieben, sonst nicht.
(Keine Angabe von i ist i=0). Bei Programmende wird aber immer die Daten
in die Ausgabedatei geschrieben. I=1 ist nur gedacht um zwischendurch Ergebnisse
abspeichern zu können.
ENDE:
Schluß. Ende der Parameterangabe, die Berechnungen werden ausgeführt
falls davor (durch Karte Start:) noch nicht ausgeführt oder falls
nach der vorherigen Interpolation Parameter geändert wurden. Das Programm
springt automatisch hierhin falls das Ende der Parameterangabe kommt (z.B.
durch ein EOF oder ein Ctrl-Z [VMS])
INTE: i1,i2,i3,i4,...
Zu interpolierende Variablen, die aber nur mit Hilfe von Originaldaten
interpoliert werden sollen (d.h. vorher interpolierte Werte werden nicht
mit berücksichtigt). Siehe aber Karte D=INterpoliert:
i1,i2,..
gibt die Position der Variable im Zyklus an. Die Anzahl der zu interpolierenden
Daten wird durch das Ende der Eingabe oder durch eine Variablenposition
<=
0 bestimmt.
D=IN:
Die Originaldaten werden mit den interpolierten Daten überschrieben.
Nachfolgende Interpolationen benutzen dann zur Interpolation diese schon
interpolierten Daten.
D=IN: oder D=IN: 0
es werden nur Daten mit Qualityflags<0 übernommen! und Daten
mit Qualityflags>0 auf -9 gesetzt (aber Quality bleibt bestehen),
D=IN: 1
es werden alle Daten übernommen (Quality bleibt bestehen)
D=IN: 2
wie 1 aber Quality wird auf 0 gesetzt.
D=IN: -1
wie 0 aber Quality wird auf 0 gesetzt
STAT: I,R-Wert
Position der Variable der Stationnummer und +- wert. Zur Interpolation
werden nur Werte mit der gleichen +- R-wert Stationsnummer benutzt. Weitere
Eingabe dieser Karte überschreiben die vorherigen Angaben. VERALTERT,
bitte die Karte Range: benutzen.
DEPT: I,R-wert,P-wert
Position der Tiefenvariable und +- Wert und %-wert. Zur Interpolation
werden nur Werte mit der gleichen +- X Tiefe benutzt. X ist dabei R-Wert+
Tiefe*P-wert. Ein P-Wert>1 wird als Angabe in Prozent aufgefaßt (und daher
durch 100 geteilt) Weitere Eingabe dieser Karte überschreiben die
vorherigen Angaben. VERALTERT, bitte die Karte Range: benutzen.
Range: I,R-wert,P-wert
Position einer Variablen und +- Wert und %-wert. Zur Interpolation
werden nur Werte benutzt wo die Variable der I'ten Position Werte gleich
der Zyklusvariablen +- X benutzt. X ist dabei R-Wert+ Zyklusvariable*P-wert.
Ein P-Wert>1 wird als Angabe in Prozent aufgefaßt (und daher durch 100
geteilt) Ist die Variable ein Fehlwert, wird angenommen sie ist im Bereich.
Weitere Eingaben dieser Karte definieren weitere Einschränkungen.
Noch nicht implementiert
Faktoren: i1,r1, i2,r2, ....
Es werden die Faktoren der Definitionsfunktion ausgeben, die für
ein bestimmtes Gebiet gelten, welches mit Range definiert wurde. Der Mittel-
punkt dieses Gebietes wird mit i1,r1, usw. festgelegt. Dabei ist i die
Variablennummer und r der Werte des Gebietsmittelpunktes.
Ein Kurzes Beispiel:
Es wurde mit Range ein 10*10 Grad geographisches Gebiet festgelegt:
Range: 1,10,0
Range: 2,10,0
Zum berechnen der Faktoren (mit allen Variablen) der Interpolation
für das Gebiet um 35N,40W gibt man dann ein:
Faktoren: 1,35, 2,-40>br> Die Ausgabe erfolgt auf dem Bildschirm.
PARA: i1,i2,i3,..
Angabe der Variablen die bei der Interpolation benutzt werden sollen.
i1,i2,.. gibt die Position der Variable im Zyklus an. Die Anzahl der zu
interpolierenden Daten wird durch das Ende der Eingabe oder durch eine
Variablenposition <= 0 bestimmt
Moden: I,Dateiname
Angabe der zu benutzenden Modenanzahl und der Datei in der sie stehen.
Diese Datei hat eine Headerzeile und in den folgenden Zeilen steht jeweils
Druck(oder tiefe), mode-1, mode-2, ...
Maximale Modenanzahl ist 5, bei einer Modenanzahl <=0 werden keine
Modalzerlegungswerte benutzt.
Default= keine Modalzerlegungswerte benutzt.
Default: R
Legt den Fehlwert (d.h. der Wert der im Zyklus steht falls der Wert
unbekannt ist) auf R fest. Standardmäßig auf -9999. gesetzt.
D-Bereich: I,min,max
[,stdabw]
Festlegung des Definitionsbereiches der Variablen auf Position I. Beim
Einlesen werden Datenwerte < min und > max auf den Defaultwert gesetzt.
Interpolierte Werte außerhalb des Definitionsbereiches werden auf min,
bzw. max gesetzt. Eine Angabe von negativem I setzt die Bereichsabfrage
der Variablen auf Position ABS(i) außer Kraft, Angabe von I=0 setzt alle
Bereichsabfragen außer Kraft.
! Änderung 17.4.96, bei Angabe der Karte D-Bereich werden schon ! eingelesene Zyklen auf den Angegebenen Bereich überprüft ! und gegebenenfalls auf Default gesetzt (I>0)Stdabw wird benutzt um Quality Flags zu setzen (bei <=0 wird 1e32 gesetzt).
C (i_diff ist Eingabe von label DIFF:) C i_diff=3 zum setzen der Qualityflags bei allen Daten C i_diff=4 ist zum setzen der Qualityflags bei vorhandenen Daten C Flags bei vorhandenen Daten 0=gut, C pro Interpolation (siehe D=in:) wird aufaddiert: +1=Differenz>stdabw +2=Differenz>3*stdabw C oder +2 falls Quality schon auf >0 (d.h. schon als fehlerhaft erkannt) C Flags bei fehlenden Daten -9=Fehlwert, -1=interpoliert, C -2=interp.aber auf min gesetzt, -3=interp. aber auf max gesetzt
Diff: I [,j]
Bei I=1 werden die Differenzwerte der einzelnen Zyklen in eine Datei
Difout.v?? geschrieben. ?? geht dabei von von 01 an (für die erste
interpolierte Variable) aufwärts. (02=zweite, ...)
Bei I=-1 werden vorhandene Werte nicht interpoliert. Dies beschleunigt
die Ausführung des Programmes ziemlich, aber man bekommt keine Statistik
für die Güte der Interpolation. Bei I= 0 werden vorhandene Werte
interpoliert, aber die Differenzwerte nur benutzt, um eine Statistik zu erstellen.
Die Differenzwerte selber werden nicht weggeschrieben. Standard ist I=0.
Neue:
C i_diff=2 ähnlich i_diff=1 aber es werden auch die Koeffizienten weggeschrieben C i_diff=3 zum setzen der Qualityflags bei allen Daten C i_diff=4 ist zum setzen der Qualityflags bei vorhandenen Daten C Flags bei vorhandenen Daten 0=gut, C pro Interpolation (siehe D=in:) wird aufaddiert: +1=Differenz>stdabw +2=differenz>3*stdabw C oder +2 falls Quality schon auf >0 (d.h. schon als fehlerhaft erkannt) C Flags bei fehlenden Daten -9=Fehlwert, -1=interpoliert, C -2=interp.aber auf min gesetzt, -3=interp. aber auf max gesetzt bei j=1 werden die schon vorhandenen Werte in dem Ausgabearray mit den interpolierten überschrieben.
VAR=: Name,i,j1,j2,j3,j4,j5
Es wird versucht die Variable des Namens 'Name' zu berechnen und auf
die 'i'te Position im Zyklus zu schreiben.
Die Namensgebung entspricht der MK4-Nomenklatur.
falls: i <=
0, wird es als neue Spalte am Ende des Output-Array angehängt.
Die Eingabeparameter j1,j2,j3,j4,j5 geben
die Position des Druckes(j1),Temperatur(j2),
Salzgehalt(j3),Sauerstoffs(j4)und
Nährstoffgehaltes(j5) an. Je nach zu
berechnender Variable werden diese Werte natürlich nicht alle immer
gebraucht.
!!!! j2
bedeutet Temperatur nach
!!!! wird in T68 umgerechnet
ist Name = AOU
und j5 existiert und ungleich 0 => wird AOU
mit Hilfe von PTEM auf j5, OXYG auf
j4
und S auf j3 berechnet (s. auch berechnen)
WARNUNG: der Defaultwert, falls verschieden von -9999., muß vorher
mit der Karte Default: spezifiziert werden!!
M-AUSGABE:
Angabe dieser Karte bewirkt, dass nur die bis dahin eingelesenen Daten
interpoliert und weggeschrieben werden. Daten, die nach dieser Karte eingelesen
werden, werden nur zur Interpolation benutzt, aber nicht interpoliert und
weggeschrieben (außer bei einer weiteren Karte M-AU:) Diese Karte wirkt
auch auf D=IN.
B-multi: r1,r2
Bereichmultiplikator r1 und Maximalwert desselben r2
Falls eine Variable nicht berechnet werden kann, da zu wenig Daten
innerhalb des mit Range: definierten Bereiches liegen, wird der Hauptbereich
des Bereiches (also nicht der %Teil) mit r1 multipliziert und dann wird
nochmal versucht. Dies geschieht solange bis der Multiplikationsfaktor
grösser als r2 ist. Sollten bis dahin nicht genügend Datenwerte
vorhanden sein wird der Defaultwert benutzt.
Ein Faktor kleiner oder gleich 1 schaltet dieses ganz aus, ist R2 kleiner
als R1 wird R2 auf 100 gesetzt.
Info: i
Bei i ungleich 0 werden Informationen ausgegeben wo keine Interpolation
möglich war oder wo Bereichsmultiplikationen vorgenommen wurden.
MASK: xpos,ypos,maskendatei
In der Maskendatei stehen (so wie bei Programm MK4insp) in jeweils einer
Zeile x/y Wertepaare, aufeinanderfolgende Zeilen definieren Geradenstücke
(wobei ein x/y Wertepaar von -1e32,-1e32 eine Lücke repräsentiert).
Die entsprechenden x/y Werte stehen in der Eingabedatei auf Position xpos/ypos.
Die Verbindungsgerade von der x/y Position des zu interpolierenden Wertes
und der zur Interpolation benutzen Werte dürfen nicht diese Geradenstücke
schneiden um für die Interpolation benutzt zu werden. Z.B. Die Maskendatei
definiert einen Längengrad von 25 Ost (x=Breite,y=Länge)
25,55
25,-35
durch den afrikanischen Kontinent. Zur Interpolation eines Wertes im
Atlantik bei 0N,0W werden daher keine Daten aus dem indischen Ozean (0N,100E
; 5S,120E) benutzt.
Z-Be: i,rmin,rmax
Nach Eingabe dieser Karte werden beim folgenden Einlesen alle Zyklen,
bei denen die i'te Variable außerhalb des Bereiches rmin-rmax ist, nicht
übernommen. Kann gebraucht werden um Zyklen in der Eingabedatei die
eh nicht gebraucht werden (z.B. wenn alle GEOSECS Daten in einer Datei
stehen, aber man nur an den Pazifikdaten interessiert ist) zu entfernen.
! 21.4.98 Karte Wweg: eingefügt ! Wweg: 6,1400,1600,16,8,9 ! setzt die werte auf Position 16 auf Default, die zwischen 8 und 9 liegen und ! wo gleichzeitig die Variable 6 zwischen 1400 und 1600 liegt.
eich: i,rmin,rmax,r0,r1,r2
Eicht die i'te Variable in dem Definitionsbereich rmin bis rmax mit
der Formel
V= V + r0 + r1*V + r2*V**2geeichte Werte außerhalb des Definitionsbereiches werden auf rmin, bzw. rmax gesetzt. Es werden nur die bis dorthin eingelesenen Zyklen geeicht.
Beispiel für eine Steuerungsdatei:
int_csv << EOT
EING: 11,/data/m15.csv
AUSG: /data/m15_int.csv
PARA: 6,7,8,9
INT1: 8,9,10,11
STAT: 1,5
DEPT: 3,500,0.2
ENDE:
EOT
################################################################################
Änderungen!!
18.9.1995, frühere Karte INT1: wird nicht mehr erkannt, ist jetzt
INTE: