Problem with DOUBLE PRECISION and DBLE(integer)

Office office@hora-verlag.ro
Wed Dec 13 22:49:00 GMT 2006


Dear Sirs,

Please look at the attached Fortran file 'SORTINDX.FOR' with which I have a
problem when compiled with gfortran.

I have attached the input file 'INDEXPER.NOM' and the test output file
'test333', too.  The compilation ran with the options -O0 or -O3 (no
effect) and -fno-backslash, needed for a later step in the whole project.
My operating system is Windows XP Professional.

The program fulfills without mistake its sorting job for which it has been
written.  But as to the little portion of mathematics ...

Please look into the SUBROUTINE Get_Time (the last lines of the file).  The
test output in the attached file 'test333' shows that the DOUBLE PRECISION
numbers DBLE(Sammel(j)) have nothing to do with the INTEGERs Sammel(j).
Therefore the calculation of the DOUBLE PRECISION variable 'Sekunden' goes
astray.

The attempt to read a DOUBLE PRECISION variable 'Sek' from
Zeit_String(5:10) with FORMAT (F6.3) yielded a similar result.

Please let me know what may be the cause of this behaviour which makes
gfortran useless for my astronomical programs.

Perhaps you should know that exactly this 'SORTINDX.FOR' runs without any
mistake when compiled with Salford's FTN95 or the INTEL FORTRAN 95 compiler
-- or even with G95!

