მომხმარებლის ქვეპროგრამებით გაფართოება¶
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 და მომხმარებლის რეალიზაციით ჩაანაცვლეთ მთელი ელასტოპლასტიკური კონსტიტუციური კანონი. ასევე არ არის მხარდაჭერილი მომხმარებლის სასაზღვრო პირობებისა და restart-ის დროს მომხმარებლის დამუშავების გაფართოების წერტილები.
!CREEP-ისთვის TYPE=USER მხარდაჭერილი არ არის. დროზე დამოკიდებული კონსტიტუციური კანონის მომხმარებლის მიერ რეალიზაციისთვის გამოიყენეთ !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 შემთხვევაში !ELASTIC-ით მითითებულ ელასტიკურობის მუდმივებთან ერთად გადაეცემა !PLASTIC-ის მონაცემთა ხაზებით მოცემული მომხმარებლის მუდმივებიც.
ზოგადი მომხმარებლის კონსტიტუციურ კანონში და !PLASTIC, YIELD=USER-ში მდგომარეობის ცვლადი fstat საშუალებას იძლევა წინა ბიჯის ისტორიული ინფორმაცია (პლასტიკური დეფორმაცია, უკუძაბვა, დაზიანების სიდიდე და სხვ.) გადაეცეს მომხმარებლის რეალიზაციას და ბიჯის დასრულებისას უკან ჩაიწეროს. მდგომარეობის ცვლადების რაოდენობა ზოგადი მომხმარებლის კონსტიტუციური კანონისთვის განისაზღვრება !USER_MATERIAL-ის NSTATUS-ით, ხოლო !PLASTIC, YIELD=USER-ისთვის — uElastoPlasticNumStatus-ის დაბრუნებული მნიშვნელობით.
მომხმარებლის მიერ განსაზღვრული გარე დატვირთვა¶
მომხმარებლის მიერ განსაზღვრული გარე დატვირთვა არის გზა, რომლითაც მომხმარებლის ქვეპროგრამაში განისაზღვრება ისეთი გარე ძალა, რომლის წარმოდგენაც ჩაშენებული კონცენტრირებული დატვირთვით, განაწილებული დატვირთვით ან მოცულობითი ძალით შეუძლებელია. თუ ანალიზის მართვის მონაცემებში ჩაიწერება !ULOAD, FILE=<fname>, FrontISTR მითითებულ ფაილის სახელს გადასცემს ureadload-ს და მომხმარებლის რეალიზაციით წაკითხულ ინფორმაციას მოდულის მონაცემებად ინახავს.
!ULOAD-ის გააქტიურებას შეესაბამება შემდეგი სამი ქვეპროგრამა.
ureadload: ანალიზის დაწყებისას მართვის ფაილში მითითებული გარე ფაილიდან კითხულობს მომხმარებლის მიერ განსაზღვრულ დატვირთვას. მომხმარებლის რეალიზაცია ხსნის ფაილს და საჭირო მონაცემებს მოდულის ცვლადებში ინახავს.uloading: იძახება თითოეული ბიჯის გარე დატვირთვის ვექტორის აწყობისას და მომხმარებლის დატვირთვას გლობალურ დატვირთვის ვექტორს უმატებს. არგუმენტებად გადაეცემა მიმდინარე ბიჯის ნომერი და დატვირთვის კოეფიციენტი.uResidual: იძახება ყოველი იტერაციისას ნაშთის ვექტორის აწყობის დროს და მომხმარებლის დატვირთვის წვლილს გლობალურ ნაშთის ვექტორს უმატებს. იგი იძახება როგორც არაწრფივი იტერაციის, ისე წონასწორობის გამოთვლის დროს.
მომხმარებლის სასაზღვრო პირობების (მოცემული გადაადგილებისა და კონტაქტის პირობების მომხმარებლის გაფართოება) შესაბამისი გაფართოების წერტილი არ არსებობს. თუ გარე ძალის გარდა სხვა მომხმარებლის გაფართოებაა საჭირო, გამოიყენეთ შესაბამისი ჩაშენებული საკვანძო სიტყვა ან მომხმარებლის კონსტიტუციური კანონის გზა.
მომხმარებლის ქვეპროგრამის რეალიზაციის პროცედურა¶
მომხმარებლის ქვეპროგრამის გამოსაყენებლად საჭიროა FrontISTR-ის საწყისი კოდის დისტრიბუციაში არსებული შაბლონის ფაილის რედაქტირება და შემდეგ FrontISTR-ის ძირითადი პროგრამის ხელახლა აგება. დისტრიბუციის მზა ბინარულ ფაილებში მომხმარებლის ქვეპროგრამების ჩანაცვლება შეუძლებელია, ამიტომ მომხმარებლის გაფართოებისას საჭიროა საწყისი კოდიდან აგების გარემო.
მომხმარებლის ქვეპროგრამების შაბლონები განთავსებულია fistr1/src/lib/user/-ში და დასარედაქტირებელი ფაილი გაფართოების კატეგორიის მიხედვითაა განსაზღვრული (ფაილების სახელებისთვის იხილეთ ცხრილი ფუნქციის საერთო სურათი). საწყის მდგომარეობაში ამ ფაილებში ქვეპროგრამის სხეული ცარიელია ან შეიცავს წრფივი ელასტიკურობის მაგალითის რეალიზაციას; მომხმარებელი აქ ამატებს საკუთარ კონსტიტუციურ კანონს ან დატვირთვის განსაზღვრებას. შაბლონის რედაქტირების შემდეგ FrontISTR ჩვეულებრივად ხელახლა ააგეთ CMake-ით და ანალიზი მიღებული fistr1 შესრულებადი ფაილით გაუშვით.
ქვეპროგრამის არგუმენტების მნიშვნელობა, მდგომარეობის ცვლადების მასივის გამოყენება, ხელახალი აგებისას გასათვალისწინებელი საკითხები და სხვა დეტალები კოდირების სახელმძღვანელოს შესაბამის გვერდებზეა მოცემული.
- მომხმარებლის ქვეპროგრამები (მიმოხილვა)
- ზოგადი მომხმარებლის კონსტიტუციური კანონი
umat.f - მომხმარებლის ელასტოპლასტიკურობა
uyield.f - მომხმარებლის მიერ განსაზღვრული გარე დატვირთვა
uload.f - მომხმარებლის წრფივი ელასტიკურობა და ჰიპერელასტიკურობა
uelastic.f
დაკავშირებული თემები¶
- მასალის მონაცემები — კონსტიტუციური კანონების ვარიანტები და ჩაშენებული მოდელების სია
- სასაზღვრო პირობები და დატვირთვები — ჩაშენებული სასაზღვრო პირობები და დატვირთვები
- მომხმარებლის ქვეპროგრამები (კოდირების სახელმძღვანელო) — ქვეპროგრამის არგუმენტების სპეციფიკაცია და რეალიზაციის წესები
- !USER_MATERIAL — ზოგადი მომხმარებლის კონსტიტუციური კანონის საკვანძო სიტყვის სინტაქსი
- !ELASTIC — წრფივი ელასტიკურობის საკვანძო სიტყვა
TYPE=USER-ის ჩათვლით - !HYPERELASTIC — ჰიპერელასტიკურობის საკვანძო სიტყვა
TYPE=USER-ის ჩათვლით - !PLASTIC — ელასტოპლასტიკურობის საკვანძო სიტყვა
YIELD=USER-ის ჩათვლით