gfortran και g77 - προβλήματα κατά την εκτέλεση

...IDE, compilers, κλπ

Συντονιστής: konnn

Re: Intel Fortran Compiler

Δημοσίευσηαπό scott » 30 Ιουν 2009, 01:22

Dimitris έγραψε:Aυτο συμβαίνει γιατί μάλλον στο πρόγραμμά σου έχεις κάποιο read. Αν θες ανέβασε τον κώδικα να το δούμε.


Έχεις δίκιο.
Τελικά όλα οκ. Πολλά ευχαριστώ, επιτέλους τσουλάει η fortran...
(το να καταφέρω να τρέξω ένα απλοϊκό προγραμματάκι είναι βασικό για να προχωρήσω σε επόμενα!)

Παραμένει όμως η απορία μου: Με αυτόν τον τρόπο τρέχω και κώδικα g77;
Με τον τρόπο που μου είπες να κάνω compile ουσιαστικά δεν χρησιμοποιώ την 95;
Δεν θα μου βγάλει κάποια προβλήματα αν με 95 κάνω compile κώδικα γραμμένο για 77;
scott
babeTUX
babeTUX
 
Δημοσιεύσεις: 16
Εγγραφή: 29 Ιουν 2009, 14:15
Εκτύπωση

Re: gfortran και g77 - προβλήματα κατά την εκτέλεση

Δημοσίευσηαπό Dimitris » 30 Ιουν 2009, 10:16

H fortran 90/95 είναι backwards compatible. Οπότε είτε χρησιμοποιείς 90/95 ή 77 είναι το ίδιο πράγμα. Η μορφή των αρχείων (ελεύθερο-σταθερό) μπορεί να επηρεαστεί και από την επιλογή -ffree-form ή -ffixed-form. Για περισσότερες λεπτομέρειες δες εδώ: http://linux.die.net/man/1/gfortran Η διαφορά 77 - 90 είναι ότι η 90 έχει επιπλέον δυνατότητες, όπως modules, κ.α. Το πρόβλημα θα δημιουργηθεί αν πας να χρησιμοποιήσεις δυνατότητες της 90 με τον g77 compiler.
Άβαταρ μέλους
Dimitris
saintTUX
saintTUX
 
Δημοσιεύσεις: 1357
Εγγραφή: 13 Μάιος 2008, 13:57
Τοποθεσία: Θεσσαλονίκη
Εκτύπωση

Re: gfortran και g77 - προβλήματα κατά την εκτέλεση

Δημοσίευσηαπό Dimitris » 30 Ιουν 2009, 10:37

Mερικές γενικές συμβουλές για fortran. Μάθε πώς λειτουργούν τα common blocks, γιατί παλιοί κώδικες που βρίσκονται στο διαδίκτυο τα χρησιμοποιούν κατά κόρον, αλλά μην προγραμματίζεις με common blocks. Αντ'αυτού μάθε να χρησιμοποιείς τα modules, αλλά και πάλι απέφυγε τις global μεταβλητές. Χρησιμοποίησε νέα types για να δώσεις λίγη αντικειμενοστρέφεια στον κώδικα, και να οργανώνεις καλύτερα τις δομές δεδομένων. Χρησιμοποιησε τις allocatables arrays, είναι πιο ασφαλείς σε σχέση με τις automatic. Μάθε για τους pointers. Όχι για τους cray pointers, που μπορούν να παιδέψουν αφάνταστα, αλλά για τους f90 pointers. Δίνουν νέες δυνατότητες για τη διαχείρηση μνήμης (αλλά λίγο δύσκολες στην εκμάθηση και debugging).

Ρίξε μια ματιά στο μεγαλύτερο ίσως αποθετήριο κώδικα fortran: www.netlib.org Αν δεν προγραμματίζεις κάτι πολύ εξοτικό, είναι πολύ πιθανό να το έχει προγραμματίσει κάποιος άλλος πριν από εσένα. (Πρόσεχε την άδεια χρήσης αν γράφεις εμπορικό κώδικα) Έχει συναρτήσεις από παρεμβολή, ολοκήρωση, επίλυση αλγεβρικών αλλά και διαφορικών εξισώσεων (και μερικές διαφορικές). Μάθε να διαβάζεις και να χρησιμοποιείς έτοιμο κώδικα, θα σου χρησιμεύσει αφάνταστα.

Τέλος, μάθε για τα makefiles. Θα σε βοηθήσουν, όταν τα αρχεία πηγαίου κώδικα αυξηθούν, να έχεις μια εποπτεία κατά το compile/build χωρίς να γράφεις με το χέρι όλα τα αρχεία. (Υπάρχει οδηγός εδώ στο forum) Θα σου φανεί επίσης χρήσιμο το gnuplot για τη σχεδίαση των αποτελεσμάτων και το interface για fortran http://orion.math.iastate.edu/burkardt/ ... nufor.html ή το http://gnuplotfortran.sourceforge.net/
Να μη ξεχάσω να πω ότι μπορείς να προσθέσεις και gui στα προγράμματά σου φτιάχνοντας c/fortran interface (αλλά αυτό είναι για προχωρημένους).

