Μετάβαση στο περιεχόμενο

Επεκτάσεις με υπορουτίνες χρήστη

Το FrontISTR παρέχει ένα σύνολο υπορουτινών χρήστη για επέκταση των λειτουργιών χωρίς τροποποίηση του κύριου πηγαίου κώδικα. Υποστηρίζονται υλοποιήσεις καταστατικών νόμων από τον χρήστη και ενσωμάτωση εξωτερικών φορτίων που ορίζονται από τον χρήστη. Το κεφάλαιο αυτό παραθέτει τα σημεία επέκτασης και τις λέξεις-κλειδιά του αρχείου ελέγχου ανάλυσης που τα ενεργοποιούν. Για τις λεπτομερείς προδιαγραφές των ορισμάτων και τη διαδικασία επαναμεταγλώττισης, ανατρέξτε στις Υπορουτίνες χρήστη (οδηγός κώδικα).

Επισκόπηση λειτουργιών

Τα σημεία επέκτασης μέσω υπορουτινών χρήστη χωρίζονται σε δύο κατηγορίες: καταστατικές σχέσεις υλικού και εξωτερικά φορτία. Για τις καταστατικές σχέσεις υπάρχουν τέσσερις διαδρομές κλήσης — γραμμική ελαστικότητα, υπερελαστικότητα, ελαστοπλαστικότητα και γενικός καταστατικός νόμος — καθεμία ενεργοποιούμενη με ανεξάρτητη λέξη-κλειδί. Για τα εξωτερικά φορτία υπάρχει διαδρομή που διαβάζει πληροφορίες φόρτισης από εξωτερικό αρχείο του χρήστη και τις προσθέτει στο καθολικό διάνυσμα φορτίου και στο διάνυσμα υπολοίπου. Όλες οι επεκτάσεις χρησιμοποιούνται αφού τροποποιηθεί το αντίστοιχο πρότυπο αρχείο της διανομής FrontISTR και επαναμεταγλωττιστεί το πρόγραμμα.

Κατηγορία επέκτασης Λέξη-κλειδί ελέγχου ανάλυσης Κύριες υπορουτίνες χρήστη Πρότυπο προς επεξεργασία
Γραμμική ελαστικότητα χρήστη !ELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Υπερελαστικότητα χρήστη !HYPERELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Ελαστοπλαστικότητα χρήστη (συνάρτηση διαρροής και απεικόνιση επιστροφής) !PLASTIC, YIELD=USER uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus fistr1/src/lib/user/uyield.f90
Γενικός καταστατικός νόμος χρήστη !USER_MATERIAL uMatlMatrix, uUpdate fistr1/src/lib/user/umat.f90
Εξωτερικό φορτίο οριζόμενο από τον χρήστη !ULOAD, FILE=<fname> ureadload, uloading, uResidual fistr1/src/lib/user/uload.f90

Δεν υποστηρίζεται νόμος σκλήρυνσης χρήστη όπου παραμένει η ενσωματωμένη συνάρτηση διαρροής και αντικαθίσταται μόνο η καμπύλη σκλήρυνσης. Αν απαιτείται υλοποίηση καμπύλης σκλήρυνσης από τον χρήστη, επιλέξτε !PLASTIC, YIELD=USER και αντικαταστήστε ολόκληρο τον ελαστοπλαστικό καταστατικό νόμο. Δεν υποστηρίζονται σημεία επέκτασης για οριακές συνθήκες χρήστη ή ειδική επεξεργασία χρήστη κατά την επανεκκίνηση.

Το TYPE=USER για !CREEP δεν υποστηρίζεται. Για χρονικά εξαρτώμενο καταστατικό νόμο χρήστη, χρησιμοποιήστε !USER_MATERIAL.

Καταστατικοί νόμοι χρήστη

Οι καταστατικοί νόμοι χρήστη παρέχουν διεπαφή για την υλοποίηση σχέσεων τάσης–παραμόρφωσης που δεν μπορούν να εκφραστούν με τα ενσωματωμένα μοντέλα υλικού. Υπάρχουν τέσσερις διαδρομές: γραμμική ελαστικότητα χρήστη, υπερελαστικότητα χρήστη, ελαστοπλαστικότητα χρήστη και γενικός καταστατικός νόμος χρήστη. Σε κάθε περίπτωση, η αντίστοιχη λέξη-κλειδί μέσα στο μπλοκ !MATERIAL των δεδομένων ελέγχου ανάλυσης συνοδεύεται από TYPE=USER ή YIELD=USER. Μπορούν να καθοριστούν έως 100 σταθερές χρήστη και να περάσουν στην υπορουτίνα.

