ΜΑΣ 473: Μέθοδοι Πεπερασμένων Στοιχείων Χειμερινό Εξάμηνο 207 ΟΜΑΔΙΚΗ ΕΡΓΑΣΙΑ Γενικές πληροφορίες: Η εργασία θα πρέπει να έχει γίνει από εσάς αντιγραφή από οποιαδήποτε πηγή θα έχει σαν αποτέλεσμα τον μηδενισμό του βαθμού της εργασίας. Χρήση πηγής και αναφορά τις στη βιβλιογραφία επιτρέπεται. Η εργασία που θα παραδώσετε θα πρέπει να είναι καθαρογραμμένη και κατανοητή από οποιονδήποτε. Ο κώδικάς της MATLAB που θα γράψετε πρέπει να εμφανίζεται μόνο σε ένα Παράρτημα/Appendix. Ημερομηνία παράδοσης: Δεκεμβρίου, 207. Μην ξεχνάτε το νόμο του Murphy, ο οποίος λέει ότι αν κάτι μπορεί να πάει στραβά, θα πάει, για αυτό ξεκινάτε την εργασία έγκαιρα. Δεν θα δοθεί καμία παράταση.. Εισαγωγή Θεωρούμε το εξής πρόβλημα συνοριακών τιμών (ΠΣΤ): () d( x) u ( x) w( x) u( x) c( x) u( x) f ( x) στο I ( a, b) u( a) u( b) 0 όπου τα a, b, f(x), c(x), d(x), w(x) είναι δοθείσες συναρτήσεις με d( x) 0 x [ a, b] και c( x) w( x) 0 x [ a, b]. 2 d w C I c f C I, ( ),, ( ), Στόχος μας είναι η κατασκευή ενός γενικού υπολογιστικού κώδικα που υλοποιεί την εκδοχή hp της Μεθόδου Πεπερασμένων Στοιχείων (ΜΠΣ) για την προσέγγιση της λύσης u(x). Ανακαλούμε ότι στην εκδοχή hp της ΜΠΣ, το διάστημα/χωρίο (a, b) διαμελίζεται σε M υποδιαστήματα (ή ) και στο στοιχείο στοιχεία τα οποία καθορίζουν το πλέγμα a x x x x b Ik = [xk, xk + ] χρησιμοποιούμε πολυώνυμα βαθμού Θέτουμε p p p p 2 M M p k για να προσεγγίσουμε τη λύση u(x)., 2,, M το διάνυσμα με όλους τους βαθμούς των πολυωνύμων. Σε πρώτο στάδιο, πρέπει να γράψετε τον υπολογιστικό κώδικα, του οποίου η περιγραφή δίνεται στην Ενότητα 2. Αφού τελειώσετε με την κατασκευή του κώδικα, ελάτε να με δείτε (με την ομάδα σας) έτσι ώστε να σας δώσω συγκεκριμένες οδηγίες για το επόμενο βήμα. Η μελέτη που θα ετοιμάσετε πρέπει να είναι δακτυλογραφημένη και να θυμίζει ερευνητικό άρθρο. Δώστε εξηγήσεις για το τι παρατηρείτε και χρησιμοποιείστε γραφικές παραστάσεις όπου μπορείτε. Βασικά, η εργασία σας θα περιέχει κείμενο και γραφήματα (με επεξηγήσεις), και δεν θα θυμίζει εργασία στη MATLAB.
2. Περιγραφή του κώδικα Ο κώδικας μπορεί να γραφτεί σε τμήματα, όπως εξηγούμε πιο κάτω. Καλό είναι πρώτα να διαβάσετε το παρόν κεφάλαιο για να πάρετε μια ιδέα του τι πρέπει να κάνετε, και μετά να αρχίσετε να γράφετε (και να ελέγχετε) τα m-files που περιγράφονται στις υποενότητες I,,VI. I. Προκαταρτικά m-files Πρώτα πρέπει να γράψετε ορισμένα m-files τα οποία θα χρησιμοποιηθούν στη συνέχεια. d_of_x.m: παίρνει σαν input ένα (διάνυσμα με τιμές) x και δίνει σαν output την τιμή της συνάρτησης d(x) που εμφανίζεται στο ΠΣΤ (). w_of_x.m: παίρνει σαν input ένα (διάνυσμα με τιμές) x και δίνει σαν output την τιμή της συνάρτησης w(x) που εμφανίζεται στο ΠΣΤ (). c_of_x.m: παίρνει σαν input ένα (διάνυσμα με τιμές) x και δίνει σαν output την τιμή της συνάρτησης c(x) που εμφανίζεται στο ΠΣΤ (). f_of_x : παίρνει σαν input ένα (διάνυσμα με τιμές) x και δίνει σαν output την τιμή της συνάρτησης f(x) που εμφανίζεται στο ΠΣΤ (). hbasis.m: παίρνει σαν input ένα (διάνυσμα με τιμές) x και ένα ακέραιο j και δίνει σαν output την τιμή της j ιεραρχικής συνάρτησης βάσης Nj(x), στο x. dhbasis.m: παίρνει σαν input ένα (διάνυσμα με τιμές) x και ένα ακέραιο j και δίνει σαν output την τιμή της παραγώγου της j ιεραρχικής συνάρτησης βάσης N ( x), στο x. Σημειώστε ότι τα πρώτα τέσσερα m-files μπορούν να αποφευχθούν και ο ορισμός των συναρτήσεων να γίνει με την ανώνυμη συνάρτηση της MATLAB. Για τα υπόλοιπα δύο, θα χρειαστείτε ένα m-file που να υπολογίζει τα πολυώνημα Legendre, όπως φαίνεται πιο κάτω. leg.m: παίρνει σαν input ένα σημείο x και ένα ακέραιο j και δίνει σαν output την τιμή του πολυωνύμου Legendre βαθμού j στο x. Εισηγούμαι όταν γράψετε τα υπόλοιπα, να τα επαληθεύσετε, πριν προχωρήσετε στο γράψιμο του κυρίως προγράμματος. j II. Βασικό Input Το κυρίως πρόγραμμα που θα γράψετε πρέπει να επιτρέπει στον χρήστη να εισαγάγει τα πιο κάτω δεδομένα. (Αν και στο παρόν στάδιο δεν χρειάζεται να κατασκευάσετε τίποτα για αυτό το βήμα, η περιγραφή δίνεται για καλύτερη κατανόηση του τι πρέπει να γίνει στη συνέχεια.) Το διάνυσμα με το πλέγμα,,,, x x x x x 2 M M, όπου 2 x a και xm b.
Το διάνυσμα με τους βαθμούς των πολυωνύμων p p p p, 2,, M. III. Στοιχειώδεις πίνακες ακαμψίας/διάχυσης/μάζας και διάνυσμα φορτίου Όπως εξηγήσαμε στο μάθημα, οι υπολογισμοί γίνονται στο επίπεδο των στοιχείων και το γενικό γραμμικό σύστημα κατασκευάζεται με τη βοήθεια των επικαλούμενων στοιχειωδών πινάκων ακαμψίας, διάχυσης και μάζας, και του επικαλούμενου στοιχειώδους διανύσματος φορτίου. Ήτοι, πρέπει να κατασκευάσετε τα πιο κάτω m-files τα οποία θα χρησιμοποιηθούν στο κυρίως πρόγραμμα. Για κάθε στοιχείο k =,..., M, δηλ. υποδιάστημα [xk, xk+], στο πλέγμα, υπολογίστε τα εξής: Τον στοιχειώδη πίνακα ακαμψίας Kk. Γράψτε ένα m-file, που να καλείται el_stiff.m, το οποίο να παίρνει σαν input τα άκρα του διαστήματος [xk, xk+] και το βαθμό pk του πολυωνύμου βάσης για το στοιχείο k, και να δίνει σαν output τον πίνακα Kk που έχει μέγεθος (pk + )(pk + ). Τον στοιχειώδη πίνακα διάχυσης Wk. Γράψτε ένα m-file, που να καλείται el_conv.m, το οποίο να παίρνει σαν input τα άκρα του διαστήματος [xk, xk+] και το βαθμό pk του πολυωνύμου βάσης για το στοιχείο k, και να δίνει σαν output τον πίνακα Wk που έχει μέγεθος (pk + )(pk + ). Θα πρέπει, πρώτα, να βρείτε μια παράσταση για τα στοιχεία του πίνακα αυτού (με το χέρι ), όπως κάναμε στο μάθημα για τους υπόλοιπους πίνακες. Τον στοιχειώδη πίνακα μάζας Gk. Γράψτε ένα m-file, που να καλείται el_mass.m, το οποίο να παίρνει σαν input τα άκρα του διαστήματος [xk, xk+] και το βαθμό pk του πολυωνύμου βάσης για το στοιχείο k, και να δίνει σαν output τον πίνακα Gk που έχει μέγεθος (pk + )(pk + ). Το στοιχειώδες διάνυσμα φορτίου Fk. Γράψτε ένα m-file, που να καλείται el_load.m, το οποίο να παίρνει σαν input τα άκρα του διαστήματος [xk, xk+] και το βαθμό pk του πολυωνύμου βάσης για το στοιχείο k, και να δίνει σαν output το διάνυσμα Fk που έχει μήκος (pk + ). IV. Πίνακας δείκτης Θα χρειαστούμε ένα m-file που να μας δίνει τον επικαλούμενο πίνακα δείκτη, το οποίο παίρνει σαν input τον αριθμό των στοιχείων Μ και τον μέγιστο βαθμό πολυωνύμων βασης pmax και δίνει σαν output τον πίνακα δείκτη P που έχει μέγεθος M (pmax + ). Ο πίνακας αυτός μας δίνει τη σχέση μεταξύ των τοπικών και καθολικών/γενικών συναρτήσεων βάσης, δηλ. P(i, j) = k σημαίνει ότι στο στοιχείο i, η j τοπική συνάρτηση βάσης αντιστοιχεί στην k καθολική συνάρτηση βάσης. 3
Θέτουμε P(i, j) = 0 αν η j τοπική συνάρτηση βάσης στο στοιχείο i είναι απούσα στην τελική κατανομή. Το m-file pointer.m, που δίνει τα πιο πάνω, βρίσκεται στο σύνδεσμο http://www.mas.ucy.ac.cy/~xenophon/courses/mas473/pointer.m οπότε μπορείτε να το κατεβάσετε. V. Κατασκευή και λύση του τελικού γραμμικού συστήματος Εδώ δίνουμε την περιγραφή του κυρίως προγράμματος, που καλείται femd.m, και παίρνει σαν input τα δεδομένα που εξηγήσαμε στην υποενότητα II πιο πάνω. Στο πρόγραμμα σας θα πρέπει να σαρώσετε επαναληπτικά όλα τα στοιχεία του πλέγματος (loop over all the elements in the mesh) και για κάθε στοιχείο k =,..., M να κάνετε τα εξής: (Εδώ συμβολίζουμε με x_k το x k, με x_kk το xk και με p_k το pk). Καλέστε [K_k] = el_stiff(x_k, x_kk,p_k) για να πάρετε τον στοιχειώδη πίνακα ακαμψίας (μεγέθους (pk + )(pk + )) για το στοιχείο k. Καλέστε [W_k] = el_conv(x_k, x_kk,p_k) για να πάρετε τον στοιχειώδη πίνακα διάχυσης (μεγέθους (pk + )(pk + )) για το στοιχείο k. Καλέστε [G_k] = el_mass(x_k, x_kk,p_k) για να πάρετε τον στοιχειώδη πίνακα μάζας (μεγέθους (pk + )(pk + )) για το στοιχείο k. Καλέστε [F_k] = el_load(x_k, x_kk,p_k) για να πάρετε το στοιχειώδες διάνυσμα φορτίου (μήκους (pk + )) για το στοιχείο k. Εντοπίστε στον πίνακα δείκτη P τα l = P(k,i) και m = P(k,j), i, j =,...,p_k+. Αν τα l και m δεν είναι μηδέν τότε υπολογίστε τους γενικούς/καθολικούς πίνακες K, G από τη σχέση K(l,m) = K(l,m) + K_k(i,j) W(l,m) = W(l,m) + W_k(i,j) G(l,m) = G(l,m) + G_k(i,j) Υπολογίστε επίσης και το γενικό/καθολικό διάνυσμα F από τη σχέση F(l) = F(l) + F_k(i) αν το l δεν είναι μηδέν. Αρχικά, (πριν το loop) οι γενικοί πίνακες K, W και G, όπως και το γενικό διάνυσμα F πρέπει να οριστούν ως μηδέν, δηλ. οι K,W, G θα είναι μηδενικοί πίνακες μεγέθους (sum(p) ) (sum(p) ), όπου p είναι το διάνυσμα με τους βαθμούς των πολυωνύμων, και το F θα είναι μηδενικό διάνυσμα μήκους (sum(p) )). 4
Το τελικό γραμμικό σύστημα που πρέπει να λυθεί είναι (K+W+G)u = F, όπου u το διάνυσμα με τους συντελεστές που δίνουν την λύση πεπερασμένων στοιχείων. Το m-file femd.m πρέπει να δίνει σαν output την νόρμα ενέργειας της λύσης πεπερασμένων στοιχείων, FE T T ( ) /2 /2 E u K W G u u F, όπως και το διάνυσμα με τους συντελεστές u. VI. Κατασκευή της λύσης πεπερασμένων στοιχείων Να γράψετε ένα m-file που να καλείται sold.m το οποίο υπολογίζει την ufe ( y), δηλ. Τη λύση πεπερασμένων στοιχείων σε οποιοδήποτε σημείο y του διαστήματος [a, b]. Το m-file σας θα πρέπει να παίρνει σαν input το σημείο y, το διάνυσμα με το πλέγμα x, το διάνυσμα με τους βαθμούς των πολυωνύμων βάσης και τους συντελεστές u (τους οποίους θα πάρετε από το output του femd.m). Στο m-file sold.m θα πρέπει να κάνετε τα εξής: Να βρείτε το k έτσι ώστε xk y xk. (Δηλαδή, να βρείτε το στοιχείο/υποδιάστημα στο πλέγμα όπου ανήκει το σημείο y.) Να θέσετε Q ( y), όπου k Q k στοιχείο [-, ] στο στοιχείο k του πλέγματος (δηλ. x, x ). p k είναι η (γραμμική) απεικόνιση που μετατρέπει το βασικό Να υπολογίσετε την u ( y) c N, όπου Ni είναι η βάση i και c u P( k, i) FE i i i k k i. (Δηλαδή, να εντοπίσετε στον πίνακα δείκτη την αντιστοιχία μεταξύ των τοπικών και των καθολικών συναρτήσεων βάσης.) VII. Υπολογισμός του σφάλματος Θα θεωρήσουμε μια συγκεκριμένη συνάρτηση f στο (), τέτοια ώστε η ακριβής λύση u(x) να έχει μια ειδική μορφή. Θα χρειαστεί να γράψετε ορισμένα m-files που να υπολογίζουν το σφάλμα μεταξύ της ακριβούς λύσης και της λύσης πεπερασμένων στοιχείων (στη νόρμα ενέργειας) για τις διάφορες εκδοχές της ΜΠΣ. Στο κάθε m-file θα πρέπει να καλέσετε το femd.m για να πάρετε τη νόρμα ενέργειας της ufe και να υπολογίσετε το σχετικό σφάλμα rele, από τη σχέση rele u FE u u EX EX όπου u EX η νόρμα ενέργειας της ακριβούς. Τα m-files σας θα πρέπει να δίνουν σαν output το σχετικό σφάλμα rele όπως επίσης και τον αριθμό βαθμών ελευθερίας DOF, για κάθε εκδοχή της ΜΠΣ. 5
Σημείωση: Αν θέλετε να παραδώσετε αντίγραφα των m-files σας ή των MATLAB sessions, βάλτε τα στο τέλος της εργασίας σε μορφή παραρτήματος/appendix. Το project σας θα πρέπει να αποτελείται από κείμενο, γραφικές παραστάσεις και εξηγήσεις. Θα βαθμολογηθείτε και για την παρουσίαση αυτών που θα γράψετε. Επίσης, η ομάδα σας θα πρέπει να παρουσιάσει την εργασία της τη μέρα της τελικής εξέτασης, σε μορφή, π.χ. PowerPoint. 6