มันยุ่งยากสำหรับผู้ใช้ในการระบุทุกแง่มุมของอัลกอริทึม หากอัลกอริทึมอนุญาตให้ใช้ส่วนประกอบที่ซ้อนกันจะไม่มีตัวเลือกจำนวน จำกัด เพียงพอ ดังนั้นจึงเป็นสิ่งสำคัญที่ตัวเลือกไม่จำเป็นต้อง "เพิ่มฟอง" ให้อยู่ในระดับสูงสุดเช่นเดียวกับในกรณีที่มีอาร์กิวเมนต์ที่ชัดเจนหรือพารามิเตอร์เทมเพลต บางครั้งเรียกว่า "ปัญหาการกำหนดค่า" ในวิศวกรรมซอฟต์แวร์ ฉันเชื่อว่าPETScมีระบบที่ทรงพลังสำหรับการจัดการการกำหนดค่า มันก็คล้าย ๆ กับรูปแบบการบริการสในการเขียนเรียงความมาร์ตินฟาวเลอร์ในการผกผันของการควบคุม
ระบบการกำหนดค่าของ PETSc ทำงานผ่านการรวมกันของการกำหนดค่าที่ผู้ใช้ระบุซึ่งจัดการโดยวัตถุตัวแก้ปัญหา (พร้อมรับและตั้งค่าแบบสอบถาม) และฐานข้อมูลตัวเลือก องค์ประกอบของการจำลองใด ๆ สามารถประกาศตัวเลือกการกำหนดค่าค่าเริ่มต้นและสถานที่ที่จะนำผลลัพธ์ วัตถุที่ซ้อนกันมีคำนำหน้าซึ่งสามารถประกอบได้เช่นวัตถุทุกชิ้นที่ต้องการการกำหนดค่าสามารถแก้ไขได้อย่างอิสระ ตัวเลือกสามารถอ่านได้จากบรรทัดคำสั่งสภาพแวดล้อมไฟล์กำหนดค่าหรือจากรหัส เมื่อมีการประกาศตัวเลือกจะมีการระบุสตริงช่วยเหลือและหน้าคนเพื่อให้-help
ตัวเลือกนั้นเป็นที่เข้าใจได้และเพื่อให้สามารถเขียน GUI ที่เชื่อมโยงอย่างถูกต้องได้
ผู้ใช้เรียกSetFromOptions
วิธีการเพื่อให้วัตถุกำหนดค่าตัวเองตามตัวเลือกบรรทัดคำสั่ง การเรียกใช้ฟังก์ชันนี้เป็นทางเลือกและอาจไม่สามารถเรียกได้ว่าผู้ใช้ (ผู้เขียนรหัสที่เรียกว่า PETSc) กำลังเปิดเผยตัวเลือกผ่านทางอินเตอร์เฟสอื่น ๆ เราขอแนะนำอย่างยิ่งให้ผู้ใช้เปิดเผยฐานข้อมูลตัวเลือกเพราะจะทำให้ผู้ใช้ (ผู้ใช้แอปพลิเคชัน) ใช้พลังงานได้อย่างมากมาย แต่ไม่จำเป็น
การกำหนดค่าทั่วไปที่เรียกว่าผ่าน
PetscObjectOptionsBegin(object); /* object has prefix and descriptive string */
PetscOptionsReal("-ts_atol", /* options database key */
"Absolute tolerance for local truncation error", /* long description */
"TSSetTolerances", /* function and man page on topic */
ts->atol, /* current/default value *?
&ts->atol, /* place to store value */
&option_set); /* TRUE if the option was set */
PetscOptionsList("-ts_type","Time stepping method","TSSetType",TSList,
defaultType,typeName,sizeof typeName,&option_set);
TSAdaptSetFromOptions(ts->adapt); /* configures adaptive controller method */
/* ... many others */
/* ... the following is only called from implicit implementations */
SNESSetFromOptions(ts->snes); /* configure nonlinear solver. */
PetscOptionsEnd();
หมายเหตุ:
PetscOptionsList()
นำเสนอผู้ใช้พร้อมตัวเลือกจากรายการแบบไดนามิก มีสถาปัตยกรรมของปลั๊กอินที่การใช้งานใหม่สามารถใช้เพื่อเปิดเผยตัวเองเป็นผู้โทรชั้นแรก (การใช้งานเหล่านี้สามารถวางในไลบรารีที่ใช้ร่วมกันและใช้เป็นเฟิร์สคลาสโดยไม่ต้องคอมไพล์โปรแกรมใหม่)
SNESSetFromOptions()
กำหนดค่าตัวแก้ปัญหาเชิงเส้นแบบกำหนดเงื่อนไขล่วงหน้าและส่วนประกอบอื่น ๆ ที่ต้องการการกำหนดค่าแบบวนซ้ำ