Hello,
I am trying to simulate a spherical cap shaped piezoceramic transducer in 2D. I have characterized the physical transducer with a hydrophone, and my 3D simulations yield the expected pressure pattern and gain (ratio of max to source pressure) of 40. However, when I try to collapse the simulation to 2D for kspaceFirstOrder2D, I only get a gain of ~9. Is this behavior expected?
Any input is helpful and appreciated.
Thanks,
Charles
----------------------Begin code snippet---------------------
clear all;
% create the computational grid
Nz = 256*2; % number of grid points in the z (row) direction7
Nx = Nz; % number of grid points in the y (column) direction
dx = 200e-6; % grid point spacing in the x direction [m]
dz = dx; % grid point spacing in the y direction [m]
medium.sound_speed = ones([Nx Nz])*1480; % m/s sound speed in water
medium.density = ones([Nx Nz])*1e03; % kg/m^3 density of water
kgrid = makeGrid(Nx, dx, Nz, dz);
[kgrid.t_array, dt] = makeTime(kgrid, medium.sound_speed);
Nt = length(kgrid.t_array);
%%
% first define transduce geometry and place elemental sources in the kgrid
transducer_radius_m = (64e-03);
transducer_height_m = (63.2 - 51.74)*1e-03;
transducer_radius_pix = round( transducer_radius_m / dz );
transducer_height_pix = round( transducer_height_m / dx );
sphere = rot90(makeArc([Nx Nz], [Nx/2 10], transducer_radius_pix, transducer_radius_pix+1, [Nx/2 Nx/2]),-1);
[sx, sy, sz] = size(sphere);
source.p_mask = zeros(Nx,Nz);
source.p_mask = sphere;
%% source signal
% transducer source parameters
% define a time varying sinusoidal source
source_freq = 1.1e6; % [Hz]
source_mag = 1e6/40; % [Pa]
source.p = source_mag*sin(2*pi*source_freq*kgrid.t_array);
% filter the source to remove any high frequencies not supported by the grid
source.p = filterTimeSeries(kgrid, medium, source.p);
figure;
plot( source_freq*kgrid.t_array, source.p );
xlabel('# cycles (freq * time)');
ylabel('Input pressure [Pa]');
%% setup sensor and run simulation
sensor.mask = ones(Nx,Nz);
sensor.record = {'p_max'};
input_args = {'PlotSim', true, 'DisplayMask', source.p_mask, 'DataCast', 'single', 'PMLInside', false, 'PlotPML', false};
% run the simulation
[sensor_data] = kspaceFirstOrder2D(kgrid, medium, source, sensor, input_args{:} );
pmap = reshape(sensor_data.p_max(:), Nx, Nz);
%% Image pressure map
figure;
imagesc(1e03*dx * (1:Nx), 1e03*dz*(1:Nz), transpose(pmap));
xlabel('x [mm]');
ylabel('z [mm]');
pmap_single = gather(pmap);
colormap(jet)
colorbar;
--------------------------------End Code Snippet-----------------------------------