fullwave25 1.0.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of fullwave25 might be problematic. Click here for more details.
- fullwave25-1.0.7/.gitignore +13 -0
- fullwave25-1.0.7/.pre-commit-config.yaml +20 -0
- fullwave25-1.0.7/.python-version +1 -0
- fullwave25-1.0.7/CITATION.cff +15 -0
- fullwave25-1.0.7/CONTRIBUTING.md +24 -0
- fullwave25-1.0.7/Makefile +20 -0
- fullwave25-1.0.7/PKG-INFO +292 -0
- fullwave25-1.0.7/README.md +270 -0
- fullwave25-1.0.7/fullwave/__init__.py +28 -0
- fullwave25-1.0.7/fullwave/constants/__init__.py +5 -0
- fullwave25-1.0.7/fullwave/constants/material_properties.py +112 -0
- fullwave25-1.0.7/fullwave/grid.py +222 -0
- fullwave25-1.0.7/fullwave/medium.py +1042 -0
- fullwave25-1.0.7/fullwave/medium_builder/__init__.py +12 -0
- fullwave25-1.0.7/fullwave/medium_builder/domain.py +151 -0
- fullwave25-1.0.7/fullwave/medium_builder/medium_builder.py +198 -0
- fullwave25-1.0.7/fullwave/medium_builder/presets/__init__.py +8 -0
- fullwave25-1.0.7/fullwave/medium_builder/presets/data/.keep +0 -0
- fullwave25-1.0.7/fullwave/medium_builder/presets/data/abdominal_wall/i2365f_etfw1.mat +0 -0
- fullwave25-1.0.7/fullwave/medium_builder/presets/domain_abdominal_wall.py +293 -0
- fullwave25-1.0.7/fullwave/medium_builder/presets/domain_background.py +140 -0
- fullwave25-1.0.7/fullwave/medium_builder/presets/domain_scatterer.py +179 -0
- fullwave25-1.0.7/fullwave/medium_builder/presets/domain_simple.py +92 -0
- fullwave25-1.0.7/fullwave/medium_builder/presets/domain_water_gel.py +1 -0
- fullwave25-1.0.7/fullwave/sensor.py +161 -0
- fullwave25-1.0.7/fullwave/solver/__init__.py +1 -0
- fullwave25-1.0.7/fullwave/solver/bins/database/relaxation_params_database_num_relax=2_20251027_1437.mat +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_100_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_101_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_120_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_61_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_61_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_61_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_61_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_70_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_70_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_70_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_70_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_75_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_75_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_75_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_75_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_80_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_80_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_80_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_80_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_86_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_86_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_86_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_86_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_89_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_89_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_89_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_89_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_90_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_90_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_90_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_90_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_100_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_101_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_120_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_61_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_61_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_61_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_61_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_70_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_70_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_70_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_70_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_75_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_75_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_75_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_75_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_80_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_80_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_80_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_80_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_86_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_86_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_86_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_86_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_89_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_89_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_89_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_89_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_90_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_90_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_90_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_90_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_100_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_101_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_120_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_61_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_61_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_61_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_61_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_70_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_70_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_70_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_70_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_75_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_75_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_75_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_75_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_80_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_80_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_80_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_80_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_86_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_86_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_86_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_86_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_89_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_89_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_89_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_89_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_90_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_90_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_90_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_90_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_100_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_101_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_120_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_61_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_61_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_61_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_61_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_70_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_70_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_70_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_70_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_75_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_75_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_75_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_75_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_80_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_80_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_80_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_80_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_86_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_86_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_86_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_86_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_89_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_89_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_89_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_89_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_90_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_90_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_90_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_90_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_100_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_101_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_120_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_61_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_61_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_61_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_61_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_70_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_70_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_70_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_70_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_75_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_75_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_75_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_75_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_80_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_80_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_80_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_80_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_86_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_86_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_86_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_86_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_89_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_89_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_89_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_89_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_90_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_90_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_90_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_90_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_100_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_101_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_120_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_61_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_61_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_61_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_61_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_70_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_70_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_70_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_70_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_75_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_75_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_75_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_75_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_80_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_80_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_80_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_80_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_86_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_86_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_86_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_86_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_89_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_89_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_89_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_89_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_90_cuda118 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_90_cuda124 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_90_cuda126 +0 -0
- fullwave25-1.0.7/fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_90_cuda129 +0 -0
- fullwave25-1.0.7/fullwave/solver/cuda_utils.py +392 -0
- fullwave25-1.0.7/fullwave/solver/input_file_writer.py +853 -0
- fullwave25-1.0.7/fullwave/solver/launcher.py +134 -0
- fullwave25-1.0.7/fullwave/solver/pml_builder.py +1923 -0
- fullwave25-1.0.7/fullwave/solver/solver.py +750 -0
- fullwave25-1.0.7/fullwave/solver/utils.py +83 -0
- fullwave25-1.0.7/fullwave/source.py +173 -0
- fullwave25-1.0.7/fullwave/transducer.py +1003 -0
- fullwave25-1.0.7/fullwave/utils/__init__.py +12 -0
- fullwave25-1.0.7/fullwave/utils/check_functions.py +48 -0
- fullwave25-1.0.7/fullwave/utils/coordinates.py +155 -0
- fullwave25-1.0.7/fullwave/utils/memory_tempfile.py +439 -0
- fullwave25-1.0.7/fullwave/utils/numerical.py +111 -0
- fullwave25-1.0.7/fullwave/utils/plot_utils.py +1122 -0
- fullwave25-1.0.7/fullwave/utils/pulse.py +72 -0
- fullwave25-1.0.7/fullwave/utils/relaxation_parameters.py +212 -0
- fullwave25-1.0.7/fullwave/utils/signal_process.py +197 -0
- fullwave25-1.0.7/pyproject.toml +35 -0
- fullwave25-1.0.7/ruff.toml +114 -0
- fullwave25-1.0.7/uv.lock +2253 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# See https://pre-commit.com for more information
|
|
2
|
+
# See https://pre-commit.com/hooks.html for more hooks
|
|
3
|
+
repos:
|
|
4
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
5
|
+
rev: v2.4.0
|
|
6
|
+
hooks:
|
|
7
|
+
- id: trailing-whitespace
|
|
8
|
+
- id: end-of-file-fixer
|
|
9
|
+
- id: check-yaml
|
|
10
|
+
- id: check-added-large-files
|
|
11
|
+
args: ["--maxkb=10000"]
|
|
12
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
13
|
+
# Ruff version.
|
|
14
|
+
rev: v0.11.0
|
|
15
|
+
hooks:
|
|
16
|
+
# Run the linter.
|
|
17
|
+
- id: ruff
|
|
18
|
+
args: [--fix]
|
|
19
|
+
# Run the formatter.
|
|
20
|
+
- id: ruff-format
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
cff-version: 1.0.0
|
|
2
|
+
message: "If you use this software, please cite it as below."
|
|
3
|
+
authors:
|
|
4
|
+
- family-names: Sode
|
|
5
|
+
given-names: Masashi
|
|
6
|
+
orcid: https://orcid.org/0000-0002-3685-7378
|
|
7
|
+
- family-names: Pinton
|
|
8
|
+
given-names: Gianmarco
|
|
9
|
+
orcid: https://orcid.org/0000-0002-4896-1439
|
|
10
|
+
title: "Fullwave 2.5: Ultrasound wave propagation simulation with heterogeneous power law attenuation modelling capabilities"
|
|
11
|
+
version: v1.0.7
|
|
12
|
+
# identifiers:
|
|
13
|
+
# - type: doi
|
|
14
|
+
# value:
|
|
15
|
+
date-released: 2025-10-29
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Contributing to Fullwave 2.5
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing to Fullwave 2.5!
|
|
4
|
+
|
|
5
|
+
Please read the following guidelines to ensure a smooth contribution process.
|
|
6
|
+
|
|
7
|
+
- When developing something new, please create a new branch such as `TYPE/BRANCH_NAME`.
|
|
8
|
+
- TYPE can be `feature`, `bugfix`, `hotfix`, `docs`, `refactor`, `release`, `test`, or `experiment`.
|
|
9
|
+
- `BRANCH_NAME` should be descriptive of the feature or fix you are working on.
|
|
10
|
+
- see also: [GitHub Branching Name Best Practices](https://dev.to/jps27cse/github-branching-name-best-practices-49ei)
|
|
11
|
+
- Please write clear and concise commit messages.
|
|
12
|
+
- Please keep your branch up to date with the main branch or develop branch.
|
|
13
|
+
- we use GitLab Flow for Git branching
|
|
14
|
+
- 
|
|
15
|
+
- ref: [Git branching strategies](https://www.geeksforgeeks.org/git/branching-strategies-in-git/)
|
|
16
|
+
- Please make a pull request if you want to add a new feature to the main branch.
|
|
17
|
+
- You need to make a pull request to develop branch first, and then to main branch after the code review.
|
|
18
|
+
- Please write tests for new features or bug fixes.
|
|
19
|
+
- Please use the pre-commit tool to keep the code clean. Pre-commit is installed when you use the make command to install `fullwave-python`.
|
|
20
|
+
```sh
|
|
21
|
+
pre-commit install
|
|
22
|
+
```
|
|
23
|
+
- [Ruff](https://docs.astral.sh/ruff/) will check your code and suggest improvements before you commit.
|
|
24
|
+
- Sometimes, however, the fix is unnecessary and cumbersome. Let Masashi know if you want to remove some coding rules.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
install-uv:
|
|
2
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
3
|
+
install-precommit:
|
|
4
|
+
brew install pre-commit
|
|
5
|
+
install:
|
|
6
|
+
uv sync
|
|
7
|
+
uv run pre-commit install
|
|
8
|
+
install-dev:
|
|
9
|
+
uv sync --dev
|
|
10
|
+
uv run pre-commit install
|
|
11
|
+
install-examples:
|
|
12
|
+
uv sync --extra examples
|
|
13
|
+
uv run pre-commit install
|
|
14
|
+
test:
|
|
15
|
+
uv run pytest
|
|
16
|
+
install-all-extras:
|
|
17
|
+
uv sync --all-extras
|
|
18
|
+
uv run pre-commit install
|
|
19
|
+
build:
|
|
20
|
+
uv build
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: fullwave25
|
|
3
|
+
Version: 1.0.7
|
|
4
|
+
Author-email: Masashi Sode <masashi.sode@gmail.com>
|
|
5
|
+
Requires-Python: >=3.12
|
|
6
|
+
Requires-Dist: matplotlib>=3.10.0
|
|
7
|
+
Requires-Dist: numpy>=2.0.0
|
|
8
|
+
Requires-Dist: opencv-python>=4.11.0.86
|
|
9
|
+
Requires-Dist: scipy>=1.16.3
|
|
10
|
+
Requires-Dist: tqdm>=4.67.1
|
|
11
|
+
Provides-Extra: dev
|
|
12
|
+
Requires-Dist: pre-commit==4.1.0; extra == 'dev'
|
|
13
|
+
Requires-Dist: pytest>=8.3.5; extra == 'dev'
|
|
14
|
+
Requires-Dist: ruff>=0.12.9; extra == 'dev'
|
|
15
|
+
Provides-Extra: examples
|
|
16
|
+
Requires-Dist: ipykernel>=6.28.0; extra == 'examples'
|
|
17
|
+
Requires-Dist: jupyter>=1.0.0; extra == 'examples'
|
|
18
|
+
Provides-Extra: test
|
|
19
|
+
Requires-Dist: coverage==7.6.12; extra == 'test'
|
|
20
|
+
Requires-Dist: pytest; extra == 'test'
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
|
|
23
|
+
# Fullwave 2.5: Ultrasound wave propagation simulation with heterogeneous power law attenuation modelling capabilities
|
|
24
|
+
|
|
25
|
+
Fullwave 2.5 is a Python package for high-fidelity ultrasound wave propagation simulation with the following features:
|
|
26
|
+
|
|
27
|
+
- State-of-the-art attenuation modelling capabilities for ultrasound wave propagation in complex biological tissues
|
|
28
|
+
- Heterogeneous power law attenuation ($\alpha=\alpha_0 f^\gamma$) modeling, where **both the attenuation coefficient $\alpha_0$ and exponent $\gamma$ can vary** spatially.
|
|
29
|
+
- High-performance simulation engine
|
|
30
|
+
- High accuracy staggered-grid finite-difference time-domain (FDTD) scheme (8th-order in space and 4th-order in time).
|
|
31
|
+
- 2D and 3D ultrasound wave propagation simulation.
|
|
32
|
+
- Multiple GPU execution support.
|
|
33
|
+
- Easy-to-use Python interface with CUDA/C backend
|
|
34
|
+
- Python wrapper for easy usability and extensibility, with the core simulation engine implemented in CUDA/C for high performance on NVIDIA GPUs.
|
|
35
|
+
|
|
36
|
+
| Computational medium | Wave propagation |
|
|
37
|
+
| ---------------------------------------- | -------------------------------------------------------------------------- |
|
|
38
|
+
| <img src="figs/medium.png" width="600"/> | <img src="figs/linear_transducer_focused_abdominal_wall.gif" width="200"/> |
|
|
39
|
+
|
|
40
|
+
Building upon the original Fullwave 2 simulator, Fullwave 2.5 enhances its capabilities to model ultrasound wave propagation in media where **both the attenuation coefficient and exponent can vary spatially**. This enables more accurate simulations of biological tissues, which often exhibit complex attenuation behaviours that cannot be captured by uniform exponent models.
|
|
41
|
+
|
|
42
|
+
The library is designed with a Python wrapper for ease of use and extensibility, while the core simulation engine is implemented in CUDA/C to leverage high-performance computing on NVIDIA GPUs. Fullwave 2.5 supports 2D and 3D simulations, including multi-GPU execution for enhanced performance.
|
|
43
|
+
|
|
44
|
+
## Theoretical Background
|
|
45
|
+
|
|
46
|
+
Fullwave 2.5 models multiple relaxation processes to approximate frequency-dependent power-law attenuation in heterogeneous media.
|
|
47
|
+
It solves the stretched-coordinate pressure-velocity formulation using a staggered-grid finite-difference schemes with 8th-order accuracy in space and 4th-order accuracy in time.
|
|
48
|
+
The formulation is expressed as follows:
|
|
49
|
+
|
|
50
|
+
$$\nabla_1 p + \rho \cfrac{\partial {\bf{v}}}{\partial t} = 0$$
|
|
51
|
+
$$\nabla_2 \cdot {\bf{v}} + \kappa \cfrac{\partial p}{\partial t} = 0$$
|
|
52
|
+
|
|
53
|
+
The stretched-coordinate derivatives, denoted by $\nabla_1$ and $\nabla_2$, control frequency-dependent power-law attenuation and dispersion by selecting the optimal relaxation parameters.
|
|
54
|
+
|
|
55
|
+
The following figure illustrates the performance of the attenuation modeling in Fullwave 2.5.
|
|
56
|
+
The graph shows a comparison of the target power-law attenuation $\alpha=\alpha_0 f^\gamma$ (red line) and the simulated attenuation (black dots) for various spatially varying attenuation coefficients ($\alpha_0 =$ 0.25, 0.5, and 0.75) and exponents ($\gamma =$ 0.4, 0.7, 1.0, 1.3, and 1.6).
|
|
57
|
+
|
|
58
|
+

|
|
59
|
+
|
|
60
|
+
## Citation
|
|
61
|
+
|
|
62
|
+
Fullwave 2.5 is developed and maintained by [Pinton Lab](https://github.com/pinton-lab) at the University of North Carolina at Chapel Hill.
|
|
63
|
+
|
|
64
|
+
If you use Fullwave 2.5 in your research, please cite this repository as:
|
|
65
|
+
|
|
66
|
+
```bibtex
|
|
67
|
+
@software{Sode2025-fullwave25,
|
|
68
|
+
author = {Sode, Masashi and Pinton, Gianmarco},
|
|
69
|
+
title = {Fullwave 2.5: Ultrasound wave propagation simulation with heterogeneous power law attenuation modelling capabilities},
|
|
70
|
+
year = 2025,
|
|
71
|
+
month = oct,
|
|
72
|
+
publisher = {GitHub},
|
|
73
|
+
journal = {GitHub repository},
|
|
74
|
+
version = {v1.0.7},
|
|
75
|
+
url = {https://github.com/pinton-lab/fullwave25}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@ARTICLE{Pinton2021-fullwave2,
|
|
79
|
+
title = "A fullwave model of the nonlinear wave equation with
|
|
80
|
+
multiple relaxations and relaxing perfectly matched layers
|
|
81
|
+
for high-order numerical finite-difference solutions",
|
|
82
|
+
author = "Pinton, Gianmarco",
|
|
83
|
+
month = jun,
|
|
84
|
+
year = 2021,
|
|
85
|
+
copyright = "http://creativecommons.org/licenses/by/4.0/",
|
|
86
|
+
archivePrefix = "arXiv",
|
|
87
|
+
primaryClass = "physics.med-ph",
|
|
88
|
+
eprint = "2106.11476"
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Hardware prerequisite
|
|
95
|
+
|
|
96
|
+
- This system operates in a Linux environment.
|
|
97
|
+
- This simulation requires an NVIDIA GPU to execute.
|
|
98
|
+
- You may need multiple GPUs for 3D simulation.
|
|
99
|
+
|
|
100
|
+
## Technical recommendation
|
|
101
|
+
|
|
102
|
+
- We recommend setting up an SSH key for GitHub, if you haven't done already. The repository changes over time to fix bugs and add new features. Cloning through SSH is more convenient than HTTPS in the long run.
|
|
103
|
+
- for ssh key generation
|
|
104
|
+
- please see: [Generating a new SSH key and adding it to the ssh-agent](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)
|
|
105
|
+
- for ssh key registration to your github account
|
|
106
|
+
- please see: [Adding a new SSH key to your GitHub account](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account)
|
|
107
|
+
- after that, you can clone the repository through
|
|
108
|
+
|
|
109
|
+
```sh
|
|
110
|
+
git clone git@github.com:pinton-lab/fullwave-python.git
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Technical references
|
|
114
|
+
|
|
115
|
+
- If you are not familiar with the tools below, please refer to the provided links.
|
|
116
|
+
- VSCode
|
|
117
|
+
- [Official Visual Studio Code documentation](https://code.visualstudio.com/docs)
|
|
118
|
+
- [Visual Studio Code Tutorial for Beginners by Udacity](https://www.udacity.com/blog/2025/09/visual-studio-code-tutorial-for-beginners-productivity-tips-and-extensions.html)
|
|
119
|
+
- Git
|
|
120
|
+
- [Git Tutorial by GeeksForGeeks](https://www.geeksforgeeks.org/git/git-tutorial/)
|
|
121
|
+
- [Git Tutorial by W3 schools](https://www.w3schools.com/git/default.asp)
|
|
122
|
+
- [Using Git source control in VS Code](https://code.visualstudio.com/docs/sourcecontrol/overview)
|
|
123
|
+
- UV
|
|
124
|
+
- [Python UV: The Ultimate Guide to the Fastest Python Package Manager](https://www.datacamp.com/tutorial/python-uv)
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## installation for users
|
|
129
|
+
|
|
130
|
+
```sh
|
|
131
|
+
pip install fullwave25
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## installation for development
|
|
135
|
+
|
|
136
|
+
We use [uv](https://docs.astral.sh/uv/) for package project and virtual environment management.
|
|
137
|
+
|
|
138
|
+
If uv is not installed, run below.
|
|
139
|
+
|
|
140
|
+
```sh
|
|
141
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Run below to install the development environment.
|
|
145
|
+
|
|
146
|
+
```sh
|
|
147
|
+
git clone git@github.com:pinton-lab/fullwave-python.git
|
|
148
|
+
cd fullwave-python
|
|
149
|
+
make install-all-extras # for running examples
|
|
150
|
+
# or
|
|
151
|
+
make install # for the core library installation
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
To test the installation, run
|
|
155
|
+
|
|
156
|
+
```sh
|
|
157
|
+
make test
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Tutorial: Basic Usage
|
|
163
|
+
|
|
164
|
+
Please start from [example_simple_plane_wave.ipynb](https://github.com/pinton-lab/fullwave25/blob/main/examples/simple_plane_wave/example_simple_plane_wave.ipynb).
|
|
165
|
+
|
|
166
|
+
or try the Google Colab tutorial:
|
|
167
|
+
[](https://drive.google.com/file/d/1QqCmF9A0JKfDjnFO66_hRO_eP04suwrk/view?usp=sharing)
|
|
168
|
+
|
|
169
|
+
Here are the main steps to run the Fullwave simulation
|
|
170
|
+
|
|
171
|
+
1. Define the computational grid.
|
|
172
|
+
2. Define the properties of the acoustic medium.
|
|
173
|
+
3. Define the acoustic source.
|
|
174
|
+
4. Define the sensor.
|
|
175
|
+
5. Execute the simulation.
|
|
176
|
+
|
|
177
|
+
## New simulation development instruction
|
|
178
|
+
|
|
179
|
+
- after the [installation](#installation)
|
|
180
|
+
- make a directory for your simulation under your favorite path.
|
|
181
|
+
- e.g. `examples/my_simulation/`
|
|
182
|
+
- make a `.py` file or copy the example files below to use the boilerplate.
|
|
183
|
+
- 2D plane wave
|
|
184
|
+
- [examples/simple_plane_wave/simple_plane_wave_demo.py](https://github.com/pinton-lab/fullwave25/blob/main/examples/simple_plane_wave/simple_plane_wave.py)
|
|
185
|
+
- 3D plane wave
|
|
186
|
+
- [examples/wave_3d/simple_plane_wave_3d.py](https://github.com/pinton-lab/fullwave25/blob/main/examples/wave_3d/simple_plane_wave_3d.py)
|
|
187
|
+
- after that follow [Usage 2D](#tutorial-basic-usage) to define the simulation code.
|
|
188
|
+
|
|
189
|
+
## Tutorial: Advanced Usages
|
|
190
|
+
|
|
191
|
+
Please see the following examples for more advanced usage.
|
|
192
|
+
|
|
193
|
+
- 2D plane wave
|
|
194
|
+
- Basic usage
|
|
195
|
+
- [Simple plane wave](https://github.com/pinton-lab/fullwave25/blob/main/examples/simple_plane_wave/simple_plane_wave.py)
|
|
196
|
+
- <img src="figs/simple_plane_wave.gif" width="200"/>
|
|
197
|
+
- [Simple plane wave with air](https://github.com/pinton-lab/fullwave25/blob/main/examples/simple_plane_wave/simple_plane_wave.py)
|
|
198
|
+
- <img src="figs/simple_plane_wave_with_air.gif" width="200"/>
|
|
199
|
+
- Linear transducer
|
|
200
|
+
- [Linear transducer](https://github.com/pinton-lab/fullwave25/blob/main/examples/linear_transducer/linear_transducer.py)
|
|
201
|
+
- [Linear transducer (plane wave transmit) with animation settings](https://github.com/pinton-lab/fullwave25/blob/main/examples/linear_transducer/linear_transducer_animation.py)
|
|
202
|
+
- <img src="figs/linear_transducer.gif" width="200"/>
|
|
203
|
+
- [Linear transducer (focused transmit) with animation settings](https://github.com/pinton-lab/fullwave25/blob/main/examples/linear_transducer/linear_transducer_animation.py)
|
|
204
|
+
- <img src="figs/linear_transducer_focused.gif" width="200"/>
|
|
205
|
+
- [Linear transducer (focused transmit) with abdominal wall](https://github.com/pinton-lab/fullwave25/blob/main/examples/linear_transducer/linear_transducer.py)
|
|
206
|
+
- <img src="figs/linear_transducer_focused_abdominal_wall.gif" width="200"/>
|
|
207
|
+
- Convex transducer
|
|
208
|
+
- [Convex transducer with abdominal wall](https://github.com/pinton-lab/fullwave25/blob/main/examples/convex_transducer/convex_transducer_abdominal_wall.py)
|
|
209
|
+
- <img src="figs/convex_transducer_abdominal_wall.gif" width="200"/>
|
|
210
|
+
- 3D plane wave
|
|
211
|
+
|
|
212
|
+
- Basic usage
|
|
213
|
+
|
|
214
|
+
- [Simple plane wave in 3D](https://github.com/pinton-lab/fullwave25/blob/main/examples/wave_3d/simple_plane_wave_3d.py)
|
|
215
|
+
<table>
|
|
216
|
+
<tr>
|
|
217
|
+
<td style="text-align: center;" colspan="2">Computational medium</td>
|
|
218
|
+
</tr>
|
|
219
|
+
<tr>
|
|
220
|
+
<td style="text-align: center;" colspan="2"><img src="figs/medium_3d.png" width="600"/></td>
|
|
221
|
+
</tr>
|
|
222
|
+
<tr>
|
|
223
|
+
<td style="text-align: center;" >x-y slice propagation</td>
|
|
224
|
+
<td style="text-align: center;" >x-z slice propagation</td>
|
|
225
|
+
</tr>
|
|
226
|
+
<tr>
|
|
227
|
+
<td style="text-align: center;" ><img src="figs/wave_propagation_x-y.gif" width="300"/></td>
|
|
228
|
+
<td style="text-align: center;" ><img src="figs/wave_propagation_x-z.gif" width="300"/></td>
|
|
229
|
+
</tr>
|
|
230
|
+
</table>
|
|
231
|
+
- [Simple plane wave in 3D with air inclusion](https://github.com/pinton-lab/fullwave25/blob/main/examples/wave_3d/simple_plane_wave_3d_with_air.py)
|
|
232
|
+
<table>
|
|
233
|
+
<tr>
|
|
234
|
+
<td style="text-align: center;" colspan="2">Computational medium with air inclusion</td>
|
|
235
|
+
</tr>
|
|
236
|
+
<tr>
|
|
237
|
+
<td style="text-align: center;" colspan="2"><img src="figs/medium_3d_air.png" width="600"/></td>
|
|
238
|
+
</tr>
|
|
239
|
+
<tr>
|
|
240
|
+
<td style="text-align: center;" >x-y slice propagation</td>
|
|
241
|
+
<td style="text-align: center;" >x-z slice propagation</td>
|
|
242
|
+
</tr>
|
|
243
|
+
<tr>
|
|
244
|
+
<td style="text-align: center;" ><img src="figs/wave_propagation_x-y_air.gif" width="300"/></td>
|
|
245
|
+
<td style="text-align: center;" ><img src="figs/wave_propagation_x-z_air.gif" width="300"/></td>
|
|
246
|
+
</tr>
|
|
247
|
+
</table>
|
|
248
|
+
|
|
249
|
+
- Medium builder usage
|
|
250
|
+
- Medium builder is a utility to create computational medium from simple geometric operations. This is especially useful when you want to create complex heterogeneous media.
|
|
251
|
+
- [simple medium builder usage](https://github.com/pinton-lab/fullwave25/blob/main/examples/medium_builder/medium_builder_example.py)
|
|
252
|
+
- [simple medium builder usage with abdominal wall](https://github.com/pinton-lab/fullwave25/blob/main/examples/medium_builder/medium_builder_abdominal_example.py)
|
|
253
|
+
- [medium builder in 3D](https://github.com/pinton-lab/fullwave25/blob/main/examples/medium_builder/medium_builder_example_3d.py)
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## Attention
|
|
258
|
+
|
|
259
|
+
- The simulation grid is defined as follows:
|
|
260
|
+
- (x, y, z) = (depth, lateral, elevational).
|
|
261
|
+
- This order is due to the efficiency of the multiple-GPU execution.
|
|
262
|
+
- Multi-GPU domain decomposition is processed in the depth dimension.
|
|
263
|
+
- The index of the input coordinates (i.e. the acoustic source location) is defined in C-array order (i.e. row-major) within the simulation, regardless of your setup. This is to improve the efficiency of multi-GPU development.
|
|
264
|
+
- This might be confusing, so please be careful when you define the source and source signal definition.
|
|
265
|
+
- GPU memory requirement
|
|
266
|
+
- A 3D simulation requires a lot of GPU memory.
|
|
267
|
+
- Please reduce the grid size or use multiple GPUs if you run out of memory.
|
|
268
|
+
- You can check GPU memory usage with the 'nvidia-smi' or 'nvtop' commands.
|
|
269
|
+
- Multi-GPU execution
|
|
270
|
+
- The current implementation supports multiple GPU execution in 2D and 3D simulations.
|
|
271
|
+
- Our implementation demonstrates linear performance scaling with the number of GPUs.
|
|
272
|
+
- Before 3D simulation:
|
|
273
|
+
- If you want to run a 3D simulation, it is recommended that you start with a 2D simulation first to understand the basic usage.
|
|
274
|
+
- The 3D simulation code is similar to the 2D code, but some plot functions are unavailable in 3D.
|
|
275
|
+
- The 3D simulation takes longer to run, so starting with 2D will help you debug your code faster.
|
|
276
|
+
|
|
277
|
+
## Note for developers
|
|
278
|
+
|
|
279
|
+
- Contributions are welcome!
|
|
280
|
+
- When developing something new, please create a new branch such as `TYPE/BRANCH_NAME`.
|
|
281
|
+
- TYPE can be `feature`, `bugfix`, `hotfix`, `docs`, `refactor`, `release`, `test`, or `experiment`.
|
|
282
|
+
- `BRANCH_NAME` should be descriptive of the feature or fix you are working on.
|
|
283
|
+
- see also: [GitHub Branching Name Best Practices](https://dev.to/jps27cse/github-branching-name-best-practices-49ei)
|
|
284
|
+
- Please write clear and concise commit messages.
|
|
285
|
+
- please see [CONTRIBUTING.md](CONTRIBUTING.md) for more details.
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## Maintainers
|
|
290
|
+
|
|
291
|
+
- Masashi Sode (GitHub: [MasashiSode](https://github.com/MasashiSode))
|
|
292
|
+
- Gianmarco Pinton (GitHub: [gfpinton](https://github.com/gfpinton))
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# Fullwave 2.5: Ultrasound wave propagation simulation with heterogeneous power law attenuation modelling capabilities
|
|
2
|
+
|
|
3
|
+
Fullwave 2.5 is a Python package for high-fidelity ultrasound wave propagation simulation with the following features:
|
|
4
|
+
|
|
5
|
+
- State-of-the-art attenuation modelling capabilities for ultrasound wave propagation in complex biological tissues
|
|
6
|
+
- Heterogeneous power law attenuation ($\alpha=\alpha_0 f^\gamma$) modeling, where **both the attenuation coefficient $\alpha_0$ and exponent $\gamma$ can vary** spatially.
|
|
7
|
+
- High-performance simulation engine
|
|
8
|
+
- High accuracy staggered-grid finite-difference time-domain (FDTD) scheme (8th-order in space and 4th-order in time).
|
|
9
|
+
- 2D and 3D ultrasound wave propagation simulation.
|
|
10
|
+
- Multiple GPU execution support.
|
|
11
|
+
- Easy-to-use Python interface with CUDA/C backend
|
|
12
|
+
- Python wrapper for easy usability and extensibility, with the core simulation engine implemented in CUDA/C for high performance on NVIDIA GPUs.
|
|
13
|
+
|
|
14
|
+
| Computational medium | Wave propagation |
|
|
15
|
+
| ---------------------------------------- | -------------------------------------------------------------------------- |
|
|
16
|
+
| <img src="figs/medium.png" width="600"/> | <img src="figs/linear_transducer_focused_abdominal_wall.gif" width="200"/> |
|
|
17
|
+
|
|
18
|
+
Building upon the original Fullwave 2 simulator, Fullwave 2.5 enhances its capabilities to model ultrasound wave propagation in media where **both the attenuation coefficient and exponent can vary spatially**. This enables more accurate simulations of biological tissues, which often exhibit complex attenuation behaviours that cannot be captured by uniform exponent models.
|
|
19
|
+
|
|
20
|
+
The library is designed with a Python wrapper for ease of use and extensibility, while the core simulation engine is implemented in CUDA/C to leverage high-performance computing on NVIDIA GPUs. Fullwave 2.5 supports 2D and 3D simulations, including multi-GPU execution for enhanced performance.
|
|
21
|
+
|
|
22
|
+
## Theoretical Background
|
|
23
|
+
|
|
24
|
+
Fullwave 2.5 models multiple relaxation processes to approximate frequency-dependent power-law attenuation in heterogeneous media.
|
|
25
|
+
It solves the stretched-coordinate pressure-velocity formulation using a staggered-grid finite-difference schemes with 8th-order accuracy in space and 4th-order accuracy in time.
|
|
26
|
+
The formulation is expressed as follows:
|
|
27
|
+
|
|
28
|
+
$$\nabla_1 p + \rho \cfrac{\partial {\bf{v}}}{\partial t} = 0$$
|
|
29
|
+
$$\nabla_2 \cdot {\bf{v}} + \kappa \cfrac{\partial p}{\partial t} = 0$$
|
|
30
|
+
|
|
31
|
+
The stretched-coordinate derivatives, denoted by $\nabla_1$ and $\nabla_2$, control frequency-dependent power-law attenuation and dispersion by selecting the optimal relaxation parameters.
|
|
32
|
+
|
|
33
|
+
The following figure illustrates the performance of the attenuation modeling in Fullwave 2.5.
|
|
34
|
+
The graph shows a comparison of the target power-law attenuation $\alpha=\alpha_0 f^\gamma$ (red line) and the simulated attenuation (black dots) for various spatially varying attenuation coefficients ($\alpha_0 =$ 0.25, 0.5, and 0.75) and exponents ($\gamma =$ 0.4, 0.7, 1.0, 1.3, and 1.6).
|
|
35
|
+
|
|
36
|
+

|
|
37
|
+
|
|
38
|
+
## Citation
|
|
39
|
+
|
|
40
|
+
Fullwave 2.5 is developed and maintained by [Pinton Lab](https://github.com/pinton-lab) at the University of North Carolina at Chapel Hill.
|
|
41
|
+
|
|
42
|
+
If you use Fullwave 2.5 in your research, please cite this repository as:
|
|
43
|
+
|
|
44
|
+
```bibtex
|
|
45
|
+
@software{Sode2025-fullwave25,
|
|
46
|
+
author = {Sode, Masashi and Pinton, Gianmarco},
|
|
47
|
+
title = {Fullwave 2.5: Ultrasound wave propagation simulation with heterogeneous power law attenuation modelling capabilities},
|
|
48
|
+
year = 2025,
|
|
49
|
+
month = oct,
|
|
50
|
+
publisher = {GitHub},
|
|
51
|
+
journal = {GitHub repository},
|
|
52
|
+
version = {v1.0.7},
|
|
53
|
+
url = {https://github.com/pinton-lab/fullwave25}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@ARTICLE{Pinton2021-fullwave2,
|
|
57
|
+
title = "A fullwave model of the nonlinear wave equation with
|
|
58
|
+
multiple relaxations and relaxing perfectly matched layers
|
|
59
|
+
for high-order numerical finite-difference solutions",
|
|
60
|
+
author = "Pinton, Gianmarco",
|
|
61
|
+
month = jun,
|
|
62
|
+
year = 2021,
|
|
63
|
+
copyright = "http://creativecommons.org/licenses/by/4.0/",
|
|
64
|
+
archivePrefix = "arXiv",
|
|
65
|
+
primaryClass = "physics.med-ph",
|
|
66
|
+
eprint = "2106.11476"
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Hardware prerequisite
|
|
73
|
+
|
|
74
|
+
- This system operates in a Linux environment.
|
|
75
|
+
- This simulation requires an NVIDIA GPU to execute.
|
|
76
|
+
- You may need multiple GPUs for 3D simulation.
|
|
77
|
+
|
|
78
|
+
## Technical recommendation
|
|
79
|
+
|
|
80
|
+
- We recommend setting up an SSH key for GitHub, if you haven't done already. The repository changes over time to fix bugs and add new features. Cloning through SSH is more convenient than HTTPS in the long run.
|
|
81
|
+
- for ssh key generation
|
|
82
|
+
- please see: [Generating a new SSH key and adding it to the ssh-agent](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)
|
|
83
|
+
- for ssh key registration to your github account
|
|
84
|
+
- please see: [Adding a new SSH key to your GitHub account](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account)
|
|
85
|
+
- after that, you can clone the repository through
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
git clone git@github.com:pinton-lab/fullwave-python.git
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Technical references
|
|
92
|
+
|
|
93
|
+
- If you are not familiar with the tools below, please refer to the provided links.
|
|
94
|
+
- VSCode
|
|
95
|
+
- [Official Visual Studio Code documentation](https://code.visualstudio.com/docs)
|
|
96
|
+
- [Visual Studio Code Tutorial for Beginners by Udacity](https://www.udacity.com/blog/2025/09/visual-studio-code-tutorial-for-beginners-productivity-tips-and-extensions.html)
|
|
97
|
+
- Git
|
|
98
|
+
- [Git Tutorial by GeeksForGeeks](https://www.geeksforgeeks.org/git/git-tutorial/)
|
|
99
|
+
- [Git Tutorial by W3 schools](https://www.w3schools.com/git/default.asp)
|
|
100
|
+
- [Using Git source control in VS Code](https://code.visualstudio.com/docs/sourcecontrol/overview)
|
|
101
|
+
- UV
|
|
102
|
+
- [Python UV: The Ultimate Guide to the Fastest Python Package Manager](https://www.datacamp.com/tutorial/python-uv)
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## installation for users
|
|
107
|
+
|
|
108
|
+
```sh
|
|
109
|
+
pip install fullwave25
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## installation for development
|
|
113
|
+
|
|
114
|
+
We use [uv](https://docs.astral.sh/uv/) for package project and virtual environment management.
|
|
115
|
+
|
|
116
|
+
If uv is not installed, run below.
|
|
117
|
+
|
|
118
|
+
```sh
|
|
119
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Run below to install the development environment.
|
|
123
|
+
|
|
124
|
+
```sh
|
|
125
|
+
git clone git@github.com:pinton-lab/fullwave-python.git
|
|
126
|
+
cd fullwave-python
|
|
127
|
+
make install-all-extras # for running examples
|
|
128
|
+
# or
|
|
129
|
+
make install # for the core library installation
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
To test the installation, run
|
|
133
|
+
|
|
134
|
+
```sh
|
|
135
|
+
make test
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Tutorial: Basic Usage
|
|
141
|
+
|
|
142
|
+
Please start from [example_simple_plane_wave.ipynb](https://github.com/pinton-lab/fullwave25/blob/main/examples/simple_plane_wave/example_simple_plane_wave.ipynb).
|
|
143
|
+
|
|
144
|
+
or try the Google Colab tutorial:
|
|
145
|
+
[](https://drive.google.com/file/d/1QqCmF9A0JKfDjnFO66_hRO_eP04suwrk/view?usp=sharing)
|
|
146
|
+
|
|
147
|
+
Here are the main steps to run the Fullwave simulation
|
|
148
|
+
|
|
149
|
+
1. Define the computational grid.
|
|
150
|
+
2. Define the properties of the acoustic medium.
|
|
151
|
+
3. Define the acoustic source.
|
|
152
|
+
4. Define the sensor.
|
|
153
|
+
5. Execute the simulation.
|
|
154
|
+
|
|
155
|
+
## New simulation development instruction
|
|
156
|
+
|
|
157
|
+
- after the [installation](#installation)
|
|
158
|
+
- make a directory for your simulation under your favorite path.
|
|
159
|
+
- e.g. `examples/my_simulation/`
|
|
160
|
+
- make a `.py` file or copy the example files below to use the boilerplate.
|
|
161
|
+
- 2D plane wave
|
|
162
|
+
- [examples/simple_plane_wave/simple_plane_wave_demo.py](https://github.com/pinton-lab/fullwave25/blob/main/examples/simple_plane_wave/simple_plane_wave.py)
|
|
163
|
+
- 3D plane wave
|
|
164
|
+
- [examples/wave_3d/simple_plane_wave_3d.py](https://github.com/pinton-lab/fullwave25/blob/main/examples/wave_3d/simple_plane_wave_3d.py)
|
|
165
|
+
- after that follow [Usage 2D](#tutorial-basic-usage) to define the simulation code.
|
|
166
|
+
|
|
167
|
+
## Tutorial: Advanced Usages
|
|
168
|
+
|
|
169
|
+
Please see the following examples for more advanced usage.
|
|
170
|
+
|
|
171
|
+
- 2D plane wave
|
|
172
|
+
- Basic usage
|
|
173
|
+
- [Simple plane wave](https://github.com/pinton-lab/fullwave25/blob/main/examples/simple_plane_wave/simple_plane_wave.py)
|
|
174
|
+
- <img src="figs/simple_plane_wave.gif" width="200"/>
|
|
175
|
+
- [Simple plane wave with air](https://github.com/pinton-lab/fullwave25/blob/main/examples/simple_plane_wave/simple_plane_wave.py)
|
|
176
|
+
- <img src="figs/simple_plane_wave_with_air.gif" width="200"/>
|
|
177
|
+
- Linear transducer
|
|
178
|
+
- [Linear transducer](https://github.com/pinton-lab/fullwave25/blob/main/examples/linear_transducer/linear_transducer.py)
|
|
179
|
+
- [Linear transducer (plane wave transmit) with animation settings](https://github.com/pinton-lab/fullwave25/blob/main/examples/linear_transducer/linear_transducer_animation.py)
|
|
180
|
+
- <img src="figs/linear_transducer.gif" width="200"/>
|
|
181
|
+
- [Linear transducer (focused transmit) with animation settings](https://github.com/pinton-lab/fullwave25/blob/main/examples/linear_transducer/linear_transducer_animation.py)
|
|
182
|
+
- <img src="figs/linear_transducer_focused.gif" width="200"/>
|
|
183
|
+
- [Linear transducer (focused transmit) with abdominal wall](https://github.com/pinton-lab/fullwave25/blob/main/examples/linear_transducer/linear_transducer.py)
|
|
184
|
+
- <img src="figs/linear_transducer_focused_abdominal_wall.gif" width="200"/>
|
|
185
|
+
- Convex transducer
|
|
186
|
+
- [Convex transducer with abdominal wall](https://github.com/pinton-lab/fullwave25/blob/main/examples/convex_transducer/convex_transducer_abdominal_wall.py)
|
|
187
|
+
- <img src="figs/convex_transducer_abdominal_wall.gif" width="200"/>
|
|
188
|
+
- 3D plane wave
|
|
189
|
+
|
|
190
|
+
- Basic usage
|
|
191
|
+
|
|
192
|
+
- [Simple plane wave in 3D](https://github.com/pinton-lab/fullwave25/blob/main/examples/wave_3d/simple_plane_wave_3d.py)
|
|
193
|
+
<table>
|
|
194
|
+
<tr>
|
|
195
|
+
<td style="text-align: center;" colspan="2">Computational medium</td>
|
|
196
|
+
</tr>
|
|
197
|
+
<tr>
|
|
198
|
+
<td style="text-align: center;" colspan="2"><img src="figs/medium_3d.png" width="600"/></td>
|
|
199
|
+
</tr>
|
|
200
|
+
<tr>
|
|
201
|
+
<td style="text-align: center;" >x-y slice propagation</td>
|
|
202
|
+
<td style="text-align: center;" >x-z slice propagation</td>
|
|
203
|
+
</tr>
|
|
204
|
+
<tr>
|
|
205
|
+
<td style="text-align: center;" ><img src="figs/wave_propagation_x-y.gif" width="300"/></td>
|
|
206
|
+
<td style="text-align: center;" ><img src="figs/wave_propagation_x-z.gif" width="300"/></td>
|
|
207
|
+
</tr>
|
|
208
|
+
</table>
|
|
209
|
+
- [Simple plane wave in 3D with air inclusion](https://github.com/pinton-lab/fullwave25/blob/main/examples/wave_3d/simple_plane_wave_3d_with_air.py)
|
|
210
|
+
<table>
|
|
211
|
+
<tr>
|
|
212
|
+
<td style="text-align: center;" colspan="2">Computational medium with air inclusion</td>
|
|
213
|
+
</tr>
|
|
214
|
+
<tr>
|
|
215
|
+
<td style="text-align: center;" colspan="2"><img src="figs/medium_3d_air.png" width="600"/></td>
|
|
216
|
+
</tr>
|
|
217
|
+
<tr>
|
|
218
|
+
<td style="text-align: center;" >x-y slice propagation</td>
|
|
219
|
+
<td style="text-align: center;" >x-z slice propagation</td>
|
|
220
|
+
</tr>
|
|
221
|
+
<tr>
|
|
222
|
+
<td style="text-align: center;" ><img src="figs/wave_propagation_x-y_air.gif" width="300"/></td>
|
|
223
|
+
<td style="text-align: center;" ><img src="figs/wave_propagation_x-z_air.gif" width="300"/></td>
|
|
224
|
+
</tr>
|
|
225
|
+
</table>
|
|
226
|
+
|
|
227
|
+
- Medium builder usage
|
|
228
|
+
- Medium builder is a utility to create computational medium from simple geometric operations. This is especially useful when you want to create complex heterogeneous media.
|
|
229
|
+
- [simple medium builder usage](https://github.com/pinton-lab/fullwave25/blob/main/examples/medium_builder/medium_builder_example.py)
|
|
230
|
+
- [simple medium builder usage with abdominal wall](https://github.com/pinton-lab/fullwave25/blob/main/examples/medium_builder/medium_builder_abdominal_example.py)
|
|
231
|
+
- [medium builder in 3D](https://github.com/pinton-lab/fullwave25/blob/main/examples/medium_builder/medium_builder_example_3d.py)
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Attention
|
|
236
|
+
|
|
237
|
+
- The simulation grid is defined as follows:
|
|
238
|
+
- (x, y, z) = (depth, lateral, elevational).
|
|
239
|
+
- This order is due to the efficiency of the multiple-GPU execution.
|
|
240
|
+
- Multi-GPU domain decomposition is processed in the depth dimension.
|
|
241
|
+
- The index of the input coordinates (i.e. the acoustic source location) is defined in C-array order (i.e. row-major) within the simulation, regardless of your setup. This is to improve the efficiency of multi-GPU development.
|
|
242
|
+
- This might be confusing, so please be careful when you define the source and source signal definition.
|
|
243
|
+
- GPU memory requirement
|
|
244
|
+
- A 3D simulation requires a lot of GPU memory.
|
|
245
|
+
- Please reduce the grid size or use multiple GPUs if you run out of memory.
|
|
246
|
+
- You can check GPU memory usage with the 'nvidia-smi' or 'nvtop' commands.
|
|
247
|
+
- Multi-GPU execution
|
|
248
|
+
- The current implementation supports multiple GPU execution in 2D and 3D simulations.
|
|
249
|
+
- Our implementation demonstrates linear performance scaling with the number of GPUs.
|
|
250
|
+
- Before 3D simulation:
|
|
251
|
+
- If you want to run a 3D simulation, it is recommended that you start with a 2D simulation first to understand the basic usage.
|
|
252
|
+
- The 3D simulation code is similar to the 2D code, but some plot functions are unavailable in 3D.
|
|
253
|
+
- The 3D simulation takes longer to run, so starting with 2D will help you debug your code faster.
|
|
254
|
+
|
|
255
|
+
## Note for developers
|
|
256
|
+
|
|
257
|
+
- Contributions are welcome!
|
|
258
|
+
- When developing something new, please create a new branch such as `TYPE/BRANCH_NAME`.
|
|
259
|
+
- TYPE can be `feature`, `bugfix`, `hotfix`, `docs`, `refactor`, `release`, `test`, or `experiment`.
|
|
260
|
+
- `BRANCH_NAME` should be descriptive of the feature or fix you are working on.
|
|
261
|
+
- see also: [GitHub Branching Name Best Practices](https://dev.to/jps27cse/github-branching-name-best-practices-49ei)
|
|
262
|
+
- Please write clear and concise commit messages.
|
|
263
|
+
- please see [CONTRIBUTING.md](CONTRIBUTING.md) for more details.
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Maintainers
|
|
268
|
+
|
|
269
|
+
- Masashi Sode (GitHub: [MasashiSode](https://github.com/MasashiSode))
|
|
270
|
+
- Gianmarco Pinton (GitHub: [gfpinton](https://github.com/gfpinton))
|