<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Finite Differenzen Wärmegleichung]]></title><description><![CDATA[<p>Hat jemand einen Link zu einer guten Implementirung der Wärmeleitungsgleichung mittels finiter Differenzen in C++ parat?</p>
<p>Ich dachte iegentlich, das wäre ein Standardproblem mit zig Varianten im Netz, finde aber wirklich nichts gutes.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/333230/finite-differenzen-wärmegleichung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 06:46:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/333230.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Jun 2015 19:13:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Finite Differenzen Wärmegleichung on Fri, 19 Jun 2015 19:13:20 GMT]]></title><description><![CDATA[<p>Hat jemand einen Link zu einer guten Implementirung der Wärmeleitungsgleichung mittels finiter Differenzen in C++ parat?</p>
<p>Ich dachte iegentlich, das wäre ein Standardproblem mit zig Varianten im Netz, finde aber wirklich nichts gutes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457250</guid><dc:creator><![CDATA[niederling]]></dc:creator><pubDate>Fri, 19 Jun 2015 19:13:20 GMT</pubDate></item><item><title><![CDATA[Reply to Finite Differenzen Wärmegleichung on Fri, 19 Jun 2015 19:16:52 GMT]]></title><description><![CDATA[<p>Wenn möglich, wäre 2D oder 3D optimal.</p>
<p>Vielen Dank fürs Lesen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457251</guid><dc:creator><![CDATA[niederling]]></dc:creator><pubDate>Fri, 19 Jun 2015 19:16:52 GMT</pubDate></item><item><title><![CDATA[Reply to Finite Differenzen Wärmegleichung on Fri, 19 Jun 2015 20:25:09 GMT]]></title><description><![CDATA[<p>Das ist immernoch sehr allgemein. Was soll denn der Code können? Welches Koordinatensystem (kartesisch, zylinder...)? Ist dein Rechengitter strukturiert? Welches Dateiformat hat es? Welche Zeitdiskretisierungen brauchst du? Implizit/Explizit? Welche Diskretisierung für den Diffusionsterm? Gibts nen Advektionsterm? Wovon ist der Quellterm abhängig? Welche Randbedingungen brauchst du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457255</guid><dc:creator><![CDATA[asdfasd]]></dc:creator><pubDate>Fri, 19 Jun 2015 20:25:09 GMT</pubDate></item><item><title><![CDATA[Reply to Finite Differenzen Wärmegleichung on Fri, 19 Jun 2015 20:34:23 GMT]]></title><description><![CDATA[<p>Hey!</p>
<p>Das ganze sol nicht praxisrelevant eingesetzt werden, sondern nur mir als Grundlage für einige Spielereien und Erweiterungen dienen.</p>
<p>Ein normales rechteckiges Gitter oder Einheitsquadrat als Gebiet in kartesischen Koordianten sowie ein 5-Punktstern Laplace reichen mir vollkommen aus. Advektionsterm muss nicht sein, Randbedingung kann beliebig sein.</p>
<p>Mir reicht also das einfachste vom einfachen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457258</guid><dc:creator><![CDATA[niederling]]></dc:creator><pubDate>Fri, 19 Jun 2015 20:34:23 GMT</pubDate></item><item><title><![CDATA[Reply to Finite Differenzen Wärmegleichung on Fri, 19 Jun 2015 21:33:43 GMT]]></title><description><![CDATA[<p>Wenn man einige Vereinfachungen annimmt, ist es schnell gemacht. Annahmen:</p>
<ul>
<li>Der Diffusionskoeffizient ist konstant</li>
<li>Das Gitter ist äquidistant und kartesisch</li>
<li>Kein Quellterm</li>
</ul>
<p>Den Code habe ich gerade aus dem Kopf geschrieben. Hoffe, es haben sich keine Fehler eingeschlichen.</p>
<pre><code>#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
using namespace std;

typedef vector&lt;vector&lt;double&gt; &gt; grid; // ein 2D Array (mehr oder weniger)

// Funktion, um Temperaturen in Datei zu schreiben
void write_grid(const grid&amp; g, const std::string&amp; fname)
{
    ofstream write(fname.c_str());
    for (int i = 0; i != g.size(); ++i)
    {
        for (int j = 0; j != g[i].size(); ++j)
            write &lt;&lt; g[i][j] &lt;&lt; ' ';
        write &lt;&lt; '\n';
    }
}

int main()
{
    const int X = 20; // Dimensionen des Gitters
    const int Y = 20;

    const double dx = 0.02;  // Abstand der Gitterpunkte zueinander in m. Das Rechengebiet ist damit 4x4 cm gross. dx = dy weil aequidistant
    const double dt = 0.1;   // Zeitschritt in s
    const double a = 115e-6; // Waermeleitzahl m2/s

    const double CFL = a*dt / (dx*dx); // Berechne CFL Kriterium
    cout &lt;&lt; &quot;CFL Zahl = &quot; &lt;&lt; CFL;
    if (CFL &gt; 0.5) // Fehler. Verfahren nicht stabil
        return -1;

    // Rechengitter erstellen
    grid T(X, vector&lt;double&gt;(Y, 300.0)); // ein 20x20 Rechengitter, das an allen Gitterpunkten eine Temperatur von 300 K

    T[10][10] = 10000.0; // in der Mitte ist es 10000 K heiss (Anfangsbedingung)

    write_grid(T, &quot;start.txt&quot;);

    //Randbedingung: Raender links und rechts haben konstante Temperatur von 400 K. Da die Werte konstant bleiben, kann man es ausserhalb der Zeitschleife machen
    for (int x = 0; x != X; ++x)
    {
        T[x][0] = 400.0;
        T[x][Y - 1] = 400.;
    }

    grid T_neu = T; // T_neu ist die Temperatur im nachsten Zeitschritt

    for (double t = 0; t &lt;= 30; t += dt) // simuliere 30 s lang
    {
        // laufe ueber alle Punkte des Rechengebietes ausser dem Rand
        for (int y = 1; y != Y - 1; ++y)
            for (int x = 1; x != X - 1; ++x)
                // der 5-Punkte Stern. Euler vorwarts (explizit) in der Zeit, zentraler Differenzenquotient  (2. Ordnung) fuer Diffusionsterm
                T_neu[x][y] = dt*a*( (T[x-1][y]-2.0*T[x][y]+T[x+1][y])/(dx*dx) + (T[x][y-1]-2.0*T[x][y]+T[x][y+1])/(dx*dx) ) + T[x][y];

        // Randbedingung oben und unten: adiabate Wand (Nullgradient in Wandnormalenrichtung erzwingen)
        for (int y = 1; y != Y - 1; ++y)
        {
            T_neu[0][y] = T_neu[1][y];
            T_neu[X - 1][y] = T_neu[X - 2][y];
        }

        T_neu.swap(T); // fuer den neachsten Zeitschritt wird T_neu zu T
    }

    write_grid(T, &quot;end.txt&quot;);
}
</code></pre>
<p>Meinst du sowas?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457267</guid><dc:creator><![CDATA[asdfasd]]></dc:creator><pubDate>Fri, 19 Jun 2015 21:33:43 GMT</pubDate></item><item><title><![CDATA[Reply to Finite Differenzen Wärmegleichung on Fri, 19 Jun 2015 21:43:46 GMT]]></title><description><![CDATA[<p>Edit: Es ist die DFL Zahl, nicht CFL...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457269</guid><dc:creator><![CDATA[asdfasd]]></dc:creator><pubDate>Fri, 19 Jun 2015 21:43:46 GMT</pubDate></item></channel></rss>