ALL | stellt fest, ob alle Werte der Maske wahr sind |
ALLOCATED | prüfte, ob dem Feld aktuell Speicher zugewiesen ist |
ANY | testet, ob irgendein Wert der Maske wahr ist |
COUNT | zählt die Elemente der Maske, die wahr sind |
CSHIFT | zirkuläres Verschiebung |
DOT_PRODUCT | Skalarprodukt, Ergebnis also ein Skalar! |
EOSHIFT | Verschieben und Einbringen von Randwerten |
LBOUND, UBOUND | untere bzw. obere Grenze des Feldes |
MATMUL | Matrizenmultiplikation |
MAXLOC, MINLOC | Index des größten bzw. kleinsten Feldelements |
MAXVAL, MINVAL | Wert des größten bzw. kleinsten Feldelements |
MERGE | alternative Werte, abhängig von Maske |
PACK | packt (mehrdimensionales) Feld in ein eindimensionales |
PRODUCT | Produkt aller Feldelemente, die die Maske erfüllen |
RESHAPE | wandelt ein mehrdimensionales Feld um in ein anderes |
SHAPE | liefert die Form eines Feldes |
SIZE | liefert die Größe eines Feldes bzw. |
die Ausdehnung einer Dimension | |
SPREAD | erweitert ein Objekt um eine Dimension |
SUM | bildet die Summe aller Feldelemente (die die Maske erfüllen) |
TRANSPOSE | transponiert ein zweidimensionales Feld |
UNPACK | entpackt ein eindimensionales Feld in ein mehrdimensionales |
Auch zur Verwendung der Feldfunktionen noch ein kurzes Beispiel:
PROGRAM feldfunktionen IMPLICIT NONE INTEGER :: i, n INTEGER :: feld1(5), feld2(3,2) feld1 = (/ 0, (1, 0, i = 1, 2) /) ! feld2 = 0 ! ! IF (ANY(feld1==1) .AND. ALL(feld2==0)) & ! n = COUNT (feld1==0) ! WRITE (*,*) n ! 3 feld1 = (/ (i, i=1,5) /) ! WRITE (*,*) CSHIFT (feld1,2) ! 3 4 5 1 2 feld2(:,1) = 1 ! WRITE (*,*) feld2 ! 1 1 1 0 0 0 WRITE (*,*) DOT_PRODUCT(feld1(3:4),feld2(2,:)) ! 3 feld2 = EOSHIFT (feld2, -1, 9, 2) ! WRITE (*,*) feld2 ! 9 9 9 1 1 1 WRITE (*,*) MAXLOC(CSHIFT(feld1,-1)) ! 1 WRITE (*,*) MAXVAL(feld2-1), MINLOC(feld2) ! 8 1 2 WRITE (*,*) MERGE (1, 0, feld2 >= 1) ! 1 1 1 1 1 1 n = COUNT (feld2 > 1) ! feld1 = (/ PACK (feld2,MASK=feld2>1), & ! (i-1, i=n+1, SIZE(feld1)) /) ! WRITE (*,*) feld1 ! 9 9 9 3 4 WRITE (*,*) PRODUCT(feld1)/PRODUCT(feld2,1) ! 12 8748 WRITE (*,*) SUM(feld1-1, MASK = feld1>=3) ! 29 WRITE (*,*) RESHAPE(feld1, & ! (/4,2/),(/0/),(/2,1/)) ! 9 9 4 0 9 3 0 0 ! (zuerst 2. Dimension, Rest=0) WRITE (*,*) RESHAPE(feld1, & ! (/4,2/),(/1/),(/1,2/)) ! 9 9 9 3 4 1 1 1 ! (zuerst 1. Dimension, Rest=1) WRITE (*,*) RESHAPE(feld1, SHAPE(feld2)) ! 9 9 9 3 4 9 WRITE (*,*) TRANSPOSE(feld2) ! 9 1 9 1 9 1 feld2(:,1) = (/(i, i=1,SIZE(feld2(:,1)))/) ! feld2(:,2) = (/(10+i, i=1,SIZE(feld2(:,1)))/) ! WRITE (*,*) SPREAD(feld2,2,3) ! | 1 11 END PROGRAM feldfunktionen ! | 2 12 ! | 3 13 ! V 1 11 ! 2 12 ! 3 13 ! 1 11 ! 2 12 ! 3 13