summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2015-08-24 14:10:38 +0200
committerErich Eckner <git@eckner.net>2015-08-24 14:10:38 +0200
commitbddf19d78dfcc550a4da2410304a6ce70f608a8c (patch)
tree52367287b987afa675112067be45d2139a42ae9e
parent6c4fc54c735407ef70a3de495a58600af730d07b (diff)
downloadPlasmapropagation-bddf19d78dfcc550a4da2410304a6ce70f608a8c.tar.xz
auf fft zur Gradientenberechnung umgestellt - sehr langsam, vmtl. durch
schlechte Datenstrukturierung (Overhead durch Klassen)
-rw-r--r--Physikunit.pas208
-rw-r--r--Plasmapropagation.lps158
2 files changed, 193 insertions, 173 deletions
diff --git a/Physikunit.pas b/Physikunit.pas
index 27cca80..ef77ee4 100644
--- a/Physikunit.pas
+++ b/Physikunit.pas
@@ -97,6 +97,7 @@ type
public
werte: array of array[boolean] of extended; // Besetzungsdichten und deren Ableitungen für verschiedene Teilchenspezies
iMGamma: array of extended; // 1/m/gamma (= v/p)
+ grad: array of array[0..1] of extended; // Ableitung der Besetzungsdichte nach x und px
constructor create(anzTeilchen: longint); overload; // NullPunkt erstellen
constructor create(rp: tRaumPunkt; linksRaum,linksImpuls: tImpulsPunkt; anzTeilchen: longint); overload;
destructor destroy; override;
@@ -107,10 +108,8 @@ type
procedure akkumuliereEMQuellen(var emQuellen: tEMQuellen; pX,dVP: extended); inline;
function gibMirWas(var defizit: extended; entfernung, teilchen,richtung: longint; positiv: boolean): boolean; inline; // ich habe jemanden erreicht
procedure setzeNull; inline;
- procedure berechneAbleitungen(pX,iDX,iDPX: extended); inline;
- function gradient(rtg,tlc: longint; iD,fak: extended): extended; inline;
+ procedure berechneAbleitungen(pX: extended); inline;
property istNullPunkt: boolean read istNullPkt;
- function gibNullPunkt: tImpulsPunkt;
end;
{ tRaumPunkt }
@@ -134,7 +133,7 @@ type
procedure berechneEMFelder(dX,iDX: extended); overload; inline;
procedure berechneEMQuellen;
procedure berechneEMAbleitungen(iDX: extended); inline;
- procedure berechnePhasenraumAbleitungen(iDX: extended); inline;
+ procedure berechnePhasenraumAbleitungen; inline;
{$DEFINE LiKotRaumPunktHeader}
{$INCLUDE linearkombinationen.inc}
{$UNDEF LiKotRaumPunktHeader}
@@ -163,6 +162,7 @@ type
constructor create(groesse: longint; _teilchen: array of tTeilchenSpezies; lichter: tMyStringList; parent: tGitter; aP: longint; dP: extended);
destructor destroy; override;
procedure berechneAbleitungen(dX,iDX: extended); inline;
+ procedure berechneGradienten(iDX,iDP: extended);
{$DEFINE LiKotFelderHeader}
{$INCLUDE linearkombinationen.inc}
{$UNDEF LiKotFelderHeader}
@@ -399,7 +399,7 @@ begin
if sT>=nNum+sDT/2 then
schreibeKopf;
- cnt:=floor((length(gitter.felders[gitter.aktuelleFelder].inhalt)-1)/sDX*gitter.dX+1);
+ cnt:=floor(((length(gitter.felders[gitter.aktuelleFelder].inhalt)-1)*gitter.dX+Min(gitter.dX,sDX)/2)/sDX+1);
cX:=gitter.xl;
sX:=cX+(cnt-1)*sDX;
@@ -587,8 +587,8 @@ end;
constructor tImpulsPunkt.create(anzTeilchen: longint);
var
- i: longint;
- b: boolean;
+ i,j: longint;
+ b: boolean;
begin
inherited create;
istNullPkt:=true; // als NullPunkt erstellen
@@ -598,6 +598,11 @@ begin
for i:=0 to length(werte)-1 do
for b:=false to true do
werte[i,b]:=0;
+ fillchar(grad,sizeof(grad),#0);
+ setlength(grad,anzTeilchen);
+ for i:=0 to length(grad)-1 do
+ for j:=0 to 1 do
+ grad[i,j]:=0;
fillchar(iMGamma,sizeof(iMGamma),#0);
setlength(iMGamma,length(werte));
for i:=0 to length(iMGamma)-1 do
@@ -610,9 +615,9 @@ end;
constructor tImpulsPunkt.create(rp: tRaumPunkt; linksRaum,linksImpuls: tImpulsPunkt; anzTeilchen: longint);
var
- i: longint;
- b: boolean;
- np: tImpulsPunkt;
+ i,j: longint;
+ b: boolean;
+ np: tImpulsPunkt;
begin
inherited create;
istNullPkt:=false;
@@ -622,6 +627,11 @@ begin
for i:=0 to length(werte)-1 do
for b:=false to true do
werte[i,b]:=0;
+ fillchar(grad,sizeof(grad),#0);
+ setlength(grad,anzTeilchen);
+ for i:=0 to length(grad)-1 do
+ for j:=0 to 1 do
+ grad[i,j]:=0;
fillchar(iMGamma,sizeof(iMGamma),#0);
setlength(iMGamma,length(werte));
for i:=0 to length(iMGamma)-1 do
@@ -630,22 +640,19 @@ begin
nachbarn[0,true]:=nil;
nachbarn[1,false]:=linksImpuls;
nachbarn[1,true]:=nil;
- for i:=0 to 1 do
- if assigned(nachbarn[i,false]) and
- not nachbarn[i,false].istNullPunkt then
- nachbarn[i,false].nachbarn[i,true]:=self;
np:=nil;
for i:=0 to 1 do
- if assigned(nachbarn[i,false]) and
- not assigned(np) then
- np:=nachbarn[i,false].gibNullPunkt;
+ if assigned(nachbarn[i,false]) then begin
+ if nachbarn[i,false].nachbarn[i,true].istNullPunkt then
+ np:=nachbarn[i,false].nachbarn[i,true];
+ nachbarn[i,false].nachbarn[i,true]:=self;
+ end;
if not assigned(np) then
np:=tImpulsPunkt.create(anzTeilchen);
for i:=0 to 1 do
for b:=false to true do
- if not assigned(nachbarn[i,b]) then begin
+ if not assigned(nachbarn[i,b]) then
nachbarn[i,b]:=np;
- end;
end;
destructor tImpulsPunkt.destroy;
@@ -694,9 +701,9 @@ begin
raumpunkt.felder.gitter.abbrechen;
end; *)
end;
- if werte[i,false]>1E10 then begin
+ if werte[i,false]>1E100 then begin
pro:=tProtokollant.create(raumpunkt.felder.gitter.prot,'impulsPunkt.nichtnegativieren');
- pro.schreibe('An einer Stelle im Phasenraum sind bereits mehr als 10^100 Teilchen, ich breche ab!',true);
+ pro.schreibe('An einer Stelle im Phasenraum sind bereits mehr als 10^100 Teilchen, ich breche ab (t = '+floattostr(raumpunkt.felder.gitter.t)+' T)!',true);
pro.free;
raumpunkt.felder.gitter.abbrechen;
end;
@@ -755,7 +762,7 @@ begin
end;
end;
-procedure tImpulsPunkt.berechneAbleitungen(pX,iDX,iDPX: extended);
+procedure tImpulsPunkt.berechneAbleitungen(pX: extended);
var
i: longint;
tx,tp: extended;
@@ -770,73 +777,9 @@ begin
( raumpunkt.emFelder[efEX,false]
+ raumpunkt.matFelder[i,mfPY,false] * iMGamma[i] * raumpunkt.emFelder[efBZ,false]);
werte[i,true]:=
- gradient(0,i,iDX,tX) +
- gradient(1,i,iDPX,tP);
-(* tX * (
- (nachbarn[0,true].werte[i,false] - nachbarn[0,false].werte[i,false])
- + sign(tX)*raumpunkt.felder.teilchen[i].diffusion[0] * (
- nachbarn[0,true].werte[i,false] +
- nachbarn[0,false].werte[i,false] -
- 2*werte[i,false]
- )
- ) * iDX/2
- + tP * (
- (nachbarn[1,true].werte[i,false] - nachbarn[1,false].werte[i,false])
- + sign(tP)*raumpunkt.felder.teilchen[i].diffusion[1] * (
- nachbarn[1,true].werte[i,false] +
- nachbarn[1,false].werte[i,false] -
- 2*werte[i,false]
- )
- )* iDPX/2; *)
+ grad[i,0]*tX +
+ grad[i,1]*tP;
end;
-
- // Der jeweils zweite Summand entspricht (in etwa) einer thermischen
- // Verschmierung und soll die numerische Stabilität bis zu
- // d(ln n)/d[xp] * d[XP] = "diffusion" gewährleisten.
-end;
-
-function tImpulsPunkt.gradient(rtg,tlc: longint; iD,fak: extended): extended;
-begin
-
- {
- // Variante mit Diffusionsterm
- result:=
- fak * ((nachbarn[rtg,true].werte[tlc,false] - nachbarn[rtg,false].werte[tlc,false])
- + sign(fak)*raumpunkt.felder.teilchen[tlc].diffusion[rtg] * (
- nachbarn[rtg,true].werte[tlc,false] +
- nachbarn[rtg,false].werte[tlc,false] -
- 2*werte[tlc,false]
- )
- ) * iD/2;
- }
-
- result:=
- fak * ( - 1/60 * nachbarn[rtg,false].nachbarn[rtg,false].nachbarn[rtg,false].werte[tlc,false]
- + 3/20 * nachbarn[rtg,false].nachbarn[rtg,false].werte[tlc,false]
- - 3/4 * nachbarn[rtg,false].werte[tlc,false]
- + 3/4 * nachbarn[rtg,true].werte[tlc,false]
- - 3/20 * nachbarn[rtg,true].nachbarn[rtg,true].werte[tlc,false]
- + 1/60 * nachbarn[rtg,true].nachbarn[rtg,true].nachbarn[rtg,true].werte[tlc,false]
- ) * iD;
-
-
-// probier mal den Gradienten anders zu berechnen und zwar so:
-// https://en.wikipedia.org/wiki/Finite_difference_coefficient
-end;
-
-function tImpulsPunkt.gibNullPunkt: tImpulsPunkt;
-var
- i: longint;
-begin
- if istNullPunkt then begin
- result:=self;
- exit;
- end;
- result:=nil;
- for i:=0 to 1 do
- if assigned(nachbarn[i,false]) and
- not assigned(result) then
- result:=nachbarn[i,false].gibNullPunkt;
end;
// tRaumPunkt ******************************************************************
@@ -867,7 +810,7 @@ begin
rN:=nil;
if assigned(lN) then
lN.rN:=self;
- aP:=_aP+byte(not odd(_aP));
+ aP:=_aP;
dP:=_dP;
fillchar(phasenraum,sizeof(phasenraum),#0);
setlength(phasenraum,aP);
@@ -956,13 +899,13 @@ begin
emFelder[efAY,true]:=emFelder[efDAYDT,false];
end;
-procedure tRaumPunkt.berechnePhasenraumAbleitungen(iDX: extended);
+procedure tRaumPunkt.berechnePhasenraumAbleitungen;
var
i: longint;
begin
// df/dt = - v Nabla f - q(E + v/c x B) Nabla_p f
for i:=0 to aP-1 do
- phasenraum[i].berechneAbleitungen((i-(aP div 2))*dP,iDX,1/dP);
+ phasenraum[i].berechneAbleitungen((i-(aP div 2))*dP);
end;
function tRaumPunkt.nichtnegativieren: extended; // Dichten nicht negativ machen
@@ -1128,7 +1071,7 @@ begin
for i:=0 to length(teilchen)-1 do
teilchen[i]:=tTeilchenSpezies.create(_teilchen[i]);
fillchar(inhalt,sizeof(inhalt),#0);
- setlength(inhalt,groesse+4); // zwei Felder links und rechts extra für Randbedingungen
+ setlength(inhalt,groesse);
inhalt[0]:=tRaumPunkt.create(nil,self,length(teilchen),aP,dP);
for i:=1 to length(inhalt)-1 do
inhalt[i]:=tRaumPunkt.create(inhalt[i-1],self,length(teilchen),aP,dP);
@@ -1190,6 +1133,74 @@ begin
exprToFloat(false,lichters[rechts][i],gitter.kvs,nil);
end;
+procedure tFelder.berechneGradienten(iDX,iDP: extended);
+var
+ res,ims: array of extended;
+ i,j,tlc,len: longint;
+ tmp: extended;
+begin
+
+ // Ableitungen nach PX
+
+ write('.');
+
+ len:=length(inhalt[0].phasenraum);
+ write(len);
+ setlength(res,len);
+ setlength(ims,len);
+ for i:=0 to length(inhalt)-1 do
+ for tlc:=0 to length(teilchen)-1 do begin
+ if len<>length(inhalt[i].phasenraum) then
+ raise exception.create('Unterschiedliche Diskretisierung im Phasenraum an unterschiedlichen Orten!');
+ for j:=0 to length(inhalt[i].phasenraum)-1 do begin
+ res[j]:=inhalt[i].phasenraum[j].werte[tlc,false];
+ ims[j]:=0;
+ end;
+ fft(res,ims,false);
+ for j:=0 to (len div 2)-1 do begin
+ tmp:=res[j];
+ res[j]:=ims[j]*j;
+ ims[j]:=-tmp*j;
+
+ tmp:=res[len-1-j];
+ res[len-1-j]:=ims[len-1-j]*(-j-1);
+ ims[len-1-j]:=-tmp*(-j-1);
+ end;
+ fft(res,ims,true);
+ for j:=0 to length(inhalt[i].phasenraum)-1 do
+ inhalt[i].phasenraum[j].grad[tlc,0]:=res[j]*iDP*0;
+ end;
+
+ // Ableitungen nach X
+
+ write('.');
+ len:=length(inhalt);
+ write(len);
+ setlength(res,2*len);
+ setlength(ims,2*len);
+ for i:=0 to length(inhalt[0].phasenraum)-1 do
+ for tlc:=0 to length(teilchen)-1 do begin
+ for j:=0 to length(inhalt)-1 do begin
+ res[j]:=inhalt[j].phasenraum[i].werte[tlc,false];
+ ims[j]:=0;
+ end;
+ fft(res,ims,false);
+ for j:=0 to (len div 2)-1 do begin
+ tmp:=res[j];
+ res[j]:=ims[j]*j;
+ ims[j]:=-tmp*j;
+
+ tmp:=res[len-1-j];
+ res[len-1-j]:=ims[len-1-j]*(-j-1);
+ ims[len-1-j]:=-tmp*(-j-1);
+ end;
+ fft(res,ims,true);
+ for j:=0 to length(inhalt)-1 do
+ inhalt[j].phasenraum[i].grad[tlc,1]:=res[j]*iDX*0;
+ end;
+ write('>');
+end;
+
procedure tFelder.berechneAbleitungen(dX,iDX: extended);
var
i: longint;
@@ -1214,8 +1225,10 @@ begin
for i:=1 to length(inhalt)-2 do // sonstige Ableitungen des A-Feldes berechnen
inhalt[i].berechneEMAbleitungen(iDX);
+ berechneGradienten(iDX,1/inhalt[0].dP); // Gradienten der Phasenraumbesetzungsdichte berechnen
+
for i:=1 to length(inhalt)-2 do // Ableitungen der Phasenraumbesetzungsdichten berechnen (Rand wird ausgelassen!)
- inhalt[i].berechnePhasenraumAbleitungen(iDX);
+ inhalt[i].berechnePhasenraumAbleitungen;
end;
procedure tFelder.setzeNull;
@@ -1251,6 +1264,15 @@ var
i: longint;
begin
inherited create;
+
+ i:=aP;
+ aP:=round(power(2,ceil(ln(aP-0.5)/ln(2))));
+ dP:=dP*(i-1)/(aP-1);
+
+ i:=size;
+ size:=round(power(2,ceil(ln(size+4-0.5)/ln(2)))); // zwei Felder links und rechts extra für Randbedingungen
+ deltaX:=deltaX*(i-1)/(size-4-1);
+
abbruch:=false;
besitzer:=derBesitzer;
zeitverfahren:=zv;
diff --git a/Plasmapropagation.lps b/Plasmapropagation.lps
index 9330883..557ace6 100644
--- a/Plasmapropagation.lps
+++ b/Plasmapropagation.lps
@@ -7,8 +7,7 @@
<Unit0>
<Filename Value="Plasmapropagation.lpr"/>
<IsPartOfProject Value="True"/>
- <TopLine Value="27"/>
- <CursorPos X="15" Y="48"/>
+ <CursorPos X="34" Y="11"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit0>
@@ -17,13 +16,10 @@
<IsPartOfProject Value="True"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="1"/>
- <TopLine Value="611"/>
- <CursorPos X="77" Y="819"/>
- <FoldState Value=" T3mG0{F5 pjdmK0G[945jZ0L3]93jW0C31117 piXnD0F3]9bjH0J4[I4jR0Q6 pkMlL03013 T0)PPc071F]sQ"/>
- <UsageCount Value="179"/>
- <Bookmarks Count="1">
- <Item0 Y="1337"/>
- </Bookmarks>
+ <TopLine Value="1156"/>
+ <CursorPos X="14" Y="1178"/>
+ <FoldState Value=" T3mG0{F5 pjdmK0G[945jZ0Q3[95d0C4]97jV0C7 piajL0v5]9fkW0E1131[e4Bo9031 pp4pD0G2 T0'4Pc071F311A"/>
+ <UsageCount Value="188"/>
<Loaded Value="True"/>
</Unit1>
<Unit2>
@@ -31,15 +27,15 @@
<IsPartOfProject Value="True"/>
<EditorIndex Value="-1"/>
<CursorPos X="20" Y="8"/>
- <UsageCount Value="141"/>
+ <UsageCount Value="150"/>
</Unit2>
<Unit3>
<Filename Value="input.plap"/>
<IsPartOfProject Value="True"/>
- <EditorIndex Value="2"/>
- <TopLine Value="30"/>
+ <EditorIndex Value="3"/>
+ <TopLine Value="15"/>
<CursorPos X="23" Y="62"/>
- <UsageCount Value="140"/>
+ <UsageCount Value="149"/>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="None"/>
</Unit3>
@@ -49,19 +45,19 @@
<EditorIndex Value="-1"/>
<TopLine Value="285"/>
<CursorPos X="20" Y="323"/>
- <UsageCount Value="88"/>
+ <UsageCount Value="97"/>
</Unit4>
<Unit5>
<Filename Value="linearkombinationen.inc"/>
<IsPartOfProject Value="True"/>
<EditorIndex Value="-1"/>
<TopLine Value="64"/>
- <UsageCount Value="51"/>
+ <UsageCount Value="60"/>
</Unit5>
<Unit6>
<Filename Value="input.epost"/>
- <EditorIndex Value="3"/>
- <TopLine Value="25"/>
+ <EditorIndex Value="4"/>
+ <TopLine Value="22"/>
<CursorPos X="26" Y="29"/>
<UsageCount Value="100"/>
<Loaded Value="True"/>
@@ -69,18 +65,19 @@
</Unit6>
<Unit7>
<Filename Value="../units/matheunit.pas"/>
- <EditorIndex Value="-1"/>
- <TopLine Value="366"/>
- <CursorPos X="27" Y="390"/>
- <FoldState Value=" T3i905B pj0jV034 piaj60U511+"/>
+ <EditorIndex Value="2"/>
+ <TopLine Value="532"/>
+ <CursorPos X="42" Y="516"/>
+ <FoldState Value=" T3iA05B pj0jV034 piaj60U6 plLmM04K"/>
<UsageCount Value="14"/>
+ <Loaded Value="True"/>
</Unit7>
<Unit8>
<Filename Value="../units/lowlevelunit.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="558"/>
<CursorPos X="41" Y="567"/>
- <UsageCount Value="10"/>
+ <UsageCount Value="9"/>
</Unit8>
<Unit9>
<Filename Value="../units/mystringlistunit.pas"/>
@@ -88,192 +85,193 @@
<TopLine Value="367"/>
<CursorPos X="17" Y="390"/>
<FoldState Value=" T3i3075 piZjD0WQ"/>
- <UsageCount Value="5"/>
+ <UsageCount Value="4"/>
</Unit9>
<Unit10>
<Filename Value="../epost/werteunit.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="950"/>
<CursorPos X="30" Y="1054"/>
- <UsageCount Value="2"/>
+ <UsageCount Value="1"/>
</Unit10>
<Unit11>
<Filename Value="../epost/typenunit.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="347"/>
<CursorPos X="62" Y="358"/>
- <UsageCount Value="2"/>
+ <UsageCount Value="1"/>
</Unit11>
<Unit12>
<Filename Value="../units/systemunit.pas"/>
<EditorIndex Value="-1"/>
<CursorPos X="3" Y="79"/>
- <UsageCount Value="2"/>
+ <UsageCount Value="1"/>
</Unit12>
<Unit13>
<Filename Value="/usr/lib/fpc/src/rtl/inc/objpash.inc"/>
<EditorIndex Value="-1"/>
<TopLine Value="232"/>
<CursorPos X="23" Y="192"/>
- <UsageCount Value="2"/>
+ <UsageCount Value="1"/>
</Unit13>
<Unit14>
<Filename Value="rk14.inc"/>
<EditorIndex Value="-1"/>
- <UsageCount Value="5"/>
+ <UsageCount Value="4"/>
</Unit14>
<Unit15>
<Filename Value="rk1210.inc"/>
<EditorIndex Value="-1"/>
<TopLine Value="492"/>
<CursorPos X="28" Y="565"/>
- <UsageCount Value="6"/>
+ <UsageCount Value="5"/>
</Unit15>
<Unit16>
<Filename Value="rk1412.inc"/>
<EditorIndex Value="-1"/>
- <TopLine Value="755"/>
- <CursorPos X="3" Y="775"/>
- <UsageCount Value="9"/>
+ <TopLine Value="39"/>
+ <CursorPos X="3" Y="246"/>
+ <UsageCount Value="10"/>
</Unit16>
<Unit17>
<Filename Value="rk108.inc"/>
<EditorIndex Value="-1"/>
<CursorPos X="28" Y="8"/>
- <UsageCount Value="6"/>
+ <UsageCount Value="5"/>
</Unit17>
<Unit18>
<Filename Value="rk3_8.inc"/>
<EditorIndex Value="-1"/>
- <UsageCount Value="10"/>
+ <UsageCount Value="9"/>
</Unit18>
<Unit19>
<Filename Value="/usr/lib/fpc/src/rtl/objpas/math.pp"/>
<EditorIndex Value="-1"/>
<TopLine Value="559"/>
<CursorPos X="14" Y="568"/>
- <UsageCount Value="10"/>
+ <UsageCount Value="9"/>
</Unit19>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
- <Filename Value="Physikunit.pas"/>
- <Caret Line="1229" Column="51" TopLine="1217"/>
+ <Filename Value="../units/matheunit.pas"/>
+ <Caret Line="521" TopLine="295"/>
</Position1>
<Position2>
- <Filename Value="Physikunit.pas"/>
- <Caret Line="637" Column="74" TopLine="608"/>
+ <Filename Value="../units/matheunit.pas"/>
+ <Caret Line="510" Column="32" TopLine="295"/>
</Position2>
<Position3>
- <Filename Value="Physikunit.pas"/>
- <Caret Line="625" Column="14" TopLine="609"/>
+ <Filename Value="../units/matheunit.pas"/>
+ <Caret Line="543" Column="3" TopLine="522"/>
</Position3>
<Position4>
- <Filename Value="Physikunit.pas"/>
- <Caret Line="972" Column="8" TopLine="204"/>
+ <Filename Value="../units/matheunit.pas"/>
+ <Caret Line="530" Column="20" TopLine="499"/>
</Position4>
<Position5>
- <Filename Value="Physikunit.pas"/>
- <Caret Line="139" Column="3" TopLine="121"/>
+ <Filename Value="../units/matheunit.pas"/>
+ <Caret Line="511" Column="27" TopLine="505"/>
</Position5>
<Position6>
- <Filename Value="Physikunit.pas"/>
- <Caret Line="656" Column="16" TopLine="632"/>
+ <Filename Value="../units/matheunit.pas"/>
+ <Caret Line="543" Column="19" TopLine="524"/>
</Position6>
<Position7>
- <Filename Value="Physikunit.pas"/>
- <Caret Line="1666" TopLine="973"/>
+ <Filename Value="../units/matheunit.pas"/>
+ <Caret Line="511" Column="9" TopLine="505"/>
</Position7>
<Position8>
<Filename Value="Physikunit.pas"/>
- <Caret Line="959" Column="74" TopLine="926"/>
+ <Caret Line="1190" Column="40" TopLine="1159"/>
</Position8>
<Position9>
<Filename Value="Physikunit.pas"/>
- <Caret Line="956" Column="5" TopLine="936"/>
+ <Caret Line="606" TopLine="507"/>
</Position9>
<Position10>
<Filename Value="Physikunit.pas"/>
- <Caret Line="734" Column="22" TopLine="718"/>
+ <Caret Line="591" Column="8" TopLine="536"/>
</Position10>
<Position11>
<Filename Value="Physikunit.pas"/>
- <Caret Line="768" Column="27" TopLine="729"/>
+ <Caret Line="1158" Column="110" TopLine="1161"/>
</Position11>
<Position12>
- <Filename Value="Physikunit.pas"/>
- <Caret Line="15"/>
+ <Filename Value="Plasmapropagation.lpr"/>
+ <Caret Line="53" Column="32" TopLine="21"/>
</Position12>
<Position13>
- <Filename Value="Physikunit.pas"/>
- <Caret Line="731" Column="24" TopLine="703"/>
+ <Filename Value="Plasmapropagation.lpr"/>
+ <Caret Line="34" Column="10" TopLine="14"/>
</Position13>
<Position14>
- <Filename Value="Physikunit.pas"/>
- <Caret Line="730" Column="28" TopLine="703"/>
+ <Filename Value="Plasmapropagation.lpr"/>
+ <Caret Line="11" Column="45"/>
</Position14>
<Position15>
- <Filename Value="Physikunit.pas"/>
- <Caret Line="765" Column="66" TopLine="729"/>
+ <Filename Value="Plasmapropagation.lpr"/>
+ <Caret Line="34" Column="10" TopLine="14"/>
</Position15>
<Position16>
- <Filename Value="Physikunit.pas"/>
- <Caret Line="632" Column="42" TopLine="603"/>
+ <Filename Value="Plasmapropagation.lpr"/>
+ <Caret Line="11" Column="55"/>
</Position16>
<Position17>
- <Filename Value="Physikunit.pas"/>
- <Caret Line="644" Column="26" TopLine="612"/>
+ <Filename Value="Plasmapropagation.lpr"/>
+ <Caret Line="35" Column="18" TopLine="33"/>
</Position17>
<Position18>
- <Filename Value="Physikunit.pas"/>
- <Caret Line="112" Column="60" TopLine="82"/>
+ <Filename Value="Plasmapropagation.lpr"/>
+ <Caret Line="36" Column="19" TopLine="34"/>
</Position18>
<Position19>
- <Filename Value="Physikunit.pas"/>
- <Caret Line="630" Column="30" TopLine="609"/>
+ <Filename Value="Plasmapropagation.lpr"/>
+ <Caret Line="57" Column="14" TopLine="33"/>
</Position19>
<Position20>
- <Filename Value="Physikunit.pas"/>
- <Caret Line="610" Column="26" TopLine="587"/>
+ <Filename Value="Plasmapropagation.lpr"/>
+ <Caret Line="34" TopLine="30"/>
</Position20>
<Position21>
<Filename Value="Physikunit.pas"/>
- <Caret Line="101" Column="71" TopLine="81"/>
+ <Caret Line="1154" TopLine="1097"/>
</Position21>
<Position22>
<Filename Value="Physikunit.pas"/>
- <Caret Line="839" Column="60" TopLine="802"/>
+ <Caret Line="1742" Column="122" TopLine="1695"/>
</Position22>
<Position23>
<Filename Value="Physikunit.pas"/>
+ <Caret Line="1404" Column="13" TopLine="1289"/>
</Position23>
<Position24>
<Filename Value="Physikunit.pas"/>
- <Caret Line="610" Column="49" TopLine="587"/>
+ <Caret Line="1267" Column="24" TopLine="1226"/>
</Position24>
<Position25>
<Filename Value="Physikunit.pas"/>
- <Caret Line="101" Column="61" TopLine="75"/>
+ <Caret Line="875" TopLine="658"/>
</Position25>
<Position26>
<Filename Value="Physikunit.pas"/>
- <Caret Line="628" Column="21" TopLine="523"/>
+ <Caret Line="130" Column="17" TopLine="109"/>
</Position26>
<Position27>
<Filename Value="Physikunit.pas"/>
- <Caret Line="114" TopLine="88"/>
+ <Caret Line="466" Column="83" TopLine="231"/>
</Position27>
<Position28>
<Filename Value="Physikunit.pas"/>
- <Caret Line="643" TopLine="588"/>
+ <Caret Line="1192" Column="57" TopLine="1159"/>
</Position28>
<Position29>
<Filename Value="Physikunit.pas"/>
- <Caret Line="638" Column="33" TopLine="619"/>
+ <Caret Line="1166" Column="53" TopLine="1146"/>
</Position29>
<Position30>
<Filename Value="Physikunit.pas"/>
- <Caret Line="640" Column="27" TopLine="620"/>
+ <Caret Line="1185" Column="76" TopLine="1166"/>
</Position30>
</JumpHistory>
</ProjectSession>