# Mesh resolution (number of voxels per fundamental wavelength)
nPerLam = 5

# Create voxel mesh
dx = lam / nPerLam

# Dimension of computation domain
x_start = roc - 0.02
x_end = roc + 0.02
wx = x_end - x_start
wy = outer_D * 0.3
wz = wy
# embed()

start = time.time()
r, L, M, N = generatedomain(dx, wx, wy, wz)
# Adjust r
r[:, :, :, 0] = r[:, :, :, 0] - r[0, 0, 0, 0] + x_start
end = time.time()
print('Mesh generation time:', end - start)
# embed()
points = r.reshape(L * M * N, 3, order='F')

print('Number of voxels = ', L * M * N)

# Generate incident field
start = time.time()
n_elements = 2**12
x, y, z, p = bowl_transducer_rotate(k1, roc, focus, outer_D / 2, n_elements,
                                    inner_D / 2, points.T, 'x', rot_angle)
end = time.time()
# Dimension of computation domain
# x_start needs to be close to the transducer
# x_end can be just beyond the focus
# the width in the y,z directions should be around the width of outer_D,
# but you can shrink this to speed up computations if required
# x_start = 0.001
x_start = roc - 0.99 * np.sqrt(roc**2 - (outer_D / 2)**2)
x_end = roc + 0.01
wx = x_end - x_start
wy = outer_D * 1
wz = wy

start_to_focus = roc - x_start

start = time.time()
r, L, M, N = generatedomain(dx, wx, wy, wz)
# Adjust r
r[:, :, :, 0] = r[:, :, :, 0] - r[0, 0, 0, 0] + x_start
end = time.time()
print('Mesh generation time:', end - start)
points = r.reshape(L * M * N, 3, order='F')

print('Number of voxels = ', L * M * N)

start = time.time()
n_elements = 2**12
x, y, z, p = bowl_transducer(k1, roc, focus, outer_D / 2, n_elements,
                             inner_D / 2, points.T, 'x')
end = time.time()
print('Incident field evaluation time (s):', end - start)
dist_from_focus = np.sqrt((points[:, 0] - focus[0])**2 + points[:, 1]**2 +
                    linestyle=':')
ax.add_artist(circle)
plt.colorbar()
fig.savefig('results/sphere_focused.pdf')
plt.close()

# Create a bigger grid over which we evaluate the total field
dx = res
wx = max(r[:, 0, 0, 0]) - min(r[:, 0, 0, 0]) + 4 * dx
wy = max(r[0, :, 0, 1]) - min(r[0, :, 0, 1]) + 4 * dx
wz = max(r[0, 0, :, 2]) - min(r[0, 0, :, 2]) + 4 * dx
# embed()

start = time.time()
from vines.geometry.geometry import generatedomain, grid3d
r_b, L_b, M_b, N_b = generatedomain(dx, wx, wy, wz)
# r_b[:, :, :, 0] = r_b[:, :, :, 0] + scat_loc[0]
# Adjust r
# r[:, :, :, 0] = r[:, :, :, 0] - r[0, 0, 0, 0] + x_start
# end = time.time()
# print('Mesh generation time:', end-start)
# embed()

from IPython import embed
embed()

# Find the indices of the voxels within the sphere
r_sq = r_b[:, :, :, 0]**2 + r_b[:, :, :, 1]**2 + r_b[:, :, :, 2]**2
idx_b = (r_sq <= radius**2)

r_b[:, :, :, 0] = r_b[:, :, :, 0] + scat_loc[0]
Beispiel #4
0
# x_start = -0.98 * np.sqrt(focal_length**2 - radius**2) # just to the right of bowl
# x_end = 0.01
# wx = x_end - x_start
# wy = 2 * 0.83 * radius # slightly narrower than bowl
# # wy = 2 * radius # same width as bowl
# wz = wy
x_start = 0.0005
x_end = 0.06

wx = x_end - x_start
wy = 2 * radius 
wz = wy
# embed()
import time
start = time.time()
r, L, M, N = generatedomain(res, wx, wy, wz)
# Adjust r
r[:, :, :, 0]  = r[:, :, :, 0] - r[0, 0, 0, 0] + x_start
end = time.time()
print('Mesh generation time:', end-start)
# embed()
points = r.reshape(L*M*N, 3, order='F')

start = time.time()
p = plane_circular_piston(radius, k1, points.T)
p *= pressure_surface * 2j * k1
P = p.reshape(L, M, N, order='F')
end = time.time()
print('Incident field evaluation time (s):', end-start)