summaryrefslogtreecommitdiff
path: root/openEMS/TESTSUITE/combinedtests/Coax.m
diff options
context:
space:
mode:
Diffstat (limited to 'openEMS/TESTSUITE/combinedtests/Coax.m')
-rw-r--r--openEMS/TESTSUITE/combinedtests/Coax.m158
1 files changed, 158 insertions, 0 deletions
diff --git a/openEMS/TESTSUITE/combinedtests/Coax.m b/openEMS/TESTSUITE/combinedtests/Coax.m
new file mode 100644
index 0000000..18ed5ab
--- /dev/null
+++ b/openEMS/TESTSUITE/combinedtests/Coax.m
@@ -0,0 +1,158 @@
+function pass = Coax( openEMS_options, options )
+
+physical_constants;
+
+
+ENABLE_PLOTS = 1;
+CLEANUP = 1; % if enabled and result is PASS, remove simulation folder
+STOP_IF_FAILED = 1; % if enabled and result is FAILED, stop with error
+SILENT = 0; % 0=show openEMS output
+
+if nargin < 1
+ openEMS_options = '';
+end
+if nargin < 2
+ options = '';
+end
+if any(strcmp( options, 'run_testsuite' ))
+ ENABLE_PLOTS = 0;
+ STOP_IF_FAILED = 0;
+ SILENT = 1;
+end
+
+% LIMITS
+upper_error = 0.03; % max +3%
+lower_error = 0.01; % max -1%
+
+% structure
+length = 1000;
+coax_rad_i = 100;
+coax_rad_ai = 230;
+coax_rad_aa = 240;
+mesh_res = [5 5 5];
+f_start = 0;
+f_stop = 1e9;
+
+Sim_Path = 'tmp_Coax';
+Sim_CSX = 'coax.xml';
+
+[status,message,messageid]=rmdir(Sim_Path,'s');
+[status,message,messageid]=mkdir(Sim_Path);
+
+%setup FDTD parameter
+FDTD = InitFDTD(5000,1e-6);
+FDTD = SetGaussExcite(FDTD,0,f_stop);
+FDTD = SetBoundaryCond(FDTD,{'PEC','PEC','PEC','PEC','PEC','PML_8'});
+
+%setup CSXCAD geometry
+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;
+mesh.z = linspace(0,length,numel(mesh.z));
+CSX = DefineRectGrid(CSX, 1e-3,mesh);
+
+% create a perfect electric conductor
+CSX = AddMetal(CSX,'PEC');
+
+%%% coax
+start = [0, 0 , 0];stop = [0, 0 , length];
+CSX = AddCylinder(CSX,'PEC',1 ,start,stop,coax_rad_i); % inner conductor
+CSX = AddCylindricalShell(CSX,'PEC',0 ,start,stop,0.5*(coax_rad_aa+coax_rad_ai),(coax_rad_aa-coax_rad_ai)); % outer conductor
+
+%%% add 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)';
+weight{2} = 'y/pow(rho,2)';
+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
+% CSX = AddDump(CSX,'Et_',0,2);
+% start = [mesh.x(1) , 0 , mesh.z(1)];
+% stop = [mesh.x(end) , 0 , mesh.z(end)];
+% CSX = AddBox(CSX,'Et_',0 , start,stop);
+%
+% CSX = AddDump(CSX,'Ht_',1,2);
+% CSX = AddBox(CSX,'Ht_',0,start,stop);
+
+%voltage calc
+CSX = AddProbe(CSX,'ut1',0);
+start = [ coax_rad_i 0 length/2 ];stop = [ coax_rad_ai 0 length/2 ];
+CSX = AddBox(CSX,'ut1', 0 ,start,stop);
+
+%current calc
+CSX = AddProbe(CSX,'it1',1);
+% mid = 0.5*(coax_rad_i+coax_rad_ai);
+mid = coax_rad_i+3*mesh_res(1);
+start = [ -mid -mid length/2 ];stop = [ mid mid length/2 ];
+CSX = AddBox(CSX,'it1', 0 ,start,stop);
+
+%Write openEMS compatible xml-file
+WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX);
+
+% show structure
+% CSXGeomPlot( [Sim_Path '/' Sim_CSX] );
+
+% run openEMS
+folder = fileparts( mfilename('fullpath') );
+Settings.LogFile = [folder '/' Sim_Path '/openEMS.log'];
+Settings.Silent = SILENT;
+RunOpenEMS( Sim_Path, Sim_CSX, openEMS_options, Settings );
+UI = ReadUI( {[Sim_Path '/ut1'], [Sim_Path '/it1']} );
+
+
+%
+% analysis
+%
+
+f = UI.FD{2}.f;
+u = UI.FD{1}.val;
+i = UI.FD{2}.val;
+
+f_idx_start = interp1( f, 1:numel(f), f_start, 'nearest' );
+f_idx_stop = interp1( f, 1:numel(f), f_stop, 'nearest' );
+f = f(f_idx_start:f_idx_stop);
+u = u(f_idx_start:f_idx_stop);
+i = i(f_idx_start:f_idx_stop);
+
+Z = abs(u./i);
+
+% analytic formular for characteristic impedance
+Z0 = sqrt(MUE0/EPS0) * log(coax_rad_ai/coax_rad_i) / (2*pi);
+upper_limit = Z0 * (1+upper_error);
+lower_limit = Z0 * (1-lower_error);
+
+if ENABLE_PLOTS
+ upper = upper_limit * ones(1,size(Z,2));
+ lower = lower_limit * ones(1,size(Z,2));
+ Z0_plot = Z0 * ones(1,size(Z,2));
+ figure
+ plot(f/1e9,[Z;upper;lower])
+ hold on
+ plot(f/1e9,Z0_plot,'m-.','LineWidth',2)
+ hold off
+ xlabel('Frequency (GHz)')
+ ylabel('Impedance (Ohm)')
+ legend( {'sim', 'upper limit', 'lower limit', 'theoretical'} );
+end
+
+pass = check_limits( Z, upper_limit, lower_limit );
+if pass
+ disp( 'combinedtests/Coax.m (characteristic impedance): pass' );
+else
+ disp( 'combinedtests/Coax.m (characteristic impedance): * FAILED *' );
+end
+
+
+
+
+if pass && CLEANUP
+ rmdir( Sim_Path, 's' );
+end
+if ~pass && STOP_IF_FAILED
+ error 'test failed';
+end
+