คำถามติดแท็ก petsc

PETSc เป็นชุดโครงสร้างข้อมูลและกิจวัตรแบบโอเพ่นซอร์สสำหรับโซลูชันแอปพลิเคชันทางวิทยาศาสตร์ที่ปรับขนาดได้ (ขนาน) ซึ่งจำลองโดยสมการเชิงอนุพันธ์ย่อย

17
มีตัวแก้ปัญหาการเขียนโปรแกรมแบบไม่เชิงเส้นคุณภาพสูงสำหรับ Python หรือไม่?
ฉันมีปัญหาการเพิ่มประสิทธิภาพทั่วโลกที่ไม่ท้าทายเพื่อแก้ปัญหา ปัจจุบันผมใช้กล่องเครื่องมือเพิ่มประสิทธิภาพของ MATLAB (โดยเฉพาะfmincon()กับอัลกอริทึม = 'sqp') ซึ่งมีประสิทธิภาพมาก อย่างไรก็ตามรหัสของฉันส่วนใหญ่อยู่ใน Python และฉันก็ชอบที่จะเพิ่มประสิทธิภาพใน Python ด้วยเช่นกัน มีตัวแก้ NLP ที่มีการผูก Python ที่สามารถแข่งขันได้fmincon()หรือไม่ มันจะต้อง สามารถรับมือกับความไม่เสมอภาคและความไม่เท่าเทียมกันได้ ไม่ต้องการให้ผู้ใช้จัดหายาโคบ ไม่เป็นไรหากไม่รับประกันว่าจะมีประสิทธิภาพระดับโลก ( fmincon()ไม่) fmincon()ฉันกำลังมองหาบางสิ่งบางอย่างที่ทนทานลู่ไปยังท้องถิ่นที่เหมาะสมแม้สำหรับความท้าทายปัญหาและแม้ว่ามันจะช้ากว่าเล็กน้อย ฉันได้พยายามแก้หลายที่ให้บริการผ่าน OpenOpt และพบว่าพวกเขาจะด้อยกว่าของ fmincon/sqpMATLAB เพียงเพื่อเน้นฉันมีสูตรเวิ้งว้างและแก้ปัญหาที่ดี เป้าหมายของฉันคือการเปลี่ยนภาษาเพื่อให้เวิร์กโฟลว์มีความคล่องตัวมากขึ้น เจฟฟ์ชี้ให้เห็นว่าคุณลักษณะบางอย่างของปัญหาอาจเกี่ยวข้องกัน พวกเขาคือ: 10-400 ตัวแปรการตัดสินใจ 4-100 ข้อ จำกัด ความเท่าเทียมกันของพหุนาม (ดีกรีพหุนามมีช่วงตั้งแต่ 1 ถึงประมาณ 8) จำนวนข้อ จำกัด ของความไม่เท่าเทียมกันที่มีเหตุผลเท่ากับจำนวนตัวแปรการตัดสินใจประมาณสองเท่า ฟังก์ชั่นวัตถุประสงค์เป็นหนึ่งในตัวแปรการตัดสินใจ ชาวจาโคเบียนแห่งข้อ จำกัด ความเท่าเทียมมีความหนาแน่นสูงเช่นเดียวกับชาวจาโคเบียนแห่งข้อ จำกัด …

2
ทำไมตัวแก้ปัญหาเชิงเส้นย้ำของฉันถึงไม่มาบรรจบกัน?
สิ่งที่ผิดพลาดเมื่อใช้วิธี Krylov แบบ preconditoned จากKSP ( แพคเกจแก้ปัญหาเชิงเส้นของPETSc ) เพื่อแก้ปัญหาระบบเชิงเส้นแบบกระจัดกระจายเช่นที่ได้จากการทำ discretizing และ linearizing สมการเชิงอนุพันธ์บางส่วน? ฉันสามารถใช้ขั้นตอนใดในการพิจารณาว่าเกิดปัญหาอะไรขึ้นกับฉัน ฉันสามารถเปลี่ยนแปลงอะไรได้บ้างเพื่อแก้ปัญหาระบบเชิงเส้นอย่างประสบความสำเร็จและมีประสิทธิภาพ

5
อะไรคือความแตกต่างที่สำคัญระหว่าง PETSc และ Trilinos?
เท่าที่ผมสามารถบอกได้ทั้งสองขนาดใหญ่ทั่วไปกระทรวงพลังงานวิทยาศาสตร์การคำนวณกรอบซอฟต์แวร์สหรัฐ PETScและTrilinos ดูเหมือนว่าพวกเขาจะคล้ายกันในครั้งแรก, เกินความแตกต่างในภาษา (C กับ C ++) อะไรคือความแตกต่างที่สำคัญระหว่างสองกรอบงานและปัจจัยใดที่ควรมีอิทธิพลต่อการเลือกหนึ่งกรอบ (ไม่สนใจอคติเชิงสถาบันและโครงสร้างพื้นฐานที่มีอยู่)

