Fortran: Fortran 95: Standardfunktionen: Feldfunktionen: Unterschied zwischen den Versionen

Aus testwiki
Zur Navigation springen Zur Suche springen
 
(kein Unterschied)

Aktuelle Version vom 7. Januar 2016, 11:53 Uhr

<<< zur Fortran-Startseite << Fortran 95 < Standardfunktionen

Konstruktion und Umgestaltung von Feldern

Funktion Beschreibung
Fortran:Vorlage: Intrinsic Ein gegebenes Feld in ein Feld anderer Form umwandeln.
  • arr1 ... source (Quellfeld)
  • arr2 ... form, Datentyp integer, Größe: 1 bis 7, Festlegung der neuen Feldform
  • arr3 ... pad, Datentyp und kind-Wert wie arr1. Wird verwendet um zusätzliche Felelemente einzufügen.
  • arr4 ... order, Feld der selben Form wie arr2, Datentyp integer. Bestimmt die Anordnung der zusätzlichen Feldelemente.

Der Rückgabewert ist ein Feld, dessen Feldelemente vom gleichen Datentyp und kind-Wert sind wie bei arr1. Die genaue Form dieses Feldes wird durch die Parameter arr2 bestimmt.


Beispiele:

  • integer, dimension(6)  :: a1 = (/ 1, 2, 3, 4, 5, 6 /)
    integer, dimension(3,2) :: a2
    a2 = reshape( a1, (/ 3, 2 /) )
a1
1
2
3
4
5
6
a2 = reshape( a1, (/ 3, 2 /) )
1 4
2 5
3 6
  • integer, dimension(6)  :: a1 = (/ 1, 2, 3, 4, 5, 6 /)
    integer, dimension(4, 2) :: a2, a3
    a2 = reshape( a1, (/ 4, 2 /), (/ 11, 22 /), (/ 1, 2 /) )
    a3 = reshape( a1, (/ 4, 2 /), (/ 11, 22 /), (/ 2, 1 /) )
a1
1
2
3
4
5
6
a2 = reshape( a1, (/ 4, 2 /), (/ 11, 22 /), (/ 1, 2 /) )
1 5
2 6
3 11
4 22
a3 = reshape( a1, (/ 4, 2 /), (/ 11, 22 /), (/ 2, 1 /) )
1 4
2 5
3 6
11 22
Fortran:Vorlage: Intrinsic Fusioniert die Felder arr1 und arr2 entsprechend der Maske arr3 zu einem neuen Feld.

Werte in arr3:

  • .true. ... Wert aus arr1 wird gewählt
  • .false. ... Wert aus arr2 wird gewählt

Beispiel:

integer, dimension(3, 3) :: a, b
logical, dimension(3, 3) :: mask
a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /) )
b = reshape( (/ -1, -2, -3, -4, -5, -6, -7, -8, -9 /), (/ 3, 3 /) )
mask = reshape( (/ .true., .true., .true., .true., .false., .true., .true., .false., .true. /), (/ 3, 3 /) )
merge( a, b, mask ) ⇒ ( 1, 2, 3, 4, -5, 6, 7, -8, 9 )
a
1 4 7
2 5 8
3 6 9
b
-1 -4 -7
-2 -5 -8
-3 -6 -9
mask
T T T
T F F
T T T
merge( a, b, mask )
1 4 7
2 -5 -8
3 6 9
Fortran:Vorlage: Intrinsic Packt ein Feld arr1 unter Beachtung der Werte einer Maske arr2 in einen Vektor. Die Feldelemente der Maske arr2 müssen logischen Datentyp aufweisen. Optional kann ein Vektor arr3 angegeben werden. Die in der Maske arr2 als .true. gekennzeichneten Feldwerte aus arr1 werden mit diesem Vektor verschmolzen. Das Ergebnis wird zurückgegeben. arr3 soll mindestens soviele Feldelemente aufweisen, wie .true.-Werte in arr2 sind.

Beispiel:

a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /) )
b = (/ -10, -20, -30, -40 /)
mask = reshape( (/ .false., .false., .false., .true., .false., .true., .false., .false., .true. /), (/ 3, 3 /) )
pack( a, mask ) ⇒ ( 4, 6, 9 )
pack( a, mask, b ) ⇒ ( 4, 6, 9, -40 )
Fortran:Vorlage: Intrinsic Entpackt den Vektor arr1 unter Beachtung der Werte einer Maske arr2 in ein Feld. Das Ergebnis wird zurückgegeben und weist die Form von arr2 auf, der Datentyp ist der gleiche wie bei arr1.

Beispiel:

integer, dimension(3, 3) :: a
integer, dimension (4) :: b
logical, dimension(3, 3) :: mask
a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /) )
b = (/ -10, -20, -30, -40 /)
mask = reshape( (/ .false., .false., .false., .true., .false., .true., .false., .false., .true. /), (/ 3, 3 /) )
unpack( b, mask, a ) ⇒ ( 1, 2, 3, -10, 5, -20, 7, 8, -30 )
Fortran:Vorlage: Intrinsic Vervielfältigung der Feldinhalte in eine zusätzliche Felddimension (i1 ... dim, i2 ... ncopies).

