summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2015-08-04 15:55:25 +0200
committerErich Eckner <git@eckner.net>2015-08-04 15:55:25 +0200
commit9a20545e798a68ebd73f92ca0f19a2cfbebf5983 (patch)
tree5dae20a84b7c2127d0f182f99a2f79c554304517
parente425856940fd5237241d315c26d61b5f41e23ad4 (diff)
downloadPlasmapropagation-9a20545e798a68ebd73f92ca0f19a2cfbebf5983.tar.xz
alle Runge-Kuttas in .inc ausgelagert,
minimales dT auf dX gesetzt (sonst Bug z.B. in AY)
-rw-r--r--Physikunit.pas202
-rw-r--r--Plasmapropagation.lps114
-rw-r--r--input.plap10
-rw-r--r--rk108.inc64
-rw-r--r--rk1210.inc96
-rw-r--r--rk1412.inc136
-rw-r--r--rk3_8.inc47
-rw-r--r--rk3_8.txt30
-rw-r--r--rk4.inc41
-rw-r--r--rk4.txt30
-rwxr-xr-xrktopas18
11 files changed, 448 insertions, 340 deletions
diff --git a/Physikunit.pas b/Physikunit.pas
index 0a2ca5e..142ee4b 100644
--- a/Physikunit.pas
+++ b/Physikunit.pas
@@ -52,7 +52,7 @@ type
destructor destroy; override;
function dump: string;
procedure schreibeKopf;
- procedure speichereWerte(gitter: tGitter; sDX: extended);
+ procedure speichereWerte(gitter: tGitter; sT, sDX: extended);
end;
{ tTeilchenSpezies }
@@ -121,14 +121,14 @@ type
matAnz: longint;
spezLadungen: tExtendedArray;
lichters: array[boolean] of tMyStringlist;
- procedure setzeRaender(dT,iDX,iDT: extended);
+ procedure setzeRaender(iDX: extended);
public
inhalt: array of tWertePunkt;
par: tGitter;
constructor create(groesse: longint; teilchen: array of tTeilchenSpezies; lichter: tMyStringList; parent: tGitter);
destructor destroy; override;
- procedure berechneAbleitungen(dT,dX,iDT,iDX,pDNMax: extended);
+ procedure berechneAbleitungen(dX,iDX,pDNMax: extended);
procedure liKo(in1,in2: tFelder; fak2: extended); overload; // Werte werden auf (in1 + \sum_i faki * ini') gesetzt
procedure liKo(in1,in2,in3: tFelder; fak2,fak3: extended); overload;
procedure liKo(in1,in2,in3,in4: tFelder; fak2,fak3,fak4: extended); overload;
@@ -163,7 +163,8 @@ type
dX,iDX,pDNMax,dTMaximum,xl,t: extended;
kvs: tKnownValues;
procedure diffusionsTermAnpassen(pro: tProtokollant);
- function pruefeMaxDT(aF: longint; var mDT,dT: extended; dTMin: extended): boolean; // wurde verkleinert?
+ function pruefeMaxDT(aF: longint; var dTMax,dT: extended; dTMin: extended): boolean; // wurde verkleinert?
+ procedure abbrechen;
public
aktuelleFelder: longint;
@@ -334,7 +335,7 @@ begin
closefile(datei);
end;
-procedure tAusgabeDatei.speichereWerte(gitter: tGitter; sDX: extended);
+procedure tAusgabeDatei.speichereWerte(gitter: tGitter; sT, sDX: extended);
var i,cnt: longint;
sX,cX: extended;
begin
@@ -348,7 +349,7 @@ begin
if (teilchen>=0) and (matInhalt=mfP) then
gitter.berechne('P',teilchen);
- if gitter.t>=nNum+sDT/2 then
+ if sT>=nNum+sDT/2 then
schreibeKopf;
cnt:=floor((length(gitter.felders[gitter.aktuelleFelder].inhalt)-1)/sDX*gitter.dX+1);
@@ -749,12 +750,11 @@ begin
inherited destroy;
end;
-procedure tFelder.setzeRaender(dT,iDX,iDT: extended);
+procedure tFelder.setzeRaender(iDX: extended);
var
emF: tEMFeldInhalt;
rechts: boolean;
i: longint;
- nVal: extended;
begin
for emF:=efAX to efAZ do begin // Vakuumrandbedingungen für das A-Feld
inhalt[0].emWerte[emF,true]:=
@@ -766,17 +766,13 @@ begin
end; // (ein bisschen wird noch reflektiert, vmtl. durch numerische Fehler bzw. nicht beachtete numerische Dispersion)
for rechts:=false to true do
- for i:=0 to lichters[rechts].count-1 do begin
- par.kvs.add('t',par.t+dT);
- nVal:=exprToFloat(false,lichters[rechts][i],par.kvs,nil);
- par.kvs.add('t',par.t);
+ for i:=0 to lichters[rechts].count-1 do
inhalt[(length(inhalt)-1)*byte(rechts)].emWerte[efAY,true]:=
inhalt[(length(inhalt)-1)*byte(rechts)].emWerte[efAY,true] +
- (nVal - exprToFloat(false,lichters[rechts][i],par.kvs,nil))*iDT;
- end;
+ exprToFloat(false,lichters[rechts][i],par.kvs,nil);
end;
-procedure tFelder.berechneAbleitungen(dT,dX,iDT,iDX,pDNMax: extended);
+procedure tFelder.berechneAbleitungen(dX,iDX,pDNMax: extended);
var
i: longint;
begin
@@ -795,7 +791,7 @@ begin
inhalt[1].berechneNAbleitung(iDX,pDNMax,false);
inhalt[length(inhalt)-2].berechneNAbleitung(iDX,pDNMax,true);
- setzeRaender(dT,iDX,iDT);
+ setzeRaender(iDX);
for i:=1 to length(inhalt)-2 do
inhalt[i].berechneAbleitungen(dX,iDX);
@@ -863,49 +859,47 @@ end;
procedure tGitter.diffusionsTermAnpassen(pro: tProtokollant);
var
- i,j: longint;
+ i,j: longint;
+ curMax: extended;
begin
+ curMax:=0;
for i:=1 to length(felders[aktuelleFelder].inhalt)-2 do
for j:=0 to felders[aktuelleFelder].matAnz-1 do
- if abs(felders[aktuelleFelder].inhalt[i].matWerte[j,mfPx,false]*
- (felders[aktuelleFelder].inhalt[i+1].matWerte[j,mfN,false] - felders[aktuelleFelder].inhalt[i-1].matWerte[j,mfN,false])/
- max(felders[aktuelleFelder].inhalt[i+1].matWerte[j,mfN,false] + felders[aktuelleFelder].inhalt[i-1].matWerte[j,mfN,false],1e-10))
- > pDNMax then begin
- if pDNMaxDynamisch then begin
- pDNMax:=
- 2*
- abs(felders[aktuelleFelder].inhalt[i].matWerte[j,mfPX,false]*
+ curMax:=
+ max(curMax,
+ abs(felders[aktuelleFelder].inhalt[i].matWerte[j,mfPx,false]*
(felders[aktuelleFelder].inhalt[i+1].matWerte[j,mfN,false] - felders[aktuelleFelder].inhalt[i-1].matWerte[j,mfN,false])/
- Max(felders[aktuelleFelder].inhalt[i+1].matWerte[j,mfN,false] + felders[aktuelleFelder].inhalt[i-1].matWerte[j,mfN,false],1e-10));
- pro.schreibe('Neues maximales px * dn/dx / n: '+floattostr(pDNMax)+' (t='+floattostr(t)+')');
- end
- else
- if pDNMax>0 then begin
- pro.schreibe('Warnung: maximaler Impuls * dn/dx / n von '+floattostr(pDNMax)+' wurde überschritten (t='+floattostr(t)+
- 'T), die numerische Stabilität ist nicht mehr gewährleistet!',true);
- pro.schreibe(' Lösung: größeren Diffusionsterm wählen (-D)',true);
- pro.schreibe(' außerdem empfohlen: Ortsauflösung in gleichem Maße verbessern (-x)',true);
- pDNMax:=-1;
- end;
- end;
+ max(felders[aktuelleFelder].inhalt[i+1].matWerte[j,mfN,false] + felders[aktuelleFelder].inhalt[i-1].matWerte[j,mfN,false],1e-100)));
+ if curMax > pDNMax then begin
+ if pDNMaxDynamisch then begin
+ pDNMax:=2*curMax;
+ pro.schreibe('Neues maximales px * dn/dx / n: '+floattostr(pDNMax)+' (t='+floattostr(t)+')');
+ end
+ else
+ if pDNMax>0 then begin
+ pro.schreibe('Warnung: maximaler Impuls * dn/dx / n von '+floattostr(pDNMax)+' wurde überschritten (t='+floattostr(t)+
+ 'T), die numerische Stabilität ist nicht mehr gewährleistet!',true);
+ pro.schreibe(' Lösung: größeren Diffusionsterm wählen',true);
+ pro.schreibe(' außerdem empfohlen: Ortsauflösung in gleichem Maße verbessern',true);
+ pDNMax:=0; // Term komplett abschalten
+ end;
+ end;
end;
-function tGitter.pruefeMaxDT(aF: longint; var mDT,dT: extended; dTMin: extended): boolean; // wurde verkleinert?
+function tGitter.pruefeMaxDT(aF: longint; var dTMax,dT: extended; dTMin: extended): boolean; // wurde verkleinert?
begin
- mDT:=min(mDT,felders[aF].maxDT);
- // das maximale dT, welches bei den Momentanen Ableitungen nicht zu
+ dTMax:=min(dTMax,felders[aF].maxDT);
+ // das maximale dT, welches bei den momentanen Ableitungen nicht zu
// unphysikalischen Effekten (z.B. negativen Dichten) führt
- result:=mDT<dT*2;
+ result:=dTMax<dT*2;
if result then begin // beabsichtigter Zeitschritt ist zu groß,
- dT:=mDT/4; // dann machen wir ihn doch kleiner!
+ dT:=dTMax/4; // dann machen wir ihn doch kleiner!
{$IFDEF Zeitschrittueberwachung}
- prot.schreibe('pruefeMaxDT: dT -> '+floattostr(dT));
+ prot.schreibe('pruefeMaxDT: dT -> '+floattostr(dT)+' (t = '+floattostr(t)+')');
if dT<dTMin then begin
prot.schreibe('pruefeMaxDT: Zeitschritt geht gegen Null (ist bereits '+floattostr(dT)+' < '+floattostr(dTMin)+') - irgendwas scheint grundsätzlich kaputt zu sein!',true);
- abbruch:=true;
-// prot.destroyall;
-// halt(1);
+ abbrechen;
end;
prot.spuelen;
{$ENDIF}
@@ -913,6 +907,26 @@ begin
end;
end;
+procedure tGitter.abbrechen;
+var
+ i,j,k: longint;
+ maF: tMaterieFeldInhalt;
+ emF: tEMFeldInhalt;
+ abl: boolean;
+begin
+ abbruch:=true;
+ for i:=0 to length(felders)-1 do
+ for j:=0 to length(felders[i].inhalt)-1 do begin
+ for emF:=low(tEMFeldInhalt) to high(tEMFeldInhalt) do
+ for abl:=false to true do
+ felders[i].inhalt[j].emWerte[emF,false]:=0;
+ for k:=0 to felders[i].matAnz-1 do
+ for maF:=low(tMaterieFeldInhalt) to high(tMaterieFeldInhalt) do
+ for abl:=false to true do
+ felders[i].inhalt[j].matWerte[k,maF,false]:=0;
+ end;
+end;
+
procedure tGitter.iteriereSchritt(var dT: extended; dTMin: extended);
var i: longint;
{$IFDEF Zeitschrittueberwachung}
@@ -921,7 +935,7 @@ var i: longint;
{$IFDEF Dichteueberwachung}
pro: tProtokollant;
{$ENDIF}
- iDT,mDT: extended;
+ dTMax: extended;
begin
if abbruch then begin
t:=t+dT;
@@ -929,97 +943,37 @@ begin
end;
kvs.add('t',t);
diffusionsTermAnpassen(prot);
-
- mDT:=infinity;
+ dTMax:=dX*100;
repeat
- iDT:=1/dT;
- felders[aktuelleFelder].berechneAbleitungen(dT,dX,iDT,iDX,pDNMax); // y' = y'(t,y(t))
+ felders[aktuelleFelder].berechneAbleitungen(dX,iDX,pDNMax); // y' = y'(t,y(t))
- if pruefeMaxDT(aktuelleFelder,mDT,dT,dTMin) then
+ if pruefeMaxDT(aktuelleFelder,dTMax,dT,dTMin) then
continue;
case zeitverfahren of
zfEulerVorwaerts: // y(t+dt) = y(t) + y' dt
felders[1-aktuelleFelder].liKo(felders[aktuelleFelder],felders[aktuelleFelder],dT);
- zfRungeKuttaDreiAchtel:
- begin
- felders[2].liKo(felders[aktuelleFelder],felders[aktuelleFelder],dT/3); // ya = y(t) + y' dt/3
- felders[2].berechneAbleitungen(dT/3,dX,iDT,iDX,pDNMax); // ya' = y'(t+dt/3,ya)
-
- if pruefeMaxDT(2,mDT,dT,dTMin) then
- continue;
-
- felders[3].liKo(felders[aktuelleFelder],felders[aktuelleFelder],felders[2],-dT/3,dT); // yb = y(t) - y' dt/3 + ya' dt
- felders[3].berechneAbleitungen(dT/3,dX,iDT,iDX,pDNMax); // yb' = y'(t+2dt/3,yb)
-
- if pruefeMaxDT(3,mDT,dT,dTMin) then
- continue;
-
- felders[4].liKo(felders[aktuelleFelder],felders[aktuelleFelder],felders[2],felders[3],dT,-dT,dT); // yc = y(t) + a' dt - ya' dt + yb' dt
- felders[4].berechneAbleitungen(dT/3,dX,iDT,iDX,pDNMax); // yc' = y'(t+dt,yc)
-
- if pruefeMaxDT(4,mDT,dT,dTMin) then
- continue;
-
- felders[1-aktuelleFelder].liKo(
- felders[aktuelleFelder],
- felders[aktuelleFelder],
- felders[2],
- felders[3],
- felders[4],
- dT/8,
- dT*3/8,
- dT*3/8,
- dT/8
- ); // y(t+dt) = y(t) + (y' + 3(ya' + yb') + yc') dt/8
- end;
- zfRungeKuttaVier:
- begin
- felders[2].liKo(felders[aktuelleFelder],felders[aktuelleFelder],dT/2); // ya = y(t) + y' dt/2
- felders[2].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax); // ya' = y'(t+dt/2,ya)
-
- if pruefeMaxDT(2,mDT,dT,dTMin) then
- continue;
-
- felders[3].liKo(felders[aktuelleFelder],felders[2],dT/2); // yb = y(t) + ya' dt/2
- felders[3].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax); // yb' = y'(t+dt/2,yb)
-
- if pruefeMaxDT(3,mDT,dT,dTMin) then
- continue;
-
- felders[4].liKo(felders[aktuelleFelder],felders[3],dT); // yc = y(t) + yb' dt
- felders[4].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax); // yc' = y'(t+dt,yc)
-
- if pruefeMaxDT(4,mDT,dT,dTMin) then
- continue;
-
- felders[1-aktuelleFelder].liKo(
- felders[aktuelleFelder],
- felders[aktuelleFelder],
- felders[2],
- felders[3],
- felders[4],
- dT/6,
- dT/3,
- dT/3,
- dT/6
- ); // y(t+dt) = y(t) + (y' + 2(ya' + yb') + yc') dt/6
- end;
- zfRungeKuttaZehn: begin // Quelle: http://sce.uhcl.edu/rungekutta/rk108.txt
+ zfRungeKuttaDreiAchtel: begin
+ {$INCLUDE rk3_8.inc}
+ end;
+ zfRungeKuttaVier: begin
+ {$INCLUDE rk4.inc}
+ end;
+ zfRungeKuttaZehn: begin // Quelle: http://sce.uhcl.edu/rungekutta/rk108.txt
{$INCLUDE rk108.inc}
end;
- zfRungeKuttaZwoelf: begin // Quelle: http://sce.uhcl.edu/rungekutta/rk1210.txt
+ zfRungeKuttaZwoelf: begin // Quelle: http://sce.uhcl.edu/rungekutta/rk1210.txt
{$INCLUDE rk1210.inc}
end;
- zfRungeKuttaVierzehn: begin // Quelle: http://sce.uhcl.edu/rungekutta/rk1412.txt
+ zfRungeKuttaVierzehn: begin // Quelle: http://sce.uhcl.edu/rungekutta/rk1412.txt
{$INCLUDE rk1412.inc}
end;
end{of case};
break;
until abbruch;
-
+ prot.schreibe('dT = '+floattostr(dT));
aktuelleFelder:=1-aktuelleFelder;
{$IFDEF Dichteueberwachung}
for i:=0 to length(felders[aktuelleFelder].inhalt)-1 do
@@ -1047,7 +1001,7 @@ begin
end;
{$ENDIF}
t:=t+dT;
- dT:=max(dT,min(1,mDT)/100);
+ dT:=max(dT,dTMax/100);
end;
function tGitter.dumpErhaltungsgroessen: boolean;
@@ -1462,7 +1416,7 @@ var
begin
result:=false;
- if gitter.abbruch then
+ if gitter.abbruch or (dT>sDT) then
dT:=sDT;
zeitPhysik:=zeitPhysik-now;
@@ -1471,9 +1425,9 @@ begin
zeitPhysik:=zeitPhysik+now;
zeitDatei:=zeitDatei-now;
while (gitter.t>=sT) and (sT<tEnde) do begin
- sT:=sT+sDT;
for i:=0 to length(ausgabeDateien)-1 do
- ausgabeDateien[i].speichereWerte(gitter,sDX);
+ ausgabeDateien[i].speichereWerte(gitter,sT,sDX);
+ sT:=sT+sDT;
end;
zeitDatei:=zeitDatei+now;
diff --git a/Plasmapropagation.lps b/Plasmapropagation.lps
index e959ac2..de2ba33 100644
--- a/Plasmapropagation.lps
+++ b/Plasmapropagation.lps
@@ -3,26 +3,25 @@
<ProjectSession>
<Version Value="9"/>
<BuildModes Active="Default"/>
- <Units Count="17">
+ <Units Count="18">
<Unit0>
<Filename Value="Plasmapropagation.lpr"/>
<IsPartOfProject Value="True"/>
<TopLine Value="54"/>
<CursorPos X="37" Y="34"/>
- <UsageCount Value="184"/>
+ <UsageCount Value="188"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
<Filename Value="Physikunit.pas"/>
<IsPartOfProject Value="True"/>
- <IsVisibleTab Value="True"/>
<EditorIndex Value="1"/>
- <TopLine Value="205"/>
- <CursorPos X="23" Y="327"/>
- <FoldState Value=" T3le0,312 piXlY054 pj6jN08123]Keld0B[K6T08]IlBlR0U]lp6q10G2 T0*KQ/0N1211"/>
- <UsageCount Value="125"/>
+ <TopLine Value="943"/>
+ <CursorPos Y="1413"/>
+ <FoldState Value=" T3lf0,5 pjSlM0A[94BjZ084]9Ija09]9ifkK07[I45jO0I013 ppasC0G2 T0=HQ/0F17121b"/>
+ <UsageCount Value="129"/>
<Bookmarks Count="1">
- <Item0 Y="1020"/>
+ <Item0 Y="974"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit1>
@@ -31,14 +30,16 @@
<IsPartOfProject Value="True"/>
<EditorIndex Value="-1"/>
<CursorPos X="15" Y="46"/>
- <UsageCount Value="87"/>
+ <UsageCount Value="91"/>
</Unit2>
<Unit3>
<Filename Value="input.plap"/>
<IsPartOfProject Value="True"/>
+ <IsVisibleTab Value="True"/>
<EditorIndex Value="3"/>
- <CursorPos X="42" Y="7"/>
- <UsageCount Value="86"/>
+ <TopLine Value="6"/>
+ <CursorPos X="19" Y="14"/>
+ <UsageCount Value="90"/>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="None"/>
</Unit3>
@@ -47,14 +48,14 @@
<IsPartOfProject Value="True"/>
<EditorIndex Value="2"/>
<CursorPos X="48" Y="220"/>
- <UsageCount Value="34"/>
+ <UsageCount Value="38"/>
<Loaded Value="True"/>
</Unit4>
<Unit5>
<Filename Value="input.epost"/>
<EditorIndex Value="4"/>
- <CursorPos X="33" Y="21"/>
- <UsageCount Value="76"/>
+ <CursorPos X="37" Y="22"/>
+ <UsageCount Value="78"/>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="None"/>
</Unit5>
@@ -64,14 +65,14 @@
<TopLine Value="53"/>
<CursorPos Y="53"/>
<FoldState Value=" T3i905B pj0jV034 piaj60U2-"/>
- <UsageCount Value="18"/>
+ <UsageCount Value="17"/>
</Unit6>
<Unit7>
<Filename Value="../units/lowlevelunit.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="4"/>
<CursorPos X="86" Y="23"/>
- <UsageCount Value="8"/>
+ <UsageCount Value="7"/>
</Unit7>
<Unit8>
<Filename Value="../units/mystringlistunit.pas"/>
@@ -79,39 +80,39 @@
<TopLine Value="367"/>
<CursorPos X="17" Y="390"/>
<FoldState Value=" T3i3075 piZjD0WQ"/>
- <UsageCount Value="9"/>
+ <UsageCount Value="8"/>
</Unit8>
<Unit9>
<Filename Value="../epost/werteunit.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="950"/>
<CursorPos X="30" Y="1054"/>
- <UsageCount Value="6"/>
+ <UsageCount Value="5"/>
</Unit9>
<Unit10>
<Filename Value="../epost/typenunit.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="347"/>
<CursorPos X="62" Y="358"/>
- <UsageCount Value="6"/>
+ <UsageCount Value="5"/>
</Unit10>
<Unit11>
<Filename Value="../units/systemunit.pas"/>
<EditorIndex Value="-1"/>
<CursorPos X="3" Y="79"/>
- <UsageCount Value="6"/>
+ <UsageCount Value="5"/>
</Unit11>
<Unit12>
<Filename Value="/usr/lib/fpc/src/rtl/inc/objpash.inc"/>
<EditorIndex Value="-1"/>
<TopLine Value="232"/>
<CursorPos X="23" Y="192"/>
- <UsageCount Value="6"/>
+ <UsageCount Value="5"/>
</Unit12>
<Unit13>
<Filename Value="rk14.inc"/>
<EditorIndex Value="-1"/>
- <UsageCount Value="9"/>
+ <UsageCount Value="8"/>
</Unit13>
<Unit14>
<Filename Value="rk1210.inc"/>
@@ -125,7 +126,7 @@
<EditorIndex Value="-1"/>
<TopLine Value="945"/>
<CursorPos X="5" Y="985"/>
- <UsageCount Value="10"/>
+ <UsageCount Value="9"/>
</Unit15>
<Unit16>
<Filename Value="rk108.inc"/>
@@ -133,127 +134,132 @@
<CursorPos X="28" Y="8"/>
<UsageCount Value="9"/>
</Unit16>
+ <Unit17>
+ <Filename Value="rk3_8.inc"/>
+ <EditorIndex Value="-1"/>
+ <CursorPos X="75" Y="23"/>
+ <UsageCount Value="10"/>
+ </Unit17>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="Physikunit.pas"/>
- <Caret Line="89" Column="44" TopLine="68"/>
+ <Caret Line="341" Column="8" TopLine="320"/>
</Position1>
<Position2>
<Filename Value="Physikunit.pas"/>
- <Caret Line="130" Column="55" TopLine="97"/>
+ <Caret Line="1430" Column="42" TopLine="1419"/>
</Position2>
<Position3>
<Filename Value="Physikunit.pas"/>
- <Caret Line="162" Column="18" TopLine="129"/>
+ <Caret Line="648" Column="104" TopLine="619"/>
</Position3>
<Position4>
- <Filename Value="Plasmapropagation.lpr"/>
- <Caret Line="34" Column="37"/>
+ <Filename Value="Physikunit.pas"/>
+ <Caret Line="608" Column="52" TopLine="213"/>
</Position4>
<Position5>
<Filename Value="Physikunit.pas"/>
- <Caret Line="27" TopLine="8"/>
+ <Caret Line="977" Column="63" TopLine="953"/>
</Position5>
<Position6>
<Filename Value="Physikunit.pas"/>
- <Caret Line="565" TopLine="545"/>
+ <Caret Line="92" Column="38" TopLine="72"/>
</Position6>
<Position7>
<Filename Value="Physikunit.pas"/>
- <Caret Line="582" Column="36" TopLine="545"/>
+ <Caret Line="947" Column="12" TopLine="910"/>
</Position7>
<Position8>
<Filename Value="Physikunit.pas"/>
- <Caret Line="596" Column="51" TopLine="577"/>
+ <Caret Line="930" Column="64" TopLine="707"/>
</Position8>
<Position9>
<Filename Value="Physikunit.pas"/>
- <Caret Line="668" TopLine="668"/>
+ <Caret Line="166" Column="72" TopLine="145"/>
</Position9>
<Position10>
<Filename Value="Physikunit.pas"/>
- <Caret Line="740" TopLine="712"/>
+ <Caret Line="175" Column="60" TopLine="165"/>
</Position10>
<Position11>
<Filename Value="Physikunit.pas"/>
- <Caret Line="1026" Column="14" TopLine="1013"/>
+ <Caret Line="946" Column="84" TopLine="929"/>
</Position11>
<Position12>
<Filename Value="Physikunit.pas"/>
- <Caret Line="1475" TopLine="1029"/>
+ <Caret Line="945" Column="20" TopLine="909"/>
</Position12>
<Position13>
<Filename Value="Physikunit.pas"/>
- <Caret Line="1025" Column="31" TopLine="876"/>
+ <Caret Line="1423" Column="40" TopLine="1394"/>
</Position13>
<Position14>
<Filename Value="Physikunit.pas"/>
- <Caret Line="284" Column="24" TopLine="201"/>
+ <Caret Line="92" Column="38" TopLine="72"/>
</Position14>
<Position15>
<Filename Value="Physikunit.pas"/>
- <Caret Line="354" Column="32" TopLine="331"/>
+ <Caret Line="605" Column="46" TopLine="585"/>
</Position15>
<Position16>
<Filename Value="Physikunit.pas"/>
- <Caret Line="212" Column="81" TopLine="191"/>
+ <Caret Line="775" Column="39" TopLine="704"/>
</Position16>
<Position17>
<Filename Value="Physikunit.pas"/>
- <Caret Line="51" Column="71" TopLine="27"/>
+ <Caret Line="797" Column="38" TopLine="778"/>
</Position17>
<Position18>
<Filename Value="Physikunit.pas"/>
- <Caret Line="272" Column="51" TopLine="242"/>
+ <Caret Line="131" Column="35" TopLine="111"/>
</Position18>
<Position19>
<Filename Value="Physikunit.pas"/>
- <Caret Line="1276" Column="156" TopLine="1262"/>
+ <Caret Line="775" Column="39" TopLine="753"/>
</Position19>
<Position20>
<Filename Value="Physikunit.pas"/>
- <Caret Line="212" Column="66" TopLine="192"/>
+ <Caret Line="946" Column="38" TopLine="910"/>
</Position20>
<Position21>
<Filename Value="Physikunit.pas"/>
- <Caret Line="51" Column="60" TopLine="47"/>
+ <Caret Line="166" Column="25" TopLine="158"/>
</Position21>
<Position22>
<Filename Value="Physikunit.pas"/>
- <Caret Line="351" Column="20" TopLine="301"/>
+ <Caret Line="901" Column="17" TopLine="708"/>
</Position22>
<Position23>
<Filename Value="Physikunit.pas"/>
- <Caret Line="2"/>
+ <Caret Line="889" Column="18" TopLine="860"/>
</Position23>
<Position24>
<Filename Value="Physikunit.pas"/>
- <Caret Line="351" Column="73" TopLine="331"/>
</Position24>
<Position25>
<Filename Value="Physikunit.pas"/>
- <Caret Line="47" Column="29" TopLine="31"/>
+ <Caret Line="1423" Column="37" TopLine="1394"/>
</Position25>
<Position26>
<Filename Value="Physikunit.pas"/>
- <Caret Line="283" Column="21" TopLine="212"/>
+ <Caret TopLine="145"/>
</Position26>
<Position27>
<Filename Value="Physikunit.pas"/>
- <Caret Line="334" TopLine="212"/>
+ <Caret Line="1412" TopLine="774"/>
</Position27>
<Position28>
<Filename Value="Physikunit.pas"/>
- <Caret Line="1452" Column="31" TopLine="1420"/>
+ <Caret Line="175" Column="54" TopLine="161"/>
</Position28>
<Position29>
<Filename Value="Physikunit.pas"/>
- <Caret TopLine="178"/>
+ <Caret Line="946" Column="12" TopLine="774"/>
</Position29>
<Position30>
<Filename Value="Physikunit.pas"/>
- <Caret Line="1049" Column="41" TopLine="748"/>
+ <Caret Line="1424" Column="36" TopLine="988"/>
</Position30>
</JumpHistory>
</ProjectSession>
diff --git a/input.plap b/input.plap
index 33082aa..cad3cd7 100644
--- a/input.plap
+++ b/input.plap
@@ -3,15 +3,15 @@
allgemein
# runge-Kutta-14
# runge-Kutta-12
- runge-Kutta-10
-# runge-Kutta-3/8
+# runge-Kutta-10
+ runge-Kutta-3/8
# runge-Kutta-4
# euler-Vorwärts
ortsschritt 10^-3 * λ
zeitschritt 10^-3 * T
- minZeitschritt 10^-6 * T
+ minZeitschritt 10^-10 * T
zeit 20 * T
- diffusionsterm 1 # max. p/Lp
+ diffusionsterm 2 # max. p/Lp
!setze $breite: (5 * λ)
breite $breite
mit Fortschrittsanzeige
@@ -26,7 +26,7 @@ ausgabenEnde
!setze $tFwhm: (2.5 * T)
!setze $tMitte: (1 * T)
-licht von links 0.1 * 2^(-2*((t-$tMitte)/$tFwhm)^2) * sin(ω*t)
+licht von links 0.1 * ω * 2^(-2*((t-$tMitte)/$tFwhm)^2) * cos(ω*t) # Zeitableitung des A-Feldes
teilchen1
spezifische Ladung -q/me
diff --git a/rk108.inc b/rk108.inc
index 7635367..0f98175 100644
--- a/rk108.inc
+++ b/rk108.inc
@@ -3,9 +3,9 @@
felders[aktuelleFelder],
0.1 * dT
);
- felders[2].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[2].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(2,mDT,dT,dTMin) then
+ if pruefeMaxDT(2,dTMax,dT,dTMin) then
continue;
felders[3].liKo(
@@ -15,9 +15,9 @@
-0.91517656137529144052001501927534215431895138766436972056466 * dT,
1.45453440217827322805250021715664459117622483736537873607016 * dT
);
- felders[3].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[3].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(3,mDT,dT,dTMin) then
+ if pruefeMaxDT(3,dTMax,dT,dTMin) then
continue;
felders[4].liKo(
@@ -27,9 +27,9 @@
0.202259190301118170324681949205488413821477543637878380814562 * dT,
0.606777570903354510974045847616465241464432630913635142443687 * dT
);
- felders[4].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[4].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(4,mDT,dT,dTMin) then
+ if pruefeMaxDT(4,dTMax,dT,dTMin) then
continue;
felders[5].liKo(
@@ -41,9 +41,9 @@
0.197966831227192369068141770510388793370637287463360401555746 * dT,
-0.0729547847313632629185146671595558023015011608914382961421311 * dT
);
- felders[5].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[5].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(5,mDT,dT,dTMin) then
+ if pruefeMaxDT(5,dTMax,dT,dTMin) then
continue;
felders[6].liKo(
@@ -55,9 +55,9 @@
0.410459702520260645318174895920453426088035325902848695210406 * dT,
0.482713753678866489204726942976896106809132737721421333413261 * dT
);
- felders[6].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[6].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(6,mDT,dT,dTMin) then
+ if pruefeMaxDT(6,dTMax,dT,dTMin) then
continue;
felders[7].liKo(
@@ -71,9 +71,9 @@
0.48966295730945019284450701113589820117801547843379009721079 * dT,
-0.0731856375070850736789057580558988816340355615025188195854775 * dT
);
- felders[7].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[7].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(7,mDT,dT,dTMin) then
+ if pruefeMaxDT(7,dTMax,dT,dTMin) then
continue;
felders[8].liKo(
@@ -87,9 +87,9 @@
0.0325402621549091330158899334391231259332716675992700000776101 * dT,
-0.0595780211817361001560122202563305121444953672762930724538856 * dT
);
- felders[8].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[8].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(8,mDT,dT,dTMin) then
+ if pruefeMaxDT(8,dTMax,dT,dTMin) then
continue;
felders[9].liKo(
@@ -103,9 +103,9 @@
0.32176370560177839010089879904987890408140436860307712925111 * dT,
0.51048572560806303157775901228512341674467213703175235406759 * dT
);
- felders[9].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[9].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(9,mDT,dT,dTMin) then
+ if pruefeMaxDT(9,dTMax,dT,dTMin) then
continue;
felders[10].liKo(
@@ -121,9 +121,9 @@
0.499269229556880061353316843969978567860276816592673201240332 * dT,
0.50950460892968610423609869004538625398664323235298960218506 * dT
);
- felders[10].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[10].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(10,mDT,dT,dTMin) then
+ if pruefeMaxDT(10,dTMax,dT,dTMin) then
continue;
felders[11].liKo(
@@ -141,9 +141,9 @@
0.0107558956873607455550609147441477450257136782823280838547024 * dT,
-0.327769124164018874147061087350233395378262992392394071906457 * dT
);
- felders[11].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[11].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(11,mDT,dT,dTMin) then
+ if pruefeMaxDT(11,dTMax,dT,dTMin) then
continue;
felders[12].liKo(
@@ -163,9 +163,9 @@
-0.0782942710351670777553986729725692447252077047239160551335016 * dT,
-0.114503299361098912184303164290554670970133218405658122674674 * dT
);
- felders[12].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[12].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(12,mDT,dT,dTMin) then
+ if pruefeMaxDT(12,dTMax,dT,dTMin) then
continue;
felders[13].liKo(
@@ -191,9 +191,9 @@
-3.25479342483643918654589367587788726747711504674780680269911 * dT,
-2.16343541686422982353954211300054820889678036420109999154887 * dT
);
- felders[13].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[13].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(13,mDT,dT,dTMin) then
+ if pruefeMaxDT(13,dTMax,dT,dTMin) then
continue;
felders[14].liKo(
@@ -221,9 +221,9 @@
-1.71561608285936264922031819751349098912615880827551992973034 * dT,
-0.0244036405750127452135415444412216875465593598370910566069132 * dT
);
- felders[14].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[14].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(14,mDT,dT,dTMin) then
+ if pruefeMaxDT(14,dTMax,dT,dTMin) then
continue;
felders[15].liKo(
@@ -241,9 +241,9 @@
0.0910895662155176069593203555807484200111889091770101799647985 * dT,
0.777333643644968233538931228575302137803351053629547286334469 * dT
);
- felders[15].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[15].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(15,mDT,dT,dTMin) then
+ if pruefeMaxDT(15,dTMax,dT,dTMin) then
continue;
felders[16].liKo(
@@ -255,9 +255,9 @@
-0.157178665799771163367058998273128921867183754126709419409654 * dT,
0.157178665799771163367058998273128921867183754126709419409654 * dT
);
- felders[16].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[16].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(16,mDT,dT,dTMin) then
+ if pruefeMaxDT(16,dTMax,dT,dTMin) then
continue;
felders[17].liKo(
@@ -293,9 +293,9 @@
-0.34275815984718983994222055341385087174233873470395891993726 * dT,
-0.675 * dT
);
- felders[17].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[17].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(17,mDT,dT,dTMin) then
+ if pruefeMaxDT(17,dTMax,dT,dTMin) then
continue;
felders[1-aktuelleFelder].liKo(
diff --git a/rk1210.inc b/rk1210.inc
index d7ba52c..67a95ef 100644
--- a/rk1210.inc
+++ b/rk1210.inc
@@ -3,9 +3,9 @@
felders[aktuelleFelder],
0.2 * dT
);
- felders[2].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[2].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(2,mDT,dT,dTMin) then
+ if pruefeMaxDT(2,dTMax,dT,dTMin) then
continue;
felders[3].liKo(
@@ -15,9 +15,9 @@
-0.216049382716049382716049382716049382716049382716049382716049 * dT,
0.771604938271604938271604938271604938271604938271604938271605 * dT
);
- felders[3].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[3].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(3,mDT,dT,dTMin) then
+ if pruefeMaxDT(3,dTMax,dT,dTMin) then
continue;
felders[4].liKo(
@@ -27,9 +27,9 @@
0.208333333333333333333333333333333333333333333333333333333333 * dT,
0.625 * dT
);
- felders[4].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[4].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(4,mDT,dT,dTMin) then
+ if pruefeMaxDT(4,dTMax,dT,dTMin) then
continue;
felders[5].liKo(
@@ -41,9 +41,9 @@
0.22 * dT,
-0.08 * dT
);
- felders[5].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[5].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(5,mDT,dT,dTMin) then
+ if pruefeMaxDT(5,dTMax,dT,dTMin) then
continue;
felders[6].liKo(
@@ -55,9 +55,9 @@
0.4 * dT,
0.5 * dT
);
- felders[6].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[6].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(6,mDT,dT,dTMin) then
+ if pruefeMaxDT(6,dTMax,dT,dTMin) then
continue;
felders[7].liKo(
@@ -71,9 +71,9 @@
0.48317116756103289928883648045196250872410925751728917730238 * dT,
-0.038753024569476325208568144376762058039573330234136803880429 * dT
);
- felders[7].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[7].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(7,mDT,dT,dTMin) then
+ if pruefeMaxDT(7,dTMax,dT,dTMin) then
continue;
felders[8].liKo(
@@ -87,9 +87,9 @@
0.0137455792075966759812907801835048190594443990939408530842918 * dT,
-0.0661095317267682844455831341498149531672668252085016565917546 * dT
);
- felders[8].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[8].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(8,mDT,dT,dTMin) then
+ if pruefeMaxDT(8,dTMax,dT,dTMin) then
continue;
felders[9].liKo(
@@ -103,9 +103,9 @@
0.0680716801688453518578515120895103863112751730758794372203952 * dT,
0.408394315582641046727306852653894780093303185664924644551239 * dT
);
- felders[9].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[9].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(9,mDT,dT,dTMin) then
+ if pruefeMaxDT(9,dTMax,dT,dTMin) then
continue;
felders[10].liKo(
@@ -121,9 +121,9 @@
0.427930210752576611068192608300897981558240730580396406312359 * dT,
-0.0865117637557827005740277475955029103267246394128995965941585 * dT
);
- felders[10].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[10].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(10,mDT,dT,dTMin) then
+ if pruefeMaxDT(10,dTMax,dT,dTMin) then
continue;
felders[11].liKo(
@@ -141,9 +141,9 @@
-0.951294772321088980532340837388859453930924498799228648050949 * dT,
-0.408276642965631951497484981519757463459627174520978426909934 * dT
);
- felders[11].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[11].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(11,mDT,dT,dTMin) then
+ if pruefeMaxDT(11,dTMax,dT,dTMin) then
continue;
felders[12].liKo(
@@ -163,9 +163,9 @@
0.00263265981064536974369934736325334761174975280887405725010964 * dT,
0.00315472768977025060103545855572111407955208306374459723959783 * dT
);
- felders[12].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[12].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(12,mDT,dT,dTMin) then
+ if pruefeMaxDT(12,dTMax,dT,dTMin) then
continue;
felders[13].liKo(
@@ -181,9 +181,9 @@
0.0000176358982260285155407485928953302139937553442829975734148981 * dT,
0.0653866627415027051009595231385181033549511358787382098351924 * dT
);
- felders[13].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[13].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(13,mDT,dT,dTMin) then
+ if pruefeMaxDT(13,dTMax,dT,dTMin) then
continue;
felders[14].liKo(
@@ -201,9 +201,9 @@
-0.861264460105717678161432562258351242030270498966891201799225 * dT,
0.908651882074050281096239478469262145034957129939256789178785 * dT
);
- felders[14].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[14].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(14,mDT,dT,dTMin) then
+ if pruefeMaxDT(14,dTMax,dT,dTMin) then
continue;
felders[15].liKo(
@@ -223,9 +223,9 @@
0.00535364695524996055083260173615567408717110247274021056118319 * dT,
0.301167864010967916837091303817051676920059229784957479998077 * dT
);
- felders[15].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[15].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(15,mDT,dT,dTMin) then
+ if pruefeMaxDT(15,dTMax,dT,dTMin) then
continue;
felders[16].liKo(
@@ -247,9 +247,9 @@
-0.214007467967990254219503540827349569639028092344812795499026 * dT,
0.958202417754430239892724139109781371059908874605153648768037 * dT
);
- felders[16].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[16].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(16,mDT,dT,dTMin) then
+ if pruefeMaxDT(16,dTMax,dT,dTMin) then
continue;
felders[17].liKo(
@@ -273,9 +273,9 @@
-1.10683733362380649395704708016953056176195769617014899442903 * dT,
-0.929529037579203999778397238291233214220788057511899747507074 * dT
);
- felders[17].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[17].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(17,mDT,dT,dTMin) then
+ if pruefeMaxDT(17,dTMax,dT,dTMin) then
continue;
felders[18].liKo(
@@ -307,9 +307,9 @@
-1.94300935242819610883833776782364287728724899124166920477873 * dT,
-0.128352601849404542018428714319344620742146491335612353559923 * dT
);
- felders[18].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[18].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(18,mDT,dT,dTMin) then
+ if pruefeMaxDT(18,dTMax,dT,dTMin) then
continue;
felders[19].liKo(
@@ -343,9 +343,9 @@
-0.00115618834794939500490703608435907610059605754935305582045729 * dT,
-0.00544057908677007389319819914241631024660726585015012485938593 * dT
);
- felders[19].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[19].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(19,mDT,dT,dTMin) then
+ if pruefeMaxDT(19,dTMax,dT,dTMin) then
continue;
felders[20].liKo(
@@ -381,9 +381,9 @@
0.0418603916412360287969841020776788461794119440689356178942252 * dT,
0.279084255090877355915660874555379649966282167560126269290222 * dT
);
- felders[20].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[20].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(20,mDT,dT,dTMin) then
+ if pruefeMaxDT(20,dTMax,dT,dTMin) then
continue;
felders[21].liKo(
@@ -409,9 +409,9 @@
0.218636633721676647685111485017151199362509373698288330593486 * dT,
0.438313820361122420391059788940960176420682836652600698580091 * dT
);
- felders[21].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[21].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(21,mDT,dT,dTMin) then
+ if pruefeMaxDT(21,dTMax,dT,dTMin) then
continue;
felders[22].liKo(
@@ -439,9 +439,9 @@
0.196410889223054653446526504390100417677539095340135532418849 * dT,
-0.0984256130499315928152900286856048243348202521491288575952143 * dT
);
- felders[22].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[22].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(22,mDT,dT,dTMin) then
+ if pruefeMaxDT(22,dTMax,dT,dTMin) then
continue;
felders[23].liKo(
@@ -459,9 +459,9 @@
0.390696469295978451446999802258495981249099665294395945559163 * dT,
0.666666666666666666666666666666666666666666666666666666666667 * dT
);
- felders[23].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[23].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(23,mDT,dT,dTMin) then
+ if pruefeMaxDT(23,dTMax,dT,dTMin) then
continue;
felders[24].liKo(
@@ -473,9 +473,9 @@
-0.164609053497942386831275720164609053497942386831275720164609 * dT,
0.164609053497942386831275720164609053497942386831275720164609 * dT
);
- felders[24].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[24].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(24,mDT,dT,dTMin) then
+ if pruefeMaxDT(24,dTMax,dT,dTMin) then
continue;
felders[25].liKo(
@@ -525,9 +525,9 @@
-0.421296296296296296296296296296296296296296296296296296296296 * dT,
-0.7875 * dT
);
- felders[25].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[25].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(25,mDT,dT,dTMin) then
+ if pruefeMaxDT(25,dTMax,dT,dTMin) then
continue;
felders[1-aktuelleFelder].liKo(
diff --git a/rk1412.inc b/rk1412.inc
index 89b2e29..b80ff32 100644
--- a/rk1412.inc
+++ b/rk1412.inc
@@ -3,9 +3,9 @@
felders[aktuelleFelder],
0.111111111111111111111111111111111111111111111111111111111111 * dT
);
- felders[2].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[2].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(2,mDT,dT,dTMin) then
+ if pruefeMaxDT(2,dTMax,dT,dTMin) then
continue;
felders[3].liKo(
@@ -15,9 +15,9 @@
-0.833333333333333333333333333333333333333333333333333333333333 * dT,
1.38888888888888888888888888888888888888888888888888888888889 * dT
);
- felders[3].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[3].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(3,mDT,dT,dTMin) then
+ if pruefeMaxDT(3,dTMax,dT,dTMin) then
continue;
felders[4].liKo(
@@ -27,9 +27,9 @@
0.208333333333333333333333333333333333333333333333333333333333 * dT,
0.625 * dT
);
- felders[4].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[4].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(4,mDT,dT,dTMin) then
+ if pruefeMaxDT(4,dTMax,dT,dTMin) then
continue;
felders[5].liKo(
@@ -41,9 +41,9 @@
0.22 * dT,
-0.08 * dT
);
- felders[5].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[5].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(5,mDT,dT,dTMin) then
+ if pruefeMaxDT(5,dTMax,dT,dTMin) then
continue;
felders[6].liKo(
@@ -55,9 +55,9 @@
0.4 * dT,
0.5 * dT
);
- felders[6].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[6].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(6,mDT,dT,dTMin) then
+ if pruefeMaxDT(6,dTMax,dT,dTMin) then
continue;
felders[7].liKo(
@@ -71,9 +71,9 @@
0.482574490331246622475134780125688112865919023850168049679402 * dT,
-0.038140960001560699973088624000562020566411307247841147742197 * dT
);
- felders[7].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[7].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(7,mDT,dT,dTMin) then
+ if pruefeMaxDT(7,dTMax,dT,dTMin) then
continue;
felders[8].liKo(
@@ -87,9 +87,9 @@
0.0137885887618080880607695837016477814530969417491493385363543 * dT,
-0.06722101339966844497493995074143058569500863415253821828562 * dT
);
- felders[8].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[8].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(8,mDT,dT,dTMin) then
+ if pruefeMaxDT(8,dTMax,dT,dTMin) then
continue;
felders[9].liKo(
@@ -103,9 +103,9 @@
0.216019825625503063708860097659866573490979433278117320188668 * dT,
0.423695063515761937337619073960976753205867469544123532683116 * dT
);
- felders[9].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[9].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(9,mDT,dT,dTMin) then
+ if pruefeMaxDT(9,dTMax,dT,dTMin) then
continue;
felders[10].liKo(
@@ -121,9 +121,9 @@
0.0978080858367729012259313014081291665503740655476733940756599 * dT,
0.217590689243420631360008651767860318344168120024782176879989 * dT
);
- felders[10].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[10].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(10,mDT,dT,dTMin) then
+ if pruefeMaxDT(10,dTMax,dT,dTMin) then
continue;
felders[11].liKo(
@@ -141,9 +141,9 @@
-0.247656877593994914689992276329810825853958069263947095548189 * dT,
0.110895029771437682893999851839061714522445173600678718208625 * dT
);
- felders[11].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[11].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(11,mDT,dT,dTMin) then
+ if pruefeMaxDT(11,dTMax,dT,dTMin) then
continue;
felders[12].liKo(
@@ -163,9 +163,9 @@
0.204890423831599428189499202098105603312029235081420653574829 * dT,
-1.56261579627468188307070943950527825211462892236424360892806 * dT
);
- felders[12].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[12].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(12,mDT,dT,dTMin) then
+ if pruefeMaxDT(12,dTMax,dT,dTMin) then
continue;
felders[13].liKo(
@@ -181,9 +181,9 @@
-0.00805328367804983036823857162048902911923392887337029314844206 * dT,
0.0211517528067396521915711903523399601316877825157550573051221 * dT
);
- felders[13].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[13].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(13,mDT,dT,dTMin) then
+ if pruefeMaxDT(13,dTMax,dT,dTMin) then
continue;
felders[14].liKo(
@@ -201,9 +201,9 @@
0.00988442549447664668946335414487885256040819982786014648129297 * dT,
-0.0213010771328887351384307642875927384886634565429572466632092 * dT
);
- felders[14].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[14].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(14,mDT,dT,dTMin) then
+ if pruefeMaxDT(14,dTMax,dT,dTMin) then
continue;
felders[15].liKo(
@@ -223,9 +223,9 @@
-0.977235005036766810872264852372525633013107656892839677696022 * dT,
-0.660026980479294694616225013856327693720573981219974874776419 * dT
);
- felders[15].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[15].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(15,mDT,dT,dTMin) then
+ if pruefeMaxDT(15,dTMax,dT,dTMin) then
continue;
felders[16].liKo(
@@ -247,9 +247,9 @@
0.124343093331358243286225595741786448038973408895106741855721 * dT,
0.00413829693239480694403512496204335960426192908674476033832967 * dT
);
- felders[16].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[16].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(16,mDT,dT,dTMin) then
+ if pruefeMaxDT(16,dTMax,dT,dTMin) then
continue;
felders[17].liKo(
@@ -273,9 +273,9 @@
0.251708904586819292210480529948970541404887852931447491219418 * dT,
0.779906470345586398810756795282334476023540593411550187024263 * dT
);
- felders[17].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[17].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(17,mDT,dT,dTMin) then
+ if pruefeMaxDT(17,dTMax,dT,dTMin) then
continue;
felders[18].liKo(
@@ -293,9 +293,9 @@
0.000591726029494171190528755742777717259844340971924321528178248 * dT,
-4.01614722154557337064691684906375587732264247950093804676867E-7 * dT
);
- felders[18].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[18].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(18,mDT,dT,dTMin) then
+ if pruefeMaxDT(18,dTMax,dT,dTMin) then
continue;
felders[19].liKo(
@@ -315,9 +315,9 @@
-2.04486480935804242706707569691004307904442837552677456232848E-6 * dT,
0.105328578824431893399799402979093997354240904235172843146582 * dT
);
- felders[19].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[19].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(19,mDT,dT,dTMin) then
+ if pruefeMaxDT(19,dTMax,dT,dTMin) then
continue;
felders[20].liKo(
@@ -339,9 +339,9 @@
7.64130548038698765563029310880237651185173367813936997648198 * dT,
3.50602043659751834989896082949744710968212949893375368243588 * dT
);
- felders[20].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[20].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(20,mDT,dT,dTMin) then
+ if pruefeMaxDT(20,dTMax,dT,dTMin) then
continue;
felders[21].liKo(
@@ -365,9 +365,9 @@
-3.64411637921569236846406990361350645806721478409266709351203 * dT,
-0.804503249910509910899030787958579499315694913210787878260459 * dT
);
- felders[21].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[21].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(21,mDT,dT,dTMin) then
+ if pruefeMaxDT(21,dTMax,dT,dTMin) then
continue;
felders[22].liKo(
@@ -393,9 +393,9 @@
13.1939710030282333443670964371153238435064159623744975073252 * dT,
1.25128781283980445450114974148056006317268830077396406361417 * dT
);
- felders[22].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[22].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(22,mDT,dT,dTMin) then
+ if pruefeMaxDT(22,dTMax,dT,dTMin) then
continue;
felders[23].liKo(
@@ -423,9 +423,9 @@
0.422422733996325326010225127471388772575086538809603346825334 * dT,
0.0859131249503067107308438031499859443441115056294154956487671 * dT
);
- felders[23].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[23].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(23,mDT,dT,dTMin) then
+ if pruefeMaxDT(23,dTMax,dT,dTMin) then
continue;
felders[24].liKo(
@@ -463,9 +463,9 @@
0.0210134706331264177317735424331396407424412188443757490871603 * dT,
0.00952196014417121794175101542454575907376360233658356240547761 * dT
);
- felders[24].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[24].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(24,mDT,dT,dTMin) then
+ if pruefeMaxDT(24,dTMax,dT,dTMin) then
continue;
felders[25].liKo(
@@ -505,9 +505,9 @@
-0.0870718339841810522431884137957986245724252047388936572215438 * dT,
-7.39351814158303067567016952195521063999185773249132944724553 * dT
);
- felders[25].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[25].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(25,mDT,dT,dTMin) then
+ if pruefeMaxDT(25,dTMax,dT,dTMin) then
continue;
felders[26].liKo(
@@ -549,9 +549,9 @@
4.79282506449930799649797749629840189457296934139359048988332 * dT,
0.153725464873068577844576387402512082757034273069877432944621 * dT
);
- felders[26].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[26].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(26,mDT,dT,dTMin) then
+ if pruefeMaxDT(26,dTMax,dT,dTMin) then
continue;
felders[27].liKo(
@@ -599,9 +599,9 @@
-1.35548714715078654978732186705996404017554501614191325114947 * dT,
-1.57196275801232751882901735171459249177687219114442583461866 * dT
);
- felders[27].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[27].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(27,mDT,dT,dTMin) then
+ if pruefeMaxDT(27,dTMax,dT,dTMin) then
continue;
felders[28].liKo(
@@ -651,9 +651,9 @@
1.6267482744706653746298936492962893398812502928418368027902 * dT,
0.491719043846229147070666628704194097678081907210673044988866 * dT
);
- felders[28].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[28].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(28,mDT,dT,dTMin) then
+ if pruefeMaxDT(28,dTMax,dT,dTMin) then
continue;
felders[29].liKo(
@@ -689,9 +689,9 @@
-0.0439870229715046685058790092341545026046103890294261359042581 * dT,
-0.13758560676332522486565963219678774664744722297508486597544 * dT
);
- felders[29].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[29].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(29,mDT,dT,dTMin) then
+ if pruefeMaxDT(29,dTMax,dT,dTMin) then
continue;
felders[30].liKo(
@@ -729,9 +729,9 @@
1.96337522866858908928262850028093813988180440518267404553576 * dT,
0.856238975085428354755349769879501772112121597411563802855067 * dT
);
- felders[30].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[30].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(30,mDT,dT,dTMin) then
+ if pruefeMaxDT(30,dTMax,dT,dTMin) then
continue;
felders[31].liKo(
@@ -769,9 +769,9 @@
0.711915811585189227887648262043794387578291882406745570495765 * dT,
0.550499525310802324138388507020508177411414311000037561712836 * dT
);
- felders[31].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[31].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(31,mDT,dT,dTMin) then
+ if pruefeMaxDT(31,dTMax,dT,dTMin) then
continue;
felders[32].liKo(
@@ -811,9 +811,9 @@
0.254297048076270161384068506997153122141835626976703920846242 * dT,
-0.109993425580724703919462404865068340845119058295846426463652 * dT
);
- felders[32].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[32].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(32,mDT,dT,dTMin) then
+ if pruefeMaxDT(32,dTMax,dT,dTMin) then
continue;
felders[33].liKo(
@@ -831,9 +831,9 @@
0.492529543718026304422682049114021320200214681580657784719074 * dT,
0.75 * dT
);
- felders[33].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[33].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(33,mDT,dT,dTMin) then
+ if pruefeMaxDT(33,dTMax,dT,dTMin) then
continue;
felders[34].liKo(
@@ -845,9 +845,9 @@
-0.222222222222222222222222222222222222222222222222222222222222 * dT,
0.222222222222222222222222222222222222222222222222222222222222 * dT
);
- felders[34].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[34].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(34,mDT,dT,dTMin) then
+ if pruefeMaxDT(34,dTMax,dT,dTMin) then
continue;
felders[35].liKo(
@@ -915,9 +915,9 @@
-0.21875 * dT,
-0.291666666666666666666666666666666666666666666666666666666667 * dT
);
- felders[35].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);
+ felders[35].berechneAbleitungen(dX,iDX,pDNMax);
- if pruefeMaxDT(35,mDT,dT,dTMin) then
+ if pruefeMaxDT(35,dTMax,dT,dTMin) then
continue;
felders[1-aktuelleFelder].liKo(
diff --git a/rk3_8.inc b/rk3_8.inc
new file mode 100644
index 0000000..3419dab
--- /dev/null
+++ b/rk3_8.inc
@@ -0,0 +1,47 @@
+ felders[2].liKo(
+ felders[aktuelleFelder],
+ felders[aktuelleFelder],
+ 1/3 * dT
+ );
+ felders[2].berechneAbleitungen(dX,iDX,pDNMax);
+
+ if pruefeMaxDT(2,dTMax,dT,dTMin) then
+ continue;
+
+ felders[3].liKo(
+ felders[aktuelleFelder],
+ felders[aktuelleFelder],
+ felders[2],
+ -1/3 * dT,
+ 1 * dT
+ );
+ felders[3].berechneAbleitungen(dX,iDX,pDNMax);
+
+ if pruefeMaxDT(3,dTMax,dT,dTMin) then
+ continue;
+
+ felders[4].liKo(
+ felders[aktuelleFelder],
+ felders[aktuelleFelder],
+ felders[2],
+ felders[3],
+ 1 * dT,
+ -1 * dT,
+ 1 * dT
+ );
+ felders[4].berechneAbleitungen(dX,iDX,pDNMax);
+
+ if pruefeMaxDT(4,dTMax,dT,dTMin) then
+ continue;
+
+ felders[1-aktuelleFelder].liKo(
+ felders[aktuelleFelder],
+ felders[aktuelleFelder],
+ felders[2],
+ felders[3],
+ felders[4],
+ 1/8 * dT,
+ 3/8 * dT,
+ 3/8 * dT,
+ 1/8 * dT
+ );
diff --git a/rk3_8.txt b/rk3_8.txt
new file mode 100644
index 0000000..cc1ec70
--- /dev/null
+++ b/rk3_8.txt
@@ -0,0 +1,30 @@
+ THE COEFFICIENTS OF RK4
+ using the notation of Fehlberg, Bettis, Horn, et alia
+
+
+ k a[k]
+
+ 0 0
+ 1 1/3
+ 2 2/3
+ 3 1
+
+
+ k c[k]
+
+ 0 1/8
+ 1 3/8
+ 2 3/8
+ 3 1/8
+
+
+ k j ß[k,j]
+
+ 1 0 1/3
+ 2 0 -1/3
+ 2 1 1
+ 3 0 1
+ 3 1 -1
+ 3 2 1
+
+
diff --git a/rk4.inc b/rk4.inc
new file mode 100644
index 0000000..4b1cc86
--- /dev/null
+++ b/rk4.inc
@@ -0,0 +1,41 @@
+ felders[2].liKo(
+ felders[aktuelleFelder],
+ felders[aktuelleFelder],
+ 0.5 * dT
+ );
+ felders[2].berechneAbleitungen(dX,iDX,pDNMax);
+
+ if pruefeMaxDT(2,dTMax,dT,dTMin) then
+ continue;
+
+ felders[3].liKo(
+ felders[aktuelleFelder],
+ felders[2],
+ 0.5 * dT
+ );
+ felders[3].berechneAbleitungen(dX,iDX,pDNMax);
+
+ if pruefeMaxDT(3,dTMax,dT,dTMin) then
+ continue;
+
+ felders[4].liKo(
+ felders[aktuelleFelder],
+ felders[3],
+ 1 * dT
+ );
+ felders[4].berechneAbleitungen(dX,iDX,pDNMax);
+
+ if pruefeMaxDT(4,dTMax,dT,dTMin) then
+ continue;
+
+ felders[1-aktuelleFelder].liKo(
+ felders[aktuelleFelder],
+ felders[aktuelleFelder],
+ felders[2],
+ felders[3],
+ felders[4],
+ 1/6 * dT,
+ 1/3 * dT,
+ 1/3 * dT,
+ 1/6 * dT
+ );
diff --git a/rk4.txt b/rk4.txt
new file mode 100644
index 0000000..7e46483
--- /dev/null
+++ b/rk4.txt
@@ -0,0 +1,30 @@
+ THE COEFFICIENTS OF RK4
+ using the notation of Fehlberg, Bettis, Horn, et alia
+
+
+ k a[k]
+
+ 0 0
+ 1 0.5
+ 2 0.5
+ 3 1
+
+
+ k c[k]
+
+ 0 1/6
+ 1 1/3
+ 2 1/3
+ 3 1/6
+
+
+ k j ß[k,j]
+
+ 1 0 0.5
+ 2 0 0
+ 2 1 0.5
+ 3 0 0
+ 3 1 0
+ 3 2 1
+
+
diff --git a/rktopas b/rktopas
index f0900c8..589f8d3 100755
--- a/rktopas
+++ b/rktopas
@@ -4,7 +4,7 @@ for inputFile in $*
do
outputFile="$(echo ${inputFile} | sed "s/\.txt$/.inc/")"
- lines=$(grep --text "^ *[0-9]\+ \+[0-9]\+ \+[-0-9.^*]\+.$" ${inputFile} | sed "s/^ \+//" | sed "s/[^0-9]$//" | grep -v "^[0-9]\+ \+[0-9]\+ \+0\(\.0\+\)\?$" | sed "s/0\+$//" | awk '{print $1+1" "$2+1" "$3}')
+ lines=$(grep --text "^ *[0-9]\+ \+[0-9]\+ \+[-0-9.^*/]\+.\?$" ${inputFile} | sed "s/^ \+//" | sed "s/[^0-9]$//" | grep -v "^[0-9]\+ \+[0-9]\+ \+0\(\.0\+\)\?$" | sed "s/0\+$//" | awk '{print $1+1" "$2+1" "$3}')
[ -e ${outputFile} ] && rm ${outputFile}
touch ${outputFile}
@@ -12,22 +12,22 @@ do
for i in $(echo -ne "${lines}" | cut -d " " -f 1 | sort -nu)
do
echo -ne " felders[${i}].liKo(\n felders[aktuelleFelder]" >> ${outputFile}
- echo -ne "${lines}" | grep "^${i} \+" | sed "s/^[0-9]\+ \+\([0-9]\+\) \+[-0-9.*^]\+$/,\n felders[\1]/" | tr "\n" ";" | sed "s/;,/,/g" | sed "s/;$//" | tr ";" "\n" | sed "s/felders\[1\]/felders[aktuelleFelder]/g" >> ${outputFile}
- echo -ne "${lines}" | grep "^${i} \+" | sed "s/^[0-9]\+ \+[0-9]\+ \+\([-0-9.*^]\+\)$/,\n \1 * dT/" | tr "\n" ";" | sed "s/,;/,\n/g" | sed "s/;,/,/g" | tr ";" " " | sed "s/ $//" | sed "s/\*10^/E/g" >> ${outputFile}
+ echo -ne "${lines}" | grep "^${i} \+" | sed "s/^[0-9]\+ \+\([0-9]\+\) \+[-0-9.*^/]\+$/,\n felders[\1]/" | tr "\n" ";" | sed "s/;,/,/g" | sed "s/;$//" | tr ";" "\n" | sed "s/felders\[1\]/felders[aktuelleFelder]/g" >> ${outputFile}
+ echo -ne "${lines}" | grep "^${i} \+" | sed "s/^[0-9]\+ \+[0-9]\+ \+\([-0-9.*^/]\+\)$/,\n \1 * dT/" | tr "\n" ";" | sed "s/,;/,\n/g" | sed "s/;,/,/g" | tr ";" " " | sed "s/ $//" | sed "s/\*10^/E/g" >> ${outputFile}
echo -e "\n );" >> ${outputFile}
- echo " felders[${i}].berechneAbleitungen(dT/2,dX,iDT,iDX,pDNMax);" >> ${outputFile}
+ echo " felders[${i}].berechneAbleitungen(dX,iDX,pDNMax);" >> ${outputFile}
echo >> ${outputFile}
- echo " if pruefeMaxDT(${i},mDT,dT,dTMin) then" >> ${outputFile}
+ echo " if pruefeMaxDT(${i},dTMax,dT,dTMin) then" >> ${outputFile}
echo " continue;" >> ${outputFile}
echo >> ${outputFile}
done
- rest=$[$(wc -l ${inputFile} | cut -d " " -f 1)-$(grep --text -n "^ *k\s\+c\[k].$" ${inputFile} | cut -d ":" -f 1)]
- lines=$(tail -n${rest} ${inputFile} | sed "s/^ \+//" | sed "s/[^0-9]$//" | grep --text "^[0-9]\+ \+[-0-9.^*]\+$" | grep -v "^[0-9]\+ \+0\(\.0\+\)\?$" | sed "s/0\+$//" | awk '{print $1+1" "$2}')
+ rest=$[$(wc -l ${inputFile} | cut -d " " -f 1)-$(grep --text -n "^ *k\s\+c\[k].\?$" ${inputFile} | cut -d ":" -f 1)]
+ lines=$(tail -n${rest} ${inputFile} | sed "s/^ \+//" | sed "s/[^0-9]$//" | grep --text "^[0-9]\+ \+[-0-9.^*/]\+$" | grep -v "^[0-9]\+ \+0\(\.0\+\)\?$" | sed "s/0\+$//" | awk '{print $1+1" "$2}')
echo -e " felders[1-aktuelleFelder].liKo(\n felders[aktuelleFelder]," >> ${outputFile}
- echo -e "${lines}" | sed "s/^\([0-9]\+\) \+[-0-9.*^]\+$/ felders[\1],/" | sed "s/felders\[1\]/felders[aktuelleFelder]/g" >> ${outputFile}
- echo -ne "${lines}" | sed "s/^[0-9]\+ \+\([-0-9.*^]\+\)$/ \1 * dT,/" | tr "\n" "," | sed "s/\([^,]\),$/\1\n );\n/" | sed "s/,,/,\n/g" | sed "s/\*10^/E/g" >> ${outputFile}
+ echo -e "${lines}" | sed "s/^\([0-9]\+\) \+[-0-9.*^/]\+$/ felders[\1],/" | sed "s/felders\[1\]/felders[aktuelleFelder]/g" >> ${outputFile}
+ echo -ne "${lines}" | sed "s/^[0-9]\+ \+\([-0-9.*^/]\+\)$/ \1 * dT,/" | tr "\n" "," | sed "s/\([^,]\),$/\1\n );\n/" | sed "s/,,/,\n/g" | sed "s/\*10^/E/g" >> ${outputFile}
done