1
ทำไมวิธีการของนิวตันจึงไม่มาบรรจบกัน?
ฉันกำลังใช้แพ็คเกจตัวแก้ปัญหาแบบไม่เชิงเส้นของPETSc SNESเพื่อแก้ระบบสมการไม่เชิงเส้นที่ได้จากการแยกส่วนสมการเชิงอนุพันธ์บางส่วนออก ฉันจะทราบได้อย่างไรว่าเหตุใดตัวแก้ปัญหาจึงไม่มาบรรจบกันและฉันจะทำอย่างไรเพื่อแก้สมการของฉันให้สำเร็จ

3
ระยะทางแบบยุคลิดใน Octave
ฉันอยากรู้ว่ามีวิธีที่รวดเร็วในการคำนวณระยะทางแบบยุคลิดของเวกเตอร์สองตัวใน Octave หรือไม่ ดูเหมือนว่าไม่มีฟังก์ชั่นพิเศษสำหรับสิ่งนั้นดังนั้นฉันควรใช้สูตรด้วยsqrtหรือไม่

2
ไลบรารีใดบ้างที่มีการสนับสนุนระดับสูงสำหรับ multigrid
ฉันวางแผนที่จะใช้หลายค่าเพื่อคำนวณค่าลักษณะเฉพาะและเวกเตอร์และฉันสังเกตเห็นว่า PETSc มีการรองรับหลายระดับในระดับสูง เอกสาร PETSc บอกว่าไม่ควรใช้ส่วนของ PETSc เพราะมันจะถูกแทนที่ในไม่ช้า ห้องสมุดอื่นใดที่มีการสนับสนุนระดับสูงสำหรับ multigrid และคร่าว ๆ ว่า PETSc จะปล่อยการสนับสนุน multigrid ใหม่เร็ว ๆ นี้?


2
PETSc สำหรับ Dense Matrices มีประโยชน์อย่างไร
ทุกที่ที่ฉันเห็น PETSc tutorial / เอกสาร ฯลฯ บอกว่ามันมีประโยชน์สำหรับพีชคณิตเชิงเส้นและมักจะระบุว่าระบบจะได้ประโยชน์ สิ่งที่เกี่ยวกับเมทริกซ์หนาแน่น? ผมกังวลเกี่ยวกับการแก้x = Bสำหรับหนาแน่นA x = bAx=ขAx=bAAA ฉันเขียนโค้ดของตัวเองสำหรับ CG และ QMR ใน Fortran สร้างพื้นฐานคือการฉีกออกจากกันรหัสเทียมและเพิ่มการปฏิบัติหน่ายเป็นไปได้ ( ddot, dnrmและdgemv) ที่มีการปรับตัวเองเล็ก ๆ น้อย ๆ สิ่งนี้จะเปรียบเทียบกับ PETSc ได้อย่างไร ฉันรู้ว่าคำตอบที่ดีที่สุดสำหรับฉันที่จะลองด้วยตัวเอง แต่ด้วยเหตุผลของเวลาและอื่น ๆ นั่นเป็นไปไม่ได้ ความช่วยเหลือใด ๆ ที่ชื่นชมมาก

3
ทำไมตัวแก้แบบขนานของฉันจึงช้ากว่าตัวแก้ไขแบบลำดับของฉัน
ฉันกำลังเล่นกับPETScและสังเกตว่าเมื่อฉันรันโปรแกรมด้วยกระบวนการมากกว่าหนึ่งผ่านMPIดูเหมือนว่าจะทำงานช้าลง ! ฉันจะตรวจสอบเพื่อดูว่าเกิดอะไรขึ้น?

