From be6d7510e89e73de6484b17dac2b02816a0222bc Mon Sep 17 00:00:00 2001 From: Thorsten Liebig Date: Sat, 24 Apr 2010 16:47:40 +0200 Subject: [PATCH] examples: update to matlab examples --- matlab/examples/Circ_Waveguide.m | 28 ++++++++------ matlab/examples/Coax.m | 55 ++++++++++++++++++++------- matlab/examples/Coax_CylinderCoords.m | 14 ++++--- matlab/examples/Helix.m | 20 +++++----- matlab/examples/MSL.m | 17 +++++---- matlab/examples/PlaneWave.m | 33 ++++++++-------- matlab/examples/Rect_Waveguide.m | 24 ++++++------ 7 files changed, 118 insertions(+), 73 deletions(-) diff --git a/matlab/examples/Circ_Waveguide.m b/matlab/examples/Circ_Waveguide.m index e4377d4..aa8c509 100644 --- a/matlab/examples/Circ_Waveguide.m +++ b/matlab/examples/Circ_Waveguide.m @@ -2,6 +2,7 @@ close all; clear all; clc +%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% abs_length = 500; length = 5000; unit = 1e-3; @@ -27,6 +28,7 @@ func_Ea = [ num2str(1/kc) '*sin(a)*0.5*(j0(' num2str(kc) '*rho)-jn(2,' num2str func_Ex = [func_Er '*cos(a) - ' func_Ea '*sin(a)']; func_Ey = [func_Er '*sin(a) + ' func_Ea '*cos(a)']; +%% define file pathes and openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% openEMS_Path = [pwd() '/../../'] openEMS_opts = ''; % openEMS_opts = [openEMS_opts ' --disable-dumps']; @@ -39,14 +41,14 @@ Sim_CSX = 'Circ_WG.xml'; mkdir(Sim_Path); -%setup FDTD parameter +%% setup FDTD parameter & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%% FDTD = InitFDTD(1000,1e-6,'OverSampling',5); T = 1/f0; FDTD = SetCustomExcite(FDTD,f0,[ '(1-exp(-1*(t/' num2str(T) ')^2) ) * sin(2*pi*' num2str(f0) '*t)' ]); BC = [1 1 1 1 1 1] * 0; FDTD = SetBoundaryCond(FDTD,BC); -%setup CSXCAD geometry +%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = InitCSX(); mesh.x = -mesh_res(1)/2-rad:mesh_res(1):rad+mesh_res(1)/2; mesh.y = -mesh_res(2)/2-rad:mesh_res(2):rad+mesh_res(2)/2; @@ -56,7 +58,7 @@ CSX = DefineRectGrid(CSX, 1e-3,mesh); start = [0,0,0]; stop = [0,0,length]; -%%fake pml +%%% fake pml finalKappa = 0.3/abs_length^4; finalSigma = finalKappa*MUE0/EPS0; CSX = AddMaterial(CSX,'pml'); @@ -83,7 +85,7 @@ weight{3} = 0; CSX = SetExcitationWeight(CSX, 'excite', weight ); CSX = AddCylinder(CSX,'excite', 5 ,[0 0 -0.1],[0 0 0.1],rad); -%dump +%% define dump boxes... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddDump(CSX,'Et','SubSampling','2,2,4','FileType',1,'DumpMode',2); start = [mesh.x(1) , mesh.y(1) , mesh.z(1)]; stop = [mesh.x(end) , mesh.y(end) , mesh.z(end)]; @@ -102,21 +104,22 @@ CSX = AddBox(CSX,'Et',0 , start,stop); % stop = [mesh.x(end) , mesh.y(end) , length/2]; % CSX = AddBox(CSX,'Exy',0 , start,stop); +%% define voltage calc boxes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %voltage calc CSX = AddProbe(CSX,'ut1',0); start = [ -rad 0 0/2 ];stop = [ rad 0 0/2 ]; CSX = AddBox(CSX,'ut1', 0 ,start,stop); -% -% %current calc -% CSX = AddProbe(CSX,'it1',1); -% mid = 0.5*(coax_rad_i+coax_rad_ai); -% start = [ -mid -mid length/2 ];stop = [ mid mid length/2 ]; -% CSX = AddBox(CSX,'it1', 0 ,start,stop); -%Write openEMS compatoble xml-file +%current calc +CSX = AddProbe(CSX,'it1',1); +mid = 0.5*(coax_rad_i+coax_rad_ai); +start = [ -mid -mid length/2 ];stop = [ mid mid length/2 ]; +CSX = AddBox(CSX,'it1', 0 ,start,stop); + +%% Write openEMS compatoble xml-file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); -%cd to working dir and run openEMS +%% cd to working dir and run openEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% savePath = pwd(); cd(Sim_Path); %cd to working dir command = [openEMS_Path 'openEMS.sh ' Sim_CSX ' ' openEMS_opts]; @@ -124,6 +127,7 @@ disp(command); system(command) cd(savePath); +%% do the plots %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% UI = ReadUI('ut1','tmp/'); plot(UI.TD{1}.t,UI.TD{1}.val); grid on; diff --git a/matlab/examples/Coax.m b/matlab/examples/Coax.m index 6475c2f..cb3740c 100644 --- a/matlab/examples/Coax.m +++ b/matlab/examples/Coax.m @@ -2,6 +2,7 @@ close all; clear all; clc +%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% abs_length = 250; length = 1000; coax_rad_i = 100; @@ -11,10 +12,16 @@ mesh_res = [5 5 5]; EPS0 = 8.85418781762e-12; MUE0 = 1.256637062e-6; +C0 = 1/sqrt(EPS0*MUE0); +Z0 = sqrt(MUE0/EPS0); +f0 = 0.5e9; +epsR = 1; + +%% define file pathes and openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% openEMS_Path = [pwd() '/../../'] openEMS_opts = ''; -% openEMS_opts = [openEMS_opts ' --disable-dumps']; +openEMS_opts = [openEMS_opts ' --disable-dumps']; % openEMS_opts = [openEMS_opts ' --debug-material']; Sim_Path = 'tmp'; @@ -22,24 +29,20 @@ Sim_CSX = 'coax.xml'; mkdir(Sim_Path); -%setup FDTD parameter -FDTD = InitFDTD(5e5,1e-6); -FDTD = SetGaussExcite(FDTD,0.5e9,0.5e9); +%% setup FDTD parameter & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%% +FDTD = InitFDTD(5e5,1e-5); +FDTD = SetGaussExcite(FDTD,f0,f0); BC = [1 1 1 1 1 1] * 0; FDTD = SetBoundaryCond(FDTD,BC); -%setup CSXCAD geometry +%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = InitCSX(); mesh.x = -2.5*mesh_res(1)-coax_rad_aa : mesh_res(1) : coax_rad_aa+2.5*mesh_res(1); mesh.y = mesh.x; mesh.z = 0 : mesh_res(3) : length; CSX = DefineRectGrid(CSX, 1e-3,mesh); -%create copper helix and feed lines... -CSX = AddMaterial(CSX,'copper'); -CSX = SetMaterialProperty(CSX,'copper','Kappa',56e6); - -%%%fake pml +%% fake pml %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% finalKappa = 0.3/abs_length^4; finalSigma = finalKappa*MUE0/EPS0; CSX = AddMaterial(CSX,'pml'); @@ -49,11 +52,15 @@ CSX = SetMaterialWeight(CSX,'pml','Kappa',['pow(abs(z)-' num2str(length-abs_leng CSX = SetMaterialWeight(CSX,'pml','Sigma',['pow(abs(z)-' num2str(length-abs_length) ',4)']); %%% coax +CSX = AddMaterial(CSX,'copper'); +CSX = SetMaterialProperty(CSX,'copper','Kappa',56e6); start = [0, 0 , 0];stop = [0, 0 , length]; CSX = AddCylinder(CSX,'copper',0 ,start,stop,coax_rad_i); CSX = AddCylindricalShell(CSX,'copper',0 ,start,stop,0.5*(coax_rad_aa+coax_rad_ai),(coax_rad_aa-coax_rad_ai)); start(3) = length-abs_length; CSX = AddCylindricalShell(CSX,'pml',0 ,start,stop,0.5*(coax_rad_i+coax_rad_ai),(coax_rad_ai-coax_rad_i)); + +%% apply the excitation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% start(3) = 0; stop(3)=mesh_res(1)/2; CSX = AddExcitation(CSX,'excite',0,[1 1 0]); weight{1} = '(x)/(x*x+y*y)'; @@ -62,7 +69,7 @@ weight{3} = 0; CSX = SetExcitationWeight(CSX, 'excite', weight ); CSX = AddCylindricalShell(CSX,'excite',0 ,start,stop,0.5*(coax_rad_i+coax_rad_ai),(coax_rad_ai-coax_rad_i)); -%dump +%% define dump boxes... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddDump(CSX,'Et_','DumpMode',2); start = [mesh.x(1) , 0 , mesh.z(1)]; stop = [mesh.x(end) , 0 , mesh.z(end)]; @@ -72,9 +79,12 @@ CSX = AddDump(CSX,'Ht_','DumpType',1,'DumpMode',2); CSX = AddBox(CSX,'Ht_',0,start,stop); %voltage calc -CSX = AddProbe(CSX,'ut1',0); +CSX = AddProbe(CSX,'ut1_1',0); start = [ coax_rad_i 0 length/2 ];stop = [ coax_rad_ai 0 length/2 ]; -CSX = AddBox(CSX,'ut1', 0 ,start,stop); +CSX = AddBox(CSX,'ut1_1', 0 ,start,stop); +CSX = AddProbe(CSX,'ut1_2',0); +start = [ coax_rad_i 0 length/2+mesh_res(3) ];stop = [ coax_rad_ai 0 length/2+mesh_res(3) ]; +CSX = AddBox(CSX,'ut1_2', 0 ,start,stop); %current calc CSX = AddProbe(CSX,'it1',1); @@ -85,7 +95,7 @@ CSX = AddBox(CSX,'it1', 0 ,start,stop); %Write openEMS compatoble xml-file WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); -%cd to working dir and run openEMS +%% cd to working dir and run openEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% savePath = pwd(); cd(Sim_Path); %cd to working dir command = [openEMS_Path 'openEMS.sh ' Sim_CSX ' ' openEMS_opts]; @@ -93,3 +103,20 @@ disp(command); system(command) cd(savePath); +%% postproc & do the plots %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +UI = ReadUI({'ut1_1','ut1_2','it1'},'tmp/'); +u_f = (UI.FD{1}.val + UI.FD{2}.val)/2; %averaging voltages to fit current +i_f = UI.FD{3}.val; + +delta_t = UI.TD{3}.t(1) - UI.TD{1}.t(1); % half time-step (s) +i_f2 = i_f .* exp(-1i*2*pi*UI.FD{1}.f*delta_t); % compensate half time-step advance of H-field + +ZL = Z0/2/pi/sqrt(epsR)*log(coax_rad_ai/coax_rad_i); %analytic line-impedance of a coax +plot(UI.FD{1}.f,ZL*ones(size(u_f)),'g'); +hold on; +grid on; +Z = u_f./i_f2; +plot(UI.FD{1}.f,real(Z),'Linewidth',2); +plot(UI.FD{1}.f,imag(Z),'r','Linewidth',2); +xlim([0 2*f0]); +legend('Z_L','\Re\{Z\}','\Im\{Z\}','Location','Best'); diff --git a/matlab/examples/Coax_CylinderCoords.m b/matlab/examples/Coax_CylinderCoords.m index 94fca1b..44c2f77 100644 --- a/matlab/examples/Coax_CylinderCoords.m +++ b/matlab/examples/Coax_CylinderCoords.m @@ -2,6 +2,7 @@ close all; clear all; clc +%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% EPS0 = 8.85418781762e-12; MUE0 = 1.256637062e-6; C0 = 1/sqrt(EPS0*MUE0); @@ -20,6 +21,7 @@ max_alpha = max_mesh; N_alpha = ceil(rad_a * 2*pi / max_alpha); mesh_res = [max_mesh 2*pi/N_alpha max_mesh]; +%% define file pathes and openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% openEMS_Path = [pwd() '/../../']; openEMS_opts = ''; openEMS_opts = [openEMS_opts ' --disable-dumps']; @@ -30,13 +32,13 @@ Sim_CSX = 'coax.xml'; mkdir(Sim_Path); -%setup FDTD parameter +%% setup FDTD parameter & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%% FDTD = InitCylindricalFDTD(1e5,1e-5,'OverSampling',10); FDTD = SetGaussExcite(FDTD,f0,f0); BC = [0 0 1 1 0 0]; FDTD = SetBoundaryCond(FDTD,BC); -%setup CSXCAD geometry +%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = InitCSX(); mesh.x = rad_i : mesh_res(1) : rad_a; mesh.y = linspace(0,2*pi,N_alpha); @@ -44,7 +46,7 @@ mesh.y = linspace(0,2*pi,N_alpha); mesh.z = 0 : mesh_res(3) : length; CSX = DefineRectGrid(CSX, 1e-3,mesh); -%%%fake pml +%% fake pml %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% finalKappa = 0.3/abs_length^4; finalSigma = finalKappa*MUE0/EPS0/epsR; CSX = AddMaterial(CSX,'pml'); @@ -67,6 +69,7 @@ CSX = AddBox(CSX,'fill',0 ,start,stop); start = [rad_i mesh.y(1) 0]; stop = [rad_a mesh.y(end) 0]; +%% apply the excitation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddExcitation(CSX,'excite',0,[1 0 0]); weight{1} = '1/rho'; weight{2} = 0; @@ -74,7 +77,7 @@ weight{3} = 0; CSX = SetExcitationWeight(CSX, 'excite', weight ); CSX = AddBox(CSX,'excite',0 ,start,stop); -%dump +%% define dump boxes... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddDump(CSX,'Et_','DumpMode',0); start = [mesh.x(1) , 0 , mesh.z(1)]; stop = [mesh.x(end) , 0 , mesh.z(end)]; @@ -101,7 +104,7 @@ CSX = AddBox(CSX,'it1', 0 ,start,stop); %Write openEMS compatoble xml-file WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); -%cd to working dir and run openEMS +%% cd to working dir and run openEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% savePath = pwd(); cd(Sim_Path); %cd to working dir command = [openEMS_Path 'openEMS.sh ' Sim_CSX ' ' openEMS_opts]; @@ -109,6 +112,7 @@ disp(command); system(command) cd(savePath); +%% postproc & do the plots %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% UI = ReadUI({'ut1_1','ut1_2','it1'},'tmp/'); u_f = (UI.FD{1}.val + UI.FD{2}.val)/2; %averaging voltages to fit current i_f = UI.FD{3}.val; diff --git a/matlab/examples/Helix.m b/matlab/examples/Helix.m index 242a042..7ce1a23 100644 --- a/matlab/examples/Helix.m +++ b/matlab/examples/Helix.m @@ -2,6 +2,7 @@ close all; clear; clc +%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% feed_length=10; wire_rad = sqrt(1.4/pi); mesh_size = wire_rad; @@ -15,6 +16,7 @@ port_resist = 1000; f_max = 100e6; f_excite = 1e9; +%% define file pathes and openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% openEMS_Path = [pwd() '/../../'] openEMS_opts = ''; % openEMS_opts = [openEMS_opts ' --disable-dumps']; @@ -27,16 +29,16 @@ Sim_CSX = 'helix.xml'; rmdir(Sim_Path,'s'); mkdir(Sim_Path); -%setup FDTD parameter +%% setup FDTD parameter & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%% FDTD = InitFDTD(5e5,1e-6); FDTD = SetGaussExcite(FDTD,f_excite/2,f_excite/2); BC = [1 1 1 1 1 1]; FDTD = SetBoundaryCond(FDTD,BC); +%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% add_Lines = mesh_size * 1.5.^(1:10); add_Lines = add_Lines(find(add_Lines<(3e8/f_excite)/10*1e3)); -%setup CSXCAD geometry CSX = InitCSX(); mesh.x = -coil_rad-mesh_size : mesh_size : coil_rad+mesh_size+feed_length; mesh.x = [mesh.x(1)-add_Lines mesh.x mesh.x(end)+add_Lines ]; @@ -46,11 +48,10 @@ mesh.z = -mesh_size : mesh_size : coil_length+mesh_size; mesh.z = [mesh.z(1)-add_Lines mesh.z mesh.z(end)+add_Lines ]; CSX = DefineRectGrid(CSX, 1e-3,mesh); -%create copper helix and feed lines... +%% build/define helix %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddMaterial(CSX,'copper'); CSX = SetMaterialProperty(CSX,'copper','Kappa',56e6); -%build helix-wire dt = 1.0/coil_res; height=0; wire.Vertex = {}; @@ -78,6 +79,7 @@ p(2,count+2) = 0; p(3,count+2) = 0.5*(coil_length+port_length); CSX = AddWire(CSX, 'copper', 0, p, wire_rad); +%% apply the excitation & resist as a current source%%%%%%%%%%%%%%%%%%%%%%% CSX = AddMaterial(CSX,'resist'); kappa = port_length/port_resist/wire_rad^2/pi/1e-3; CSX = SetMaterialProperty(CSX,'resist','Kappa',kappa); @@ -87,10 +89,10 @@ stop=[coil_rad+feed_length 0 (coil_length+port_length)/2]; %start(3)=(coil_length-port_length)/2;stop(3)=(coil_length+port_length)/2; CSX = AddCylinder(CSX,'resist',5 ,start,stop,wire_rad); -%excitation CSX = AddExcitation(CSX,'excite',0,[0 0 1]); CSX = AddCylinder(CSX,'excite', 0 ,start,stop,wire_rad); +%% define voltage calc boxes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %voltage calc CSX = AddProbe(CSX,'ut1',0); CSX = AddBox(CSX,'ut1', 0 ,stop,start); @@ -102,7 +104,7 @@ start(1) = start(1)-2;start(2) = start(2)-2; stop(1) = stop(1)+2;stop(2) = stop(2)+2; CSX = AddBox(CSX,'it1', 0 ,start,stop); -%dump +%% define dump boxes... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddDump(CSX,'Et_'); start = [mesh.x(1) , 0 , mesh.z(1)]; stop = [mesh.x(end) , 0 , mesh.z(end)]; @@ -113,10 +115,10 @@ start = [mesh.x(1) , 0 , mesh.z(1)]; stop = [mesh.x(end) , 0 , mesh.z(end)]; CSX = AddBox(CSX,'Ht_',0 , start,stop); -%Write openEMS compatoble xml-file +%% Write openEMS compatoble xml-file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); -%cd to working dir and run openEMS +%% cd to working dir and run openEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% savePath = pwd(); cd(Sim_Path); %cd to working dir command = [openEMS_Path 'openEMS.sh ' Sim_CSX ' ' openEMS_opts]; @@ -124,7 +126,7 @@ disp(command); system(command) cd(savePath); -%%%post-proc +%% postproc & do the plots %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% U = ReadUI('ut1','tmp/'); I = ReadUI('it1','tmp/'); diff --git a/matlab/examples/MSL.m b/matlab/examples/MSL.m index 7f9ca3e..cbb27b6 100644 --- a/matlab/examples/MSL.m +++ b/matlab/examples/MSL.m @@ -2,6 +2,7 @@ close all; clear all; clc +%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% abs_length = 250; length = 1000; width = 500; @@ -13,23 +14,24 @@ mesh_res = [5 5 10]; EPS0 = 8.85418781762e-12; MUE0 = 1.256637062e-6; +%% define file pathes and openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% openEMS_Path = [pwd() '/../../'] openEMS_opts = ''; % openEMS_opts = [openEMS_opts ' --disable-dumps']; -openEMS_opts = [openEMS_opts ' --debug-material']; +% openEMS_opts = [openEMS_opts ' --debug-material']; Sim_Path = 'tmp'; Sim_CSX = 'msl.xml'; mkdir(Sim_Path); -%setup FDTD parameter +%% setup FDTD parameter & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%% FDTD = InitFDTD(5e5,1e-6); FDTD = SetGaussExcite(FDTD,0.5e9,0.5e9); BC = [1 1 0 1 0 0]; FDTD = SetBoundaryCond(FDTD,BC); -%setup CSXCAD geometry +%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = InitCSX(); mesh.x = -width/2 : mesh_res(1) : width/2; mesh.y = [linspace(0,MSL_height,11) MSL_height+1 MSL_height+3 MSL_height+mesh_res(2):mesh_res(2):height]; @@ -46,7 +48,7 @@ start = [-0.5*MSL_width, 0 , 0];stop = [0.5*MSL_width, MSL_height , mesh_res(1)/ CSX = AddExcitation(CSX,'excite',0,[0 -1 0]); CSX = AddBox(CSX,'excite',0 ,start,stop); -%%%fake pml +%% fake pml %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% finalKappa = 0.3/abs_length^4; finalSigma = finalKappa*MUE0/EPS0; CSX = AddMaterial(CSX,'pml'); @@ -58,7 +60,7 @@ start = [mesh.x(1) mesh.y(1) length-abs_length]; stop = [mesh.x(end) mesh.y(end) length]; CSX = AddBox(CSX,'pml',0 ,start,stop); -%dump +%% define dump boxes... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddDump(CSX,'Et_','DumpMode',2); start = [mesh.x(1) , MSL_height/2 , mesh.z(1)]; stop = [mesh.x(end) , MSL_height/2 , mesh.z(end)]; @@ -67,6 +69,7 @@ CSX = AddBox(CSX,'Et_',0 , start,stop); CSX = AddDump(CSX,'Ht_','DumpType',1,'DumpMode',2); CSX = AddBox(CSX,'Ht_',0,start,stop); +%% define voltage calc boxes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %voltage calc CSX = AddProbe(CSX,'ut1',0); start = [ 0 MSL_height length/2 ];stop = [ 0 0 length/2 ]; @@ -77,10 +80,10 @@ CSX = AddProbe(CSX,'it1',1); start = [ -MSL_width MSL_height/2 length/2 ];stop = [ MSL_width MSL_height*1.5 length/2 ]; CSX = AddBox(CSX,'it1', 0 ,start,stop); -%Write openEMS compatoble xml-file +%% Write openEMS compatoble xml-file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); -%cd to working dir and run openEMS +%% cd to working dir and run openEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% savePath = pwd(); cd(Sim_Path); %cd to working dir command = [openEMS_Path 'openEMS.sh ' Sim_CSX ' ' openEMS_opts]; diff --git a/matlab/examples/PlaneWave.m b/matlab/examples/PlaneWave.m index fdde4be..7939837 100644 --- a/matlab/examples/PlaneWave.m +++ b/matlab/examples/PlaneWave.m @@ -2,6 +2,7 @@ close all; clear all; clc +%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% abs_length = 250; length = 4000; width = 1000; @@ -11,24 +12,25 @@ mesh_res = 25; EPS0 = 8.85418781762e-12; MUE0 = 1.256637062e-6; +%% define file pathes and openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% openEMS_Path = [pwd() '/../../'] openEMS_opts = ''; % openEMS_opts = [openEMS_opts ' --disable-dumps']; % openEMS_opts = [openEMS_opts ' --debug-material']; -openEMS_opts = [openEMS_opts ' --engine=multithreaded']; +% openEMS_opts = [openEMS_opts ' --engine=multithreaded']; Sim_Path = 'tmp'; Sim_CSX = 'plane_wave.xml'; mkdir(Sim_Path); -%setup FDTD parameter -FDTD = InitFDTD(5e5,1e-6); +%% setup FDTD parameter & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%% +FDTD = InitFDTD(5e5,1e-6,'OverSampling',10); FDTD = SetGaussExcite(FDTD,0.5e9,0.5e9); BC = [1 1 0 0 0 0]; FDTD = SetBoundaryCond(FDTD,BC); -%setup CSXCAD geometry +%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = InitCSX(); mesh.x = -width/2 : mesh_res : width/2; mesh.y = -height/2 : mesh_res : height/2; @@ -36,7 +38,7 @@ mesh.z = 0 : mesh_res : length; CSX = DefineRectGrid(CSX, 1e-3,mesh); -%%%fake pml +%% fake pml %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% finalKappa = 0.3/abs_length^4; finalSigma = finalKappa*MUE0/EPS0; CSX = AddMaterial(CSX,'pml'); @@ -48,24 +50,25 @@ start=[-width/2 -height/2 length-abs_length]; stop=[width/2 height/2 length]; CSX = AddBox(CSX,'pml',0 ,start,stop); +%% apply the excitation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% start=[-width/2 -height/2 0]; stop=[width/2 height/2 0]; CSX = AddExcitation(CSX,'excite',0,[0 1 0]); CSX = AddBox(CSX,'excite',0 ,start,stop); -%dump -CSX = AddDump(CSX,'Et','FileType',1); -start = [mesh.x(1) , 0 , mesh.z(1)]; -stop = [mesh.x(end) , 0 , mesh.z(end)]; +%% define dump boxes... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +CSX = AddDump(CSX,'Et','FileType',1,'SubSampling','4,4,1'); +start = [mesh.x(1) , mesh.y(1) , mesh.z(1)]; +stop = [mesh.x(end) , mesh.y(end) , mesh.z(end)]; CSX = AddBox(CSX,'Et',0 , start,stop); -CSX = AddDump(CSX,'Ht','DumpType',1,'FileType',1); +CSX = AddDump(CSX,'Ht','DumpType',1,'FileType',1,'SubSampling','4,4,1'); CSX = AddBox(CSX,'Ht',0,start,stop); -%Write openEMS compatoble xml-file +%% Write openEMS compatoble xml-file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); -%cd to working dir and run openEMS +%% cd to working dir and run openEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% savePath = pwd(); cd(Sim_Path); %cd to working dir command = [openEMS_Path 'openEMS.sh ' Sim_CSX ' ' openEMS_opts]; @@ -73,11 +76,11 @@ disp(command); system(command) cd(savePath); -% plotting -PlotArgs.plane='zx'; +%% do the plots %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +PlotArgs.slice = {mesh.x(round(end/2)) mesh.y(round(end/2)) mesh.z(round(end/2))}; PlotArgs.pauseTime=0.01; PlotArgs.component=2; -PlotArgs.zlim='auto'; +PlotArgs.Limit = 'auto'; PlotHDF5FieldData('tmp/Et.h5',PlotArgs) diff --git a/matlab/examples/Rect_Waveguide.m b/matlab/examples/Rect_Waveguide.m index cecce92..e21648a 100644 --- a/matlab/examples/Rect_Waveguide.m +++ b/matlab/examples/Rect_Waveguide.m @@ -2,6 +2,7 @@ close all; clear all; clc +%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% abs_length = 250; length = 4000; unit = 1e-3; @@ -29,6 +30,7 @@ beta = sqrt(k^2 - kc^2); func_Ex = [num2str(n/b/unit) '*cos(' num2str(m*pi/a) '*x)*sin(' num2str(n*pi/b) '*y)']; func_Ey = [num2str(m/a/unit) '*sin(' num2str(m*pi/a) '*x)*cos(' num2str(n*pi/b) '*y)']; +%% define file pathes and openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% openEMS_Path = [pwd() '/../../'] openEMS_opts = ''; % openEMS_opts = [openEMS_opts ' --disable-dumps']; @@ -40,21 +42,20 @@ Sim_CSX = 'rect_wg.xml'; mkdir(Sim_Path); -%setup FDTD parameter +%% setup FDTD parameter & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%% FDTD = InitFDTD(500,1e-6,'OverSampling',6); FDTD = SetSinusExcite(FDTD,f0); BC = [0 0 0 0 0 0]; FDTD = SetBoundaryCond(FDTD,BC); -%setup CSXCAD geometry +%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = InitCSX(); mesh.x = 0 : mesh_res(1) : width; mesh.y = 0 : mesh_res(2) : height; mesh.z = -length: mesh_res(3) : length; CSX = DefineRectGrid(CSX, unit,mesh); - -%%%fake pml +%% fake pml %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% finalKappa = 0.3/abs_length^4; finalSigma = finalKappa*MUE0/EPS0; CSX = AddMaterial(CSX,'pml'); @@ -69,6 +70,7 @@ start=[0 0 -length+abs_length]; stop=[width height -length]; CSX = AddBox(CSX,'pml',0 ,start,stop); +%% apply the excitation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% start=[0 0 0]; stop=[width height 0]; CSX = AddExcitation(CSX,'excite',0,[1 1 0]); @@ -78,7 +80,7 @@ weight{3} = 0; CSX = SetExcitationWeight(CSX,'excite',weight); CSX = AddBox(CSX,'excite',0 ,start,stop); -%dump +%% define dump boxes... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddDump(CSX,'Et','FileType',1); start = [mesh.x(1) , height/2 , mesh.z(1)]; stop = [mesh.x(end) , height/2 , mesh.z(end)]; @@ -87,10 +89,10 @@ CSX = AddBox(CSX,'Et',0 , start,stop); CSX = AddDump(CSX,'Ht','DumpType',1,'FileType',1); CSX = AddBox(CSX,'Ht',0,start,stop); -%Write openEMS compatoble xml-file +%% Write openEMS compatoble xml-file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); -%cd to working dir and run openEMS +%% cd to working dir and run openEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% savePath = pwd(); cd(Sim_Path); %cd to working dir command = [openEMS_Path 'openEMS.sh ' Sim_CSX ' ' openEMS_opts]; @@ -98,11 +100,11 @@ disp(command); system(command) cd(savePath); -% plotting -PlotArgs.plane='zx'; -PlotArgs.pauseTime=0.1; +%% do the plots %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +PlotArgs.slice = {mesh.x(round(end/2)) mesh.y(round(end/2)) mesh.z(round(end/2))}; +PlotArgs.pauseTime=0.01; PlotArgs.component=2; -PlotArgs.zlim='auto'; +PlotArgs.Limit = 'auto'; PlotHDF5FieldData('tmp/Et.h5',PlotArgs)