Αυτά για την ώρα. Αν θυμηθώ τίποτε θα σου πω. Καλή διασκέδαση και μη ξεχνάς ότι η fortran είναι η καλύτερη γλώσσα προγραμματισμού
http://www.pbm.com/~lindahl/real.programmers.html
http://www.pbm.com/~lindahl/mel.html
Άβαταρ μέλους
Dimitris
saintTUX
saintTUX
 
Δημοσιεύσεις: 1357
Εγγραφή: 13 Μάιος 2008, 13:57
Τοποθεσία: Θεσσαλονίκη
Εκτύπωση

Re: gfortran και g77 - προβλήματα κατά την εκτέλεση

Δημοσίευσηαπό scott » 30 Ιουν 2009, 12:55

Σε ευχαριστώ για τις συμβουλές.
Προφανώς δεν καταλαβαίνω 100% αυτά που μου λες, αλλά παίρνω μία ιδέα προς
τα πού να κινηθώ.
Σίγουρα (αν συνεχίσω να ασχολούμαι με fortran) θα τα καταλάβω καλύτερα στο μέλλον.
scott
babeTUX
babeTUX
 
Δημοσιεύσεις: 16
Εγγραφή: 29 Ιουν 2009, 14:15
Εκτύπωση

Re: gfortran και g77 - προβλήματα κατά την εκτέλεση

Δημοσίευσηαπό scott » 08 Ιούλ 2009, 20:11

Μία ερώτηση για τις υπορουτίνες:

Όταν έχω στο πρόγραμμά μου πίνακες και αρχεία που χρησιμοποιούνται μόνο από κάποια υπορουτίνα,
τότε τα (πχ για το πρόγραμμά μου)

dimension T(103), x(103)
open (3, file='therm')
open (4, file='thesix')

μπαίνουν κάτω από την αρχή του προγράμματος, κάτω από την αρχή της υπορουτίνας ή και στις δύο θέσεις;

Επίσης: Ξέρετε κάποιο βολικό εγχειρίδιο για fortran 77; (σε pdf)

Ευχαριστώ.
scott
babeTUX
babeTUX
 
Δημοσιεύσεις: 16
Εγγραφή: 29 Ιουν 2009, 14:15
Εκτύπωση

Re: gfortran και g77 - προβλήματα κατά την εκτέλεση

Δημοσίευσηαπό Dimitris » 09 Ιούλ 2009, 01:06

Αν χρησιμοποιούνται μόνο από την υπορουτίνα σου, τότε φυσικά μόνο μέσα στην υπορουτίνα θα τα βάλεις.
Δοκίμασε το παράδειγμα:
Κώδικας: Επιλογή όλων
program main

call bla()
write(3,*) 'main'
end

subroutine bla()

open(3,file='hallo')
write(3,*) 'bla'
end

και μετά αυτό:
Κώδικας: Επιλογή όλων
program main

call bla()
write(3,*) 'main'
end

subroutine bla()

open(3,file='hallo')
write(3,*) 'bla'
close(3)
end

Παρατήρησέ τα, και δες τι αρχεία δημιουργεί και τι γράφει το καθένα. Ο αριθμός αυτός (αριθμός λογικής μονάδας=logical unit) είναι γνωστός στο πρόγραμμά σου άσχετα που θα χρησιμοποιηθεί.
Κώδικας: Επιλογή όλων
program main

call bla()
write(3,*) 'main'
open(3,file='blall')
write(3,*) 'after'
end

subroutine bla()

open(3,file='hallo')
write(3,*) 'bla'
end

Εδώ με το που ξανανοίγεις ένα αρχείο με τον αριθμό 3, το παλιό κλείνει.
Kαι τώρα δοκίμασε:
Κώδικας: Επιλογή όλων
program main

call bla()
write(3,*) 'main'
open(3,file='blall')
write(3,*) 'after'
call boo()
end

subroutine bla()

open(3,file='hallo')
write(3,*) 'bla'
end

subroutine boo()
write(3,*)'boo'
end

Είναι περασμένη η ώρα και δε μπορώ να τα εξηγήσω περισσότερο. Αν δεν βγάλεις άκρη από τα παραδείγματα ξαναρώτα. Αύριο θα έχω πιο καθαρό μυαλό.

Για βιβλιό pdf δεν έχω ιδέα, εγώ μεγάλωσα με το "προγραμματισμός 90/95 για επιστήμονες και μηχανικούς" του Ματαρά και Κουτελιέρη.
Άβαταρ μέλους
Dimitris
saintTUX
saintTUX
 
