diff options
Diffstat (limited to 'Physikunit.pas')
-rw-r--r-- | Physikunit.pas | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/Physikunit.pas b/Physikunit.pas index fc2dcd2..bbd63f1 100644 --- a/Physikunit.pas +++ b/Physikunit.pas @@ -11,11 +11,14 @@ unit Physikunit; // nach einer LiKo negative Dichten entfernen: {$DEFINE DichteNichtnegativieren:=perSkalieren} // insgesamt runter skalieren um negative Dichten aufzufüllen { $DEFINE DichteNichtnegativieren:=perEinzelklau} // negative Dichten aus zufälligen Phasenraumpunkten auffüllen +{ $DEFINE dnZwischenRKSchritten} // nach jeder LiKo Dichten nicht negativ machen { $DEFINE negativeDichteueberwachung} // prüfen, ob die Dichten negativ werden { $DEFINE exzessiveArrayBereichsTests} // zeitaufwändige(!) Array-Bereichstest für fftw +{ $DEFINE laengenSindZweierpotenzen} // Laengen auf Zweierpotenzen runden (ggf. günstiger für fft) + interface uses @@ -1554,6 +1557,7 @@ var begin inherited create; +{$IFDEF laengenSindZweierpotenzen} i:=aP; aP:=round(power(2,ceil(ln(aP-0.5)/ln(2)))); deltaP:=deltaP*(i-1)/(aP-1); @@ -1561,6 +1565,7 @@ begin i:=aX; aX:=round(power(2,ceil(ln(aX+4-0.5)/ln(2)))); // zwei Felder links und rechts extra für Randbedingungen deltaX:=deltaX*(i-1)/(aX-4-1); +{$ENDIF} abbruch:=false; simulation:=besitzer; @@ -1663,7 +1668,13 @@ begin until abbruch; aktuelleFelder:=1-aktuelleFelder; - {$IFDEF negativeDichteueberwachung} +{$IF DEFINED(DichteNichtnegativieren) and not DEFINED(dnZwischenRKSchritten)} + felders[aktuelleFelder].nichtnegativieren; +{$ENDIF} +{$IFDEF negativeDichteueberwachung} +{$IFNDEF DichteNichtnegativieren} + {$WARNING Negative Dichte wird überwacht, aber nicht korrigiert - das führt wahrscheinlich zum Abbruch!} +{$ENDIF} for i:=0 to length(felders[aktuelleFelder].impulsraum)-1 do for j:=0 to felders[aktuelleFelder].aX*felders[aktuelleFelder].aP-1 do if (felders[aktuelleFelder].impulsraum[i,false]+j)^<0 then begin @@ -1674,7 +1685,7 @@ begin pro.schreibe(' n = ' +floattostr((felders[aktuelleFelder].impulsraum[i,false]+j)^),true); abbrechen; end; - {$ENDIF} +{$ENDIF} t:=t+dT; end; @@ -2164,7 +2175,7 @@ end; function fourierWindow(x: extended): extended; begin - result:=exp(-sqr(sqr(sqr(3*x)))); + result:=exp(-sqr(3*x)); end; initialization |