diff options
author | Erich Eckner <git@eckner.net> | 2015-08-11 14:17:49 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2015-08-11 14:17:49 +0200 |
commit | 5eaf0e1928f4024ac5c1935dfecfe7d29f93417c (patch) | |
tree | a4d34bd98d8e7152cc822e1b546a7415ff7e1084 | |
parent | bf51ca3a16d648c5da41719b06f0f3a598a37ec3 (diff) | |
download | Plasmapropagation-5eaf0e1928f4024ac5c1935dfecfe7d29f93417c.tar.xz |
lauffaehig, es entstehen aber noch "Ripple" im Phasenraum ...
-rw-r--r-- | Physikunit.pas | 228 | ||||
-rw-r--r-- | Plasmapropagation.lps | 141 | ||||
-rw-r--r-- | input.epost | 51 | ||||
-rw-r--r-- | input.plap | 32 |
4 files changed, 247 insertions, 205 deletions
diff --git a/Physikunit.pas b/Physikunit.pas index 4861a14..5d8881a 100644 --- a/Physikunit.pas +++ b/Physikunit.pas @@ -27,6 +27,7 @@ type eqRho,eqJX,eqJY ); tMaterieFeldGroesze = (mfPY); + tMaterieSpeicherGroesze = (msPX,msPXSqr,msPY,msVX,msVY,msN,msPXRipple); tTeilchenSpeziesGroeszen = (tsgMasse,tsgIQdrMasse,tsgLadung); tEMQuellen = array[tEMQuellGroesze] of extended; @@ -46,9 +47,11 @@ type tAusgabeDatei = class private ableitung: boolean; - emFelder: tEMFeldGroesze; - emQuellen: tEMQuellGroesze; - teilchen, // -2: EM-Feld; -1: Gesamt-EM-Quelle; sonst: EM-Quelle der entsprechenden Teilchen + emFeld: tEMFeldGroesze; + emQuelle: tEMQuellGroesze; + matFeld: tMaterieSpeicherGroesze; + wasSpeichern, // 0: EM-Feld; 1: EM-Quelle; 2: Mat-Feld + teilchen, // -1: Gesamt-Feld; sonst: Feld des entsprechenden Teilchen nNum,tCnt: longint; pre,suf: string; datei: file; @@ -132,7 +135,7 @@ type {$UNDEF LiKotRaumPunktHeader} function nichtnegativieren: extended; inline; function impulsIntegral(teilchen: longint; emQ: tEMQuellGroesze): extended; overload; inline; - function impulsIntegral(teilchen: longint): extended; overload; inline; + function impulsIntegral(teilchen: longint; maF: tMaterieSpeicherGroesze): extended; overload; inline; procedure initialisiereDichte(teilchen: longint; breite,n: extended); inline; procedure reflektiereTeilchen(rechts: boolean); inline; procedure setzeNull; inline; @@ -211,6 +214,9 @@ const emQuellNamen: array[tEMQuellGroesze] of string = ( 'RHO','JX','JY' ); + matSpeicherNamen: array[tMaterieSpeicherGroesze] of string = ( + 'PX','PXSQR','PY','VX','VY','N','PXRIPPLE' + ); minAusgabeBuffer = 1024*1024; var @@ -222,6 +228,7 @@ constructor tAusgabeDatei.create(feldName,prefix,suffix: string; prot: tProtokol var emF: tEMFeldGroesze; emQ: tEMQuellGroesze; + maF: tMaterieSpeicherGroesze; num: longint; abl,gef: boolean; begin @@ -238,8 +245,10 @@ begin else teilchen:=-1; - emFelder:=efAX; - emQuellen:=eqRho; + emFeld:=efAX; + emQuelle:=eqRho; + matFeld:=msN; + wasSpeichern:=0; feldName:=ansiUpperCase(feldName); nNum:=0; // Header 0 wurde also noch nicht geschrieben zeitAnz:=-1; @@ -250,7 +259,8 @@ begin if not gef then for emF:=low(tEMFeldGroesze) to high(tEMFeldGroesze) do if copy('D',1,byte(abl))+emFeldNamen[emF] = feldName then begin - emFelder:=emF; + emFeld:=emF; + wasSpeichern:=0; ableitung:=abl; teilchen:=-2; gef:=true; @@ -261,24 +271,45 @@ begin for emQ:=low(tEMQuellGroesze) to high(tEMQuellGroesze) do if emQuellNamen[emQ] = feldName then begin ableitung:=false; - emQuellen:=emQ; + emQuelle:=emQ; + wasSpeichern:=1; + gef:=true; + break; + end; + if not gef then + for maF:=low(tMaterieSpeicherGroesze) to high(tMaterieSpeicherGroesze) do + if matSpeicherNamen[maF] = feldName then begin + ableitung:=false; + matFeld:=maF; + wasSpeichern:=2; gef:=true; break; end; if not gef then begin pro.schreibe('tAusgabeDatei.create kennt Größe '''+feldName+''' nicht!',true); + nam:=''; + for abl:=false to true do + for emF:=low(tEMFeldGroesze) to high(tEMFeldGroesze) do + nam:=nam+', '+copy('D',1,byte(abl))+emFeldNamen[emF]; + for emQ:=low(tEMQuellGroesze) to high(tEMQuellGroesze) do + nam:=nam+', '+emQuellNamen[emQ]; + for maF:=low(tMaterieSpeicherGroesze) to high(tMaterieSpeicherGroesze) do + nam:=nam+', '+matSpeicherNamen[maF]; + delete(nam,1,2); + pro.schreibe('Ich kenne nur: '+nam,true); + pro.destroyAll; halt(1); end; - if teilchen=-2 then - pre:=emFeldNamen[emF] - else begin - pre:=emQuellNamen[emQ]; - if teilchen>=0 then - pre:=pre+inttostr(teilchen+1); + case wasSpeichern of + 0: pre:=emFeldNamen[emFeld]; + 1: pre:=emQuellNamen[emQuelle]; + 2: pre:=matSpeicherNamen[matFeld]; end; + if teilchen>=0 then + pre:=pre+inttostr(teilchen+1); if ableitung then pre:='d'+pre; @@ -320,13 +351,13 @@ end; function tAusgabeDatei.dump: string; begin - if teilchen=-2 then - result:=emFeldNamen[emFelder] - else begin - result:=emQuellNamen[emQuellen]; - if teilchen>=0 then - result:=result+inttostr(teilchen); + case wasSpeichern of + 0: result:=emFeldNamen[emFeld]; + 1: result:=emQuellNamen[emQuelle]; + 2: result:=matSpeicherNamen[matFeld]; end; + if teilchen>=0 then + result:=result+'['+inttostr(teilchen+1)+']'; if ableitung then result:=result+''''; result:=result+' -> '+pre+'-$i'+suf; @@ -385,40 +416,40 @@ begin inc(bufPos,sizeof(integer)); sX:=cX-Min(gitter.dX,sDX)/2; - if teilchen=-2 then begin - for i:=0 to length(gitter.felders[gitter.aktuelleFelder].inhalt)-1 do begin - while cX>=sX do begin - dec(cnt); - move(gitter.felders[gitter.aktuelleFelder].inhalt[i].emFelder[emFelder,ableitung],(buf+bufPos)^,sizeof(extended)); - inc(bufPos,sizeof(extended)); - sX:=sX+sDX; + case wasSpeichern of + 0: // em-Feld speichern + for i:=0 to length(gitter.felders[gitter.aktuelleFelder].inhalt)-1 do begin + while cX>=sX do begin + dec(cnt); + move(gitter.felders[gitter.aktuelleFelder].inhalt[i].emFelder[emFeld,ableitung],(buf+bufPos)^,sizeof(extended)); + inc(bufPos,sizeof(extended)); + sX:=sX+sDX; + end; + cX:=cX+gitter.dX; end; - cX:=cX+gitter.dX; - end; - end - else if teilchen=-1 then begin - for i:=0 to length(gitter.felders[gitter.aktuelleFelder].inhalt)-1 do begin - while cX>=sX do begin - dec(cnt); - move(gitter.felders[gitter.aktuelleFelder].inhalt[i].emQuellen[emQuellen],(buf+bufPos)^,sizeof(extended)); - inc(bufPos,sizeof(extended)); - sX:=sX+sDX; + 1: // em-Quelle + for i:=0 to length(gitter.felders[gitter.aktuelleFelder].inhalt)-1 do begin + while cX>=sX do begin + dec(cnt); + val:=gitter.felders[gitter.aktuelleFelder].inhalt[i].impulsIntegral(teilchen,emQuelle); + move(val,(buf+bufPos)^,sizeof(extended)); + inc(bufPos,sizeof(extended)); + sX:=sX+sDX; + end; + cX:=cX+gitter.dX; end; - cX:=cX+gitter.dX; - end; - end - else begin - for i:=0 to length(gitter.felders[gitter.aktuelleFelder].inhalt)-1 do begin - while cX>=sX do begin - dec(cnt); - val:=gitter.felders[gitter.aktuelleFelder].inhalt[i].impulsIntegral(teilchen,emQuellen); - move(val,(buf+bufPos)^,sizeof(extended)); - inc(bufPos,sizeof(extended)); - sX:=sX+sDX; + 2: // Materiefeld + for i:=0 to length(gitter.felders[gitter.aktuelleFelder].inhalt)-1 do begin + while cX>=sX do begin + dec(cnt); + val:=gitter.felders[gitter.aktuelleFelder].inhalt[i].impulsIntegral(teilchen,matFeld); + move(val,(buf+bufPos)^,sizeof(extended)); + inc(bufPos,sizeof(extended)); + sX:=sX+sDX; + end; + cX:=cX+gitter.dX; end; - cX:=cX+gitter.dX; - end; - end; + end{of case}; if cnt<>0 then begin pro.schreibe('Falsche Anzahl an Ortsschritten geschrieben ('+inttostr(cnt)+')!',true); pro.destroyall; @@ -590,17 +621,18 @@ end; function tImpulsPunkt.nichtnegativieren: extended; // Dichten nicht negativ machen var - i,richtung,entfernung: longint; defizit: extended; + i: longint; pro: tProtokollant; - jemandErreicht,vorZurueck: boolean; +(* i,richtung,entfernung: longint; + jemandErreicht,vorZurueck: boolean; *) begin result:=0; - for i:=0 to length(werte)-1 do + for i:=0 to length(werte)-1 do begin if werte[i,false]<0 then begin defizit:=-werte[i,false]; result:=result+defizit; - werte[i,false]:=0; + werte[i,false]:=0; (* entfernung:=1; jemandErreicht:=true; while (defizit>0) and jemandErreicht do begin @@ -616,8 +648,15 @@ begin pro:=tProtokollant.create(raumpunkt.felder.gitter.prot,'WertePunkt.nichtnegativieren'); pro.schreibe('Ich konnte ein Teilchendefizit der Sorte '+inttostr(i+1)+' nicht auffüllen!',true); raumpunkt.felder.gitter.abbrechen; - end; + end; *) end; + if werte[i,false]>1E10 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.free; + raumpunkt.felder.gitter.abbrechen; + end; + end; end; procedure tImpulsPunkt.akkumuliereEMQuellen(var emQuellen: tEMQuellen; pX,dVP: extended); @@ -688,16 +727,16 @@ begin + raumpunkt.matFelder[i,mfPY,false] * iMGamma[i] * raumpunkt.emFelder[efBZ,false]); werte[i,true]:= 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]) + + 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]) + + sign(tP)*raumpunkt.felder.teilchen[i].diffusion[1] * ( nachbarn[1,true].werte[i,false] + nachbarn[1,false].werte[i,false] - 2*werte[i,false] @@ -846,8 +885,6 @@ begin end; function tRaumPunkt.impulsIntegral(teilchen: longint; emQ: tEMQuellGroesze): extended; -var - i: longint; begin if teilchen<0 then begin result:=emQuellen[emQ]; // das ist leicht :-) @@ -857,12 +894,50 @@ begin result:=0; case emQ of - eqRho: + eqRho: result:=impulsIntegral(teilchen,msN); + eqJX: result:=impulsIntegral(teilchen,msVX); + eqJY: result:=impulsIntegral(teilchen,msVY); + end{of case}; + result:=result * felder.teilchen[teilchen].eigenschaften[tsgLadung]; +end; + +function tRaumPunkt.impulsIntegral(teilchen: longint; maF: tMaterieSpeicherGroesze): extended; +var + i: longint; +begin + if teilchen<0 then begin + result:=0; + for i:=0 to length(felder.teilchen)-1 do + result:=result+impulsIntegral(i,maF); + exit; + end; + + result:=0; + + case maF of + msN: for i:=0 to aP-1 do result:= result + phasenraum[i].werte[teilchen,false]*dP; - eqJX: begin + msPX: + for i:=0 to aP-1 do + result:= + result + + phasenraum[i].werte[teilchen,false]*dP * (i-aP/2)*dP; + msPXSqr: + for i:=0 to aP-1 do + result:= + result + + phasenraum[i].werte[teilchen,false]*dP * sqr((i-aP/2)*dP); + msPY: begin + for i:=0 to aP-1 do + result:= + result + + phasenraum[i].werte[teilchen,false]*dP; + result:=result * matFelder[teilchen,mfPY,false]; + end; + msVX: begin for i:=0 to aP-1 do result:= result + @@ -870,7 +945,7 @@ begin / sqrt(1 + (sqr((i-aP/2)*dP) + sqr(matFelder[teilchen,mfPY,false]))*felder.teilchen[teilchen].eigenschaften[tsgIQdrMasse]); result:=result / felder.teilchen[teilchen].eigenschaften[tsgMasse]; end; - eqJY: begin + msVY: begin for i:=0 to aP-1 do result:= result + @@ -878,24 +953,11 @@ begin / sqrt(1 + (sqr((i-aP/2)*dP) + sqr(matFelder[teilchen,mfPY,false]))*felder.teilchen[teilchen].eigenschaften[tsgIQdrMasse]); result:=result * matFelder[teilchen,mfPY,false] / felder.teilchen[teilchen].eigenschaften[tsgMasse]; end; + msPXRipple: + for i:=1 to aP-1 do + result:= + result + abs(phasenraum[i].werte[teilchen,false]-phasenraum[i-1].werte[teilchen,false])*dP; end{of case}; - result:=result * felder.teilchen[teilchen].eigenschaften[tsgLadung]; -end; - -function tRaumPunkt.impulsIntegral(teilchen: longint): extended; -var - i,j: longint; -begin - result:=0; - - if teilchen<0 then begin - for j:=0 to length(matFelder)-1 do - for i:=0 to aP-1 do - result:=result + phasenraum[i].werte[j,false]*dP; - end - else - for i:=0 to aP-1 do - result:=result + phasenraum[i].werte[teilchen,false]*dP; end; procedure tRaumPunkt.initialisiereDichte(teilchen: longint; breite,n: extended); @@ -1086,7 +1148,7 @@ begin for i:=0 to length(massen)-1 do begin dens:=0; for j:=0 to length(inhalt)-1 do - dens:=dens+inhalt[j].impulsIntegral(i); + dens:=dens+inhalt[j].impulsIntegral(i,msN); dens:=dens*teilchen[i].eigenschaften[tsgMasse]*gitter.dX; prot.schreibe('n['+inttostr(i+1)+'] = '+floattostr(dens)+' (relative Abweichung: '+floattostr(dens/massen[i]-1)+')',true); end; diff --git a/Plasmapropagation.lps b/Plasmapropagation.lps index d47f765..9a7b886 100644 --- a/Plasmapropagation.lps +++ b/Plasmapropagation.lps @@ -3,25 +3,25 @@ <ProjectSession> <Version Value="9"/> <BuildModes Active="Default"/> - <Units Count="19"> + <Units Count="20"> <Unit0> <Filename Value="Plasmapropagation.lpr"/> <IsPartOfProject Value="True"/> - <CursorPos Y="5"/> + <TopLine Value="27"/> + <CursorPos X="15" Y="48"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit0> <Unit1> <Filename Value="Physikunit.pas"/> <IsPartOfProject Value="True"/> - <IsVisibleTab Value="True"/> <EditorIndex Value="1"/> - <TopLine Value="180"/> - <CursorPos Y="901"/> - <FoldState Value=" T3m50/5 pjdlc0G[945jZ0N4 piZjP0A2]9Yj90C7]RDjf0E5]IfjW0E[j4Ejg082]93jH031 pp4pD0G2 T0$2Pc071F311K"/> - <UsageCount Value="167"/> + <TopLine Value="1577"/> + <CursorPos Y="714"/> + <FoldState Value=" T3mB0{F5 pjdmK0G[945jZ0N4]90jX0A2 piYj90C7]9ajL0v5]9fkW0E[j4Ejg082]93jH03013 T0%LPc071F311#"/> + <UsageCount Value="176"/> <Bookmarks Count="1"> - <Item0 Y="1185"/> + <Item0 Y="1247"/> </Bookmarks> <Loaded Value="True"/> </Unit1> @@ -29,15 +29,17 @@ <Filename Value="../units/protokollunit.pas"/> <IsPartOfProject Value="True"/> <EditorIndex Value="-1"/> - <CursorPos X="15" Y="46"/> - <UsageCount Value="129"/> + <CursorPos X="20" Y="8"/> + <UsageCount Value="138"/> </Unit2> <Unit3> <Filename Value="input.plap"/> <IsPartOfProject Value="True"/> + <IsVisibleTab Value="True"/> <EditorIndex Value="2"/> - <CursorPos X="20" Y="11"/> - <UsageCount Value="128"/> + <TopLine Value="30"/> + <CursorPos X="23" Y="62"/> + <UsageCount Value="137"/> <Loaded Value="True"/> <DefaultSyntaxHighlighter Value="None"/> </Unit3> @@ -45,24 +47,23 @@ <Filename Value="linearkombination.inc"/> <IsPartOfProject Value="True"/> <EditorIndex Value="-1"/> - <TopLine Value="286"/> - <CursorPos Y="324"/> - <UsageCount Value="76"/> + <TopLine Value="285"/> + <CursorPos X="20" Y="323"/> + <UsageCount Value="85"/> </Unit4> <Unit5> <Filename Value="linearkombinationen.inc"/> <IsPartOfProject Value="True"/> <EditorIndex Value="-1"/> - <TopLine Value="40"/> - <CursorPos X="234" Y="65"/> - <UsageCount Value="39"/> + <TopLine Value="64"/> + <UsageCount Value="48"/> </Unit5> <Unit6> <Filename Value="input.epost"/> <EditorIndex Value="3"/> - <TopLine Value="22"/> - <CursorPos X="38" Y="29"/> - <UsageCount Value="98"/> + <TopLine Value="25"/> + <CursorPos X="26" Y="29"/> + <UsageCount Value="100"/> <Loaded Value="True"/> <DefaultSyntaxHighlighter Value="None"/> </Unit6> @@ -77,9 +78,9 @@ <Unit8> <Filename Value="../units/lowlevelunit.pas"/> <EditorIndex Value="-1"/> - <TopLine Value="549"/> + <TopLine Value="558"/> <CursorPos X="41" Y="567"/> - <UsageCount Value="9"/> + <UsageCount Value="10"/> </Unit8> <Unit9> <Filename Value="../units/mystringlistunit.pas"/> @@ -144,131 +145,93 @@ <Unit18> <Filename Value="rk3_8.inc"/> <EditorIndex Value="-1"/> - <CursorPos X="41" Y="6"/> - <UsageCount Value="9"/> + <UsageCount Value="10"/> </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"/> + </Unit19> </Units> - <JumpHistory Count="30" HistoryIndex="29"> + <JumpHistory Count="19" HistoryIndex="18"> <Position1> <Filename Value="Physikunit.pas"/> - <Caret Line="680" TopLine="595"/> + <Caret Line="1683" Column="12" TopLine="1135"/> </Position1> <Position2> <Filename Value="Physikunit.pas"/> - <Caret Line="78" Column="140" TopLine="55"/> + <Caret Line="1685" TopLine="1198"/> </Position2> <Position3> <Filename Value="Physikunit.pas"/> - <Caret Line="1467" Column="88" TopLine="1438"/> + <Caret Line="1686" TopLine="1198"/> </Position3> <Position4> <Filename Value="Physikunit.pas"/> - <Caret Line="1463" Column="37" TopLine="1443"/> + <Caret Line="1687" TopLine="1198"/> </Position4> <Position5> <Filename Value="Physikunit.pas"/> - <Caret Line="1469" Column="22" TopLine="1444"/> + <Caret Line="1223" TopLine="1162"/> </Position5> <Position6> <Filename Value="Physikunit.pas"/> - <Caret Line="554" Column="31" TopLine="220"/> + <Caret Line="1227" TopLine="1162"/> </Position6> <Position7> <Filename Value="Physikunit.pas"/> - <Caret Line="1479" Column="57" TopLine="1457"/> + <Caret Line="1217" TopLine="1069"/> </Position7> <Position8> <Filename Value="Physikunit.pas"/> - <Caret Line="682" TopLine="336"/> + <Caret Line="1229" Column="51" TopLine="1217"/> </Position8> <Position9> <Filename Value="Physikunit.pas"/> - <Caret Line="920" Column="83" TopLine="810"/> + <Caret Line="637" Column="74" TopLine="608"/> </Position9> <Position10> <Filename Value="Physikunit.pas"/> - <Caret Line="912" Column="37" TopLine="855"/> + <Caret Line="625" Column="14" TopLine="609"/> </Position10> <Position11> <Filename Value="Physikunit.pas"/> - <Caret Line="137" Column="61" TopLine="120"/> + <Caret Line="972" Column="8" TopLine="204"/> </Position11> <Position12> <Filename Value="Physikunit.pas"/> - <Caret Line="915" Column="54" TopLine="778"/> + <Caret Line="139" Column="3" TopLine="121"/> </Position12> <Position13> <Filename Value="Physikunit.pas"/> - <Caret Line="908" Column="68" TopLine="821"/> + <Caret Line="656" Column="16" TopLine="632"/> </Position13> <Position14> <Filename Value="Physikunit.pas"/> - <Caret Line="997" Column="52" TopLine="965"/> + <Caret Line="1666" TopLine="973"/> </Position14> <Position15> <Filename Value="Physikunit.pas"/> - <Caret Line="1484" Column="55" TopLine="1458"/> + <Caret Line="622" TopLine="713"/> </Position15> <Position16> <Filename Value="Physikunit.pas"/> - <Caret Line="75" TopLine="49"/> + <Caret Line="30" Column="61" TopLine="46"/> </Position16> <Position17> <Filename Value="Physikunit.pas"/> - <Caret Line="434" TopLine="353"/> + <Caret Line="959" Column="74" TopLine="926"/> </Position17> <Position18> <Filename Value="Physikunit.pas"/> - <Caret Line="464" TopLine="428"/> + <Caret Line="956" Column="5" TopLine="936"/> </Position18> <Position19> <Filename Value="Physikunit.pas"/> - <Caret Line="1521" Column="60" TopLine="1379"/> + <Caret Line="30" Column="64" TopLine="75"/> </Position19> - <Position20> - <Filename Value="Physikunit.pas"/> - <Caret Line="175" TopLine="175"/> - </Position20> - <Position21> - <Filename Value="Physikunit.pas"/> - <Caret Line="1247" Column="5" TopLine="1234"/> - </Position21> - <Position22> - <Filename Value="Physikunit.pas"/> - <Caret Line="1269" Column="5" TopLine="1250"/> - </Position22> - <Position23> - <Filename Value="Physikunit.pas"/> - <Caret Line="1273" Column="17" TopLine="1253"/> - </Position23> - <Position24> - <Filename Value="Physikunit.pas"/> - <Caret Line="1341" Column="25" TopLine="1320"/> - </Position24> - <Position25> - <Filename Value="Physikunit.pas"/> - <Caret Line="1517" Column="10" TopLine="1488"/> - </Position25> - <Position26> - <Filename Value="Physikunit.pas"/> - <Caret Line="1520" Column="59" TopLine="1500"/> - </Position26> - <Position27> - <Filename Value="Physikunit.pas"/> - <Caret Line="1544" Column="77" TopLine="1522"/> - </Position27> - <Position28> - <Filename Value="Physikunit.pas"/> - <Caret Line="1546" Column="63" TopLine="1539"/> - </Position28> - <Position29> - <Filename Value="Physikunit.pas"/> - <Caret Line="1585" Column="51" TopLine="1539"/> - </Position29> - <Position30> - <Filename Value="Physikunit.pas"/> - <Caret Line="908" Column="67" TopLine="815"/> - </Position30> </JumpHistory> </ProjectSession> </CONFIG> diff --git a/input.epost b/input.epost index 96ec796..6558880 100644 --- a/input.epost +++ b/input.epost @@ -26,50 +26,65 @@ Threadanzahl: 11 parallel lesen -!setze $symFelder: JX1 AY DAYDT # EX -!setze $asyFelder: RHO1 +!setze $symFelder: VX1 # AY DAYDT # EX +!setze $asyFelder: N1 PXRIPPLE1 +!setze $reineInputFelder: PX1 PXSQR1 -!Schleife: $Feld: $asyFelder $symFelder +!Schleife: $Feld: $reineInputFelder $asyFelder $symFelder Daten einlesen Name: $Feld Genauigkeit: extended xmax: 5 - tmax: 40 + tmax: 2 SpaceTime-Datei: /home_raid/erich/Dokumente/Prograemmchen/Plasmapropagation/Daten/$Feld-*_test.dat Ende !Schleifenende -!setze $symBerFelder: VX1 +!setze $asyBerFelder: PXBreite -Teile JX1 durch RHO1 - Name: VX1 +Teile VX1 durch N1 zu VX1 Ende -!Schleife: $symmetrie: symmetrisch asymmetrisch +Teile PX1 durch N1 zu PX1 +Ende + +Teile PXRIPPLE1 durch N1 zu PXRIPPLE1 +Ende + +Teile PXSQR1 durch N1 zu PXSQR1 +Ende + +Multipliziere PX1 mal PX1 + Name: PX1SQR +Ende + +Linearkombination + Name: PXBreite + PXSQR1 1 + PX1SQR -1 +Ende -?$symmetrie = symmetrisch: !Schleife: $Feld: $symFelder $symBerFelder -?$symmetrie = asymmetrisch: !Schleife: $Feld: $asyFelder +!Schleife: $Feld: $symFelder $asyFelder $asyBerFelder lineares Bild $Feld -?$symmetrie = symmetrisch: Palette: rotblau -?$symmetrie = symmetrisch: maximale und minimale Dichten bestimmen (symmetrisch) -?$symmetrie = asymmetrisch: Palette: erweiterter Regenbogen -?$symmetrie = asymmetrisch: maximale und minimale Dichten bestimmen +?$Feld in $symFelder $symBerFelder: Palette: rotblau +?$Feld in $symFelder $symBerFelder: maximale und minimale Dichten bestimmen (symmetrisch) +?$Feld in $asyFelder $asyBerFelder: Palette: erweiterter Regenbogen +?$Feld in $asyFelder $asyBerFelder: maximale und minimale Dichten bestimmen +?$Feld = N1: Nachbearbeitung: Log: 10^-8 Datei: /home_raid/erich/Dokumente/Prograemmchen/Plasmapropagation/Daten/$Feld_test.bmp Schriftgröße: 60 Achse: oben 10+ - Achse: links 20+ + Achse: links 2+ Achse: unten 10+ - Achse: rechts 20+ + Achse: rechts 2+ Rahmen Ende externer Befehl: convert /home_raid/erich/Dokumente/Prograemmchen/Plasmapropagation/Daten/$Feld_test.bmp /home_raid/erich/Dokumente/Prograemmchen/Plasmapropagation/Daten/$Feld_test.png& -?$symmetrie = symmetrisch: !Schleifenende -?$symmetrie = asymmetrisch: !Schleifenende !Schleifenende warte auf externe Befehle @@ -7,11 +7,11 @@ allgemein runge-Kutta-3/8 # runge-Kutta-4 # euler-Vorwärts - ortsschritt 5*10^-3 * λ - zeitschritt 5*10^-3 * T - maximalimpuls 10 - impulsschritt 5 * 10^-3 - zeit 40 * T + ortsschritt 10^-2 * λ + zeitschritt 10^-2 * T + maximalimpuls 5 + impulsschritt 10^-2 + zeit 2 * T !setze $breite: (5 * λ) breite $breite mit Fortschrittsanzeige @@ -20,13 +20,13 @@ allgemeinEnde ausgaben prefix /home_raid/erich/Dokumente/Prograemmchen/Plasmapropagation/Daten/ suffix _test.dat - felder AX,AY,dAYDT,EX,BY,BZ,Rho1,Rho2,JX1 + felder AX,AY,dAYDT,EX,BY,BZ,Rho1,Rho2,VX1,PX1,PXSqr1,N1,PXRipple1 ausgabenEnde !setze $tFwhm: (2.5 * T) !setze $tMitte: (1 * T) -licht von links 2 * 2^(-2*((t-$tMitte)/$tFwhm)^2) * ω * cos(ω*t) # Zeitableitung des A-Feldes +# licht von links 2 * 2^(-2*((t-$tMitte)/$tFwhm)^2) * ω * cos(ω*t) # Zeitableitung des A-Feldes !setze $IonenMassenFaktor: (1836.15267245 + 1838.68366158) @@ -36,7 +36,8 @@ teilchen1 maximaldichte 10 minimaldichte 0 # 10^-2 maximales dLnN/dX 10 - maximales dLnN/dP 10 + maximales dLnN/dP 2 + impulsbreite 1/20 !setze $profilbreite: (4 * λ) !setze $randbreite: (0.1 * λ) verteilung stückweise @@ -58,17 +59,18 @@ teilchen2 maximaldichte nmax1 minimaldichte nmin1 maximales dLnN/dX 10 - maximales dLnN/dP 10 + maximales dLnN/dP 2 + impulsbreite 1/20 # verteilung wie teilchen1 verteilung stückweise 0 - ($breite-$profilbreite)/2 - $randbreite - sin((x - ($breite-$profilbreite)/2 - $randbreite)*π/2/$randbreite)^2 - ($breite-$profilbreite)/2 + (0.1 + $breite-$profilbreite)/2 - $randbreite + sin((x - (0.1 + $breite-$profilbreite)/2 - $randbreite)*π/2/$randbreite)^2 + (0.1 + $breite-$profilbreite)/2 1 - ($breite+$profilbreite)/2 - sin((x - ($breite+$profilbreite)/2 + $randbreite)*π/2/$randbreite)^2 - ($breite+$profilbreite)/2 + $randbreite + (0.1 + $breite+$profilbreite)/2 + sin((x - (0.1 + $breite+$profilbreite)/2 + $randbreite)*π/2/$randbreite)^2 + (0.1 + $breite+$profilbreite)/2 + $randbreite 0 stückweiseEnde teilchen2Ende |