Zum Inhalt springen

Fortran: Fortran 2003: Intrinsische Funktionen und Subroutinen

Aus Wikibooks
<<< zur Fortran-Startseite
<< Fortran 2003 Bibliotheken >>
< Ein- und Ausgabe Intrinsische Module >


Die Fortran 90/95-Funktionen und -Subroutinen sind natürlich auch in Fortran 2003 uneingeschränkt gültig. Einige Unterprogramme wurden neu aufgenommen, andere in ihrer Funktionalität etwas erweitert. Mit Fortran 2008 wurde eine Reihe von Funktionen neu aufgenommen (z.B. für die Bit-Verarbeitung, Bessel-, Gamma- und Fehlerfunktion, euklidische Vektornormen). Neu in Fortran 2023 sind u.a. etliche Winkel- und Arkusfunktionen, sowie String-Unterprogramme.

Datentypfunktionen

[Bearbeiten]
Funktion Beschreibung
i = selected_char_kind ( c )

Gibt den kind-Wert des Parameters zurück. Der Rückgabewert ist von Datentyp integer.

Parameter:

  • name

Rückgabewert:

  • name = "DEFAULT": der Default-Wert für Zeichen wird zurückgegeben
  • name = "ASCII": der Wert für ASCII-Zeichen wird zurückgegeben
  • name = "ISO_10646": der Wert für "ISO 10646"-Zeichen wird zurückgegeben
  • -1 ... Zeichentyp wird nicht unterstützt

Beispiel:

i = selected_char_kind( "ASCII" )

i => 1

Kommandozeile und Environment

[Bearbeiten]
Funktion Beschreibung
i = command_argument_count ( ) Anzahl der übergebenen Kommandozeilenargumente (der Programmname selbst wird nicht mitgezählt). Der Rückgabewert ist vom Typ integer.

Beispiel:

Programmaufruf mit: ./a.out opt1 opt2
 
i = command_argument_count( )

i => 2
Subroutine Beschreibung
get_command (  [c, i, i] ) Übergebene Kommandozeilenargumente (ohne Programmname)

Parameter:

  1. command: Kommandozeilenargumente als Zeichenkette, intent( out ), optional
  2. length: Länge der Zeichenkette, intent( out ), optional
  3. status: Status, intent( out ), optional
    • 0 ... OK
    • -1 ... command-Argument existiert und ist kürzer als length
    • andere Zahl ... Fehler

Beispiel:

Programmaufruf mit: ./a.out opt1 opt2
 
call get_command( str, len, st )

str => opt1 opt2
len => 9
st => 0
get_command_argument (  i, [c, i, i] ) Ein bestimmtes Kommandozeilenargument (inkl. Programmname)

Parameter:

  1. number: Nummer des gewünschten Kommandozeilenargumentes beginnend bei 0, intent( in )
  2. value: Wert des Kommandozeilenargumentes, intent( out ), optional
  3. length: Länge der Zeichenkette, intent( out ), optional
  4. status: Status, intent( out ), optional
    • 0 ... OK
    • -1 ... Argument existiert und ist kürzer als length
    • andere Zahl ... Fehler

Beispiel:

Programmaufruf mit: ./a.out opt1 opt2
 
call get_command_argument( 1, str, len, st )

str => opt1
len => 4
st => 0
get_environment_variable (  c1, [c2, i, i, l] ) Wert einer bestimmten Umgebungsvariable.

Parameter:

  1. name: Name der Umgebungsvariable, intent( in )
  2. value: Wert der Umgebungsvariablen, intent( out ), optional
  3. length: Länge der Zeichenkette c2, intent( out ), optional
  4. status: Status, intent( out ), optional
  5. trim_name: intent( in ), optional
    • 0 ... OK
    • -1 ... Umgebungsvariable existiert, Wert ist kürzer als length
    • 1 ... Umgebungsvariable existiert nicht
    • 2 ... keine Unterstützung von Umgebungsvariablen
    • andere Zahl ... sonstiger Fehler

Beispiel:

call get_environment_variable( "PWD", str, len, st, .TRUE. )

str => /usr/bin
len => 8
st => 0

Mathematische Funktionen

[Bearbeiten]

Trigonometrische Funktionen

[Bearbeiten]
Funktion Beschreibung
r = acosd ( r )

Ab Fortran 2023. Berechnet den Arkus-Cosinus. Gibt den berechneten Wert in Grad (und nicht in Radiant wie bei acos) zurück.

r = asind ( r )

Ab Fortran 2023. Berechnet den Arkus-Sinus. Gibt den berechneten Wert in Grad (und nicht in Radiant wie bei asin) zurück.

r = atand ( r )

Ab Fortran 2023. Berechnet den Arkus-Tangens. Gibt den berechneten Wert in Grad (und nicht in Radiant wie bei atan) zurück.

r = atan2d ( r1, r2 )

Ab Fortran 2023. Berechnet den Arkus-Tangens. Gibt den berechneten Wert in Grad (und nicht in Radiant wie bei atan) zurück.

r = atand ( r1, r2 )

Ab Fortran 2023. Berechnet den Arkus-Tangens. Gleich wie atan2d( r1, r2 ).

r = cosd ( r )

