Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] Mismatch Between p_max_all Size and Expected Grid Dimensions #516

Open
mikaelhaji opened this issue Nov 22, 2024 · 2 comments
Open
Assignees
Labels
bug Something isn't working

Comments

@mikaelhaji
Copy link

Describe the bug
The p_max_all array produced during a k-Wave Python simulation cannot be reshaped into the expected grid dimensions (Nx, Ny, Nz). Specifically, the size of p_max_all significantly exceeds the expected total number of grid points, suggesting that it includes additional data beyond the computational grid.

To Reproduce
Steps to reproduce the behavior:

Use the following minimal example code:

import numpy as np
from kwave.kgrid import kWaveGrid
from kwave.kmedium import kWaveMedium
from kwave.ksensor import kSensor
from kwave.ksource import kSource
from kwave.kspaceFirstOrder3D import kspaceFirstOrder3D
from kwave.options.simulation_options import SimulationOptions
from kwave.options.simulation_execution_options import SimulationExecutionOptions
from copy import deepcopy

# Define grid size
Nx, Ny, Nz = 20, 20, 20  # Small grid for testing

# Set grid spacing
dx, dy, dz = 1e-3, 1e-3, 1e-3  # Grid spacing in meters

# Create k-Wave grid
kgrid = kWaveGrid([Nx, Ny, Nz], [dx, dy, dz])

# Set up time stepping
source_f0 = 500e3  # Source frequency in Hz
ppw = 6  # Points per wavelength
cfl = 0.1  # CFL number
ppp = round(ppw / cfl)  # Points per period
dt = 1 / (ppp * source_f0)  # Time step in seconds
t_end = 10e-6  # Total simulation time in seconds
Nt = int(np.ceil(t_end / dt)) + 1  # Number of time steps
kgrid.setTime(Nt, dt)

# Set up medium properties
medium_sound_speed = 1500  # Sound speed in m/s
medium_density = 1000  # Density in kg/m^3
medium = kWaveMedium(sound_speed=medium_sound_speed, density=medium_density)

# Set up source
source = kSource()
source.p_mask = np.zeros((Nx, Ny, Nz))
source.p_mask[Nx // 2, Ny // 2, Nz // 2] = 1
source_signal = np.sin(2 * np.pi * source_f0 * kgrid.t_array)
source.p = source_signal

# Set up sensor
sensor = kSensor()
sensor.mask = np.ones((Nx, Ny, Nz))  # Full grid sensor mask
sensor.record = ['p_max_all']

# Simulation options
simulation_options = SimulationOptions(
    pml_auto=True,
    data_recast=True,
    save_to_disk=True,  # Required for CPU simulation
    save_to_disk_exit=False,
    pml_inside=False,
    data_cast='single'
)

execution_options = SimulationExecutionOptions(
    is_gpu_simulation=False,
    delete_data=False,
    verbose_level=1
)

# Run the simulation
try:
    sensor_data = kspaceFirstOrder3D(
        medium=deepcopy(medium),
        kgrid=deepcopy(kgrid),
        source=deepcopy(source),
        sensor=deepcopy(sensor),
        simulation_options=simulation_options,
        execution_options=execution_options
    )
except Exception as e:
    print(f"Simulation failed with error: {e}")

# Check and reshape p_max_all
if 'p_max_all' in sensor_data:
    p_max_all = sensor_data['p_max_all']  # Should be of shape (total_grid_points,)
    print(f"p_max_all size: {p_max_all.size}")
    print(f"Expected grid size: {Nx * Ny * Nz}")
    
    # Attempt to reshape p_max_all
    try:
        p_max_all = p_max_all.reshape((Nx, Ny, Nz), order='F')
    except ValueError as ve:
        print(f"Error reshaping p_max_all: {ve}")
else:
    print("p_max_all not found in sensor_data")

Expected behavior

To my understanding from the equivalent MATLAB version, the p_max_all array should have a size that matches the total grid points (Nx * Ny * Nz) and be reshaped without errors.

Instead,

  • The p_max_all array size (262144) significantly exceeds the expected grid size (8000).
  • Attempting to reshape p_max_all results in the following error:

ValueError: cannot reshape array of size 262144 into shape (20,20,20)

Screenshots
Sim output:

p_max_all size: 262144
Expected grid size: 8000
Error reshaping p_max_all: cannot reshape array of size 262144 into shape (20,20,20)

Desktop (please complete the following information):

  • OS: Windows 11
  • K-Wave Version: 0.3.7
@mikaelhaji mikaelhaji added the bug Something isn't working label Nov 22, 2024
@waltsims
Copy link
Owner

Hey @mikaelhaji thanks for reporting this. Since you have PML auto the size of the output is the next power of 2 i.e. (64 x 64 x 64). We will work to automatically remove the PML in a future release as we discussed on Tuesday. For now you should be able to reshape the output yourself manually. Hope this helps.

@mikaelhaji
Copy link
Author

Makes sense! Appreciate the prompt reply 🫡🫡

@waltsims waltsims reopened this Nov 25, 2024
@waltsims waltsims self-assigned this Dec 24, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants