diff options
-rw-r--r-- | Physikunit.pas | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/Physikunit.pas b/Physikunit.pas index 680419b..935dcad 100644 --- a/Physikunit.pas +++ b/Physikunit.pas @@ -6,7 +6,6 @@ unit Physikunit; {$ERROR This program can be compiled only on/for Unix/Linux based systems.} {$ENDIF} -{$DEFINE Zeitschrittueberwachung} {$DEFINE Dichteueberwachung} {$DEFINE negativeDichteueberwachung} { $DEFINE exzessiveArrayBereichsTests} @@ -133,7 +132,7 @@ type {$IFDEF exzessiveArrayBereichsTests} procedure pruefeArrayEnden(fehler: string); {$ENDIF} - procedure nichtnegativieren; + procedure nichtnegativieren; inline; procedure berechnePhasenraumAbleitungen; inline; public emFelder: array[tEMFeldGroesze,boolean] of pDouble; // EM-Felder und deren Zeitableitungen @@ -1070,6 +1069,18 @@ begin (impulsraum[i,false]+j+(aX-1)*aP)^:=0; end; + for i:=0 to length(teilchen)-1 do + for j:=0 to aX-1 do begin + if (impulsraum[i,false]+j*aP)^>0 then begin // unterer Rand + (impulsraum[i,false]+1+j*aP)^:=(impulsraum[i,false]+1+j*aP)^+(impulsraum[i,false]+j*aP)^; + (impulsraum[i,false]+j*aP)^:=0; + end; + if (impulsraum[i,false]+aP-1+j*aP)^>0 then begin // oberer Rand + (impulsraum[i,false]+aP-2+j*aP)^:=(impulsraum[i,false]+aP-2+j*aP)^+(impulsraum[i,false]+aP-1+j*aP)^; + (impulsraum[i,false]+aP-1+j*aP)^:=0; + end; + end; + // PY und iMGamma berechnen for i:=0 to length(matFelder)-1 do for j:=0 to aX-1 do begin @@ -1613,8 +1624,9 @@ begin if (felders[aktuelleFelder].impulsraum[i,false]+j)^<0 then begin pro:=tProtokollant.create(prot,'iteriereSchritt'); pro.schreibe('n<0 bei:',true); - pro.schreibe(' t = ' +floattostr(t)+',',true); + pro.schreibe(' t = ' +floattostr(t)+' (aktuelleFelder = '+inttostr(aktuelleFelder)+'),',true); pro.schreibe(' i = ' +inttostr(i)+' (x = '+floattostr(xl+i*dX)+'),',true); + pro.schreibe(' n = ' +floattostr((felders[aktuelleFelder].impulsraum[i,false]+j)^),true); abbrechen; end; {$ENDIF} |