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
GeorgQuellcode als PDF:
https://www.file-upload.net/download-13258257/GLOBEX002.pdf.htmlOPT1 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 errorWas kann ich hier machen?
-
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!