And I have the following question: How can one create libraries (static --
.LIB. -- and/or DLL's) with gfortran and its linker?

With best wishes from Romania for the gfortran community

Wolfgang Höppner.
-------------- next part --------------
C
      PROGRAM Sortiere_Index

C *** Sortiert ein Index-File alphabetisch mit Hilfe der Heap-sort-Subroutine
C     aus den "Numerical Recipes" und von allocatable arrays.

      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
      DOUBLE PRECISION NlnN_Fac
      INTEGER Fehler, Zeilen_Laenge, Seite, Seiten_Code, Stelle,
     * GET_COMMAND_ARGUMENT_Status
      LOGICAL Neuer_Code
      CHARACTER* 20 File_zal, File_nam, File_sor, File_log, File_master
      CHARACTER* 22 Forma
      CHARACTER*250 Zeile, W

      INTEGER, ALLOCATABLE :: Seiten_Zahlen (:),
     *                        Workspace_Seiten (:),
     *                        Workspace_Index (:)

      CHARACTER*  1, ALLOCATABLE :: Namen (:,:),
     *                              Anfangs_Buchstabe (:),
     *                              Workspace_Namen (:,:),
     *                              Workspace_AnfB (:)

      CHARACTER*250, ALLOCATABLE :: Namen_Code (:)

      DATA Forma / '(I4, 1X, A1, 1X, A250)' /

      DATA i_Fehler / 0 /

C *** Setzen der ersten Stopuhr fr die Gesamtzeit

      CALL Get_Time(Zeit1_anf)

C *** Lesen des Namens der zu sortierenden (Index-) Datei (ohne Extension)

      CALL GET_COMMAND_ARGUMENT(1, File_master, lenge,
     * GET_COMMAND_ARGUMENT_Status)
      FILE_nam = File_master
      FILE_zal = File_master
      FILE_sor = File_master
      FILE_log = File_master
      lfi = LEN_TRIM(File_master)

C *** ™ffnen der Datei mit den Seitenzahlen

      File_zal(lfi+1:lfi+4) = '.ZAL'
      OPEN  (11, FILE=File_zal, STATUS='OLD')

C *** ™ffnen der Datei mit den Namen

      File_nam(lfi+1:lfi+4) = '.NOM'
      OPEN  (12, FILE=File_nam, STATUS='OLD')

C *** ™ffnen der Ausgabedatei

      File_sor(lfi+1:lfi+4) = '.SOR'
      OPEN  (3, FILE=File_sor)

C *** Datei zum Festhalten nicht bercksichtigter Zeichen

      File_log(lfi+1:lfi+4) = '.LOG'
      OPEN  (4, FILE=File_log)

C *** Feststellen der Zahl der zu sortierenden Zeilen und der maximalen
C     Zeilenl„nge

      WRITE (*,*) ' '
      WRITE (*,*) ' Bestimmung der Zahl der Zeilen und der maximalen Zei
     *lenl„nge'
      WRITE (*,*) ' '
      iz = 0
      maxl = 0

      DO WHILE (i_Fehler .EQ. 0)
         READ  (12, 101, IOSTAT=i_Fehler) Zeile
         IF (i_Fehler .EQ. 0) THEN
            iz = iz + 1
            Zeilen_Laenge = LEN_TRIM(Zeile)
            maxl = MAX(maxl, Zeilen_Laenge)
            IF (mod(iz, 100) .EQ. 0) THEN
               WRITE (*, 102) iz
            END IF
         END IF
      END DO
      i_Fehler = 0
      IF (Zeile(1:1) .EQ. CHAR(26) .AND. Zeilen_Laenge .EQ. 1) THEN
         iz = iz - 1
      END IF
      NlnN_Fac = DBLE(iz)*LOG(DBLE(iz))
      REWIND (12)

C *** Allozieren der Arrays und Hilfsarrays

      ALLOCATE(Seiten_Zahlen(iz), STAT=Fehler)
      IF (Fehler .NE. 0) THEN
         WRITE (*,*)
         WRITE (*,*) 'Fehler ', Fehler, ' beim Allozieren von ',
     *    'Seiten_Zahlen'
         STOP
      END IF

      ALLOCATE(Namen(maxl, iz), STAT=Fehler)
      IF (Fehler .NE. 0) THEN
         WRITE (*,*)
         WRITE (*,*) 'Fehler ', Fehler, ' beim Allozieren von ',
     *    'Namen'
         STOP
      END IF

      ALLOCATE(Anfangs_Buchstabe(iz), STAT=Fehler)
      IF (Fehler .NE. 0) THEN
         WRITE (*,*)
         WRITE (*,*) 'Fehler ', Fehler, ' beim Allozieren von ',
     *    'Anfangs_Buchstabe'
         STOP
      END IF

      ALLOCATE(Workspace_Index(iz), STAT=Fehler)
      IF (Fehler .NE. 0) THEN
         WRITE (*,*)
         WRITE (*,*) 'Fehler ', Fehler, ' beim Allozieren von ',
     *    'Workspace_Index'
         STOP
      END IF

      ALLOCATE(Workspace_Seiten(iz), STAT=Fehler)
      IF (Fehler .NE. 0) THEN
         WRITE (*,*)
         WRITE (*,*) 'Fehler ', Fehler, ' beim Allozieren von ',
     *    'Workspace_Seiten'
         STOP
      END IF

      ALLOCATE(Workspace_Namen(maxl, iz), STAT=Fehler)
      IF (Fehler .NE. 0) THEN
         WRITE (*,*)
         WRITE (*,*) 'Fehler ', Fehler, ' beim Allozieren von ',
     *    'Workspace_Namen'
         STOP
      END IF

      ALLOCATE(Workspace_AnfB(iz), STAT=Fehler)
      IF (Fehler .NE. 0) THEN
         WRITE (*,*)
         WRITE (*,*) 'Fehler ', Fehler, ' beim Allozieren von ',
     *    'Workspace_AnfB'
         STOP
      END IF

      ALLOCATE(Namen_Code(iz), STAT=Fehler)
      IF (Fehler .NE. 0) THEN
         WRITE (*,*)
         WRITE (*,*) 'Fehler ', Fehler, ' beim Allozieren von ',
     *    'Namen_Code'
         STOP
      END IF

C *** Einlesen der Seitenzahlen und Namen; Aufbau der Arrays Seiten_Zahlen
C     (in dem Seitenzahl und Zeilenl„nge codiert sind) und Namen; Aufbau
C     des zu sortierenden Arrays Namen_Code.

      WRITE (*,*) ' '
      WRITE (*,*) ' Einlesen der Seitenzahlen und Namen'
      WRITE (*,*) ' '

      Neuer_Code = .FALSE.

      DO i = 1, iz
         READ  (11, 103) Seite
         READ  (12, 101) Zeile
         Zeilen_Laenge = LEN_TRIM(Zeile)
         Seiten_Zahlen(i) = Zeilen_Laenge*1000000 + Seite
         Stelle = 0
         W = ' '
         DO j = 1, Zeilen_Laenge
            Namen(j, i) = Zeile(j:j)
            k = ICHAR(Zeile(j:j))
            SELECT CASE (k)

C *** Gleichheitszeichen, Anfhrungszeichen, eckige Klammern, Apostrophe,
C     TeX-Trennzeichen, Klammern (diese ursprnglich --> CHAR(36)),
C     Asterixe, {\kursiv , \/}, \strut{}, {}, \hb{}, ...,
C     bleiben unbeachtet

               CASE (35, 39, 40:42, 61, 91, 93, 127, 169:170, 235:236,
     *          238, 251:252)

C *** Leerzeichen, \th{} bleiben Leerzeichen

               CASE (32, 253)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = CHAR(32)

C *** andere Sonderzeichen (insbesondere , -) trennen W”rter

               CASE (44, 46, 47, 58, 59, 63, 126)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = CHAR(36)

C *** Bindestrich ans h”hergewichtig als Komma &c.

               CASE (45)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = CHAR(37)

C *** Groábuchstaben --> 1 ... 26

               CASE (65:90)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = CHAR(k)

C *** Kleinbuchstaben --> Groábuchstaben

               CASE (97:122)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = CHAR(k - 32)

C *** Ziffern --> 41 ... 50

               CASE (48:57)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = CHAR(k)

C *** deutsche Umlaute (Ž, „ --> A, &c.)

               CASE (132, 142)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'A'
               CASE (153, 148)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'O'
               CASE (154, 129)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'U'

C *** á --> ss

               CASE (225)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle+1) = 'SS'
                  Stelle = Stelle + 1