4
คำแนะนำใด ๆ สำหรับกรอบการทดสอบหน่วยเข้ากันได้กับรหัส / ไลบรารีที่ใช้ MPI
โดยปกติฉันเขียนรหัสซีเรียลและเมื่อฉันฉันเขียนการทดสอบหน่วยด้วยกรอบการทดสอบแบบ xUnit (MATLAB xUnit, PyUnit / nose หรือกรอบการทดสอบ C ++ ของ Google) จากการค้นหาโดยคร่าวๆของ Google ฉันไม่เห็นว่าโค้ดทดสอบหน่วยผู้ปฏิบัติงานที่ใช้ MPI มากน้อยเพียงใด มีวิธีปฏิบัติที่ดีที่สุดสำหรับสิ่งนั้นหรือไม่? เปรียบเทียบกับกลยุทธ์สำหรับการทดสอบหน่วยและการพัฒนาที่ขับเคลื่อนด้วยการทดสอบฉันกำลังมองหาคำตอบที่เกี่ยวข้องกับซอฟต์แวร์ที่ฉันควรใช้สำหรับกรอบการทดสอบ (ถ้ามี) คำตอบอาจเป็น "ม้วนรหัสของคุณเอง" ซึ่ง ตัวอย่างกรณีของรหัสการทดสอบที่กำหนดเองจะเป็นประโยชน์) สิ่งที่ฉันกำลังมองหาเพื่อทดสอบส่วนใหญ่คือการประเมินฟังก์ชั่นทางด้านขวาและกิจวัตรประจำวันของ Jacobian matrix สำหรับเวลาที่จะรวม PDEs แบบกึ่งแยกส่วน ฉันจะใช้ PETSc ดังนั้นถ้ามีอะไรเฉพาะ PETSc ที่จะเป็นประโยชน์นอกเหนือไปจากกรอบการทดสอบทั่วไปมากขึ้น ชี้แจงการแก้ไข: ตัวอย่างจะอยู่ใน${PETSC_DIR}/src/ts/examples/tutorials/ex2.cที่ที่ฉันต้องการทดสอบบางสิ่งเช่นRHSFunction(การประเมินฟังก์ชั่นด้านขวา) และRHSJacobian(การประเมินเมทริกซ์จาโคเบียน) ฉันจะทดสอบกับค่าที่ทราบสำหรับด้านขวาที่ประกอบและเมทริกซ์ Jacobian ที่ประกอบขึ้น ฉันสามารถรับค่าเหล่านี้ในเชิงวิเคราะห์สำหรับอินสแตนซ์ปัญหาง่ายๆ ฟังก์ชั่นเหล่านี้เป็นฟังก์ชั่นเฉพาะแอปพลิเคชันที่จะไม่ใช้งานฟังก์ชั่นระดับแอปพลิเคชันอื่น ๆ แต่พวกเขาสามารถเรียก MPI ถ้าการประกอบเวกเตอร์หรือเมทริกซ์จะทำภายในฟังก์ชัน (เช่นในตัวอย่าง PETSc ที่เชื่อมโยงด้านบน) …

5
การคำนวณโครงสร้าง sparsity สำหรับเมทริกซ์องค์ประกอบ จำกัด
คำถาม: มีวิธีการใดในการคำนวณโครงสร้าง sparsity ของเมทริกซ์ไฟท์องค์ประกอบที่แม่นยำและมีประสิทธิภาพ ข้อมูล: ฉันกำลังทำงานกับตัวแก้สมการความดัน Poisson โดยใช้วิธีของ Galerkin ที่มีพื้นฐานกำลังสองของลากรองจ์เขียนใน C และใช้ PETSc สำหรับการจัดเก็บเมทริกซ์แบบกระจัดกระจายและกิจวัตร KSP ในการใช้ PETSc อย่างมีประสิทธิภาพฉันจำเป็นต้องจัดสรรหน่วยความจำล่วงหน้าสำหรับเมทริกซ์ความแข็งระดับโลก ขณะนี้ฉันกำลังประกอบ mock เพื่อประเมินจำนวนที่ไม่ใช่ศูนย์ต่อแถวดังต่อไปนี้ (pseudocode) int nnz[global_dim] for E=1 to NUM_ELTS for i=1 to 6 gi = global index of i if node gi is free for j=1 to 6 gj = global …

2
ฉันควรใช้เงื่อนไขล่วงหน้า (และตัวแก้ไข) ใน PETSc สำหรับระบบสมมาตรไม่ จำกัด
ระบบของฉันเป็นปัญหา FE ที่สมมาตรกับตัวคูณแบบลากรองจ์ (เช่นการไหลของ Stokes ที่ไม่สามารถบีบอัดได้): ( กBBTค)(ABTBC)\begin{pmatrix}A & B^T \\ B & C\end{pmatrix} โดยที่เป็นกรณีทั่วไป (ฉันแน่ใจด้วยซ้ำว่าสมการนั้นมีการกำหนดหมายเลขเพื่อให้ตัวคูณ Lagrange ปรากฏขึ้นครั้งสุดท้าย) ระบบมีขนาดค่อนข้างใหญ่ (+ 100k บรรทัด)ค= 0C=0C = 0 เมื่ออ่านคำตอบของคำถามนี้ฉันได้รับความประทับใจว่ามีปัจจัยเบื้องต้นที่เหมาะสมที่สามารถใช้กับปัญหา FE ที่หลากหลายได้ การใช้ PETSc ฉันได้จัดการแก้ปัญหาด้วย MINRES ( -ksp_type minres -pc_type none -mat_type sbaij) แม้ว่าความแม่นยำจะไม่ดี (ทำให้นิวตันซ้ำหลายครั้งสำหรับปัญหาเชิงเส้น) ดูเหมือนว่าไม่มีการรวมกันของ preconditioner และ ksp-solver อื่น ๆ มีการรวมกันของการตั้งค่าสถานะสำหรับ PETSc ที่จะแก้ปัญหาระบบนี้ได้เร็วกว่าเพียงแค่ …

