ข้ามไปที่เนื้อหา

ส่วนขยายซับรูทีนผู้ใช้

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 ที่ได้

รายละเอียด เช่น ความหมายของอาร์กิวเมนต์ซับรูทีน การจัดการอาร์เรย์ตัวแปรสถานะ และข้อควรระวังในการบิลด์ใหม่ แยกอธิบายไว้ในแต่ละหน้าของคู่มือการเขียนโค้ด

หัวข้อที่เกี่ยวข้อง

AI-assisted translation May contain errors Official docs Status