{"id":870,"date":"2026-07-30T12:23:27","date_gmt":"2026-07-30T12:23:27","guid":{"rendered":"https:\/\/matforge.org\/?p=870","raw":"https:\/\/matforge.org\/?p=870"},"modified":"2026-07-30T12:23:27","modified_gmt":"2026-07-30T12:23:27","slug":"discontinuous-galerkin-method-tutorial","status":"publish","type":"post","link":"https:\/\/matforge.org\/de\/discontinuous-galerkin-method-tutorial\/","title":{"rendered":"Discontinuous Galerkin-Methoden-Tutorial: Ableitung, Fl\u00fcsse und Python-Implementierung","raw":"Discontinuous Galerkin-Methoden-Tutorial: Ableitung, Fl\u00fcsse 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\"> 9<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><article>\n<p>Die diskontinuierliche Galerkin-Methode, die normalerweise auf DG verk\u00fcrzt wird, ist eine numerische Technik zur L\u00f6sung von partiellen Differentialgleichungen. Es kombiniert mehrere n\u00fctzliche Eigenschaften von Finite-Volumen- und Finite-Elemente-Methoden. Wie bei der Finite-Volumen-Methode kann die DG Mengen lokal durch sorgf\u00e4ltig definierte Flussmittel konservieren. Wie bei der Finite-Elemente-Methode unterst\u00fctzt es flexible Netze und polynomische Approximationen in jedem Element.<\/p>\n<p>Das definierende Merkmal von DG ist, dass die numerische L\u00f6sung nicht \u00fcber Elementgrenzen hinweg kontinuierlich bleiben muss. Jedes Element hat seine eigene Polynomdarstellung. Benachbarte Elemente kommunizieren \u00fcber numerische Fl\u00fcsse, die an ihren gemeinsamen Schnittstellen bewertet werden.<\/p>\n<p>Diese Struktur macht DG n\u00fctzlich f\u00fcr Wellenausbreitung, Transportgleichungen, komprimierbare Str\u00f6mung, Flachwassersysteme, Elektromagnete und Probleme, die Schocks oder Materialgrenzfl\u00e4chen enthalten. Es ist auch attraktiv f\u00fcr das parallele Rechnen, da viele Berechnungen in jedem Element unabh\u00e4ngig durchgef\u00fchrt werden k\u00f6nnen.<\/p>\n<h2>Wie DG sich von anderen Methoden unterscheidet<\/h2>\n<p>Eine Finite-Volumen-Methode speichert normalerweise einen Mittelwert in jeder Zelle und berechnet den Fluss einer konservierten Menge durch Zellfl\u00e4chen. Es bietet eine starke lokale Erhaltung, aber viele grundlegende endliche Volumenschemata verwenden r\u00e4umliche Approximationen mit relativ niedriger Ordnung.<\/p>\n<p>Eine kontinuierliche Finite-Elemente-Methode stellt die L\u00f6sung mit polynomialen Basisfunktionen dar, die sich kontinuierlich \u00fcber Elementgrenzen verbinden. Dies bietet geometrische Flexibilit\u00e4t und Approximation h\u00f6herer Ordnung, aber Diskontinuit\u00e4ten k\u00f6nnen ohne zus\u00e4tzliche Behandlung nicht direkt dargestellt werden.<\/p>\n<p>DG verwendet in jedem Element Polynom-Basisfunktionen und erlaubt gleichzeitig separate Werte auf beiden Seiten einer Schnittstelle. Numerische Fl\u00fcsse bestimmen, wie diese Werte interagieren. Das Verfahren bietet daher lokale Konservierung, Approximation hoher Ordnung und direkte Unterst\u00fctzung f\u00fcr diskontinuierliche L\u00f6sungen.<\/p>\n<h2>die kontinuierliche Advektionsgleichung<\/h2>\n<p>Die eindimensionale lineare Advektionsgleichung bietet eine klare Einf\u00fchrung in die DG:<\/p>\n<pre><code>\u2202u\/\u2202t + \u2202f(u)\/\u2202x = 0<\/code><\/pre>\n<p>F\u00fcr konstante Transportgeschwindigkeit <code>a<\/code> ist der physikalische Fluss:<\/p>\n<pre><code>f(u) = a u<\/code><\/pre>\n<p>Die Gleichung wird dann:<\/p>\n<pre><code>\u2202u\/\u2202t + a \u2202u\/\u2202x = 0<\/code><\/pre>\n<p>Dieses Modell beschreibt ein Profil, das sich durch die Dom\u00e4ne bewegt, ohne die Form zu \u00e4ndern. Wenn <code>a<\/code> positiv ist, wandern die Informationen von links nach rechts. Wenn es negativ ist, werden Informationen von rechts nach links \u00fcbertragen.<\/p>\n<h2>Unterteilen der Dom\u00e4ne in Elemente<\/h2>\n<p>Angenommen, die Dom\u00e4ne erstreckt sich von null bis <code>L<\/code>. DG teilt es in nicht \u00fcberlappende Elemente:<\/p>\n<pre><code>\u03a9 = K\u2081 \u222a K\u2082 \u222a ... \u222a K\u2099<\/code><\/pre>\n<p>Innerhalb jedes Elements wird die numerische L\u00f6sung durch ein Polynom dargestellt:<\/p>\n<pre><code>u\u2095(x, t) = \u03a3 U\u1d62(t) \u03c6\u1d62(x)<\/code><\/pre>\n<p>Die Funktionen <code>\u03c6\u1d62<\/code> sind lokale Basisfunktionen, und die Koeffizienten <code>U\u1d62<\/code> sind die Freiheitsgrade, die sich mit der Zeit \u00e4ndern.<\/p>\n<p>Ein Polynom von Grad Null speichert in jedem Element einen konstanten Wert. Eine lineare Approximation verwendet zwei lokale Freiheitsgrade in einer Dimension. Eine quadratische Approximation verwendet drei.<\/p>\n<p>Im Gegensatz zu kontinuierlichen finiten Elementen zwingt DG das Polynom von einem Element nicht, um das Polynom im n\u00e4chsten \u00fcbereinzustimmen. An einer gemeinsamen Schnittstelle kann die L\u00f6sung daher einen linken Wert und einen rechten Wert haben.<\/p>\n<h2>Ableiten der elementweise schwachen Form<\/h2>\n<p>Die GD-Formulierung beginnt mit der Multiplikation der ma\u00dfgeblichen Gleichung mit einer Testfunktion <code>v<\/code> und der Integration \u00fcber ein Element:<\/p>\n<pre><code>\u222bK (\u2202u\u2095\/\u2202t) v dx + \u222bK (\u2202f(u\u2095)\/\u2202x) v dx = 0<\/code><\/pre>\n<p>Die Integration nach Teilen verschiebt die r\u00e4umliche Ableitung vom physikalischen Fluss zur Testfunktion:<\/p>\n<pre><code>\u222bK (\u2202u\u2095\/\u2202t) v dx\n- \u222bK f(u\u2095) \u2202v\/\u2202x dx\n+ f(u\u2095) v |\u2202K = 0<\/code><\/pre>\n<p>Der Grenzbegriff ist wesentlich. Es beschreibt den Fluss durch die linke und rechte Seite des Elements.<\/p>\n<p>Da die DG-L\u00f6sung an einer Schnittstelle diskontinuierlich sein kann, ist der physikalische Fluss dort nicht eindeutig definiert. Ein Element liefert einen Wert von links, w\u00e4hrend sein Nachbar einen anderen Wert von rechts angibt. DG ersetzt den mehrdeutigen physikalischen Fluss durch einen numerischen Fluss:<\/p>\n<pre><code>f\u0302(u\u207b, u\u207a)<\/code><\/pre>\n<p>Die letzte schwache Form f\u00fcr ein Element ist:<\/p>\n<pre><code>\u222bK (\u2202u\u2095\/\u2202t) v dx\n- \u222bK f(u\u2095) \u2202v\/\u2202x dx\n+ f\u0302R vR\n- f\u0302L vL = 0<\/code><\/pre>\n<p>Diese Gleichung enth\u00e4lt einen element-lokalen Volumenbeitrag und zwei Schnittstellenbeitr\u00e4ge. Die numerischen Fl\u00fcsse sind die einzigen Begriffe, die benachbarte Elemente direkt verbinden.<\/p>\n<h2>Warum numerische Fl\u00fcsse wichtig sind<\/h2>\n<p>Ein numerischer Fluss muss konsistent sein. Wenn die beiden Schnittstellenwerte gleich sind, sollte der physikalische Fluss reproduziert werden:<\/p>\n<pre><code>f\u0302(u, u) = f(u)<\/code><\/pre>\n<p>Es muss auch eine angemessene Stabilit\u00e4t bieten. Bei Transportproblemen sollte der Fluss die Richtung ber\u00fccksichtigen, in die sich Informationen bewegen.<\/p>\n<p>Die Flusswahl steuert, wie stark benachbarte Elemente interagieren und wie viel numerische Dissipation eingef\u00fchrt wird. Ein ungeeigneter Fluss kann Schwingungen, \u00fcberm\u00e4\u00dfige Gl\u00e4ttung oder falsche Wellengeschwindigkeiten verursachen.<\/p>\n<h2>Aufwind-Fluss<\/h2>\n<p>F\u00fcr die lineare Advektion mit positiver Geschwindigkeit kommt die Information von der linken Seite einer Schnittstelle. Der Aufwindfluss ist daher:<\/p>\n<pre><code>f\u0302(u\u207b, u\u207a) = a u\u207b    when a &gt; 0<\/code><\/pre>\n<p>F\u00fcr die negative Geschwindigkeit kommen Informationen von rechts:<\/p>\n<pre><code>f\u0302(u\u207b, u\u207a) = a u\u207a    when a &lt; 0<\/code><\/pre>\n<p>Ein kompakter Ausdruck ist:<\/p>\n<pre><code>f\u0302 = a\u207au\u207b + a\u207bu\u207a\n\na\u207a = max(a, 0)\na\u207b = min(a, 0)<\/code><\/pre>\n<p>Der Aufwindfluss ist einfach, stabil und weit verbreitet. Es f\u00fchrt eine gewisse numerische Dissipation ein, aber die Menge nimmt im Allgemeinen ab, wenn das Netz verfeinert wird oder die Polynomreihenfolge zunimmt.<\/p>\n<h2>Lokaler LAX-FRIEDRICHS FLUX<\/h2>\n<p>Der lokale Lax-Friedrichs-Fluss, auch Rusanov-Fluss genannt, wird h\u00e4ufig f\u00fcr nichtlineare Erhaltungsgesetze verwendet:<\/p>\n<pre><code>f\u0302(u\u207b, u\u207a)\n= 0.5[f(u\u207b) + f(u\u207a)]\n- 0.5 \u03b1(u\u207a - u\u207b)<\/code><\/pre>\n<p>Der Parameter <code>\u03b1<\/code> ist eine Sch\u00e4tzung der gr\u00f6\u00dften Kennzahl an der Schnittstelle. F\u00fcr konstante lineare Advektion ist es normalerweise <code>|a|<\/code> .<\/p>\n<p>Der erste Teil mittelt die physikalischen Fl\u00fcsse. Der zweite Teil f\u00fcgt eine Dissipation hinzu, die hilft, instabile Schnittstellenmodi zu steuern. Dieser Fluss ist robust und einfach zu implementieren, kann jedoch diffusiver sein als ein spezialisierter ungef\u00e4hrer Riemann-Solver.<\/p>\n<h2>Riemann-Solver<\/h2>\n<p>Nichtlineare hyperbolische Systeme k\u00f6nnen mehrere Wellen enthalten, die sich mit unterschiedlichen Geschwindigkeiten bewegen. Beispiele sind die Euler-Gleichungen f\u00fcr die komprimierbare Str\u00f6mung und die Flachwassergleichungen.<\/p>\n<p>Ein Riemann-Solver untersucht die linken und rechten Zust\u00e4nde an einer Grenzfl\u00e4che und sch\u00e4tzt die Wellen, die durch ihre Wechselwirkung erzeugt werden. Exakte Riemann-Solver k\u00f6nnen teuer sein, daher verwenden praktische DG-Codes \u00fcblicherweise ungef\u00e4hre Methoden wie Roe, HLL, HLLC oder Rusanov.<\/p>\n<p>Die richtige Wahl h\u00e4ngt von der Gleichung, der gew\u00fcnschten Genauigkeit, den Robustheitsanforderungen und der F\u00e4higkeit ab, wichtige physikalische Eigenschaften beizubehalten.<\/p>\n<h2>Das halbdiskrete Matrixsystem<\/h2>\n<p>Nach der Auswahl von Basis- und Testfunktionen kann die schwache Form als System gew\u00f6hnlicher Differentialgleichungen ausgedr\u00fcckt werden:<\/p>\n<pre><code>M dU\/dt = R(U)<\/code><\/pre>\n<p>Die Massenmatrix enth\u00e4lt Integrale von Basisfunktionsprodukten:<\/p>\n<pre><code>M\u1d62\u2c7c = \u222bK \u03c6\u1d62 \u03c6\u2c7c dx<\/code><\/pre>\n<p>Das Residuum <code>R(U)<\/code> umfasst die Volumenableitung und den numerischen Flussbeitrag.<\/p>\n<p>Da die DG-Basisfunktionen zu einzelnen Elementen geh\u00f6ren, hat die globale Massenmatrix eine Blockdiagonalstruktur. Jedes Element tr\u00e4gt einen kleinen unabh\u00e4ngigen Block bei. Diese Bl\u00f6cke k\u00f6nnen separat invertiert werden.<\/p>\n<p>Die Massenmatrix ist nicht automatisch diagonal f\u00fcr jede Basis- und Integrationsregel. Es wird diagonal oder ann\u00e4hernd diagonal in g\u00e4ngigen Knoten-DG-Formulierungen, die passende Interpolations- und Quadraturpunkte wie Gauss-Lobatto-Kollokation verwenden. Andere Formulierungen verwenden kleine dichte Elementmatrizen.<\/p>\n<h2>Auswahl von Basisfunktionen und Quadratur<\/h2>\n<p>DG-Methoden verwenden \u00fcblicherweise modale oder nodale Polynombasen. Eine modale Basis stellt die L\u00f6sung durch Polynommodi dar, die h\u00e4ufig auf Legendre-Polynomen basieren. Eine Knotenbasis speichert L\u00f6sungswerte an Interpolationsknoten im Element.<\/p>\n<p>Knotenformulierungen sind praktisch, da Schnittstellenwerte direkt erhalten werden k\u00f6nnen, wenn Knoten an Elementgrenzen platziert werden. Gauss-Lobatto-Punkte umfassen beide Endpunkte des Referenzelements, w\u00e4hrend Gau\u00df-Punkte darin bleiben.<\/p>\n<p>Die numerische Quadratur bewertet die Integrale in der schwachen Form. Die Quadraturregel muss f\u00fcr den Polynomgrad und alle nichtlinearen Terme ausreichend genau sein. Unzureichende Quadratur kann zu Aliasing-Fehlern und Instabilit\u00e4t f\u00fchren.<\/p>\n<h2>Polynomreihenfolge und Genauigkeit<\/h2>\n<table class=\"custom-table\">\n<tbody>\n<tr>\n<th>Polynomgrad<\/th>\n<th>Lokale Freiheitsgrade in 1D<\/th>\n<th>Typische Rolle<\/th>\n<\/tr>\n<tr>\n<td><code>p = 0<\/code><\/td>\n<td>1<\/td>\n<td>St\u00fcckweise konstante Approximation \u00e4hnlich einer Finite-Volumen-Methode erster Ordnung<\/td>\n<\/tr>\n<tr>\n<td><code>p = 1<\/code><\/td>\n<td>2<\/td>\n<td>Praktischer Ausgangspunkt mit linearer Variation innerhalb jedes Elements<\/td>\n<\/tr>\n<tr>\n<td><code>p = 2<\/code><\/td>\n<td>3<\/td>\n<td>H\u00f6here Genauigkeit f\u00fcr reibungslose L\u00f6sungen bei moderaten Mehrkosten<\/td>\n<\/tr>\n<tr>\n<td><code>p = 3<\/code><\/td>\n<td>4<\/td>\n<td>Approximation hoher Ordnung, die eine strengere Stabilit\u00e4t und Quadraturkontrolle erfordert<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>F\u00fcr ausreichend reibungslose L\u00f6sungen kann ein gut ausgelegtes DG-Verfahren einen Fehler proportional zu ungef\u00e4hr <code>h^(p+1)<\/code>  erzielen. Eine Erh\u00f6hung des Polynomgrads kann daher die Genauigkeit verbessern, ohne mehr Elemente hinzuzuf\u00fcgen.<\/p>\n<p>H\u00f6here Ordnung ist nicht immer besser. Schocks und scharfe Diskontinuit\u00e4ten k\u00f6nnen Schwingungen in der N\u00e4he des Sprunges verursachen. Begrenzer, k\u00fcnstliche Viskosit\u00e4t, Filterung oder Schockerfassungstechniken k\u00f6nnen erforderlich sein.<\/p>\n<h2>Ein linearer DG-Solver in Numpy<\/h2>\n<p>Das folgende Lehrbeispiel implementiert eine lineare <code>p = 1<\/code>-DG-Methode f\u00fcr die periodische eindimensionale Advektion. Jedes Element enth\u00e4lt zwei Freiheitsgrade an seinen Endpunkten.<\/p>\n<p>Die Implementierung verwendet das Element Schwache Form, einen Aufwindfluss und eine dritte Ordnung, die stabilit\u00e4tserhaltende Runge-Kutta-Methode.<\/p>\n<pre><code class=\"language-python\">import numpy as np\n\n# Domain and model parameters\nlength = 1.0\nnumber_of_elements = 80\nvelocity = 1.0\nfinal_time = 0.5\n\nelement_width = length \/ number_of_elements\njacobian = element_width \/ 2.0\n\n# Reference-element mass matrix for linear basis functions\nmass_reference = np.array([\n    [2.0 \/ 3.0, 1.0 \/ 3.0],\n    [1.0 \/ 3.0, 2.0 \/ 3.0]\n])\n\nmass_matrix = jacobian * mass_reference\ninverse_mass = np.linalg.inv(mass_matrix)\n\n# S[i, j] = integral(phi_j * derivative(phi_i)) on [-1, 1]\nvolume_matrix = np.array([\n    [-0.5, -0.5],\n    [ 0.5,  0.5]\n])\n\nleft_vector = np.array([1.0, 0.0])\nright_vector = np.array([0.0, 1.0])\n\n# Physical coordinates of local DG nodes\nleft_edges = np.arange(number_of_elements) * element_width\nright_edges = left_edges + element_width\ncoordinates = np.column_stack((left_edges, right_edges))\n\n# Smooth periodic initial condition\nsolution = (\n    0.5\n    + 0.5 * np.sin(2.0 * np.pi * coordinates \/ length)\n)\n\ndef upwind_flux(left_state, right_state, speed):\n    positive_speed = max(speed, 0.0)\n    negative_speed = min(speed, 0.0)\n\n    return (\n        positive_speed * left_state\n        + negative_speed * right_state\n    )\n\ndef spatial_residual(values):\n    residual = np.zeros_like(values)\n\n    for element in range(number_of_elements):\n        left_neighbor = (element - 1) % number_of_elements\n        right_neighbor = (element + 1) % number_of_elements\n\n        # States on the left interface\n        left_inside = values[element, 0]\n        left_outside = values[left_neighbor, 1]\n\n        # States on the right interface\n        right_inside = values[element, 1]\n        right_outside = values[right_neighbor, 0]\n\n        flux_left = upwind_flux(\n            left_outside,\n            left_inside,\n            velocity\n        )\n\n        flux_right = upwind_flux(\n            right_inside,\n            right_outside,\n            velocity\n        )\n\n        local_rhs = (\n            velocity * volume_matrix @ values[element]\n            + flux_left * left_vector\n            - flux_right * right_vector\n        )\n\n        residual[element] = inverse_mass @ local_rhs\n\n    return residual\n\n# Conservative time-step estimate\ntime_step = 0.1 * element_width \/ abs(velocity)\ncurrent_time = 0.0\n\nwhile current_time &lt; final_time:\n    dt = min(time_step, final_time - current_time)\n\n    # SSP-RK3 stage 1\n    stage_one = solution + dt * spatial_residual(solution)\n\n    # SSP-RK3 stage 2\n    stage_two = (\n        0.75 * solution\n        + 0.25 * (\n            stage_one\n            + dt * spatial_residual(stage_one)\n        )\n    )\n\n    # SSP-RK3 stage 3\n    solution = (\n        (1.0 \/ 3.0) * solution\n        + (2.0 \/ 3.0) * (\n            stage_two\n            + dt * spatial_residual(stage_two)\n        )\n    )\n\n    current_time += dt\n\nprint(\"Simulation completed\")\nprint(\"Final time:\", current_time)\nprint(\"Minimum value:\", solution.min())\nprint(\"Maximum value:\", solution.max())<\/code><\/pre>\n<p>Dieses Beispiel ist absichtlich auf ein glattes lineares Problem beschr\u00e4nkt. Produktions-DG-Solver ben\u00f6tigen au\u00dferdem robuste Grenzbehandlungen, mehrdimensionale Zuordnungen, genaue Quadratur, nichtlineare Flussmittelbewertung, Begrenzer und eine erweiterte Zeitintegration.<\/p>\n<h2>Zeitintegration und die CFL-Bedingung<\/h2>\n<p>Die r\u00e4umliche DG-Diskretisierung schafft ein System gew\u00f6hnlicher Differentialgleichungen. Eine explizite Methode wie Runge-Kutta kann dieses System dann rechtzeitig voranbringen.<\/p>\n<p>Der maximale stabile Zeitschritt h\u00e4ngt von der Wellengeschwindigkeit, der Elementgr\u00f6\u00dfe, dem Polynomgrad, dem Fluss und dem Zeitintegrator ab. Eine g\u00e4ngige Skalierung ist:<\/p>\n<pre><code>\u0394t \u221d h \/ [(2p + 1)|a|]<\/code><\/pre>\n<p>Die genaue Stabilit\u00e4tskonstante ist methodenabh\u00e4ngig. Es sollte durch Analyse, Dokumentation oder numerische Tests festgelegt und nicht als universell behandelt werden.<\/p>\n<p>Das Erh\u00f6hen der Polynomreihenfolge reduziert normalerweise den gr\u00f6\u00dften expliziten Zeitschritt. Hochwertige DG erfordert daher m\u00f6glicherweise mehr Schritte, auch wenn sie weniger Elemente ben\u00f6tigt.<\/p>\n<h2>DG f\u00fcr advektionsdominierte Probleme<\/h2>\n<p>Standard-kontinuierliche Galerkin-Methoden k\u00f6nnen Schwingungen entwickeln, wenn die Advektion die Diffusion dominiert. Stabilisierte kontinuierliche Methoden wie supg modifizieren die Testfunktionen, um die Kontrolle entlang von Streamlines hinzuzuf\u00fcgen.<\/p>\n<p>DG \u00fcbernimmt den Transport durch Schnittstellenfl\u00fcsse. Aufw\u00e4rtswind oder ungef\u00e4hre Riemann-Fl\u00fcsse f\u00fchren richtungsbewusste Stabilisierung ein und bewahren die lokale Erhaltung.<\/p>\n<table class=\"custom-table\">\n<tbody>\n<tr>\n<th>Aspekt<\/th>\n<th>DG mit Aufwindfluss<\/th>\n<th>supg<\/th>\n<\/tr>\n<tr>\n<td>L\u00f6sungsraum<\/td>\n<td>zwischen den Elementen diskontinuierlich<\/td>\n<td>normalerweise kontinuierlich<\/td>\n<\/tr>\n<tr>\n<td>Erhaltung<\/td>\n<td>Erhaltung des lokalen Elements<\/td>\n<td>h\u00e4ngt von der Formulierung ab<\/td>\n<\/tr>\n<tr>\n<td>Stabilisierung<\/td>\n<td>eingef\u00fchrt durch Schnittstellenfl\u00fcsse<\/td>\n<td>eingef\u00fchrt durch modifizierte Testfunktionen<\/td>\n<\/tr>\n<tr>\n<td>Diskontinuit\u00e4ten<\/td>\n<td>direkt dargestellt<\/td>\n<td>Normalerweise \u00fcber kontinuierliche Elemente verschmiert<\/td>\n<\/tr>\n<tr>\n<td>Anzahl der Unbekannten<\/td>\n<td>h\u00f6her, weil Schnittstellen keine Freiheitsgrade haben<\/td>\n<td>niedriger, weil benachbarte Elemente Knoten teilen<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>SUPG bleibt bei vielen reibungslosen Konvektionsproblemen wirksam. DG ist attraktiv, wenn lokale Konservierung, diskontinuierliche L\u00f6sungen, komplexe Netze oder elementbezogene Adaptivit\u00e4t zentrale Anforderungen sind.<\/p>\n<h2>DG vs. FVM und kontinuierliche FEM<\/h2>\n<table class=\"custom-table\">\n<tbody>\n<tr>\n<th>Funktion<\/th>\n<th>Finite-Volumen-Methode<\/th>\n<th>Kontinuierliche FEM<\/th>\n<th>Diskontinuierliche Galerkin<\/th>\n<\/tr>\n<tr>\n<td>Lokaler Naturschutz<\/td>\n<td>Stark<\/td>\n<td>Nicht automatisch in Standardformulierungen<\/td>\n<td>stark durch numerische Fl\u00fcsse<\/td>\n<\/tr>\n<tr>\n<td>Polynomflexibilit\u00e4t<\/td>\n<td>in der Regel in Grundschemata begrenzt<\/td>\n<td>Hoch<\/td>\n<td>Hoch<\/td>\n<\/tr>\n<tr>\n<td>Schnittstellendiskontinuit\u00e4ten<\/td>\n<td>Speicherung durch Zellmittelwerte und Rekonstruktion<\/td>\n<td>nicht direkt dargestellt<\/td>\n<td>nat\u00fcrlich dargestellt<\/td>\n<\/tr>\n<tr>\n<td>Unbekannte Z\u00e4hlung<\/td>\n<td>relativ niedrig<\/td>\n<td>durch gemeinsam genutzte Knoten reduziert<\/td>\n<td>h\u00f6her, weil Freiheitsgrade elementlokal sind<\/td>\n<\/tr>\n<tr>\n<td>Parallele Struktur<\/td>\n<td>Gut<\/td>\n<td>Erfordert eine globale Kopplung<\/td>\n<td>Starke Elementlokalit\u00e4t mit Gesichtskommunikation<\/td>\n<\/tr>\n<tr>\n<td>Implementierungsschwierigkeiten<\/td>\n<td>niedrig bis m\u00e4\u00dfig<\/td>\n<td>M\u00e4\u00dfig<\/td>\n<td>m\u00e4\u00dfig bis hoch<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Vorteile der DG-Methode<\/h2>\n<ul>\n<li>Die lokale Erhaltung ist in die Schnittstellenflussbilanz integriert.<\/li>\n<li>Der Polynomgrad kann zwischen den Elementen variieren.<\/li>\n<li>Diskontinuit\u00e4ten verletzen nicht den Approximationsraum.<\/li>\n<li>Elementberechnungen eignen sich gut f\u00fcr parallele Hardware.<\/li>\n<li>Komplexe und unstrukturierte Netze k\u00f6nnen unterst\u00fctzt werden.<\/li>\n<li>Netzverfeinerung und Polynomanreicherung k\u00f6nnen kombiniert werden.<\/li>\n<li>F\u00fcr verschiedene Gleichungen k\u00f6nnen unterschiedliche numerische Fl\u00fcsse ausgew\u00e4hlt werden.<\/li>\n<\/ul>\n<h2>Einschr\u00e4nkungen der DG<\/h2>\n<p>DG verwendet normalerweise mehr Freiheitsgrade als eine kontinuierliche Finite-Elemente-Methode mit demselben Polynomgrad, da benachbarte Elemente keine Schnittstellenwerte teilen.<\/p>\n<p>Die Methode erfordert auch eine sorgf\u00e4ltige Flussentw\u00fcrfe. Hyperbolische, elliptische und gemischte Gleichungen erfordern unterschiedliche Grenzfl\u00e4chenbehandlungen. Diffusionsoperatoren ben\u00f6tigen Formulierungen wie Innenstrafe, lokale DG oder verwandte Techniken.<\/p>\n<p>Explizite DG-Methoden h\u00f6herer Ordnung k\u00f6nnen restriktive Zeitschrittbeschr\u00e4nkungen haben. Nichtlineare Probleme k\u00f6nnen Begrenzer, entropiestabile Fl\u00fcsse, Positivit\u00e4tserhaltung oder k\u00fcnstliche Viskosit\u00e4t erfordern.<\/p>\n<p>Diese Funktionen machen die DG leistungsf\u00e4hig, aber schwieriger, sie richtig zu implementieren als grundlegende Finite-Differenz- oder Finite-Volumen-Schemata.<\/p>\n<h2>H\u00e4ufige Implementierungsfehler<\/h2>\n<p>Ein h\u00e4ufiger Fehler besteht darin, den physischen Fluss direkt an einer diskontinuierlichen Schnittstelle zu verwenden, ohne zu definieren, wie die beiden benachbarten Werte kombiniert werden sollen.<\/p>\n<p>Andere h\u00e4ufige Fehler sind:<\/p>\n<ul>\n<li>Verwenden des falschen Vorzeichens f\u00fcr den linken oder rechten Grenzbeitrag<\/li>\n<li>Anwenden inkonsistenter Normal-Vektor-Orientierungen<\/li>\n<li>Angenommen, die Massenmatrix ist immer diagonal<\/li>\n<li>Verwenden von Quadratur, die f\u00fcr nichtlineare Begriffe zu schwach ist<\/li>\n<li>Ignorieren der Polynom-Grad-Abh\u00e4ngigkeit der CFL-Grenze<\/li>\n<li>periodische oder physikalische Randbedingungen falsch anwenden<\/li>\n<li>Verwenden h\u00f6herwertiger Polynome in der N\u00e4he von Schocks ohne Begrenzer<\/li>\n<li>Testen nur visuelle Ausgabe anstelle von Konvergenz und Konservierung<\/li>\n<\/ul>\n<h2>So validieren Sie einen DG-Solver<\/h2>\n<p>Beginnen Sie mit einem Problem, das eine bekannte analytische L\u00f6sung hat. Eine periodische lineare Advektion ist n\u00fctzlich, da das genaue Profil einfach um <code>a t<\/code>  verschoben wird.<\/p>\n<p>F\u00fchren Sie den Solver mit mehreren Netzaufl\u00f6sungen aus und messen Sie eine Fehlernorm. F\u00fcr eine glatte L\u00f6sung sollte sich die beobachtete Konvergenzrate der theoretischen Reihenfolge der Methode n\u00e4hern.<\/p>\n<p>\u00dcberpr\u00fcfen Sie die Konservierung durch Integration der L\u00f6sung \u00fcber die Dom\u00e4ne. F\u00fcr die periodische Advektion sollte die Gesamtmasse nahezu konstant bleiben.<\/p>\n<p>Testen Sie sowohl positive als auch negative Geschwindigkeiten, um die Aufwindrichtung zu \u00fcberpr\u00fcfen. Konstante Anfangsdaten sollten konstant bleiben. Grenzzust\u00e4nde sollten auch separat getestet werden, bevor sie zu nichtlinearen Gleichungen \u00fcbergehen.<\/p>\n<h2>Wann w\u00e4hlen Sie DG<\/h2>\n<p>DG ist eine gute Wahl, wenn das Problem Wellen, Schocks, Materialschnittstellen oder transportdominiertes Verhalten enth\u00e4lt. Es ist auch n\u00fctzlich, wenn die lokale Konservierung unerl\u00e4sslich ist oder wenn die Simulation von der Genauigkeit hoher Ordnung auf einem unstrukturierten Netz profitiert.<\/p>\n<p>Eine grundlegende Methode des endlichen Volumens kann f\u00fcr Konservierungsprobleme niedriger Ordnung einfacher bleiben. Kontinuierliche endliche Elemente k\u00f6nnen f\u00fcr glatte elliptische oder strukturelle Probleme effizienter sein, wenn keine Unterbrechungen erwartet werden.<\/p>\n<p>Die numerische Methode sollte der mathematischen Struktur der PDE folgen und nicht die aktuelle Popularit\u00e4t oder die Verf\u00fcgbarkeit der Software.<\/p>\n<h2>Schlussfolgerung<\/h2>\n<p>Die diskontinuierliche Galerkin-Methode stellt die L\u00f6sung mit unabh\u00e4ngigen Polynomen in jedem Element dar. Seine schwache Formulierung erzeugt nat\u00fcrliche Grenzbegriffe, die durch numerische Fl\u00fcsse ersetzt werden. Diese Fl\u00fcsse steuern, wie sich Informationen zwischen Elementen bewegen und die vollst\u00e4ndige Methode, um die Mengen lokal zu erhalten.<\/p>\n<p>DG kombiniert Polynom-Approximation h\u00f6herer Ordnung, geometrische Flexibilit\u00e4t, Diskontinuit\u00e4tshandhabung und starke Elementlokalit\u00e4t. Diese Vorteile machen es wertvoll f\u00fcr Wellenausbreitung, hyperbolische Erhaltungsgesetze, konvektionsdominierte Systeme und gro\u00dfe parallele Simulationen.<\/p>\n<p>Das Verfahren f\u00fchrt auch zus\u00e4tzliche Komplexit\u00e4t ein. Fl\u00fcsse, Quadratur, Zeitschrittbeschr\u00e4nkungen, Begrenzer und Randbedingungen m\u00fcssen sorgf\u00e4ltig ausgew\u00e4hlt werden. Eine zuverl\u00e4ssige Implementierung sollte schrittweise entwickelt werden, beginnend mit einer einfachen linearen Gleichung und durch Konvergenz- und Konservierungstests verifiziert werden.<\/p>\n<p>F\u00fcr Forscher, die bereits endliche Volumen- oder Finite-Elemente-Methoden verstehen, bietet DG einen nat\u00fcrlichen n\u00e4chsten Schritt zu lokal konservativen PDE-Solvern in wissenschaftlicher Python.<\/p>\n<\/article>\n","protected":false,"raw":"<article>\n<p>Die diskontinuierliche Galerkin-Methode, die normalerweise auf DG verk\u00fcrzt wird, ist eine numerische Technik zur L\u00f6sung von partiellen Differentialgleichungen. Es kombiniert mehrere n\u00fctzliche Eigenschaften von Finite-Volumen- und Finite-Elemente-Methoden. Wie bei der Finite-Volumen-Methode kann die DG Mengen lokal durch sorgf\u00e4ltig definierte Flussmittel konservieren. Wie bei der Finite-Elemente-Methode unterst\u00fctzt es flexible Netze und polynomische Approximationen in jedem Element.<\/p>\n<p>Das definierende Merkmal von DG ist, dass die numerische L\u00f6sung nicht \u00fcber Elementgrenzen hinweg kontinuierlich bleiben muss. Jedes Element hat seine eigene Polynomdarstellung. Benachbarte Elemente kommunizieren \u00fcber numerische Fl\u00fcsse, die an ihren gemeinsamen Schnittstellen bewertet werden.<\/p>\n<p>Diese Struktur macht DG n\u00fctzlich f\u00fcr Wellenausbreitung, Transportgleichungen, komprimierbare Str\u00f6mung, Flachwassersysteme, Elektromagnete und Probleme, die Schocks oder Materialgrenzfl\u00e4chen enthalten. Es ist auch attraktiv f\u00fcr das parallele Rechnen, da viele Berechnungen in jedem Element unabh\u00e4ngig durchgef\u00fchrt werden k\u00f6nnen.<\/p>\n<h2>Wie DG sich von anderen Methoden unterscheidet<\/h2>\n<p>Eine Finite-Volumen-Methode speichert normalerweise einen Mittelwert in jeder Zelle und berechnet den Fluss einer konservierten Menge durch Zellfl\u00e4chen. Es bietet eine starke lokale Erhaltung, aber viele grundlegende endliche Volumenschemata verwenden r\u00e4umliche Approximationen mit relativ niedriger Ordnung.<\/p>\n<p>Eine kontinuierliche Finite-Elemente-Methode stellt die L\u00f6sung mit polynomialen Basisfunktionen dar, die sich kontinuierlich \u00fcber Elementgrenzen verbinden. Dies bietet geometrische Flexibilit\u00e4t und Approximation h\u00f6herer Ordnung, aber Diskontinuit\u00e4ten k\u00f6nnen ohne zus\u00e4tzliche Behandlung nicht direkt dargestellt werden.<\/p>\n<p>DG verwendet in jedem Element Polynom-Basisfunktionen und erlaubt gleichzeitig separate Werte auf beiden Seiten einer Schnittstelle. Numerische Fl\u00fcsse bestimmen, wie diese Werte interagieren. Das Verfahren bietet daher lokale Konservierung, Approximation hoher Ordnung und direkte Unterst\u00fctzung f\u00fcr diskontinuierliche L\u00f6sungen.<\/p>\n<h2>die kontinuierliche Advektionsgleichung<\/h2>\n<p>Die eindimensionale lineare Advektionsgleichung bietet eine klare Einf\u00fchrung in die DG:<\/p>\n<pre><code>\u2202u\/\u2202t + \u2202f(u)\/\u2202x = 0<\/code><\/pre>\n<p>F\u00fcr konstante Transportgeschwindigkeit <code>a<\/code> ist der physikalische Fluss:<\/p>\n<pre><code>f(u) = a u<\/code><\/pre>\n<p>Die Gleichung wird dann:<\/p>\n<pre><code>\u2202u\/\u2202t + a \u2202u\/\u2202x = 0<\/code><\/pre>\n<p>Dieses Modell beschreibt ein Profil, das sich durch die Dom\u00e4ne bewegt, ohne die Form zu \u00e4ndern. Wenn <code>a<\/code> positiv ist, wandern die Informationen von links nach rechts. Wenn es negativ ist, werden Informationen von rechts nach links \u00fcbertragen.<\/p>\n<h2>Unterteilen der Dom\u00e4ne in Elemente<\/h2>\n<p>Angenommen, die Dom\u00e4ne erstreckt sich von null bis <code>L<\/code>. DG teilt es in nicht \u00fcberlappende Elemente:<\/p>\n<pre><code>\u03a9 = K\u2081 \u222a K\u2082 \u222a ... \u222a K\u2099<\/code><\/pre>\n<p>Innerhalb jedes Elements wird die numerische L\u00f6sung durch ein Polynom dargestellt:<\/p>\n<pre><code>u\u2095(x, t) = \u03a3 U\u1d62(t) \u03c6\u1d62(x)<\/code><\/pre>\n<p>Die Funktionen <code>\u03c6\u1d62<\/code> sind lokale Basisfunktionen, und die Koeffizienten <code>U\u1d62<\/code> sind die Freiheitsgrade, die sich mit der Zeit \u00e4ndern.<\/p>\n<p>Ein Polynom von Grad Null speichert in jedem Element einen konstanten Wert. Eine lineare Approximation verwendet zwei lokale Freiheitsgrade in einer Dimension. Eine quadratische Approximation verwendet drei.<\/p>\n<p>Im Gegensatz zu kontinuierlichen finiten Elementen zwingt DG das Polynom von einem Element nicht, um das Polynom im n\u00e4chsten \u00fcbereinzustimmen. An einer gemeinsamen Schnittstelle kann die L\u00f6sung daher einen linken Wert und einen rechten Wert haben.<\/p>\n<h2>Ableiten der elementweise schwachen Form<\/h2>\n<p>Die GD-Formulierung beginnt mit der Multiplikation der ma\u00dfgeblichen Gleichung mit einer Testfunktion <code>v<\/code> und der Integration \u00fcber ein Element:<\/p>\n<pre><code>\u222bK (\u2202u\u2095\/\u2202t) v dx + \u222bK (\u2202f(u\u2095)\/\u2202x) v dx = 0<\/code><\/pre>\n<p>Die Integration nach Teilen verschiebt die r\u00e4umliche Ableitung vom physikalischen Fluss zur Testfunktion:<\/p>\n<pre><code>\u222bK (\u2202u\u2095\/\u2202t) v dx\n- \u222bK f(u\u2095) \u2202v\/\u2202x dx\n+ f(u\u2095) v |\u2202K = 0<\/code><\/pre>\n<p>Der Grenzbegriff ist wesentlich. Es beschreibt den Fluss durch die linke und rechte Seite des Elements.<\/p>\n<p>Da die DG-L\u00f6sung an einer Schnittstelle diskontinuierlich sein kann, ist der physikalische Fluss dort nicht eindeutig definiert. Ein Element liefert einen Wert von links, w\u00e4hrend sein Nachbar einen anderen Wert von rechts angibt. DG ersetzt den mehrdeutigen physikalischen Fluss durch einen numerischen Fluss:<\/p>\n<pre><code>f\u0302(u\u207b, u\u207a)<\/code><\/pre>\n<p>Die letzte schwache Form f\u00fcr ein Element ist:<\/p>\n<pre><code>\u222bK (\u2202u\u2095\/\u2202t) v dx\n- \u222bK f(u\u2095) \u2202v\/\u2202x dx\n+ f\u0302R vR\n- f\u0302L vL = 0<\/code><\/pre>\n<p>Diese Gleichung enth\u00e4lt einen element-lokalen Volumenbeitrag und zwei Schnittstellenbeitr\u00e4ge. Die numerischen Fl\u00fcsse sind die einzigen Begriffe, die benachbarte Elemente direkt verbinden.<\/p>\n<h2>Warum numerische Fl\u00fcsse wichtig sind<\/h2>\n<p>Ein numerischer Fluss muss konsistent sein. Wenn die beiden Schnittstellenwerte gleich sind, sollte der physikalische Fluss reproduziert werden:<\/p>\n<pre><code>f\u0302(u, u) = f(u)<\/code><\/pre>\n<p>Es muss auch eine angemessene Stabilit\u00e4t bieten. Bei Transportproblemen sollte der Fluss die Richtung ber\u00fccksichtigen, in die sich Informationen bewegen.<\/p>\n<p>Die Flusswahl steuert, wie stark benachbarte Elemente interagieren und wie viel numerische Dissipation eingef\u00fchrt wird. Ein ungeeigneter Fluss kann Schwingungen, \u00fcberm\u00e4\u00dfige Gl\u00e4ttung oder falsche Wellengeschwindigkeiten verursachen.<\/p>\n<h2>Aufwind-Fluss<\/h2>\n<p>F\u00fcr die lineare Advektion mit positiver Geschwindigkeit kommt die Information von der linken Seite einer Schnittstelle. Der Aufwindfluss ist daher:<\/p>\n<pre><code>f\u0302(u\u207b, u\u207a) = a u\u207b    when a &gt; 0<\/code><\/pre>\n<p>F\u00fcr die negative Geschwindigkeit kommen Informationen von rechts:<\/p>\n<pre><code>f\u0302(u\u207b, u\u207a) = a u\u207a    when a &lt; 0<\/code><\/pre>\n<p>Ein kompakter Ausdruck ist:<\/p>\n<pre><code>f\u0302 = a\u207au\u207b + a\u207bu\u207a\n\na\u207a = max(a, 0)\na\u207b = min(a, 0)<\/code><\/pre>\n<p>Der Aufwindfluss ist einfach, stabil und weit verbreitet. Es f\u00fchrt eine gewisse numerische Dissipation ein, aber die Menge nimmt im Allgemeinen ab, wenn das Netz verfeinert wird oder die Polynomreihenfolge zunimmt.<\/p>\n<h2>Lokaler LAX-FRIEDRICHS FLUX<\/h2>\n<p>Der lokale Lax-Friedrichs-Fluss, auch Rusanov-Fluss genannt, wird h\u00e4ufig f\u00fcr nichtlineare Erhaltungsgesetze verwendet:<\/p>\n<pre><code>f\u0302(u\u207b, u\u207a)\n= 0.5[f(u\u207b) + f(u\u207a)]\n- 0.5 \u03b1(u\u207a - u\u207b)<\/code><\/pre>\n<p>Der Parameter <code>\u03b1<\/code> ist eine Sch\u00e4tzung der gr\u00f6\u00dften Kennzahl an der Schnittstelle. F\u00fcr konstante lineare Advektion ist es normalerweise <code>|a|<\/code> .<\/p>\n<p>Der erste Teil mittelt die physikalischen Fl\u00fcsse. Der zweite Teil f\u00fcgt eine Dissipation hinzu, die hilft, instabile Schnittstellenmodi zu steuern. Dieser Fluss ist robust und einfach zu implementieren, kann jedoch diffusiver sein als ein spezialisierter ungef\u00e4hrer Riemann-Solver.<\/p>\n<h2>Riemann-Solver<\/h2>\n<p>Nichtlineare hyperbolische Systeme k\u00f6nnen mehrere Wellen enthalten, die sich mit unterschiedlichen Geschwindigkeiten bewegen. Beispiele sind die Euler-Gleichungen f\u00fcr die komprimierbare Str\u00f6mung und die Flachwassergleichungen.<\/p>\n<p>Ein Riemann-Solver untersucht die linken und rechten Zust\u00e4nde an einer Grenzfl\u00e4che und sch\u00e4tzt die Wellen, die durch ihre Wechselwirkung erzeugt werden. Exakte Riemann-Solver k\u00f6nnen teuer sein, daher verwenden praktische DG-Codes \u00fcblicherweise ungef\u00e4hre Methoden wie Roe, HLL, HLLC oder Rusanov.<\/p>\n<p>Die richtige Wahl h\u00e4ngt von der Gleichung, der gew\u00fcnschten Genauigkeit, den Robustheitsanforderungen und der F\u00e4higkeit ab, wichtige physikalische Eigenschaften beizubehalten.<\/p>\n<h2>Das halbdiskrete Matrixsystem<\/h2>\n<p>Nach der Auswahl von Basis- und Testfunktionen kann die schwache Form als System gew\u00f6hnlicher Differentialgleichungen ausgedr\u00fcckt werden:<\/p>\n<pre><code>M dU\/dt = R(U)<\/code><\/pre>\n<p>Die Massenmatrix enth\u00e4lt Integrale von Basisfunktionsprodukten:<\/p>\n<pre><code>M\u1d62\u2c7c = \u222bK \u03c6\u1d62 \u03c6\u2c7c dx<\/code><\/pre>\n<p>Das Residuum <code>R(U)<\/code> umfasst die Volumenableitung und den numerischen Flussbeitrag.<\/p>\n<p>Da die DG-Basisfunktionen zu einzelnen Elementen geh\u00f6ren, hat die globale Massenmatrix eine Blockdiagonalstruktur. Jedes Element tr\u00e4gt einen kleinen unabh\u00e4ngigen Block bei. Diese Bl\u00f6cke k\u00f6nnen separat invertiert werden.<\/p>\n<p>Die Massenmatrix ist nicht automatisch diagonal f\u00fcr jede Basis- und Integrationsregel. Es wird diagonal oder ann\u00e4hernd diagonal in g\u00e4ngigen Knoten-DG-Formulierungen, die passende Interpolations- und Quadraturpunkte wie Gauss-Lobatto-Kollokation verwenden. Andere Formulierungen verwenden kleine dichte Elementmatrizen.<\/p>\n<h2>Auswahl von Basisfunktionen und Quadratur<\/h2>\n<p>DG-Methoden verwenden \u00fcblicherweise modale oder nodale Polynombasen. Eine modale Basis stellt die L\u00f6sung durch Polynommodi dar, die h\u00e4ufig auf Legendre-Polynomen basieren. Eine Knotenbasis speichert L\u00f6sungswerte an Interpolationsknoten im Element.<\/p>\n<p>Knotenformulierungen sind praktisch, da Schnittstellenwerte direkt erhalten werden k\u00f6nnen, wenn Knoten an Elementgrenzen platziert werden. Gauss-Lobatto-Punkte umfassen beide Endpunkte des Referenzelements, w\u00e4hrend Gau\u00df-Punkte darin bleiben.<\/p>\n<p>Die numerische Quadratur bewertet die Integrale in der schwachen Form. Die Quadraturregel muss f\u00fcr den Polynomgrad und alle nichtlinearen Terme ausreichend genau sein. Unzureichende Quadratur kann zu Aliasing-Fehlern und Instabilit\u00e4t f\u00fchren.<\/p>\n<h2>Polynomreihenfolge und Genauigkeit<\/h2>\n<table class=\"custom-table\">\n<tbody><tr>\n<th>Polynomgrad<\/th>\n<th>Lokale Freiheitsgrade in 1D<\/th>\n<th>Typische Rolle<\/th>\n<\/tr>\n<tr>\n<td><code>p = 0<\/code><\/td>\n<td>1<\/td>\n<td>St\u00fcckweise konstante Approximation \u00e4hnlich einer Finite-Volumen-Methode erster Ordnung<\/td>\n<\/tr>\n<tr>\n<td><code>p = 1<\/code><\/td>\n<td>2<\/td>\n<td>Praktischer Ausgangspunkt mit linearer Variation innerhalb jedes Elements<\/td>\n<\/tr>\n<tr>\n<td><code>p = 2<\/code><\/td>\n<td>3<\/td>\n<td>H\u00f6here Genauigkeit f\u00fcr reibungslose L\u00f6sungen bei moderaten Mehrkosten<\/td>\n<\/tr>\n<tr>\n<td><code>p = 3<\/code><\/td>\n<td>4<\/td>\n<td>Approximation hoher Ordnung, die eine strengere Stabilit\u00e4t und Quadraturkontrolle erfordert<\/td>\n<\/tr>\n<\/tbody><\/table>\n<p>F\u00fcr ausreichend reibungslose L\u00f6sungen kann ein gut ausgelegtes DG-Verfahren einen Fehler proportional zu ungef\u00e4hr <code>h^(p+1)<\/code>  erzielen. Eine Erh\u00f6hung des Polynomgrads kann daher die Genauigkeit verbessern, ohne mehr Elemente hinzuzuf\u00fcgen.<\/p>\n<p>H\u00f6here Ordnung ist nicht immer besser. Schocks und scharfe Diskontinuit\u00e4ten k\u00f6nnen Schwingungen in der N\u00e4he des Sprunges verursachen. Begrenzer, k\u00fcnstliche Viskosit\u00e4t, Filterung oder Schockerfassungstechniken k\u00f6nnen erforderlich sein.<\/p>\n<h2>Ein linearer DG-Solver in Numpy<\/h2>\n<p>Das folgende Lehrbeispiel implementiert eine lineare <code>p = 1<\/code>-DG-Methode f\u00fcr die periodische eindimensionale Advektion. Jedes Element enth\u00e4lt zwei Freiheitsgrade an seinen Endpunkten.<\/p>\n<p>Die Implementierung verwendet das Element Schwache Form, einen Aufwindfluss und eine dritte Ordnung, die stabilit\u00e4tserhaltende Runge-Kutta-Methode.<\/p>\n<pre><code class=\"language-python\">import numpy as np\n\n# Domain and model parameters\nlength = 1.0\nnumber_of_elements = 80\nvelocity = 1.0\nfinal_time = 0.5\n\nelement_width = length \/ number_of_elements\njacobian = element_width \/ 2.0\n\n# Reference-element mass matrix for linear basis functions\nmass_reference = np.array([\n    [2.0 \/ 3.0, 1.0 \/ 3.0],\n    [1.0 \/ 3.0, 2.0 \/ 3.0]\n])\n\nmass_matrix = jacobian * mass_reference\ninverse_mass = np.linalg.inv(mass_matrix)\n\n# S[i, j] = integral(phi_j * derivative(phi_i)) on [-1, 1]\nvolume_matrix = np.array([\n    [-0.5, -0.5],\n    [ 0.5,  0.5]\n])\n\nleft_vector = np.array([1.0, 0.0])\nright_vector = np.array([0.0, 1.0])\n\n# Physical coordinates of local DG nodes\nleft_edges = np.arange(number_of_elements) * element_width\nright_edges = left_edges + element_width\ncoordinates = np.column_stack((left_edges, right_edges))\n\n# Smooth periodic initial condition\nsolution = (\n    0.5\n    + 0.5 * np.sin(2.0 * np.pi * coordinates \/ length)\n)\n\ndef upwind_flux(left_state, right_state, speed):\n    positive_speed = max(speed, 0.0)\n    negative_speed = min(speed, 0.0)\n\n    return (\n        positive_speed * left_state\n        + negative_speed * right_state\n    )\n\ndef spatial_residual(values):\n    residual = np.zeros_like(values)\n\n    for element in range(number_of_elements):\n        left_neighbor = (element - 1) % number_of_elements\n        right_neighbor = (element + 1) % number_of_elements\n\n        # States on the left interface\n        left_inside = values[element, 0]\n        left_outside = values[left_neighbor, 1]\n\n        # States on the right interface\n        right_inside = values[element, 1]\n        right_outside = values[right_neighbor, 0]\n\n        flux_left = upwind_flux(\n            left_outside,\n            left_inside,\n            velocity\n        )\n\n        flux_right = upwind_flux(\n            right_inside,\n            right_outside,\n            velocity\n        )\n\n        local_rhs = (\n            velocity * volume_matrix @ values[element]\n            + flux_left * left_vector\n            - flux_right * right_vector\n        )\n\n        residual[element] = inverse_mass @ local_rhs\n\n    return residual\n\n# Conservative time-step estimate\ntime_step = 0.1 * element_width \/ abs(velocity)\ncurrent_time = 0.0\n\nwhile current_time &lt; final_time:\n    dt = min(time_step, final_time - current_time)\n\n    # SSP-RK3 stage 1\n    stage_one = solution + dt * spatial_residual(solution)\n\n    # SSP-RK3 stage 2\n    stage_two = (\n        0.75 * solution\n        + 0.25 * (\n            stage_one\n            + dt * spatial_residual(stage_one)\n        )\n    )\n\n    # SSP-RK3 stage 3\n    solution = (\n        (1.0 \/ 3.0) * solution\n        + (2.0 \/ 3.0) * (\n            stage_two\n            + dt * spatial_residual(stage_two)\n        )\n    )\n\n    current_time += dt\n\nprint(\"Simulation completed\")\nprint(\"Final time:\", current_time)\nprint(\"Minimum value:\", solution.min())\nprint(\"Maximum value:\", solution.max())<\/code><\/pre>\n<p>Dieses Beispiel ist absichtlich auf ein glattes lineares Problem beschr\u00e4nkt. Produktions-DG-Solver ben\u00f6tigen au\u00dferdem robuste Grenzbehandlungen, mehrdimensionale Zuordnungen, genaue Quadratur, nichtlineare Flussmittelbewertung, Begrenzer und eine erweiterte Zeitintegration.<\/p>\n<h2>Zeitintegration und die CFL-Bedingung<\/h2>\n<p>Die r\u00e4umliche DG-Diskretisierung schafft ein System gew\u00f6hnlicher Differentialgleichungen. Eine explizite Methode wie Runge-Kutta kann dieses System dann rechtzeitig voranbringen.<\/p>\n<p>Der maximale stabile Zeitschritt h\u00e4ngt von der Wellengeschwindigkeit, der Elementgr\u00f6\u00dfe, dem Polynomgrad, dem Fluss und dem Zeitintegrator ab. Eine g\u00e4ngige Skalierung ist:<\/p>\n<pre><code>\u0394t \u221d h \/ [(2p + 1)|a|]<\/code><\/pre>\n<p>Die genaue Stabilit\u00e4tskonstante ist methodenabh\u00e4ngig. Es sollte durch Analyse, Dokumentation oder numerische Tests festgelegt und nicht als universell behandelt werden.<\/p>\n<p>Das Erh\u00f6hen der Polynomreihenfolge reduziert normalerweise den gr\u00f6\u00dften expliziten Zeitschritt. Hochwertige DG erfordert daher m\u00f6glicherweise mehr Schritte, auch wenn sie weniger Elemente ben\u00f6tigt.<\/p>\n<h2>DG f\u00fcr advektionsdominierte Probleme<\/h2>\n<p>Standard-kontinuierliche Galerkin-Methoden k\u00f6nnen Schwingungen entwickeln, wenn die Advektion die Diffusion dominiert. Stabilisierte kontinuierliche Methoden wie supg modifizieren die Testfunktionen, um die Kontrolle entlang von Streamlines hinzuzuf\u00fcgen.<\/p>\n<p>DG \u00fcbernimmt den Transport durch Schnittstellenfl\u00fcsse. Aufw\u00e4rtswind oder ungef\u00e4hre Riemann-Fl\u00fcsse f\u00fchren richtungsbewusste Stabilisierung ein und bewahren die lokale Erhaltung.<\/p>\n<table class=\"custom-table\">\n<tbody><tr>\n<th>Aspekt<\/th>\n<th>DG mit Aufwindfluss<\/th>\n<th>supg<\/th>\n<\/tr>\n<tr>\n<td>L\u00f6sungsraum<\/td>\n<td>zwischen den Elementen diskontinuierlich<\/td>\n<td>normalerweise kontinuierlich<\/td>\n<\/tr>\n<tr>\n<td>Erhaltung<\/td>\n<td>Erhaltung des lokalen Elements<\/td>\n<td>h\u00e4ngt von der Formulierung ab<\/td>\n<\/tr>\n<tr>\n<td>Stabilisierung<\/td>\n<td>eingef\u00fchrt durch Schnittstellenfl\u00fcsse<\/td>\n<td>eingef\u00fchrt durch modifizierte Testfunktionen<\/td>\n<\/tr>\n<tr>\n<td>Diskontinuit\u00e4ten<\/td>\n<td>direkt dargestellt<\/td>\n<td>Normalerweise \u00fcber kontinuierliche Elemente verschmiert<\/td>\n<\/tr>\n<tr>\n<td>Anzahl der Unbekannten<\/td>\n<td>h\u00f6her, weil Schnittstellen keine Freiheitsgrade haben<\/td>\n<td>niedriger, weil benachbarte Elemente Knoten teilen<\/td>\n<\/tr>\n<\/tbody><\/table>\n<p>SUPG bleibt bei vielen reibungslosen Konvektionsproblemen wirksam. DG ist attraktiv, wenn lokale Konservierung, diskontinuierliche L\u00f6sungen, komplexe Netze oder elementbezogene Adaptivit\u00e4t zentrale Anforderungen sind.<\/p>\n<h2>DG vs. FVM und kontinuierliche FEM<\/h2>\n<table class=\"custom-table\">\n<tbody><tr>\n<th>Funktion<\/th>\n<th>Finite-Volumen-Methode<\/th>\n<th>Kontinuierliche FEM<\/th>\n<th>Diskontinuierliche Galerkin<\/th>\n<\/tr>\n<tr>\n<td>Lokaler Naturschutz<\/td>\n<td>Stark<\/td>\n<td>Nicht automatisch in Standardformulierungen<\/td>\n<td>stark durch numerische Fl\u00fcsse<\/td>\n<\/tr>\n<tr>\n<td>Polynomflexibilit\u00e4t<\/td>\n<td>in der Regel in Grundschemata begrenzt<\/td>\n<td>Hoch<\/td>\n<td>Hoch<\/td>\n<\/tr>\n<tr>\n<td>Schnittstellendiskontinuit\u00e4ten<\/td>\n<td>Speicherung durch Zellmittelwerte und Rekonstruktion<\/td>\n<td>nicht direkt dargestellt<\/td>\n<td>nat\u00fcrlich dargestellt<\/td>\n<\/tr>\n<tr>\n<td>Unbekannte Z\u00e4hlung<\/td>\n<td>relativ niedrig<\/td>\n<td>durch gemeinsam genutzte Knoten reduziert<\/td>\n<td>h\u00f6her, weil Freiheitsgrade elementlokal sind<\/td>\n<\/tr>\n<tr>\n<td>Parallele Struktur<\/td>\n<td>Gut<\/td>\n<td>Erfordert eine globale Kopplung<\/td>\n<td>Starke Elementlokalit\u00e4t mit Gesichtskommunikation<\/td>\n<\/tr>\n<tr>\n<td>Implementierungsschwierigkeiten<\/td>\n<td>niedrig bis m\u00e4\u00dfig<\/td>\n<td>M\u00e4\u00dfig<\/td>\n<td>m\u00e4\u00dfig bis hoch<\/td>\n<\/tr>\n<\/tbody><\/table>\n<h2>Vorteile der DG-Methode<\/h2>\n<ul>\n<li>Die lokale Erhaltung ist in die Schnittstellenflussbilanz integriert.<\/li>\n<li>Der Polynomgrad kann zwischen den Elementen variieren.<\/li>\n<li>Diskontinuit\u00e4ten verletzen nicht den Approximationsraum.<\/li>\n<li>Elementberechnungen eignen sich gut f\u00fcr parallele Hardware.<\/li>\n<li>Komplexe und unstrukturierte Netze k\u00f6nnen unterst\u00fctzt werden.<\/li>\n<li>Netzverfeinerung und Polynomanreicherung k\u00f6nnen kombiniert werden.<\/li>\n<li>F\u00fcr verschiedene Gleichungen k\u00f6nnen unterschiedliche numerische Fl\u00fcsse ausgew\u00e4hlt werden.<\/li>\n<\/ul>\n<h2>Einschr\u00e4nkungen der DG<\/h2>\n<p>DG verwendet normalerweise mehr Freiheitsgrade als eine kontinuierliche Finite-Elemente-Methode mit demselben Polynomgrad, da benachbarte Elemente keine Schnittstellenwerte teilen.<\/p>\n<p>Die Methode erfordert auch eine sorgf\u00e4ltige Flussentw\u00fcrfe. Hyperbolische, elliptische und gemischte Gleichungen erfordern unterschiedliche Grenzfl\u00e4chenbehandlungen. Diffusionsoperatoren ben\u00f6tigen Formulierungen wie Innenstrafe, lokale DG oder verwandte Techniken.<\/p>\n<p>Explizite DG-Methoden h\u00f6herer Ordnung k\u00f6nnen restriktive Zeitschrittbeschr\u00e4nkungen haben. Nichtlineare Probleme k\u00f6nnen Begrenzer, entropiestabile Fl\u00fcsse, Positivit\u00e4tserhaltung oder k\u00fcnstliche Viskosit\u00e4t erfordern.<\/p>\n<p>Diese Funktionen machen die DG leistungsf\u00e4hig, aber schwieriger, sie richtig zu implementieren als grundlegende Finite-Differenz- oder Finite-Volumen-Schemata.<\/p>\n<h2>H\u00e4ufige Implementierungsfehler<\/h2>\n<p>Ein h\u00e4ufiger Fehler besteht darin, den physischen Fluss direkt an einer diskontinuierlichen Schnittstelle zu verwenden, ohne zu definieren, wie die beiden benachbarten Werte kombiniert werden sollen.<\/p>\n<p>Andere h\u00e4ufige Fehler sind:<\/p>\n<ul>\n<li>Verwenden des falschen Vorzeichens f\u00fcr den linken oder rechten Grenzbeitrag<\/li>\n<li>Anwenden inkonsistenter Normal-Vektor-Orientierungen<\/li>\n<li>Angenommen, die Massenmatrix ist immer diagonal<\/li>\n<li>Verwenden von Quadratur, die f\u00fcr nichtlineare Begriffe zu schwach ist<\/li>\n<li>Ignorieren der Polynom-Grad-Abh\u00e4ngigkeit der CFL-Grenze<\/li>\n<li>periodische oder physikalische Randbedingungen falsch anwenden<\/li>\n<li>Verwenden h\u00f6herwertiger Polynome in der N\u00e4he von Schocks ohne Begrenzer<\/li>\n<li>Testen nur visuelle Ausgabe anstelle von Konvergenz und Konservierung<\/li>\n<\/ul>\n<h2>So validieren Sie einen DG-Solver<\/h2>\n<p>Beginnen Sie mit einem Problem, das eine bekannte analytische L\u00f6sung hat. Eine periodische lineare Advektion ist n\u00fctzlich, da das genaue Profil einfach um <code>a t<\/code>  verschoben wird.<\/p>\n<p>F\u00fchren Sie den Solver mit mehreren Netzaufl\u00f6sungen aus und messen Sie eine Fehlernorm. F\u00fcr eine glatte L\u00f6sung sollte sich die beobachtete Konvergenzrate der theoretischen Reihenfolge der Methode n\u00e4hern.<\/p>\n<p>\u00dcberpr\u00fcfen Sie die Konservierung durch Integration der L\u00f6sung \u00fcber die Dom\u00e4ne. F\u00fcr die periodische Advektion sollte die Gesamtmasse nahezu konstant bleiben.<\/p>\n<p>Testen Sie sowohl positive als auch negative Geschwindigkeiten, um die Aufwindrichtung zu \u00fcberpr\u00fcfen. Konstante Anfangsdaten sollten konstant bleiben. Grenzzust\u00e4nde sollten auch separat getestet werden, bevor sie zu nichtlinearen Gleichungen \u00fcbergehen.<\/p>\n<h2>Wann w\u00e4hlen Sie DG<\/h2>\n<p>DG ist eine gute Wahl, wenn das Problem Wellen, Schocks, Materialschnittstellen oder transportdominiertes Verhalten enth\u00e4lt. Es ist auch n\u00fctzlich, wenn die lokale Konservierung unerl\u00e4sslich ist oder wenn die Simulation von der Genauigkeit hoher Ordnung auf einem unstrukturierten Netz profitiert.<\/p>\n<p>Eine grundlegende Methode des endlichen Volumens kann f\u00fcr Konservierungsprobleme niedriger Ordnung einfacher bleiben. Kontinuierliche endliche Elemente k\u00f6nnen f\u00fcr glatte elliptische oder strukturelle Probleme effizienter sein, wenn keine Unterbrechungen erwartet werden.<\/p>\n<p>Die numerische Methode sollte der mathematischen Struktur der PDE folgen und nicht die aktuelle Popularit\u00e4t oder die Verf\u00fcgbarkeit der Software.<\/p>\n<h2>Schlussfolgerung<\/h2>\n<p>Die diskontinuierliche Galerkin-Methode stellt die L\u00f6sung mit unabh\u00e4ngigen Polynomen in jedem Element dar. Seine schwache Formulierung erzeugt nat\u00fcrliche Grenzbegriffe, die durch numerische Fl\u00fcsse ersetzt werden. Diese Fl\u00fcsse steuern, wie sich Informationen zwischen Elementen bewegen und die vollst\u00e4ndige Methode, um die Mengen lokal zu erhalten.<\/p>\n<p>DG kombiniert Polynom-Approximation h\u00f6herer Ordnung, geometrische Flexibilit\u00e4t, Diskontinuit\u00e4tshandhabung und starke Elementlokalit\u00e4t. Diese Vorteile machen es wertvoll f\u00fcr Wellenausbreitung, hyperbolische Erhaltungsgesetze, konvektionsdominierte Systeme und gro\u00dfe parallele Simulationen.<\/p>\n<p>Das Verfahren f\u00fchrt auch zus\u00e4tzliche Komplexit\u00e4t ein. Fl\u00fcsse, Quadratur, Zeitschrittbeschr\u00e4nkungen, Begrenzer und Randbedingungen m\u00fcssen sorgf\u00e4ltig ausgew\u00e4hlt werden. Eine zuverl\u00e4ssige Implementierung sollte schrittweise entwickelt werden, beginnend mit einer einfachen linearen Gleichung und durch Konvergenz- und Konservierungstests verifiziert werden.<\/p>\n<p>F\u00fcr Forscher, die bereits endliche Volumen- oder Finite-Elemente-Methoden verstehen, bietet DG einen nat\u00fcrlichen n\u00e4chsten Schritt zu lokal konservativen PDE-Solvern in wissenschaftlicher Python.<\/p>\n<\/article>\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\"> 9<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>Schritt-f\u00fcr-Schritt-Ableitung der diskontinuierlichen Galerkin-Methode, numerischer Flussvergleich und eine vollst\u00e4ndige 1D-Implementierung in Python. Erfahren Sie, wann die DG FVM und Continuous FEM \u00fcbertrifft.<\/p>\n","protected":false,"raw":"Schritt-f\u00fcr-Schritt-Ableitung der diskontinuierlichen Galerkin-Methode, numerischer Flussvergleich und eine vollst\u00e4ndige 1D-Implementierung in Python. Erfahren Sie, wann die DG FVM und Continuous FEM \u00fcbertrifft."},"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=465","iawp_total_views":0,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-870","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.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Diskontinuierliche Galerkin-Methode in Python<\/title>\n<meta name=\"description\" content=\"Erfahren Sie, wie DG-Methoden schwache Formen, numerische Fl\u00fcsse, Polynombasen und lokale Konservierung verwenden, um PDEs in wissenschaftlichen Python zu l\u00f6sen.\" \/>\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\/discontinuous-galerkin-method-tutorial\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Diskontinuierliche Galerkin-Methode in Python\" \/>\n<meta property=\"og:description\" content=\"Erfahren Sie, wie DG-Methoden schwache Formen, numerische Fl\u00fcsse, Polynombasen und lokale Konservierung verwenden, um PDEs in wissenschaftlichen Python zu l\u00f6sen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/de\/discontinuous-galerkin-method-tutorial\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-30T12:23:27+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\\\/discontinuous-galerkin-method-tutorial\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/discontinuous-galerkin-method-tutorial\\\/\"},\"author\":{\"name\":\"Tomas Delgado\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"headline\":\"Discontinuous Galerkin-Methoden-Tutorial: Ableitung, Fl\u00fcsse und Python-Implementierung\",\"datePublished\":\"2026-07-30T12:23:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/discontinuous-galerkin-method-tutorial\\\/\"},\"wordCount\":2261,\"commentCount\":0,\"articleSection\":[\"FIPY: Dokumentation, Beispiele &amp; Entwicklung\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/de\\\/discontinuous-galerkin-method-tutorial\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/discontinuous-galerkin-method-tutorial\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/de\\\/discontinuous-galerkin-method-tutorial\\\/\",\"name\":\"Diskontinuierliche Galerkin-Methode in Python\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-07-30T12:23:27+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"description\":\"Erfahren Sie, wie DG-Methoden schwache Formen, numerische Fl\u00fcsse, Polynombasen und lokale Konservierung verwenden, um PDEs in wissenschaftlichen Python zu l\u00f6sen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/discontinuous-galerkin-method-tutorial\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/de\\\/discontinuous-galerkin-method-tutorial\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/discontinuous-galerkin-method-tutorial\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Discontinuous Galerkin-Methoden-Tutorial: Ableitung, Fl\u00fcsse 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":"Diskontinuierliche Galerkin-Methode in Python","description":"Erfahren Sie, wie DG-Methoden schwache Formen, numerische Fl\u00fcsse, Polynombasen und lokale Konservierung verwenden, um PDEs in wissenschaftlichen Python zu l\u00f6sen.","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\/discontinuous-galerkin-method-tutorial\/","og_locale":"de_DE","og_type":"article","og_title":"Diskontinuierliche Galerkin-Methode in Python","og_description":"Erfahren Sie, wie DG-Methoden schwache Formen, numerische Fl\u00fcsse, Polynombasen und lokale Konservierung verwenden, um PDEs in wissenschaftlichen Python zu l\u00f6sen.","og_url":"https:\/\/matforge.org\/de\/discontinuous-galerkin-method-tutorial\/","og_site_name":"matforge.org","article_published_time":"2026-07-30T12:23:27+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\/discontinuous-galerkin-method-tutorial\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/de\/discontinuous-galerkin-method-tutorial\/"},"author":{"name":"Tomas Delgado","@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"headline":"Discontinuous Galerkin-Methoden-Tutorial: Ableitung, Fl\u00fcsse und Python-Implementierung","datePublished":"2026-07-30T12:23:27+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/de\/discontinuous-galerkin-method-tutorial\/"},"wordCount":2261,"commentCount":0,"articleSection":["FIPY: Dokumentation, Beispiele &amp; Entwicklung"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/de\/discontinuous-galerkin-method-tutorial\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/de\/discontinuous-galerkin-method-tutorial\/","url":"https:\/\/matforge.org\/de\/discontinuous-galerkin-method-tutorial\/","name":"Diskontinuierliche Galerkin-Methode in Python","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-07-30T12:23:27+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"description":"Erfahren Sie, wie DG-Methoden schwache Formen, numerische Fl\u00fcsse, Polynombasen und lokale Konservierung verwenden, um PDEs in wissenschaftlichen Python zu l\u00f6sen.","breadcrumb":{"@id":"https:\/\/matforge.org\/de\/discontinuous-galerkin-method-tutorial\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/de\/discontinuous-galerkin-method-tutorial\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/de\/discontinuous-galerkin-method-tutorial\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/de\/"},{"@type":"ListItem","position":2,"name":"Discontinuous Galerkin-Methoden-Tutorial: Ableitung, Fl\u00fcsse 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\/870","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=870"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/870\/revisions"}],"predecessor-version":[{"id":1038,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/870\/revisions\/1038"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}