testsuite updated

pull/1/head
Sebastian Held 2010-12-16 10:33:06 +01:00
parent b324296e23
commit ee23c2f909
7 changed files with 167 additions and 63 deletions

View File

@ -1,4 +1,4 @@
function pass = Coax function pass = Coax( openEMS_options, options )
physical_constants; physical_constants;
@ -6,10 +6,23 @@ physical_constants;
ENABLE_PLOTS = 1; ENABLE_PLOTS = 1;
CLEANUP = 1; % if enabled and result is PASS, remove simulation folder CLEANUP = 1; % if enabled and result is PASS, remove simulation folder
STOP_IF_FAILED = 1; % if enabled and result is FAILED, stop with error 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 % LIMITS
upper_error = 0.036; % max +3.6% upper_error = 0.03; % max +3%
lower_error = 0; % max -0.0% lower_error = 0.01; % max -1%
% structure % structure
abs_length = 250; abs_length = 250;
@ -21,15 +34,15 @@ mesh_res = [5 5 5];
f_start = 0; f_start = 0;
f_stop = 1e9; f_stop = 1e9;
Sim_Path = 'tmp'; Sim_Path = 'tmp_Coax';
Sim_CSX = 'coax.xml'; Sim_CSX = 'coax.xml';
[status,message,messageid]=rmdir(Sim_Path,'s'); [status,message,messageid]=rmdir(Sim_Path,'s');
[status,message,messageid]=mkdir(Sim_Path); [status,message,messageid]=mkdir(Sim_Path);
%setup FDTD parameter %setup FDTD parameter
FDTD = InitFDTD(5e5,1e-6); FDTD = InitFDTD(5000,1e-6);
FDTD = SetGaussExcite(FDTD,(f_stop-f_start)/2,(f_stop-f_start)/2); FDTD = SetGaussExcite(FDTD,0,f_stop);
BC = [1 1 1 1 1 1] * 0; BC = [1 1 1 1 1 1] * 0;
FDTD = SetBoundaryCond(FDTD,BC); FDTD = SetBoundaryCond(FDTD,BC);
@ -41,7 +54,7 @@ mesh.z = 0 : mesh_res(3) : length;
mesh.z = linspace(0,length,numel(mesh.z) + 4-mod(numel(mesh.z),4)); % make it compatible with sse-engine mesh.z = linspace(0,length,numel(mesh.z) + 4-mod(numel(mesh.z),4)); % make it compatible with sse-engine
CSX = DefineRectGrid(CSX, 1e-3,mesh); CSX = DefineRectGrid(CSX, 1e-3,mesh);
%create copper % create a perfect electric conductor
CSX = AddMetal(CSX,'PEC'); CSX = AddMetal(CSX,'PEC');
%%%fake pml %%%fake pml
@ -55,12 +68,14 @@ CSX = SetMaterialWeight(CSX,'pml','Sigma',['pow(abs(z)-' num2str(length-abs_leng
%%% coax %%% coax
start = [0, 0 , 0];stop = [0, 0 , length]; start = [0, 0 , 0];stop = [0, 0 , length];
CSX = AddCylinder(CSX,'PEC',0 ,start,stop,coax_rad_i); % inner conductor 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 CSX = AddCylindricalShell(CSX,'PEC',0 ,start,stop,0.5*(coax_rad_aa+coax_rad_ai),(coax_rad_aa-coax_rad_ai)); % outer conductor
%%% add PML %%% add PML
start(3) = length-abs_length; 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)); CSX = AddCylindricalShell(CSX,'pml',0 ,start,stop,0.5*(coax_rad_i+coax_rad_ai),(coax_rad_ai-coax_rad_i));
%%% add excitation
start(3) = 0; stop(3)=mesh_res(1)/2; start(3) = 0; stop(3)=mesh_res(1)/2;
CSX = AddExcitation(CSX,'excite',0,[1 1 0]); CSX = AddExcitation(CSX,'excite',0,[1 1 0]);
weight{1} = '(x)/(x*x+y*y)'; weight{1} = '(x)/(x*x+y*y)';
@ -85,20 +100,23 @@ CSX = AddBox(CSX,'ut1', 0 ,start,stop);
%current calc %current calc
CSX = AddProbe(CSX,'it1',1); CSX = AddProbe(CSX,'it1',1);
mid = 0.5*(coax_rad_i+coax_rad_ai); % 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 ]; start = [ -mid -mid length/2 ];stop = [ mid mid length/2 ];
CSX = AddBox(CSX,'it1', 0 ,start,stop); CSX = AddBox(CSX,'it1', 0 ,start,stop);
%Write openEMS compatible xml-file %Write openEMS compatible xml-file
WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX);
%cd to working dir and run openEMS % show structure
savePath = pwd(); % CSXGeomPlot( [Sim_Path '/' Sim_CSX] );
cd(Sim_Path); %cd to working dir
invoke_openEMS( Sim_CSX );
UI = ReadUI( {'ut1','it1'} );
cd(savePath);
% 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']} );
% %

