Zusammenfassung globaler Daten
MODULE KINDS ! statt COMMON INTEGER, PARAMETER :: I4 = SELECTED_INT_KIND(4) ! compiler-abhaengig INTEGER, PARAMETER :: I2 = SELECTED_INT_KIND(2) ! compiler-abhaengig INTEGER, PARAMETER :: R4 = KIND(1.0) INTEGER, PARAMETER :: R8 = SELECTED_REAL_KIND(2*PRECISION(1.0_R4)) END MODULE KINDS ... USE KINDS REAL(KIND=R8) :: A, B
Kapselung von Definitionen, glob. Daten und Funktionen
MODULE RATIONAL_ARITHMETIC TYPE Ratio INTEGER :: num, den END TYPE Ratio PRIVATE cancel CONTAINS TYPE(Ratio) FUNCTION ratmul(r1, r2) IMPLICIT NONE TYPE(Ratio), INTENT(IN) :: r1, r2 ratmul%num = r1%num * r2%num ratmul%den = r1%den * r2%den CALL cancel(ratmul) END FUNCTION ratmul SUBROUTINE cancel(r) ... END SUBROUTINE cancel END MODULE RATIONAL_ARITHMETIC PROGRAM testrat USE RATIONAL_ARITHMETIC TYPE(Ratio) :: a, b, c a=Ratio(2,5) b=Ratio(1,6) c = ratmul(a,b) PRINT*, c END PROGRAM testrat
Umnennen bei Namenskonflikten
USE MATHPACK ! enthaelt Funktion prod USE STATPACK, sprod => prod ! prod wird als sprod aufgerufen