অ্যালগরিদমের প্রতিটি দিক নির্দিষ্ট করা ব্যবহারকারীর পক্ষে জটিল। যদি অ্যালগোরিদম নেস্টেড উপাদানগুলিকে মঞ্জুরি দেয় তবে কোনও সীমাবদ্ধ সংখ্যার বিকল্প পর্যাপ্ত হবে না। সুতরাং, এটি সমালোচিত যে বিকল্পগুলি প্রয়োজনীয় স্তরের স্তরে "বুদবুদ" না করে যেমন সুস্পষ্ট যুক্তি বা টেম্পলেট প্যারামিটারের ক্ষেত্রে। একে কখনও কখনও সফ্টওয়্যার ইঞ্জিনিয়ারিংয়ে "কনফিগারেশন সমস্যা" বলা হয়। আমি বিশ্বাস করি কনফিগারেশন ম্যানেজমেন্টের জন্য পিইটিএসসি একটি স্বতন্ত্র শক্তিশালী সিস্টেম আছে এটি নিয়ন্ত্রণের বিপরীতে মার্টিন ফোলারের রচনায় সার্ভিস লোকেটার প্যাটার্নের মতো ।
পিইটিএসসি এর কনফিগারেশন সিস্টেমটি সলভার অবজেক্টস (গেট এবং সেট কোয়েরি সহ) এবং অপশন ডাটাবেসগুলির দ্বারা পরিচালিত ব্যবহারকারী-নির্দিষ্ট কনফিগারেশনের সংমিশ্রণের মাধ্যমে কাজ করে। সিমুলেশনের যে কোনও উপাদান একটি কনফিগারেশন বিকল্প, একটি ডিফল্ট মান এবং ফলাফল দেওয়ার জন্য একটি জায়গা ঘোষণা করতে পারে। নেস্টেড অবজেক্টগুলির উপসর্গ রয়েছে যা রচনা করা যেতে পারে, যেমন কনফিগারেশনের প্রয়োজন হয় এমন প্রতিটি বস্তু স্বাধীনভাবে সম্বোধন করা যায়। কমান্ড লাইন, পরিবেশ, কনফিগারেশন ফাইল বা কোড থেকে বিকল্পগুলি সেগুলিই পড়তে পারে। যখন কোনও বিকল্প ঘোষণা করা হয়, তখন একটি সহায়তা স্ট্রিং এবং ম্যান পৃষ্ঠা সুনির্দিষ্ট করা হয়, যাতে -help
বিকল্পটি বোধগম্য হয় এবং যাতে সঠিকভাবে সংযুক্ত জিইউআই লেখা যায়।
SetFromOptions
কমান্ড লাইন বিকল্পের উপর ভিত্তি করে ব্যবহারকারী কোনও বিষয়টিকে নিজে কনফিগার করতে একটি পদ্ধতি কল করে। এই ফাংশনটি কল করা alচ্ছিক, এবং যদি ব্যবহারকারী (পিইটিএসসি কলকারী ব্যক্তি লিখিত কোড) অন্য কোনও ইন্টারফেসের মাধ্যমে বিকল্পগুলি প্রকাশ করে তবে কল করা যাবেনা। আমরা অত্যন্ত পরামর্শ দিই যে ব্যবহারকারী বিকল্পগুলির ডাটাবেসটি উন্মোচিত করুন কারণ এটি শেষ ব্যবহারকারীকে (অ্যাপ্লিকেশনটি চালাচ্ছিল ব্যক্তি) প্রচুর পরিমাণে শক্তি সরবরাহ করে তবে এটির প্রয়োজন হয় না।
একটি সাধারণ কনফিগারেশন, যার মাধ্যমে বলা হয়
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()
পুনরাবৃত্তভাবে লিনিয়ার সলভার, পূর্বশর্তি এবং অন্য যে কোনও উপাদানগুলির জন্য কনফিগারেশন প্রয়োজন কনফিগার করে।