Da es mit den gängigen Universal-programmiersprachen (welche zum größten Teil für sequentielle Algorithmen auf konventionellen Rechnern entwickelt wurden) nicht möglich ist, die Leistungsfähigkeit von Vektorrechnern voll auszuschöpfen (siehe z.B. Dongarra et al [169] , Ling [277], Sekera [360]) wurden von den Herstellern dieserRechner nichtportable (nicht genormte) Spracherweiterungen von Fortran77 vorgenommen Dadurch können die Möglichkeiten dieser Rechner wesentlich besser ausgenützt werden. Auch in die rechnerunabhängige, genormte Sprachdefinition von Fortran90 wurden viele Elemente dieser rechnerspezifischen Sprache aufgenommen.
Feld-Operationen
In Fortran90 sind die arithmetischen Operationen in elementweiser defintion verfügbar. Z.B: die Operationen
Feld-Aufbau und Teilfeld-Extraktion
Der rekursive aufbau n-dimensionaler Felder aus (n-1) -dimensionalen Feldern oder der Aufbau einer nxn-Matrix aus einer
(n-1)x(n-1)Matrix durch hinzufügen eines Zeilen- und eines Spalten- Vektors wird unterstuzt. Die Extraktion von kleineren Feldern
aus gegebenen größeren Feldern kann einfach und in natürlicher Weise ausgedruckt werden.
die Standardfunktionen sind in Fortran90 auch auf Felder anwendbar; so ist z.B
LOG (A) := (log aij) für das Feld A= (a ij) elementweise definiert
Vordefinierte Funktionen
Das Matrizenprodukt wie auch die Matrix-Transposition sind als vordefinierte Funktion verfügbar. Die Vektot-Operationen stellen
einen Teil der Matrix-Algebra dar, wobei jeder Vektor als (nx1)-Matrix interpretiert wird.
Beispiel (Lineares Produkt) In Fortran90 liefert DOT_PRODUCT(vektor_u,vektor_v) das innere Produkt.
In Fortran90 gibt es zusätzlich zur Matrix-Algebra mit algemeinen, vollbesetzten Matrizen auch spezielle vordefinierte Funktionen für die komprimierte Speicherung von schwach besetzten Matrizen (PACK und UNPACK), jedoch nicht für die Verknüpfung und Manipulation derselben.
Mächtigkeit der Feldoperationen und -funktionen
Auf Grund des hohen Mächtigkeitsgrades der Sprachelemente von Fortran90 zur Feldverarbeitung, kann die Darstellung von
Algorithmen zum Teil drastisch verkürzt werden.
Beispiel (Vektor- und Matrixnormen) Für Vektoren und Matrizen liefert der folgende Programmteil verschiedene Normen in einfacher Weise.
REAL, | DIMENSION (n) | :: | x, | y |
REAL, | DIMENSION (n,n) | :: | a, | b |
... | ! | VEKTOR-Normen: | |||
x_norm_1 | = | SUM(ABS(x)) | ! | Betragssummen-Norm | |
x_norm_2 | = | SQRT (SUM(x**2)) | ! | Euklidische Norm | |
x_norm_max | = | MAXVAL(ABS(x)) | ! | Maximun-Norm | |
! | MATRIX-Normen: | ||||
a_norm_1 | = | MAXVAL (SUM(ABS(a), DIM = 1)) | ! | Spaltensummen-Norm | |
a_norm_max | = | MAXVAL (SUM(ABS(a), DIM = 2)) | ! | Zeilensummen-Norm | |
a_norm_f | = | SQRT (SUM(a**2) | ! | Frobenius-Norm |
Beispiel (Statistische Datenauswertung) Die mxn-Matrix T=(t) enthält Testergebnisse (bewertet durch punkte t>=0) von m Studenten nach n Tests. Durch die nachstehenden Fortran90 - anweisungen werden verschiedene Auswertungen der Testresultate geliefert.
1. Wie Groß ist die höchste Punktezahl jedes Studenten?
MAXVAL (t, DIM = 2) | !Das Ergebnis ist ein Vektor der Länge m. |
über_dem_durchschnitt = t > SUM (t) /SIZE (t) | !Matrix. | |||||
anzahl_guter_tests = COUNT (über_dem_durchschnitt) | !Skalar |
WHERE (über_dem_durchschnitt) t | = | 1.1*t |
min_über_mittel = MINVAL (t, MASK = über_dem_durchschnitt). |
antwort_logical=ANY (ALL (über_dem_durchschnitt, DIM = 2)).
|
REAL, | DIMENSION | :: | chi_quadrat |
REAL, | DIMENSION (m,n)a | :: | b, | e |
REAL, | DIMENSION (m )a | :: | r |
REAL, | DIMENSION (n ) | :: | c |
... |