|
EIDORS: Electrical Impedance Tomography and Diffuse Optical Tomography Reconstruction Software |
|
EIDORS
(mirror) Main Documentation Examples Tutorials − Image Reconst − Data Structures − Application Examples − FEM Modelling Download Contrib Data GREIT Browse SVN News FAQ Developer
|
Build Single Plane Models with NetgenCheck Netgen is installed.If necessary, get netgen from: netgen. Setup parameters and call netgen
% Build model
% $Id: build_single_plane01.m 1535 2008-07-26 15:36:27Z aadler $
% Choose Parameters
electrodes_per_plane= 16;
number_of_planes= 1;
refine_electrodes= 10;
tank_radius= 15;
tank_height= 10;
electrode_width = 0.5;
electrode_height= 0.5;
rect_or_circ_electrode= 'C';
fname ='tank_mdl';
first_plane_starts= tank_height/(number_of_planes+1);
height_between_centres = first_plane_starts;
[fmdl,centres] = create_tank_mesh_ng( ...
tank_radius, tank_height, ...
rect_or_circ_electrode, ...
log2(electrodes_per_plane), ...
number_of_planes, ...
first_plane_starts, ...
height_between_centres, ...
electrode_width, electrode_height, ...
fname, refine_electrodes );
% The msz file was created here can be reused later
msz_file= [fname, '.msz'];
stim_pat= mk_stim_patterns(electrodes_per_plane, number_of_planes, ...
'{ad}','{ad}',{'meas_current'});
% control mesh refinement: options are '-veryfine'; '-fine'; '';
for finemodels= 0:2
if finemodels==0; finelevel= '';
elseif finemodels==1; finelevel= '-fine';
elseif finemodels==2; finelevel= '-veryfine';
end
if ~isempty(finelevel);
call_netgen([fname,'.geo'],[fname,'.vol'],msz_file, finelevel);
end
[fmdl,mat_idxs]= ng_mk_fwd_model( [fname,'.vol'], centres, [], stim_pat);
if finemodels==0; ng_mdl_16x1_coarse= fmdl;
elseif finemodels==1; ng_mdl_16x1_fine = fmdl;
elseif finemodels==2; ng_mdl_16x1_vfine = fmdl;
end
subplot(311);
show_fem( fmdl); view(0,14);
subplot(312);
show_fem( fmdl); view(0,0);
crop_model(gca, inline('y>0','x','y','z'))
subplot(313);
show_fem( fmdl); view(0,0);
crop_model(gca, inline('y>-10','x','y','z'))
set(gca,'Xlim',[-2,2],'Zlim',[-1,1]+first_plane_starts);
print('-r100','-dpng', ...
sprintf('build_single_plane01%c.png',96+finemodels));
end
save ng_mdl_16x1_coarse.mat ng_mdl_16x1_coarse
save ng_mdl_16x1_fine.mat ng_mdl_16x1_fine
save ng_mdl_16x1_vfine.mat ng_mdl_16x1_vfine
The calculated models are saved
here [data_conbrib 16x1 models]
Figure: Tank model generated by netgen of a single plane with different levels of refinement flag to netgen. Left: refinement = '-coarse' (default) Middle: refinement = '-fine' Right: refinement = '-veryfine' Verify that models are correct.To test these models, we calculate the electrode surface area to see if it is the same for all electrodes and for all models
% Test area of electrodes
% $Id: build_single_plane02.m 1535 2008-07-26 15:36:27Z aadler $
% verify np_fwd_parameters identifies
for i= 1:electrodes_per_plane*number_of_planes
fprintf('\nelec#%02d (area,nodes):',i);
for fmdl= { ng_mdl_16x1_coarse, ng_mdl_16x1_fine, ng_mdl_16x1_vfine }
pp= np_fwd_parameters( fmdl{1} );
ee= reshape( pp.elec(i,:), 3, []);
ee(:, all(ee==0,1)) = [];
% Xs = reshape(pp.vtx(ee,1),3,[]);
% Ys = reshape(pp.vtx(ee,2),3,[]);
% Zs = reshape(pp.vtx(ee,3),3,[]);
% h=patch(Xs,Ys,Zs, 'b');
% set(h, 'FaceLighting','none', 'CDataMapping', 'direct' );
elec_area= 0; elec_nodes= size(ee,2);
for j= 1:elec_nodes
elec_area = elec_area + triarea3d( pp.vtx( ee(:,j),:) );
end
fprintf('[ %6.5f (%3d) ]',elec_area, elec_nodes);
end
end
Results are:
elec#01 (area,nodes):[ 0.76960 ( 54) ][ 0.77125 ( 59) ][ 0.78014 (155) ] elec#02 (area,nodes):[ 0.76725 ( 45) ][ 0.77126 ( 57) ][ 0.78014 (145) ] elec#03 (area,nodes):[ 0.76959 ( 46) ][ 0.77126 ( 57) ][ 0.78014 (149) ] elec#04 (area,nodes):[ 0.76958 ( 48) ][ 0.77125 ( 55) ][ 0.78014 (129) ] elec#05 (area,nodes):[ 0.76960 ( 46) ][ 0.77126 ( 61) ][ 0.78014 (149) ] elec#06 (area,nodes):[ 0.76958 ( 44) ][ 0.77126 ( 47) ][ 0.78014 (143) ] elec#07 (area,nodes):[ 0.76958 ( 48) ][ 0.77126 ( 65) ][ 0.78014 (157) ] elec#08 (area,nodes):[ 0.76959 ( 50) ][ 0.77125 ( 55) ][ 0.78014 (129) ] elec#09 (area,nodes):[ 0.76960 ( 54) ][ 0.77126 ( 49) ][ 0.78014 (149) ] elec#10 (area,nodes):[ 0.76951 ( 52) ][ 0.77126 ( 63) ][ 0.78014 (163) ] elec#11 (area,nodes):[ 0.76958 ( 58) ][ 0.77126 ( 61) ][ 0.78014 (173) ] elec#12 (area,nodes):[ 0.76945 ( 50) ][ 0.77126 ( 55) ][ 0.78014 (125) ] elec#13 (area,nodes):[ 0.76950 ( 54) ][ 0.77126 ( 53) ][ 0.78014 (149) ] elec#14 (area,nodes):[ 0.76755 ( 45) ][ 0.77126 ( 57) ][ 0.78014 (161) ] elec#15 (area,nodes):[ 0.76754 ( 47) ][ 0.77126 ( 57) ][ 0.78014 (159) ] elec#16 (area,nodes):[ 0.76959 ( 52) ][ 0.77126 ( 49) ][ 0.78014 (155) ] |
Last Modified: $Date: 2008-07-26 11:36:27 -0400 (Sat, 26 Jul 2008) $ by $Author: aadler $