Beispiel:

integer, dimension(2, 2) :: a
integer, dimension(2, 2, 2) :: b
a = reshape( (/ 1, 2, 3, 4 /), (/ 2, 2 /) )
b = spread( a, 3, 2 ) ⇒ ( 1, 2, 3, 4, 1, 2, 3, 4 )
a
1 3
2 4

Abfragen von Feldstatus, Felddaten und Feldmetadaten

Funktion Beschreibung
Fortran:Vorlage: Intrinsic Prüft den Allokationsstatus eines Feldes.

Beispiel:

  • integer, dimension(:), allocatable :: a
    allocate(a(3))
    allocated(a) ⇒ .true.

Ist Speicherplatz für das abgefragte Feld alloziert, so ist der Rückgabewert .true..

Fortran:Vorlage: Intrinsic Untere Feldgrenzen. i gibt optional die Felddimension vor, die abgefragt werden soll.

Beispiel:

  • integer, dimension(4:6, 2) :: a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 3, 2 /) )
    lbound (a) ⇒ ( 4, 1 )
Fortran:Vorlage: Intrinsic. Obere Feldgrenzen. i gibt optional die Felddimension vor, die abgefragt werden soll.

Beispiel:

  • integer, dimension(4:6, 2) :: a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 3, 2 /) )
    ubound (a) ⇒ ( 6, 2 )
Fortran:Vorlage: Intrinsic Prüft, ob alle Feldelemente .true. sind. Das erste Argument steht für die Abfragemaske (bzw. das Feld mit den Feldelementen vom Datentyp logical), das optionale zweite für die Dimension.

Beispiele:

  • logical, dimension(3) :: a = (/ .true., .false., .true. /)
    all( a ) ⇒ .false.
  • integer, dimension(3) :: a = (/ -1, 0, 5 /), b = (/ -1, 3, -2 /)
    all( a == b ) ⇒ .false.
  • logical, dimension(2, 2) :: a = reshape( (/ .true., .false., .false., .false. /), (/ 2, 2 /) )
    all( a, 1 ) ⇒ ( .false., .false. )

Der Rückgabewert kann ein Skalar oder ein Feld sein.

Fortran:Vorlage: Intrinsic Prüft, ob irgend ein Feldelemente .true. ist. Das erste Argument steht für die Abfragemaske (bzw. das Feld mit den Feldelementen vom Datentyp logical), das optionale zweite für die Dimension.

Beispiele:

  • logical, dimension(3) :: a = (/ .true., .false., .true. /)
    any( a ) ⇒ .true.
  • integer, dimension(3) :: a = (/ -1, 0, 5 /), b = (/ -1, 3, -2 /)
    any( a == b ) ⇒ .true.
  • logical, dimension(2, 2) :: a = reshape( (/ .true., .false., .false., .false. /), (/ 2, 2 /) )
    any( a, 1 ) ⇒ (.true., .false.)

Der Rückgabewert kann ein Skalar oder ein Feld sein.

Fortran:Vorlage: Intrinsic Zählt die .true.-Elemente in einem Feld. Das erste Argument steht für die Abfragemaske (bzw. das Feld mit den Feldelementen vom Datentyp logical), das optionale zweite für die Dimension.

Beispiel:

  • logical , dimension(3, 2) :: a = reshape( (/ .true., .false., .false., .false., .true., .false. /), (/ 3, 2 /) )
    count( a, 2) ⇒ (1, 1, 0)

Der Rückgabewert kann ein Skalar oder ein Feld sein.

Fortran:Vorlage: Intrinsic Anzahl der Elemente in einem Feld oder einer spezifizierten Dimension. i gibt optional die Felddimension vor, die abgefragt werden soll.

Beispiel:

  • integer, dimension(4:6, 2) :: a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 3, 2 /) )
    size (a) ⇒ 6
    size (a, 2) ⇒ 2
Fortran:Vorlage: Intrinsic Form der Feldes arr.

Beispiel:

  • integer, dimension(4:6, 2) :: a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 3, 2 /) )
    shape (a) ⇒ ( 3, 2 )
Fortran:Vorlage: Intrinsic Kleinster Wert im Feld (i ... dim, l ... mask). Die Feldelemente müssen vom Datentyp real oder integer sein.
Fortran:Vorlage: Intrinsic Größter Wert im Feld (i ... dim, l ... mask). Die Feldelemente müssen vom Datentyp real oder integer sein.
Fortran:Vorlage: Intrinsic Position des kleinsten Wertes im Feld (i ... dim, l ... mask). Die Feldelemente müssen vom Datentyp real oder integer sein.
Fortran:Vorlage: Intrinsic Position des größten Wertes im Feld (i ... dim, l ... mask). Die Feldelemente müssen vom Datentyp real oder integer sein.

