Yinelemeli doğrusal çözücüm neden birleşmiyor?


26

Dan preconditoned Krylov yöntemlerini kullanırken Ne yanlış gidebilir KSP ( PETSc seyrek lineer sistem çözülmelidir 'ın lineer çözücü paketi) bu tür diskretize ve kısmi diferansiyel denklemler doğrusallaştırılmasıyla elde edilenler gibi?

Sorunumda neyin yanlış gittiğini belirlemek için hangi adımları atabilirim?

Doğrusal sistemimi başarılı ve verimli bir şekilde çözmek için ne gibi değişiklikler yapabilirim?


Bu soruyu, özellikle PETSc'deki yinelemeli doğrusal çözücülerle ilgili bir soru olarak mı (soru gövdesi metninden toplayacağım şey) mi, yoksa çoğunlukla yazılımda yinelemeli doğrusal çözücülerin olası algoritmik başarısızlıkları hakkında bir soru olarak mı düşünüyorsunuz? agnostik bağlam (yalnız başlığa bakmaktan topladığım şey neydi)?
Geoff Oxberry

4
Bu petscetiketi var. Metodoloji geneldir, ancak her bir "bunu dene" de "nasıl" bulunmuyorsa cevabın daha az faydalı olacağını düşünüyorum. Alternatif olarak, "nasıl" bir yazılım-agnostik yolla açıklanması gerekiyorsa daha uzun (ve izleyici için daha fazla hataya eğilimli) olması gerekir. Birisi, tüm bunları farklı bir paket kullanarak nasıl yapacağınızı açıklamak isterse, mutlulukla yazılım agnostik bir soru soracağım ve cevabımı PETSc'de ne yapılacağını açıklamak üzere değiştireceğim. Not: SSS’nin geliştirilmiş bir sürümü olan bunu ekledim, bu yüzden kullanıcıları bu siteye götürebilirim.
Jed Brown,

Yanıtlar:


26

İlk öneri

  • -ksp_converged_reason -ksp_monitor_true_residualBir yöntemin neden birbirine yaklaşmadığını öğrenmeye çalışırken her zaman birlikte çalışın.
  • Arızayı göstermek için problem boyutunu ve işlem sayısını mümkün olduğunca küçük yapın. Hangi küçük sorunların, yönteminizin bozulmasına neden olan davranışı gösterdiğini ve geri dönüş süresinin kısaldığını belirleyerek genellikle fikir edinebilirsiniz. Ek olarak, sadece küçük sistemler için kullanılabilecek bazı araştırma teknikleri vardır.
  • Sorun yalnızca çok sayıda zaman adımından, devam adımlarından veya doğrusal olmayan çözme adımlarından sonra ortaya çıkıyorsa, başarısızlık olduğunda modelin durumunu hızlı bir şekilde deneyimlemek için yazmayı düşünün.
  • Alternatif olarak, özellikle yazılımınız kontrol noktası özelliğine sahip değilse , doğrusal sistemi kaydetmek -ksp_view_binaryveya kullanmak MatView()için kullanın veya daha sonra $PETSC_DIR/src/ksp/ksp/examples/tutorials/ex10.cmatrisi okumak ve çözmek için konumundaki kodu kullanın (muhtemelen farklı sayıda işlemle). Bu, birleştirilmiş bir matris gerektirir, bu yüzden kullanışlılığı biraz sınırlı olabilir.
  • Pek çok olası çözücü seçeneği vardır (örn. İsteğe bağlı bir bileşim seviyesi nedeniyle PETSc'deki komut satırında sonsuz bir sayı bulunur), doğrusal çözücüler seçiminde genel tavsiye için bu soruya bakın .

KSP'nin yakınlaşmamasının genel nedenleri

  • Denklemler tesadüfen tekildir (örneğin, sınır koşullarını getirmeyi unutmuş). Bunu kullanarak küçük bir sorun için kontrol edin -pc_type svd -pc_svd_monitor. Ayrıca -pc_type lu(paralel bir üçüncü taraf paketi aracılığıyla, örneğin -pc_type lu -pc_factor_mat_solver_package superlu_dist) ile doğrudan bir çözücü deneyin .
  • Denklemler kasıtlı olarak tekildir (örneğin, sabit boş alan), ancak Krylov metodu bilgilendirilmedi KSPSetNullSpace().
  • Denklemler kasıtlı olarak tekildir ve KSPSetNullSpace()kullanılmıştır, ancak sağ taraf tutarlı değildir. Aramadan MatNullSpaceRemove()önce sağ tarafta arama yapmanız gerekebilir KSPSolve().
  • Denklemler belirsizdir, bu nedenle standart önkoşullar çalışmaz. Genellikle bunu fizikten bileceksiniz, ancak -ksp_compute_eigenvalues ​​ile kontrol edebilirsiniz -ksp_gmres_restart 1000 -pc_type none. Basit eyer noktası problemleri için deneyin -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_detect_saddle_point. Daha fazla ayrıntı için Kullanıcı El Kitabı ve PCFIELDSPLIT kılavuz sayfasına bakın. Daha zor problemler için, sağlam yöntemler bulmak için literatürü okuyun ve bunları nasıl uygulayacağınız konusunda tavsiye isteyip istemediğinizi burada (veya petsc-users@mcs.anl.govveya petsc-maint@mcs.anl.gov) sorun . Örneğin, yüksek frekanslı Helmholtz için bu soruya bakın . Mütevazı problem boyutları için, sadece doğrudan bir çözücü kullanarak yaşayabiliyor musunuz bakın.
  • Metot önceden şartlandırılmış artıkta birleşiyorsa, ancak gerçek artık kalıntısı içinde değilse, ön şartlandırıcının muhtemelen tekil olduğu veya neredeyse olduğu gibi. Bu, eyer noktası problemleri (örneğin, sıkıştırılamaz akış) veya kuvvetle simetrik olmayan operatörler (örneğin, büyük zaman adımlarında düşük Mach hiperbolik problemleri) için yaygındır.
  • Önkoşullayıcı çok zayıf veya kararsız. -pc_type asm -sub_pc_type luYakınsama oranını iyileştirip iyileştirmediğine bakın . GMRES yeniden başlatma işleminde çok fazla ilerleme kaybediyorsa, daha fazla yeniden başlatma işleminin yardımı olup olmadığını kontrol edin -ksp_gmres_restart 300. Bir geçiş varsa, -ksp_type bcgsyeniden başlatmayı gerektirmeyen başka yöntemler deneyin . (Bu yöntemlerle yakınsama sık sık düzensizdir.)
  • Ön koşullandırma matrisi (muhtemelen birleştirilmemiş) operatöre yakın olmayabilir. -pc_type luBir üçüncü taraf paketini kullanarak (örneğin -pc_type lu -pc_factor_mat_solver_package superlu_distveya mumps) seri olarak veya paralel olarak doğrudan bir çözücü ile çözmeyi deneyin . Matrisler aynı ise metot bir yinelemede, aksi takdirde "az" bir yinelemede birleşmelidir. -snes_type testDoğrusal olmayan bir problem çözülürse matrisleri kontrol etmeye çalışın .
  • Önkoşul doğrusal değildir (örneğin, iç içe geçmiş yinelemeli bir çözüm), deneyin -ksp_type fgmres or -ksp_type gcr.
  • Geometrik multigrid kullanıyorsunuz, ancak bazı denklemler (genellikle sınır koşulları) seviyeler arasında uygun şekilde ölçeklendirilmiyor. -pc_mg_galerkinCebirsel olarak doğru ölçeklendirilmiş bir kaba işleci oluşturmaya çalışın veya yeniden boyutlandırılmış kaba seviyeler kullanmak istiyorsanız tüm denklemlerin aynı şekilde ölçeklendiğinden emin olun.
  • Matris çok hasta. Burada açıklanan yöntemleri kullanarak durum numarasını kontrol edin . Bileşenlerin / sınır koşullarının göreceli ölçeklendirmesini seçerek geliştirmeyi deneyin. Dene -ksp_diagonal_scale -ksp_diagonal_scale_fix. Muhtemelen problemin formülasyonunu daha dost cebirsel denklemler üretmek için değiştirebilir. Ölçeklemeyi düzeltemezseniz, doğrudan bir çözücü kullanmanız gerekebilir.
  • Matris doğrusal değildir (örneğin doğrusal olmayan bir fonksiyonun sonlu farkları kullanılarak değerlendirilir). Farklı farklılık parametreleri deneyin (örn. -mat_mffd_type ds). Farklılığı daha doğru hale getirmek için daha yüksek hassasiyet kullanmayı deneyin ./configure --with-precision=__float128 --download-f2cblaslapack. “Kolay” parametre rejimlerinde birleşip birleşmediğini kontrol edin.
  • Simetrik olmayan bir problem için simetrik bir yöntem kullanılıyor.
  • Klasik Gram-Schmidt dengesizleşiyor, -ksp_gmres_modifiedgramschmidtfarklı ortogonalize olan bir yöntemi deniyor ya da kullanıyor, mesela -ksp_type gcr.

16

Öğrencilere tavsiyem, bu durumlarda doğrudan bir çözücü denemektir. Bunun nedeni, bir çözücünün bir araya gelememesinin iki nedeni vardır: (i) matris yanlış, veya (ii) çözücü / ön koşullayıcıda bir sorun var. Doğrudan çözücüler hemen hemen her zaman beklediğiniz çözümle karşılaştırabileceğiniz bir şey verir; bu nedenle doğrudan çözücünün cevabı doğru görünüyorsa, sorunun yinelemeli çözücü / önkoşulda olduğunu bilirsiniz. Öte yandan, cevap yanlış görünüyorsa, sorun matrisin ve sağ tarafın montajı ile ilgilidir.

Genelde UMFPACK'i doğrudan çözücü olarak kullanırım. Eminim PETSC ile benzer bir şeyi denemek kolaydır.


5
-pc_type lu -pc_factor_mat_solver_type umfpackUMFPACK'i (veya -pc_type cholesky -pc_factor_mat_solver_package cholmodSPD sorunları için) PETSc aracılığıyla kullanmak, ancak UMFPACK ve CHOLMOD'un seri olduğunu unutmayın. Buna paralel olarak kullanım için -pc_factor_mat_solver_package superlu_distya da mumps, pastix, spooles.
Jed Brown

2
Sadece açık olmak gerekirse, (eg) kullanmak için ayarlanan tüm seçenek superlu_distolacaktır -ksp_type preonly -pc_type lu -pc_factor_mat_solver_package superlu_dist. Bu doğru mu?
Leon Avery

Bilmiyorum. Bunu yaparsan ne olur?
Wolfgang Bangerth,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.