View File

@ -1,4 +1,4 @@
function pass = cavity function pass = cavity( openEMS_options, options )
physical_constants; physical_constants;
@ -6,6 +6,19 @@ physical_constants;
ENABLE_PLOTS = 1; ENABLE_PLOTS = 1;
CLEANUP = 1; % if enabled and result is PASS, remove simulation folder CLEANUP = 1; % if enabled and result is PASS, remove simulation folder
STOP_IF_FAILED = 1; % if enabled and result is FAILED, stop with error 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 - inside % LIMITS - inside
lower_rel_limit = 1.3e-3; % -0.13% lower_rel_limit = 1.3e-3; % -0.13%
@ -31,7 +44,7 @@ end
f_start = 1e9; f_start = 1e9;
f_stop = 10e9; f_stop = 10e9;
Sim_Path = 'tmp'; Sim_Path = 'tmp_cavity';
Sim_CSX = 'cavity.xml'; Sim_CSX = 'cavity.xml';
[status,message,messageid]=rmdir(Sim_Path,'s'); [status,message,messageid]=rmdir(Sim_Path,'s');
@ -101,12 +114,12 @@ CSX = AddBox(CSX,'ut1z', 0 ,pos1,pos2);
%Write openEMS compatible xml-file %Write openEMS compatible xml-file
WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX);
%cd to working dir and run openEMS % run openEMS
savePath = pwd(); folder = fileparts( mfilename('fullpath') );
cd(Sim_Path); %cd to working dir Settings.LogFile = [folder '/' Sim_Path '/openEMS.log'];
invoke_openEMS( Sim_CSX ); Settings.Silent = SILENT;
UI = ReadUI( {'ut1x', 'ut1y', 'ut1z'} ); RunOpenEMS( Sim_Path, Sim_CSX, openEMS_options, Settings );
cd(savePath); UI = ReadUI( {[Sim_Path '/ut1x'], [Sim_Path '/ut1y'], [Sim_Path '/ut1z']} );

View File

