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

ระบบหมายเลขเอลิเมนต์และไลบรารีฟังก์ชันรูปร่าง

ฟังก์ชันรูปร่าง \(N_\alpha^e(\boldsymbol{r})\) ที่แนะนำใน ฟังก์ชันรูปร่างและการประมาณแบบไฟไนต์เอลิเมนต์ มีรูปเฉพาะแตกต่างกันตามชนิดเอลิเมนต์ บทนี้จัดประเภทกลุ่มเอลิเมนต์ที่ FrontISTR มีให้ด้วยหมายเลขชนิดเอลิเมนต์ 3 หลัก และแสดงอินเทอร์เฟซของไลบรารีฟังก์ชันรูปร่างเพื่อให้จัดการเอลิเมนต์แต่ละชนิดได้แบบเดียวกัน ระบบพิกัดธรรมชาติและรูปเฉพาะของฟังก์ชันรูปร่างของเอลิเมนต์โซลิดสามมิติ รวมถึงการแปลงลำดับโหนดกลางของเอลิเมนต์อันดับสอง อธิบายใน ฟังก์ชันรูปร่างสำหรับเอลิเมนต์โซลิดสามมิติ ส่วนแนวทางเลือกชนิดเอลิเมนต์อยู่ที่ ไลบรารีเอลิเมนต์ (ฟังก์ชัน)

การจัดประเภทเอลิเมนต์และกฎการตั้งชื่อ

ชนิดเอลิเมนต์ของ FrontISTR ระบุด้วยหมายเลข 3 หลัก ความหมายของแต่ละหลักมีดังนี้

  • หลักที่ 1 (กลุ่มเอลิเมนต์): 1=เอลิเมนต์เส้น/ทรัส, 2=เอลิเมนต์ระนาบ, 3=เอลิเมนต์โซลิด, 5=เอลิเมนต์อินเทอร์เฟซ, 6=เอลิเมนต์คาน, 7=เอลิเมนต์เชลล์
  • หลักที่ 2 (รูปร่างพื้นฐาน): ใช้แยกรูปร่างเรขาคณิตภายในกลุ่มเอลิเมนต์ (สามเหลี่ยม สี่เหลี่ยม เตตระฮีดรอน ปริซึมสามเหลี่ยม และเฮกซะฮีดรอน)
  • หลักที่ 3 (อันดับการอินเตอร์โพเลต): 1=อันดับหนึ่ง (เฉพาะโหนดมุม), 2=อันดับสอง (รวมโหนดกลาง) ข้อยกเว้นคือเอลิเมนต์ทรัส 2 โหนดใช้หมายเลข 301

ตารางต่อไปนี้แสดงเอลิเมนต์ที่มีให้ แยกตามกลุ่มเอลิเมนต์

