আমার পুনরাবৃত্ত লিনিয়ার সলভার কেন রূপান্তর করছে না?


26

আংশিক ডিফারেনশিয়াল সমীকরণকে বিচক্ষণ ও লিনিয়ারাইজিংয়ের মাধ্যমে প্রাপ্ত একটি বিচ্ছিন্ন রৈখিক সিস্টেমের সমাধানের জন্য কেএসপি ( পিইটিএসসি'র লিনিয়ার সলভার প্যাকেজ) থেকে পূর্বনির্ধারিত ক্রিলোভ পদ্ধতি ব্যবহার করার সময় কী ভুল হতে পারে ?

আমার সমস্যার জন্য কী ভুল হচ্ছে তা নির্ধারণ করতে আমি কী পদক্ষেপ নিতে পারি?

সফলভাবে এবং দক্ষতার সাথে আমার লিনিয়ার সিস্টেমটি সমাধান করতে আমি কী পরিবর্তন করতে পারি?


আপনি কি এই প্রশ্নটি বিশেষত পিইটিএসসি-তে পুনরাবৃত্ত লিনিয়ার সলভার সম্পর্কে একটি প্রশ্ন হতে চান (যা আমি প্রশ্ন বডি টেক্সট থেকে সংগ্রহ করেছি), বা বেশিরভাগ সফ্টওয়্যার-এ পুনরাবৃত্ত লিনিয়ার সলভারগুলির সম্ভাব্য অ্যালগরিদমিক ব্যর্থতা সম্পর্কে একটি প্রশ্ন হতে চান- অজ্ঞেয় প্রসঙ্গ (একা একা শিরোনামটি দেখে আমি কী একত্রিত হয়েছি)?
জেফ অক্সবেরি

4
এটি petscট্যাগ আছে। পদ্ধতিটি সাধারণ, তবে আমি মনে করি যে যদি প্রতিটি "এটি চেষ্টা করে" "কীভাবে" অন্তর্ভুক্ত না করে তবে উত্তরটি কম কার্যকর হবে। বিকল্পভাবে, যদি " সফটওয়্যার" -কে অজ্ঞাতসৃষ্টিক পদ্ধতিতে ব্যাখ্যা করার প্রয়োজন হয় তবে "কীভাবে" অনেক বেশি দীর্ঘ (এবং দর্শকের জন্য আরও ত্রুটি-প্রবণ) হওয়া প্রয়োজন। কেউ যদি আলাদা প্যাকেজ ব্যবহার করে কীভাবে এই সমস্ত জিনিসগুলি করতে হয় তা ব্যাখ্যা করতে চায়, তবে আমি আনন্দের সাথে প্রশ্নটি সফটওয়্যার-অজ্ঞাস্তিক করব এবং আমার উত্তরটি এমন অবস্থায় পরিবর্তন করব যা এতে পিইটিএসসি-তে কী করা উচিত তা বর্ণনা করে। দ্রষ্টব্য: আমি এটিকে যুক্ত করেছি, এটি একটি এফএকিউর বর্ধিত সংস্করণ, তাই আমি এই সাইটের লোকদের পছন্দ করতে পারি।
জেদ ব্রাউন

উত্তর:


26

প্রাথমিক পরামর্শ

  • -ksp_converged_reason -ksp_monitor_true_residualকোনও পদ্ধতি কেন রূপান্তর হচ্ছে না তা শেখার চেষ্টা করার সাথে সর্বদা চলুন।
  • ব্যর্থতা প্রদর্শন করতে সমস্যার আকার এবং প্রক্রিয়াগুলির সংখ্যা যতটা সম্ভব ছোট করুন। আপনার পদ্ধতিটি ভেঙে ফেলা এবং ঘুরে দেখার সময় হ্রাস হওয়ায় কোন ছোট সমস্যাগুলি এমন আচরণ প্রদর্শন করে তা নির্ধারণ করে আপনি প্রায়শই অন্তর্দৃষ্টি অর্জন করেন। অতিরিক্তভাবে, কিছু তদন্ত কৌশল রয়েছে যা কেবলমাত্র ছোট সিস্টেমের জন্য ব্যবহার করা যেতে পারে।
  • যদি সমস্যাটি কেবলমাত্র প্রচুর সময় পদক্ষেপ, ধারাবাহিকতা পদক্ষেপগুলি বা ননলাইনার সমাধানের পদক্ষেপের পরে দেখা দেয় তবে ব্যর্থতা দেখা দিলে মডেল স্টেটটি লেখার বিষয়টি বিবেচনা করুন যাতে আপনি দ্রুত পরীক্ষা করতে পারেন।
  • বিকল্পভাবে, বিশেষত যদি আপনার সফ্টওয়্যারটিতে চেকপয়েন্টের ক্ষমতা না থাকে, লিনিয়ার সিস্টেমটি ব্যবহার -ksp_view_binaryবা MatView()সংরক্ষণ করতে না হয়, তবে $PETSC_DIR/src/ksp/ksp/examples/tutorials/ex10.cম্যাট্রিক্সে পড়ার জন্য কোডটি ব্যবহার করুন এবং এটি সমাধান করুন (সম্ভবত বিভিন্ন সংখ্যক প্রক্রিয়া সহ) with এটির জন্য একত্রিত ম্যাট্রিক্স প্রয়োজন, সুতরাং এটির কার্যকারিতা কিছুটা সীমাবদ্ধ হতে পারে।
  • অনেকগুলি সম্ভাব্য সলভার পছন্দ রয়েছে (উদাহরণস্বরূপ রচনা স্তরগুলির একটি স্বেচ্ছাসেবী সংখ্যার কারণে পিইটিএসসি-তে কমান্ড লাইনে একটি অসীম সংখ্যা উপলব্ধ), লিনিয়ার সলভারগুলি বেছে নেওয়ার বিষয়ে সাধারণ পরামর্শের জন্য এই প্রশ্নটি দেখুন ।

কেএসপি রূপান্তর না করার সাধারণ কারণ

  • সমীকরণগুলি দুর্ঘটনাক্রমে একবচন (যেমন সীমানা শর্ত আরোপ করতে ভুলে গেছেন)। ব্যবহার করে একটি ছোট সমস্যার জন্য এটি পরীক্ষা করে দেখুন -pc_type svd -pc_svd_monitor-pc_type lu(সমান্তরাল একটি তৃতীয় পক্ষের প্যাকেজ মাধ্যমে উদাহরণস্বরূপ -pc_type lu -pc_factor_mat_solver_package superlu_dist) দিয়ে সরাসরি সমাধানকারী চেষ্টা করুন ।
  • সমীকরণগুলি ইচ্ছাকৃতভাবে একবাক্য (যেমন ধ্রুব নাল স্থান), তবে ক্রিলোভ পদ্ধতিটি অবহিত হয়নি, দেখুন KSPSetNullSpace()
  • সমীকরণগুলি ইচ্ছাকৃতভাবে একবাক্য এবং KSPSetNullSpace()ব্যবহৃত হয়েছিল, তবে ডান হাতটি সামঞ্জস্যপূর্ণ নয়। কল MatNullSpaceRemove()করার আগে আপনাকে ডানদিকে কল করতে হতে পারে KSPSolve()
  • সমীকরণগুলি অনির্দিষ্ট হয় যাতে প্রমিত পূর্বশর্তীরা কাজ না করে। সাধারণত আপনি এটি পদার্থবিজ্ঞান থেকে জানতে পারবেন তবে আপনি -ksp_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) জিজ্ঞাসা করুন। উদাহরণস্বরূপ, উচ্চ ফ্রিকোয়েন্সি হেলহোল্টজ-এর জন্য এই প্রশ্নটি দেখুন । পরিমিত সমস্যার আকারের জন্য, আপনি কেবল প্রত্যক্ষ দ্রাবক ব্যবহার করে বেঁচে থাকতে পারেন কিনা তা দেখুন।
  • পদ্ধতিটি যদি পূর্ব শর্তযুক্ত অবশিষ্টাংশে রূপান্তরিত হয় তবে সত্যিকারের অবশিষ্টাংশে না হয় তবে পূর্বশর্তটি সম্ভবত একক বা প্রায় তাই so এটি স্যাডল পয়েন্ট সমস্যাগুলির জন্য সাধারণ (উদাহরণস্বরূপ incompressable প্রবাহ) বা দৃ strongly়ভাবে ননসিমিমেট্রিক অপারেটর (উদাহরণস্বরূপ লো টাইম স্টেপগুলির সাথে লো-ম্যাক হাইপারবোলিক সমস্যা)।
  • পূর্বশর্তি খুব দুর্বল বা অস্থির। -pc_type asm -sub_pc_type luরূপান্তর হারের উন্নতি করে কিনা দেখুন । জিএমআরএস যদি পুনঃসূচনাতে খুব বেশি অগ্রগতি হারাতে থাকে তবে আরও দীর্ঘসূত্রে সহায়তা পুনরায় আরম্ভ হয় কিনা তা দেখুন -ksp_gmres_restart 300। যদি কোনও ট্রান্সপোজ পাওয়া যায়, চেষ্টা করুন -ksp_type bcgsবা অন্য পদ্ধতিগুলির জন্য যা পুনরায় আরম্ভের প্রয়োজন নেই। (দ্রষ্টব্য যে এই পদ্ধতিগুলির সাথে অভিযোজন প্রায়শই ত্রুটিযুক্ত is
  • পূর্ব শর্ত মেট্রিক্স (সম্ভবত আনসেম্বলড) অপারেটরের কাছাকাছি নাও থাকতে পারে। -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। আরও বন্ধুত্বপূর্ণ বীজগণিত সমীকরণ তৈরি করতে সম্ভবত সমস্যার সূত্র পরিবর্তন করুন। আপনি যদি স্কেলিংটি সংশোধন করতে না পারেন তবে আপনাকে সরাসরি সলভার ব্যবহার করতে হবে।
  • ম্যাট্রিক্স ননলাইনার (উদাহরণস্বরূপ, ননলাইনার ফাংশনের সীমাবদ্ধ ভিন্ন ব্যবহার করে মূল্যায়ন করা হয়)। বিভিন্ন বিবিধ প্যারামিটার চেষ্টা করুন (উদাঃ -mat_mffd_type ds)। ভিন্নতরটিকে আরও সঠিক করে তুলতে উচ্চতর নির্ভুলতা ব্যবহার করার চেষ্টা করুন ./configure --with-precision=__float128 --download-f2cblaslapack,। এটি "সহজ" পরামিতি ব্যবস্থায় রূপান্তর করে কিনা তা পরীক্ষা করুন।
  • একটি প্রতিসাম্যবিহীন সমস্যার জন্য একটি প্রতিসম পদ্ধতি ব্যবহার করা হচ্ছে।
  • ধ্রুপদী গ্রাম-শ্মিট অস্থির হয়ে উঠছে, চেষ্টা করুন -ksp_gmres_modifiedgramschmidtবা এমন পদ্ধতি ব্যবহার করুন যা অরথোগোনালাইজকে আলাদাভাবে ব্যবহার করে, যেমন -ksp_type gcr

16

শিক্ষার্থীদের কাছে আমার পরামর্শ হ'ল এই ক্ষেত্রেগুলিতে সরাসরি সমাধানকারী চেষ্টা করা। কারণটি হ'ল এখানে দুটি শ্রেণীর কারণ রয়েছে যে কোনও দ্রাবক একত্রিত হতে পারে না: (i) ম্যাট্রিক্সটি ভুল, বা (ii) সলভার / পূর্ববর্তী অবস্থা নিয়ে সমস্যা রয়েছে। ডাইরেক্ট সলভাররা প্রায়শই এমন কিছু ফলন করে যা আপনি প্রত্যাশিত সমাধানের সাথে তুলনা করতে পারেন, তাই যদি সরাসরি সমাধানকারীর উত্তরটি সঠিক মনে হয়, তবে আপনি জানেন সমস্যাটি পুনরাবৃত্ত সমাধানকারী / পূর্ববর্তী অবস্থার সাথে। অন্যদিকে, উত্তরটি ভুল বলে মনে হচ্ছে, ম্যাট্রিক্স এবং ডান হাতটি একত্রিত করার ক্ষেত্রে সমস্যা রয়েছে।

আমি সাধারণত সরাসরি সমাধানকারী হিসাবে ইউএমএফপ্যাক ব্যবহার করি। আমি নিশ্চিত যে পিইটিএসসির সাথে অনুরূপ কিছু চেষ্টা করা সহজ।


5
-pc_type lu -pc_factor_mat_solver_type umfpackপিইটিএসসি- -pc_type cholesky -pc_factor_mat_solver_package 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। এটা কি সঠিক?
লিওন অ্যাভেরি

আমি জানি না। আপনি যদি এটি করেন তবে কি হবে?
ওল্ফগ্যাং ব্যাঙ্গারথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.