@ -1,30 +1,40 @@
function pass = cavity function pass = cavity( openEMS_options, options )
%pass = cavity %pass = cavity( openEMS_options, options )
% %
% Checks, if different engines produces identical results % Checks, if different engines produces identical results
CLEANUP = 1; % if enabled and result is PASS, remove simulation folder CLEANUP = 1; % if enabled and result is PASS, remove simulation folder
STOP_IF_FAILED = 1; % if enabled and result is FAILED, stop with error STOP_IF_FAILED = 1; % if enabled and result is FAILED, stop with error
global ENABLE_PLOTS; global ENABLE_PLOTS;
ENABLE_PLOTS = 0; ENABLE_PLOTS = 1;
SILENT = 0; % 0=show openEMS output
engines = {'' '--engine=sse' '--engine=sse-compressed' '--engine=multithreaded'}; 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
% clean openEMS_options
openEMS_options = regexprep( openEMS_options, '--engine=\w+', '' );
engines = {'--engine=basic' '--engine=sse' '--engine=sse-compressed' '--engine=multithreaded'};
% engines = [engines {'--engine=sse-compressed-linear' '--engine=multithreaded-linear'}]; % engines = [engines {'--engine=sse-compressed-linear' '--engine=multithreaded-linear'}];
isOctave = exist('OCTAVE_VERSION','builtin') ~= 0;
if isOctave
old_crr = confirm_recursive_rmdir(0);
end
global Sim_Path Sim_CSX global Sim_Path Sim_CSX
Sim_Path = 'tmp'; Sim_Path = 'tmp_cavity';
Sim_CSX = 'cavity.xml'; Sim_CSX = 'cavity.xml';
for n=1:numel(engines) for n=1:numel(engines)
result{n} = sim( engines{n} ); result{n} = sim( [engines{n} ' ' openEMS_options], SILENT );
end end
pass = compare( result ); pass = compare( result, SILENT );
if pass if pass
disp( 'enginetests/cavity.m (engine comparison): pass' ); disp( 'enginetests/cavity.m (engine comparison): pass' );
@ -39,13 +49,10 @@ if ~pass && STOP_IF_FAILED
error 'test failed' error 'test failed'
end end
if isOctave
confirm_recursive_rmdir(old_crr);
end
return return
function result = sim( openEMS_options ) function result = sim( openEMS_options, SILENT )
global Sim_Path Sim_CSX global Sim_Path Sim_CSX
physical_constants; physical_constants;
@ -118,7 +125,10 @@ CSX = AddBox( CSX, 'Ht', 0, pos1, pos2 );
WriteOpenEMS( [Sim_Path '/' Sim_CSX], FDTD, CSX ); WriteOpenEMS( [Sim_Path '/' Sim_CSX], FDTD, CSX );
% cd to working dir and run openEMS % cd to working dir and run openEMS
RunOpenEMS( Sim_Path, Sim_CSX, openEMS_options ); folder = fileparts( mfilename('fullpath') );
Settings.LogFile = [folder '/' Sim_Path '/openEMS.log'];
Settings.Silent = SILENT;
RunOpenEMS( Sim_Path, Sim_CSX, openEMS_options, Settings );
% collect result % collect result
E.mesh = ReadHDF5Mesh( [Sim_Path '/Et.h5'] ); E.mesh = ReadHDF5Mesh( [Sim_Path '/Et.h5'] );
@ -131,7 +141,7 @@ result.probes = ReadUI( {'E_probe','H_probe'}, Sim_Path );
function pass = compare( results ) function pass = compare( results, SILENT )
pass = 0; pass = 0;
% n=1: reference simulation % n=1: reference simulation
for n=2:numel(results) for n=2:numel(results)
@ -151,7 +161,9 @@ for n=2:numel(results)
end end
end end
end end
disp( ['simulation ' num2str(n) ' is identical to simulation 1'] ); if ~SILENT
disp( ['simulation ' num2str(n) ' is identical to simulation 1'] );
end
end end
global ENABLE_PLOTS; global ENABLE_PLOTS;

View File

