रैखिक दोष सुधार की तुलना में FAS-multigrid धीमा?


9

मैंने एक रैखिक दोष सुधार (LDC) और पूर्ण सन्निकटन योजना (FAS) दोनों का उपयोग करके एक वी-साइकिल मल्टीग्रिड सॉल्वर लागू किया है।

मेरी समस्या निम्नलिखित है: एलडीसी का उपयोग करके प्रति चक्र ~ 0.03 के कारक से अवशिष्ट को कम किया जाता है। एफएएस कार्यान्वयन एक रैखिक कारक के साथ भी परिवर्तित होता है, लेकिन कारक केवल ~ 0.58 है। इस प्रकार एफएएस को चक्रों की संख्या के 20 गुना की आवश्यकता होती है।

अधिकांश कोड साझा किए गए हैं, केवल अंतर नीचे / ऊपर की गणनाओं का है, एलडीसी का उपयोग करता है

नीचे: uH:=0,bH:=IhH(bhLhuh)

यूपी: uh:=uh+IHhuH

और FAS का उपयोग करता है

नीचे: uH:=IhHuh,bH:=IhHbh+LHIhHuhIhHLhuh

यूपी: uh:=uh+IHh(uHIhHuh)

मेरी परीक्षा सेटिंग ब्रिगेड के "ए मल्टीग्रिड ट्यूटोरियल, सेकंड एडिशन", पी से है। 64, विश्लेषणात्मक समाधान है

u(x,y)=(x2x4)(y4y2) साथ में x,y[0,1]2

और समीकरण है Lv=Δu=:b लाप्लास-ऑपरेटर के रूप में ठेठ रैखिक 5-पॉइंट स्टैंसिल का उपयोग करना L। प्रारंभिक अनुमान हैv=0

परीक्षण सेटिंग बदलना, जैसे तुच्छ u(x,y)=0 के प्रारंभिक अनुमान का उपयोग करना v=1 परिणाम लगभग एक ही अभिसरण कारकों में।

चूंकि केवल डाउन / अप कोड अलग है, एलडीसी परिणाम पुस्तक का अनुपालन करते हैं और एफएएस कम से कम काम भी करने लगता है, मेरे पास कोई आइडिया नहीं है कि यह एक ही रैखिक सेटिंग में इतना धीमा क्यों है।

एलडीसी और एफएएस दोनों में एक अजीब व्यवहार है जिसे मैं अभी तक समझा नहीं सकता हूं कि केवल तब होता है जब प्रारंभिक अनुमान खराब होता है (जैसे =0 लेकिन मेरे पूर्ण मल्टीग्रिड प्रयोगों में भी जहां नए ठीक ग्रिड के लिए प्रक्षेप से अवशिष्ट बढ़ जाता है 1015 सेवा 101): अगर मैं पोस्ट सुधार सुधारों की संख्या को बहुत अधिक संख्या तक बढ़ाता हूं, जैसे कि मोटे ग्रिड पर मशीन परिशुद्धता के लिए हल किया जाता है, तो यह अगले ठीक ग्रिड तक एक कदम जाने पर लगभग सभी अंक खो देता है।

चूंकि एक चित्र शब्दों से अधिक कहता है:

// first cycle, levels 0-4
// DOWN
VCycle top 4, start               res_norm 3.676520e+02 // initial residual
VCycle top 4, cycle 0, current 4, res_norm 3.676520e+02
VCycle top 4, cycle 0, current 4, res_norm 1.520312e+02 // relaxed (2 iterations)
VCycle tau_norm 2.148001e+01 (DEBUG calculation)
VCycle top 4, cycle 0, current 3, res_norm 1.049619e+02 // restricted
VCycle top 4, cycle 0, current 3, res_norm 5.050392e+01 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 2, res_norm 3.518764e+01 // restricted
VCycle top 4, cycle 0, current 2, res_norm 1.759372e+01 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 1, res_norm 1.234398e+01 // restricted
VCycle top 4, cycle 0, current 1, res_norm 4.728777e+00 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 0, res_norm 3.343750e+00 // restricted
// coarsest grid
VCycle top 4, cycle 0, current 0, res_norm 0.000000e+00 // solved
// UP
VCycle top 4, cycle 0, current 1, res_norm 3.738426e+00 // prolonged
VCycle top 4, cycle 0, current 1, res_norm 0.000000e+00 // relaxed (many iterations)
VCycle top 4, cycle 0, current 2, res_norm 1.509429e+01 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 2, res_norm 2.512148e-15 // relaxed (many iterations)
VCycle top 4, cycle 0, current 3, res_norm 4.695979e+01 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 3, res_norm 0.000000e+00 // relaxed (many iterations)
VCycle top 4, cycle 0, current 4, res_norm 1.469312e+02 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 4, res_norm 9.172812e-24 // relaxed (many iterations)

मुझे यकीन नहीं है कि प्रति चक्र केवल कुछ अंक प्राप्त हो सकते हैं या यदि यह ठीक ग्रिड के लिए प्रक्षेप के दौरान एक त्रुटि को इंगित करता है। यदि यह बाद का मामला है, तो एलडीसी हमेशा के लिए 2 विश्रामों का उपयोग करते समय ~ 0.03 की पुस्तक-संबंधी अवशिष्ट अनुपात कैसे प्राप्त कर सकता है?

जवाबों:


7

मैं सीधे आपके उत्तर को नहीं जानता क्योंकि मैं मुख्य रूप से सुधार के बजाय एफएएस का उपयोग करता हूं क्योंकि मैं अकाल समस्याओं के लिए मल्टीग्रिड करता हूं, लेकिन कुछ विचार जो आप देख सकते हैं:

  • आप एक रैखिक सुधार योजना को एक रैखिक समस्या में लागू कर रहे हैं, इसलिए यह चौंकाने वाला नहीं है कि यह बहुत अच्छा करता है।

  • अपनी सीमा की स्थितियों पर विचार करें: सुनिश्चित करें कि आप उन्हें सही ढंग से कर रहे हैं, और यह भी ध्यान दें कि जटिल बीसी मोटे ग्रिड पर पूरी तरह से अलग दिख सकते हैं, जिससे सुधार वहां बहुत उपयोगी नहीं हैं।

  • स्रोत शब्द के अपने उपचार को दोबारा जांचें; मुझे याद है कि जब मैंने इसे पोइसन के लिए लिखा था, तो उस शब्द से संबंधित लम्बी अवस्था में किसी चीज को पंगा लेना।

  • मैंने कभी भी मोटे ग्रिड पर अभिसरण के लिए पुनरावृति की आवश्यकता नहीं देखी है। वहाँ एक समाधान ठीक ग्रिड अवशिष्ट के सही होने पर निर्भर करता है, जो यह नहीं है। आप उन त्रुटियों को डोमेन से बाहर धकेलने का प्रयास कर रहे हैं / उन्हें सुचारू कर रहे हैं। यदि आप एक प्रारंभिक पुनरावृत्ति में मोटे ग्रिड पर पूरी तरह से परिवर्तित हो गए हैं, तो आपका समाधान स्वाभाविक रूप से सही ठीक ग्रिड समाधान से बहुत दूर है क्योंकि आपके अवशिष्ट अब तक नहीं हैं। यह लगभग निश्चित रूप से इसका कारण है कि आप अवशिष्ट को लम्बी अवस्था में कूदते हुए क्यों देख रहे हैं।

  • इसके अलावा, प्रतिबंध और लंबे समय तक चलने वाले ऑपरेटरों दोनों के लिए एक छूट कारक का प्रयास करें, 0.75 कहते हैं।

यदि यह मदद करता है, तो यह है कि मेरा एफएएस अवशिष्ट इतिहास पूर्ण ग्रिड 7V चक्रों के माध्यम से एकल ग्रिड का उपयोग करते हुए एक पॉइसन समस्या के लिए देखा गया। मेरा मानना ​​है कि छूट कारक 0.75 था, और मैं प्रत्येक ग्रिड स्तर पर एक एकल पुनरावृत्ति के साथ एक चिकनी के रूप में 3-चरण आरके योजना का उपयोग कर रहा था।

इतिहास


आपके उत्तर के लिए धन्यवाद, रैखिक केस और सरल बीसी (स्क्वायर बॉर्डर = 0) केवल पहला कदम है, वास्तविक मामलों का परीक्षण "आसान" सेटिंग्स के काम के बाद किया जाएगा। मुझे यकीन नहीं है कि अगर मैं समझता हूं कि प्रतिबंध और लंबे समय तक छूट के कारक से आपका क्या मतलब है। मैं वर्तमान में लंबे समय तक प्रतिबंध के लिए बिलिनियर प्रक्षेप का उपयोग करता हूं और प्रतिबंध के लिए आधा भार उठाता हूं।
सिल्पियन

विश्राम से मेरा मतलब है कि आपके प्रोलोगेशन चरण में इसे बदल दें: uh:=uh+αIHh(uHIhHuh) कहाँ पे 0<α<1एक विश्राम कारक है। आमतौर पर समाधान जितना जटिल होता है, इस कारक को उतना ही नीचे जाना पड़ता है। बहुत सी विसंगतियों के समाधान में मुझे कभी-कभी उस 0.6 से नीचे तक धकेलना पड़ता है, लेकिन आम तौर पर 0.75-0.85 काम करता है।
ऑरेलियस

जानकार अच्छा लगा। मेरी सेटिंग में यह केवल अभिसरण अनुपात को धीमा कर देता है(1α)लेकिन अधिक जटिल डेटा का परीक्षण करते समय मैं इसे ध्यान में रखूंगा।
सिल्पियन

@ यूरेलियस आप उल्लेख करते हैं कि मोटे ग्रिड पर परिवर्तित करना आवश्यक नहीं है। मैं आपके तर्क से सहमत हूं, लेकिन साहित्य में रेखीय प्रमाण (रैखिक मामले के लिए) मानते हैं कि मोटे ग्रिड हल सटीक है। मैं किसी भी संदर्भ (रैखिक या nonlinear मामले के लिए) से अवगत नहीं हूं जिसमें यह कहा गया है कि मोटे ग्रिड हल सटीक नहीं होना चाहिए, और सोच रहा था कि क्या आप इसके लिए एक संदर्भ का हवाला दे सकते हैं? मुझे खुद को देखने में बहुत दिलचस्पी होगी
कीरन ब्रेबोज़ेन

@KeeranBrabazon मेरे पास इसके लिए कोई संदर्भ नहीं है, और मैं ईमानदारी से मल्टीग्रिड के लिए अभिसरण प्रमाण के विवरण से परिचित नहीं हूं। मेरा सुझाव है कि किसी भी शुरुआती साहित्य की तलाश करें जो उस छूट कारक का परिचय दे। यह कारक मेरे द्वारा देखे गए सभी आधुनिक मल्टीग्रिड कार्यान्वयन के लिए सामान्य है, और यह सहज रूप से सच है कि यदि आवश्यक पाठ्यक्रम समाधान आवश्यक / वांछनीय था तो इसकी आवश्यकता नहीं होगी। एक सहज प्रमाण के लिए, मैं सिर्फ कल्पना करता हूं कि सबसे अच्छे ग्रिड बनाम बेहतरीन के लिए सीमा की स्थिति कैसी दिखती है। यह कल्पना करना बहुत आसान है कि वे बहुत अलग समाधान बना रहे हैं।
ऑरेलियस

6

यदि आप एक शीर्ष-केंद्रित विवेक का उपयोग कर रहे हैं, तो पूर्ण-अवशिष्ट अवशिष्ट प्रतिबंध के बजाय राज्य प्रतिबंध को इंजेक्शन होना चाहिए जो आपके द्वारा उपयोग किए जाने पर प्रकट होता है। वह है, प्रतिस्थापित करेंIhH साथ में I^hHराज्य को प्रतिबंधित करते समय। राज्य के लिए पूर्ण-भारित प्रतिबंध का उपयोग करना, राज्य के उच्च-आवृत्ति घटकों के अलियासिंग का उत्पादन करता है जो आवेदन करने के बाद होता हैuhuh(uHIhHuh)मोटे पैमाने पर सुधार (सीमा प्रभाव की स्थिति विशेष रूप से इस प्रभाव के लिए अपराधी हैं) से पहले उसी पैमाने पर नए शोर में परिणाम। इंजेक्शन का प्रयोग करें,I^hHuh, और यह समस्या दूर होनी चाहिए।

वर्णानुक्रम में, राज्य के प्रतिबंध को केवल उच्च माध्यमिक आदेश (कम आवृत्तियों के सटीक संरक्षण) की आवश्यकता होती है, लेकिन प्राथमिक आदेश (उच्च आवृत्तियों का उपनाम) कोई फर्क नहीं पड़ता। इंजेक्शन में प्राथमिक आदेश 0 और अनंत माध्यमिक क्रम है। इस बीच, अवशिष्ट प्रतिबंध को सकारात्मक (कम से कम) होने के लिए प्राथमिक और द्वितीयक आदेश दोनों की आवश्यकता होती है। Achi ब्रांट की मल्टीग्रिड गाइड की धारा 4.3 देखें ।

एमजी तरीकों को डिजाइन करते समय, अवशिष्टों के बजाय त्रुटि को देखना और यह सुनिश्चित करना अच्छा है कि आप आदर्श तरीके से वजन बढ़ाते हैं।


अच्छे अंक, और मैं उन पंक्तियों के साथ कुछ का उल्लेख करने में विफल रहा। मल्टीग्रिड के व्यावहारिक उपयोग का एक महत्वपूर्ण पहलू चिकना का विकल्प है: आप चाहते हैं कि उच्च आवृत्ति त्रुटियों को जितनी जल्दी हो सके, जो आपके द्वारा बताए गए मुद्दे को संबोधित करता है।
ऑरेलियस

@ ऑरेलियस प्रदान किए गए लॉग से, आप देख सकते हैं कि चिकनी समस्या नहीं है। याद रखें कि सिलपियन दोष सुधार एमजी के लिए उसी चिकनी का उपयोग कर रहा है, जो ठीक से परिवर्तित करता है।
जैड ब्राउन

ब्रांट के मल्टीग्रिड गाइड के लिंक के लिए धन्यवाद, मैं ब्रिगेड के मल्टीग्रिड ट्यूटोरियल को पूरा करने के बाद इसे अच्छी तरह से पढ़ूंगा। मैंने अब समस्या हल कर ली है (अन्य उत्तर देखें) लेकिन मैं वर्तमान में राज्य और अवशिष्ट प्रतिबंध दोनों के लिए पूर्ण भार का उपयोग कर रहा हूं। इंजेक्शन का उपयोग करना मेरी सेटिंग में काम नहीं करता है, अवशिष्ट अनुपात में परिवर्तन होता है>0.8और अवशिष्ट और त्रुटि दोनों L2- मानदंड बहुत जल्द घटने बंद हो जाते हैं। क्या आपके पास कोई विचार है कि इंजेक्शन विफल क्यों होता है?
सिल्पियन

1

मैं अब समस्या से हल किया। मैंने स्टोर कियाuoldH=IhHuh वी-चक्र के दौरान नीचे जाने पर और बाद में इसका पुन: उपयोग किया

uhuh+IHh(uHIhHuh)=uh+IHh(uHuoldH)

समस्या फिर से नीचे जाने से पहले थी H सेवा 2H, uoldHजगह में आराम था । छूट चरणों में मदद करने से पहले एक प्रतिलिपि संग्रहीत करना। जबसेuoldH केवल FAS में आवश्यक था, यह रैखिक गणनाओं में नहीं दिखा था।

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