Δημοσιεύσεις: 1357
Εγγραφή: 13 Μάιος 2008, 13:57
Τοποθεσία: Θεσσαλονίκη
Εκτύπωση

Re: gfortran και g77 - προβλήματα κατά την εκτέλεση

Δημοσίευσηαπό scott » 09 Σεπ 2009, 11:47

Καλημέρα. Έχω ένα θέμα με την εκτέλεση του παρακάτω προγράμματος στην fortran.
Κάνει κανονικά compile, αλλά στην εκτέλεση αντί να μου εκτυπώνει τους αριθμούς 4 και 7
εκτυπώνει τους αριθμούς
-1208818298
0.000000000

Δεν μπορώ να καταλάβω τι δεν κάνω καλά με τις υπορουτίνες...
Ευχαριστώ.

############################################
program test2

call initial

write (*,*) L
write (*,*) r

stop
end




subroutine initial

L=4
r=7


return
end
############################################
scott
babeTUX
babeTUX
 
Δημοσιεύσεις: 16
Εγγραφή: 29 Ιουν 2009, 14:15
Εκτύπωση

Re: gfortran και g77 - προβλήματα κατά την εκτέλεση

Δημοσίευσηαπό Dimitris » 09 Σεπ 2009, 13:09

Kαλημέρα,

στη fortran αλλά και σε όλες τις γλώσσες γενικότερα οι μεταβλητές βρίσκονται στη μνήμη όταν και η αντίστοιχη συνάρτηση εκτελειται. Το scope, όπως λέγεται, των μεταβλητών περιορίζεται από τις συναρτήσεις. Εκτός κι αν είναι ολικές (global) οι μεταβλητές. Στην περίπτωσή σου τα L, r στο κυρίως πρόγραμμα είναι διαφορετικά απο τα L, r στην initial. (Συμβουλή πάντα να χρησιμοποιείς implicit none στα προγραμματα και τις συναρτήσεις, θα γλιτώσεις πολλά προβλήματα.)

Τώρα το πρόβλημα είναι αρκετα γενικό όπως το θέτεις και δε ξέρω τι γνώσεις έχεις και τι θες να κάνεις. Μία πρόχειρη λύση είναι να χρησιμοποιήσεις common blocks (οπότε θα είναι global οι μεταβλητές), άλλη να επιστρέψεις τα L, r ως οutput arguments (οπότε θα έχεις μόνο τοπικές μεταβλητές), τρίτη να χρησιμοποιήσεις modules. Αλλά θα σου πρότεινα να πάρεις ένα βιβλίο fortran ή να διαβάσεις στο internet.

Κώδικας: Επιλογή όλων
program main
implicit none
integer :: L, r
call initial(L,r)
print*, L, r
end
subroutine initial(L,r)
implicit none
integer:: L, r
L=4
r=7
end


Άλλη λύση
Κώδικας: Επιλογή όλων
program main
implicit none
integer::L, r
common /cname/ L, r
call initial
print L, r
end

subroutine initial
implicit none
integer:: L, r
common /cname/ L, r
L=4
r=7
end
Άβαταρ μέλους
Dimitris
saintTUX
saintTUX
 
Δημοσιεύσεις: 1357
Εγγραφή: 13 Μάιος 2008, 13:57
Τοποθεσία: Θεσσαλονίκη
Εκτύπωση

Re: gfortran και g77 - προβλήματα κατά την εκτέλεση

Δημοσίευσηαπό Dimitris » 09 Σεπ 2009, 13:12

Και να προσθέσω ότι αν δε θες να ταλαιπωρηθείς (αλλά δε θα μάθεις κιολας τη μαγεία της διαχείρησης μνήμης) μη χρησιμοποιείς common blocks. Μπορούν να σου βγάλουν bugs για τα οποία θα ψάχνεις μέρες. Τα modules είναι πολύ πιο εύχρηστα, και επιτρέπουν αντικειμενοστραφή προγραμματισμό! Αλλά μόνο σε fortran 90/95.
Άβαταρ μέλους
Dimitris
saintTUX
saintTUX
 
Δημοσιεύσεις: 1357
Εγγραφή: 13 Μάιος 2008, 13:57
Τοποθεσία: Θεσσαλονίκη
Εκτύπωση

Re: gfortran και g77 - προβλήματα κατά την εκτέλεση

Δημοσίευσηαπό scott » 11 Σεπ 2009, 18:56

Σε ευχαριστώ Δημήτρη.
Με βάση το προγραμματάκι σου και ένα βιβλίο έφτιαξα έναν κώδικα που δουλεύει!
Τρεις μέρες τώρα πεδεύομαι, απλά δεν είχα σύνδεση εκεί που διαβάζω και δεν μπόρεσα
να σου απαντήσω.
scott
babeTUX
babeTUX
 
Δημοσιεύσεις: 16
Εγγραφή: 29 Ιουν 2009, 14:15
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Εφαρμογές για Ανάπτυξη Λογισμικού

cron