Dokumentation zum Programm

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=negativ bedeutet Temperatur nach ITS-90 !!!!         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**2
geeichte 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: