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

!SOLVER

การควบคุมตัวแก้สมการ

ข้อมูลควบคุมที่จำเป็น

พารามิเตอร์

METHOD =    วิธีแก้ (CG, BiCGSTAB, GMRES, GPBiCG, CR, DIRECT, DIRECTmkl, MUMPS)
            DIRECT     : วิธีตรงสำหรับกรณีที่ไม่ใช่การวิเคราะห์การสัมผัส (เฉพาะการประมวลผลแบบลำดับ) (ขณะนี้ใช้งานไม่ได้)
            DIRECTmkl  : วิธีตรงโดยใช้ Intel MKL
            MUMPS      : วิธีตรงโดยใช้ MUMPS
            เมื่อเลือกวิธีตรง บรรทัดข้อมูลจะถูกละเว้น
            วิธีทำซ้ำสำหรับปัญหา 3 องศาอิสระสามารถใช้การประมวลผลแบบขนานด้วยเธรดผ่าน OpenMP

PRECOND =   วิธีพรีคอนดิชันสำหรับตัวแก้แบบวนซ้ำ (1, 2, 3, 5, 10, 11, 12, 22)
            1, 2       : (Block) SSOR (มีการจัดลำดับหลายสีเฉพาะสำหรับปัญหา 3 องศาอิสระ)
            3          : (Block) Diagonal Scaling
            5          : AMG โดยใช้แพ็กเกจพรีคอนดิชันมัลติกริด ML
            10         : Block ILU(0)
            11         : Block ILU(1)
            12         : Block ILU(2)
            22         : AMG โดยใช้ SA-AMG (Smoothed Aggregation AMG) ที่ติดตั้งใน HEC-MW
            10, 11, 12 ใช้ได้เฉพาะกับปัญหา 3 องศาอิสระ
            22 ใช้ได้เฉพาะกับบิลด์ที่เปิดใช้ LAPACK
            สำหรับการประมวลผลแบบขนานด้วยเธรด OpenMP แนะนำ SSOR, Diagonal Scaling, ML หรือ SA-AMG

ITERLOG =   ระบุว่าจะส่งออกประวัติการลู่เข้าของตัวแก้แบบวนซ้ำหรือไม่          (YES/NO)(ค่าเริ่มต้น: NO)

TIMELOG =   ระบุว่าจะส่งออกเวลาคำนวณของตัวแก้สมการหรือไม่                (YES/NO/VERBOSE)(ค่าเริ่มต้น: NO)

LOGLEVEL =  ระดับการส่งออกข้อมูลวินิจฉัยของพรีคอนดิชัน (จำนวนเต็ม)(ค่าเริ่มต้น: ไม่ส่งออก)
            ระบุแยกจาก ITERLOG และ TIMELOG
            เมื่อมีค่า 1 ขึ้นไป จะส่งออกโครงสร้างลำดับชั้นและข้อมูลอื่นของพรีคอนดิชันแบบ AMG (PRECOND=5, 22)
            เมื่อมีค่า 2 ขึ้นไป จะส่งออกข้อมูลที่ละเอียดขึ้นอีก (เช่น การใช้หน่วยความจำ)

USEJAD =    ระบุว่าจะใช้การจัดลำดับสำหรับเครื่องเวกเตอร์หรือไม่          (YES/NO)(ค่าเริ่มต้น: NO)
            ใช้ได้เฉพาะเมื่อใช้วิธีทำซ้ำกับปัญหา 3 องศาอิสระ

SCALING =   ระบุว่าจะสเกลเมทริกซ์ให้สมาชิกแนวทแยงเป็น 1 หรือไม่ (YES/NO)(ค่าเริ่มต้น: NO)
            ใช้ได้เฉพาะเมื่อใช้วิธีทำซ้ำกับปัญหา 3 องศาอิสระ

DUMPTYPE =  รูปแบบการดัมป์เมทริกซ์ (NONE, MM, CSR, BSR) (ใช้หลัก ๆ สำหรับการดีบัก)
            NONE : ไม่ดัมป์ (ค่าเริ่มต้น)
            MM   : รูปแบบ Matrix Market
            CSR  : รูปแบบ Compressed Sparse Row (CSR)
            BSR  : รูปแบบ Blocked CSR

DUMPEXIT =  จบโปรแกรมทันทีหลังดัมป์เมทริกซ์            (YES/NO)(ค่าเริ่มต้น: NO)

MPCMETHOD = วิธีประมวลผลข้อจำกัดหลายจุด (1, 3)
            1: วิธีเพนัลตี (ค่าเริ่มต้นเมื่อใช้วิธีตรง)
            3: การกำจัดองศาอิสระแบบชัดแจ้ง (ค่าเริ่มต้นเมื่อใช้วิธีทำซ้ำ)
            วิธี MPC-CG หมายเลข 2 ถูกนำออกแล้ว หากระบุ 2 จะแสดงคำเตือนแล้วประมวลผลด้วยวิธีเริ่มต้น

ESTCOND =   ความถี่ของการประมาณเลขเงื่อนไข (ทดลอง)
            ประมาณเลขเงื่อนไขทุกช่วงการวนซ้ำที่ระบุ และเมื่อสิ้นสุดการวนซ้ำ
            หากระบุ 0 จะไม่ทำการประมาณ

RECOMPUTE_RESIDUAL = ความถี่ในการคำนวณเวกเตอร์เศษเหลือใหม่
            ใช้ได้เฉพาะเมื่อระบุ CG, BiCGSTAB, GPBiCG หรือ PipeCG ให้ METHOD
            วิธีทำซ้ำจะอัปเดตเวกเตอร์เศษเหลือด้วยความสัมพันธ์เวียนเกิด จึงทำให้ความคลาดเคลื่อนจากการปัดเศษสะสม
            ทุกช่วงการวนซ้ำตามจำนวนที่ระบุ จะคำนวณเวกเตอร์เศษเหลือใหม่จาก {b}-[A]{x}
            เมื่อระบุ 0 จะใช้ค่าเริ่มต้นของแต่ละวิธี (CG: 50, BiCGSTAB: 100, GPBiCG: 20, PipeCG: 50)
            เมื่อระบุค่าลบ จะไม่ทำการคำนวณใหม่เป็นระยะ
            เมื่อผ่านเกณฑ์การลู่เข้า จะทำการคำนวณใหม่เพื่อยืนยันเสมอโดยไม่ขึ้นกับการตั้งค่านี้
            หากกำหนดช่วงสั้นเกินไป ไม่เพียงแต่จะเพิ่มการคูณเมทริกซ์กับเวกเตอร์เท่านั้น แต่ยังอาจ
            ทำให้การลู่เข้าแย่ลงหรือทำให้คำตอบไม่ลู่เข้าอีกต่อไป
            หลังจากเปลี่ยนการตั้งค่านี้จากค่าเริ่มต้น ให้ตรวจสอบประวัติการลู่เข้าและเศษเหลือสัมพัทธ์สุดท้าย

METHOD2 =   วิธีแก้รอง (BiCGSTAB, GMRES, GPBiCG) (ทดลอง)
            ใช้ได้เฉพาะเมื่อระบุ CG ให้ METHOD
            หากวิธี CG ลู่ออก จะสลับไปยังวิธีรองโดยอัตโนมัติและแก้ปัญหาต่อ
            พารามิเตอร์อื่นและข้อมูลในบรรทัดข้อมูลใช้ค่าเดียวกัน

CONTACT_ELIM = ระบุว่าจะทำการกำจัดองศาอิสระในการวิเคราะห์การสัมผัสหรือไม่ (0,1)
               0: ทำการกำจัดองศาอิสระเฉพาะเมื่อใช้วิธีทำซ้ำ (ค่าเริ่มต้น)
               1: ทำการกำจัดองศาอิสระเสมอ (รวมถึงเมื่อใช้วิธีตรง)

** ตั้งแต่บรรทัดที่ 2 เป็นต้นไป **

(บรรทัดที่ 2) NITER, iterPREmax, NREST, NCOLOR_IN, RECYCLEPRE
ชื่อตัวแปร คุณลักษณะ เนื้อหา
NITER I จำนวนการวนซ้ำ (ค่าเริ่มต้น: 100)
iterPREmax I จำนวนรอบของพรีคอนดิชันแบบ Additive Schwarz (ค่าเริ่มต้น: 1)
(ค่าที่แนะนำคือ 1; ในการคำนวณแบบขนานบางกรณี 2 อาจมีประสิทธิผล)
NREST I จำนวนซับสเปซ Krylov (ค่าเริ่มต้น: 10)
(ใช้ได้เฉพาะเมื่อเลือก GMRES เป็นวิธีแก้)
NCOLOR_IN I จำนวนสีเป้าหมายในการจัดลำดับหลายสี (ค่าเริ่มต้น: 10)
(ใช้ได้เฉพาะเมื่อจำนวนเธรด OpenMP ตั้งแต่ 2 ขึ้นไป)
RECYCLEPRE I จำนวนครั้งที่ใช้ข้อมูลการตั้งค่าพรีคอนดิชันซ้ำ (ค่าเริ่มต้น: 3)
(ใช้ได้เฉพาะในการวิเคราะห์ไม่เชิงเส้น)
(บรรทัดที่ 3) RESID, SIGMA_DIAG, SIGMA
ชื่อตัวแปร คุณลักษณะ เนื้อหา
RESID R ค่าคลาดเคลื่อนตัดทอน (ค่าเริ่มต้น: 1.0e-8)
SIGMA_DIAG R ตัวคูณที่ใช้กับสมาชิกแนวทแยงเมื่อคำนวณเมทริกซ์พรีคอนดิชัน (ค่าเริ่มต้น: 1.0)
(หากเกิดการหารด้วยศูนย์หรือลู่ออกด้วยพรีคอนดิชัน ILU อาจแก้ได้โดยกำหนดค่ามากกว่า 1.0)
SIGMA R ไม่ได้ใช้ (ค่าเริ่มต้น: 0.0)

เมื่อ PRECOND=5 (ละได้)

หากระบุค่า PRECOND เป็นค่าอื่นนอกเหนือจาก 5 และ 22 บรรทัดที่ 4 จะถูกละเว้น

(บรรทัดที่ 4) ML_CoarseSolver, ML_Smoother, ML_MGCycle, ML_MaxLevels, ML_CoarseningScheme, ML_NumSweep
ชื่อตัวแปร คุณลักษณะ เนื้อหา
ML_CoarseSolver I ตัวแก้สำหรับกริดหยาบของ ML (1: ใช้ตัวปรับเรียบแทน, 2: KLU (วิธีตรงแบบลำดับ), 3: MUMPS (วิธีตรงแบบขนาน)) (ค่าเริ่มต้น: 1)
(แนะนำ 3 หรือ 2 สำหรับปัญหาที่แก้ยาก และ 1 สำหรับปัญหาทั่วไป)
ML_Smoother I ตัวปรับเรียบของ ML (1: Chebyshev, 2: SymBlockGaussSeidel, 3: Jacobi) (ค่าเริ่มต้น: 1)
(แนะนำ 1)
ML_MGCycle I รอบมัลติกริดของ ML (1: V-cycle, 2: W-cycle, 3: Full-V-cycle) (ค่าเริ่มต้น: 1)
(แนะนำ 2 สำหรับปัญหาที่แก้ยาก และ 1 สำหรับปัญหาทั่วไป)
ML_MaxLevels I จำนวนระดับสูงสุดของ ML (ค่าเริ่มต้น: 10)
(สำหรับปัญหาที่แก้ยากเป็นพิเศษ ให้ใช้ตัวแก้กริดหยาบแบบวิธีตรงและ 2 ระดับ (หรือ 3 หากหน่วยความจำไม่พอ); สำหรับปัญหาทั่วไปแนะนำ 10)
ML_CoarseningScheme I สคีมการทำให้หยาบของ ML (1: UncoupledMIS, 2: METIS, 4: Zoltan, 5: DD) (ค่าเริ่มต้น: 1)
(แนะนำ 1 หรือ 5)
ML_NumSweep I จำนวนรอบกวาดของตัวปรับเรียบของ ML (สำหรับ Chebyshev คือดีกรีของพหุนาม) (ค่าเริ่มต้น: 2)
(แนะนำ 2 สำหรับ Chebyshev และ 1 สำหรับ SymBlockGaussSeidel)

เมื่อ PRECOND=22 (ละได้)

หากระบุค่า PRECOND เป็นค่าอื่นนอกเหนือจาก 22 บรรทัดที่ 5 จะถูกละเว้น ทั้งบรรทัดที่ 4 และบรรทัดที่ 5 สามารถละได้ทั้งบรรทัด และสามารถละรายการท้ายบรรทัดได้ด้วย รายการที่ระบุเป็น 0 จะใช้ค่าเริ่มต้น

รายการที่ 1 ถึง 7 ในบรรทัดที่ 4 เรียงตามลำดับเดียวกับบรรทัดตัวเลือกของ PRECOND=5 (ML) จึงสามารถนำบรรทัดตัวเลือกของ ML มาใช้ได้โดยไม่ต้องแก้ไข รายการที่ 8 ถึง 10 เป็นรายการเฉพาะของ SA-AMG

(บรรทัดที่ 4) SA_CoarseSolver, SA_Smoother, SA_MGCycle, SA_MaxLevels, (ไม่ได้ใช้), SA_ChebyDegree, SA_CoarseSize, SA_MaxAggSize, SA_GalerkinLowMem, (ไม่ได้ใช้)
ชื่อตัวแปร คุณลักษณะ เนื้อหา
SA_CoarseSolver I ตัวแก้กริดหยาบ (0: อัตโนมัติ, 1: ใช้ตัวปรับเรียบ, 2: วิธีตรงแบบเมทริกซ์หนาแน่น, 3: MUMPS (วิธีตรงแบบขนาน)) (ค่าเริ่มต้น: 0)
(ในโหมดอัตโนมัติ บิลด์ที่เปิดใช้ MUMPS จะใช้ MUMPS มิฉะนั้นจะใช้วิธีตรงแบบเมทริกซ์หนาแน่น)
SA_Smoother I ตัวปรับเรียบ (0, 1: Chebyshev) (ค่าเริ่มต้น: 0)
(รองรับเฉพาะ Chebyshev หากระบุค่าอื่น จะส่งคำเตือนและใช้ Chebyshev)
SA_MGCycle I รอบมัลติกริด (0: ค่าเริ่มต้น (W-cycle), 1: V-cycle, 2: W-cycle) (ค่าเริ่มต้น: 0)
(ไม่รองรับ Full-V-cycle)
SA_MaxLevels I จำนวนระดับสูงสุด (ค่าเริ่มต้น: 20)
(ไม่ได้ใช้) I ตำแหน่งที่สอดคล้องกับสคีมการทำให้หยาบของ ML เนื่องจาก SA-AMG ใช้การรวมกลุ่มแบบไม่เชื่อมโยงเสมอ หากระบุค่าที่ไม่ใช่ 0 จะส่งคำเตือนและละเว้นค่านั้น
SA_ChebyDegree I ดีกรีของพหุนามสำหรับตัวปรับเรียบ Chebyshev (ค่าเริ่มต้น: 2)
SA_CoarseSize I ขนาดตัดทอนของกริดหยาบ (ค่าเริ่มต้น: 50000 เมื่อใช้ MUMPS เป็นตัวแก้กริดหยาบ มิฉะนั้นเป็น 100)
SA_MaxAggSize I ขนาดสูงสุดของกลุ่มรวม (ค่าเริ่มต้น: 96)
SA_GalerkinLowMem I วิธีคำนวณเมทริกซ์กริดหยาบ (0: ปกติ (เน้นความเร็ว), ค่าบวก: ประหยัดหน่วยความจำ) (ค่าเริ่มต้น: 0)
(ระบุค่าบวกหากหน่วยความจำไม่เพียงพอระหว่างการตั้งค่า)
(ไม่ได้ใช้) I สำรองไว้สำหรับการขยายในอนาคต

บรรทัดที่ 5 ใช้เฉพาะกับ SA-AMG และ ML จะไม่อ่านบรรทัดนี้

(บรรทัดที่ 5) SA_Theta, SA_ChebyAlpha, SA_Safety, SA_TaperK, SA_AggOrder, SA_MinAggSize, SA_Verify, SA_DumpVTK
ชื่อตัวแปร คุณลักษณะ เนื้อหา
SA_Theta R ค่าเกณฑ์สำหรับพิจารณาการเชื่อมต่อที่แข็งแรง (ค่าเริ่มต้น: 0.0)
(เมื่อเป็น 0.0 จะใช้โครงสร้างสมาชิกที่ไม่เป็นศูนย์ของเมทริกซ์เป็นกราฟโดยตรง)
SA_ChebyAlpha R อัตราส่วนที่กำหนดขอบล่างของช่วงค่าลักษณะเฉพาะที่ตัวปรับเรียบ Chebyshev ใช้เป็นเป้าหมาย (ค่าเริ่มต้น: 20.0)
SA_Safety R ตัวคูณความปลอดภัยที่ใช้กับค่าประมาณของค่าลักษณะเฉพาะสูงสุด (ค่าเริ่มต้น: 1.1)
SA_TaperK R สัมประสิทธิ์ K ของเทเปอร์การทำให้หยาบ (ค่าเริ่มต้น: 100)
(ตั้งแต่ระดับ 2 เป็นต้นไป การทำให้หยาบจะค่อยเป็นค่อยไปเพื่อให้เหลือกลุ่มรวมอย่างน้อยประมาณ K กลุ่ม ค่าลบจะปิดใช้งานเทเปอร์)
SA_AggOrder R ลำดับการกวาดของการรวมกลุ่ม (0: ค่าเริ่มต้น (ลำดับ BFS), 1: ลำดับ BFS, 2: ลำดับแฮชของหมายเลขโหนด (ทดลอง), 3: ลำดับดีกรีจากน้อยไปมาก (ทดลอง), 4: ลำดับดีกรีจากมากไปน้อย (ทดลอง), ค่าลบ: ลำดับหมายเลขโหนด) (ค่าเริ่มต้น: 0)
SA_MinAggSize R ขนาดต่ำสุดของกลุ่มรวม (ค่าเริ่มต้น: 3)
SA_Verify R ระบุว่าจะตรวจสอบตนเองระหว่างการตั้งค่าหรือไม่ (0: ไม่ตรวจ, ค่าบวก: ตรวจ) (ค่าเริ่มต้น: 0) (ใช้หลัก ๆ สำหรับการดีบัก)
SA_DumpVTK R ระบุว่าจะส่งออกการรวมกลุ่มที่ระดับสูงสุดในรูปแบบ VTK หรือไม่ (0: ไม่ส่งออก, ค่าบวก: ส่งออก) (ค่าเริ่มต้น: 0) (ใช้หลัก ๆ สำหรับการดีบัก)

