Wärmeleitfähigkeit



  • Hey Leute,

    ganz wichtig bitte schreibt nur etwas wenn ihr euch mit Molekulardynamik Simulationen auskennt. Momentan schreibe ich eine Molekulardynamik Simulation mit einem System von 125 Teilchen, die unter dem Lennard-Jones-Potential wechselwirken. Das Programm läuft einwandfrei. Meine momentane Aufgabe ist die Formel

    \lambda = \frac{1}{6 T^2 V t} \left< \Sigma\_x \left[ \Sigma\_i \left( r_{xi} (t) \cdot e\_i (t) - r\_{xi} (0) \cdot e_i (0) \right] ^2 \right>

    \mbox{mit} T: \mbox{Temperatur}; V: \mbox{Volumen}; t: \mbox{Zeit}; \Sigma\_x: \mbox{Summe über die Koordinaten x,y,z}; \Sigma\_i: \mbox{Summer über alle 125 Teilchen}; r_{xi}: \mbox{Ortsvektor}, e\_i=\frac{m\_i \cdot \vec{v\_i}^2}{2} + \frac{1}{2}\Sigma\_{j\neq i} u(rij) -\left; \left: \mbox{mittlere Teilchenenergie}

    zu implementieren. Das Problem bei der Formel ist, dass sie eigentlich für kleinere Dichten einen kleineren Wert liefern soll und das passiert überhaupt nicht in meinem Programm. Meine Umsetzung sieht folgendermaßen aus.

    eMittel=(0.5*vgessq+uges)/N;
    tklein=(t-tstart)*dt;
    //Zum Zeitpunkt t=0
    if(t==tstart)
    {
        for(i=0;i<N;i++)
    	{
    		rx0[i]=rx[i]; 
    		ry0[i]=ry[i]; 
    		rz0[i]=rz[i]; 
    		for(j=0;j<N;j++)
    		{
    		    rij=sqrt(pow(rzmin[i][j],2)+pow(rymin[i][j],2)+pow(rxmin[i][j],2)); 
    			if (rij<rcut && i!=j)
    			{
    				e[i]=e[i]+0.5*Lennard(rij);
    			}
    		}
    		e[i]=e[i]+0.5*(pow(vx[i],2)+pow(vy[i],2)+pow(vz[i],2));
    		e[i]=e[i]-eMittel; 
            e0[i]=e[i];
    		rxe0=rxe0+rx0[i]*e0[i];
    		rye0=rye0+ry0[i]*e0[i];
    		rze0=rze0+rz0[i]*e0[i];
    		}
    }
    //zum Zeitpunkt t
    if(t>tstart)
    {
    	for(i=0;i<N;i++)
    	{
    		for(j=0;j<N;j++)
    		{
    			rij=sqrt(pow(rzmin[i][j],2)+pow(rymin[i][j],2)+pow(rxmin[i][j],2)); 
    			if (rij<rcut && i!=j)
    			{
    				e[i]=e[i]+0.5*Lennard(rij);
    			}
    		}
    		e[i]=e[i]+0.5*(pow(vx[i],2)+pow(vy[i],2)+pow(vz[i],2));
    		e[i]=e[i]-eMittel;
    	}
    	for(i=0;i<N;i++)
    	{
    		rxe=rxe+rx[i]*e[i];
    		rye=rye+ry[i]*e[i];
    		rze=rze+rz[i]*e[i];
    	}	
    	drw=pow((rxe-rxe0),2)+pow((rye-rye0),2)+pow((rze-rze0),2);
    	lambdae=drw/(6.0*T*T*V*tklein);
    	fprintf(datei7,"%.20f %.20f %.20f \n",tklein,drw,lambdae);
    	drw=0;
    	rxe=0;
    	rye=0;
    	rze=0;
    }
    eMittel=0;
    for(i=0;i<N;i++)
    {	
    	e[i]=0;
    }
    

    Mein Frage ist nun ob ich irgendeinen Fehler bei der Umsetzung der Formel gemacht habe. Weiterhin wäre nun die Frage, ob jemand vielleicht weiss woher dieser Effekt mit der Dichte kommen kann.

    Achja falls die Frage aufkommt. Die anderen Größen in meinem Programm verhalten sich einwandfrei. Ich habe sogar die meisten Größen mit experimentellen Werte überprüft und sehr gute Übereinstimmungen erhalten.

    Ich wäre über jeden Tipp sehr dankbar.



  • Ich habe gerade keinen Nerv, mich da thematisch reinzulesen, aber auf den ersten Blick kommt mir

    drw=pow((rxe-rxe0),2)+pow((rye-rye0),2)+pow((rze-rze0),2);
    

    komisch vor. In der Formel von oben bildest Du an jedem Punkt die Differenz zu rxe0, also ist es klar, dass hier deine Werte zu groß werden, weil Du zu wenig abziehst.

    Wenn das stimmt, dann muß das pow((rxe-N*rxe0),2) oder so heißen.



  • Erstmal vielen Dank für deine Aufmerksamkeit und die Antwort!

    Ich verstehe nicht was du genau mit zu wenig abziehen meinst? Beide Werte werden doch von 0 bis <N summiert. Deswegen verstehe ich nicht wofür ich nochmal mit einem N multiplizieren sollte. Ich wäre dir aufjedenfall dankbar wenn du es mir mal erklären würdest :).


Anmelden zum Antworten