summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2015-12-08 15:21:18 +0100
committerErich Eckner <git@eckner.net>2015-12-08 15:21:18 +0100
commit6826a09f24d4012dcaa6afa3518164e8a6210387 (patch)
tree38508ee2db60de8ae1fe9b0c64bc6d5a4b6bea49
parent0c191855fe0dd55ff1d4e6a767e9d2879063619e (diff)
downloadPlasmapropagation-6826a09f24d4012dcaa6afa3518164e8a6210387.tar.xz
jetzt mehrere Permutationen in Physikunit.pas
-rw-r--r--Physikunit.pas29
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);