Γραμμική ελαστικότητα χρήστη

Η γραμμική ελαστικότητα χρήστη επιτρέπει στον χρήστη να υπολογίζει την ελαστική μήτρα στο πλαίσιο μικρών παραμορφώσεων. Με !ELASTIC, TYPE=USER, το FrontISTR τη χειρίζεται ως καταστατικό νόμο μικρών παραμορφώσεων και καλεί uElasticMatrix (επιστρέφει την ελαστική μήτρα \(D\)) και uElasticUpdate (επιστρέφει την τάση) κατά τον υπολογισμό της δυσκαμψίας στοιχείου και την ενημέρωση τάσεων. Δεν χρησιμοποιείται μαζί με ενσωματωμένο υπερελαστικό ή ελαστοπλαστικό μοντέλο.

Υπερελαστικότητα χρήστη

Η υπερελαστικότητα χρήστη υπολογίζει τάση και εφαπτομενική δυσκαμψία από παραγώγους της συνάρτησης ενέργειας παραμόρφωσης στο πλαίσιο μεγάλων παραμορφώσεων (Total Lagrange). Καθορίστε !HYPERELASTIC, TYPE=USER. Καλούνται οι ίδιες υπορουτίνες uElasticMatrix και uElasticUpdate με τη γραμμική ελαστικότητα χρήστη και χρησιμοποιείται το ίδιο πρότυπο fistr1/src/lib/user/uelastic.f90. Επειδή η λέξη-κλειδί καθορίζει αν το FrontISTR θα χειριστεί το μοντέλο ως μικρών παραμορφώσεων ή Total Lagrange, το ίδιο πρότυπο δεν μπορεί να χρησιμοποιηθεί ταυτόχρονα και για τα δύο· πρέπει να υλοποιηθεί ως ένας από τους δύο καταστατικούς νόμους.

Ελαστοπλαστικότητα χρήστη

Η ελαστοπλαστικότητα χρήστη επιτρέπει στον χρήστη να υλοποιήσει τη συνάρτηση διαρροής και τη διαδικασία απεικόνισης επιστροφής (return-mapping). Καθορίστε !PLASTIC, YIELD=USER. Η διαδρομή αυτή είναι ανεξάρτητη από τις ενσωματωμένες συναρτήσεις διαρροής Mises, Mohr-Coulomb και Drucker-Prager. Κατά τον υπολογισμό δυσκαμψίας καλείται uElastoPlasticMatrix (επιστρέφει την ελαστοπλαστική εφαπτομενική δυσκαμψία \(D\)), κατά την ενημέρωση τάσεων uBackwardEuler (χαρτογραφεί τη δοκιμαστική τάση στην πραγματική και ενημερώνει τις μεταβλητές κατάστασης) και κατά την αρχικοποίηση σημείων Gauss uElastoPlasticNumStatus (επιστρέφει τον αριθμό πραγματικών μεταβλητών κατάστασης). Δεν υπάρχει διαδρομή για αντικατάσταση μόνο της καμπύλης σκλήρυνσης· αν απαιτείται, πρέπει να υλοποιηθεί ολόκληρος ο ελαστοπλαστικός νόμος μέσω αυτής της διαδρομής.

Γενικός καταστατικός νόμος χρήστη

Ο γενικός καταστατικός νόμος χρήστη προορίζεται για νόμους που δεν εντάσσονται στα πλαίσια ελαστικότητας, υπερελαστικότητας ή ελαστοπλαστικότητας. Καθορίστε !USER_MATERIAL. Από προεπιλογή χρησιμοποιείται το πλαίσιο Updated Lagrange, ενώ με KIRCHHOFF χρησιμοποιείται Total Lagrange. Ο αριθμός μεταβλητών κατάστασης καθορίζεται με NSTATUS. Κατά τον υπολογισμό δυσκαμψίας καλείται uMatlMatrix (επιστρέφει την εφαπτομενική δυσκαμψία \(D\)) και κατά την ενημέρωση τάσεων uUpdate (ενημερώνει τάση και μεταβλητές κατάστασης).

Μεταφορά σταθερών χρήστη και μεταβλητών κατάστασης

Στις διαδρομές !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER και !USER_MATERIAL, οι σταθερές χρήστη που γράφονται στις γραμμές δεδομένων του αρχείου ελέγχου (έως 100) περνούν αυτούσιες στο όρισμα matl της υπορουτίνας. Με !PLASTIC, YIELD=USER, περνούν οι σταθερές χρήστη των γραμμών δεδομένων !PLASTIC μαζί με τις ελαστικές σταθερές που καθορίζονται στο !ELASTIC.

