मेरा पुनरावृत्त रैखिक सॉल्वर परिवर्तित क्यों नहीं हो रहा है?


26

KSP ( PETSc के लीनियर सॉल्वर पैकेज) से पूर्व- निर्मित क्रायलोव विधियों का उपयोग करते समय क्या गलत हो सकता है जो आंशिक अंतर समीकरणों को विवेकशील और रैखिक बनाने के लिए एक विरल रैखिक प्रणाली को हल करने के लिए है?

मेरी समस्या के लिए क्या गलत है यह निर्धारित करने के लिए मैं क्या कदम उठा सकता हूं?

मैं अपनी रैखिक प्रणाली को सफलतापूर्वक और कुशलतापूर्वक हल करने के लिए क्या बदलाव कर सकता हूं?


क्या आप इस प्रश्न को विशेष रूप से PETSc में पुनरावृत्त रैखिक सॉल्वर्स के बारे में एक प्रश्न होने का इरादा रखते हैं (जो कि मैं प्रश्न निकाय पाठ से इकट्ठा किया गया होगा), या ज्यादातर सॉफ्टवेयर में पुनरावृत्त रैखिक सॉल्वर की संभावित एल्गोरिदम विफलताओं के बारे में एक प्रश्न हो सकता है- अज्ञेय संदर्भ (जो कि मैं अकेले शीर्षक को देखकर इकट्ठा किया गया होगा) क्या है?
ज्योफ ऑक्सीबेरी

4
इसका petscटैग है। कार्यप्रणाली सामान्य है, लेकिन मुझे लगता है कि उत्तर कम उपयोगी होगा यदि प्रत्येक "इस कोशिश" में "कैसे" भी शामिल नहीं था। वैकल्पिक रूप से, "कैसे" को अधिक लंबे समय तक (और दर्शक के लिए अधिक त्रुटि-ग्रस्त) होने की आवश्यकता होगी, यदि इसे एक सॉफ्टवेयर-अज्ञेय तरीके से समझाया जाना चाहिए। अगर कोई यह बताना चाहता है कि एक अलग पैकेज का उपयोग करके इन सभी चीजों को कैसे किया जाए, तो मैं खुशी से प्रश्न सॉफ्टवेयर-अज्ञेयवाद करूंगा और अपने उत्तर को यह बताने के लिए बदल दूंगा कि यह बताता है कि पेट्सक में क्या करना है। नोट: मैंने इसे जोड़ा, जो कि अक्सर पूछे जाने वाले प्रश्न का एक उन्नत संस्करण है, इसलिए मैं लोगों को इस साइट पर पसंद कर सकता हूं।
जेड ब्राउन

जवाबों:


26

प्रारंभिक सलाह

  • हमेशा -ksp_converged_reason -ksp_monitor_true_residualयह जानने की कोशिश करें कि कोई विधि परिवर्तित क्यों नहीं हो रही है।
  • विफलता का प्रदर्शन करने के लिए समस्या का आकार और प्रक्रियाओं की संख्या को यथासंभव छोटा करें। आप अक्सर यह निर्धारित करके अंतर्दृष्टि प्राप्त करते हैं कि कौन सी छोटी समस्याएं उस व्यवहार को प्रदर्शित करती हैं जिससे आपकी पद्धति टूट रही है और मोड़-समय कम हो जाता है। इसके अतिरिक्त, कुछ जांच तकनीकें हैं जिनका उपयोग केवल छोटे सिस्टम के लिए किया जा सकता है।
  • यदि समस्या केवल बड़ी संख्या में समय के बाद, निरंतरता के चरणों, या ग़ैर-समाधान के चरणों के बाद उत्पन्न होती है, तो असफल होने पर मॉडल स्थिति को लिखने पर विचार करें ताकि आप जल्दी से प्रयोग कर सकें।
  • वैकल्पिक रूप से, विशेष रूप से यदि आपके सॉफ़्टवेयर में चेकपॉइंट क्षमता नहीं है , तो रैखिक प्रणाली को बचाने -ksp_view_binaryया उपयोग MatView()करने के लिए, फिर $PETSC_DIR/src/ksp/ksp/examples/tutorials/ex10.cमैट्रिक्स में पढ़ने के लिए और इसे हल करने के लिए कोड का उपयोग करें (संभवतः प्रक्रियाओं की एक अलग संख्या के साथ)। इसके लिए एक इकट्ठे मैट्रिक्स की आवश्यकता होती है, इसलिए यह उपयोगिता कुछ हद तक सीमित हो सकती है।
  • कई संभावित सॉल्वर विकल्प हैं (जैसे कि रचना के स्तरों की एक मनमानी संख्या के कारण PETSc में कमांड लाइन पर उपलब्ध एक अनंत संख्या), रैखिक सॉल्वर्स चुनने पर सामान्य सलाह के लिए इस प्रश्न को देखें ।

केएसपी के सामान्य कारणों के लिए अभिसरण नहीं

  • समीकरण दुर्घटना से विलक्षण हैं (उदाहरण के लिए सीमा की शर्तों को लागू करना भूल गए)। एक छोटी सी समस्या का उपयोग करने के लिए इसे जांचें -pc_type svd -pc_svd_monitor। इसके साथ एक प्रत्यक्ष सॉल्वर भी कोशिश करें -pc_type lu(समानांतर में एक तृतीय-पक्ष पैकेज के माध्यम से, जैसे -pc_type lu -pc_factor_mat_solver_package superlu_dist)।
  • समीकरण जानबूझकर एकवचन (जैसे निरंतर अशक्त स्थान) हैं, लेकिन क्रिलोव विधि को सूचित नहीं किया गया था, देखें KSPSetNullSpace()
  • समीकरण जानबूझकर एकवचन हैं और KSPSetNullSpace()इसका उपयोग किया गया था, लेकिन दाहिने हाथ की ओर सुसंगत नहीं है। आपको कॉल MatNullSpaceRemove()करने से पहले दाहिने हाथ की तरफ कॉल करना पड़ सकता है KSPSolve()
  • समीकरण अनिश्चित हैं, इसलिए मानक पूर्व शर्त काम नहीं करते हैं। आमतौर पर आप इसे भौतिकी से जानते होंगे, लेकिन आप -sp_compute_eigenvalues ​​से जांच कर सकते हैं -ksp_gmres_restart 1000 -pc_type none। सरल काठी बिंदु समस्याओं के लिए, प्रयास करें -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_detect_saddle_point। देखें उपयोगकर्ता के मैनुअल और PCFIELDSPLIT आदमी पेज अधिक जानकारी के लिए। अधिक कठिन समस्याओं के लिए, मजबूत तरीकों को खोजने के लिए साहित्य पढ़ें और यहां ( petsc-users@mcs.anl.govया petsc-maint@mcs.anl.gov) पूछें कि क्या आप उन्हें लागू करने के बारे में सलाह चाहते हैं। उदाहरण के लिए, उच्च आवृत्ति वाले हेल्महोल्त्ज़ के लिए इस प्रश्न को देखें । मामूली समस्या के आकार के लिए, देखें कि क्या आप सीधे एक सॉल्वर का उपयोग करके रह सकते हैं।
  • यदि विधि पूर्ववर्ती अवशिष्ट में परिवर्तित हो जाती है, लेकिन सही अवशिष्ट में नहीं होती है, तो पूर्ववर्धक संभवतः एकवचन या लगभग ऐसा ही होता है। यह काठी बिंदु समस्याओं (उदाहरण के लिए अयोग्य प्रवाह) या दृढ़ता से निरंकुश ऑपरेटरों (उदाहरण के लिए बड़े समय के चरणों के साथ कम-मच हाइपरबोलिक समस्याओं) के लिए आम है।
  • पूर्ववर्ती बहुत कमजोर है या अस्थिर है। देखें कि क्या -pc_type asm -sub_pc_type luअभिसरण दर में सुधार होता है। यदि GMRES पुनरारंभ में बहुत अधिक प्रगति खो रहा है, तो देखें कि क्या अब पुनरारंभ मदद करता है -ksp_gmres_restart 300। यदि कोई स्थानान्तरण उपलब्ध है, तो प्रयास करें -ksp_type bcgsया अन्य विधियाँ जिन्हें पुनः आरंभ करने की आवश्यकता नहीं है। (ध्यान दें कि इन विधियों के साथ अभिसरण अक्सर अनिश्चित है।)
  • प्रीकॉन्डिशनिंग मैट्रिक्स संभवतः (अनसैम्बल्ड) ऑपरेटर के करीब नहीं हो सकता है। एक प्रत्यक्ष सॉल्वर के साथ -pc_type luया तो सीरियल में या तीसरे पक्ष के पैकेज (जैसे -pc_type lu -pc_factor_mat_solver_package superlu_dist, या mumps) का उपयोग करके समानांतर में हल करने का प्रयास करें । यदि मैट्रिसेस समान हों, और पुनरावृत्तियों की "छोटी" संख्या में हो तो विधि को एक पुनरावृति में परिवर्तित करना चाहिए। -snes_type testनॉनलाइन समस्या को हल करने के लिए मैट्रिसेस की जाँच करने का प्रयास करें।
  • प्रीकॉन्डिशनर नॉनलाइनर है (उदाहरण के लिए नेस्टेड पुनरावृत्त हल), कोशिश करें -ksp_type fgmres or -ksp_type gcr
  • आप जियोमेट्रिक मल्टीग्रिड का उपयोग कर रहे हैं, लेकिन कुछ समीकरणों (अक्सर सीमा की स्थिति) को स्तरों के बीच अनुकूल रूप से नहीं बढ़ाया जाता है। -pc_mg_galerkinबीजगणितीय रूप से एक सही ढंग से स्केल किए गए मोटे ऑपरेटर का निर्माण करने का प्रयास करें या सुनिश्चित करें कि सभी समीकरणों को उसी तरह से स्केल किया गया है यदि आप पुनर्वितरित मोटे स्तरों का उपयोग करना चाहते हैं।
  • मैट्रिक्स बहुत ही अशिक्षित है। यहां वर्णित विधियों का उपयोग करके स्थिति संख्या की जांच करें । घटकों / सीमा स्थितियों के सापेक्ष स्केलिंग को चुनकर इसे बेहतर बनाने का प्रयास करें। कोशिश करो -ksp_diagonal_scale -ksp_diagonal_scale_fix। शायद अधिक अनुकूल बीजीय समीकरणों का उत्पादन करने के लिए समस्या का सूत्रीकरण बदलें। यदि आप स्केलिंग को सही नहीं कर सकते हैं, तो आपको प्रत्यक्ष सॉल्वर का उपयोग करने की आवश्यकता हो सकती है।
  • मैट्रिक्स nonlinear है (उदाहरण के लिए एक nonlinear फ़ंक्शन के परिमित विभेदक का उपयोग करके मूल्यांकन किया गया)। विभिन्न विभिन्‍न मापदंडों (जैसे -mat_mffd_type ds) की कोशिश करें । विभेदकों को अधिक सटीक बनाने के लिए उच्च परिशुद्धता का उपयोग करने का प्रयास करें ./configure --with-precision=__float128 --download-f2cblaslapack। जांचें कि क्या यह "आसान" पैरामीटर शासनों में परिवर्तित होता है।
  • गैर-सममितीय समस्या के लिए एक सममित विधि का उपयोग किया जा रहा है।
  • शास्त्रीय ग्राम-श्मिट अस्थिर होता जा रहा है, कोशिश करो -ksp_gmres_modifiedgramschmidtया एक ऐसी विधि का उपयोग करें जो विभिन्न रूप से orthogonalizes, उदा -ksp_type gcr

16

छात्रों को मेरी सलाह है कि आप इन मामलों में सीधे समाधान की कोशिश करें। कारण यह है कि एक सॉल्वर के अभिसरण न होने के कारणों की दो श्रेणियां हैं: (i) मैट्रिक्स गलत है, या (ii) सॉल्वर / प्रीकॉन्डिशनर के साथ कोई समस्या है। प्रत्यक्ष सॉल्वर लगभग हमेशा कुछ ऐसा प्राप्त करते हैं जिसकी आप अपनी अपेक्षा के अनुरूप समाधान से तुलना कर सकते हैं, इसलिए यदि प्रत्यक्ष सॉल्वर का उत्तर सही लगता है, तो आप जानते हैं कि समस्या पुनरावृत्त सॉल्वर / पूर्व शर्त के साथ है। दूसरी ओर, यदि उत्तर गलत दिखता है, तो समस्या मैट्रिक्स और राइट हैंड साइड को असेंबल करने के साथ है।

मैं आमतौर पर केवल यूएमएफपीईएके का उपयोग प्रत्यक्ष सॉल्वर के रूप में करता हूं। मुझे यकीन है कि PETSC के साथ कुछ इसी तरह का प्रयास करना आसान है।


5
-pc_type lu -pc_factor_mat_solver_type umfpackपेट्सक के -pc_type cholesky -pc_factor_mat_solver_package cholmodमाध्यम से UMFPACK (या SPD समस्याओं के लिए) का उपयोग करें , लेकिन ध्यान दें कि UMFPACK और CHOLMOD सीरियल हैं। समानांतर, उपयोग के लिए -pc_factor_mat_solver_package superlu_distया mumps, pastix, spooles
जेड ब्राउन

2
बस स्पष्ट होने के लिए, उपयोग करने के लिए निर्धारित पूरा विकल्प (जैसे) superlu_distहोगा -ksp_type preonly -pc_type lu -pc_factor_mat_solver_package superlu_dist। क्या वह सही है?
लियोन एवरी

मुझे नहीं पता। ऐसा करने पर क्या होता है?
वुल्फगैंग बैंगर्थ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.