summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Physikunit.pas86
1 files changed, 32 insertions, 54 deletions
diff --git a/Physikunit.pas b/Physikunit.pas
index c35c239..bc23f05 100644
--- a/Physikunit.pas
+++ b/Physikunit.pas
@@ -267,9 +267,7 @@ begin
nam:=nam+', '+matSpeicherNamen[maF];
delete(nam,1,2);
pro.schreibe('Ich kenne nur: '+nam,true);
-
- pro.destroyAll;
- halt(1);
+ raise exception.create('Fehler in tAusgabeDatei.create!');
end;
case wasSpeichern of
@@ -298,8 +296,7 @@ begin
freeMem(buf,bufLen);
if (tCnt<>zeitAnz) and ((nNum<>0) or (tCnt<>-1)) then begin
pro.schreibe('Falsche Anzahl an Zeitschritten in '+pre+'-'+inttostr(nNum-1)+suf+' geschrieben ('+inttostr(tCnt)+' statt '+inttostr(zeitAnz)+')!',true);
- pro.destroyall;
- halt(1);
+ raise exception.create('Fehler in tAusgabeDatei.destroy!');
end;
inherited destroy;
end;
@@ -336,8 +333,7 @@ procedure tAusgabeDatei.schreibeKopf;
begin
if (tCnt<>zeitAnz) and ((nNum<>0) or (tCnt<>-1)) then begin
pro.schreibe('Falsche Anzahl an Zeitschritten in '+pre+'-'+inttostr(nNum-1)+suf+' geschrieben ('+inttostr(tCnt)+' statt '+inttostr(zeitAnz)+')!',true);
- pro.destroyall;
- halt(1);
+ raise exception.create('Fehler in tAusgabeDatei.schreibeKopf!');
end;
if bufPos<>0 then
schreibeBuffer(0);
@@ -356,8 +352,7 @@ var i,cnt: longint;
begin
if (teilchen>=length(gitter.felders[gitter.aktuelleFelder].teilchen)) then begin
pro.schreibe('Teilchen '+inttostr(teilchen+1)+' gibt es nicht, da kann ich auch nichts speichern!',true);
- pro.destroyall;
- halt(1);
+ raise exception.create('Fehler in tAusgabeDatei.speichereWerte!');
end;
if sT>=nNum+sDT/2 then
@@ -373,8 +368,7 @@ begin
if bufLen-bufPos < sizeof(longint) + (2+cnt)*sizeof(double) then begin
pro.schreibe('Schreibbuffer ist zu klein ('+inttostr(bufLen)+' statt mindestens '+inttostr(sizeof(longint) + (2+cnt)*sizeof(double))+' Bytes)!');
- pro.destroyall;
- halt(1);
+ raise exception.create('Fehler in tAusgabeDatei.speichereWerte!');
end;
move(cX,(buf+bufPos)^,sizeof(double));
@@ -421,8 +415,7 @@ begin
end{of case};
if cnt<>0 then begin
pro.schreibe('Falsche Anzahl an Ortsschritten geschrieben ('+inttostr(cnt)+')!',true);
- pro.destroyall;
- halt(1);
+ raise exception.create('Fehler in tAusgabeDatei.speichereWerte!');
end;
end;
@@ -516,8 +509,7 @@ begin
repeat
if not ifile.readln(s) then begin
prot.schreibe('Unerwartetes Dateiende in Parameterdatei im Bereich teilchen -> verteilung stückweise!',true);
- prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tTeilchenSpezies.liesDichteFunktion!');
end;
if length(dichteStuecke)=length(ortsGrenzen) then begin // neues Funktionsstück wird definiert
@@ -538,8 +530,7 @@ begin
ori:=strtoint(rest)-1;
if (ori<0) or (ori>=length(teilchen)-1) then begin
prot.schreibe('Kann mich nicht auf die Dichte von Teilchen '+inttostr(ori+1)+' beziehen, weil es noch nicht definiert wurde!',true);
- prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tTeilchenSpezies.liesDichteFunktion!');
end;
setlength(ortsGrenzen,length(teilchen[ori].ortsGrenzen));
for i:=0 to length(ortsGrenzen)-1 do
@@ -756,24 +747,21 @@ begin
if (abs(lFftTmp^.re-pi)>1e-10) or (abs(lFftTmp^.im-sqr(pi))>1e-10) then begin
gitter.prot.schreibe(fehler);
gitter.prot.schreibe(floattostr(lFftTmp^.re)+' vs. '+floattostr(pi)+' und '+floattostr(lFftTmp^.im)+' vs. '+floattostr(sqr(pi)));
- gitter.prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tFelder.pruefeArrayEnden!');
end;
for i:=0 to length(impulsRaumGradient)-1 do
for j:=0 to 1 do
if abs((impulsRaumGradient[i,j]+aP*aX)^-pi)>1e-10 then begin
gitter.prot.schreibe(fehler);
gitter.prot.schreibe(floattostr((impulsRaumGradient[i,j]+aP*aX)^)+' vs. '+floattostr(pi));
- gitter.prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tFelder.pruefeArrayEnden!');
end;
for i:=0 to length(impulsRaum)-1 do
for abl:=false to true do
if abs((impulsRaum[i,abl]+aP*aX)^-pi)>1e-10 then begin
gitter.prot.schreibe(fehler);
gitter.prot.schreibe(floattostr((impulsRaum[i,abl]+aP*aX)^)+' vs. '+floattostr(pi));
- gitter.prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tFelder.pruefeArrayEnden!');
end;
end;
@@ -987,8 +975,7 @@ begin
eqJY: result:=impulsIntegral(ort,tlc,msVY);
else begin
gitter.prot.schreibe('unbekannte EMQuellgröße in Impulsintegral!');
- gitter.prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tFelder.impulsIntegral!');
end;
end{of case};
result:=result * teilchen[tlc].eigenschaften[tsgLadung];
@@ -1052,8 +1039,7 @@ begin
result + abs((impulsraum[tlc,false]+i+ort*aP)^-(impulsraum[tlc,false]+i-1+ort*aP)^)*dP;
else begin
gitter.prot.schreibe('unbekannte Materiefeldgröße in Impulsintegral!');
- gitter.prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tFelder.impulsIntegral!');
end;
end{of case};
end;
@@ -1238,8 +1224,7 @@ begin
ifile.loadfromfile(inName);
if not ifile.unfoldMacros then begin
prot.schreibe('Fehlerhafte Macros in Parameterdatei '''+inName+'''!',true);
- prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tSimulation.create!');
end;
// Standardeinstellungen Bereich 'allgemein'
@@ -1275,8 +1260,7 @@ begin
repeat
if not ifile.readln(s) then begin
prot.schreibe('Unerwartetes Dateiende in '''+inName+'''!',true);
- prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tSimulation.create!');
end;
if s='Dateiende' then
@@ -1286,8 +1270,7 @@ begin
repeat
if not ifile.readln(s) then begin
prot.schreibe('Unerwartetes Dateiende in Parameterdatei '''+inName+''' im Bereich allgemein!',true);
- prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tSimulation.create!');
end;
if s='allgemeinEnde' then break;
if s='runge-Kutta-3/8' then begin
@@ -1349,8 +1332,7 @@ begin
continue;
end;
prot.schreibe('Unbekannter Befehl '''+s+''' in Parameterdatei '''+inName+''' im Bereich allgemein!',true);
- prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tSimulation.create!');
until false;
continue;
end;
@@ -1359,8 +1341,7 @@ begin
repeat
if not ifile.readln(s) then begin
prot.schreibe('Unerwartetes Dateiende in Parameterdatei '''+inName+''' im Bereich ausgaben!',true);
- prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tSimulation.create!');
end;
if s='ausgabenEnde' then break;
if startetMit('suffix ',s) then begin
@@ -1389,8 +1370,7 @@ begin
continue;
end;
prot.schreibe('Unbekannter Befehl '''+s+''' in Parameterdatei '''+inName+''' im Bereich ausgaben!',true);
- prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tSimulation.create!');
until false;
continue;
end;
@@ -1405,23 +1385,20 @@ begin
continue;
end;
prot.schreibe('Licht kann nicht von '''+erstesArgument(s)+''' kommen!',true);
- prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tSimulation.create!');
end;
if startetMit('teilchen',s) then begin
if (s<>'') and (strtoint(s)<>length(teilchen)+1) then begin
prot.schreibe('Ich erwarte die Teilchen beginnend bei 1 der Reihe nach in Parameterdatei '''+inName+'''!',true);
- prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tSimulation.create!');
end;
setlength(teilchen,length(teilchen)+1);
teilchen[length(teilchen)-1]:=tTeilchenSpezies.create;
repeat
if not ifile.readln(s) then begin
prot.schreibe('Unerwartetes Dateiende in Parameterdatei '''+inName+''' im Bereich teilchen!',true);
- prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tSimulation.create!');
end;
if s='teilchen'+inttostr(length(teilchen))+'Ende' then break;
if startetMit('ladung ',s) then begin
@@ -1463,23 +1440,20 @@ begin
end;
prot.schreibe('Unbekannter Befehl '''+s+''' in Parameterdatei '''+inName+''' im Bereich teilchen!',true);
- prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tSimulation.create!');
until false;
continue;
end;
prot.schreibe('Unbekannter Befehl '''+s+''' in Parameterdatei '''+inName+'''!',true);
- prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tSimulation.create!');
until false;
ifile.free;
if length(ausgabedateien)=0 then begin
prot.schreibe('Du solltest irgendetwas abspeichern lassen!',true);
- prot.destroyall;
- halt(1);
+ raise exception.create('Fehler in tSimulation.create!');
end;
if dT<0 then
@@ -1552,8 +1526,8 @@ begin
na^.sa_Restorer := Nil;
{$endif}
if (fPSigaction(SIGHUP, na, nil) <> 0) then begin
- writeln(stderr, 'Error: ', fpgeterrno, '.');
- halt(1);
+ pro.schreibe('Fehler: '+inttostr(fpgeterrno)+'.');
+ raise exception.create('Fehler in tSimulation.create!');
end;
dispose(na);
end;
@@ -1596,8 +1570,12 @@ begin
dT:=sDT;
zeitPhysik:=zeitPhysik-now;
- if errorCode<2 then
+ if errorCode<2 then try
gitter.iteriereSchritt(dT);
+ except
+ zeitPhysik:=zeitPhysik+now;
+ exit;
+ end;
zeitPhysik:=zeitPhysik+now;
zeitDatei:=zeitDatei-now;
while (gitter.t>=sT) and (sT<tEnde) do begin