diff options
author | Erich Eckner <git@eckner.net> | 2015-08-24 14:10:38 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2015-08-24 14:10:38 +0200 |
commit | bddf19d78dfcc550a4da2410304a6ce70f608a8c (patch) | |
tree | 52367287b987afa675112067be45d2139a42ae9e | |
parent | 6c4fc54c735407ef70a3de495a58600af730d07b (diff) | |
download | Plasmapropagation-bddf19d78dfcc550a4da2410304a6ce70f608a8c.tar.xz |
auf fft zur Gradientenberechnung umgestellt - sehr langsam, vmtl. durch
schlechte Datenstrukturierung (Overhead durch Klassen)
-rw-r--r-- | Physikunit.pas | 208 | ||||
-rw-r--r-- | Plasmapropagation.lps | 158 |
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> |