กลุ่มเอลิเมนต์ ชนิดเอลิเมนต์ จำนวนโหนด คำอธิบาย
เอลิเมนต์เส้น 111 2 เอลิเมนต์ลิงก์ 2 โหนด (ใช้ในการวิเคราะห์ความเค้นไม่ได้)
112 3 เอลิเมนต์ลิงก์ 3 โหนด (ใช้ในการวิเคราะห์ความเค้นไม่ได้)
เอลิเมนต์ระนาบ 231 3 เอลิเมนต์สามเหลี่ยมอันดับหนึ่ง
232 6 เอลิเมนต์สามเหลี่ยมอันดับสอง
241 4 เอลิเมนต์สี่เหลี่ยมอันดับหนึ่ง
242 8 เอลิเมนต์สี่เหลี่ยมอันดับสอง (ตระกูล Serendipity)
เอลิเมนต์โซลิด 301 2 เอลิเมนต์ทรัส 2 โหนด
341 4 เอลิเมนต์เตตระฮีดรอนอันดับหนึ่ง
342 10 เอลิเมนต์เตตระฮีดรอนอันดับสอง
351 6 เอลิเมนต์ปริซึมสามเหลี่ยมอันดับหนึ่ง
352 15 เอลิเมนต์ปริซึมสามเหลี่ยมอันดับสอง
361 8 เอลิเมนต์เฮกซะฮีดรอนอันดับหนึ่ง
362 20 เอลิเมนต์เฮกซะฮีดรอนอันดับสอง (ตระกูล Serendipity)
เอลิเมนต์อินเทอร์เฟซ 541 4×2 เอลิเมนต์ผิวสี่เหลี่ยมอันดับหนึ่ง (ใช้ในการวิเคราะห์ความเค้นไม่ได้)
542 8×2 เอลิเมนต์ผิวสี่เหลี่ยมอันดับสอง (ใช้ในการวิเคราะห์ความเค้นไม่ได้)
เอลิเมนต์คาน 611 2 เอลิเมนต์คาน Bernoulli-Euler 2 โหนด (6 องศาอิสระต่อโหนด)
641 2×2 เอลิเมนต์คาน Bernoulli-Euler 2 โหนด (3 องศาอิสระต่อโหนด สำหรับองศาอิสระแบบผสม)
เอลิเมนต์เชลล์ 731 3 เอลิเมนต์เชลล์สามเหลี่ยม MITC3 (6 องศาอิสระต่อโหนด)
741 4 เอลิเมนต์เชลล์สี่เหลี่ยม MITC4 (6 องศาอิสระต่อโหนด)
743 9 เอลิเมนต์เชลล์สี่เหลี่ยม MITC9 (6 องศาอิสระต่อโหนด)
761 3×2 เอลิเมนต์เชลล์สามเหลี่ยม MITC3 (3 องศาอิสระต่อโหนด สำหรับองศาอิสระแบบผสม)
781 4×2 เอลิเมนต์เชลล์สี่เหลี่ยม MITC4 (3 องศาอิสระต่อโหนด สำหรับองศาอิสระแบบผสม)

เอลิเมนต์เฮกซะฮีดรอนอันดับหนึ่ง 361 มีหลายสูตร (การอินทิเกรตเต็มรูปแบบ, โหมดอินคอมแพทิเบิล, B-bar และ F-bar) ซึ่งเลือกผ่านข้อมูลควบคุมการวิเคราะห์ รายละเอียดดูที่ การกำหนดรูปแบบเอลิเมนต์ขั้นสูง

เอลิเมนต์คาน 641 และเอลิเมนต์เชลล์ 761/781 เป็นสูตรสำหรับเชื่อมเอลิเมนต์โครงสร้างที่มี 6 องศาอิสระเข้ากับเอลิเมนต์โซลิดที่มี 3 องศาอิสระที่โหนดเดียวกัน โดยแทนโหนดโครงสร้างหนึ่งโหนดด้วยโหนด 3 องศาอิสระสองโหนด สูตรเองเหมือนกับรุ่น 6 องศาอิสระที่สอดคล้องกัน (611, 731 และ 741)

ไลบรารีฟังก์ชันรูปร่าง

รูทีนคำนวณเอลิเมนต์ (การสร้างเมทริกซ์ความแข็งและเวกเตอร์แรงภายใน) ไม่ได้มีรูทีนแยกสำหรับแต่ละชนิดเอลิเมนต์ แต่เรียกไลบรารีฟังก์ชันรูปร่างผ่านอินเทอร์เฟซรวมที่รับหมายเลขชนิดเอลิเมนต์ fetype เป็นอาร์กิวเมนต์ โมดูล elementInfo (fistr1/src/lib/element/element.f90) ให้ฟังก์ชันต่อไปนี้

  • NumOfQuadPoints(fetype): คืนค่าจำนวนจุดอินทิเกรต \(n_q\) สำหรับชนิดเอลิเมนต์
  • getQuadPoint(fetype, np, pos): คืนค่าพิกัดธรรมชาติ \(\boldsymbol{r}_i\) ของจุดอินทิเกรต \(i\)
  • getWeight(fetype, np): คืนค่าน้ำหนัก \(w_i\) ของจุดอินทิเกรต \(i\)
  • getShapeFunc(fetype, r, N): คืนค่าฟังก์ชันรูปร่าง \(N_\alpha^e(\boldsymbol{r})\) ที่พิกัดธรรมชาติ \(\boldsymbol{r}\)
  • getShapeDeriv(fetype, r, dN): คืนค่าอนุพันธ์ตามพิกัดธรรมชาติ \(\partial N_\alpha^e/\partial \boldsymbol{r}\) ของฟังก์ชันรูปร่าง
  • getGlobalDeriv(fetype, n_e, r, X^e, J, dN_x): เมื่อให้พิกัดโหนดของเอลิเมนต์ \(\boldsymbol{X}^e\) จะคืนค่าอนุพันธ์ตามพิกัดกายภาพ \(\partial N_\alpha^e/\partial \boldsymbol{x}\) และดีเทอร์มิแนนต์จาโคเบียน \(J\)
  • getNumberOfSubface(fetype), getSubFace(fetype, k, ...): คืนค่าจำนวนผิวขอบเขตของเอลิเมนต์และหมายเลขโหนดที่ประกอบเป็นแต่ละผิว ใช้ในการสร้างโหลดบนผิวและผิวสัมผัส

แต่ละฟังก์ชันจะแยกการทำงานภายในตามหมายเลขชนิดเอลิเมนต์ แล้วเรียกซับรูทีนฟังก์ชันรูปร่างและอนุพันธ์ของฟังก์ชันรูปร่างในโมดูลระดับล่างที่เตรียมไว้สำหรับแต่ละชนิดเอลิเมนต์ (tet4n.f90, tet10n.f90, prism6n.f90, prism15n.f90, hex8n.f90, hex20n.f90, tri3n.f90, tri6n.f90, quad4n.f90, quad8n.f90, quad9n.f90, line2n.f90, line3n.f90) ตารางตัวเลขของพิกัดจุดอินทิเกรตและน้ำหนักรวมอยู่ใน quadrature.f90 เมื่อต้องการเพิ่มชนิดเอลิเมนต์ใหม่ ให้พัฒนาโมดูลระดับล่างที่สอดคล้องกันแล้วเพิ่มสาขาการทำงานในแต่ละฟังก์ชันของ elementInfo

การแปลงลำดับโหนดกลางของเอลิเมนต์สามเหลี่ยมอันดับสอง

สำหรับเอลิเมนต์สามเหลี่ยมอันดับสอง 232 ลำดับโหนดกลางในรูปแบบอินพุตเมช HEC-MW (ที่เรียงโหนดมุมรอบเอลิเมนต์ก่อน แล้วจึงโหนดกลางตามขอบ 1-2, 2-3, …) ต่างจากรูปแบบภายใน FrontISTR ที่ฟังก์ชันรูปร่างในไลบรารีเอลิเมนต์สมมติไว้ ความแตกต่างนี้ถูกแก้ทันทีหลังอ่านเมช โดย hecmw2fstr_mesh_conv (fistr1/src/common/hecmw2fstr_mesh_conv.f90 และ hecmw2fstr_connect_conv.c) เรียงโหนดทั้งหกใหม่เป็น \(\{1,2,3,6,4,5\}\) ตามตารางแปลง Table232 เนื่องจากการแปลงทำโดยตรงกับอาร์เรย์ที่เก็บข้อมูลการเชื่อมต่อเอลิเมนต์ การเรียกไลบรารีเอลิเมนต์หลังจากนั้นทั้งหมดจึงใช้ลำดับโหนดภายในของ FrontISTR เมื่อส่งออกผลลัพธ์ จะใช้การแปลงย้อนกลับ fstr2hecmw_mesh_conv คืนเป็นรูปแบบ HEC-MW ก่อนเขียนออก ดังนั้นทั้งอินพุตและเอาต์พุต ผู้ใช้จำเป็นต้องคำนึงถึงเฉพาะรูปแบบ HEC-MW

เอลิเมนต์โซลิดสามมิติ 342 (เตตระฮีดรอนอันดับสอง) และ 352 (ปริซึมสามเหลี่ยมอันดับสอง) มีการแปลงอัตโนมัติในลักษณะเดียวกัน ส่วน 362 (เฮกซะฮีดรอนอันดับสอง) ไม่มีการแปลง สำหรับรายละเอียดการจัดการดู ฟังก์ชันรูปร่างสำหรับเอลิเมนต์โซลิดสามมิติ สำหรับเอลิเมนต์ระนาบสี่เหลี่ยมอันดับสอง 242 และเอลิเมนต์อินเทอร์เฟซ 542 ไม่มีการแปลง เพราะลำดับโหนดกลางในรูปแบบอินพุต HEC-MW ตรงกับรูปแบบภายใน

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