@ -1,4 +1,4 @@
function pass = fieldprobes function pass = fieldprobes( openEMS_options, options )
% %
% infinitesimal dipole in free-space % infinitesimal dipole in free-space
% %
@ -10,10 +10,24 @@ pass = 1;
physical_constants; physical_constants;
ENABLE_PLOTS = 0; ENABLE_PLOTS = 1;
CLEANUP = 1; % if enabled and result is PASS, remove simulation folder CLEANUP = 1; % if enabled and result is PASS, remove simulation folder
STOP_IF_FAILED = 1; % if enabled and result is FAILED, stop with error STOP_IF_FAILED = 1; % if enabled and result is FAILED, stop with error
VERBOSE = 0; VERBOSE = 1;
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;
VERBOSE = 0;
end
% LIMITS % LIMITS
limit_max_time_diff = 1e-15; limit_max_time_diff = 1e-15;
@ -25,7 +39,7 @@ limit_min_h_amp = 1e-7;
% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
drawingunit = 1e-6; % specify everything in um drawingunit = 1e-6; % specify everything in um
Sim_Path = 'tmp'; Sim_Path = 'tmp_fieldprobes';
Sim_CSX = 'tmp.xml'; Sim_CSX = 'tmp.xml';
f_max = 1e9; f_max = 1e9;
@ -101,21 +115,11 @@ FDTD = SetBoundaryCond( FDTD, BC );
[~,~,~] = mkdir(Sim_Path); [~,~,~] = mkdir(Sim_Path);
WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX);
% define openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % run openEMS
openEMS_opts = ''; folder = fileparts( mfilename('fullpath') );
% openEMS_opts = [openEMS_opts ' --disable-dumps']; Settings.LogFile = [folder '/' Sim_Path '/openEMS.log'];
% openEMS_opts = [openEMS_opts ' --debug-material']; Settings.Silent = SILENT;
% openEMS_opts = [openEMS_opts ' --debug-operator']; RunOpenEMS( Sim_Path, Sim_CSX, openEMS_options, Settings );
% openEMS_opts = [openEMS_opts ' --debug-PEC'];
% openEMS_opts = [openEMS_opts ' --debug-boxes'];
openEMS_opts = [openEMS_opts ' --showProbeDiscretization'];
openEMS_opts = [openEMS_opts ' --engine=fastest'];
settings = [];
if ~VERBOSE, settings.Silent = 1; end
RunOpenEMS( Sim_Path, Sim_CSX, openEMS_opts, settings );
%% POSTPROCESS %% POSTPROCESS

55
TESTSUITE/run_testsuite.m Normal file
View File

@ -0,0 +1,55 @@
%
% run the testsuite
%
clc
clear
close all
drawnow
Octave = exist('OCTAVE_VERSION','var') ~= 0;
if Octave
confirm_recursive_rmdir(0);
end
folder = fileparts( mfilename( 'fullpath' ) );
cd( folder );
addpath( [folder filesep 'helperscripts'] );
% openEMS options
options = {'--engine=multithreaded', '--engine=sse-compressed', '--engine=sse', '--engine=basic'};
for o=1:numel(options)
disp( [datestr(now) ' *** TESTSUITE started (options: ' options{o} ')'] );
% now list the tests
folders = dir();
for f=1:numel(folders)
if folders(f).isdir
if strcmp(folders(f).name,'.') || strcmp(folders(f).name,'..')
continue
end
if strcmp(folders(f).name,'helperscripts')
continue
end
oldpwd = pwd;
cd( folders(f).name );
scripts = dir('*.m');
for s=1:numel(scripts)
if ~scripts(s).isdir
% execute function
disp( [datestr(now) ' executing: ' folders(f).name '/' scripts(s).name] );
[~,fname] = fileparts( scripts(s).name );
pass = feval( fname, options{o}, 'run_testsuite' );
end
end
cd(oldpwd);
end
end
end
disp( '***' );
disp( ['*** ' datestr(now) ' ALL TESTS DONE'] );
disp( '***' );

View File

@ -47,7 +47,7 @@ for n=1:numel(filenames)
UI.TD{n}.additional = tmp(:,3:end)'; UI.TD{n}.additional = tmp(:,3:end)';
end end
if (nargin<3) if (nargin<3) || isempty(freq)
[UI.FD{n}.f,UI.FD{n}.val] = FFT_time2freq( t,val ); [UI.FD{n}.f,UI.FD{n}.val] = FFT_time2freq( t,val );
else else
UI.FD{n}.f = freq; UI.FD{n}.f = freq;

View File

@ -49,5 +49,7 @@ else
command = [command ' > ' logfile ' 2>&1']; command = [command ' > ' logfile ' 2>&1'];
end end
disp( ['invoking openEMS simulator: ' command] ); if ~silent
disp( ['invoking openEMS simulator: ' command] );
end
system(command); system(command);