নিউটনের পদ্ধতিটি অনেক কারণে একসাথে রূপান্তর করতে পারে না, এখানে কয়েকটি সাধারণ।
- জ্যাকবিয়ান ভুল (বা ক্রমানুসারে সঠিক তবে সমান্তরালে নয়)।
- লিনিয়ার সিস্টেমটি সমাধান হয় না বা যথেষ্ট পরিমাণে সঠিকভাবে সমাধান করা হয় না।
- জ্যাকবীয় সিস্টেমে এমন এককত্ব রয়েছে যা লিনিয়ার সলভার হ্যান্ডেল করছে না।
- ফাংশন মূল্যায়নের রুটিনে একটি বাগ রয়েছে।
- ফাংশনটি অবিচ্ছিন্ন নয় বা অবিচ্ছিন্ন প্রথম ডেরিভেটিভস নেই (যেমন পর্যায় পরিবর্তন বা টিভিডি সীমাবদ্ধ)।
- এই সমীকরণগুলির কোনও সমাধান নাও হতে পারে (যেমন অবিচলিত স্থিতির পরিবর্তে সীমাবদ্ধতা চক্র) অথবা প্রাথমিক অনুমান এবং অবিচলিত অবস্থার মধ্যে একটি "পাহাড়" থাকতে পারে (উদাহরণস্বরূপ চুল্লিগুলি স্থিতিশীল অবস্থায় পৌঁছানোর আগে জ্বলতে এবং পোড়াতে হবে তবে স্থির- রাষ্ট্রের অবশিষ্টাংশ জ্বলনের সময় আরও বড় হবে)।
নিউটনের একীকরণের অভাবকে ডিবাগ করতে সহায়তা করার কয়েকটি উপায় এখানে রইল।
- অপশন দিয়ে চালান
-snes_monitor -ksp_monitor_true_residual -snes_converged_reason -ksp_converged_reason
। লিনিয়ার সলিউশন যদি রূপান্তর না করে তবে জ্যাকবিয়ান সঠিক কিনা তা পরীক্ষা করে দেখুন, তাহলে এই প্রশ্নটি দেখুন । পূর্বশর্তীকৃত অবশিষ্টাংশগুলি যদি রূপান্তর করে তবে সত্যিকারের অবশিষ্টাংশগুলি তা না করে, পূর্বশর্তটি একক হতে পারে। লিনিয়ার সলিউশনটি যদি ভালভাবে রূপান্তর করে তবে লাইন অনুসন্ধান ব্যর্থ হয়, জ্যাকবিয়ান ভুল হতে পারে।
- সঙ্গে চালান
-pc_type lu or -pc_type svd
সমস্যাটি একটি দরিদ্র লিনিয়ার সল্ভার কিনা দেখতে
- দিয়ে চালানো
-mat_view
বা -mat_view_draw
যদি Jacobian যুক্তিসঙ্গত মনে হচ্ছে দেখতে
- সঙ্গে চালান
-snes_type test -snes_test_display
যদি Jacobian আপনি ব্যবহার করছেন ভুল দেখতে। -mat_fd_type ds
ফলাফলটি পৃথক প্যারামিটারের নির্বাচনের ক্ষেত্রে সংবেদনশীল কিনা তা দেখার জন্য যুক্ত করার পরে আউটপুটটির তুলনা করুন ।
- সঙ্গে চালান
-snes_mf_operator -pc_type lu
যদি Jacobian আপনি ব্যবহার করছেন ভুল দেখতে। সরাসরি সমাধানের জন্য সমস্যাটি যদি খুব বড় হয় তবে চেষ্টা করুন -snes_mf_operator -pc_type ksp -ksp_ksp_rtol 1e-12
। -mat_mffd_type ds
ফলাফলটি পৃথক প্যারামিটারের নির্বাচনের ক্ষেত্রে সংবেদনশীল কিনা তা দেখার জন্য যুক্ত করার পরে আউটপুটটির তুলনা করুন ।
- সমস্যাটি কেবল সমান্তরালে আছে কিনা তা দেখার জন্য একটি প্রসেসরে চালান।
- সঙ্গে চালান
-snes_ls_monitor
যদি লাইন অনুসন্ধান ব্যর্থ হচ্ছে দেখতে (এই সাধারণত একটি খারাপ Jacobian লক্ষণ)।
-info
সমাধান প্রক্রিয়া সম্পর্কে আরও বিস্তারিত তথ্য পেতে চালনা করুন।
উপরের সমস্ত কিছু যদি চেক হয়ে যায় তবে নিউটন প্রক্রিয়াটিকে সহায়তা করার জন্য এখানে কিছু উপায় রয়েছে
- আপনার সূক্ষ্ম জাল সম্পর্কে আরও ভাল প্রাথমিক অনুমান
-snes_grid_sequence
করার জন্য গ্রিড সিকোয়েন্সিংয়ের সাথে চালান ( একটি সাথে কাজ করা হলে আপনার প্রয়োজন কেবল DM
)
- কোয়াড নির্ভুলতার সাথে চালান (
./configure --with-precision=__float128 --download-f2cblaslapack
পিইটিএসসি ৩.২ এবং তারপরে, সংস্করণ ৪.6 বা তার পরে জিএনইউ সংকলক প্রয়োজন)
- ইউনিটগুলি (ননডিমেনশনালাইজেশন), সীমানা শর্তের স্কেলিং বা সূত্রগুলি পরিবর্তন করুন যাতে জ্যাকবীয়ান আরও ভাল কন্ডিশড থাকে।
- অবিচ্ছিন্ন প্রথম ডেরাইভেটিভস নেই এমন ফাংশনটিতে বৈশিষ্ট্যগুলি মলাইফাই করুন (প্রায়শই ঘটে যখন
if
অবশিষ্টাংশের মূল্যায়নে বিবৃতি দেওয়া হয়, যেমন পর্যায় পরিবর্তন বা টিভিডি সীমাবদ্ধ)। যদি বিচ্ছিন্নতাগুলির মৌলিক গুরুত্ব থাকে তবে একটি বৈকল্পিক বৈষম্য সমাধানকারী ( SNESVINEWTONRSLS ) ব্যবহার করুন ।
- একটি বিশ্বাস অঞ্চল পদ্ধতি চেষ্টা করুন (
-ts_type tr
, প্যারামিটারগুলি সামঞ্জস্য করতে হতে পারে)।
- আপনি যে সমাধানটি জানেন সেখান থেকে কিছু ধারাবাহিকতা প্যারামিটার দিয়ে চালান, অবিচলিত-রাষ্ট্রীয় সমস্যাগুলি সমাধান করার জন্য টিএসপিএসইউডো দেখুন । পিএইচসিপ্যাকের মতো হোমোপিপি সলভার প্যাকেজ রয়েছে যা আপনাকে সমস্ত সম্ভাব্য সমাধান পেতে পারে (এবং আপনাকে বলবে যে এটি সবগুলি খুঁজে পেয়েছে) তবে সেগুলি পরিমাপযোগ্য নয় এবং ছোট সমস্যাগুলি ছাড়া আর কিছু সমাধান করতে পারে না।