3
ตัวแก้เชิงเส้นเบาบางสำหรับหลาย ๆ มือขวา
ฉันจำเป็นต้องแก้ปัญหาระบบเชิงเส้นแบบกระจัดกระจาย (300x300 ถึง 1,000x1000) ที่มีด้านขวามือจำนวนมาก (300 ถึง 1,000) นอกเหนือจากปัญหาแรกนี้ฉันยังต้องการที่จะแก้ปัญหาระบบที่แตกต่างกัน แต่ด้วยองค์ประกอบที่ไม่เป็นศูนย์เหมือนกัน (ค่าที่แตกต่างกัน) ซึ่งเป็นระบบที่ห่างเหินจำนวนมากที่มีรูปแบบการกระจายอย่างต่อเนื่อง เมทริกซ์ของฉันไม่มีกำหนด ประสิทธิภาพของการแยกตัวประกอบและการกำหนดค่าเริ่มต้นไม่สำคัญ แต่ประสิทธิภาพของขั้นตอนการแก้คือ ขณะนี้ฉันกำลังพิจารณา PaStiX หรือ Umfpack และฉันอาจจะเล่นกับ Petsc (ซึ่งรองรับทั้งนักแก้ปัญหา) มีห้องสมุดที่สามารถใช้ประโยชน์จากความต้องการเฉพาะของฉัน (vectorization, multi-threading) หรือฉันควรพึ่งพานักแก้ปัญหาทั่วไปและ อาจแก้ไขได้เล็กน้อยตามความต้องการของฉัน เกิดอะไรขึ้นถ้าเมทริกซ์กระจัดกระจายมีขนาดใหญ่ขึ้นถึง ?106× 106106×10610^6 \times 10^6


2
วิธีทำงานกับพอยน์เตอร์ฟังก์ชั่นใน Fortran ในโปรแกรมวิทยาศาสตร์
นี่คือการใช้งานทั่วไปของตัวชี้ฟังก์ชันใน C. ฉันต้องการทำสิ่งที่คล้ายกันใน Fortran ฉันมีความคิดบางอย่าง แต่ฉันต้องการที่จะรู้ว่ามีวิธีที่ยอมรับได้หรือไม่ พอยน์เตอร์ของฟังก์ชั่นและบริบทที่ผ่านเข้ามาโดยผู้ใช้จะถูกเก็บไว้จากนั้นเรียกในภายหลัง typedef PetscErrorCode (*TSIFunction)(TS,PetscReal,Vec,Vec,Vec,void*); PetscErrorCode TSSetIFunction(TS ts,Vec res,TSIFunction f,void *ctx); ฟังก์ชั่นของผู้ใช้จะถูกเรียกคืนโดยใช้บริบทของพวกเขาในเวลาต่อมา ใน PETSc พวกเขายังใช้ประโยชน์จากตารางตัวชี้ฟังก์ชัน -> ทุกอย่างเป็นปลั๊กอินดังนั้นผู้ใช้สามารถลงทะเบียนการใช้งานของตัวเองและพวกเขาเป็นชั้นหนึ่ง #define PCGAMG "gamg" PCRegisterDynamic(PCGAMG ,path,"PCCreate_GAMG",PCCreate_GAMG); สิ่งนี้ลงทะเบียนรูทีนการสร้างใน "FList" จากนั้น PCSetFromOptions () จะเสนอความสามารถในการเลือกวิธีนี้เมื่อเทียบกับตัวเลือกอื่น ๆ หากระบบรองรับการโหลดแบบไดนามิกคุณสามารถข้ามการพึ่งพาเวลาคอมไพล์ในสัญลักษณ์ PCCreate_GAMG และเพิ่งผ่าน NULL จากนั้นสัญลักษณ์จะถูกค้นหาในไลบรารีที่แบ่งใช้ในขณะใช้งาน โปรดทราบว่าหนึ่งขั้นตอนนี้เกินกว่า "โรงงาน" มันเป็นสิ่งที่ตรงกันข้ามกับอุปกรณ์ควบคุมที่คล้ายกับสิ่งที่ Martin Fowler เรียกว่า "service locator" หมายเหตุ: สิ่งนี้เกิดขึ้นในการติดต่อส่วนตัวของฉันกับเจดบราวน์ที่ซึ่งเขาถามคำถามนี้ให้ฉัน ฉันตัดสินใจที่จะ …
11 petsc  fortran 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.