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-----------------------------------