C *** rum„nische vorcodiert Zeichen --> A, S, T

               CASE (134, 143)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'A'
               CASE (155, 128)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'S'
               CASE (164, 165)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'T'

C *** ƒ, Œ, ‹  --> a, i (auch vorcodierte Groábuchstaben)

               CASE (131, 246)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'A'
               CASE (139, 140, 245)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'I'

C *** akzentuierte Buchstaben (zun„chst nur  , ‚, ¢ --> a, e, o);
C     Sp„ter dazuprogrammiert : ¡ --> i
C                                --> E
C                               • --> O
C                               £ --> U
C                               ‡ --> C
C                               Š --> E
C                               
 --> A

               CASE (133, 160)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'A'
               CASE (135)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'C'
               CASE (130, 138, 144)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'E'
               CASE (161)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'I'
               CASE (149, 162)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'O'
               CASE (163)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'U'

C *** vorcodierte ungarische (und aus anderen Sprachen) lange Umlaute

               CASE (239)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'A'
               CASE (247)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'O'
               CASE (248)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'U'

C *** vorcodiertes \'O, \'U, \"e,

               CASE (168)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'E'
               CASE (241)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'O'
               CASE (249)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'U'

C *** vorcodierte niederl„ndische Buchstaben \ij{},

               CASE (171)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle+1) = 'IJ'
                  Stelle = Stelle + 1

C *** vorcodierte tschechische Buchstaben

               CASE (174, 242)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'C'
               CASE (176)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'E'
               CASE (173)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'R'
               CASE (172, 254)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'S'
               CASE (243)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'Y'
               CASE (175, 240)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'Z'

