diff options
author | Erich Eckner <git@eckner.net> | 2015-12-08 15:21:18 +0100 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2015-12-08 15:21:18 +0100 |
commit | 6826a09f24d4012dcaa6afa3518164e8a6210387 (patch) | |
tree | 38508ee2db60de8ae1fe9b0c64bc6d5a4b6bea49 | |
parent | 0c191855fe0dd55ff1d4e6a767e9d2879063619e (diff) | |
download | Plasmapropagation-6826a09f24d4012dcaa6afa3518164e8a6210387.tar.xz |
jetzt mehrere Permutationen in Physikunit.pas
-rw-r--r-- | Physikunit.pas | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/Physikunit.pas b/Physikunit.pas index 4dbc2da..456ac7d 100644 --- a/Physikunit.pas +++ b/Physikunit.pas @@ -171,7 +171,7 @@ type abbruch: boolean; dX,iDX,xl,t: double; kvs: tKnownValues; - impulsRaumPermutation: tLongintArray; + impulsRaumPermutationen: array of tLongintArray; procedure abbrechen; public @@ -182,6 +182,7 @@ type destructor destroy; override; procedure iteriereSchritt(dT: double); procedure dumpErhaltungsgroeszen; + function gibImpulsRaumPermutation: pTLongintArray; end; { tSimulation } @@ -1351,6 +1352,7 @@ procedure tFelder.nichtnegativieren; // Dichten nicht negativ machen var i,j: longint; defizit: double; + perm: pTLongintArray; begin for i:=0 to length(teilchen)-1 do begin defizit:=0; @@ -1362,19 +1364,21 @@ begin gesamtDefizit:=gesamtDefizit+defizit; - if defizit>0 then + if defizit>0 then begin + perm:=gitter.gibImpulsRaumPermutation; for j:=0 to aP*aX-1 do begin - if (impulsraum[i,false]+gitter.impulsRaumPermutation[j])^>=defizit then begin - (impulsraum[i,false]+gitter.impulsRaumPermutation[j])^:= - (impulsraum[i,false]+gitter.impulsRaumPermutation[j])^-defizit; + if (impulsraum[i,false]+perm^[j])^>=defizit then begin + (impulsraum[i,false]+perm^[j])^:= + (impulsraum[i,false]+perm^[j])^-defizit; defizit:=0; break; end - else if (impulsraum[i,false]+gitter.impulsRaumPermutation[j])^>0 then begin - defizit:=defizit-(impulsraum[i,false]+gitter.impulsRaumPermutation[j])^; - (impulsraum[i,false]+gitter.impulsRaumPermutation[j])^:=0; + else if (impulsraum[i,false]+perm^[j])^>0 then begin + defizit:=defizit-(impulsraum[i,false]+perm^[j])^; + (impulsraum[i,false]+perm^[j])^:=0; end; end; + end; if defizit>0 then begin gitter.prot.schreibe('Kann Defizit der Teilchensorte '+inttostr(i+1)+' nicht ausgleichen, '+floattostr(defizit)+' bleibt übrig!',true); gitter.abbrechen; @@ -1530,7 +1534,9 @@ begin end{of Case}; xl:=dX/2; - impulsRaumPermutation:=permutation(aX*aP); + setlength(impulsRaumPermutationen,10); + for i:=0 to length(impulsRaumPermutationen)-1 do + impulsRaumPermutationen[i]:=permutation(aX*aP); for i:=0 to length(felders)-1 do felders[i]:=tFelder.create(aX,aP,deltaX,deltaP,teilchen,lichter,self); @@ -1626,6 +1632,11 @@ begin felders[aktuelleFelder].dumpErhaltungsgroeszen; end; +function tGitter.gibImpulsRaumPermutation: pTLongintArray; +begin + result:=@(impulsRaumPermutationen[random(length(impulsRaumPermutationen))]); +end; + // tSimulation ***************************************************************** constructor tSimulation.create(inName: string; protokollant: tProtokollant; name: string); |