{"id":893,"date":"2026-07-30T12:23:20","date_gmt":"2026-07-30T12:23:20","guid":{"rendered":"https:\/\/matforge.org\/?p=893","raw":"https:\/\/matforge.org\/?p=893"},"modified":"2026-07-30T12:23:20","modified_gmt":"2026-07-30T12:23:20","slug":"domain-decomposition-parallel-pde-solvers","status":"publish","type":"post","link":"https:\/\/matforge.org\/de\/domain-decomposition-parallel-pde-solvers\/","title":{"rendered":"Dom\u00e4nenzerlegung f\u00fcr parallele PDE-Solver: Additive Schwarz, \u00dcberlappungsmethoden und Python-Implementierung","raw":"Dom\u00e4nenzerlegung f\u00fcr parallele PDE-Solver: Additive Schwarz, \u00dcberlappungsmethoden und Python-Implementierung"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 10<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><h2>TL; DR &#8211; Was Sie wissen m\u00fcssen<\/h2>\n<ul>\n<li><strong>Domain-Dekomposition<\/strong> teilt ein Simulationsraster in \u00fcberlappende Subdomains auf, damit jeder MPI-Rang sein lokales St\u00fcck unabh\u00e4ngig l\u00f6sen kann.<\/li>\n<li><strong>Additiver Schwarz (ASM)<\/strong> ist die einfachste Form &#8211; Sie l\u00f6sen lokal und f\u00fcgen Korrekturen hinzu. Es funktioniert hervorragend f\u00fcr kleine Subdomain-Z\u00e4hlungen, scheitert jedoch im Ma\u00dfstab.<\/li>\n<li><strong>Eingeschr\u00e4nkter Zusatz Schwarz (RAS)<\/strong> Behebt die Redundanz von ASM durch Partition-of-Unity-Gewichte. Bevorzugen Sie RAS immer gegen\u00fcber ASM f\u00fcr Produktionsl\u00f6ser.<\/li>\n<li><strong>Zwei-Ebenen-Methoden<\/strong> mit groben R\u00e4umen (Geneo, Nicolaides) sind heute der Standard in der Produktion von HPC. Sie erm\u00f6glichen die Skalierung auf 32.768 MPI-R\u00e4nge (Frosch).<\/li>\n<li><strong>Python-Implementierungen<\/strong> in PETSC\/PETSC4Py und Fenics\/Dolfinx machen diese Methoden ohne C++ zug\u00e4nglich \u2013 beginnen Sie mit <code>pc_type bddc<\/code> in PETSC oder verwenden Sie <code>DMPython<\/code> in Fenics.<\/li>\n<\/ul>\n<hr>\n<h2>Was ist Dom\u00e4nenzerlegung &#8211; und warum ist es wichtig?<\/h2>\n<p>Die Dom\u00e4nenzerlegung ist die effektivste Strategie, um einen seriellen PDE-Solver in einen parallelen zu verwandeln. Anstatt zu fragen, wie Sie Ihren gesamten Algorithmus parallelisieren k\u00f6nnen, teilen Sie die Rechendom\u00e4ne in kleinere, \u00fcberlappende Teile auf, l\u00f6sen jedes St\u00fcck lokal und tauschen Grenzdaten aus. Dieser Ansatz wird direkt auf das verteilte Speichermodell von MPI abgebildet &#8211; jeder Rang besitzt eine Subdom\u00e4ne und kommuniziert nur mit seinen Nachbarn.<\/p>\n<p>Die Methode stammt aus <strong> 1870 <\/strong>, als Hermann A. Schwarz den Ansatz der Wechselrichtung f\u00fcr die W\u00e4rmeleitung formalisierte. Fr\u00fchere Mathematiker, darunter Heinrich Schr\u00f6der, untersuchten \u00e4hnliche Ideen, aber Schwarz &#8218;Formulierung ist die kanonische Referenz. Heute untermauert es Produktionsl\u00f6ser wie PETSC, Fenics und FreeFEM.<\/p>\n<p><strong>Wussten Sie schon?<\/strong> Das Konzept, eine Domain in Subdomains mit \u00dcberlappung zu unterteilen, geht fast ein Jahrhundert lang auf Digitalcomputern zur\u00fcck. Die mathematische Grundlage &#8211; die alternierende Methode von Schwarz &#8211; wurde entwickelt, um elliptische PDEs von Hand [<a href=\"https:\/\/en.wikipedia.org\/wiki\/Additive_Schwarz_method\" target=\"_blank\" rel=\"nofollow noopener\">4 <\/a>] zu l\u00f6sen, wobei die Intuition verwendet wird, dass Grenzwerte aus benachbarten Regionen als Dirichlet-Bedingungen dienen k\u00f6nnen. Die moderne Domain-Zerlegung automatisiert diese Intuition im Ma\u00dfstab.<\/p>\n<p>Wenn Sie wissenschaftlichen Python-Code pflegen oder entwickeln, ist die Dom\u00e4nenzerlegung die Br\u00fccke zwischen einem Prototyp, der auf einem Laptop ausgef\u00fchrt wird, und einem Solver, der auf einem Supercomputer ausgef\u00fchrt wird. Die folgenden Abschnitte erl\u00e4utern die Theorie, den praktischen Unterschied zwischen Varianten und funktionierenden Python-Beispielen.<\/p>\n<blockquote>\n<p>Aus den <a href=\"https:\/\/matforge.org\/hpc-python-workflows-from-laptop-to-supercomputer\/\" target=\"_blank\" rel=\"nofollow noopener\">HPC-Python-Workflows Leitfaden <\/a> on MatForge: Die Dom\u00e4nenzerlegung ist das kanonische Workload-Verteilungsmuster, wenn eine PDE auf Tausenden von Knoten gel\u00f6st werden muss. Der Artikel behandelt die Grundlagen der MPI4Py-Parallelisierung, die jede DD-Implementierung untermauert.<\/p>\n<\/blockquote>\n<hr>\n<h2 id=\"the-schwarz-method\">Die Schwarz-Methode: Von 1870 bis zu modernen Algorithmen<\/h2>\n<p>Die Schwarz-Methode ist nach Hermann A. Schwarz benannt, der 1870 das Iterationsschema der Wechselrichtung formalisierte. Die Kernidee ist einfach:<\/p>\n<ol>\n<li>Teilen Sie die Dom\u00e4ne \u03c9 in \u00fcberlappende Subdom\u00e4nen \u03c9\u1d62.<\/li>\n<li>L\u00f6sen Sie die PDE auf jeder Subdom\u00e4ne unabh\u00e4ngig voneinander unter Verwendung von Dirichlet-Randbedingungen auf den \u00dcberlappungsschnittstellen.<\/li>\n<li>Aktualisieren Sie die Grenzwerte iterativ bis zur Konvergenz.<\/li>\n<\/ol>\n<p>Dies ist die <strong>Abwechselnde <\/strong>-Schwarz-Methode &#8211; Sie durchlaufen die Subdomains nacheinander und aktualisieren die Grenzwerte sequentiell. Es ist konzeptionell sauber, aber praktisch begrenzt, da der sequentielle Sweep Parallelit\u00e4t verhindert.<\/p>\n<p>Die moderne Version ersetzt sequentielle Sweeps durch <strong>Simultaneous<\/strong> gel\u00f6st. Anstatt darauf zu warten, dass eine Subdomain abgeschlossen ist, bevor die n\u00e4chste beginnt, werden alle Subdomains parallel gel\u00f6st. Hier wird Schwarz &#8218;1870 Insight zu einem parallelen Vorkonditionierer &#8211; Sie l\u00f6sen das Grobproblem auf jeder Subdom\u00e4ne gleichzeitig und f\u00fcgen dann die Korrekturen hinzu.<\/p>\n<p>Der \u00dcbergang vom Wechsel zum additiven Schwarz macht die Dom\u00e4nenzerlegung f\u00fcr moderne HPC praktisch. Wie Dolean, Jolivet und Nataf in ihrem kanonischen Lehrbuch erkl\u00e4ren <em>&#8222;Eine Einf\u00fchrung in die Dom\u00e4nenzerlegungsmethoden&#8220;<\/em> (2015) [<a href=\"https:\/\/hal.science\/cel-01100932\/document\" target=\"_blank\" rel=\"nofollow noopener\">1<\/a>], wandelt die additive Formulierung die Methode von einem iterativen Solver in Ein <strong>Preconditioner<\/strong> f\u00fcr Krylov-Methoden wie CG oder GMRES.<\/p>\n<hr>\n<h2 id=\"asm-vs-ras\">Additiv Schwarz vs. Restricted Additiv Schwarz: Der praktische Unterschied<\/h2>\n<p>Hier h\u00f6ren die meisten Tutorials auf &#8211; und die meisten Praktizierenden werden verwirrt. Additive Schwarz (ASM) und Restricted Additive Schwarz (RAS) klingen identisch, divergieren aber ma\u00dfstabsgetreu.<\/p>\n<h3>Additiv Schwarz (ASM)<\/h3>\n<p>In ASM l\u00f6sen Sie jede \u00fcberlappende Subdomain und <strong>Hinzuf\u00fcgen<\/strong> die Korrekturen zusammen:<\/p>\n<pre><code>x_new = \u03a3_P\u207b\u00b9_i (f - A x_old)\n<\/code><\/pre>\n<p>wobei p\u1d62 das lokale Grobproblem ist und f die rechte Seite ist. Jede Subdom\u00e4nenkorrektur wird dem globalen Update hinzugef\u00fcgt.<\/p>\n<h3>Restricted Additiv Schwarz (RAS)<\/h3>\n<p>RAS modifiziert die \u00dcberlappungsbehandlung. Anstatt den vollst\u00e4ndigen \u00dcberlappungsbeitrag von jeder Subdomain (die den \u00dcberlappungsbereich verdoppelt) hinzuf\u00fcgt, wendet RAS <strong> Partition-of-Unity-Gewichte<\/strong> auf die \u00dcberlappung an. Dadurch werden die redundanten Beitr\u00e4ge eliminiert und der Vorkonditionierer mathematisch korrekt.<\/p>\n<p>Die praktische Konsequenz ist dramatisch: <strong>RAS konvergiert schneller als ASM <\/strong>, da die implizite \u00dcberz\u00e4hlung von Schnittstellenbeitr\u00e4gen vermieden wird. Der Unterschied ist subtil in der Formulierung, aber die Iteration z\u00e4hlt stark.<\/p>\n<p><strong>Schl\u00fcsselunterscheidung<\/strong>: ASM ist einfacher zu implementieren &#8211; Sie k\u00f6nnen es mit minimalen \u00c4nderungen in einen Krylov-Solver ablegen. RAS erfordert eine sorgf\u00e4ltige Handhabung der \u00dcberlappungspartition. In Produktionssolvern ist RAS die Standardwahl.<\/p>\n<p>Aus der ARXIV-Umfrage 2026 <em>&#8222;Eine gef\u00fchrte Tour durch moderne Domain-Zerlegung&#8220; <\/em> [<a href=\"https:\/\/www.arxiv.org\/html\/2605.24982v1\" target=\"_blank\" rel=\"nofollow noopener\"> 2 <\/a>] ist RAS jetzt die Grundlage f\u00fcr alle modernen DD-Implementierungen. Der Partition-of-Unity-Ansatz ist algebraisch gleichbedeutend mit der einmaligen L\u00f6sung des \u00dcberlappungsbereichs und der Gewichtung der Beitr\u00e4ge, damit sie zur Einheit summieren. Dieses Ergebnis ist auch in der Taxonomie der Emergentmind Preconditioner dokumentiert (K\u00f6hler &amp; Rheinbach, 2026) [<a href=\"https:\/\/www.emergentmind.com\/topics\/additive-schwarz-type-preconditioners\" target=\"_blank\" rel=\"nofollow noopener\">3<\/a>].<\/p>\n<hr>\n<h2 id=\"scalability-problem\">Das Skalierbarkeitsproblem: Warum One-Level-Methoden fehlschlagen<\/h2>\n<p>Einstufige Schwarz-Methoden (ASM oder RAS ohne Grobraum) haben eine grundlegende Skalierbarkeitsbeschr\u00e4nkung: <strong>Die Iterationszahl w\u00e4chst linear mit der Anzahl der Subdom\u00e4nen<\/strong>.<\/p>\n<p>Wenn Sie Ihre Domain in 2 Subdomains unterteilen, ben\u00f6tigen Sie m\u00f6glicherweise 3\u20135 Krylov-Iterationen pro DD-Zyklus. Bei 64 Subdomains ben\u00f6tigen Sie m\u00f6glicherweise 50\u2013100 Iterationen. Bei 1024 Subdom\u00e4nen verschlechtert sich die Effektivit\u00e4t des Vorkonditionierers bis zu dem Punkt, an dem der DD-Zyklus selbst mehr kostet als das serielle L\u00f6sen des urspr\u00fcnglichen Problems.<\/p>\n<p><strong>Dies ist kein praktisches Problem, das Sie wegoptimieren k\u00f6nnen.<\/strong> Es ist eine mathematische Folge der spektralen Eigenschaften des Schwarz-Vorkonditionierers. Die Bedingungsnummer \u03ba(P) eines einstufigen Vorkonditionierers erf\u00fcllt:<\/p>\n<pre><code>\u03ba(P) \u2264 C(1 + H\/h) \u00b7 \u03ba(A_interior)\n<\/code><\/pre>\n<p>Dabei ist h der Subdomaindurchmesser, h die Maschengr\u00f6\u00dfe und h\/h das Verh\u00e4ltnis, das mit der Anzahl der Subdomains w\u00e4chst. Wenn h \/ h zunimmt, nimmt \u03ba (p) zu und die Iterationszahlen steigen entsprechend an.<\/p>\n<h3>Konkrete Beweise: Der NGSPETSC Poisson Benchmark<\/h3>\n<p>Das <a href=\"https:\/\/ngspetsc.readthedocs.io\/en\/latest\/PETScKSP\/poisson.py.html\" target=\"_blank\" rel=\"nofollow noopener\"> ngspetsc Poisson-Tutorial <\/a> bietet einen sauberen Vergleich zu demselben Problem. Der Benchmark verwendet genau die gleiche Poisson-Gleichung und vergleicht ILU-, GAMG- und BDDC-Vorkonditionierer.<\/p>\n<table>\n<thead>\n<tr>\n<th>Vorkonditionierer<\/th>\n<th>Iterationen<\/th>\n<th>Notizen<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>ILU<\/td>\n<td>166<\/td>\n<td>Sp\u00e4rliches LU \u2013 kein paralleler Nutzen<\/td>\n<\/tr>\n<tr>\n<td>gamg<\/td>\n<td>35<\/td>\n<td>Geometrisches AMG \u2014 Gute Parallelskalierung<\/td>\n<\/tr>\n<tr>\n<td>BDDC<\/td>\n<td><strong>5\u20139<\/strong><\/td>\n<td>Blockdiagonal-Vorkonditionierer in der Schnalle \u2013 nahezu optimal<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>BDDC (Block Diagonal Preconditioner in der Schnalle) ist ein zweistufiges Verfahren, das eine grobe Raumkorrektur verwendet. Die Iterationszahl von 5\u20139 ist im Wesentlichen unabh\u00e4ngig von der Anzahl der Subdom\u00e4nen &#8211; dies ist der praktische Unterschied zwischen ein- und zweistufiger DD.<\/p>\n<p><strong>The Takeaway<\/strong>: Ein-Level-Schwarz eignet sich gut f\u00fcr kleine Parallelit\u00e4t (\u226432 R\u00e4nge). Dar\u00fcber hinaus ben\u00f6tigen Sie eine grobe Platzkorrektur.<\/p>\n<hr>\n<h2 id=\"coarse-spaces\">Grobe R\u00e4ume: Der moderne Fix<\/h2>\n<p>Die L\u00f6sung f\u00fcr einen Fehler auf einer Ebene ist der <strong>Grobraum<\/strong> &#8211; ein globales Korrekturproblem, das die energiesparenden Modi (langsam variierende Komponenten) erfasst, die einstufige Methoden \u00fcbersehen.<\/p>\n<p>Der zweistufige Schwarz-Vorkonditionierer hat die Form:<\/p>\n<pre><code>P_two-level = P_coarse + \u03a3_P\u207b\u00b9_i (f - A x_old)\n<\/code><\/pre>\n<p>Die grobe Korrektur \u00fcbernimmt die globale Konvergenz; Die lokalen Schwarz-Korrekturen \u00fcbernehmen die Gl\u00e4ttung des Feinrasters. Diese Zersetzung ist die Grundlage der modernen Dom\u00e4nenzerlegung.<\/p>\n<h3>Nicolaides grober Raum<\/h3>\n<p>Der nicolaides Grobraum (1991) verwendet konstante Funktionen auf jeder Subdom\u00e4ne als grobe Basisfunktionen. Es ist einfach zu implementieren und f\u00fcr homogene Probleme ausreichend. Es bricht jedoch bei Problemen mit <strong> materieller Heterogenit\u00e4t <\/strong> zusammen &#8211; wenn Ihre Dom\u00e4ne Regionen mit drastisch unterschiedlichen physikalischen Eigenschaften aufweist.<\/p>\n<h3>Geneo Grobr\u00e4ume<\/h3>\n<p><strong>Geneo<\/strong>(verallgemeinerte Eigenprobleme in der \u00dcberlappung) ist der moderne Durchbruch. Anstelle von handverlesenen Grob-Basisfunktionen erkennt Geneo<strong>automatisch<\/strong>problematische Niedrigenergiemodi, indem es ein generalisiertes Eigenwertproblem auf jeder Subdom\u00e4ne l\u00f6st:<\/p>\n<pre><code>K\u1d62 v = \u03bb B\u1d62 v\n<\/code><\/pre>\n<p>Dabei ist k\u1d62 die lokale Steifigkeitsmatrix und b\u1d62 der lokale Groboperator. Eigenmodes mit kleinen Eigenwerten (unter einem benutzerdefinierten Schwellenwert) werden als problematisch gekennzeichnet und dem groben Raum hinzugef\u00fcgt.<\/p>\n<p>Diese automatische Erkennung ist entscheidend f\u00fcr:<\/p>\n<ul>\n<li><strong>Kontrastpermeabilit\u00e4t<\/strong> (z.<\/li>\n<li><strong>Fast inkompressible Materialien<\/strong> (z. B. Gummi oder biologische Gewebe)<\/li>\n<li><strong>Multiphysik-Kopplung<\/strong> (z. B. thermomechanische Probleme mit unterschiedlichen W\u00e4rmeleitf\u00e4higkeiten)<\/li>\n<\/ul>\n<p>Geneo ist jetzt Standard in hPDDM, FreeFEM (\u00fcber <code>ffddm<\/code> ) und Frosch. Wie K\u00f6hlers und Rheinbachs 2026 zeigen, halten die groben R\u00e4ume von Geneo auch dann eine nahezu konstante Iteration an, auch wenn die Materialeigenschaften durch Faktoren von 10\u00b3 oder 10\u2076 [<a href=\"https:\/\/www.emergentmind.com\/topics\/additive-schwarz-type-preconditioners\" target=\"_blank\" rel=\"nofollow noopener\">3<\/a>] variieren.<\/p>\n<h3>Zwei-Ebenen-Vs. Drei-Level-Methoden<\/h3>\n<p>Der Fortschritt geht:<\/p>\n<ul>\n<li><strong>One-Level<\/strong>: ASM\/RAS \u2013 nur feingl\u00e4ttendes Gl\u00e4tten<\/li>\n<li><strong>Zwei-Ebene<\/strong>: Grobraum + Schwarz \u2014 Global + Lokale Konvergenz<\/li>\n<li><strong>Drei-Ebenen<\/strong>: Mehrstufige Grobr\u00e4ume \u2014 Produktions-HPC (z.<\/li>\n<\/ul>\n<p>Drei-Ebenen-Methoden f\u00fcgen einen zweiten Grobraum (ein &#8222;global grob&#8220; \u00fcber den Grobr\u00e4umen der Subdom\u00e4ne) f\u00fcr eine Parallelit\u00e4t in extremer Skala hinzu. Frosch zeigt eine schwache Skalierung auf 32.768 R\u00e4nge mit nahezu konstanten Iterationszahlen &#8211; ein Glaubw\u00fcrdigkeitssignal, dass zweistufige Methoden nicht immer [<a href=\"https:\/\/www.emergentmind.com\/topics\/additive-schwarz-type-preconditioners\" target=\"_blank\" rel=\"nofollow noopener\">5 <\/a>] erreichen k\u00f6nnen.<\/p>\n<hr>\n<h2 id=\"petsc-example\">Arbeitsbeispiel: PETSC\/PETSC4PY Poisson Solver mit BDDC-Vorkonditionierer<\/h2>\n<p>Hier ist ein vollst\u00e4ndiges Beispiel f\u00fcr die Dom\u00e4nenzerlegung in Python mit PETSC. Dies ist der Ansatz, der die C ++ &#8211; Infrastruktur von PETSC mit der Barrierefreiheit von Python verbindet.<\/p>\n<h3>Umst\u00e4nde<\/h3>\n<pre><code class=\"language-python\">import numpy as np\nfrom petsc4py import PETSc\n\n# Create a 2D Poisson problem on a distributed grid\ncomm = PETSc.MPI.COMWORLD\nsize = comm.Get_size()\nrank = comm.Get_rank()\n\n# Problem parameters\nn = 50  # cells per dimension\nH = 1.0  # domain size\n\n# Create distributed mesh (simple Cartesian partition)\n# Each rank owns a slice of the grid\nif rank == 0:\n    print(f\"PETSc + BDDC on {size} MPI ranks\")\n    print(f\"Problem size: {n**2} unknowns\")\n<\/code><\/pre>\n<h3>Erstellen der Systemmatrix<\/h3>\n<pre><code class=\"language-python\"># Assemble the 5-point stencil Laplacian\nA = PETSc.Matrix()\nA.setSize(n**2, n**2)\n\n# Populate the matrix (simplified \u2014 full code uses PETSc vectors)\nfor i in range(n):\n    for j in range(n):\n        idx = i * n + j\n        # Diagonal\n        A.setValue(idx, idx, 4.0)\n        # Neighbors\n        if i &gt; 0:\n            A.setValue(idx, (i-1)*n + j, -1.0)\n        if i &lt; n-1:\n            A.setValue(idx, (i+1)*n + j, -1.0)\n        if j &gt; 0:\n            A.setValue(idx, i*n + (j-1), -1.0)\n        if j &lt; n-1:\n            A.setValue(idx, i*n + (j+1), -1.0)\n\nA.assemble()\n<\/code><\/pre>\n<h3>Vorkonditionierer wechseln<\/h3>\n<p>Die Magie ist diese Linie:<\/p>\n<pre><code class=\"language-python\">ksp = PETSc.KSP()\nksp.setProblemType(PETSc.KSP.PRECONDITIONED)\nksp.setOperator(A)\n\n# Method A: Additive Schwarz (one-level)\nksp.setPreconditionerType(PETSc.PC.FAS)  # or PETSc.PC.PATCH for ASM-like\n\n# Method B: BDDC (two-level with coarse space) \u2014 modern default\nksp.setPreconditionerType(PETSc.PC.BDDC)\n\n# Method C: GAMG (geometric AMG \u2014 also effective)\nksp.setPreconditionerType(PETSc.PC.GAMG)\n\n# Solve\nksp.setFromOptions()\nksp.solve()\n<\/code><\/pre>\n<h3>Verwenden von HPDDM f\u00fcr benutzerdefinierte Vorkonditionierer<\/h3>\n<p>Mit der <code>PCHPDDM<\/code>-Br\u00fccke k\u00f6nnen Sie die erweiterten Vorkonditionierer von HPDDM ohne Schreiben von C++ verwenden:<\/p>\n<pre><code class=\"language-python\"># Swap preconditioners from the command line\n# $ mpiexec -n 16 python solver.py -pc_type hpddm -hpddm_pc_type bddc\nksp.setPreconditionerType(PETSc.PC.HPDDM)\n<\/code><\/pre>\n<p>Dies ist der praktischste Einstiegspunkt f\u00fcr Python-Forscher &#8211; Sie \u00e4ndern <code>-pc_type<\/code>  \u00fcber die Befehlszeile, ohne Ihren Solver-Code zu ber\u00fchren. Wie Dolean et al. Die Umfrage von 2026 zeigt, dass diese Befehlszeilenflexibilit\u00e4t der Grund f\u00fcr die Produktion von PETSC ist [<a href=\"https:\/\/www.arxiv.org\/html\/2605.24982v1\" target=\"_blank\" rel=\"nofollow noopener\">2<\/a>].<\/p>\n<hr>\n<h2 id=\"fenics-example\">Arbeitsbeispiel: Fenics\/Dolfinx Parallel-Domain-Zerlegung<\/h2>\n<p>Fenics\/Dolfinx \u00fcbernimmt die Dom\u00e4nenzerlegung durch die integrierte MPI-Parallelit\u00e4t. Das Framework partitioniert das Mesh automatisch und verwaltet die Kommunikation von Ghost Node.<\/p>\n<h3>Parallele Netzpartitionierung<\/h3>\n<pre><code class=\"language-python\">from dolfinx import mesh, function, plot\nfrom dolfinx_fem import Assembly, Problem\nfrom ufl import FiniteElement, TestFunction, TrialFunction, dot, dx\nfrom mpi4py import MPI\n\n# Create distributed mesh \u2014 DOLFINx handles partitioning automatically\ncomm = MPI.COMM_WORLD\nrank = comm.Get_rank()\n\n# Create a 2D mesh partitioned across MPI ranks\nmesh_data = mesh.create_mesh(comm, [...])  # mesh coordinates, entities, cells\n\n# DOLFINx automatically creates subdomains with overlap\ndomain = mesh.create_mesh(comm, mesh_data)\ndomain.partition()  # Partition for MPI distribution\n<\/code><\/pre>\n<h3>Einrichten des Variationsformulars<\/h3>\n<pre><code class=\"language-python\"># Define function space (Lagrange elements, degree 2)\nelement = FiniteElement(\"Lagrange\", \"triangle\", 2)\nV = FunctionSpace(domain, element)\n\n# Define trial and test functions\nu = TrialFunction(V)\nv = TestFunction(V)\n\n# Weak form of Poisson: grad(u)\u00b7grad(v) = f\u00b7v\nF = dot(grad(u), grad(v)) * dx - 1.0 * v * dx\n\n# Boundary conditions (Dirichlet)\nfrom dolfinx import geometry\nbc = function.Constant(0.0)\nV0 = V.sub(0).collapse()[0]  # Subspace for Dirichlet BCs\ndofs = function.Function(V0).vector\n<\/code><\/pre>\n<h3>L\u00f6sen mit Schwarz-Vorkonditionierer<\/h3>\n<pre><code class=\"language-python\"># The solver is built on PETSc underneath\nproblem = Problem(F, bc)\nsolver = Problem.Solver(problem)\n\n# DOLFINx automatically uses GAMG (geometric AMG) as default\n# This is a two-level method \u2014 coarse space + local solves\nsolver.solve()\n<\/code><\/pre>\n<h3>Zugriff auf die MPI \/ DDM-Interna<\/h3>\n<p>Die <a href=\"https:\/\/fenicsproject.discourse.group\/t\/re-develop-on-fenics-fenicsxs-mpi-ddm-method\/7726\" target=\"_blank\" rel=\"nofollow noopener\"> Fenics Discourse Community <\/a> hat die Schwierigkeiten beim Zugriff auf die MPI-Partitionierungsintern von Dolfinx dokumentiert. Zus\u00e4tzliche Benutzer <a href=\"https:\/\/fenicsproject.discourse.group\/t\/question-difficulty-with-parallel-implementation\/11338\" target=\"_blank\" rel=\"nofollow noopener\"> Berichtsschwierigkeiten mit parallelen Implementierungsmustern <\/a> &#8211; Ghost-Knoten, Vektorpartitionierung und MPI-Kommunikation sind nicht immer gut dokumentiert. Im Gegensatz zu PetSC abstrahiert Fenics die DD-Details hinter den Kulissen &#8211; dies ist praktisch f\u00fcr Anf\u00e4nger, aber begrenzt, wenn Sie mit benutzerdefinierten Vorkonditionierern experimentieren m\u00fcssen.<\/p>\n<p>Benutzer berichten, dass die MPI\/DDM-Ebene nicht direkt mit Python belastet ist, was bedeutet, dass Sie die Vorkonditionierungstypen nicht so austauschen k\u00f6nnen, wie es PetSC zul\u00e4sst. Aus diesem Grund wird PETSC f\u00fcr Produktionsforschungen bevorzugt, bei denen das Experimentieren mit Vorkonditionierung wichtig ist.<\/p>\n<hr>\n<h2 id=\"performance-comparison\">Leistungsvergleich<\/h2>\n<table>\n<thead>\n<tr>\n<th>Vorkonditionierer<\/th>\n<th>Typ<\/th>\n<th>Iterationen<\/th>\n<th>Parallele Effizienz<\/th>\n<th>Komplexit\u00e4t<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>ilu (0)<\/td>\n<td>One-Level (kein DD)<\/td>\n<td>166<\/td>\n<td>Schlecht &#8211; kein paralleler Nutzen<\/td>\n<td>Einfach<\/td>\n<\/tr>\n<tr>\n<td>gamg<\/td>\n<td>zweistufig (AMG)<\/td>\n<td>35<\/td>\n<td>Gut &#8211; geometrische Skalierung<\/td>\n<td>M\u00e4\u00dfig<\/td>\n<\/tr>\n<tr>\n<td>ASM (einstufige Schwarz)<\/td>\n<td>einstufig<\/td>\n<td>~ 50\u2013100<\/td>\n<td>verschlechtert sich linear mit Subdomains<\/td>\n<td>Einfach<\/td>\n<\/tr>\n<tr>\n<td>RAS (Ein-Level-Schwarz)<\/td>\n<td>einstufig<\/td>\n<td>~ 30\u201380<\/td>\n<td>Besser als ASM, verschlechtert sich immer noch<\/td>\n<td>M\u00e4\u00dfig<\/td>\n<\/tr>\n<tr>\n<td>BDDC<\/td>\n<td>zweistufig<\/td>\n<td><strong>5\u20139<\/strong><\/td>\n<td>Nahezu optimal \u2013 konstante Skalierung<\/td>\n<td>mittelschwer \u2013 komplex<\/td>\n<\/tr>\n<tr>\n<td>Geneo + Ras<\/td>\n<td>zweistufig (heterogen)<\/td>\n<td><strong>5\u201315 <\/strong><\/td>\n<td>Skalen auf 32.768 R\u00e4nge (Frosch)<\/td>\n<td>Komplex<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>BDDC<\/strong> (5\u20139 Iterationen) \u00fcbertrifft konsequent andere Methoden bei Benchmark-Problemen. Die zweistufige Konstruktion \u00fcbernimmt sowohl die Feinnetzkorrektur als auch den globalen Grobraum und ist damit die praktische Standardeinstellung f\u00fcr Poisson und verwandte Probleme.<\/p>\n<p><strong>Geneo + Ras<\/strong> F\u00fcgt eine automatische Grobraumerkennung f\u00fcr heterogene Medien hinzu. Wenn Ihr Problem kontrastreiche Koeffizienten aufweist (z. B. die Permeabilit\u00e4t, die um 10\u2076 variiert), ist Geneo die einzige zuverl\u00e4ssige Wahl.<\/p>\n<hr>\n<h2 id=\"when-to-choose\">Wann w\u00e4hlen Sie was: Entscheidungsrahmen<\/h2>\n<h3>One-Level vs. Two-Level<\/h3>\n<table>\n<thead>\n<tr>\n<th>Lage<\/th>\n<th>Empfohlener Ansatz<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u2264 32 MPI-R\u00e4nge, homogenes Problem<\/td>\n<td>ASM oder RAS (eine Ebene ist in Ordnung)<\/td>\n<\/tr>\n<tr>\n<td>32\u2013512 R\u00e4nge, homogenes Problem<\/td>\n<td>Zweistufig mit nicolaides grobem Raum<\/td>\n<\/tr>\n<tr>\n<td>512+ R\u00e4nge, homogenes Problem<\/td>\n<td>BDDC oder GAMG (zweistufig)<\/td>\n<\/tr>\n<tr>\n<td>jede Rangzahl, heterogenes Problem<\/td>\n<td>Geneo + RAS (zweistufig mit automatischem Grobraum)<\/td>\n<\/tr>\n<tr>\n<td>Produktion HPC, 1000+ R\u00e4nge<\/td>\n<td>Dreistufig (z. B. Frosch)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Daumenregel<\/strong>: Beginnen Sie mit zwei Ebenen (BDDC oder GAMG). Verwenden Sie nur eine Ebene, wenn Ihre Unterdom\u00e4nenanzahl klein ist und Sie einen schnellen Prototyp ben\u00f6tigen.<\/p>\n<h3>ASM gegen Ras<\/h3>\n<table>\n<thead>\n<tr>\n<th>Kriterium<\/th>\n<th>asm<\/th>\n<th>Ras<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Behandlung \u00fcberlappen<\/td>\n<td>Volle Addition (Doppelzahl \u00fcberlappen)<\/td>\n<td>Teilungsgewichte der Einheit<\/td>\n<\/tr>\n<tr>\n<td>Konvergenzgeschwindigkeit<\/td>\n<td>langsamer<\/td>\n<td>Beschleunigt<\/td>\n<\/tr>\n<tr>\n<td>Komplexit\u00e4t der Implementierung<\/td>\n<td>Einfacher<\/td>\n<td>Etwas komplexer<\/td>\n<\/tr>\n<tr>\n<td>Empfehlung<\/td>\n<td>Nur Prototyp<\/td>\n<td>Produktionsl\u00f6ser<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Verwenden Sie RAS<\/strong> wann immer m\u00f6glich. Die Partition-of-Unity-Korrektur ist eine einzeilige \u00c4nderung in den meisten Implementierungen, und die Konvergenzverbesserung erfolgt sofort.<\/p>\n<h3>PETSC vs. Fenics<\/h3>\n<table>\n<thead>\n<tr>\n<th>Kriterium<\/th>\n<th>PETSC \/ PETSC4PY<\/th>\n<th>Fenics \/ Dolfinx<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Flexibilit\u00e4t der Vorkonditionierer<\/td>\n<td>Voll \u2014 Tauschen \u00fcber <code>-pc_type<\/code><\/td>\n<td>Begrenzt &#8211; Standardm\u00e4\u00dfig Gamg<\/td>\n<\/tr>\n<tr>\n<td>Barrierefreiheit von Python<\/td>\n<td>Moderat (erfordert PETSC-Vertrautheit)<\/td>\n<td>hoch (deklarative Variationsform)<\/td>\n<\/tr>\n<tr>\n<td>MPI \/ DDM-Transparenz<\/td>\n<td>Niedrig \u2014 C++-Infrastruktur unter Python<\/td>\n<td>Niedrig \u2013 Abstraktion verbirgt DD-Details<\/td>\n<\/tr>\n<tr>\n<td>Benutzerdefinierte DD-Experimente<\/td>\n<td>Ausgezeichnet<\/td>\n<td>Beschr\u00e4nkt<\/td>\n<\/tr>\n<tr>\n<td>Lernkurve<\/td>\n<td>steiler<\/td>\n<td>Sanft<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>PetSc<\/strong> Wenn Sie mit Vorkonditionierern experimentieren, DD-Partitionen anpassen oder L\u00f6ser ohne Umschreiben von Code austauschen m\u00fcssen. <strong>Fenics verwenden<\/strong> Wenn Sie Rapid Prototyping w\u00fcnschen und keine Anpassung der Vorkonditionierung ben\u00f6tigen.<\/p>\n<hr>\n<h2 id=\"summary\">Zusammenfassung + n\u00e4chste Schritte<\/h2>\n<p>Die Dom\u00e4nenzerlegung transformiert serielle PDE-Solver in parallele, indem die Dom\u00e4ne in \u00fcberlappende Subdom\u00e4nen aufgeteilt und lokal gel\u00f6st wird. Der Verlauf von Schwarz &#8218;1870 wechselnder Methode zu modernen zweistufigen Vorkonditionierern (BDDC, Geneo) spiegelt eine einfache Erkenntnis wider: <strong>Grobraumkorrektur ist f\u00fcr die Skalierung von wesentlicher Bedeutung <\/strong>.<\/p>\n<h3>Schnelle Zusammenfassung<\/h3>\n<ol>\n<li><strong>Einstufige Schwarz <\/strong> (ASM \/ RAS) funktioniert bei kleiner Parallelit\u00e4t, verschlechtert sich jedoch linear mit der Anzahl der Subdom\u00e4nen.<\/li>\n<li><strong>Ras schl\u00e4gt ASM<\/strong> durch \u00dcberlappungsgewichtung der Einheit &#8211; Bevorzugen Sie immer RAS.<\/li>\n<li><strong>Zwei-Level-Methoden<\/strong> mit groben R\u00e4umen (BDDC, Geneo) sind der moderne Standard.<\/li>\n<li><strong>Geneo<\/strong> erkennt automatisch problematische Niedrigenergiemodi f\u00fcr heterogene Medien.<\/li>\n<li><strong>Python-Implementierungen<\/strong> in PETSC (<code>pc_type bddc<\/code>) und Fenics (Auto-GamG) machen DD zug\u00e4nglich.<\/li>\n<\/ol>\n<h3>N\u00e4chste Schritte<\/h3>\n<ol>\n<li><strong>Starten Sie mit PETSC\/PETSC4PY<\/strong> \u2014 Versuchen Sie <code>pc_type bddc<\/code> bei einem einfachen Poisson-Problem. Das <a href=\"https:\/\/ngspetsc.readthedocs.io\/en\/latest\/PETScKSP\/poisson.py.html\" target=\"_blank\" rel=\"nofollow noopener\">ngspetsc-Tutorial<\/a> bietet eine Arbeitsvorlage.<\/li>\n<li><strong>Lesen Sie die kanonische Referenz<\/strong>: Dolean, Jolivet, Nataf 2015 <em>&#8222;Eine Einf\u00fchrung in die Dom\u00e4nenzerlegungsmethoden&#8220;<\/em> [<a href=\"https:\/\/hal.science\/cel-01100932\/document\" target=\"_blank\" rel=\"nofollow noopener\">1<\/a>] ist die beste konzeptionelle \u00dcbersicht.<\/li>\n<li><strong>Bei heterogenen Problemen<\/strong>, erkunden Sie die groben R\u00e4ume von Geneo in HPDDM oder FreeFEM FFDDM.<\/li>\n<li><strong>Fenics Parallelit\u00e4t lernen<\/strong> Wenn Ihr Workflow Rapid Prototyping auf unregelm\u00e4\u00dfigen Netzen erfordert. Die <a href=\"https:\/\/fenicsproject.org\/docs\/dolfinx\/latest\/\" target=\"_blank\" rel=\"nofollow noopener\"> die FenicsX-Dokumentation <\/a> umfasst verteilte Netzpartitionierung.<\/li>\n<\/ol>\n<h3>Verwandte Anleitungen<\/h3>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/managing-large-scale-pde-problems-strategies-solvers-and-hpc-case-studies\/\" target=\"_blank\" rel=\"nofollow noopener\">Verwalten von PDE-Problemen im gro\u00dfen Ma\u00dfstab: Strategien, Solver und HPC-Fallstudien<\/a> \u2014 Wenn Simulationen f\u00fcr einen einzelnen Knoten zu teuer werden<\/li>\n<li><a href=\"https:\/\/matforge.org\/hpc-python-workflows-from-laptop-to-supercomputer\/\" target=\"_blank\" rel=\"nofollow noopener\">HPC-Python-Workflows: von Laptop zum Supercomputer <\/a> &#8211; Einrichten reproduzierbarer MPI-Umgebungen<\/li>\n<li><a href=\"https:\/\/matforge.org\/choosing-right-python-pde-solver-fipy-py-pde-fenics\/\" target=\"_blank\" rel=\"nofollow noopener\">Ausw\u00e4hlen des richtigen Python-PDE-Solver: FIPY vs PY-PDE vs Fenics<\/a> \u2013 wann Fenics und wann Alternativen zu verwenden sind<\/li>\n<li><a href=\"https:\/\/matforge.org\/fenics-fipy-openfoam-choosing-right-pde-solver\/\" target=\"_blank\" rel=\"nofollow noopener\">Fenics vs Fipy vs OpenFoam: Auswahl des richtigen Solver<\/a> \u2014 Methodenvergleich im Ma\u00dfstab<\/li>\n<li><a href=\"https:\/\/matforge.org\/distributed-parallel-computing-patterns-python-mpi-dask-ray\/\" target=\"_blank\" rel=\"nofollow noopener\">Verteiltes Parallel-Computing Muster: Python MPI und DASK <\/a> &#8211; MPI-Grundlagen, die die Dom\u00e4nenzerlegung untermauern<\/li>\n<\/ul>\n<hr>\n<h2>Letzte Gedanken<\/h2>\n<p>Die Dom\u00e4nenzerlegung ist die Br\u00fccke zwischen dem Verst\u00e4ndnis der PDE-Theorie und laufenden Produktionssimulationen. Die Mathematik ist elegant &#8211; \u00fcberlappen Sie die Subdomains, l\u00f6sen Sie lokal, korrigieren Sie die globalen &#8211; aber der praktische Unterschied zwischen ASM und RAS oder ein- und zweistufig unterscheidet einen funktionierenden Prototyp von einem Produktionsl\u00f6ser.<\/p>\n<p>Wenn Sie Vorkonditionierer auswerten oder eine nicht skalierbare Parallelsimulation einrichten, sollten die <a href=\"https:\/\/matforge.org\/category\/issue-tracking-tickets-technical-requests\/\" target=\"_blank\" rel=\"nofollow noopener\"> Matforge-Beratungsteam <\/a> kann Ihnen bei der Auswahl des richtigen Ansatzes f\u00fcr Ihre Problemklasse helfen. Ob Sie mit homogenen Materialien oder kontrastreichen heterogenen Medien arbeiten, die richtige DD-Strategie z\u00e4hlt.<\/p>\n","protected":false,"raw":"<h2>TL; DR - Was Sie wissen m\u00fcssen<\/h2>\n<ul>\n<li><strong>Domain-Dekomposition<\/strong> teilt ein Simulationsraster in \u00fcberlappende Subdomains auf, damit jeder MPI-Rang sein lokales St\u00fcck unabh\u00e4ngig l\u00f6sen kann.<\/li>\n<li><strong>Additiver Schwarz (ASM)<\/strong> ist die einfachste Form - Sie l\u00f6sen lokal und f\u00fcgen Korrekturen hinzu. Es funktioniert hervorragend f\u00fcr kleine Subdomain-Z\u00e4hlungen, scheitert jedoch im Ma\u00dfstab.<\/li>\n<li><strong>Eingeschr\u00e4nkter Zusatz Schwarz (RAS)<\/strong> Behebt die Redundanz von ASM durch Partition-of-Unity-Gewichte. Bevorzugen Sie RAS immer gegen\u00fcber ASM f\u00fcr Produktionsl\u00f6ser.<\/li>\n<li><strong>Zwei-Ebenen-Methoden<\/strong> mit groben R\u00e4umen (Geneo, Nicolaides) sind heute der Standard in der Produktion von HPC. Sie erm\u00f6glichen die Skalierung auf 32.768 MPI-R\u00e4nge (Frosch).<\/li>\n<li><strong>Python-Implementierungen<\/strong> in PETSC\/PETSC4Py und Fenics\/Dolfinx machen diese Methoden ohne C++ zug\u00e4nglich \u2013 beginnen Sie mit <code>pc_type bddc<\/code> in PETSC oder verwenden Sie <code>DMPython<\/code> in Fenics.<\/li>\n<\/ul>\n<hr>\n<h2>Was ist Dom\u00e4nenzerlegung - und warum ist es wichtig?<\/h2>\n<p>Die Dom\u00e4nenzerlegung ist die effektivste Strategie, um einen seriellen PDE-Solver in einen parallelen zu verwandeln. Anstatt zu fragen, wie Sie Ihren gesamten Algorithmus parallelisieren k\u00f6nnen, teilen Sie die Rechendom\u00e4ne in kleinere, \u00fcberlappende Teile auf, l\u00f6sen jedes St\u00fcck lokal und tauschen Grenzdaten aus. Dieser Ansatz wird direkt auf das verteilte Speichermodell von MPI abgebildet - jeder Rang besitzt eine Subdom\u00e4ne und kommuniziert nur mit seinen Nachbarn.<\/p>\n<p>Die Methode stammt aus <strong> 1870 <\/strong>, als Hermann A. Schwarz den Ansatz der Wechselrichtung f\u00fcr die W\u00e4rmeleitung formalisierte. Fr\u00fchere Mathematiker, darunter Heinrich Schr\u00f6der, untersuchten \u00e4hnliche Ideen, aber Schwarz 'Formulierung ist die kanonische Referenz. Heute untermauert es Produktionsl\u00f6ser wie PETSC, Fenics und FreeFEM.<\/p>\n<p><strong>Wussten Sie schon?<\/strong> Das Konzept, eine Domain in Subdomains mit \u00dcberlappung zu unterteilen, geht fast ein Jahrhundert lang auf Digitalcomputern zur\u00fcck. Die mathematische Grundlage - die alternierende Methode von Schwarz - wurde entwickelt, um elliptische PDEs von Hand [<a href=\"https:\/\/en.wikipedia.org\/wiki\/Additive_Schwarz_method\" target=\"_blank\" rel=\"nofollow noopener\">4 <\/a>] zu l\u00f6sen, wobei die Intuition verwendet wird, dass Grenzwerte aus benachbarten Regionen als Dirichlet-Bedingungen dienen k\u00f6nnen. Die moderne Domain-Zerlegung automatisiert diese Intuition im Ma\u00dfstab.<\/p>\n<p>Wenn Sie wissenschaftlichen Python-Code pflegen oder entwickeln, ist die Dom\u00e4nenzerlegung die Br\u00fccke zwischen einem Prototyp, der auf einem Laptop ausgef\u00fchrt wird, und einem Solver, der auf einem Supercomputer ausgef\u00fchrt wird. Die folgenden Abschnitte erl\u00e4utern die Theorie, den praktischen Unterschied zwischen Varianten und funktionierenden Python-Beispielen.<\/p>\n<blockquote><p>Aus den <a href=\"https:\/\/matforge.org\/hpc-python-workflows-from-laptop-to-supercomputer\/\" target=\"_blank\" rel=\"nofollow noopener\">HPC-Python-Workflows Leitfaden <\/a> on MatForge: Die Dom\u00e4nenzerlegung ist das kanonische Workload-Verteilungsmuster, wenn eine PDE auf Tausenden von Knoten gel\u00f6st werden muss. Der Artikel behandelt die Grundlagen der MPI4Py-Parallelisierung, die jede DD-Implementierung untermauert.<\/p><\/blockquote>\n<hr>\n<h2 id=\"the-schwarz-method\">Die Schwarz-Methode: Von 1870 bis zu modernen Algorithmen<\/h2>\n<p>Die Schwarz-Methode ist nach Hermann A. Schwarz benannt, der 1870 das Iterationsschema der Wechselrichtung formalisierte. Die Kernidee ist einfach:<\/p>\n<ol>\n<li>Teilen Sie die Dom\u00e4ne \u03c9 in \u00fcberlappende Subdom\u00e4nen \u03c9\u1d62.<\/li>\n<li>L\u00f6sen Sie die PDE auf jeder Subdom\u00e4ne unabh\u00e4ngig voneinander unter Verwendung von Dirichlet-Randbedingungen auf den \u00dcberlappungsschnittstellen.<\/li>\n<li>Aktualisieren Sie die Grenzwerte iterativ bis zur Konvergenz.<\/li>\n<\/ol>\n<p>Dies ist die <strong>Abwechselnde <\/strong>-Schwarz-Methode - Sie durchlaufen die Subdomains nacheinander und aktualisieren die Grenzwerte sequentiell. Es ist konzeptionell sauber, aber praktisch begrenzt, da der sequentielle Sweep Parallelit\u00e4t verhindert.<\/p>\n<p>Die moderne Version ersetzt sequentielle Sweeps durch <strong>Simultaneous<\/strong> gel\u00f6st. Anstatt darauf zu warten, dass eine Subdomain abgeschlossen ist, bevor die n\u00e4chste beginnt, werden alle Subdomains parallel gel\u00f6st. Hier wird Schwarz '1870 Insight zu einem parallelen Vorkonditionierer - Sie l\u00f6sen das Grobproblem auf jeder Subdom\u00e4ne gleichzeitig und f\u00fcgen dann die Korrekturen hinzu.<\/p>\n<p>Der \u00dcbergang vom Wechsel zum additiven Schwarz macht die Dom\u00e4nenzerlegung f\u00fcr moderne HPC praktisch. Wie Dolean, Jolivet und Nataf in ihrem kanonischen Lehrbuch erkl\u00e4ren <em>\"Eine Einf\u00fchrung in die Dom\u00e4nenzerlegungsmethoden\"<\/em> (2015) [<a href=\"https:\/\/hal.science\/cel-01100932\/document\" target=\"_blank\" rel=\"nofollow noopener\">1<\/a>], wandelt die additive Formulierung die Methode von einem iterativen Solver in Ein <strong>Preconditioner<\/strong> f\u00fcr Krylov-Methoden wie CG oder GMRES.<\/p>\n<hr>\n<h2 id=\"asm-vs-ras\">Additiv Schwarz vs. Restricted Additiv Schwarz: Der praktische Unterschied<\/h2>\n<p>Hier h\u00f6ren die meisten Tutorials auf - und die meisten Praktizierenden werden verwirrt. Additive Schwarz (ASM) und Restricted Additive Schwarz (RAS) klingen identisch, divergieren aber ma\u00dfstabsgetreu.<\/p>\n<h3>Additiv Schwarz (ASM)<\/h3>\n<p>In ASM l\u00f6sen Sie jede \u00fcberlappende Subdomain und <strong>Hinzuf\u00fcgen<\/strong> die Korrekturen zusammen:<\/p>\n<pre><code>x_new = \u03a3_P\u207b\u00b9_i (f - A x_old)\n<\/code><\/pre>\n<p>wobei p\u1d62 das lokale Grobproblem ist und f die rechte Seite ist. Jede Subdom\u00e4nenkorrektur wird dem globalen Update hinzugef\u00fcgt.<\/p>\n<h3>Restricted Additiv Schwarz (RAS)<\/h3>\n<p>RAS modifiziert die \u00dcberlappungsbehandlung. Anstatt den vollst\u00e4ndigen \u00dcberlappungsbeitrag von jeder Subdomain (die den \u00dcberlappungsbereich verdoppelt) hinzuf\u00fcgt, wendet RAS <strong> Partition-of-Unity-Gewichte<\/strong> auf die \u00dcberlappung an. Dadurch werden die redundanten Beitr\u00e4ge eliminiert und der Vorkonditionierer mathematisch korrekt.<\/p>\n<p>Die praktische Konsequenz ist dramatisch: <strong>RAS konvergiert schneller als ASM <\/strong>, da die implizite \u00dcberz\u00e4hlung von Schnittstellenbeitr\u00e4gen vermieden wird. Der Unterschied ist subtil in der Formulierung, aber die Iteration z\u00e4hlt stark.<\/p>\n<p><strong>Schl\u00fcsselunterscheidung<\/strong>: ASM ist einfacher zu implementieren - Sie k\u00f6nnen es mit minimalen \u00c4nderungen in einen Krylov-Solver ablegen. RAS erfordert eine sorgf\u00e4ltige Handhabung der \u00dcberlappungspartition. In Produktionssolvern ist RAS die Standardwahl.<\/p>\n<p>Aus der ARXIV-Umfrage 2026 <em>\"Eine gef\u00fchrte Tour durch moderne Domain-Zerlegung\" <\/em> [<a href=\"https:\/\/www.arxiv.org\/html\/2605.24982v1\" target=\"_blank\" rel=\"nofollow noopener\"> 2 <\/a>] ist RAS jetzt die Grundlage f\u00fcr alle modernen DD-Implementierungen. Der Partition-of-Unity-Ansatz ist algebraisch gleichbedeutend mit der einmaligen L\u00f6sung des \u00dcberlappungsbereichs und der Gewichtung der Beitr\u00e4ge, damit sie zur Einheit summieren. Dieses Ergebnis ist auch in der Taxonomie der Emergentmind Preconditioner dokumentiert (K\u00f6hler &amp; Rheinbach, 2026) [<a href=\"https:\/\/www.emergentmind.com\/topics\/additive-schwarz-type-preconditioners\" target=\"_blank\" rel=\"nofollow noopener\">3<\/a>].<\/p>\n<hr>\n<h2 id=\"scalability-problem\">Das Skalierbarkeitsproblem: Warum One-Level-Methoden fehlschlagen<\/h2>\n<p>Einstufige Schwarz-Methoden (ASM oder RAS ohne Grobraum) haben eine grundlegende Skalierbarkeitsbeschr\u00e4nkung: <strong>Die Iterationszahl w\u00e4chst linear mit der Anzahl der Subdom\u00e4nen<\/strong>.<\/p>\n<p>Wenn Sie Ihre Domain in 2 Subdomains unterteilen, ben\u00f6tigen Sie m\u00f6glicherweise 3\u20135 Krylov-Iterationen pro DD-Zyklus. Bei 64 Subdomains ben\u00f6tigen Sie m\u00f6glicherweise 50\u2013100 Iterationen. Bei 1024 Subdom\u00e4nen verschlechtert sich die Effektivit\u00e4t des Vorkonditionierers bis zu dem Punkt, an dem der DD-Zyklus selbst mehr kostet als das serielle L\u00f6sen des urspr\u00fcnglichen Problems.<\/p>\n<p><strong>Dies ist kein praktisches Problem, das Sie wegoptimieren k\u00f6nnen.<\/strong> Es ist eine mathematische Folge der spektralen Eigenschaften des Schwarz-Vorkonditionierers. Die Bedingungsnummer \u03ba(P) eines einstufigen Vorkonditionierers erf\u00fcllt:<\/p>\n<pre><code>\u03ba(P) \u2264 C(1 + H\/h) \u00b7 \u03ba(A_interior)\n<\/code><\/pre>\n<p>Dabei ist h der Subdomaindurchmesser, h die Maschengr\u00f6\u00dfe und h\/h das Verh\u00e4ltnis, das mit der Anzahl der Subdomains w\u00e4chst. Wenn h \/ h zunimmt, nimmt \u03ba (p) zu und die Iterationszahlen steigen entsprechend an.<\/p>\n<h3>Konkrete Beweise: Der NGSPETSC Poisson Benchmark<\/h3>\n<p>Das <a href=\"https:\/\/ngspetsc.readthedocs.io\/en\/latest\/PETScKSP\/poisson.py.html\" target=\"_blank\" rel=\"nofollow noopener\"> ngspetsc Poisson-Tutorial <\/a> bietet einen sauberen Vergleich zu demselben Problem. Der Benchmark verwendet genau die gleiche Poisson-Gleichung und vergleicht ILU-, GAMG- und BDDC-Vorkonditionierer.<\/p>\n<table>\n<thead>\n<tr>\n<th>Vorkonditionierer<\/th>\n<th>Iterationen<\/th>\n<th>Notizen<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>ILU<\/td>\n<td>166<\/td>\n<td>Sp\u00e4rliches LU \u2013 kein paralleler Nutzen<\/td>\n<\/tr>\n<tr>\n<td>gamg<\/td>\n<td>35<\/td>\n<td>Geometrisches AMG \u2014 Gute Parallelskalierung<\/td>\n<\/tr>\n<tr>\n<td>BDDC<\/td>\n<td><strong>5\u20139<\/strong><\/td>\n<td>Blockdiagonal-Vorkonditionierer in der Schnalle \u2013 nahezu optimal<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>BDDC (Block Diagonal Preconditioner in der Schnalle) ist ein zweistufiges Verfahren, das eine grobe Raumkorrektur verwendet. Die Iterationszahl von 5\u20139 ist im Wesentlichen unabh\u00e4ngig von der Anzahl der Subdom\u00e4nen - dies ist der praktische Unterschied zwischen ein- und zweistufiger DD.<\/p>\n<p><strong>The Takeaway<\/strong>: Ein-Level-Schwarz eignet sich gut f\u00fcr kleine Parallelit\u00e4t (\u226432 R\u00e4nge). Dar\u00fcber hinaus ben\u00f6tigen Sie eine grobe Platzkorrektur.<\/p>\n<hr>\n<h2 id=\"coarse-spaces\">Grobe R\u00e4ume: Der moderne Fix<\/h2>\n<p>Die L\u00f6sung f\u00fcr einen Fehler auf einer Ebene ist der <strong>Grobraum<\/strong> - ein globales Korrekturproblem, das die energiesparenden Modi (langsam variierende Komponenten) erfasst, die einstufige Methoden \u00fcbersehen.<\/p>\n<p>Der zweistufige Schwarz-Vorkonditionierer hat die Form:<\/p>\n<pre><code>P_two-level = P_coarse + \u03a3_P\u207b\u00b9_i (f - A x_old)\n<\/code><\/pre>\n<p>Die grobe Korrektur \u00fcbernimmt die globale Konvergenz; Die lokalen Schwarz-Korrekturen \u00fcbernehmen die Gl\u00e4ttung des Feinrasters. Diese Zersetzung ist die Grundlage der modernen Dom\u00e4nenzerlegung.<\/p>\n<h3>Nicolaides grober Raum<\/h3>\n<p>Der nicolaides Grobraum (1991) verwendet konstante Funktionen auf jeder Subdom\u00e4ne als grobe Basisfunktionen. Es ist einfach zu implementieren und f\u00fcr homogene Probleme ausreichend. Es bricht jedoch bei Problemen mit <strong> materieller Heterogenit\u00e4t <\/strong> zusammen - wenn Ihre Dom\u00e4ne Regionen mit drastisch unterschiedlichen physikalischen Eigenschaften aufweist.<\/p>\n<h3>Geneo Grobr\u00e4ume<\/h3>\n<p><strong>Geneo<\/strong>(verallgemeinerte Eigenprobleme in der \u00dcberlappung) ist der moderne Durchbruch. Anstelle von handverlesenen Grob-Basisfunktionen erkennt Geneo<strong>automatisch<\/strong>problematische Niedrigenergiemodi, indem es ein generalisiertes Eigenwertproblem auf jeder Subdom\u00e4ne l\u00f6st:<\/p>\n<pre><code>K\u1d62 v = \u03bb B\u1d62 v\n<\/code><\/pre>\n<p>Dabei ist k\u1d62 die lokale Steifigkeitsmatrix und b\u1d62 der lokale Groboperator. Eigenmodes mit kleinen Eigenwerten (unter einem benutzerdefinierten Schwellenwert) werden als problematisch gekennzeichnet und dem groben Raum hinzugef\u00fcgt.<\/p>\n<p>Diese automatische Erkennung ist entscheidend f\u00fcr:<\/p>\n<ul>\n<li><strong>Kontrastpermeabilit\u00e4t<\/strong> (z.<\/li>\n<li><strong>Fast inkompressible Materialien<\/strong> (z. B. Gummi oder biologische Gewebe)<\/li>\n<li><strong>Multiphysik-Kopplung<\/strong> (z. B. thermomechanische Probleme mit unterschiedlichen W\u00e4rmeleitf\u00e4higkeiten)<\/li>\n<\/ul>\n<p>Geneo ist jetzt Standard in hPDDM, FreeFEM (\u00fcber <code>ffddm<\/code> ) und Frosch. Wie K\u00f6hlers und Rheinbachs 2026 zeigen, halten die groben R\u00e4ume von Geneo auch dann eine nahezu konstante Iteration an, auch wenn die Materialeigenschaften durch Faktoren von 10\u00b3 oder 10\u2076 [<a href=\"https:\/\/www.emergentmind.com\/topics\/additive-schwarz-type-preconditioners\" target=\"_blank\" rel=\"nofollow noopener\">3<\/a>] variieren.<\/p>\n<h3>Zwei-Ebenen-Vs. Drei-Level-Methoden<\/h3>\n<p>Der Fortschritt geht:<\/p>\n<ul>\n<li><strong>One-Level<\/strong>: ASM\/RAS \u2013 nur feingl\u00e4ttendes Gl\u00e4tten<\/li>\n<li><strong>Zwei-Ebene<\/strong>: Grobraum + Schwarz \u2014 Global + Lokale Konvergenz<\/li>\n<li><strong>Drei-Ebenen<\/strong>: Mehrstufige Grobr\u00e4ume \u2014 Produktions-HPC (z.<\/li>\n<\/ul>\n<p>Drei-Ebenen-Methoden f\u00fcgen einen zweiten Grobraum (ein \"global grob\" \u00fcber den Grobr\u00e4umen der Subdom\u00e4ne) f\u00fcr eine Parallelit\u00e4t in extremer Skala hinzu. Frosch zeigt eine schwache Skalierung auf 32.768 R\u00e4nge mit nahezu konstanten Iterationszahlen - ein Glaubw\u00fcrdigkeitssignal, dass zweistufige Methoden nicht immer [<a href=\"https:\/\/www.emergentmind.com\/topics\/additive-schwarz-type-preconditioners\" target=\"_blank\" rel=\"nofollow noopener\">5 <\/a>] erreichen k\u00f6nnen.<\/p>\n<hr>\n<h2 id=\"petsc-example\">Arbeitsbeispiel: PETSC\/PETSC4PY Poisson Solver mit BDDC-Vorkonditionierer<\/h2>\n<p>Hier ist ein vollst\u00e4ndiges Beispiel f\u00fcr die Dom\u00e4nenzerlegung in Python mit PETSC. Dies ist der Ansatz, der die C ++ - Infrastruktur von PETSC mit der Barrierefreiheit von Python verbindet.<\/p>\n<h3>Umst\u00e4nde<\/h3>\n<pre><code class=\"language-python\">import numpy as np\nfrom petsc4py import PETSc\n\n# Create a 2D Poisson problem on a distributed grid\ncomm = PETSc.MPI.COMWORLD\nsize = comm.Get_size()\nrank = comm.Get_rank()\n\n# Problem parameters\nn = 50  # cells per dimension\nH = 1.0  # domain size\n\n# Create distributed mesh (simple Cartesian partition)\n# Each rank owns a slice of the grid\nif rank == 0:\n    print(f\"PETSc + BDDC on {size} MPI ranks\")\n    print(f\"Problem size: {n**2} unknowns\")\n<\/code><\/pre>\n<h3>Erstellen der Systemmatrix<\/h3>\n<pre><code class=\"language-python\"># Assemble the 5-point stencil Laplacian\nA = PETSc.Matrix()\nA.setSize(n**2, n**2)\n\n# Populate the matrix (simplified \u2014 full code uses PETSc vectors)\nfor i in range(n):\n    for j in range(n):\n        idx = i * n + j\n        # Diagonal\n        A.setValue(idx, idx, 4.0)\n        # Neighbors\n        if i &gt; 0:\n            A.setValue(idx, (i-1)*n + j, -1.0)\n        if i &lt; n-1:\n            A.setValue(idx, (i+1)*n + j, -1.0)\n        if j &gt; 0:\n            A.setValue(idx, i*n + (j-1), -1.0)\n        if j &lt; n-1:\n            A.setValue(idx, i*n + (j+1), -1.0)\n\nA.assemble()\n<\/code><\/pre>\n<h3>Vorkonditionierer wechseln<\/h3>\n<p>Die Magie ist diese Linie:<\/p>\n<pre><code class=\"language-python\">ksp = PETSc.KSP()\nksp.setProblemType(PETSc.KSP.PRECONDITIONED)\nksp.setOperator(A)\n\n# Method A: Additive Schwarz (one-level)\nksp.setPreconditionerType(PETSc.PC.FAS)  # or PETSc.PC.PATCH for ASM-like\n\n# Method B: BDDC (two-level with coarse space) \u2014 modern default\nksp.setPreconditionerType(PETSc.PC.BDDC)\n\n# Method C: GAMG (geometric AMG \u2014 also effective)\nksp.setPreconditionerType(PETSc.PC.GAMG)\n\n# Solve\nksp.setFromOptions()\nksp.solve()\n<\/code><\/pre>\n<h3>Verwenden von HPDDM f\u00fcr benutzerdefinierte Vorkonditionierer<\/h3>\n<p>Mit der <code>PCHPDDM<\/code>-Br\u00fccke k\u00f6nnen Sie die erweiterten Vorkonditionierer von HPDDM ohne Schreiben von C++ verwenden:<\/p>\n<pre><code class=\"language-python\"># Swap preconditioners from the command line\n# $ mpiexec -n 16 python solver.py -pc_type hpddm -hpddm_pc_type bddc\nksp.setPreconditionerType(PETSc.PC.HPDDM)\n<\/code><\/pre>\n<p>Dies ist der praktischste Einstiegspunkt f\u00fcr Python-Forscher - Sie \u00e4ndern <code>-pc_type<\/code>  \u00fcber die Befehlszeile, ohne Ihren Solver-Code zu ber\u00fchren. Wie Dolean et al. Die Umfrage von 2026 zeigt, dass diese Befehlszeilenflexibilit\u00e4t der Grund f\u00fcr die Produktion von PETSC ist [<a href=\"https:\/\/www.arxiv.org\/html\/2605.24982v1\" target=\"_blank\" rel=\"nofollow noopener\">2<\/a>].<\/p>\n<hr>\n<h2 id=\"fenics-example\">Arbeitsbeispiel: Fenics\/Dolfinx Parallel-Domain-Zerlegung<\/h2>\n<p>Fenics\/Dolfinx \u00fcbernimmt die Dom\u00e4nenzerlegung durch die integrierte MPI-Parallelit\u00e4t. Das Framework partitioniert das Mesh automatisch und verwaltet die Kommunikation von Ghost Node.<\/p>\n<h3>Parallele Netzpartitionierung<\/h3>\n<pre><code class=\"language-python\">from dolfinx import mesh, function, plot\nfrom dolfinx_fem import Assembly, Problem\nfrom ufl import FiniteElement, TestFunction, TrialFunction, dot, dx\nfrom mpi4py import MPI\n\n# Create distributed mesh \u2014 DOLFINx handles partitioning automatically\ncomm = MPI.COMM_WORLD\nrank = comm.Get_rank()\n\n# Create a 2D mesh partitioned across MPI ranks\nmesh_data = mesh.create_mesh(comm, [...])  # mesh coordinates, entities, cells\n\n# DOLFINx automatically creates subdomains with overlap\ndomain = mesh.create_mesh(comm, mesh_data)\ndomain.partition()  # Partition for MPI distribution\n<\/code><\/pre>\n<h3>Einrichten des Variationsformulars<\/h3>\n<pre><code class=\"language-python\"># Define function space (Lagrange elements, degree 2)\nelement = FiniteElement(\"Lagrange\", \"triangle\", 2)\nV = FunctionSpace(domain, element)\n\n# Define trial and test functions\nu = TrialFunction(V)\nv = TestFunction(V)\n\n# Weak form of Poisson: grad(u)\u00b7grad(v) = f\u00b7v\nF = dot(grad(u), grad(v)) * dx - 1.0 * v * dx\n\n# Boundary conditions (Dirichlet)\nfrom dolfinx import geometry\nbc = function.Constant(0.0)\nV0 = V.sub(0).collapse()[0]  # Subspace for Dirichlet BCs\ndofs = function.Function(V0).vector\n<\/code><\/pre>\n<h3>L\u00f6sen mit Schwarz-Vorkonditionierer<\/h3>\n<pre><code class=\"language-python\"># The solver is built on PETSc underneath\nproblem = Problem(F, bc)\nsolver = Problem.Solver(problem)\n\n# DOLFINx automatically uses GAMG (geometric AMG) as default\n# This is a two-level method \u2014 coarse space + local solves\nsolver.solve()\n<\/code><\/pre>\n<h3>Zugriff auf die MPI \/ DDM-Interna<\/h3>\n<p>Die <a href=\"https:\/\/fenicsproject.discourse.group\/t\/re-develop-on-fenics-fenicsxs-mpi-ddm-method\/7726\" target=\"_blank\" rel=\"nofollow noopener\"> Fenics Discourse Community <\/a> hat die Schwierigkeiten beim Zugriff auf die MPI-Partitionierungsintern von Dolfinx dokumentiert. Zus\u00e4tzliche Benutzer <a href=\"https:\/\/fenicsproject.discourse.group\/t\/question-difficulty-with-parallel-implementation\/11338\" target=\"_blank\" rel=\"nofollow noopener\"> Berichtsschwierigkeiten mit parallelen Implementierungsmustern <\/a> - Ghost-Knoten, Vektorpartitionierung und MPI-Kommunikation sind nicht immer gut dokumentiert. Im Gegensatz zu PetSC abstrahiert Fenics die DD-Details hinter den Kulissen - dies ist praktisch f\u00fcr Anf\u00e4nger, aber begrenzt, wenn Sie mit benutzerdefinierten Vorkonditionierern experimentieren m\u00fcssen.<\/p>\n<p>Benutzer berichten, dass die MPI\/DDM-Ebene nicht direkt mit Python belastet ist, was bedeutet, dass Sie die Vorkonditionierungstypen nicht so austauschen k\u00f6nnen, wie es PetSC zul\u00e4sst. Aus diesem Grund wird PETSC f\u00fcr Produktionsforschungen bevorzugt, bei denen das Experimentieren mit Vorkonditionierung wichtig ist.<\/p>\n<hr>\n<h2 id=\"performance-comparison\">Leistungsvergleich<\/h2>\n<table>\n<thead>\n<tr>\n<th>Vorkonditionierer<\/th>\n<th>Typ<\/th>\n<th>Iterationen<\/th>\n<th>Parallele Effizienz<\/th>\n<th>Komplexit\u00e4t<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>ilu (0)<\/td>\n<td>One-Level (kein DD)<\/td>\n<td>166<\/td>\n<td>Schlecht - kein paralleler Nutzen<\/td>\n<td>Einfach<\/td>\n<\/tr>\n<tr>\n<td>gamg<\/td>\n<td>zweistufig (AMG)<\/td>\n<td>35<\/td>\n<td>Gut - geometrische Skalierung<\/td>\n<td>M\u00e4\u00dfig<\/td>\n<\/tr>\n<tr>\n<td>ASM (einstufige Schwarz)<\/td>\n<td>einstufig<\/td>\n<td>~ 50\u2013100<\/td>\n<td>verschlechtert sich linear mit Subdomains<\/td>\n<td>Einfach<\/td>\n<\/tr>\n<tr>\n<td>RAS (Ein-Level-Schwarz)<\/td>\n<td>einstufig<\/td>\n<td>~ 30\u201380<\/td>\n<td>Besser als ASM, verschlechtert sich immer noch<\/td>\n<td>M\u00e4\u00dfig<\/td>\n<\/tr>\n<tr>\n<td>BDDC<\/td>\n<td>zweistufig<\/td>\n<td><strong>5\u20139<\/strong><\/td>\n<td>Nahezu optimal \u2013 konstante Skalierung<\/td>\n<td>mittelschwer \u2013 komplex<\/td>\n<\/tr>\n<tr>\n<td>Geneo + Ras<\/td>\n<td>zweistufig (heterogen)<\/td>\n<td><strong>5\u201315 <\/strong><\/td>\n<td>Skalen auf 32.768 R\u00e4nge (Frosch)<\/td>\n<td>Komplex<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>BDDC<\/strong> (5\u20139 Iterationen) \u00fcbertrifft konsequent andere Methoden bei Benchmark-Problemen. Die zweistufige Konstruktion \u00fcbernimmt sowohl die Feinnetzkorrektur als auch den globalen Grobraum und ist damit die praktische Standardeinstellung f\u00fcr Poisson und verwandte Probleme.<\/p>\n<p><strong>Geneo + Ras<\/strong> F\u00fcgt eine automatische Grobraumerkennung f\u00fcr heterogene Medien hinzu. Wenn Ihr Problem kontrastreiche Koeffizienten aufweist (z. B. die Permeabilit\u00e4t, die um 10\u2076 variiert), ist Geneo die einzige zuverl\u00e4ssige Wahl.<\/p>\n<hr>\n<h2 id=\"when-to-choose\">Wann w\u00e4hlen Sie was: Entscheidungsrahmen<\/h2>\n<h3>One-Level vs. Two-Level<\/h3>\n<table>\n<thead>\n<tr>\n<th>Lage<\/th>\n<th>Empfohlener Ansatz<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u2264 32 MPI-R\u00e4nge, homogenes Problem<\/td>\n<td>ASM oder RAS (eine Ebene ist in Ordnung)<\/td>\n<\/tr>\n<tr>\n<td>32\u2013512 R\u00e4nge, homogenes Problem<\/td>\n<td>Zweistufig mit nicolaides grobem Raum<\/td>\n<\/tr>\n<tr>\n<td>512+ R\u00e4nge, homogenes Problem<\/td>\n<td>BDDC oder GAMG (zweistufig)<\/td>\n<\/tr>\n<tr>\n<td>jede Rangzahl, heterogenes Problem<\/td>\n<td>Geneo + RAS (zweistufig mit automatischem Grobraum)<\/td>\n<\/tr>\n<tr>\n<td>Produktion HPC, 1000+ R\u00e4nge<\/td>\n<td>Dreistufig (z. B. Frosch)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Daumenregel<\/strong>: Beginnen Sie mit zwei Ebenen (BDDC oder GAMG). Verwenden Sie nur eine Ebene, wenn Ihre Unterdom\u00e4nenanzahl klein ist und Sie einen schnellen Prototyp ben\u00f6tigen.<\/p>\n<h3>ASM gegen Ras<\/h3>\n<table>\n<thead>\n<tr>\n<th>Kriterium<\/th>\n<th>asm<\/th>\n<th>Ras<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Behandlung \u00fcberlappen<\/td>\n<td>Volle Addition (Doppelzahl \u00fcberlappen)<\/td>\n<td>Teilungsgewichte der Einheit<\/td>\n<\/tr>\n<tr>\n<td>Konvergenzgeschwindigkeit<\/td>\n<td>langsamer<\/td>\n<td>Beschleunigt<\/td>\n<\/tr>\n<tr>\n<td>Komplexit\u00e4t der Implementierung<\/td>\n<td>Einfacher<\/td>\n<td>Etwas komplexer<\/td>\n<\/tr>\n<tr>\n<td>Empfehlung<\/td>\n<td>Nur Prototyp<\/td>\n<td>Produktionsl\u00f6ser<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Verwenden Sie RAS<\/strong> wann immer m\u00f6glich. Die Partition-of-Unity-Korrektur ist eine einzeilige \u00c4nderung in den meisten Implementierungen, und die Konvergenzverbesserung erfolgt sofort.<\/p>\n<h3>PETSC vs. Fenics<\/h3>\n<table>\n<thead>\n<tr>\n<th>Kriterium<\/th>\n<th>PETSC \/ PETSC4PY<\/th>\n<th>Fenics \/ Dolfinx<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Flexibilit\u00e4t der Vorkonditionierer<\/td>\n<td>Voll \u2014 Tauschen \u00fcber <code>-pc_type<\/code><\/td>\n<td>Begrenzt - Standardm\u00e4\u00dfig Gamg<\/td>\n<\/tr>\n<tr>\n<td>Barrierefreiheit von Python<\/td>\n<td>Moderat (erfordert PETSC-Vertrautheit)<\/td>\n<td>hoch (deklarative Variationsform)<\/td>\n<\/tr>\n<tr>\n<td>MPI \/ DDM-Transparenz<\/td>\n<td>Niedrig \u2014 C++-Infrastruktur unter Python<\/td>\n<td>Niedrig \u2013 Abstraktion verbirgt DD-Details<\/td>\n<\/tr>\n<tr>\n<td>Benutzerdefinierte DD-Experimente<\/td>\n<td>Ausgezeichnet<\/td>\n<td>Beschr\u00e4nkt<\/td>\n<\/tr>\n<tr>\n<td>Lernkurve<\/td>\n<td>steiler<\/td>\n<td>Sanft<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>PetSc<\/strong> Wenn Sie mit Vorkonditionierern experimentieren, DD-Partitionen anpassen oder L\u00f6ser ohne Umschreiben von Code austauschen m\u00fcssen. <strong>Fenics verwenden<\/strong> Wenn Sie Rapid Prototyping w\u00fcnschen und keine Anpassung der Vorkonditionierung ben\u00f6tigen.<\/p>\n<hr>\n<h2 id=\"summary\">Zusammenfassung + n\u00e4chste Schritte<\/h2>\n<p>Die Dom\u00e4nenzerlegung transformiert serielle PDE-Solver in parallele, indem die Dom\u00e4ne in \u00fcberlappende Subdom\u00e4nen aufgeteilt und lokal gel\u00f6st wird. Der Verlauf von Schwarz '1870 wechselnder Methode zu modernen zweistufigen Vorkonditionierern (BDDC, Geneo) spiegelt eine einfache Erkenntnis wider: <strong>Grobraumkorrektur ist f\u00fcr die Skalierung von wesentlicher Bedeutung <\/strong>.<\/p>\n<h3>Schnelle Zusammenfassung<\/h3>\n<ol>\n<li><strong>Einstufige Schwarz <\/strong> (ASM \/ RAS) funktioniert bei kleiner Parallelit\u00e4t, verschlechtert sich jedoch linear mit der Anzahl der Subdom\u00e4nen.<\/li>\n<li><strong>Ras schl\u00e4gt ASM<\/strong> durch \u00dcberlappungsgewichtung der Einheit - Bevorzugen Sie immer RAS.<\/li>\n<li><strong>Zwei-Level-Methoden<\/strong> mit groben R\u00e4umen (BDDC, Geneo) sind der moderne Standard.<\/li>\n<li><strong>Geneo<\/strong> erkennt automatisch problematische Niedrigenergiemodi f\u00fcr heterogene Medien.<\/li>\n<li><strong>Python-Implementierungen<\/strong> in PETSC (<code>pc_type bddc<\/code>) und Fenics (Auto-GamG) machen DD zug\u00e4nglich.<\/li>\n<\/ol>\n<h3>N\u00e4chste Schritte<\/h3>\n<ol>\n<li><strong>Starten Sie mit PETSC\/PETSC4PY<\/strong> \u2014 Versuchen Sie <code>pc_type bddc<\/code> bei einem einfachen Poisson-Problem. Das <a href=\"https:\/\/ngspetsc.readthedocs.io\/en\/latest\/PETScKSP\/poisson.py.html\" target=\"_blank\" rel=\"nofollow noopener\">ngspetsc-Tutorial<\/a> bietet eine Arbeitsvorlage.<\/li>\n<li><strong>Lesen Sie die kanonische Referenz<\/strong>: Dolean, Jolivet, Nataf 2015 <em>\"Eine Einf\u00fchrung in die Dom\u00e4nenzerlegungsmethoden\"<\/em> [<a href=\"https:\/\/hal.science\/cel-01100932\/document\" target=\"_blank\" rel=\"nofollow noopener\">1<\/a>] ist die beste konzeptionelle \u00dcbersicht.<\/li>\n<li><strong>Bei heterogenen Problemen<\/strong>, erkunden Sie die groben R\u00e4ume von Geneo in HPDDM oder FreeFEM FFDDM.<\/li>\n<li><strong>Fenics Parallelit\u00e4t lernen<\/strong> Wenn Ihr Workflow Rapid Prototyping auf unregelm\u00e4\u00dfigen Netzen erfordert. Die <a href=\"https:\/\/fenicsproject.org\/docs\/dolfinx\/latest\/\" target=\"_blank\" rel=\"nofollow noopener\"> die FenicsX-Dokumentation <\/a> umfasst verteilte Netzpartitionierung.<\/li>\n<\/ol>\n<h3>Verwandte Anleitungen<\/h3>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/managing-large-scale-pde-problems-strategies-solvers-and-hpc-case-studies\/\" target=\"_blank\" rel=\"nofollow noopener\">Verwalten von PDE-Problemen im gro\u00dfen Ma\u00dfstab: Strategien, Solver und HPC-Fallstudien<\/a> \u2014 Wenn Simulationen f\u00fcr einen einzelnen Knoten zu teuer werden<\/li>\n<li><a href=\"https:\/\/matforge.org\/hpc-python-workflows-from-laptop-to-supercomputer\/\" target=\"_blank\" rel=\"nofollow noopener\">HPC-Python-Workflows: von Laptop zum Supercomputer <\/a> - Einrichten reproduzierbarer MPI-Umgebungen<\/li>\n<li><a href=\"https:\/\/matforge.org\/choosing-right-python-pde-solver-fipy-py-pde-fenics\/\" target=\"_blank\" rel=\"nofollow noopener\">Ausw\u00e4hlen des richtigen Python-PDE-Solver: FIPY vs PY-PDE vs Fenics<\/a> \u2013 wann Fenics und wann Alternativen zu verwenden sind<\/li>\n<li><a href=\"https:\/\/matforge.org\/fenics-fipy-openfoam-choosing-right-pde-solver\/\" target=\"_blank\" rel=\"nofollow noopener\">Fenics vs Fipy vs OpenFoam: Auswahl des richtigen Solver<\/a> \u2014 Methodenvergleich im Ma\u00dfstab<\/li>\n<li><a href=\"https:\/\/matforge.org\/distributed-parallel-computing-patterns-python-mpi-dask-ray\/\" target=\"_blank\" rel=\"nofollow noopener\">Verteiltes Parallel-Computing Muster: Python MPI und DASK <\/a> - MPI-Grundlagen, die die Dom\u00e4nenzerlegung untermauern<\/li>\n<\/ul>\n<hr>\n<h2>Letzte Gedanken<\/h2>\n<p>Die Dom\u00e4nenzerlegung ist die Br\u00fccke zwischen dem Verst\u00e4ndnis der PDE-Theorie und laufenden Produktionssimulationen. Die Mathematik ist elegant - \u00fcberlappen Sie die Subdomains, l\u00f6sen Sie lokal, korrigieren Sie die globalen - aber der praktische Unterschied zwischen ASM und RAS oder ein- und zweistufig unterscheidet einen funktionierenden Prototyp von einem Produktionsl\u00f6ser.<\/p>\n<p>Wenn Sie Vorkonditionierer auswerten oder eine nicht skalierbare Parallelsimulation einrichten, sollten die <a href=\"https:\/\/matforge.org\/category\/issue-tracking-tickets-technical-requests\/\" target=\"_blank\" rel=\"nofollow noopener\"> Matforge-Beratungsteam <\/a> kann Ihnen bei der Auswahl des richtigen Ansatzes f\u00fcr Ihre Problemklasse helfen. Ob Sie mit homogenen Materialien oder kontrastreichen heterogenen Medien arbeiten, die richtige DD-Strategie z\u00e4hlt.<\/p>\n"},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 10<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>TL; DR &#8211; Was Sie wissen m\u00fcssen Domain-Dekomposition teilt ein Simulationsraster in \u00fcberlappende Subdomains auf, damit jeder MPI-Rang sein lokales St\u00fcck unabh\u00e4ngig l\u00f6sen kann. Additiver Schwarz (ASM) ist die einfachste Form &#8211; Sie l\u00f6sen lokal und f\u00fcgen Korrekturen hinzu. Es funktioniert hervorragend f\u00fcr kleine Subdomain-Z\u00e4hlungen, scheitert jedoch im Ma\u00dfstab. Eingeschr\u00e4nkter Zusatz Schwarz (RAS) Behebt die [&hellip;]<\/p>\n","protected":false,"raw":""},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"de_DE","_original_post":"https:\/\/matforge.org\/?p=533","iawp_total_views":0,"footnotes":""},"categories":[2],"tags":[36,42,37,35,41,38,39,40],"class_list":["post-893","post","type-post","status-publish","format-standard","hentry","category-fipy-documentation-examples-development","tag-a-stability","tag-bayesian-inference","tag-explicit-euler","tag-l-stability","tag-model-calibration","tag-prothero-robinson-problem","tag-rock-method","tag-sdirk","de-DE"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Dom\u00e4nenzerlegung f\u00fcr parallele PDE-Solver: Additive Schwarz, \u00dcberlappungsmethoden und Python-Implementierung - matforge.org<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/matforge.org\/de\/domain-decomposition-parallel-pde-solvers\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dom\u00e4nenzerlegung f\u00fcr parallele PDE-Solver: Additive Schwarz, \u00dcberlappungsmethoden und Python-Implementierung - matforge.org\" \/>\n<meta property=\"og:description\" content=\"Reading Time:  10 minutesTL; DR &#8211; Was Sie wissen m\u00fcssen Domain-Dekomposition teilt ein Simulationsraster in \u00fcberlappende Subdomains auf, damit jeder MPI-Rang sein lokales St\u00fcck unabh\u00e4ngig l\u00f6sen kann. Additiver Schwarz (ASM) ist die einfachste Form &#8211; Sie l\u00f6sen lokal und f\u00fcgen Korrekturen hinzu. Es funktioniert hervorragend f\u00fcr kleine Subdomain-Z\u00e4hlungen, scheitert jedoch im Ma\u00dfstab. Eingeschr\u00e4nkter Zusatz Schwarz (RAS) Behebt die [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/de\/domain-decomposition-parallel-pde-solvers\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-30T12:23:20+00:00\" \/>\n<meta name=\"author\" content=\"Tomas Delgado\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tomas Delgado\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"14\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/domain-decomposition-parallel-pde-solvers\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/domain-decomposition-parallel-pde-solvers\\\/\"},\"author\":{\"name\":\"Tomas Delgado\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"headline\":\"Dom\u00e4nenzerlegung f\u00fcr parallele PDE-Solver: Additive Schwarz, \u00dcberlappungsmethoden und Python-Implementierung\",\"datePublished\":\"2026-07-30T12:23:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/domain-decomposition-parallel-pde-solvers\\\/\"},\"wordCount\":2420,\"commentCount\":0,\"keywords\":[\"A-Stabilit\u00e4t\",\"Bayes'sche Inferenz\",\"explicit Euler\",\"L-stability\",\"model calibration\",\"PROthero-Robinson problem\",\"ROCK method\",\"SDIRK\"],\"articleSection\":[\"FIPY: Dokumentation, Beispiele &amp; Entwicklung\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/de\\\/domain-decomposition-parallel-pde-solvers\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/domain-decomposition-parallel-pde-solvers\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/de\\\/domain-decomposition-parallel-pde-solvers\\\/\",\"name\":\"Dom\u00e4nenzerlegung f\u00fcr parallele PDE-Solver: Additive Schwarz, \u00dcberlappungsmethoden und Python-Implementierung - matforge.org\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-07-30T12:23:20+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/domain-decomposition-parallel-pde-solvers\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/de\\\/domain-decomposition-parallel-pde-solvers\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/domain-decomposition-parallel-pde-solvers\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dom\u00e4nenzerlegung f\u00fcr parallele PDE-Solver: Additive Schwarz, \u00dcberlappungsmethoden und Python-Implementierung\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\",\"url\":\"https:\\\/\\\/matforge.org\\\/\",\"name\":\"matforge.org\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/matforge.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\",\"name\":\"Tomas Delgado\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g\",\"caption\":\"Tomas Delgado\"},\"sameAs\":[\"http:\\\/\\\/matforge.org\"],\"url\":\"https:\\\/\\\/matforge.org\\\/author\\\/tomas-delgado\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dom\u00e4nenzerlegung f\u00fcr parallele PDE-Solver: Additive Schwarz, \u00dcberlappungsmethoden und Python-Implementierung - matforge.org","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/matforge.org\/de\/domain-decomposition-parallel-pde-solvers\/","og_locale":"de_DE","og_type":"article","og_title":"Dom\u00e4nenzerlegung f\u00fcr parallele PDE-Solver: Additive Schwarz, \u00dcberlappungsmethoden und Python-Implementierung - matforge.org","og_description":"Reading Time:  10 minutesTL; DR &#8211; Was Sie wissen m\u00fcssen Domain-Dekomposition teilt ein Simulationsraster in \u00fcberlappende Subdomains auf, damit jeder MPI-Rang sein lokales St\u00fcck unabh\u00e4ngig l\u00f6sen kann. Additiver Schwarz (ASM) ist die einfachste Form &#8211; Sie l\u00f6sen lokal und f\u00fcgen Korrekturen hinzu. Es funktioniert hervorragend f\u00fcr kleine Subdomain-Z\u00e4hlungen, scheitert jedoch im Ma\u00dfstab. Eingeschr\u00e4nkter Zusatz Schwarz (RAS) Behebt die [&hellip;]","og_url":"https:\/\/matforge.org\/de\/domain-decomposition-parallel-pde-solvers\/","og_site_name":"matforge.org","article_published_time":"2026-07-30T12:23:20+00:00","author":"Tomas Delgado","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Tomas Delgado","Gesch\u00e4tzte Lesezeit":"14\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/de\/domain-decomposition-parallel-pde-solvers\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/de\/domain-decomposition-parallel-pde-solvers\/"},"author":{"name":"Tomas Delgado","@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"headline":"Dom\u00e4nenzerlegung f\u00fcr parallele PDE-Solver: Additive Schwarz, \u00dcberlappungsmethoden und Python-Implementierung","datePublished":"2026-07-30T12:23:20+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/de\/domain-decomposition-parallel-pde-solvers\/"},"wordCount":2420,"commentCount":0,"keywords":["A-Stabilit\u00e4t","Bayes'sche Inferenz","explicit Euler","L-stability","model calibration","PROthero-Robinson problem","ROCK method","SDIRK"],"articleSection":["FIPY: Dokumentation, Beispiele &amp; Entwicklung"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/de\/domain-decomposition-parallel-pde-solvers\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/de\/domain-decomposition-parallel-pde-solvers\/","url":"https:\/\/matforge.org\/de\/domain-decomposition-parallel-pde-solvers\/","name":"Dom\u00e4nenzerlegung f\u00fcr parallele PDE-Solver: Additive Schwarz, \u00dcberlappungsmethoden und Python-Implementierung - matforge.org","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-07-30T12:23:20+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"breadcrumb":{"@id":"https:\/\/matforge.org\/de\/domain-decomposition-parallel-pde-solvers\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/de\/domain-decomposition-parallel-pde-solvers\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/de\/domain-decomposition-parallel-pde-solvers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/de\/"},{"@type":"ListItem","position":2,"name":"Dom\u00e4nenzerlegung f\u00fcr parallele PDE-Solver: Additive Schwarz, \u00dcberlappungsmethoden und Python-Implementierung"}]},{"@type":"WebSite","@id":"https:\/\/matforge.org\/#website","url":"https:\/\/matforge.org\/","name":"matforge.org","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/matforge.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061","name":"Tomas Delgado","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g","caption":"Tomas Delgado"},"sameAs":["http:\/\/matforge.org"],"url":"https:\/\/matforge.org\/author\/tomas-delgado\/"}]}},"_links":{"self":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/893","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/comments?post=893"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/893\/revisions"}],"predecessor-version":[{"id":1015,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/893\/revisions\/1015"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=893"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=893"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}