{"id":887,"date":"2026-07-30T12:23:22","date_gmt":"2026-07-30T12:23:22","guid":{"rendered":"https:\/\/matforge.org\/?p=887","raw":"https:\/\/matforge.org\/?p=887"},"modified":"2026-07-30T12:23:22","modified_gmt":"2026-07-30T12:23:22","slug":"multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches","status":"publish","type":"post","link":"https:\/\/matforge.org\/de\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/","title":{"rendered":"Multi-Physics-Code-Kopplung ohne Pr\u00e4zise: Alternativen und benutzerdefinierte Ans\u00e4tze","raw":"Multi-Physics-Code-Kopplung ohne Pr\u00e4zise: Alternativen und benutzerdefinierte Ans\u00e4tze"},"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\"> 7<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><p>Wenn Sie mit Multiphysik-Simulationen arbeiten, m\u00fcssen Sie h\u00e4ufig zwei oder mehr spezialisierte Solver koppeln, damit sie w\u00e4hrend der Berechnung Daten austauschen. Precice ist eine ausgereifte Open-Source-Kopplungsbibliothek f\u00fcr partitionierte Multi-Physik-Simulationen, insbesondere wenn unabh\u00e4ngige Solver wie FIPY, OpenFOAM oder Calculix angeschlossen werden.<\/p>\n<p>Aber Precice ist nicht immer eine Option. Sie k\u00f6nnen in einer Umgebung arbeiten, in der die Installation einer C++-basierten Bibliothek mit Python-Bindungen nicht praktikabel ist. Sie k\u00f6nnen einen kommerziellen Solver verwenden, der Precice nicht unterst\u00fctzt. Oder Ihr Multi-Physik-Problem kann einfach genug sein, dass sich ein Full-Kopplung-Framework wie ein Overkill anf\u00fchlt.<\/p>\n<p>Dieser Artikel behandelt praktische Alternativen, einschlie\u00dflich sequentieller Aktualisierung innerhalb von FIPY, Operator-Splitting, Polynom-Extrapolationsmethoden und Universal-Kopplungsbibliotheken.<\/p>\n<h2>Schl\u00fcssel zum Mitnehmen<\/h2>\n<ul>\n<li>Precice ist leistungsstark, aber nicht die einzige Option f\u00fcr die Multi-Physik-Kopplung. Die richtige Alternative h\u00e4ngt von der Verf\u00fcgbarkeit von Solver, den Spracheinstellungen, der HPC-Bereitschaft und der Komplexit\u00e4t des Problems ab.<\/li>\n<li>Die sequentielle Kopplung innerhalb von FIPY funktioniert gut, wenn beide Gleichungen im selben Python-Prozess leben. Es ist einfach, debuggbar und erfordert keine externe Kopplungsbibliothek.<\/li>\n<li>Operator-Splitting entkoppelt die Physik, indem jede Gleichung separat gel\u00f6st wird. Es ist n\u00fctzlich, wenn verschiedene physikalische Prozesse auf unterschiedlichen Zeitskalen ablaufen.<\/li>\n<li>Allgemeine Kopplungsbibliotheken wie MUI und Moose MultiApps bieten alternative Architekturen mit unterschiedlichen Kompromissen in Bezug auf Komplexit\u00e4t, Sprachunterst\u00fctzung und Skalierbarkeit.<\/li>\n<li>Die polynomiale Orchestrierung durch Tools wie Rhapsopy ist ein aufkommender Ansatz h\u00f6herer Ordnung, der Zeitschritte unter Verwendung von Kopplungsvariablen Fehlersch\u00e4tzungen anpasst.<\/li>\n<\/ul>\n<h2>Partitionierte vs. monolithische vs. sequentielle Kopplung<\/h2>\n<p>Vor dem Vergleich von Alternativen hilft es, die wichtigsten Kopplungsstrategien zu kl\u00e4ren. Die Multiphysik-Kopplung f\u00e4llt normalerweise in drei Kategorien.<\/p>\n<h3>Teilung Kopplung<\/h3>\n<p>Bei der partitionierten Kopplung kommunizieren separate L\u00f6ser \u00fcber eine externe Schnittstelle oder Middleware-Schicht. Die L\u00f6ser bleiben unabh\u00e4ngige Blackboxen, und jeder Solver muss die interne Struktur des anderen nicht kennen.<\/p>\n<p>Precice ist das kanonische Beispiel. Zu den Vorteilen geh\u00f6ren die Wiederverwendung von Code, Flexibilit\u00e4t und die M\u00f6glichkeit, kommerzielle oder \u00e4ltere Codes zu koppeln. Der Kompromiss ist der Kommunikationsaufwand und die Notwendigkeit von Mesh-Mapping, Daten\u00fcbertragung und Kopplungskoordination.<\/p>\n<h3>Monolithische Kopplung<\/h3>\n<p>Bei der monolithischen Kopplung werden alle Physiken in einem einzigen Solver gel\u00f6st und teilen sich h\u00e4ufig die gleiche Systemmatrix. Dies kann bei eng gekoppelten Problemen effizienter sein, da Nichtlinearit\u00e4ten implizit behandelt werden.<\/p>\n<p>Der Kompromiss ist ein hoher Entwicklungsaufwand. Alle Physik muss in einem Framework implementiert werden. Moose ist ein bemerkenswertes Framework, das Workflows im monolithischen Stil unterst\u00fctzt und auch partitionierte Muster durch MultiApps bietet.<\/p>\n<h3>Sequentielle Kopplung<\/h3>\n<p>Die sequentielle Kopplung funktioniert, wenn alle Physik in einem Solver-Framework ausgedr\u00fcckt werden kann. In FIPY k\u00f6nnen Sie beispielsweise gekoppelte Gleichungen nacheinander im selben Python-Prozess l\u00f6sen.<\/p>\n<p>Dies vermeidet externe Middleware vollst\u00e4ndig. Der Kompromiss besteht darin, dass Sie die F\u00e4higkeit verlieren, unabh\u00e4ngige L\u00f6ser zu koppeln, die in verschiedenen Sprachen geschrieben oder von verschiedenen Organisationen gepflegt werden.<\/p>\n<h2>Sequentielle Kopplung mit FIPY Sweeping<\/h2>\n<p>Die einfachste Alternative zu Precice besteht darin, gekoppelte Gleichungen im selben Python-Prozess sequentiell zu l\u00f6sen. FIPY unterst\u00fctzt dieses Muster durch die Methoden <code>sweep()<\/code> und <code>updateOld()<\/code>.<\/p>\n<h3>Das Muster<\/h3>\n<p>Die Standardimplementierung folgt einer verschachtelten Schleife:<\/p>\n<ol>\n<li>Deklarieren Sie Variablen mit <code>hasOld=True<\/code>, damit sie fr\u00fchere Werte f\u00fcr transiente Begriffe speichern k\u00f6nnen.<\/li>\n<li>Rufen Sie <code>updateOld()<\/code> einmal pro physikalischer Zeitschritt auf, um den aktuellen Zustand als den alten Wert zu sperren.<\/li>\n<li><code>eq.sweep()<\/code> wiederholt in einer inneren Schleife aufrufen, bis die Residuen konvergieren.<\/li>\n<\/ol>\n<pre><code class=\"language-python\">from fipy import CellVariable, Grid1D\nfrom fipy import TransientTerm, DiffusionTerm, ImplicitSourceTerm\n\n# 1. Setup mesh and variables\nmesh = Grid1D(nx=50, Lx=1.0)\n\nv0 = CellVariable(\n    name=\"Variable 0\",\n    mesh=mesh,\n    value=0.5,\n    hasOld=True\n)\n\nv1 = CellVariable(\n    name=\"Variable 1\",\n    mesh=mesh,\n    value=0.5,\n    hasOld=True\n)\n\n# 2. Define coupled equations\neq0 = (\n    TransientTerm(var=v0)\n    == DiffusionTerm(coeff=0.01, var=v0)\n    - ImplicitSourceTerm(coeff=1.0, var=v1)\n)\n\neq1 = (\n    TransientTerm(var=v1)\n    == DiffusionTerm(coeff=0.01, var=v1)\n    - ImplicitSourceTerm(coeff=1.0, var=v0)\n)\n\n# 3. Simulation parameters\ndt = 1e-3\nsteps = 100\ntolerance = 1e-4\n\n# 4. Time-stepping and sweeping loop\nfor step in range(steps):\n    v0.updateOld()\n    v1.updateOld()\n    \n    residual0 = residual1 = 1.0\n    \n    while (residual0 &gt; tolerance) or (residual1 &gt; tolerance):\n        residual0 = eq0.sweep(var=v0, dt=dt)\n        residual1 = eq1.sweep(var=v1, dt=dt)\n<\/code><\/pre>\n<h3>Wenn das am besten funktioniert<\/h3>\n<ul>\n<li>Beide Physiken k\u00f6nnen als PDEs in FIPY ausgedr\u00fcckt werden.<\/li>\n<li>Sie ben\u00f6tigen Rapid Prototyping oder Debuggen ohne externe Abh\u00e4ngigkeiten.<\/li>\n<li>Das gekoppelte System weist eine moderate Nichtlinearit\u00e4t auf, die mit iterativem Sweeping konvergiert.<\/li>\n<li>Sie l\u00f6sen Phasenfeldmodelle, Diffusionsreaktionssysteme oder gekoppelte Transportprobleme.<\/li>\n<\/ul>\n<h3>Wenn es fehlschl\u00e4gt<\/h3>\n<ul>\n<li>Sie m\u00fcssen in C ++, Fortran oder anderen Sprachen geschriebene Solver koppeln.<\/li>\n<li>Die Physik ist so eng gekoppelt, dass sequentielle Sweeps zu viele Iterationen erfordern.<\/li>\n<li>Ihre L\u00f6ser sind separate ausf\u00fchrbare Dateien aus verschiedenen Organisationen.<\/li>\n<li>Sie ben\u00f6tigen eine parallele Skalierung des verteilten Speichers \u00fcber mehrere Rechenknoten.<\/li>\n<\/ul>\n<h2>Operator-Splitting-Ans\u00e4tze<\/h2>\n<p>Das Splitting des Operators, auch fraktionales Steppen genannt, zerlegt ein gekoppeltes System in sequentielle Teilschritte. Jeder Teilschritt l\u00f6st ein Physikmodell. Dies ist n\u00fctzlich, wenn physikalische Prozesse auf unterschiedlichen Zeitskalen ablaufen.<\/p>\n<h3>Additiv vs Multiplikative Splitting<\/h3>\n<p>Additive Splitting zerlegt eine Gleichung in separate Operatoren und l\u00f6st jeden Beitrag unabh\u00e4ngig. Multiplikative Splitting wendet Operatoren sequentiell mit einer definierten Reihenfolge an, was wichtig ist, wenn Operatoren nicht pendeln.<\/p>\n<p>Bei Multiphysik-Workflows ist eine additive Spaltung oft einfacher anzuwenden. Jedes Physikmodell kann seinen eigenen optimierten Solver verwenden, und die Kopplungslogik bleibt modular.<\/p>\n<h3>Python-Operator-Splitting-Bibliotheken<\/h3>\n<p>Mehrere Python-orientierte Tools und Beispiele unterst\u00fctzen Workflows f\u00fcr das Aufteilen von Operatoren:<\/p>\n<ul>\n<li><a href=\"https:\/\/arxiv.org\/abs\/2407.05475\"> Pythos <\/a> ist eine Python-Bibliothek zum systematischen Aufteilen von Differentialgleichungen. Es unterst\u00fctzt Muster wie Strang-Splitting, implizit-explizite Methoden und adaptive Zeitschritte.<\/li>\n<li><a href=\"https:\/\/www.researchgate.net\/publication\/382691924\"> Venedig<\/a> ist ein Multi-Scale-Operator-Splitting-Algorithmus, der Strang-Splitting mit adaptiven Zeitschritten verwendet. Es ist relevant, wenn gekoppelte Physik \u00fcber verschiedene Zeitskalen hinweg funktioniert.<\/li>\n<li><a href=\"https:\/\/github.com\/odeSolver\/Operator-Splitting-Methods\"> Operator-Splitting-Methoden<\/a> Bietet eigenst\u00e4ndige Python-Skripte f\u00fcr die p\u00e4dagogische Verwendung. Diese Skripte sind zum Lernen n\u00fctzlich, sind jedoch nicht produktionsbereit.<\/li>\n<\/ul>\n<h3>Fipy mit Operator-Splitting<\/h3>\n<p>Sie k\u00f6nnen FIPY auch manuell mit Operator-Splitting kombinieren. Ein Diffusionsreaktionssystem kann in einen Diffusionsschritt und einen Reaktionsschritt aufgeteilt werden:<\/p>\n<pre><code class=\"language-python\"># Separate the reaction step from diffusion\ndt_diffusion = 0.001\ndt_reaction = 0.1\n\n# Solve diffusion with a small time step\neq_diff = TransientTerm(var=T) == DiffusionTerm(coeff=k, var=T)\neq_diff.sweep(dt=dt_diffusion)\n\n# Solve reaction with a larger time step\neq_react = TransientTerm(var=T) == ReactionTerm(source, var=T)\neq_react.sweep(dt=dt_reaction)\n<\/code><\/pre>\n<p>Das Grundschema ist genau erster Ordnung. Verwenden Sie f\u00fcr die Genauigkeit zweiter Ordnung Strangsplitting: Halbschrittdiffusion, Vollschrittreaktion und dann Halbschrittdiffusion.<\/p>\n<h2>Allgemeine Kopplungsbibliotheken<\/h2>\n<p>Wenn Sie eine partitionierte Kopplung ben\u00f6tigen, aber nicht Precice verwenden k\u00f6nnen, gibt es mehrere Alternativen.<\/p>\n<h3>MUI: universelle Multiscale-Schnittstelle<\/h3>\n<p><a href=\"https:\/\/mxui.github.io\/\">MUI<\/a> ist eine reine Header-C++-Bibliothek zum Koppeln heterogener Solver. Es behandelt ausgetauschte Daten als Punktwolken und behandelt die r\u00e4umliche und zeitliche Interpolation automatisch.<\/p>\n<p>Zu den wichtigsten Funktionen geh\u00f6ren:<\/p>\n<ul>\n<li>Punktbasierte Darstellung. MUI kann Daten \u00fcbertragen, ohne dass ein Solver die Mesh-Konnektivit\u00e4t eines anderen Solvers kennen muss.<\/li>\n<li>Raum- und Zeitinterpolation. Eingebaute Interpolationstools helfen Solvern, die auf verschiedenen Skalen arbeiten, zu kommunizieren.<\/li>\n<li>Intelligenter senden. Dieser Algorithmus beschr\u00e4nkt die Kommunikation auf \u00fcberlappende Dom\u00e4nen und reduziert unn\u00f6tige All-to-All-Kommunikation.<\/li>\n<li>Sprachunterst\u00fctzung. MUI ist in C++ geschrieben und bietet Wrapper f\u00fcr Python, Fortran und C.<\/li>\n<\/ul>\n<p>MUI ist n\u00fctzlich, wenn Sie Solver mit grundlegend unterschiedlichen Diskretisierungen wie FEM, FVM, DEM oder SPH koppeln m\u00fcssen.<\/p>\n<p>W\u00e4hlen Sie MUI \u00fcber Precice, wenn Sie eine leichte eingebettete Schnittstelle ben\u00f6tigen oder wenn die Netzverbindungsunterschiede die Standardkopplungsinfrastruktur zu schwer machen.<\/p>\n<p>Halten Sie sich an die precice, wenn Sie eine ausgereifte parallele Skalierung, eine Quasi-Newton-Beschleunigung f\u00fcr stark gekoppelte Probleme und ein gr\u00f6\u00dferes Adapter-\u00d6kosystem ben\u00f6tigen.<\/p>\n<h3>Moose MultiApps und Transfersysteme<\/h3>\n<p>Moose kann vollst\u00e4ndig gekoppelte Systeme l\u00f6sen, aber seine <code>MultiApps<\/code>  &#8211; und <code>Transfer<\/code>  -Systeme unterst\u00fctzen auch partitionierte Ans\u00e4tze. Moose erstellt Unteranwendungen, die Felddaten hin und her \u00fcbergeben.<\/p>\n<p>Moose unterst\u00fctzt mehrere Kopplungsstile:<\/p>\n<ul>\n<li>Vollst\u00e4ndig gekoppelte Workflows, bei denen alle Physik in einer nichtlinearen Iteration gel\u00f6st wird.<\/li>\n<li>Eng gekoppelte Picard- oder Newton-Workflows, in denen Physik-Unteranwendungen innerhalb jedes Zeitschritts iterieren.<\/li>\n<li>Versetzte Workflows, bei denen jede Physik unabh\u00e4ngig voranschreitet und Daten an definierten Grenzen austauscht.<\/li>\n<\/ul>\n<p>Elch ist in erster Linie C ++ &#8211; fokussiert. Python-Tools gibt es, aber das \u00d6kosystem ist weniger Python-nativ als Workflows, die um FIPY oder Precice herum aufgebaut sind.<\/p>\n<h2>Kopplung auf Polynombasis mit Rhapsopy<\/h2>\n<p><a href=\"https:\/\/github.com\/hpc-maths\/Rhapsopy\"> rhapsopy <\/a> verwendet polynomische Approximationen der Kopplungsvariablen im Laufe der Zeit. Anstatt bei jedem Kopplungsschritt nur einen einzigen Wert auszutauschen, integriert sich jedes Subsystem unter Verwendung einer polynomialen Approximation seiner Eingabe aus dem anderen Subsystem.<\/p>\n<h3>Wie es funktioniert<\/h3>\n<p>W\u00e4hrend eines Kopplungsschritts wird jedes Subsystem mit einem eigenen Solver integriert, w\u00e4hrend polynomisch angen\u00e4herte Eingangsgr\u00f6\u00dfen verwendet werden. Am Ende des Schritts werden neue Kopplungsvariablen berechnet und die Polynome aktualisiert.<\/p>\n<p>Dieser Ansatz kann helfen bei:<\/p>\n<ol>\n<li>Genauigkeit. Polynom-Approximationen h\u00f6herer Ordnung erfassen zeitliche \u00c4nderungen besser als konstante oder lineare Extrapolation.<\/li>\n<li>Adaptive Zeitschritt. Fehlersch\u00e4tzungen aus Polynom-Approximationen k\u00f6nnen die Zeitschrittgr\u00f6\u00dfe der Kopplung leiten.<\/li>\n<li>explizite und implizite Kopplung. Implizite Versionen k\u00f6nnen die Stabilit\u00e4t verbessern, erfordern jedoch die L\u00f6sung eines Fixpunktproblems bei jedem Schritt.<\/li>\n<\/ol>\n<h3>Aktueller Status<\/h3>\n<p>Rhapsopy wird derzeit am besten als Demonstrationswerkzeug f\u00fcr kleine Probleme angesehen. Es ist vielversprechend f\u00fcr Python-Benutzer, die eine adaptive Kopplung h\u00f6herer Ordnung w\u00fcnschen, aber es ist noch keine ausgereifte HPC-L\u00f6sung im gro\u00dfen Ma\u00dfstab.<\/p>\n<h2>comsol native Kopplung<\/h2>\n<p>Comsol Multiphysics verwendet ein anderes Modell. Anstatt externe Solver zu koppeln, definiert COMSOL Multiphysik-Kopplungen nativ innerhalb derselben Softwareumgebung.<\/p>\n<p>Comsol-Benutzer k\u00f6nnen:<\/p>\n<ul>\n<li>Definieren Sie Schnittstellenbedingungen wie W\u00e4rmeflusskontinuit\u00e4t oder Spannungsgleichgewicht.<\/li>\n<li>Verwenden Sie vollst\u00e4ndig gekoppelte L\u00f6sungsstrategien f\u00fcr nichtlineare Probleme.<\/li>\n<li>Wechseln Sie je nach Problemkomplexit\u00e4t zwischen getrennten und vollst\u00e4ndig gekoppelten Strategien.<\/li>\n<\/ul>\n<p>Dies ist unkompliziert f\u00fcr Benutzer, die bereits in COMSOL sind. Der Kompromiss ist der Verk\u00e4ufer-Lock-in. Das Koppeln von externen Solvern erfordert in der Regel comsol-spezifische Schnittstellen, Livelink-Workflows oder Scripting-Bridges.<\/p>\n<h2>Vergleichszusammenfassung<\/h2>\n<table class=\"custom-table\">\n<tbody>\n<tr>\n<th>Sich n\u00e4hern<\/th>\n<th>am besten f\u00fcr<\/th>\n<th>Vorteile<\/th>\n<th>Nachteile<\/th>\n<th>Externe Abh\u00e4ngigkeit<\/th>\n<\/tr>\n<tr>\n<td>Fipy sequentieller Sweeping<\/td>\n<td>Gleichprozess gekoppelte PDs<\/td>\n<td>Einfach, debuggbar, keine externe Kopplungsbibliothek<\/td>\n<td>Begrenzt auf FIPY- und sequentielle Iterationen<\/td>\n<td>Keiner<\/td>\n<\/tr>\n<tr>\n<td>Operator-Splitting<\/td>\n<td>Verschiedene Zeitskalen<\/td>\n<td>modular und wiederverwendet optimierte L\u00f6ser<\/td>\n<td>Teilungsfehler und Stabilit\u00e4tsbeschr\u00e4nkungen<\/td>\n<td>Optionale Bibliothek wie Pythos<\/td>\n<\/tr>\n<tr>\n<td>mui<\/td>\n<td>Verschiedene Netztypen und Diskretisierungen<\/td>\n<td>Nur-Header-Design und gro\u00dfer Simulationsbereich<\/td>\n<td>In einigen F\u00e4llen weniger ausgereifte parallele Skalierung als Pr\u00e4zipiente<\/td>\n<td>MUI-Bibliothek<\/td>\n<\/tr>\n<tr>\n<td>Elch-Multi-Apps<\/td>\n<td>C++- und Moose-\u00d6kosystem-Workflows<\/td>\n<td>Monolithische und partitionierte Optionen<\/td>\n<td>in erster Linie C++ und weniger Python-nativ<\/td>\n<td>Elchrahmen<\/td>\n<\/tr>\n<tr>\n<td>Rhapsopy<\/td>\n<td>Adaptive Kopplung h\u00f6herer Ordnung<\/td>\n<td>Dynamische Zeitschritte und Fehlersch\u00e4tzungen<\/td>\n<td>Nur im Fr\u00fchstadium und nur im Kleinstadium<\/td>\n<td>Rhapsopy<\/td>\n<\/tr>\n<tr>\n<td>comsol native Kopplung<\/td>\n<td>Integrierte kommerzielle Workflows<\/td>\n<td>Vollst\u00e4ndig gekoppelte und intuitive Benutzeroberfl\u00e4che<\/td>\n<td>Verk\u00e4ufersperre<\/td>\n<td>COMSOL-Lizenz<\/td>\n<\/tr>\n<tr>\n<td>Pr\u00e4zise<\/td>\n<td>Reife partitionierte Kopplung<\/td>\n<td>Bew\u00e4hrt, dokumentiert und von einer Community unterst\u00fctzt<\/td>\n<td>Erfordert C++\/Python-Bindungen und Adapter-Setup<\/td>\n<td>Precice Library<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Praktischer Entscheidungsf\u00fchrer<\/h2>\n<p>Verwenden Sie dieses Entscheidungshandbuch, wenn Sie Precice nicht verwenden k\u00f6nnen oder m\u00f6chten.<\/p>\n<ol>\n<li>Sind alle Physik innerhalb von FIPY ausdr\u00fcckbar? Verwenden Sie sequentielles Sweeping. Es ist der einfachste Weg und erfordert keine externen Abh\u00e4ngigkeiten.<\/li>\n<li>Funktioniert Ihre Physik auf sehr unterschiedlichen Zeitskalen? Try operator splitting. Durch die Entkopplung kann jede Physik ihren eigenen Zeitschritt verwenden.<\/li>\n<li>Koppeln Sie Solver mit grundlegend unterschiedlichen Diskretisierungen? Betrachten Sie MUI. Seine punktbasierte Darstellung kann Maschen-zu-Maschen- und Netz-zu-Teilchen-Kopplung verarbeiten.<\/li>\n<li>Arbeiten Sie in C ++ oder im Elch-\u00d6kosystem? Moose MultiApps bieten monolithische, eng gekoppelte und versetzte Optionen in einem Framework.<\/li>\n<li>Ben\u00f6tigen Sie eine adaptive Zeitschritte auf der Grundlage von Kopplungsfehlern? Versuchen Sie Rhapsopy f\u00fcr kleine Experimente oder \u00fcberwachen Sie die Entwicklung f\u00fcr gr\u00f6\u00dfere Workflows.<\/li>\n<li>Verwenden Sie einen kommerziellen Solver? \u00dcberpr\u00fcfen Sie, ob es native Multiphysik-Funktionen hat oder externe Kopplungsbibliotheken unterst\u00fctzt.<\/li>\n<\/ol>\n<h2>Was wir empfehlen<\/h2>\n<p>F\u00fcr FIPY-Benutzer, die in Python arbeiten, h\u00e4ngt die Empfehlung von der Komplexit\u00e4t der Problemstellung ab.<\/p>\n<ul>\n<li>Einfache Kopplung, wie Diffusionsreaktion, Phasenfeld oder Transport: Sequential Sweeping mit <code>sweep()<\/code>. Es ist unkompliziert und erfordert keine externen Abh\u00e4ngigkeiten.<\/li>\n<li>Moderate Komplexit\u00e4t, wie z. B. lose gekoppelte externe Solver oder unterschiedliche Zeitskalen: Verwenden Sie Operator-Splitting mit einer strukturierten Bibliothek wie Pythos.<\/li>\n<li>Hohe Komplexit\u00e4t, wie z. B. eng gekoppelte L\u00f6ser in verschiedenen Sprachen: Verwenden Sie nach M\u00f6glichkeit Precice. Die Alternativen bieten noch nicht die gleiche Reife, parallele Skalierbarkeit oder Konvergenzbeschleunigung.<\/li>\n<\/ul>\n<p>Wenn Precice nicht verf\u00fcgbar ist, h\u00e4ngt die n\u00e4chstbeste Option von Ihrer Umgebung ab. F\u00fcr die akademische Forschung ohne HPC-Zugang kann das Nur-Header-Design von MUI einfacher zu integrieren sein. F\u00fcr Produktionssimulationen, die eine parallele Skalierung erfordern, bleibt Precice die st\u00e4rkste Option, wenn Sie es verwenden k\u00f6nnen.<\/p>\n<h2>Was zu vermeiden<\/h2>\n<ul>\n<li>Manueller Datenaustausch in Schleifen ohne Iterations- oder Konvergenzkriterien. Dies kann ungenau oder ungenaue Ergebnisse hervorbringen.<\/li>\n<li>Extrapolieren von Kopplungsvariablen ohne Fehlerkontrolle. Die Verwendung des Kopplungswerts des vorherigen Zeitschritts als Stromwert ist nur erster Ordnung genau und kann bei stark gekoppelten Problemen instabil sein.<\/li>\n<li>Vernachl\u00e4ssigung der Unterentspannung. F\u00fcr die nichtlineare Kopplung sollten Parameter unterrelaxiert werden, um die Divergenz der Solver zu verringern.<\/li>\n<li>Unter der Annahme von sequentiellen Kehrskalen. Die sequentielle Kopplung innerhalb eines Python-Prozesses wird nicht \u00fcber Rechenknoten mit verteiltem Speicher skaliert.<\/li>\n<\/ul>\n<h2>Verwandte Anleitungen<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/code-coupling-precice-multi-physics-python\/\">Code-Kopplung mit dem Pr\u00e4cice: Multi-Physics-Simulationen in Python<\/a> \u2014 Installation, Adapterimplementierung und Konfiguration wann PRECICE ist verf\u00fcgbar.<\/li>\n<li><a href=\"https:\/\/matforge.org\/extending-fipy-with-custom-modules\/\"> Erweitern von FIPY mit benutzerdefinierten Modulen <\/a> &#8211; Organisieren wiederverwendbarer PDE-Codes, Quellbegriffe und gekoppelter Modelle in FIPY.<\/li>\n<li><a href=\"https:\/\/matforge.org\/what-is-fipy-and-when-should-you-use-it\/\">Was ist FIPY und wann sollten Sie es verwenden? <\/a> &#8211; FIPY-Grundlagen und Anwendungsf\u00e4lle.<\/li>\n<li><a href=\"https:\/\/matforge.org\/understanding-phase-field-models-in-materials-science\/\"> Phasenfeldmodelle in der Materialwissenschaft verstehen <\/a> &#8211; Multi-Physics-Phasenfeldanwendungen.<\/li>\n<li><a href=\"https:\/\/matforge.org\/managing-large-scale-pde-problems-strategies-solvers-and-hpc-case-studies\/\">Verwalten von PDE-Problemen im gro\u00dfen Ma\u00dfstab: Strategien, Solver und HPC-Fallstudien <\/a> &#8211; Strategien zur Skalierung komplexer Simulationsworkflows.<\/li>\n<\/ul>\n<h2>Ben\u00f6tigen Sie Hilfe bei der Gestaltung Ihres Multiphysik-Workflows?<\/h2>\n<p>Die Wahl des richtigen Kopplungsansatzes h\u00e4ngt von Ihren L\u00f6sern, Einschr\u00e4nkungen und Problemkomplexit\u00e4t ab. Matforge bietet Beratungsleistungen f\u00fcr Forschungssoftware und Simulationsdesign an. Wir k\u00f6nnen dabei helfen, Kompromisse zwischen Pr\u00e4zize, sequentielle Kopplung, Operatorsplitting und anderen Ans\u00e4tzen f\u00fcr Ihr spezifisches Multiphysik-Problem zu bewerten.<\/p>\n<p><a href=\"https:\/\/matforge.org\/\"> Besuchen Sie die Matforge-Homepage<\/a>, um mehr \u00fcber Beratungsdienste und Forschungsworkflows zu erfahren.<\/p>\n","protected":false,"raw":"<p>Wenn Sie mit Multiphysik-Simulationen arbeiten, m\u00fcssen Sie h\u00e4ufig zwei oder mehr spezialisierte Solver koppeln, damit sie w\u00e4hrend der Berechnung Daten austauschen. Precice ist eine ausgereifte Open-Source-Kopplungsbibliothek f\u00fcr partitionierte Multi-Physik-Simulationen, insbesondere wenn unabh\u00e4ngige Solver wie FIPY, OpenFOAM oder Calculix angeschlossen werden.<\/p>\n<p>Aber Precice ist nicht immer eine Option. Sie k\u00f6nnen in einer Umgebung arbeiten, in der die Installation einer C++-basierten Bibliothek mit Python-Bindungen nicht praktikabel ist. Sie k\u00f6nnen einen kommerziellen Solver verwenden, der Precice nicht unterst\u00fctzt. Oder Ihr Multi-Physik-Problem kann einfach genug sein, dass sich ein Full-Kopplung-Framework wie ein Overkill anf\u00fchlt.<\/p>\n<p>Dieser Artikel behandelt praktische Alternativen, einschlie\u00dflich sequentieller Aktualisierung innerhalb von FIPY, Operator-Splitting, Polynom-Extrapolationsmethoden und Universal-Kopplungsbibliotheken.<\/p>\n<h2>Schl\u00fcssel zum Mitnehmen<\/h2>\n<ul>\n<li>Precice ist leistungsstark, aber nicht die einzige Option f\u00fcr die Multi-Physik-Kopplung. Die richtige Alternative h\u00e4ngt von der Verf\u00fcgbarkeit von Solver, den Spracheinstellungen, der HPC-Bereitschaft und der Komplexit\u00e4t des Problems ab.<\/li>\n<li>Die sequentielle Kopplung innerhalb von FIPY funktioniert gut, wenn beide Gleichungen im selben Python-Prozess leben. Es ist einfach, debuggbar und erfordert keine externe Kopplungsbibliothek.<\/li>\n<li>Operator-Splitting entkoppelt die Physik, indem jede Gleichung separat gel\u00f6st wird. Es ist n\u00fctzlich, wenn verschiedene physikalische Prozesse auf unterschiedlichen Zeitskalen ablaufen.<\/li>\n<li>Allgemeine Kopplungsbibliotheken wie MUI und Moose MultiApps bieten alternative Architekturen mit unterschiedlichen Kompromissen in Bezug auf Komplexit\u00e4t, Sprachunterst\u00fctzung und Skalierbarkeit.<\/li>\n<li>Die polynomiale Orchestrierung durch Tools wie Rhapsopy ist ein aufkommender Ansatz h\u00f6herer Ordnung, der Zeitschritte unter Verwendung von Kopplungsvariablen Fehlersch\u00e4tzungen anpasst.<\/li>\n<\/ul>\n<h2>Partitionierte vs. monolithische vs. sequentielle Kopplung<\/h2>\n<p>Vor dem Vergleich von Alternativen hilft es, die wichtigsten Kopplungsstrategien zu kl\u00e4ren. Die Multiphysik-Kopplung f\u00e4llt normalerweise in drei Kategorien.<\/p>\n<h3>Teilung Kopplung<\/h3>\n<p>Bei der partitionierten Kopplung kommunizieren separate L\u00f6ser \u00fcber eine externe Schnittstelle oder Middleware-Schicht. Die L\u00f6ser bleiben unabh\u00e4ngige Blackboxen, und jeder Solver muss die interne Struktur des anderen nicht kennen.<\/p>\n<p>Precice ist das kanonische Beispiel. Zu den Vorteilen geh\u00f6ren die Wiederverwendung von Code, Flexibilit\u00e4t und die M\u00f6glichkeit, kommerzielle oder \u00e4ltere Codes zu koppeln. Der Kompromiss ist der Kommunikationsaufwand und die Notwendigkeit von Mesh-Mapping, Daten\u00fcbertragung und Kopplungskoordination.<\/p>\n<h3>Monolithische Kopplung<\/h3>\n<p>Bei der monolithischen Kopplung werden alle Physiken in einem einzigen Solver gel\u00f6st und teilen sich h\u00e4ufig die gleiche Systemmatrix. Dies kann bei eng gekoppelten Problemen effizienter sein, da Nichtlinearit\u00e4ten implizit behandelt werden.<\/p>\n<p>Der Kompromiss ist ein hoher Entwicklungsaufwand. Alle Physik muss in einem Framework implementiert werden. Moose ist ein bemerkenswertes Framework, das Workflows im monolithischen Stil unterst\u00fctzt und auch partitionierte Muster durch MultiApps bietet.<\/p>\n<h3>Sequentielle Kopplung<\/h3>\n<p>Die sequentielle Kopplung funktioniert, wenn alle Physik in einem Solver-Framework ausgedr\u00fcckt werden kann. In FIPY k\u00f6nnen Sie beispielsweise gekoppelte Gleichungen nacheinander im selben Python-Prozess l\u00f6sen.<\/p>\n<p>Dies vermeidet externe Middleware vollst\u00e4ndig. Der Kompromiss besteht darin, dass Sie die F\u00e4higkeit verlieren, unabh\u00e4ngige L\u00f6ser zu koppeln, die in verschiedenen Sprachen geschrieben oder von verschiedenen Organisationen gepflegt werden.<\/p>\n<h2>Sequentielle Kopplung mit FIPY Sweeping<\/h2>\n<p>Die einfachste Alternative zu Precice besteht darin, gekoppelte Gleichungen im selben Python-Prozess sequentiell zu l\u00f6sen. FIPY unterst\u00fctzt dieses Muster durch die Methoden <code>sweep()<\/code> und <code>updateOld()<\/code>.<\/p>\n<h3>Das Muster<\/h3>\n<p>Die Standardimplementierung folgt einer verschachtelten Schleife:<\/p>\n<ol>\n<li>Deklarieren Sie Variablen mit <code>hasOld=True<\/code>, damit sie fr\u00fchere Werte f\u00fcr transiente Begriffe speichern k\u00f6nnen.<\/li>\n<li>Rufen Sie <code>updateOld()<\/code> einmal pro physikalischer Zeitschritt auf, um den aktuellen Zustand als den alten Wert zu sperren.<\/li>\n<li><code>eq.sweep()<\/code> wiederholt in einer inneren Schleife aufrufen, bis die Residuen konvergieren.<\/li>\n<\/ol>\n<pre><code class=\"language-python\">from fipy import CellVariable, Grid1D\nfrom fipy import TransientTerm, DiffusionTerm, ImplicitSourceTerm\n\n# 1. Setup mesh and variables\nmesh = Grid1D(nx=50, Lx=1.0)\n\nv0 = CellVariable(\n    name=\"Variable 0\",\n    mesh=mesh,\n    value=0.5,\n    hasOld=True\n)\n\nv1 = CellVariable(\n    name=\"Variable 1\",\n    mesh=mesh,\n    value=0.5,\n    hasOld=True\n)\n\n# 2. Define coupled equations\neq0 = (\n    TransientTerm(var=v0)\n    == DiffusionTerm(coeff=0.01, var=v0)\n    - ImplicitSourceTerm(coeff=1.0, var=v1)\n)\n\neq1 = (\n    TransientTerm(var=v1)\n    == DiffusionTerm(coeff=0.01, var=v1)\n    - ImplicitSourceTerm(coeff=1.0, var=v0)\n)\n\n# 3. Simulation parameters\ndt = 1e-3\nsteps = 100\ntolerance = 1e-4\n\n# 4. Time-stepping and sweeping loop\nfor step in range(steps):\n    v0.updateOld()\n    v1.updateOld()\n    \n    residual0 = residual1 = 1.0\n    \n    while (residual0 &gt; tolerance) or (residual1 &gt; tolerance):\n        residual0 = eq0.sweep(var=v0, dt=dt)\n        residual1 = eq1.sweep(var=v1, dt=dt)\n<\/code><\/pre>\n<h3>Wenn das am besten funktioniert<\/h3>\n<ul>\n<li>Beide Physiken k\u00f6nnen als PDEs in FIPY ausgedr\u00fcckt werden.<\/li>\n<li>Sie ben\u00f6tigen Rapid Prototyping oder Debuggen ohne externe Abh\u00e4ngigkeiten.<\/li>\n<li>Das gekoppelte System weist eine moderate Nichtlinearit\u00e4t auf, die mit iterativem Sweeping konvergiert.<\/li>\n<li>Sie l\u00f6sen Phasenfeldmodelle, Diffusionsreaktionssysteme oder gekoppelte Transportprobleme.<\/li>\n<\/ul>\n<h3>Wenn es fehlschl\u00e4gt<\/h3>\n<ul>\n<li>Sie m\u00fcssen in C ++, Fortran oder anderen Sprachen geschriebene Solver koppeln.<\/li>\n<li>Die Physik ist so eng gekoppelt, dass sequentielle Sweeps zu viele Iterationen erfordern.<\/li>\n<li>Ihre L\u00f6ser sind separate ausf\u00fchrbare Dateien aus verschiedenen Organisationen.<\/li>\n<li>Sie ben\u00f6tigen eine parallele Skalierung des verteilten Speichers \u00fcber mehrere Rechenknoten.<\/li>\n<\/ul>\n<h2>Operator-Splitting-Ans\u00e4tze<\/h2>\n<p>Das Splitting des Operators, auch fraktionales Steppen genannt, zerlegt ein gekoppeltes System in sequentielle Teilschritte. Jeder Teilschritt l\u00f6st ein Physikmodell. Dies ist n\u00fctzlich, wenn physikalische Prozesse auf unterschiedlichen Zeitskalen ablaufen.<\/p>\n<h3>Additiv vs Multiplikative Splitting<\/h3>\n<p>Additive Splitting zerlegt eine Gleichung in separate Operatoren und l\u00f6st jeden Beitrag unabh\u00e4ngig. Multiplikative Splitting wendet Operatoren sequentiell mit einer definierten Reihenfolge an, was wichtig ist, wenn Operatoren nicht pendeln.<\/p>\n<p>Bei Multiphysik-Workflows ist eine additive Spaltung oft einfacher anzuwenden. Jedes Physikmodell kann seinen eigenen optimierten Solver verwenden, und die Kopplungslogik bleibt modular.<\/p>\n<h3>Python-Operator-Splitting-Bibliotheken<\/h3>\n<p>Mehrere Python-orientierte Tools und Beispiele unterst\u00fctzen Workflows f\u00fcr das Aufteilen von Operatoren:<\/p>\n<ul>\n<li><a href=\"https:\/\/arxiv.org\/abs\/2407.05475\"> Pythos <\/a> ist eine Python-Bibliothek zum systematischen Aufteilen von Differentialgleichungen. Es unterst\u00fctzt Muster wie Strang-Splitting, implizit-explizite Methoden und adaptive Zeitschritte.<\/li>\n<li><a href=\"https:\/\/www.researchgate.net\/publication\/382691924\"> Venedig<\/a> ist ein Multi-Scale-Operator-Splitting-Algorithmus, der Strang-Splitting mit adaptiven Zeitschritten verwendet. Es ist relevant, wenn gekoppelte Physik \u00fcber verschiedene Zeitskalen hinweg funktioniert.<\/li>\n<li><a href=\"https:\/\/github.com\/odeSolver\/Operator-Splitting-Methods\"> Operator-Splitting-Methoden<\/a> Bietet eigenst\u00e4ndige Python-Skripte f\u00fcr die p\u00e4dagogische Verwendung. Diese Skripte sind zum Lernen n\u00fctzlich, sind jedoch nicht produktionsbereit.<\/li>\n<\/ul>\n<h3>Fipy mit Operator-Splitting<\/h3>\n<p>Sie k\u00f6nnen FIPY auch manuell mit Operator-Splitting kombinieren. Ein Diffusionsreaktionssystem kann in einen Diffusionsschritt und einen Reaktionsschritt aufgeteilt werden:<\/p>\n<pre><code class=\"language-python\"># Separate the reaction step from diffusion\ndt_diffusion = 0.001\ndt_reaction = 0.1\n\n# Solve diffusion with a small time step\neq_diff = TransientTerm(var=T) == DiffusionTerm(coeff=k, var=T)\neq_diff.sweep(dt=dt_diffusion)\n\n# Solve reaction with a larger time step\neq_react = TransientTerm(var=T) == ReactionTerm(source, var=T)\neq_react.sweep(dt=dt_reaction)\n<\/code><\/pre>\n<p>Das Grundschema ist genau erster Ordnung. Verwenden Sie f\u00fcr die Genauigkeit zweiter Ordnung Strangsplitting: Halbschrittdiffusion, Vollschrittreaktion und dann Halbschrittdiffusion.<\/p>\n<h2>Allgemeine Kopplungsbibliotheken<\/h2>\n<p>Wenn Sie eine partitionierte Kopplung ben\u00f6tigen, aber nicht Precice verwenden k\u00f6nnen, gibt es mehrere Alternativen.<\/p>\n<h3>MUI: universelle Multiscale-Schnittstelle<\/h3>\n<p><a href=\"https:\/\/mxui.github.io\/\">MUI<\/a> ist eine reine Header-C++-Bibliothek zum Koppeln heterogener Solver. Es behandelt ausgetauschte Daten als Punktwolken und behandelt die r\u00e4umliche und zeitliche Interpolation automatisch.<\/p>\n<p>Zu den wichtigsten Funktionen geh\u00f6ren:<\/p>\n<ul>\n<li>Punktbasierte Darstellung. MUI kann Daten \u00fcbertragen, ohne dass ein Solver die Mesh-Konnektivit\u00e4t eines anderen Solvers kennen muss.<\/li>\n<li>Raum- und Zeitinterpolation. Eingebaute Interpolationstools helfen Solvern, die auf verschiedenen Skalen arbeiten, zu kommunizieren.<\/li>\n<li>Intelligenter senden. Dieser Algorithmus beschr\u00e4nkt die Kommunikation auf \u00fcberlappende Dom\u00e4nen und reduziert unn\u00f6tige All-to-All-Kommunikation.<\/li>\n<li>Sprachunterst\u00fctzung. MUI ist in C++ geschrieben und bietet Wrapper f\u00fcr Python, Fortran und C.<\/li>\n<\/ul>\n<p>MUI ist n\u00fctzlich, wenn Sie Solver mit grundlegend unterschiedlichen Diskretisierungen wie FEM, FVM, DEM oder SPH koppeln m\u00fcssen.<\/p>\n<p>W\u00e4hlen Sie MUI \u00fcber Precice, wenn Sie eine leichte eingebettete Schnittstelle ben\u00f6tigen oder wenn die Netzverbindungsunterschiede die Standardkopplungsinfrastruktur zu schwer machen.<\/p>\n<p>Halten Sie sich an die precice, wenn Sie eine ausgereifte parallele Skalierung, eine Quasi-Newton-Beschleunigung f\u00fcr stark gekoppelte Probleme und ein gr\u00f6\u00dferes Adapter-\u00d6kosystem ben\u00f6tigen.<\/p>\n<h3>Moose MultiApps und Transfersysteme<\/h3>\n<p>Moose kann vollst\u00e4ndig gekoppelte Systeme l\u00f6sen, aber seine <code>MultiApps<\/code>  - und <code>Transfer<\/code>  -Systeme unterst\u00fctzen auch partitionierte Ans\u00e4tze. Moose erstellt Unteranwendungen, die Felddaten hin und her \u00fcbergeben.<\/p>\n<p>Moose unterst\u00fctzt mehrere Kopplungsstile:<\/p>\n<ul>\n<li>Vollst\u00e4ndig gekoppelte Workflows, bei denen alle Physik in einer nichtlinearen Iteration gel\u00f6st wird.<\/li>\n<li>Eng gekoppelte Picard- oder Newton-Workflows, in denen Physik-Unteranwendungen innerhalb jedes Zeitschritts iterieren.<\/li>\n<li>Versetzte Workflows, bei denen jede Physik unabh\u00e4ngig voranschreitet und Daten an definierten Grenzen austauscht.<\/li>\n<\/ul>\n<p>Elch ist in erster Linie C ++ - fokussiert. Python-Tools gibt es, aber das \u00d6kosystem ist weniger Python-nativ als Workflows, die um FIPY oder Precice herum aufgebaut sind.<\/p>\n<h2>Kopplung auf Polynombasis mit Rhapsopy<\/h2>\n<p><a href=\"https:\/\/github.com\/hpc-maths\/Rhapsopy\"> rhapsopy <\/a> verwendet polynomische Approximationen der Kopplungsvariablen im Laufe der Zeit. Anstatt bei jedem Kopplungsschritt nur einen einzigen Wert auszutauschen, integriert sich jedes Subsystem unter Verwendung einer polynomialen Approximation seiner Eingabe aus dem anderen Subsystem.<\/p>\n<h3>Wie es funktioniert<\/h3>\n<p>W\u00e4hrend eines Kopplungsschritts wird jedes Subsystem mit einem eigenen Solver integriert, w\u00e4hrend polynomisch angen\u00e4herte Eingangsgr\u00f6\u00dfen verwendet werden. Am Ende des Schritts werden neue Kopplungsvariablen berechnet und die Polynome aktualisiert.<\/p>\n<p>Dieser Ansatz kann helfen bei:<\/p>\n<ol>\n<li>Genauigkeit. Polynom-Approximationen h\u00f6herer Ordnung erfassen zeitliche \u00c4nderungen besser als konstante oder lineare Extrapolation.<\/li>\n<li>Adaptive Zeitschritt. Fehlersch\u00e4tzungen aus Polynom-Approximationen k\u00f6nnen die Zeitschrittgr\u00f6\u00dfe der Kopplung leiten.<\/li>\n<li>explizite und implizite Kopplung. Implizite Versionen k\u00f6nnen die Stabilit\u00e4t verbessern, erfordern jedoch die L\u00f6sung eines Fixpunktproblems bei jedem Schritt.<\/li>\n<\/ol>\n<h3>Aktueller Status<\/h3>\n<p>Rhapsopy wird derzeit am besten als Demonstrationswerkzeug f\u00fcr kleine Probleme angesehen. Es ist vielversprechend f\u00fcr Python-Benutzer, die eine adaptive Kopplung h\u00f6herer Ordnung w\u00fcnschen, aber es ist noch keine ausgereifte HPC-L\u00f6sung im gro\u00dfen Ma\u00dfstab.<\/p>\n<h2>comsol native Kopplung<\/h2>\n<p>Comsol Multiphysics verwendet ein anderes Modell. Anstatt externe Solver zu koppeln, definiert COMSOL Multiphysik-Kopplungen nativ innerhalb derselben Softwareumgebung.<\/p>\n<p>Comsol-Benutzer k\u00f6nnen:<\/p>\n<ul>\n<li>Definieren Sie Schnittstellenbedingungen wie W\u00e4rmeflusskontinuit\u00e4t oder Spannungsgleichgewicht.<\/li>\n<li>Verwenden Sie vollst\u00e4ndig gekoppelte L\u00f6sungsstrategien f\u00fcr nichtlineare Probleme.<\/li>\n<li>Wechseln Sie je nach Problemkomplexit\u00e4t zwischen getrennten und vollst\u00e4ndig gekoppelten Strategien.<\/li>\n<\/ul>\n<p>Dies ist unkompliziert f\u00fcr Benutzer, die bereits in COMSOL sind. Der Kompromiss ist der Verk\u00e4ufer-Lock-in. Das Koppeln von externen Solvern erfordert in der Regel comsol-spezifische Schnittstellen, Livelink-Workflows oder Scripting-Bridges.<\/p>\n<h2>Vergleichszusammenfassung<\/h2>\n<table class=\"custom-table\">\n<tbody><tr>\n<th>Sich n\u00e4hern<\/th>\n<th>am besten f\u00fcr<\/th>\n<th>Vorteile<\/th>\n<th>Nachteile<\/th>\n<th>Externe Abh\u00e4ngigkeit<\/th>\n<\/tr>\n<tr>\n<td>Fipy sequentieller Sweeping<\/td>\n<td>Gleichprozess gekoppelte PDs<\/td>\n<td>Einfach, debuggbar, keine externe Kopplungsbibliothek<\/td>\n<td>Begrenzt auf FIPY- und sequentielle Iterationen<\/td>\n<td>Keiner<\/td>\n<\/tr>\n<tr>\n<td>Operator-Splitting<\/td>\n<td>Verschiedene Zeitskalen<\/td>\n<td>modular und wiederverwendet optimierte L\u00f6ser<\/td>\n<td>Teilungsfehler und Stabilit\u00e4tsbeschr\u00e4nkungen<\/td>\n<td>Optionale Bibliothek wie Pythos<\/td>\n<\/tr>\n<tr>\n<td>mui<\/td>\n<td>Verschiedene Netztypen und Diskretisierungen<\/td>\n<td>Nur-Header-Design und gro\u00dfer Simulationsbereich<\/td>\n<td>In einigen F\u00e4llen weniger ausgereifte parallele Skalierung als Pr\u00e4zipiente<\/td>\n<td>MUI-Bibliothek<\/td>\n<\/tr>\n<tr>\n<td>Elch-Multi-Apps<\/td>\n<td>C++- und Moose-\u00d6kosystem-Workflows<\/td>\n<td>Monolithische und partitionierte Optionen<\/td>\n<td>in erster Linie C++ und weniger Python-nativ<\/td>\n<td>Elchrahmen<\/td>\n<\/tr>\n<tr>\n<td>Rhapsopy<\/td>\n<td>Adaptive Kopplung h\u00f6herer Ordnung<\/td>\n<td>Dynamische Zeitschritte und Fehlersch\u00e4tzungen<\/td>\n<td>Nur im Fr\u00fchstadium und nur im Kleinstadium<\/td>\n<td>Rhapsopy<\/td>\n<\/tr>\n<tr>\n<td>comsol native Kopplung<\/td>\n<td>Integrierte kommerzielle Workflows<\/td>\n<td>Vollst\u00e4ndig gekoppelte und intuitive Benutzeroberfl\u00e4che<\/td>\n<td>Verk\u00e4ufersperre<\/td>\n<td>COMSOL-Lizenz<\/td>\n<\/tr>\n<tr>\n<td>Pr\u00e4zise<\/td>\n<td>Reife partitionierte Kopplung<\/td>\n<td>Bew\u00e4hrt, dokumentiert und von einer Community unterst\u00fctzt<\/td>\n<td>Erfordert C++\/Python-Bindungen und Adapter-Setup<\/td>\n<td>Precice Library<\/td>\n<\/tr>\n<\/tbody><\/table>\n<h2>Praktischer Entscheidungsf\u00fchrer<\/h2>\n<p>Verwenden Sie dieses Entscheidungshandbuch, wenn Sie Precice nicht verwenden k\u00f6nnen oder m\u00f6chten.<\/p>\n<ol>\n<li>Sind alle Physik innerhalb von FIPY ausdr\u00fcckbar? Verwenden Sie sequentielles Sweeping. Es ist der einfachste Weg und erfordert keine externen Abh\u00e4ngigkeiten.<\/li>\n<li>Funktioniert Ihre Physik auf sehr unterschiedlichen Zeitskalen? Try operator splitting. Durch die Entkopplung kann jede Physik ihren eigenen Zeitschritt verwenden.<\/li>\n<li>Koppeln Sie Solver mit grundlegend unterschiedlichen Diskretisierungen? Betrachten Sie MUI. Seine punktbasierte Darstellung kann Maschen-zu-Maschen- und Netz-zu-Teilchen-Kopplung verarbeiten.<\/li>\n<li>Arbeiten Sie in C ++ oder im Elch-\u00d6kosystem? Moose MultiApps bieten monolithische, eng gekoppelte und versetzte Optionen in einem Framework.<\/li>\n<li>Ben\u00f6tigen Sie eine adaptive Zeitschritte auf der Grundlage von Kopplungsfehlern? Versuchen Sie Rhapsopy f\u00fcr kleine Experimente oder \u00fcberwachen Sie die Entwicklung f\u00fcr gr\u00f6\u00dfere Workflows.<\/li>\n<li>Verwenden Sie einen kommerziellen Solver? \u00dcberpr\u00fcfen Sie, ob es native Multiphysik-Funktionen hat oder externe Kopplungsbibliotheken unterst\u00fctzt.<\/li>\n<\/ol>\n<h2>Was wir empfehlen<\/h2>\n<p>F\u00fcr FIPY-Benutzer, die in Python arbeiten, h\u00e4ngt die Empfehlung von der Komplexit\u00e4t der Problemstellung ab.<\/p>\n<ul>\n<li>Einfache Kopplung, wie Diffusionsreaktion, Phasenfeld oder Transport: Sequential Sweeping mit <code>sweep()<\/code>. Es ist unkompliziert und erfordert keine externen Abh\u00e4ngigkeiten.<\/li>\n<li>Moderate Komplexit\u00e4t, wie z. B. lose gekoppelte externe Solver oder unterschiedliche Zeitskalen: Verwenden Sie Operator-Splitting mit einer strukturierten Bibliothek wie Pythos.<\/li>\n<li>Hohe Komplexit\u00e4t, wie z. B. eng gekoppelte L\u00f6ser in verschiedenen Sprachen: Verwenden Sie nach M\u00f6glichkeit Precice. Die Alternativen bieten noch nicht die gleiche Reife, parallele Skalierbarkeit oder Konvergenzbeschleunigung.<\/li>\n<\/ul>\n<p>Wenn Precice nicht verf\u00fcgbar ist, h\u00e4ngt die n\u00e4chstbeste Option von Ihrer Umgebung ab. F\u00fcr die akademische Forschung ohne HPC-Zugang kann das Nur-Header-Design von MUI einfacher zu integrieren sein. F\u00fcr Produktionssimulationen, die eine parallele Skalierung erfordern, bleibt Precice die st\u00e4rkste Option, wenn Sie es verwenden k\u00f6nnen.<\/p>\n<h2>Was zu vermeiden<\/h2>\n<ul>\n<li>Manueller Datenaustausch in Schleifen ohne Iterations- oder Konvergenzkriterien. Dies kann ungenau oder ungenaue Ergebnisse hervorbringen.<\/li>\n<li>Extrapolieren von Kopplungsvariablen ohne Fehlerkontrolle. Die Verwendung des Kopplungswerts des vorherigen Zeitschritts als Stromwert ist nur erster Ordnung genau und kann bei stark gekoppelten Problemen instabil sein.<\/li>\n<li>Vernachl\u00e4ssigung der Unterentspannung. F\u00fcr die nichtlineare Kopplung sollten Parameter unterrelaxiert werden, um die Divergenz der Solver zu verringern.<\/li>\n<li>Unter der Annahme von sequentiellen Kehrskalen. Die sequentielle Kopplung innerhalb eines Python-Prozesses wird nicht \u00fcber Rechenknoten mit verteiltem Speicher skaliert.<\/li>\n<\/ul>\n<h2>Verwandte Anleitungen<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/code-coupling-precice-multi-physics-python\/\">Code-Kopplung mit dem Pr\u00e4cice: Multi-Physics-Simulationen in Python<\/a> \u2014 Installation, Adapterimplementierung und Konfiguration wann PRECICE ist verf\u00fcgbar.<\/li>\n<li><a href=\"https:\/\/matforge.org\/extending-fipy-with-custom-modules\/\"> Erweitern von FIPY mit benutzerdefinierten Modulen <\/a> - Organisieren wiederverwendbarer PDE-Codes, Quellbegriffe und gekoppelter Modelle in FIPY.<\/li>\n<li><a href=\"https:\/\/matforge.org\/what-is-fipy-and-when-should-you-use-it\/\">Was ist FIPY und wann sollten Sie es verwenden? <\/a> - FIPY-Grundlagen und Anwendungsf\u00e4lle.<\/li>\n<li><a href=\"https:\/\/matforge.org\/understanding-phase-field-models-in-materials-science\/\"> Phasenfeldmodelle in der Materialwissenschaft verstehen <\/a> - Multi-Physics-Phasenfeldanwendungen.<\/li>\n<li><a href=\"https:\/\/matforge.org\/managing-large-scale-pde-problems-strategies-solvers-and-hpc-case-studies\/\">Verwalten von PDE-Problemen im gro\u00dfen Ma\u00dfstab: Strategien, Solver und HPC-Fallstudien <\/a> - Strategien zur Skalierung komplexer Simulationsworkflows.<\/li>\n<\/ul>\n<h2>Ben\u00f6tigen Sie Hilfe bei der Gestaltung Ihres Multiphysik-Workflows?<\/h2>\n<p>Die Wahl des richtigen Kopplungsansatzes h\u00e4ngt von Ihren L\u00f6sern, Einschr\u00e4nkungen und Problemkomplexit\u00e4t ab. Matforge bietet Beratungsleistungen f\u00fcr Forschungssoftware und Simulationsdesign an. Wir k\u00f6nnen dabei helfen, Kompromisse zwischen Pr\u00e4zize, sequentielle Kopplung, Operatorsplitting und anderen Ans\u00e4tzen f\u00fcr Ihr spezifisches Multiphysik-Problem zu bewerten.<\/p>\n<p><a href=\"https:\/\/matforge.org\/\"> Besuchen Sie die Matforge-Homepage<\/a>, um mehr \u00fcber Beratungsdienste und Forschungsworkflows zu erfahren.<\/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\"> 7<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>Wenn Sie mit Multiphysik-Simulationen arbeiten, m\u00fcssen Sie h\u00e4ufig zwei oder mehr spezialisierte Solver koppeln, damit sie w\u00e4hrend der Berechnung Daten austauschen. Precice ist eine ausgereifte Open-Source-Kopplungsbibliothek f\u00fcr partitionierte Multi-Physik-Simulationen, insbesondere wenn unabh\u00e4ngige Solver wie FIPY, OpenFOAM oder Calculix angeschlossen werden. Aber Precice ist nicht immer eine Option. Sie k\u00f6nnen in einer Umgebung arbeiten, in der [&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=350","iawp_total_views":2,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-887","post","type-post","status-publish","format-standard","hentry","category-fipy-documentation-examples-development","de-DE"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Multiphysik-Kopplung ohne Pr\u00e4zise<\/title>\n<meta name=\"description\" content=\"Erkunden Sie Alternativen zu Precice f\u00fcr die Multi-Physik-Kopplung, einschlie\u00dflich FIPY-Sweeping, Operator-Splitting, MUI, Moose-Multi-Apps und Rhapsopy.\" \/>\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\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Multiphysik-Kopplung ohne Pr\u00e4zise\" \/>\n<meta property=\"og:description\" content=\"Erkunden Sie Alternativen zu Precice f\u00fcr die Multi-Physik-Kopplung, einschlie\u00dflich FIPY-Sweeping, Operator-Splitting, MUI, Moose-Multi-Apps und Rhapsopy.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/de\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-30T12:23:22+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=\"11\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/\"},\"author\":{\"name\":\"Tomas Delgado\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"headline\":\"Multi-Physics-Code-Kopplung ohne Pr\u00e4zise: Alternativen und benutzerdefinierte Ans\u00e4tze\",\"datePublished\":\"2026-07-30T12:23:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/\"},\"wordCount\":2102,\"commentCount\":0,\"articleSection\":[\"FIPY: Dokumentation, Beispiele &amp; Entwicklung\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/de\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/de\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/\",\"name\":\"Multiphysik-Kopplung ohne Pr\u00e4zise\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-07-30T12:23:22+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"description\":\"Erkunden Sie Alternativen zu Precice f\u00fcr die Multi-Physik-Kopplung, einschlie\u00dflich FIPY-Sweeping, Operator-Splitting, MUI, Moose-Multi-Apps und Rhapsopy.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/de\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Multi-Physics-Code-Kopplung ohne Pr\u00e4zise: Alternativen und benutzerdefinierte Ans\u00e4tze\"}]},{\"@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":"Multiphysik-Kopplung ohne Pr\u00e4zise","description":"Erkunden Sie Alternativen zu Precice f\u00fcr die Multi-Physik-Kopplung, einschlie\u00dflich FIPY-Sweeping, Operator-Splitting, MUI, Moose-Multi-Apps und Rhapsopy.","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\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/","og_locale":"de_DE","og_type":"article","og_title":"Multiphysik-Kopplung ohne Pr\u00e4zise","og_description":"Erkunden Sie Alternativen zu Precice f\u00fcr die Multi-Physik-Kopplung, einschlie\u00dflich FIPY-Sweeping, Operator-Splitting, MUI, Moose-Multi-Apps und Rhapsopy.","og_url":"https:\/\/matforge.org\/de\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/","og_site_name":"matforge.org","article_published_time":"2026-07-30T12:23:22+00:00","author":"Tomas Delgado","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Tomas Delgado","Gesch\u00e4tzte Lesezeit":"11\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/de\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/de\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/"},"author":{"name":"Tomas Delgado","@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"headline":"Multi-Physics-Code-Kopplung ohne Pr\u00e4zise: Alternativen und benutzerdefinierte Ans\u00e4tze","datePublished":"2026-07-30T12:23:22+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/de\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/"},"wordCount":2102,"commentCount":0,"articleSection":["FIPY: Dokumentation, Beispiele &amp; Entwicklung"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/de\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/de\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/","url":"https:\/\/matforge.org\/de\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/","name":"Multiphysik-Kopplung ohne Pr\u00e4zise","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-07-30T12:23:22+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"description":"Erkunden Sie Alternativen zu Precice f\u00fcr die Multi-Physik-Kopplung, einschlie\u00dflich FIPY-Sweeping, Operator-Splitting, MUI, Moose-Multi-Apps und Rhapsopy.","breadcrumb":{"@id":"https:\/\/matforge.org\/de\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/de\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/de\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/de\/"},{"@type":"ListItem","position":2,"name":"Multi-Physics-Code-Kopplung ohne Pr\u00e4zise: Alternativen und benutzerdefinierte Ans\u00e4tze"}]},{"@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\/887","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=887"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/887\/revisions"}],"predecessor-version":[{"id":1021,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/887\/revisions\/1021"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=887"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=887"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=887"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}