lemoz
- 2
- 0
Frequency dependent material simulation
The discussion focuses on troubleshooting a simulation of electromagnetic wave propagation in a Debye medium using a custom code. The user reports unexpected results, suspecting issues with the absorbing boundary conditions. Recommendations include exploring established simulation tools such as ANSYS and COMSOL, which may provide more reliable results. The code provided is written in Pascal and includes specific parameters like epsilon, sigma, and time steps that are critical for accurate simulation.
PREREQUISITESResearchers, engineers, and students involved in electromagnetic simulations, particularly those working with Debye materials and seeking to enhance their simulation accuracy and reliability.
Program debyeformulation;
Const
size=200;
Var
dz: array[0..size-1] of real;
ez: array[0..size-1] of real;
hx: array[0..size-2] of real;
ga: array[0..size-1] of real;
gb: array[0..size-1] of real;
gc: array[0..size-1] of real;
ix: array[0..size-1] of real;
sx: array[0..size-1] of real;
Time,maxTime,i:integer;
dx,dt,epsz,epsilon,sigma:real;
t0, spread, pulse:real;
tau,hi ;
ezl1,ezl2,ezh1, ezh2:real;
monfichier:text;
begin
assign(monfichier,'debyeformul100.txt');
rewrite(monfichier);
dx :=0.01; dt:=dx/6e8; epsz:=8.8e-12;
for i:=0 to size-1 do
begin
ga[i]:=1.0; gb[i]:=0.0; gc[i]:=0.0; dz[i]:=0.0; ez[i]:=0.0; hx[i]:=0.0; ix[i]:=0.0; sx[i]:=0.0;
end;
ezl1:=0.0; ezl2:=0.0; ezh1:=0.0; ezh2:=0.0;
epsilon:=2.0; sigma:=0.01; hi:=2.0; tau:=0.001;
for i:=100 to size-1 do
begin
ga[i]:=1.0/(epsilon+sigma*dt/epsz+hi*dt/tau);
gb[i]:= sigma*dt/epsz;
gc[i]:= hi*dt/tau;
end;
for i:=0 to size-1 do
begin
writeln(i,'',ga[i]:6:2,'',gb[i]:6:2,'',gc[i]:6:2);
end;
maxTime:=100; t0:=50.0; spread:=10.0;
for Time:=0 to maxTime-1 do
begin
for i:=1 to size-2 do
begin
dz[i]:=dz[i]+0.5*(hx[i-1]-hx[i]);
end;
pulse:=exp(-0.5*(Time-t0)*(Time-t0)/spread);
dz[5]:=dz[5]+pulse;
for i:=1 to size-2 do
begin
ez[i]:=ga[i]*(dz[i]-ix[i]-sx[i]);
ix[i]:=ix[i]+gb[i]*ez[i];
sx[i]:= exp(-dt/tau) *sx[i]+gc[i]*ez[i];
end;
ez[0]:= ezl2;
ezl2:= ezl1;
ezl1:= ez[1];
ez[size-1]:= ezh2;
ezh2 :=ezh1
ezh1 :=ez[size-2] ;
for i:=0 to size-1 do
begin
hx[i]:=hx[i]+0.5*(ez[i]-ez[i+1]);
end;
end;
for i:=0 to size-1 do
begin
write(monfichier,i,' ',ez[i]:1:3);
writeln(monfichier);
end;
close(monfichier);
readln;
end.