ตัวอย่างการใช้งาน

ใช้วิธี CG พร้อมพรีคอนดิชัน SSOR และตั้งจำนวนการวนซ้ำสูงสุดเป็น 10000 ค่าคลาดเคลื่อนตัดทอนเป็น 1.0e-8

!SOLVER, METHOD=CG, PRECOND=1, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0

ใช้วิธี GMRES พร้อมพรีคอนดิชัน SSOR และตั้งจำนวนซับสเปซ Krylov เป็น 40 จำนวนสีเป้าหมายสำหรับการจัดลำดับหลายสีเป็น 100

!SOLVER, METHOD=GMRES, PRECOND=1, ITERLOG=YES, TIMELOG=YES
  10000, 1, 40, 100
  1.0e-8, 1.0, 0.0

ใช้วิธี CG พร้อมพรีคอนดิชัน ILU(0) และตั้งตัวคูณที่ใช้กับสมาชิกแนวทแยงเมื่อคำนวณเมทริกซ์พรีคอนดิชันเป็น 1.1

!SOLVER, METHOD=CG, PRECOND=10, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.1, 0.0

ใช้ AMG โดย ML เป็นพรีคอนดิชันสำหรับ CG

!SOLVER, METHOD=CG, PRECOND=5, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0

ใช้ AMG โดย ML เป็นพรีคอนดิชันสำหรับ CG และใช้ MUMPS เป็นตัวแก้กริดหยาบ (สำหรับปัญหาที่แก้ยาก)

!SOLVER, METHOD=CG, PRECOND=5, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0
  3

ใช้ AMG โดย ML เป็นพรีคอนดิชันสำหรับ CG และใช้ W-cycle เป็นรอบมัลติกริด (สำหรับปัญหาที่แก้ยาก)

!SOLVER, METHOD=CG, PRECOND=5, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0
  1, 1, 2

ใช้ AMG โดย ML เป็นพรีคอนดิชันสำหรับ CG ใช้ MUMPS เป็นตัวแก้กริดหยาบ และตั้งจำนวนระดับสูงสุดเป็น 2 (สำหรับปัญหาที่แก้ยากมาก)

!SOLVER, METHOD=CG, PRECOND=5, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0
  3, 1, 1, 2

ใช้ SA-AMG ที่ติดตั้งใน HEC-MW เป็นพรีคอนดิชันสำหรับ CG

!SOLVER, METHOD=CG, PRECOND=22, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0

ใช้ SA-AMG เป็นพรีคอนดิชันสำหรับ CG และใช้ MUMPS เป็นตัวแก้กริดหยาบ

!SOLVER, METHOD=CG, PRECOND=22, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0
  3

สำหรับการวิเคราะห์การสัมผัสแบบเสียดทาน ให้ใช้ BiCGSTAB พร้อมพรีคอนดิชัน SA-AMG และส่งออกลำดับชั้นของพรีคอนดิชัน AMG

!SOLVER, METHOD=BiCGSTAB, PRECOND=22, ITERLOG=YES, TIMELOG=YES, LOGLEVEL=1
  10000, 1
  1.0e-8, 1.0, 0.0