summaryrefslogtreecommitdiff
path: root/Physikunit.pas
diff options
context:
space:
mode:
Diffstat (limited to 'Physikunit.pas')
-rw-r--r--Physikunit.pas17
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