यह एल्गोरिथम के हर पहलू को निर्दिष्ट करने के लिए उपयोगकर्ता के लिए बोझिल है। यदि एल्गोरिथ्म नेस्टेड घटकों को अनुमति देता है, तो कोई सीमित संख्या में विकल्प पर्याप्त नहीं होंगे। इसलिए, यह महत्वपूर्ण है कि विकल्प आवश्यक रूप से शीर्ष स्तर तक "बबल अप" नहीं करते हैं, जैसा कि स्पष्ट तर्क या टेम्पलेट मापदंडों के मामले में है। इसे कभी-कभी सॉफ़्टवेयर इंजीनियरिंग में "कॉन्फ़िगरेशन समस्या" कहा जाता है। मेरा मानना है कि पेट्सक में कॉन्फ़िगरेशन प्रबंधन के लिए एक विशिष्ट शक्तिशाली प्रणाली है। यह नियंत्रण के विलोम पर मार्टिन फावलर के निबंध में सर्विस लोकेटर पैटर्न के समान है ।
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()
पुनरावर्ती रेखीय सॉल्वर्स, प्रीडोन्डिशनर्स, और किसी भी अन्य घटकों को कॉन्फ़िगर करता है जो कॉन्फ़िगरेशन की आवश्यकता होती है।