FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017 M9 Διασύνδεση FORTRAN με άλλες γλώσσες Γεώργιος Παπαλάμπρου Επικ. Καθηγητής ΕΜΠ Εργαστήριο Ναυτικής Μηχανολογίας george.papalambrou@lme.ntua.gr ΕΜΠ/ΣΝΜΜ Εργαστήριο Ναυτικής Μηχανολογίας 1
Ενότητες Μαθήματος 1. Εισαγωγή στην γλώσσα προγραμματισμού FORTRAN. 2. Απλοί τύποι δεδομένων, σταθερές και μεταβλητές, εκφράσεις, απλές εντολές. 3. Δομές ελέγχου. 4. Διαδικασίες {=Συναρτήσεις (functions), υπορουτίνες (subroutines)}, Ενότητες/Mονάδες (modules). 5. Μεταφορά δεδομένων, είσοδος-έξοδος, εξωτερικά αρχεία δεδομένων 6. Φάσεις ανάπτυξης λογισμικού: προδιαγραφές, σχεδίαση, υλοποίηση, επαλήθευση, τεκμηρίωση, συντήρηση προγραμμάτων. 7. Σύνθετες δομές δεδομένων: πίνακες, εγγραφές, συνδεδεμένες λίστες. Δυναμική παραχώρηση μνήμης. 8. Βασικές έννοιες αντικειμενοστραφούς προγραμματισμού: αφηρημένοι τύποι δεδομένων, κλάσεις, αντικείμενα, μεταβλητές, μέθοδοι, ενθυλάκωση, κληρονομικότητα, πολυμορφισμός. 9. Διασύνδεση της FORTRAN με άλλες γλώσσες προγραμματισμού. 10. Επίλυση προβλημάτων με τη γλώσσα προγραμματισμού FORTRAN, Ανασκόπηση, Παλαιά θέματα εξετάσεων (Παρασκευή 2/6/2017)
Περιπτώσεις διασύνδεσης FRTRΝ με άλλες γλώσσες Διακρίνουμε τις εξής περιπτώσεις διασύνδεσης (1/2): 1. Διασύνδεση με την γλώσσα C (interoperability with C) H έκδοση Fortran 2003 διαθέτει τυποποιημένο (standard) μηχανισμό διασύνδεσης, δηλ. επικοινωνίας δεδομένων προγράμματος. Προυπόθεση είναι η χρήση κατάλληλων τύπων δεδομένων, μεταβλητών, pointers κλπ στο πρόγραμμα Fortran. Μπορεί να γίνει κλήση συνάρτησης C από την Fortran και το ανάποδο. Για περισσότερα στοιχεία βλέπε βιβλίο Metcalf et al., κεφ. 12. 3
Περιπτώσεις διασύνδεσης FRTRΝ με άλλες γλώσσες Διακρίνουμε τις εξής περιπτώσεις διασύνδεσης (1/2): 1. Διασύνδεση με την γλώσσα C (interoperability with C) 4
Περιπτώσεις διασύνδεσης FRTRΝ με άλλες γλώσσες Διακρίνουμε τις εξής περιπτώσεις διασύνδεσης (1/2): 1. Διασύνδεση με την γλώσσα C (interoperability with C) Από το βιβλίο Metcalf et al., κεφ. 12. 5
Διακρίνουμε τις εξής περιπτώσεις διασύνδεσης (2/2): 2. Διασύνδεση με το MATLAB, Mέσω δύο τρόπων A) διασύνδεση κώδικα Fortran που έχει ήδη γίνει compiled B) με κατάλληλη δομή προγράμματος Fortran για διασύνδεση με το MATLAB μέσω αρχείων τύπου MEX. Παρακάτω παρουσιάζονται και οι δύο τρόποι, όμως προτείνεται λόγω απλότητας η χρήση του τρόπου A2. 6
Διασύνδεση FRTRN με MATLAB Διασύνδεση FRTRΝ με το MATLAB, Τρόπος Α1. 1. Εκτέλεση στο περιβάλλον MATLAB (Command line) του εκτελέσιμου κώδικα (executable, *.exe) ενός αρχείου που ήδη τρέχει αυτόνομα στην FRTRN. Δεδομένα δίνονται από command line MATLAB. Βήματα: 1. Μεταφέρεται το αρχείο του εκτελέσιμου κώδικα σε Fortran (*.exe) σε directory με πρόσβαση από το MATLAB. 2. Καλείται το αρχείο exe με θαυμαστικό (!) (Χρήση θαυμαστικού επιτρέπει κλήση εντολών του λειτουργικού συστήματος (εδώ Windows). Έτσι πχ >>! Reverse) 3. Η είσοδος/έξοδος του προγράμματος γίνεται στο command line του MATLAB. 4. Μειονέκτημα: δεν αποθηκεύεται το αποτέλσμα σε μεταβλητή στο Workspace Τα αρχεία Reverse2.f95, Reverse2.exe υπάρχουν στην ιστοσελίδα του μαθήματος, /M9_codes 7
Διασύνδεση FRTRN με MATLAB Διασύνδεση FRTRΝ με το MATLAB, Τρόπος A2. 1. Εκτέλεση στο περιβάλλον MATLAB (Command line) του εκτελέσιμου κώδικα (executable) ενός αρχείου που ήδη τρέχει αυτόνομα στην FRTRN. Δεδομένα δίνονται από αρχείο. Βήματα: 1. Δημιουργείται αρχείο δεδομένων εισόδου (αρχείο input.txt) 2. Μεταφέρεται το αρχείο του εκτελέσιμου κώδικα σε Fortran (*.exe) σε directory με πρόσβαση από το MATLAB. 3. Στο MATLAB script run_fortran.m, με την εντολή system, καλείται το αρχείο Reverse2.exe 4. Η έξοδος του προγράμματος γίνεται στο command line του MATLAB. 5. Πλεονέκτημα: αποθηκεύεται το αποτέλεσμα σε μεταβλητή στο Workspace: results, status 6. H status γίνεται 0 για okay, ενώ γίνεται 1 για περίπτωση error Τα αρχεία Reverse2.f95, Reverse2.exe, input.txt, run_fortran.m υπάρχουν στην ιστοσελίδα του μαθήματος, /M9_codes 8
Διασύνδεση FRTRN με MATLAB αρχείο δεδομένων εισόδου (αρχείο input.txt) MATLAB script run_fortran.m, με την εντολή system, καλείται το αρχείο Reverse2.exe Αποθηκεύεται το αποτέλεσμα σε μεταβλητή στο Workspace 9
Διασύνδεση FRTRN με MATLAB Διασύνδεση FRTRΝ με το MATLAB, τρόπος Β 1. Μέσω αρχείων MATLAB τύπου MEX. (Πολύπλοκος τρόπος αλλά ισχυρός). 2. Ένα αρχείο MEX είναι ένα function γραμμένο στο MATLAB που καλεί ρουτίνες C, C++, Fortran. Με την εντολή ΜΕΧ γίνεται compiled μέσω MATLAB και compiler Fortran. 3. Απαιτεί εγκατεστημενο συμβατό compiler Fortran στο MATLAB (πχ INTEL). To περιβάλλον Plato δεν υποστηρίζεται από το MATLAB. Σχετικό documentation MATLAB: External interfaces 10
Διασύνδεση FRTRN με MATLAB Διασύνδεση FRTRΝ με το MATLAB, τρόπος Β 1. Μέσω αρχείων MATLAB τύπου MEΧ 11
Διασύνδεση FRTRN με MATLAB Β. Τρόποι διασύνδεσης FRTRΝ με το MATLAB 1. Μέσω αρχείων MATLAB τύπου MEX Βήματα: 12
Διασύνδεση FRTRN με MATLAB 13
Διασύνδεση MATLAB με Fortran: Παράδειγμα sincall.f Γίνεται χρήση subroutine mexfunction (Gateway function) Δεν είναι μία ρουτίνα που καλείται αλλά σηματοδοτεί το σημείο επικοινωνίας της γλώσσας με το Matlab. Παρατίθεται ο κώδικας. Έχει παραληφθεί η δήλωση μεταβλητών Για να κάνουμε build τον κώδικά γράφουμε τα ακόλουθα στο command window: Mex sincall.f fill.f To build γίνεται μέσω του εγκατεστημένου compiler FORTRAN. Για να το τρέξουμε γράφουμε στo command window : >> sincall Το παραπάνω πρόγραμμα βρίσκεται στο χώρο εγκατάστασης του Matlab: matlabroot '/extern/examples/refbook/sincall.f'