diff options
author | Erich Eckner <git@eckner.net> | 2017-12-19 10:36:52 +0100 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2017-12-19 10:36:52 +0100 |
commit | 43657256cfe47f7afe681730351e27f19b48cce3 (patch) | |
tree | e56fa39fdf56354e47bc8be80ad5d986100f6004 | |
parent | 7ffe2953de866595f94f09fe08aa9ce1699bd28f (diff) | |
download | epost-43657256cfe47f7afe681730351e27f19b48cce3.tar.xz |
ermittlePhase kann nun auch entspringen
-rw-r--r-- | epost.lpi | 25 | ||||
-rw-r--r-- | epost.lps | 144 | ||||
-rw-r--r-- | epostunit.pas | 103 | ||||
-rw-r--r-- | typenunit.pas | 51 | ||||
-rw-r--r-- | werteunit.pas | 44 |
5 files changed, 278 insertions, 89 deletions
@@ -34,15 +34,12 @@ <WorkingDirectory Value="/home_raid/erich/Dokumente/Paper/xrom/simulationen/"/> </local> </RunParams> - <RequiredPackages Count="2"> + <RequiredPackages Count="1"> <Item1> - <PackageName Value="LCLBase"/> - </Item1> - <Item2> <PackageName Value="LazUtils"/> - </Item2> + </Item1> </RequiredPackages> - <Units Count="10"> + <Units Count="9"> <Unit0> <Filename Value="epost.lpr"/> <IsPartOfProject Value="True"/> @@ -56,33 +53,29 @@ <IsPartOfProject Value="True"/> </Unit2> <Unit3> - <Filename Value="fileunit.pas"/> + <Filename Value="werteunit.pas"/> <IsPartOfProject Value="True"/> </Unit3> <Unit4> - <Filename Value="werteunit.pas"/> + <Filename Value="typenunit.pas"/> <IsPartOfProject Value="True"/> </Unit4> <Unit5> - <Filename Value="typenunit.pas"/> + <Filename Value="../units/fftunit.pas"/> <IsPartOfProject Value="True"/> </Unit5> <Unit6> - <Filename Value="../units/fftunit.pas"/> + <Filename Value="../units/fftunit.inc"/> <IsPartOfProject Value="True"/> </Unit6> <Unit7> - <Filename Value="../units/fftunit.inc"/> + <Filename Value="gauszFit.inc"/> <IsPartOfProject Value="True"/> </Unit7> <Unit8> - <Filename Value="gauszFit.inc"/> - <IsPartOfProject Value="True"/> - </Unit8> - <Unit9> <Filename Value="werteunit.inc"/> <IsPartOfProject Value="True"/> - </Unit9> + </Unit8> </Units> </ProjectOptions> <CompilerOptions> @@ -7,7 +7,6 @@ <Unit0> <Filename Value="epost.lpr"/> <IsPartOfProject Value="True"/> - <IsVisibleTab Value="True"/> <TopLine Value="164"/> <CursorPos Y="182"/> <UsageCount Value="202"/> @@ -24,14 +23,13 @@ <Filename Value="epostunit.pas"/> <IsPartOfProject Value="True"/> <EditorIndex Value="1"/> - <TopLine Value="2759"/> - <CursorPos X="40" Y="2781"/> + <TopLine Value="2045"/> + <CursorPos X="26" Y="2053"/> <UsageCount Value="201"/> <Loaded Value="True"/> </Unit2> <Unit3> <Filename Value="fileunit.pas"/> - <IsPartOfProject Value="True"/> <EditorIndex Value="-1"/> <CursorPos Y="204"/> <UsageCount Value="200"/> @@ -39,9 +37,10 @@ <Unit4> <Filename Value="werteunit.pas"/> <IsPartOfProject Value="True"/> + <IsVisibleTab Value="True"/> <EditorIndex Value="9"/> - <TopLine Value="890"/> - <CursorPos X="55" Y="924"/> + <TopLine Value="1878"/> + <CursorPos X="27" Y="1908"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit4> @@ -49,8 +48,8 @@ <Filename Value="typenunit.pas"/> <IsPartOfProject Value="True"/> <EditorIndex Value="12"/> - <TopLine Value="249"/> - <CursorPos X="71" Y="269"/> + <TopLine Value="3399"/> + <CursorPos X="68" Y="3427"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit5> @@ -86,7 +85,7 @@ <EditorIndex Value="10"/> <TopLine Value="14"/> <CursorPos X="41" Y="32"/> - <UsageCount Value="125"/> + <UsageCount Value="127"/> <Loaded Value="True"/> </Unit9> <Unit10> @@ -94,14 +93,14 @@ <EditorIndex Value="8"/> <TopLine Value="498"/> <CursorPos X="85" Y="515"/> - <UsageCount Value="63"/> + <UsageCount Value="64"/> <Loaded Value="True"/> </Unit10> <Unit11> <Filename Value="../units/lowlevelunit.pas"/> <EditorIndex Value="7"/> - <TopLine Value="590"/> - <CursorPos X="17" Y="619"/> + <TopLine Value="902"/> + <CursorPos Y="920"/> <UsageCount Value="100"/> <Loaded Value="True"/> </Unit11> @@ -118,7 +117,7 @@ <EditorIndex Value="2"/> <TopLine Value="126"/> <CursorPos X="7" Y="147"/> - <UsageCount Value="77"/> + <UsageCount Value="78"/> <Loaded Value="True"/> </Unit13> <Unit14> @@ -189,130 +188,129 @@ <EditorIndex Value="6"/> <TopLine Value="87"/> <CursorPos X="3" Y="18"/> - <UsageCount Value="12"/> + <UsageCount Value="13"/> <Loaded Value="True"/> </Unit23> </Units> <JumpHistory Count="30" HistoryIndex="29"> <Position1> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="196" Column="136" TopLine="175"/> + <Filename Value="epostunit.pas"/> + <Caret Line="428" Column="19" TopLine="410"/> </Position1> <Position2> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="100" Column="41" TopLine="82"/> + <Filename Value="epostunit.pas"/> + <Caret Line="6123" Column="46" TopLine="6094"/> </Position2> <Position3> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="33" Column="24" TopLine="15"/> + <Filename Value="epostunit.pas"/> + <Caret Line="6121" Column="23" TopLine="6115"/> </Position3> <Position4> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="76" Column="14" TopLine="47"/> + <Filename Value="epostunit.pas"/> + <Caret Line="189" Column="25" TopLine="173"/> </Position4> <Position5> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="90" Column="14" TopLine="61"/> + <Filename Value="werteunit.pas"/> + <Caret Line="1893" Column="60" TopLine="1871"/> </Position5> <Position6> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="100" Column="27" TopLine="71"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4486" Column="15" TopLine="4461"/> </Position6> <Position7> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="206" Column="45" TopLine="186"/> + <Filename Value="epostunit.pas"/> + <Caret Line="6121" Column="28" TopLine="6092"/> </Position7> <Position8> - <Filename Value="epost.lpr"/> - <Caret Line="260" Column="53" TopLine="228"/> + <Filename Value="epostunit.pas"/> + <Caret Line="8202" Column="27" TopLine="8179"/> </Position8> <Position9> <Filename Value="epostunit.pas"/> - <Caret Line="157" Column="30" TopLine="140"/> </Position9> <Position10> - <Filename Value="epost.lpr"/> - <Caret Line="250" Column="93" TopLine="228"/> + <Filename Value="epostunit.pas"/> + <Caret Line="189" Column="25" TopLine="161"/> </Position10> <Position11> - <Filename Value="epost.lpr"/> - <Caret Line="397" Column="34" TopLine="368"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4486" Column="15" TopLine="4458"/> </Position11> <Position12> - <Filename Value="epost.lpr"/> - <Caret Line="414" TopLine="391"/> + <Filename Value="typenunit.pas"/> + <Caret Line="3403" Column="15" TopLine="3385"/> </Position12> <Position13> - <Filename Value="epost.lpr"/> - <Caret Line="182" TopLine="158"/> + <Filename Value="typenunit.pas"/> + <Caret Line="26" Column="25" TopLine="6"/> </Position13> <Position14> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="98" Column="39" TopLine="83"/> + <Filename Value="typenunit.pas"/> + <Caret Line="3414" TopLine="3381"/> </Position14> <Position15> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="170" Column="28" TopLine="162"/> + <Filename Value="typenunit.pas"/> + <Caret Line="3389" Column="99" TopLine="3372"/> </Position15> <Position16> - <Filename Value="epost.lpr"/> - <Caret Line="256" TopLine="229"/> + <Filename Value="typenunit.pas"/> + <Caret Line="615" Column="99" TopLine="597"/> </Position16> <Position17> - <Filename Value="epost.lpr"/> - <Caret Line="397" Column="34" TopLine="368"/> + <Filename Value="typenunit.pas"/> + <Caret Line="3407" Column="32" TopLine="3381"/> </Position17> <Position18> - <Filename Value="epost.lpr"/> - <Caret Line="414" Column="80" TopLine="391"/> + <Filename Value="typenunit.pas"/> + <Caret Line="3411" Column="14" TopLine="3388"/> </Position18> <Position19> - <Filename Value="epost.lpr"/> - <Caret Line="183" TopLine="158"/> + <Filename Value="typenunit.pas"/> + <Caret Line="3410" Column="25" TopLine="3393"/> </Position19> <Position20> - <Filename Value="epost.lpr"/> - <Caret Line="370" Column="113" TopLine="363"/> + <Filename Value="werteunit.pas"/> + <Caret Line="1893" Column="45" TopLine="1871"/> </Position20> <Position21> - <Filename Value="epost.lpr"/> - <Caret Line="437" Column="32" TopLine="409"/> + <Filename Value="werteunit.pas"/> + <Caret Line="1874" Column="16" TopLine="1856"/> </Position21> <Position22> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="99" Column="35" TopLine="78"/> + <Filename Value="epostunit.pas"/> + <Caret Line="6133" Column="19" TopLine="6119"/> </Position22> <Position23> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="27" Column="17" TopLine="9"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4381" Column="37" TopLine="4363"/> </Position23> <Position24> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="26" Column="18" TopLine="9"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4410" Column="69" TopLine="4393"/> </Position24> <Position25> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="27" Column="18" TopLine="9"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4485" Column="23" TopLine="4468"/> </Position25> <Position26> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="73" Column="6" TopLine="44"/> + <Filename Value="epostunit.pas"/> + <Caret Line="6122" Column="25" TopLine="6117"/> </Position26> <Position27> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="88" Column="8" TopLine="59"/> + <Filename Value="epostunit.pas"/> + <Caret Line="189" Column="25" TopLine="173"/> </Position27> <Position28> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="99" Column="21" TopLine="70"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4489" Column="15" TopLine="4468"/> </Position28> <Position29> - <Filename Value="../units/matheunit.pas"/> - <Caret Line="124" Column="27" TopLine="95"/> + <Filename Value="epostunit.pas"/> + <Caret Line="130" Column="23" TopLine="114"/> </Position29> <Position30> - <Filename Value="epost.lpr"/> - <Caret Line="184" Column="67" TopLine="164"/> + <Filename Value="epostunit.pas"/> + <Caret Line="131" Column="23" TopLine="114"/> </Position30> </JumpHistory> </ProjectSession> diff --git a/epostunit.pas b/epostunit.pas index 8df3e7a..243ea9c 100644 --- a/epostunit.pas +++ b/epostunit.pas @@ -186,6 +186,7 @@ type procedure fuelleMitDummys(sT: boolean); procedure verschiebe(threads: longint; richtung: tInt64Point); procedure ermittlePhasenWinkel(threads: longint); + procedure entspringe(threads: longint; entspringen: tEntspringModus); procedure fft2dNachbearbeitung(threads: longint; nB: tFFTDatenordnung); procedure schreibeWert(var f: textfile; p: tExtPoint; var letzterWert: extended; entspringen: extended; skalierung: string); inline; function exprToFloat(sT: boolean; s: string): extended; @@ -424,6 +425,13 @@ type constructor create(werte: tWerte; xMin,xMax: longint); procedure stExecute; override; end; + tEntspringThread = class(tLogThread) + we: tWerte; + mi,ma: longint; + em: tEntspringModus; + constructor create(werte: tWerte; min,max: longint; entspringModus: tEntspringModus); + procedure stExecute; override; + end; tKomplexMachThread = class(tLogThread) we: tWerte; xMi,xMa: longint; @@ -4352,6 +4360,7 @@ var fensters: array[boolean] of tSin2Fenster; s: string; b: boolean; + entspringen: tEntspringModus; bekannteBefehle: tMyStringList; maxPos: tInt64Point; betraege: tWerte; @@ -4368,10 +4377,13 @@ begin end; xFak:=1; yFak:=1; + entspringen.modus:=emKein; + setLength(entspringen.parameter,0); bekannteBefehle:=tMyStringList.create; repeat if not f.metaReadln(s,true) then begin gibAus('Unerwartetes Dateiende!',3); + bekannteBefehle.free; for b:=false to true do fensters[b].free; exit; @@ -4394,9 +4406,20 @@ begin yFak:=kont2diskFak('t',exprToFloat(sT,s)); continue; end; + if istDasBefehl('entspringen:',s,bekannteBefehle,true) then begin + if not strToTEntspringModus(s,sT,knownValues,@callBackGetValue,entspringen) then begin + bekannteBefehle.free; + for b:=false to true do + fensters[b].free; + exit; + end; + continue; + end; bekannteBefehle.sort; gibAus('Verstehe Option '''+s+''' nicht beim Extrahieren der Phase!'#10'Ich kenne:'#10+bekannteBefehle.text,3); bekannteBefehle.free; + for b:=false to true do + fensters[b].free; exit; until false; bekannteBefehle.free; @@ -4459,6 +4482,19 @@ begin gibAus('Phasenwinkel ermitteln ...',3); ermittlePhasenWinkel(threads); + if entspringen.modus<>emKein then begin + case entspringen.modus of + emHorizontal: + entspringen.parameter[0]:= + kont2disk('x',entspringen.parameter[0]); + emVertikal: + entspringen.parameter[0]:= + kont2disk('y',entspringen.parameter[0]); + end{of case}; + gibAus('entsrpingen ...',3); + entspringe(threads,entspringen); + end; + gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; @@ -6091,6 +6127,46 @@ begin holeRAM(3); end; +procedure tWerte.entspringe(threads: longint; entspringen: tEntspringModus); +var + entspringThreads: array of tEntspringThread; + i,dim: longint; + fertig: boolean; +begin + case entspringen.modus of + emKein: // nichts zu tun + exit; + emHorizontal: + dim:=_tSiz; + emVertikal: + dim:=_xSteps; + else + fehler('Entspringmodus '''+tEntspringModusToStr(entspringen)+''' ist (noch) nicht implementiert!'); + end{of case}; + + if dim<threads then + threads:=dim; + + setLength(entspringThreads,threads); + for i:=0 to threads-1 do + entspringThreads[i]:= + tEntspringThread.create( + self, + round(i/threads*dim), + round((i+1)/threads*dim-1), + entspringen + ); + repeat + sleep(10); + fertig:=true; + for i:=0 to length(entspringThreads)-1 do + fertig:=fertig and entspringThreads[i].fertig; + until fertig; + for i:=0 to length(entspringThreads)-1 do + entspringThreads[i].free; + gibAus('Alle Entspringthreads fertig!',1); +end; + procedure tWerte.fft2dNachbearbeitung(threads: longint; nB: tFFTDatenordnung); var i: longint; @@ -8114,6 +8190,33 @@ begin gibAus('PhasenWinkelThread beendet',1); end; +// tEntspringThread ************************************************************ + +constructor tEntspringThread.create(werte: tWerte; min,max: longint; entspringModus: tEntspringModus); +begin + inherited create; + we:=werte; + mi:=min; + ma:=max; + em:=entspringModus; + gibAus('EntspringThread erzeugt: '+intToStr(mi)+'-'+intToStr(ma)+' '+tEntspringModusToStr(em),1); + suspended:=false; +end; + +procedure tEntspringThread.stExecute; +begin + gibAus('EntspringThread gestartet',1); + case we.genauigkeit of + gSingle: + we.sWerte.entspringe(mi,ma,em); + gDouble: + we.dWerte.entspringe(mi,ma,em); + gExtended: + we.eWerte.entspringe(mi,ma,em); + end{of case}; + gibAus('EntspringThread beendet',1); +end; + // tKomplexMachThread ********************************************************** constructor tKomplexMachThread.create(werte: tWerte; xMin,xMax: longint; komplexMachModus: tKomplexMachModus; randomSeed: longword); diff --git a/typenunit.pas b/typenunit.pas index 0ea6cac..05e9c1d 100644 --- a/typenunit.pas +++ b/typenunit.pas @@ -21,6 +21,11 @@ type parameter: tExtendedArray; end; tIntegrationsRichtung = (irHorizontal,irEinfall,irAusfall); + tLowLevelEntspringModus = (emKein,emHorizontal,emVertikal); + tEntspringModus = record + modus: tLowLevelEntspringModus; + parameter: tExtendedArray; + end; tGenerischeInputDateiInfo = class // nur zum Vererben gedacht, nie selbst instanziieren! name,fehlerBehebungsKommando: string; gamma,groeszenFaktor, @@ -607,6 +612,8 @@ procedure zerstoereTransformationWennObsolet(tr: tTransformation); function dreheLagePositiv(l: tLage): tLage; inline; function stringToTHintergrundAbzugsArt(s: string; sT: boolean; kvs: tKnownValues; cbgv: tCallBackGetValue; out hintergrundAbzugsArt: tHintergrundAbzugsArt): boolean; function tHintergrundAbzugsArtToStr(hintergrundAbzugsArt: tHintergrundAbzugsArt): string; +function strToTEntspringModus(s: string; sT: boolean; kvs: tKnownValues; cbgv: tCallBackGetValue; out entspringModus: tEntspringModus): boolean; +function tEntspringModusToStr(entspringModus: tEntspringModus): string; const paralleleRichtung: array[tLage] of char = ('y','x','y','x'); @@ -3379,5 +3386,49 @@ begin end{of case}; end; +function strToTEntspringModus(s: string; sT: boolean; kvs: tKnownValues; cbgv: tCallBackGetValue; out entspringModus: tEntspringModus): boolean; +var + bekannteModi: tMyStringList; +begin + bekannteModi:=tMyStringList.create; + result:=true; + if istDasBefehl('kein',s,bekannteModi,false) then begin + entspringModus.modus:=emKein; + setLength(entspringModus.parameter,0); + end + else if istDasBefehl('horizontal',s,bekannteModi,true) then begin + entspringModus.modus:=emHorizontal; + setLength(entspringModus.parameter,1); + entspringModus.parameter[0]:=exprToFloat(sT,s,kvs,cbgv); + end + else if istDasBefehl('vertikal',s,bekannteModi,true) then begin + entspringModus.modus:=emVertikal; + setLength(entspringModus.parameter,1); + entspringModus.parameter[0]:=exprToFloat(sT,s,kvs,cbgv); + end + else begin + entspringModus.modus:=emKein; + setLength(entspringModus.parameter,0); + result:=false; + bekannteModi.sort; + gibAus('Unbekannter Entspringmodus '''+s+''' - ich kenne nur:'#10+bekannteModi.text,3); + end; + bekannteModi.free; +end; + +function tEntspringModusToStr(entspringModus: tEntspringModus): string; +begin + case entspringModus.modus of + emKein: + result:='kein'; + emHorizontal: + result:='horizontal '+myFloatToStr(entspringModus.parameter[0]); + emVertikal: + result:='vertikal '+myFloatToStr(entspringModus.parameter[0]); + else + result:='UNBEKANNT'; + end{of case}; +end; + end. diff --git a/werteunit.pas b/werteunit.pas index fdbad97..5d4ec0c 100644 --- a/werteunit.pas +++ b/werteunit.pas @@ -83,6 +83,7 @@ type procedure verschiebe(richtung: tInt64Point; xV,xB,tV,tB: longint); procedure ermittlePhasenWinkel(xMi,xMa: longint); procedure macheKomplex(tMi,tMa: int64; kmm: tKomplexMachModus; mT: tMersenneTwister); + procedure entspringe(mi,ma: int64; em: tEntspringModus); procedure entferneHeiszePixel(schwelle,minusSchwelle,plusSchwelle: extended); procedure quotioent(dend: pTLLWerteSingle; sor: pTLLWerteSingle; xMi,xMa,xOf,tMi,tMa,tOf: int64; eps: extended); overload; procedure quotioent(dend: pTLLWerteSingle; sor: pTLLWerteDouble; xMi,xMa,xOf,tMi,tMa,tOf: int64; eps: extended); overload; @@ -1865,6 +1866,49 @@ begin end{of case}; end; +procedure tLLWerte.entspringe(mi,ma: int64; em: tEntspringModus); +var + i,j,pStep,sStep,pMax,jStart: int64; + wert: extended; +begin + case em.modus of + emKein: + exit; + emHorizontal: begin + pStep:=1; + sStep:=params.xSteps; + pMax:=params.xSteps-1; + end; + emVertikal: begin + pStep:=params.xSteps; + sStep:=1; + pMax:=params.tSiz-1; + end; + else + fehler('Entspringmodus '''+tEntspringModusToStr(em)+''' nicht implementiert!'); + end{of case}; + assert(em.modus in [emHorizontal,emVertikal],'Hoppla, der Entspringmodus '''+tEntspringModusToStr(em)+''' ist doch noch nicht implementiert!'); + jStart:=max(0,min(pMax,round(em.parameter[0]))); + for i:=mi to ma do begin // senkrecht + wert:=0; + for j:=jStart to pMax do begin // parallel, nach rechts + while werte[i*sStep+j*pStep]-wert >= pi do + werte[i*sStep+j*pStep]:=werte[i*sStep+j*pStep]-2*pi; + while werte[i*sStep+j*pStep]-wert < -pi do + werte[i*sStep+j*pStep]:=werte[i*sStep+j*pStep]+2*pi; + wert:=werte[i*sStep+j*pStep]; + end; + wert:=werte[i*sStep+jStart*pStep]; + for j:=jStart-1 downto 0 do begin // parallel, nach links + while werte[i*sStep+j*pStep]-wert >= pi do + werte[i*sStep+j*pStep]:=werte[i*sStep+j*pStep]-2*pi; + while werte[i*sStep+j*pStep]-wert < -pi do + werte[i*sStep+j*pStep]:=werte[i*sStep+j*pStep]+2*pi; + wert:=werte[i*sStep+j*pStep]; + end; + end; +end; + procedure tLLWerte.entferneHeiszePixel(schwelle,minusSchwelle,plusSchwelle: extended); var i,j,iM,jM,iP,jP,mCnt: int64; |