sehr geehrterHerr Richter,
ich habe es mal versucht mit
In[11]:= fk[t_]:=45*(1-Exp[-t/0.010])
In[2]:= NDSolve[{D[T[x,y,t],{t,1}]==1.08*(D[T[x,y,t],{x,2}]+D[T[x,y,t],
{y,2}])+70.26*Exp[-((T[x,y,t]+0.15)/0.05)^2],T[x,y,0]==0,
T[x,0,t]==fk[t],
T[x,8,t]==fk[t],
T[0,y,t]==fk[t],
T[8,y,t]==fk[t]},{
T[x,y,t]},{x,0,8},{y,0,8},{t,0,100},PrecisionGoal->2]
Out[2]= {{T[x,y,t]->InterpolatingFunction[{{0.,8.},{0.,8.},
{0.,100.}},<>][x,y,t]}}
In[17]:= sol[alpha_]:=NDSolve[{D[T[x,y,t],{t,1}]==alpha*(D[T[x,y,t],{x,
2}]+D[T[x,y,t],{y,2}])+70.26*Exp[-((T[x,y,t]+0.15)/0.05)^2],T[x,y,0]==0,
T[x,0,t]==fk[t],
T[x,8,t]==fk[t],
T[0,y,t]==fk[t],
T[8,y,t]==fk[t]},{
T[x,y,t]},{x,0,8},{y,0,8},{t,0,100},PrecisionGoal->4];
In[19]:= sol[.002]
Out[19]= {{T[x,y,t]->InterpolatingFunction[{{0.,8.},{0.,8.},
{0.,100.}},<>][x,y,t]}}
In[20]:=
Manipulate
[Module[{plt,loes},loes=sol[alpha];plt=ContourPlot[T[x,y,t]/.loes/.t->
time,{x,0,8},{y,0,8},ColorFunction->"Pastel",Contours->28,PlotLabel-
>"temperature profile"]],{{time,5,"time"},5,100,0.05,Appearance->
"Labeled"},
{{alpha,0.002,"thermal diffusivity in cm^2/s"},
0.001,0.005,0.001,Appearance-> "Labeled"},TrackedSymbols:>{alpha,time}]
ie.
- definieren Sie doch fkt lieber als Funktion fk[t]
bewährt hat sich ein schrittweises rantasten
d.h. zuerst die Lösungsfunktion als Funktion von alpha definieren
und mal testen ob es Ergebnisse liefert, dann das Manipulate machen.
Ich habe mal etwas mit dem PrecisionGoal rumgespielt.
Mit der Boole-Funktion wird es doch recht langsam !
Hilft es ?
Gruss Carsten Herrmann
Am 20.10.2009 um 13:02 schrieb Frank Richter:
Hallo MMA-Gruppe,
ich habe mir von
http://demonstrations.wolfram.com/UnsteadyStateConductionOfHeatInTwoDimensions/
das Demonstration Project
Unsteady-State Conduction of Heat in Two Dimensions
beschafft.
Es beschreibt die Temperaturverteilung beim Abkühlen in 2 Dimensionen.
Ich möchte das Beispiel so abändern, dass latente Wärme frei wird.
Es gibt hierzu ein Beispiel in dem Finite-Element-Programm ABAQUS
(Benchmark Manual Kapitel 1.6.2 FREEZING OF A SQUARE SOLID: THE TWO-
DIMENSIONAL STEFAN PROBLEM), und ich möchte die Ergebnisse
(Temperatur als Funktion der beiden Ortskoordinaten und der Zeit)
vergleichen.
Also habe ich das Beispiel verändert zu
fkt = -45*(1 - Exp[-t/0.010])
dies ist die am Rand vorgegebene Temperatur als Funktion der Zeit
und die Lösung versucht als:
NDSolve[{
D[T[x, y, t], {t, 1}] ==
1.08* (D[T[x, y, t], {x, 2}] + D[T[x, y, t], {y, 2}]) + (70.26)*
Boole[-0.15 >= T[x, y, t] >= -0.25], T[x, y, 0] == 0,
T[x, 0, t] == fkt, T[x, 8, t] == fkt, T[0, y, t] == fkt,
T[8, y, t] == fkt}, {T[x, y, t]}, {x, 0, 8}, {y, 0, 8}, {t, 0, 1},
PrecisionGoal ->
2(*MaxStepFraction-> 1/5,EvaluationMonitor-> t,MaxSteps->
10000,Method-> "BDF"*)]
Die latente Wärme wird frei in einem Temperaturintervall. Statt der
Boole-Funktion hatte ich auch versucht
70.26*Exp[-((T[x, y, t] + 0.15)/0.05)^2]
Beide Lösungen bringen jedoch nur Ergebnisse, die stark von der
ABAQUS-Lösung abweichen, jedoch nicht von der MMA-Lösung ohne
latente Wärme, oder die Suche nach der numerischen Lösung dauert
sehr lange und bricht schon zu kleinen Zeiten ab. Wie oben gezeigt,
habe ich einige der Parameter zu NDSolve bereits bemüht.
Kann mir jemand bitte einen Hinweis geben, wie es richtig gemacht
werden muss ?
Ich bedanke mich auf das Herzlichste im Voraus.
Frank
--
Mit freundlichen Gruessen Kind regards
Frank Richter
Lehrstuhl Werkstoffwissenschaft (WW) Chair of Materials Science
Institut fuer Werkstoffe Institute for Materials
Fakultaet fuer Maschinenbau Dept. of Mechanical
Engineering
Ruhr-Universitaet Bochum Ruhr-University Bochum
Universitaetsstrasse 150 Universitaetsstrasse 150
44780 Bochum 44780 Bochum
Deutschland Germany
Gebaeude IA, Ebene 1, Raum 47
Building IA, Floor 1, Room 47
Tel./Phone: (+49)-(0)234-32-27898
Fax: (+49)-(0)234-32-14235
http://www.ruhr-uni-bochum.de/ww/mitarb/richter.html
http://homepage.ruhr-uni-bochum.de/Frank.Richter/