| 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