C *** vorcodierte polnische Buchstaben (\'c auch serbisch)

               CASE (177)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'A'
               CASE (166)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'C'
               CASE (178)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'E'
               CASE (250)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'L'
               CASE (244)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'N'
               CASE (167)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'S'

c *** d„nische Buchstaben (‘ --> a, í --> o)

               CASE (145)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'A'
               CASE (237)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'O'

c *** trkische Buchstaben \.I

               CASE (179)
                  Stelle = Stelle + 1
                  W(Stelle:Stelle) = 'I'

C *** Festhalten nicht bercksichtigter Zeichen

               CASE DEFAULT
                  WRITE (4, 104) i, j, k
                  Neuer_Code = .TRUE.

            END SELECT

         END DO

C *** Auffllen des Restes der Zeile mit Leerzeichen

         IF (Zeilen_Laenge .LT. maxl) THEN
            DO j = Zeilen_Laenge + 1, maxl
               Namen(j, i) = ' '
            END DO
         END IF

C *** Festhalten der Seitenzahl im codierten Namen

         WRITE (W(247:250), 109) Seite

C *** Festhalten des codierten Namens und des Anfangsbuchstabens

         Namen_Code(i) = W
         Anfangs_Buchstabe(i) = W(1:1)

C *** Meldung auf dem Bildschirm

         IF (MOD(i, 100) .EQ. 0) THEN
            WRITE (*, 105) i, iz
         END IF

      END DO

      IF (.NOT. Neuer_Code) THEN
         WRITE (4, *) ' '
      END IF

C *** Setzen der zweiten Stopuhr fr die Gesamtzeit

C     486/33:

C     T_estim = 1.0D-4*NlnN_Fac

C     Pentium

      T_estim = 2.0D-5*NlnN_Fac
      WRITE (*, 110) T_estim

      CALL Get_Time(Zeit2_anf)

C *** Sortieren des Arrays Namen_Code und entsprechende Umordnung der Arrays
C     Seiten_Zahlen und Namen.

      CALL Sort3_Namenindex(iz, maxl, Namen_Code, Seiten_Zahlen, Namen,
     * Anfangs_Buchstabe, Workspace_Index, Workspace_Seiten,
     * Workspace_Namen, Workspace_AnfB)

C *** Zeitstatistik

      CALL Get_Time(Zeit2_end)
      Zeit2 = Zeit2_end - Zeit2_anf
      Coeff = Zeit2 / NlnN_Fac

C *** Ausgabe der sortierten Namenliste

      WRITE (*,*) ' '
      WRITE (*,*) ' Ausgabe der sortierten Liste'
      WRITE (*,*) ' '

      DO i = 1, iz
         Seiten_Code = Seiten_Zahlen(i)
         Zeilen_Laenge = Seiten_Code / 1000000
         Seite = Seiten_Code - Zeilen_Laenge*1000000
         Zeile = ' '
         DO j = 1, Zeilen_Laenge
            Zeile(j:j) = Namen(j, i)
         END DO
         WRITE (Forma(19:21), 106) Zeilen_Laenge
         WRITE (3, Forma) Seite, Anfangs_Buchstabe(i),
     *    Zeile(1:Zeilen_Laenge)
         IF (MOD(i, 100) .EQ. 0) THEN
            WRITE (*, 107) i, iz
         END IF
      END DO

C *** Aufr„umen

      CLOSE (11)
      CLOSE (12)
      CLOSE (3)
      CLOSE (4)

      DEALLOCATE(Seiten_Zahlen, STAT=Fehler)
      DEALLOCATE(Namen, STAT=Fehler)
      DEALLOCATE(Anfangs_Buchstabe, STAT=Fehler)
      DEALLOCATE(Workspace_Index, STAT=Fehler)
      DEALLOCATE(Workspace_Seiten, STAT=Fehler)
      DEALLOCATE(Workspace_Namen, STAT=Fehler)
      DEALLOCATE(Workspace_AnfB, STAT=Fehler)
      DEALLOCATE(Namen_Code, STAT=Fehler)

C *** Zeitstatistik

      CALL Get_Time(Zeit1_end)
      Zeit1 = Zeit1_end - Zeit1_anf
      WRITE (*, 108) Zeit1, Zeit2, Coeff

      STOP

  101 FORMAT(A250)
  102 FORMAT(1H+, 'Gelesen Zeile', I6)
  103 FORMAT(I4)
  104 FORMAT('Zeile', I6, ', Zeichen ', I3, ': ASCII(', I3,
     * '): nicht bercksichtigt')
  105 FORMAT(1H+, 'Codiert Zeile', I6, ' von', I6)
  106 FORMAT(I3)
  107 FORMAT(1H+, 'Ausgegeben Zeile', I6, ' von', I6)
  108 FORMAT(1H0, 'Programm beendet; verstrichene Gesamtzeit: ',
     * F6.2, ' Sekunden', /,
     * 1H ,       '                  davon Sortierzeit:       ',
     * F6.2, ' Sekunden', /,
     * 1H ,       '                  Faktor von N ln N:       ',
     * 1PD11.3, ' Sekunden')
  109 FORMAT(I4)
  110 FORMAT(' Sortieren; gesch„tzte Zeit: ', F6.2, ' s')

      END

C -------------------------------------------------------------------------------

      SUBROUTINE Sort3_Namenindex(iz, maxl, Namen_Code, Seiten_Zahlen,
     * Namen, Anfangs_Buchstabe, Workspace_Index, Workspace_Seiten,
     * Workspace_Namen, Workspace_AnfB)

C *** Erstellt einen Index-Array, der dem nach GrӇe sortierten Array
C     Namen_Code entspricht, und ordnet die Arrays Seiten_Zahlen und
C     Namen entsprechend.
C     Entstanden aus der SUBROUTINE SORT3 der "Numerical Recipes" fr den
C     Zweck der Erstellung eines Namenverzeichnisses. Hier sind die 3 Arrays
C     nicht wie in SORT3 vom Typ REAL, sondern verschiedenen Typs, der
C     Array Namen hat sogar 2 Dimensionen, daher sind 3 verschiedene
C     Workspace-Arrays n”tig.
C     Der Array Namen_Code ist nur ein Hilfsarray und wird nicht
C     sortiert ausgegeben.

      IMPLICIT DOUBLE PRECISION (A-H, O-Z)
      INTEGER Seiten_Zahlen, Workspace_Seiten, Workspace_Index
      CHARACTER*  1 Namen, Workspace_Namen, Anfangs_Buchstabe,
     * Workspace_AnfB
      CHARACTER* 250 Namen_Code

      DIMENSION Namen_Code(iz), Seiten_Zahlen(iz), Workspace_Seiten(iz),
     * Workspace_Index(iz), Namen(maxl, iz), Anfangs_Buchstabe(iz),
     * Workspace_Namen(maxl, iz), Workspace_AnfB(iz)

      CALL INDEXX_Char(iz, Namen_Code, Workspace_Index)

C     DO i = 1, iz
C       WKSP(i) = Namen_Code(i)
C     END DO
C
C     DO i = 1, iz
C       Namen_Code(i) = WKSP(Workspace_Index(i))
C     END DO

      WRITE (*,*) ' '
      WRITE (*,*) ' Sichern der Seitenzahlen'
      WRITE (*,*) ' '

      DO i = 1, iz
        Workspace_Seiten(i) = Seiten_Zahlen(i)
        IF (MOD(i, 100) .EQ. 0) THEN
          WRITE (*, 101) i, iz
        END IF
      END DO

      WRITE (*,*) ' '
      WRITE (*,*) ' Zurckkopieren der Seitenzahlen'
      WRITE (*,*) ' '

      DO i = 1, iz
        Seiten_Zahlen(i) = Workspace_Seiten(Workspace_Index(i))
        IF (MOD(i, 100) .EQ. 0) THEN
          WRITE (*, 101) i, iz
        END IF
      END DO

      WRITE (*,*) ' '
      WRITE (*,*) ' Sichern der Namen'
      WRITE (*,*) ' '

      DO i = 1, iz
        DO j = 1, maxl
          Workspace_Namen(j, i) = Namen(j, i)
        END DO
        IF (MOD(i, 100) .EQ. 0) THEN
          WRITE (*, 101) i, iz
        END IF
      END DO

      WRITE (*,*) ' '
      WRITE (*,*) ' Zurckkopieren der Namen'
      WRITE (*,*) ' '

      DO i = 1, iz
        DO j = 1, maxl
          Namen(j, i) = Workspace_Namen(j, Workspace_Index(i))
        END DO
        IF (MOD(i, 100) .EQ. 0) THEN
          WRITE (*, 101) i, iz
        END IF
      END DO

      WRITE (*,*) ' '
      WRITE (*,*) ' Sichern der Anfangsbuchstaben'
      WRITE (*,*) ' '

      DO i = 1, iz
        Workspace_AnfB(i) = Anfangs_Buchstabe(i)
        IF (MOD(i, 100) .EQ. 0) THEN
          WRITE (*, 101) i, iz
        END IF
      END DO

      WRITE (*,*) ' '
      WRITE (*,*) ' Zurckkopieren der Anfangsbuchstaben'
      WRITE (*,*) ' '

      DO i = 1, iz
        Anfangs_Buchstabe(i) = Workspace_AnfB(Workspace_Index(i))
        IF (MOD(i, 100) .EQ. 0) THEN
          WRITE (*, 101) i, iz
        END IF
      END DO

      RETURN
  101 FORMAT(1H+, 'Erledigt Nr.', I6, ' von', I6)
      END

C ---------------------------------------------------------------------------

      SUBROUTINE INDEXX_Char(N,ARRIN,INDX)

C *** Entstanden aus SUBROUTINE INDEXX der "Numerical Recipes" zum Sortieren
C     von Zeichenfolgen (Zeilen)

      IMPLICIT DOUBLE PRECISION (A-H, O-Z)
      CHARACTER* 250 ARRIN, Q
      DIMENSION ARRIN(N),INDX(N)
      DO 11 J=1,N
        INDX(J)=J
11    CONTINUE
      L=N/2+1
      IR=N
10    CONTINUE
        IF(L.GT.1)THEN
          L=L-1
          INDXT=INDX(L)
          Q=ARRIN(INDXT)
        ELSE
          INDXT=INDX(IR)
          Q=ARRIN(INDXT)
          INDX(IR)=INDX(1)
          IR=IR-1
          IF(IR.EQ.1)THEN
            INDX(1)=INDXT
            RETURN
          ENDIF
        ENDIF
        I=L
        J=L+L
20      IF(J.LE.IR)THEN
          IF(J.LT.IR)THEN
            IF (LLT(ARRIN(INDX(J)), ARRIN(INDX(J+1)))) J=J+1
          ENDIF
          IF (LLT(Q, ARRIN(INDX(J)))) THEN
            INDX(I)=INDX(J)
            I=J
            J=J+J
          ELSE
            J=IR+1
          ENDIF
        GO TO 20
        ENDIF
        INDX(I)=INDXT
      GO TO 10
      END

      SUBROUTINE Get_Time(Sekunden)

C *** Ermittelt die Tageszeit in Sekunden mit Hilde der F90-Standard-
C     Subroutine CALL DATE_AND_TIME

      IMPLICIT DOUBLE PRECISION (A-H,O-Z)

      CHARACTER* 5 Zone_String
      CHARACTER* 8 Datum_String
      CHARACTER*10 Zeit_String
      INTEGER Sammel, Stunde
      DIMENSION Sammel(8)

      CALL DATE_AND_TIME(Datum_String, Zeit_String, Zone_String, Sammel)

      READ  (Zeit_String( 1: 2), 101) Stunde
      READ  (Zeit_String( 3: 4), 101) Minute
      READ  (Zeit_String( 5:10), 102) Sekunde

      Sekunden = 3600.0D0*DBLE(Stunde) + 60.0D0*DBLE(Minute) + Sekunde

  101 FORMAT(I2)
  102 FORMAT(F6.3)

      RETURN
      END

-------------- next part --------------
R”hm, Ernst
Reinerth, Karl
Barth, Karl
Barth, Karl
Glondys, Viktor
Depner, Willi
Klein, Albert (Bischof)
Heim, Karl
Fezer, Karl
Barth, Karl
Bornkam, Gunther
Herntrich, Volkmar
Schlink, Bernhard (Pfarrer)
Hitler, Adolf
Gollwitzer, Helmut
Dehn, Gnter
Reisner, Erwin
Gollwitzer, Helmut
Gollwitzer, Helmut
Glck#selig, Gerda Maria (Knstlernameý: Gorvin, Joana Maria)
Glck#selig, Gerda Maria (Knstlernameý: Gorvin, Joana Maria)
Fehling, Jrgen
Dehn, Gnter
Gollwitzer, Helmut
Grundgens, Gustav
M”ckel, Konrad
Staedel, Wilhelm
M”ckel, Konrad
G”lz, Richard (Pfarrer)
G”lz, Richard (Pfarrer)
G”lz, Richard (Pfarrer)
G”lz, Richard (Pfarrer)
G”lz, Richard (Pfarrer)
G”lz, Richard (Pfarrer)
G”lz, Richard (Pfarrer)
Stockmeier (Dekan)
G”lz, Richard (Pfarrer)
G”lz, Richard (Pfarrer)
Csaki-Copony, Grete
G”lz, Richard (Pfarrer)
Schmidt, Andreas
Berger, Gottlob
Berger, Gottlob
G”lz, Richard (Pfarrer)
G”lz, Richard (Pfarrer)
G”lz, Richard (Pfarrer)
G”lz, Richard (Pfarrer)
G”lz, Heiner (Sohn von Pfarrer Richard G*”lz)
G”lz, Richard (Pfarrer)
Csaki-Copony, Grete
Rauschnabel, Hans (NSDAP-Kreisleiter S*tuttgart)
Csaki-Copony, Grete
G”lz, Richard (Pfarrer)
G”lz, Richard (Pfarrer)
G”lz, Richard (Pfarrer)
Berger, Gottlob
Schmidt, Andreas
Berger, Gottlob
Himmler, Heinrich
Rosenberg, Alfred
Berger, Gottlob
Hitler, Adolf
Berger, Gottlob
Berger, Gottlob
Braun, Martin
Berger (Sohn)
Berger, Gottlob
Himmler, Heinrich
Berger, Gottlob
G”lz, Richard (Pfarrer)
G”lz, Heiner (Sohn von Pfarrer Richard G*”lz)
G”lz, Heiner (Sohn von Pfarrer Richard G*”lz)
Roth Hans Otto
Schmidt, Andreas
Molitoris, Karl
Luther, Martin
Honterus, Johannes
Luther, Martin
Wiener, Paul H*ermannst„dter Stadtpfarrer um 1550ý; erster Superintendent der Sachsen
Brukenthal, Samuel von
Maria Theresia
Luther, Martin
Honterus, Johannes
Barth, Karl
Niem”ller, Martin (Kirchenpr„sident)
Voget (Lehrvikarin in E*dinburgh)
Bartelt, Johannes (Oberkirchenrat)
Ritschel (Vikar in E*dinburgh)
Niem”ller, Martin (Kirchenpr„sident)
Bartelt, Johannes (Oberkirchenrat)
M”ckel, Gerhard
M”ckel, Gerhard
Heuss-Knapp, Elli (Frau des ersten Bundespr„sidenten Theodor Heuss)
Philippi, Hans
Staedel, Wilhelm
Philippi, Hans
M”ckel, Gerhard
M”ckel, Gerhard
M”ckel, Gerhard
Staedel, Wilhelm
Staedel, Wilhelm
Staedel, Wilhelm
Mller (-Langenthal), Friedrich (Bischof)
Mller (-Langenthal), Friedrich (Bischof)
Mller (-Langenthal), Friedrich (Bischof)
Staedel, Wilhelm
Roth Stephan Ludwig
Staedel, Wilhelm
M”ckel, Konrad
Staedel, Wilhelm
Staedel, Wilhelm
Staedel, Wilhelm
Staedel, Wilhelm
Staedel, Wilhelm
M”ckel, Gerhard
M”ckel, Gerhard
Capesius, Viktor
M”ckel, Gerhard
Capesius, Viktor
Capesius, Viktor
M”ckel, Gerhard
M”ckel, Gerhard
M”ckel, Gerhard
M”ckel, Gerhard
Niem”ller, Martin (Kirchenpr„sident)
Plesch, Erhard (1958--1977 Vorsitzender der L*andsmannschaft der Siebenbrger Sachsen
M”ckel, Gerhard
Philippi, Paul
M”ckel, Andreas
Wellmann, Martin
Hoch, Karl
Zillich, Heinrich
Hoch, Karl
Nietzsche, Friedrich
Roth Hans Otto
Hoch, Karl
Roth Hans Otto
Zillich, Heinrich
Oberth, Hermann
Siegmund, Heinrich
Zillich, Heinrich
Picard, Walter
Landsberg (Ministerialdirigent)
Mller, Else
Mller, Else
Philippi, Hans
Plesch, Erhard (1958--1977 Vorsitzender der L*andsmannschaft der Siebenbrger Sachsen
Philippi, Hans
Gollwitzer, Helmut
Gollwitzer, Helmut
Bovet, Theodor (Schweizer Arzt und Eheberater, geb. 1900)
M”ckel, Gerhard
Staedel, Wilhelm
Liess, Otto Rudolf
Staedel, Wilhelm
Markus, Gustav
Philippi, Hans
Reiser, Herwarth
Staedel, Wilhelm
Staedel, Wilhelm
Staedel, Wilhelm
Staedel, Wilhelm
Liess, Otto Rudolf
Reiser, Herwarth
Reiser, Herwarth
Philippi, Hans
Liess, Otto Rudolf
Markus, Gustav
Staedel, Wilhelm
Staedel, Wilhelm
Liess, Otto Rudolf
Staedel, Wilhelm
Staedel, Wilhelm
Barth, Karl
Staedel, Wilhelm
Staedel, Wilhelm
Staedel, Wilhelm
Bonhoeffer, Dietrich
Haeften, Hans von
Staedel, Wilhelm
Staedel, Wilhelm
Liess, Otto Rudolf
Mitscherlich, Alexander
Mller (-Langenthal), Friedrich (Bischof)
Klein, Albert (Bischof)
Bruckner, Wilhelm (1977--1983 Vorsitzender der L*andsmannschaft der Siebenbrger Sachsen
Bruckner, Wilhelm (1977--1983 Vorsitzender der L*andsmannschaft der Siebenbrger Sachsen
M”ckel, Gerhard
Rottmann (Pfarrer)
Appel, Dr.
Henrich, Hans (Pfarrer)
M”ckel, Gerhard
Mller (-Langenthal), Friedrich (Bischof)
Vorster (Pfarrer)
Roth Erich
Barth, Karl
Krimm, Herbert
M”ckel, Konrad
Henrich, Hans (Pfarrer)
Roth Erich
Schempp, Paul (Pfarrer)
Krimm, Herbert
Henrich, Hans (Pfarrer)
Appel, Dr.
Mller (-Langenthal), Friedrich (Bischof)
Thullner, Hans (Pfarrer)
Schempp, Paul (Pfarrer)
Roth Erich
Scherer, Sepp (Pfarrer)
Giess, Ludwig
Etzold (Pfarrer)
Scherer, Sepp (Pfarrer)
Giess, Ludwig
Lurtz, Hans
Mller, Kurt (Pfarrer)
Roth Erich
Philippi, Hans
Reimesch, Fritz Heinz (Vorsitzender des Hilfskomitees)
Wittram, Reinhard
Philippi, Hans
Roth Erich
Philippi, Hans
Philippi, Hans
Spiegel-Schmidt, Friedrich (Pfarrer)
Roth Erich
Scherer, Sepp (Pfarrer)
Lempp, W. (Pr„lat)
Philippi, Hans
Scherer, Sepp (Pfarrer)
Bonhoeffer, Dietrich
Luther, Martin
Luther, Martin
Jens, Walter
Jens, Walter
Herbort, Heinz Josef
Bonhoeffer, Dietrich
Hitler, Adolf
Lessing, Gotthold Ephraim
Bloch, Ernst
Luxemburg, Rosa
Scharff, Kurt
Gollwitzer, Helmut
Albertz, Heinrich
B”ll, Heinrich
Tillich, Paul Johannes
Barth, Karl
Barth, Karl
Lessing, Gotthold Ephraim
Kierkegaard, Síren
Luther, Martin
Kng, Hans
Luther, Martin
Mntzer, Thomas
Erasmus von Rotterdam
Erasmus von Rotterdam
JaurŠs, Jean
Bebel, August
Erasmus von Rotterdam
Kng, Hans
Metz, Johann Baptist
Erasmus von Rotterdam
Tucholsky, Kurt
Luther, Martin
Luther, Martin
Bultmann, Rudolf
Luther, Martin
Luther, Martin
Luther, Martin
Luther, Martin
Luther, Martin
Brecht, Bertold (Bert)
G*orvin, Joana Mariaý: siehe G*lck#selig, Gerda Maria

-------------- next part --------------
Datum_String 20061213  Zeit_String 181250.171  Zone_String +0200;  Sammel     2006      12      13     120      18      12      50     171
 2.00600000000D+03 1.20000000000D+01 1.30000000000D+01 1.20000000000D+02 1.80000000000D+01 1.20000000000D+01 5.00000000000D+01 1.71000000000D+02
 6.55701710000D+04
Datum_String 20061213  Zeit_String 181250.187  Zone_String +0200;  Sammel     2006      12      13     120      18      12      50     187
 2.00600000000D+03 1.20000000000D+01 1.30000000000D+01 1.20000000000D+02 1.80000000000D+01 1.20000000000D+01 5.00000000000D+01 1.87000000000D+02
 6.55701870000D+04
Datum_String 20061213  Zeit_String 181250.218  Zone_String +0200;  Sammel     2006      12      13     120      18      12      50     218
 2.00600000000D+03 1.20000000000D+01 1.30000000000D+01 1.20000000000D+02 1.80000000000D+01 1.20000000000D+01 5.00000000000D+01 2.18000000000D+02
 6.55702180000D+04
Datum_String 20061213  Zeit_String 181250.234  Zone_String +0200;  Sammel     2006      12      13     120      18      12      50     234
 2.00600000000D+03 1.20000000000D+01 1.30000000000D+01 1.20000000000D+02 1.80000000000D+01 1.20000000000D+01 5.00000000000D+01 2.34000000000D+02
 6.55702340000D+04


More information about the Fortran mailing list