Fortran Abgrenzung von Haupt- und Unterprogramm



  • Hallo zusammen,
    wir haben von unserem Dozenten ein Fortran-Programm zur Ermittlung eines lokalen Optimums mit einer beschränkten multivariablen Gütefunktion bekommen. Für diesen Algorithmus müssen wir lediglich ein Unterprogramm schreiben. Er hat uns hierfür ein Beispiel mit dem PDF OPti1 mit an die Hand gegeben. Ich wollte mich gerade ein wenig mit dem Programm vertraut machen und habe hierfür mal, das aufrufende sowie das Unterprogramm an das Ende des vorgegebenen Quellcodes mit hinzugefügt. Erhofft habe ich mir hierdurch, dass ich auf die selben Ergebnisse stoße, wie im Beispiel auf S.204 f. Leider bekomme ich die Fehlermeldung.
    GLOBEX.f90:1:72:

    INTEGER inp,iout
    1
    GLOBEX.f90:820:72:

    EXTERNAL ROSE1 , ROSE2
    2
    Error: Two main PROGRAMs at (1) and (2)

    Könnt ihr mir vlt. weiterhelfen? Mir ist nicht bewusst wie ich das Unterprogramm von dem Hauptprogramm richtig abgrenzen kann.

    Ich wäre euch sehr dankbar wenn ihr mir weiterhelfen würdet.

    MFG
    Georg

    Quellcode als PDF:
    https://www.file-upload.net/download-13258257/GLOBEX002.pdf.html

    OPT1 PDF:
    https://www.file-upload.net/download-13258267/Opti1.pdf.html



  • Links zu PDFs (auch noch mit hunderten von Seiten)? Selbst wenn ich Ahnung von Fortran hätte, würde ich mir das nicht ansehen.



  • Füg deinen Code bitte als Code ein (die eigentliche Funktion kannst du kürzen, interessiert vermutlich nicht). Dann schaut sich das vielleicht jemand an.



  • @mechanics
    Ich habe zwei Hauptprogramme, mir ist jedoch nicht bewusst wie ich die vereinen kann, dass nicht diese Fehlermeldung kommt.

    C:\Users\T\Desktop\ZSS\GLOBEX.FOR:3.72:

      INTEGER inp,iout                                                  
                                                                        1
    

    C:\Users\T\Desktop\ZSS\GLOBEX.FOR:822.72:

      DIMENSION U(2),DU(2),S(2,5)                                       
                                                                        2
    

    Error: Two main PROGRAMs at (1) and (2)

    Um jegliche Hilfe bin ich mit Dank verbunden!

    Gruß Georg

    
    
          INTEGER inp,iout
          REAL*8 PAR
          COMMON /DIAG/ INP,IOUT
          COMMON /RUECK/  PAR(50) 
    
          inp=5
          iout=6
          OPEN (UNIT=inp ,FILE="C:\Users\T\Desktop\ZSS\GLOBEX_EINGABE.inp",
         &      ACCESS='sequential',STATUS='unknown')
          OPEN (UNIT=IOUt,FILE="C:\Users\T\Desktop\ZSS\GLOBEX_AUSGABE.out",
         &      ACCESS='sequential',STATUS='unknown')
    
    
          WRITE(IOUT,100)
      100 format(///,1x,'.................................................'
         #        ,/,1x,'.                                               .'
         #        ,/,1x,'. Rosenbrock Bananenfunktion mit k=2 und nres=2 .' 
         #        ,/,1x,'.                                               .'
         #        ,/,1x,'.................................................'
         #        ,//)
    
    
          call EXTRE
    
    
     
          
               close(unit=5)
          close(unit=6)
          stop
          end
     ... Code ... 
    

    Zweites Hauptprogramm

          DIMENSION U(2),DU(2),S(2,5)
          EXTERNAL ROSE1 , ROSE2
          U(1)=-2
          U(2)=1.0
          DU(1)=0.1
          DU(2)=0.1
          CALL EXTREM (ROSE1,2,U,DU,S,1.E-10,1.E-10,-40,FOPT,2)
          U(1)=-2
          U(2)=1.0
          DU(1)=0.1
          DU(2)=0.1
          CALL EXTREM (ROSE2,2,U,DU,S,1.E-10,1.E-10,-40,FOPT,2)
          STOP
          END
     ... Code ... 
    


  • Ich hätte jetzt behauptet, dass ein Fortranprogramm mit program beginnt...



  • @manni66 sagte in Fortran Abgrenzung von Haupt- und Unterprogramm:

    Ich hätte jetzt behauptet, dass ein Fortranprogramm mit program beginnt...

    Das habe ich auch öfters gesehen, jedoch der Algorithmus, welchen unser Dozent uns gegeben hat nicht. Ich habe es auch schon versucht mit:
    PROGRAM A
    ......
    END PROGRAM A Es liegt viel mehr daran, das es einmal mit Integer beginnt und einmal mit Dimension beginnt.



  • Dein Dozent schreibt ja hoffentlich nicht mehr Fortran 77.

    Wenn man google benutzen kann, findet man ganz schnell https://de.m.wikibooks.org/wiki/Fortran:_Fortran_95:_Unterprogramme



  • @manni66
    Danke habs geschafft. Jetzt stehe ich vor dem Problem, dass das input-und output file nicht richtig eingebunden werden. Folgende Fehlermeldung kommt.
    ld:C:\Users\T\Desktop\KL\GLOBEX_EINGABE.inp: file format not recognized; treating as linker script
    ld:C:\Users\T\Desktop\KL\GLOBEX_EINGABE.inp:1: syntax error

    Was kann ich hier machen?



  • @georg2222

    input-und output file nicht richtig eingebunden werden

    Ein- und Ausgaben werden im Programm durchgeführt und nicht mit dem Linker zum Programm gebunden. Ich bin mir ziemlich sicher, dass das in Fortran nicht anders ist.



  • @manni66

    Also ich frag mich grad, warum er uns dann diesen Algorithmus mit eingebundenem input- und output datei gegeben hat. Oh mein Gott ich werde verrückt!