Στον γενικό καταστατικό νόμο χρήστη και στο !PLASTIC, YIELD=USER, οι μεταβλητές κατάστασης fstat μπορούν να μεταφέρουν στην υλοποίηση χρήστη πληροφορίες ιστορικού του προηγούμενου βήματος (πλαστική παραμόρφωση, οπισθοτάση, μεταβλητές βλάβης κ.λπ.) και να εγγράφονται ξανά στο τέλος του βήματος. Ο αριθμός τους καθορίζεται από NSTATUS στο !USER_MATERIAL ή από την επιστρεφόμενη τιμή του uElastoPlasticNumStatus στο !PLASTIC, YIELD=USER.

Εξωτερικά φορτία οριζόμενα από τον χρήστη

Τα εξωτερικά φορτία χρήστη επιτρέπουν τον ορισμό δυνάμεων που δεν μπορούν να εκφραστούν με τα ενσωματωμένα συγκεντρωμένα, κατανεμημένα ή ογκομετρικά φορτία. Όταν στα δεδομένα ελέγχου γράφεται !ULOAD, FILE=<fname>, το FrontISTR περνά το καθορισμένο όνομα αρχείου στο ureadload και οι πληροφορίες που διαβάζει η υλοποίηση χρήστη διατηρούνται ως δεδομένα της μονάδας.

Η ενεργοποίηση του !ULOAD αντιστοιχεί στις ακόλουθες τρεις υπορουτίνες.

  • ureadload: Στην αρχή της ανάλυσης διαβάζει το φορτίο χρήστη από το εξωτερικό αρχείο που καθορίζεται στο αρχείο ελέγχου. Η υλοποίηση χρήστη ανοίγει το αρχείο και αποθηκεύει τα απαιτούμενα δεδομένα σε μεταβλητές της μονάδας.
  • uloading: Καλείται κατά τη συναρμολόγηση του διανύσματος εξωτερικού φορτίου σε κάθε βήμα και προσθέτει το φορτίο χρήστη στο καθολικό διάνυσμα φορτίου. Ο αριθμός του τρέχοντος βήματος και ο συντελεστής φόρτισης περνούν ως ορίσματα.
  • uResidual: Καλείται κατά τη συναρμολόγηση του διανύσματος υπολοίπου σε κάθε επανάληψη και προσθέτει τη συμβολή του φορτίου χρήστη στο καθολικό διάνυσμα υπολοίπου. Καλείται τόσο από τη μη γραμμική επανάληψη όσο και από τον υπολογισμό ισορροπίας.

Δεν παρέχεται σημείο επέκτασης για οριακές συνθήκες χρήστη (όπως επιβαλλόμενες μετατοπίσεις ή συνθήκες επαφής). Για επεκτάσεις διαφορετικές από εξωτερικά φορτία, χρησιμοποιήστε τις αντίστοιχες ενσωματωμένες λέξεις-κλειδιά ή τη διαδρομή καταστατικού νόμου χρήστη.

Διαδικασία υλοποίησης υπορουτινών χρήστη

Για να χρησιμοποιήσετε υπορουτίνες χρήστη, τροποποιήστε τα πρότυπα αρχεία που περιλαμβάνονται στη διανομή πηγαίου κώδικα του FrontISTR και επαναμεταγλωττίστε το FrontISTR. Οι διανεμόμενες δυαδικές εκδόσεις δεν επιτρέπουν αντικατάσταση υπορουτινών χρήστη, επομένως απαιτείται περιβάλλον μεταγλώττισης από πηγαίο κώδικα.

Τα πρότυπα βρίσκονται κάτω από fistr1/src/lib/user/ και το αρχείο που τροποποιείται εξαρτάται από την κατηγορία επέκτασης (βλ. τον πίνακα στην Επισκόπηση λειτουργιών). Στην αρχική κατάσταση τα σώματα των υπορουτινών είναι κενά ή περιέχουν δείγμα γραμμικής ελαστικότητας. Ο χρήστης προσθέτει εκεί τον δικό του καταστατικό νόμο ή ορισμό φορτίου. Μετά την επεξεργασία του προτύπου, επαναμεταγλωττίστε το FrontISTR κανονικά με CMake και εκτελέστε την ανάλυση με το παραγόμενο fistr1.

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

Σχετικά θέματα