Ab Fortran 2023. Berechnet den Cosinus. Das Argument ist in der Einheit Grad anzugeben (und nicht in Radiant wie bei cos).

r = sind ( r )

Ab Fortran 2023. Berechnet den Sinus. Das Argument ist in der Einheit Grad anzugeben (und nicht in Radiant wie bei sin).

r = tand ( r )

Ab Fortran 2023. Berechnet den Tangens. Das Argument ist in der Einheit Grad anzugeben (und nicht in Radiant wie bei tan).

Fehler- und Gamma-Funktion

[Bearbeiten]
Funktion Beschreibung
r = erf ( r ) Ab Fortran 2008. Berechnet die Fehler-Funktion
r = erfc ( r ) Ab Fortran 2008. Berechnet
r = erfc_scaled ( r ) Ab Fortran 2008. Berechnet
r = gamma ( r ) Ab Fortran 2008. Berechnet die Gamma-Funktion für
r = log_gamma ( r ) Ab Fortran 2008. Berechnet den natürlichen Logarithmus der Gamma-Funktion

Besselsche Funktion

[Bearbeiten]

Die Bessel-Funktion erster Art -ter Ordnung ist definiert als (Details siehe  Bessel-Funktion)

Funktion Beschreibung
r = bessel_j0 ( r ) Ab Fortran 2008. Berechnet die Bessel-Funktion 1 .Art und 0. Ordnung
r = bessel_j1 ( r ) Ab Fortran 2008. Berechnet die Bessel-Funktion 1. Art und 1. Ordnung
r = bessel_jn ( i, r ) Ab Fortran 2008. Berechnet die Bessel-Funktion 1. Art und i. Ordnung ()

Die Bessel-Funktion zweiter Art -ter Ordnung ist definiert als

Funktion Beschreibung
r = bessel_y0 ( r1 ) Ab Fortran 2008. Berechnet die Bessel-Funktion 2. Art und 0. Ordnung ()
r = bessel_y1 ( r1 ) Ab Fortran 2008. Berechnet die Bessel-Funktion 2. Art und 1. Ordnung ()
r = bessel_yn ( i, r1 ) Ab Fortran 2008. Berechnet die Bessel-Funktion 2. Art und i. Ordnung (, )

Euklidische Vektornormen

[Bearbeiten]
Funktion Beschreibung
r = norm2 ( ra ) Ab Fortran 2008. Gibt die euklidische Vektornorm () zurück. ra sei ein Array mit reellen Elementen.

Bsp.:

program main
   implicit none

   print *, norm2([2., 3., 1.])
end program main

Ausgabe:

  3.741657
r = hypot ( r1, r2 ) Ab Fortran 2008. Gibt die euklidische Vektornorm () zurück. r1 und r2 seien reelle Zahlen. hypot steht vermutlich als Abkürzung für "Hypotenuse"

Bit-Verarbeitung

[Bearbeiten]
Funktion Beschreibung
l = bge ( i1, i2 ) Ab Fortran 2008. Gibt den Wert true zurück, wenn i1 bitweise größer oder gleich i2 ist, z.B.
program main
   implicit none

   print *, bge( B'101110110001', B'11001' )
   print *, bge( B'101', B'11001' )
   print *, bge( 10, -1 )
end program main

Ausgabe:

 T
 F
 F

Warum ist -1 bitweise größer als 10? Antwort: -1 entspricht binär B'11111111111111111111111111111111' und 10 entspricht binär B'1010' (siehe auch  Zweierkomplement)

l = bgt ( i1, i2 ) Ab Fortran 2008. Gibt den Wert true zurück, wenn i1 bitweise größer i2 ist
l = ble ( i1, i2 ) Ab Fortran 2008. Gibt den Wert true zurück, wenn i1 bitweise kleiner oder gleich i2 ist
l = blt ( i1, i2 ) Ab Fortran 2008. Gibt den Wert true zurück, wenn i1 bitweise kleiner i2 ist
i = leadz ( i1 ) Ab Fortran 2008. Gibt die Anzahl der führenden Null-Bits in i1 zurück. Bsp.:
program main
   implicit none

   print *, leadz( 20 )
end program main
Ausgabe:
  27

Die Dezimalzahl 20 entspricht der binären Zahl B'10100'. D.h. bei einer 32-bit-Zahl sind 27 führende Null-Bits vorhanden (27 + 5 = 32).

i = popcnt ( i1 ) Ab Fortran 2008. Gibt die Anzahl der 1-Bits in i1 zurück . Bsp.:
program main
   implicit none

   print *, popcnt( 25 )
   print *, popcnt( B'11001' )   
end program main

Ausgabe:

  3
  3

Zeichenketten-Verarbeitung

[Bearbeiten]

Erweitert

[Bearbeiten]
  • system_clock(i1, ir, i2) ... Das zweite Argument (count_rate) darf nun vom Datentyp integer oder real sein.
  • max, maxloc, maxval, min, minloc, minval ... Funktionieren nunmehr auch für Werte vom Datentyp character.
  • atan2(r1, r2), log(rx), sqrt(rx) ... Unterscheidung von positiven und negativen Nullen im Argument.



<<< zur Fortran-Startseite
<< Fortran 2003 Bibliotheken >>
< Ein- und Ausgabe Intrinsische Module >