Funktionen für Vektoren und Matrizen

Funktion Beschreibung
Fortran:Vorlage: Intrinsic Bildet das Skalarprodukt der beiden Vektoren arr1 und arr2. arr1 und arr2 können Vektoren mit Feldelementen von numerischen oder logischen Datentyp sein.
  • Numerischer Datentyp: arr=arr1arr2
  • Logischer Datentyp: arr=arr1 .AND. arr2
Fortran:Vorlage: Intrinsic Matrizenmultiplikation. arr1 und arr2 können Vektoren mit Feldelementen von numerischen oder logischen Datentyp sein.
Fortran:Vorlage: Intrinsic Transponierte Matrix arr1T.

Sonstige

Funktion Beschreibung
Fortran:Vorlage: Intrinsic Circular shift (i1: shift, i2: dim).

Beispiel:

integer , dimension(3, 3) :: a
a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /) )
cshift( a, 1 ) ⇒ ( 2, 3, 1, 5, 6, 4, 8, 9, 7 )
cshift( a, 2 ) ⇒ ( 3, 1, 2, 6, 4, 5, 9, 7, 8 )
cshift( a, 3 ) ⇒ ( 1, 2, 3, 4, 5, 6, 7, 8, 9 )
cshift( a, 1, 2 ) ⇒ ( 4, 5, 6, 7, 8, 9, 1, 2, 3 )
cshift( a, 2, 2 ) ⇒ ( 7, 8, 9, 1, 2, 3, 4, 5, 6 )
cshift( a, (/ 1, 2, -1 /), 1 ) ⇒ ( 2, 3, 1, 6, 4, 5, 9, 7, 8 )
a
1 4 7
2 5 8
3 6 9
cshift( a, 1 )
2 5 8
3 6 9
1 4 7
cshift( a, 2)
3 6 9
1 4 7
2 5 8
cshift( a, 3 )
1 4 7
2 5 8
3 6 9
cshift( a, 1, 2 )
4 7 1
5 8 2
6 9 3
cshift( a, 2, 2 )
7 1 4
8 2 5
9 3 6
cshift( a, (/ 1, 2, -1 /), 1 )
2 6 9
3 4 7
1 5 8
Fortran:Vorlage: Intrinsic End-off shift (i1 ... shift, zlc ... boundary, i2 ... dim)

Beispiel:

integer , dimension(3, 3) :: a
a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /) )
eoshift( a, 1 ) ⇒ ( 2, 3, 0, 5, 6, 0, 8, 9, 0 )
eoshift( a, 2 ) ⇒ ( 3, 0, 0, 6, 0, 0, 9, 0, 0 )
eoshift( a, 3 ) ⇒ ( 0, 0, 0, 0, 0, 0, 0, 0, 0 )
eoshift( a, 1, -99 ) ⇒ ( 2, 3, -99, 5, 6, -99, 8, 9, -99 )
eoshift( a, (/ 1, 2, -1 /), (/ -111, -222, -333 /) ) ⇒ ( 2, 3, -111, 6, -222, -222, -333, 7, 8 )
eoshift( a, (/ 1, 2, -1 /), 999, 2 ) ⇒ ( 4, 8, 999, 7, 999, 3, 999, 999, 6 )
eoshift( a, (/ 1, 2, -1 /), 999, 2 )
1 4 7
2 5 8
3 6 9
eoshift( a, 1 )
2 5 8
3 6 9
0 0 0
eoshift( a, 2)
3 6 9
0 0 0
0 0 0
eoshift( a, 3 )
0 0 0
0 0 0
0 0 0
eoshift( a, 1, -99 )
2 5 8
3 6 9
-99 -99 -99
eoshift( a, (/ 1, 2, -1 /), (/ -111, -222, -333 /) )
2 6 -333
3 -222 7
-111 -222 8
eoshift( a, (/ 1, 2, -1 /), 999, 2 )
4 7 999
8 999 999
999 3 6
Fortran:Vorlage: Intrinsic Summe der Feldelemente, bzw. Summe der Feldelemente bei denen die Maskenwerte .true. sind (i ... dim, l ...mask)

Beispiel:

  • integer , dimension(3, 3) :: a
    a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /) )
    sum( a ) ⇒ 45

Der Rückgabewert kann ein Skalar oder ein Feld sein. Datentyp und kind-Wert sind wie bei arr.

Fortran:Vorlage: Intrinsic Produkt der Feldelemente, bzw. Produkt der Feldelemente bei denen die Maskenwerte .true. sind (i ... dim, l ...mask)

Beispiel:

  • integer , dimension(3, 3) :: a
    a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /) )
    product( a ) ⇒ 362880

Der Rückgabewert kann ein Skalar oder ein Feld sein. Datentyp und kind-Wert sind wie bei arr.

<<< zur Fortran-Startseite << Fortran 95 < Standardfunktionen