ส่วนขยายซับรูทีนผู้ใช้¶
FrontISTR มีชุดซับรูทีนผู้ใช้สำหรับขยายฟังก์ชันโดยไม่ต้องแก้ไขซอร์สหลัก ครอบคลุมการอิมพลีเมนต์กฎความสัมพันธ์เชิงสภาวะโดยผู้ใช้และการรวมภาระภายนอกที่ผู้ใช้กำหนด บทนี้แสดงรายการจุดที่สามารถขยายได้และคีย์เวิร์ดในไฟล์ควบคุมการวิเคราะห์ที่ใช้เรียกแต่ละจุด สำหรับรายละเอียดสเปกของอาร์กิวเมนต์ซับรูทีนและขั้นตอนการบิลด์ใหม่ ให้ดู ซับรูทีนผู้ใช้ (คู่มือการเขียนโค้ด)
ภาพรวมฟังก์ชัน¶
จุดขยายด้วยซับรูทีนผู้ใช้แบ่งเป็น 2 กลุ่ม ได้แก่ กฎความสัมพันธ์เชิงสภาวะของวัสดุและภาระภายนอก ฝั่งกฎความสัมพันธ์เชิงสภาวะมีเส้นทางเรียก 4 แบบ คือ ความยืดหยุ่นเชิงเส้น ไฮเปอร์อีลาสติก อีลาสโตพลาสติก และกฎความสัมพันธ์เชิงสภาวะอเนกประสงค์ โดยแต่ละแบบเปิดใช้ด้วยคีย์เวิร์ดอิสระ ฝั่งภาระภายนอกมีเส้นทางสำหรับอ่านข้อมูลภาระจากไฟล์ภายนอกที่ผู้ใช้เตรียมไว้ แล้วบวกเข้าเวกเตอร์ภาระรวมและเวกเตอร์เศษเหลือ แต่ละส่วนขยายใช้งานได้โดยแก้ไขไฟล์เทมเพลตที่รวมมากับชุดแจกจ่าย FrontISTR แล้วบิลด์โปรแกรมหลักใหม่
| หมวดส่วนขยาย | คีย์เวิร์ดควบคุมการวิเคราะห์ | ซับรูทีนผู้ใช้หลัก | เทมเพลตที่ต้องแก้ไข |
|---|---|---|---|
| ความยืดหยุ่นเชิงเส้นโดยผู้ใช้ | !ELASTIC, TYPE=USER | uElasticMatrix, uElasticUpdate | fistr1/src/lib/user/uelastic.f90 |
| ไฮเปอร์อีลาสติกโดยผู้ใช้ | !HYPERELASTIC, TYPE=USER | uElasticMatrix, uElasticUpdate | fistr1/src/lib/user/uelastic.f90 |
| อีลาสโตพลาสติกโดยผู้ใช้ (ฟังก์ชันครากและการแม็ปกลับ (return mapping)) | !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
กฎความสัมพันธ์เชิงสภาวะโดยผู้ใช้¶
กฎความสัมพันธ์เชิงสภาวะโดยผู้ใช้เป็นทางเข้าสำหรับอิมพลีเมนต์ความสัมพันธ์ความเค้น-ความเครียดที่แบบจำลองวัสดุในตัวไม่สามารถแทนได้ด้วยซับรูทีนภายนอก มี 4 เส้นทางตามกรอบของกฎความสัมพันธ์เชิงสภาวะในตัวที่สอดคล้องกัน ได้แก่ ความยืดหยุ่นเชิงเส้นโดยผู้ใช้ ไฮเปอร์อีลาสติกโดยผู้ใช้ อีลาสโตพลาสติกโดยผู้ใช้ และกฎความสัมพันธ์เชิงสภาวะอเนกประสงค์โดยผู้ใช้ ในทุกเส้นทาง ให้ใส่ TYPE=USER หรือ YIELD=USER กับคีย์เวิร์ดที่สอดคล้องกันภายในบล็อก !MATERIAL ของข้อมูลควบคุมการวิเคราะห์ สามารถระบุค่าคงที่ผู้ใช้ได้สูงสุด 100 ค่า และจะถูกส่งให้ซับรูทีน
ความยืดหยุ่นเชิงเส้นโดยผู้ใช้¶
ความยืดหยุ่นเชิงเส้นโดยผู้ใช้เป็นเส้นทางที่ผู้ใช้คำนวณเมทริกซ์ยืดหยุ่นภายในกรอบการเสียรูปเล็ก เมื่อระบุ !ELASTIC, TYPE=USER ในข้อมูลควบคุมการวิเคราะห์ FrontISTR จะถือเป็นกฎความสัมพันธ์เชิงสภาวะสำหรับการเสียรูปเล็ก และเรียก uElasticMatrix (คืนเมทริกซ์ยืดหยุ่น \(D\)) ระหว่างการคำนวณความแข็งขององค์ประกอบ และ uElasticUpdate (คืนค่าความเค้น) ระหว่างการอัปเดตความเค้น ห้ามใช้ร่วมกับแบบจำลองไฮเปอร์อีลาสติกหรืออีลาสโตพลาสติกที่มีอยู่
ไฮเปอร์อีลาสติกโดยผู้ใช้¶
ไฮเปอร์อีลาสติกโดยผู้ใช้เป็นเส้นทางที่คำนวณความเค้นและความแข็งสัมผัสจากอนุพันธ์ของฟังก์ชันพลังงานความเครียดภายในกรอบการเสียรูปขนาดใหญ่ (Total Lagrange) ให้ระบุ !HYPERELASTIC, TYPE=USER ในข้อมูลควบคุมการวิเคราะห์ ซับรูทีนที่เรียกคือ uElasticMatrix และ uElasticUpdate เช่นเดียวกับความยืดหยุ่นเชิงเส้นโดยผู้ใช้ และใช้เทมเพลต fistr1/src/lib/user/uelastic.f90 ร่วมกัน เนื่องจากการระบุคีย์เวิร์ดเป็นตัวสลับว่า FrontISTR จะถือการอิมพลีเมนต์เป็นการเสียรูปเล็กหรือ Total Lagrange จึงไม่สามารถใช้เทมเพลตเดียวกันพร้อมกันสำหรับทั้งการเสียรูปเล็กและการเสียรูปขนาดใหญ่ ต้องอิมพลีเมนต์เป็นกฎความสัมพันธ์เชิงสภาวะอย่างใดอย่างหนึ่ง
อีลาสโตพลาสติกโดยผู้ใช้¶
อีลาสโตพลาสติกโดยผู้ใช้เป็นเส้นทางที่ผู้ใช้อิมพลีเมนต์ฟังก์ชันครากและขั้นตอนการแม็ปกลับ ให้ระบุ !PLASTIC, YIELD=USER ในข้อมูลควบคุมการวิเคราะห์ เส้นทางนี้เข้าสู่สาขาที่แยกจากฟังก์ชันครากในตัว Mises, Mohr-Coulomb และ Drucker-Prager โดยจะเรียก uElastoPlasticMatrix (คืนความแข็งสัมผัสอีลาสโตพลาสติก \(D\)) ระหว่างการคำนวณความแข็งองค์ประกอบ, uBackwardEuler (แมปความเค้นทดลองไปเป็นความเค้นจริงและอัปเดตตัวแปรสถานะ) ระหว่างการอัปเดตความเค้น และ uElastoPlasticNumStatus (คืนจำนวนตัวแปรสถานะชนิดจำนวนจริงที่จะเก็บ) ระหว่างการเริ่มต้นจุด Gauss ไม่รองรับเส้นทางที่แทนเฉพาะเส้นโค้งการแข็งตัวด้วยการอิมพลีเมนต์ของผู้ใช้ แม้ต้องการเพียงเส้นโค้งการแข็งตัวที่ผู้ใช้กำหนด ก็ให้ใช้เส้นทางนี้เพื่อแทนกฎความสัมพันธ์เชิงสภาวะอีลาสโตพลาสติกทั้งหมดด้วยการอิมพลีเมนต์ของผู้ใช้
กฎความสัมพันธ์เชิงสภาวะอเนกประสงค์โดยผู้ใช้¶
กฎความสัมพันธ์เชิงสภาวะอเนกประสงค์โดยผู้ใช้เป็นเส้นทางสำหรับอิมพลีเมนต์กฎที่ไม่อยู่ในกรอบความยืดหยุ่น ไฮเปอร์อีลาสติก หรืออีลาสโตพลาสติก ให้ระบุ !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 และเขียนกลับเมื่อสิ้นสุดสเต็ป จำนวนตัวแปรสถานะกำหนดด้วย NSTATUS ของ !USER_MATERIAL สำหรับกฎอเนกประสงค์ และด้วยค่าที่คืนจาก uElastoPlasticNumStatus สำหรับ !PLASTIC, YIELD=USER
ภาระภายนอกที่ผู้ใช้กำหนด¶
ภาระภายนอกที่ผู้ใช้กำหนดเป็นเส้นทางสำหรับนิยามแรงภายนอกที่ไม่สามารถแทนด้วยแรงรวมจุด ภาระแบบกระจาย หรือแรงปริมาตรในตัว โดยใช้ซับรูทีนผู้ใช้ เมื่อเขียน !ULOAD, FILE=<fname> ในข้อมูลควบคุมการวิเคราะห์ FrontISTR จะส่งชื่อไฟล์ที่ระบุให้ ureadload และเก็บข้อมูลที่การอิมพลีเมนต์ของผู้ใช้อ่านไว้เป็นข้อมูลภายในโมดูล
การเรียก !ULOAD สัมพันธ์กับซับรูทีน 3 ตัวต่อไปนี้
ureadload: เมื่อเริ่มการวิเคราะห์ อ่านภาระที่ผู้ใช้กำหนดจากไฟล์ภายนอกที่ระบุในไฟล์ควบคุม การอิมพลีเมนต์ของผู้ใช้จะเปิดไฟล์และเก็บข้อมูลที่จำเป็นไว้ในตัวแปรภายในโมดูลuloading: ถูกเรียกระหว่างการประกอบเวกเตอร์ภาระภายนอกของแต่ละสเต็ป และบวกภาระของผู้ใช้เข้าเวกเตอร์ภาระรวม หมายเลขสเต็ปปัจจุบันและตัวคูณภาระถูกส่งเป็นอาร์กิวเมนต์uResidual: ถูกเรียกระหว่างการประกอบเวกเตอร์เศษเหลือในแต่ละการวนซ้ำ และบวกส่วนร่วมของภาระผู้ใช้เข้าเวกเตอร์เศษเหลือรวม โดยถูกเรียกทั้งจากการวนซ้ำไม่เชิงเส้นและการคำนวณสมดุล
ไม่มีจุดขยายสำหรับเงื่อนไขขอบเขตของผู้ใช้ (ส่วนขยายของผู้ใช้สำหรับการกระจัดกำหนดหรือเงื่อนไขการสัมผัส) หากต้องการส่วนขยายของผู้ใช้นอกเหนือจากแรงภายนอก ให้ใช้คีย์เวิร์ดในตัวที่สอดคล้องกันหรือเส้นทางกฎความสัมพันธ์เชิงสภาวะโดยผู้ใช้
ขั้นตอนการอิมพลีเมนต์ซับรูทีนผู้ใช้¶
ในการใช้ซับรูทีนผู้ใช้ ให้แก้ไขไฟล์เทมเพลตที่รวมมากับชุดซอร์ส FrontISTR แล้วบิลด์ 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