fullwave25 1.0.7__py3-none-any.whl
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.
- fullwave/__init__.py +28 -0
- fullwave/constants/__init__.py +5 -0
- fullwave/constants/material_properties.py +112 -0
- fullwave/grid.py +222 -0
- fullwave/medium.py +1042 -0
- fullwave/medium_builder/__init__.py +12 -0
- fullwave/medium_builder/domain.py +151 -0
- fullwave/medium_builder/medium_builder.py +198 -0
- fullwave/medium_builder/presets/__init__.py +8 -0
- fullwave/medium_builder/presets/data/.keep +0 -0
- fullwave/medium_builder/presets/data/abdominal_wall/i2365f_etfw1.mat +0 -0
- fullwave/medium_builder/presets/domain_abdominal_wall.py +293 -0
- fullwave/medium_builder/presets/domain_background.py +140 -0
- fullwave/medium_builder/presets/domain_scatterer.py +179 -0
- fullwave/medium_builder/presets/domain_simple.py +92 -0
- fullwave/medium_builder/presets/domain_water_gel.py +1 -0
- fullwave/sensor.py +161 -0
- fullwave/solver/__init__.py +1 -0
- fullwave/solver/bins/database/relaxation_params_database_num_relax=2_20251027_1437.mat +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenu +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_100_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_101_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_120_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_61_cuda118 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_61_cuda124 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_61_cuda126 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_61_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_70_cuda118 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_70_cuda124 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_70_cuda126 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_70_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_75_cuda118 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_75_cuda124 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_75_cuda126 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_75_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_80_cuda118 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_80_cuda124 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_80_cuda126 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_80_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_86_cuda118 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_86_cuda124 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_86_cuda126 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_86_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_89_cuda118 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_89_cuda126 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_89_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_90_cuda118 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_90_cuda124 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_90_cuda126 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/2d/fullwave2_2d_exponential_attenuation_gpu_sm_90_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_100_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_101_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_120_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_61_cuda118 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_61_cuda124 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_61_cuda126 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_61_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_70_cuda118 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_70_cuda124 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_70_cuda126 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_70_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_75_cuda118 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_75_cuda124 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_75_cuda126 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_75_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_80_cuda118 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_80_cuda124 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_80_cuda126 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_80_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_86_cuda118 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_86_cuda124 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_86_cuda126 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_86_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_89_cuda118 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_89_cuda124 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_89_cuda126 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_89_cuda129 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_90_cuda118 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_90_cuda124 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_90_cuda126 +0 -0
- fullwave/solver/bins/exponential_attenuation/gpu/3d/fullwave2_3d_exponential_attenuation_gpu_sm_90_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_100_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_101_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_120_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_61_cuda118 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_61_cuda124 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_61_cuda126 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_61_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_70_cuda118 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_70_cuda124 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_70_cuda126 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_70_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_75_cuda118 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_75_cuda124 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_75_cuda126 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_75_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_80_cuda118 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_80_cuda124 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_80_cuda126 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_80_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_86_cuda118 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_86_cuda124 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_86_cuda126 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_86_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_89_cuda118 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_89_cuda124 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_89_cuda126 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_89_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_90_cuda118 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_90_cuda124 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_90_cuda126 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_isotropic_multi_gpu_sm_90_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_100_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_101_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_120_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_61_cuda118 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_61_cuda124 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_61_cuda126 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_61_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_70_cuda118 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_70_cuda124 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_70_cuda126 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_70_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_75_cuda118 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_75_cuda124 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_75_cuda126 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_75_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_80_cuda118 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_80_cuda124 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_80_cuda126 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_80_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_86_cuda118 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_86_cuda124 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_86_cuda126 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_86_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_89_cuda118 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_89_cuda124 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_89_cuda126 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_89_cuda129 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_90_cuda118 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_90_cuda124 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_90_cuda126 +0 -0
- fullwave/solver/bins/gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_sm_90_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_100_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_101_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_120_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_61_cuda118 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_61_cuda124 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_61_cuda126 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_61_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_70_cuda118 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_70_cuda124 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_70_cuda126 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_70_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_75_cuda118 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_75_cuda124 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_75_cuda126 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_75_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_80_cuda118 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_80_cuda124 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_80_cuda126 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_80_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_86_cuda118 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_86_cuda124 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_86_cuda126 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_86_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_89_cuda118 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_89_cuda124 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_89_cuda126 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_89_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_90_cuda118 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_90_cuda124 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_90_cuda126 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_isotropic_multi_gpu_sm_90_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_100_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_101_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_120_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_61_cuda118 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_61_cuda124 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_61_cuda126 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_61_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_70_cuda118 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_70_cuda124 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_70_cuda126 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_70_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_75_cuda118 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_75_cuda124 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_75_cuda126 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_75_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_80_cuda118 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_80_cuda124 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_80_cuda126 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_80_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_86_cuda118 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_86_cuda124 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_86_cuda126 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_86_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_89_cuda118 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_89_cuda124 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_89_cuda126 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_89_cuda129 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_90_cuda118 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_90_cuda124 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_90_cuda126 +0 -0
- fullwave/solver/bins/gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_sm_90_cuda129 +0 -0
- fullwave/solver/cuda_utils.py +392 -0
- fullwave/solver/input_file_writer.py +853 -0
- fullwave/solver/launcher.py +134 -0
- fullwave/solver/pml_builder.py +1923 -0
- fullwave/solver/solver.py +750 -0
- fullwave/solver/utils.py +83 -0
- fullwave/source.py +173 -0
- fullwave/transducer.py +1003 -0
- fullwave/utils/__init__.py +12 -0
- fullwave/utils/check_functions.py +48 -0
- fullwave/utils/coordinates.py +155 -0
- fullwave/utils/memory_tempfile.py +439 -0
- fullwave/utils/numerical.py +111 -0
- fullwave/utils/plot_utils.py +1122 -0
- fullwave/utils/pulse.py +72 -0
- fullwave/utils/relaxation_parameters.py +212 -0
- fullwave/utils/signal_process.py +197 -0
- fullwave25-1.0.7.dist-info/METADATA +292 -0
- fullwave25-1.0.7.dist-info/RECORD +225 -0
- fullwave25-1.0.7.dist-info/WHEEL +4 -0
fullwave/__init__.py
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""fullwave module."""
|
|
2
|
+
|
|
3
|
+
from . import utils
|
|
4
|
+
from .grid import Grid
|
|
5
|
+
from .medium import Medium, MediumExponentialAttenuation, MediumRelaxationMaps
|
|
6
|
+
from .sensor import Sensor
|
|
7
|
+
from .source import Source
|
|
8
|
+
from .transducer import Transducer, TransducerGeometry
|
|
9
|
+
|
|
10
|
+
from .solver.solver import Solver # isort:skip
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# "FullwaveSolver",
|
|
14
|
+
__all__ = [
|
|
15
|
+
"Grid",
|
|
16
|
+
"Medium",
|
|
17
|
+
"MediumExponentialAttenuation",
|
|
18
|
+
"MediumRelaxationMaps",
|
|
19
|
+
"Sensor",
|
|
20
|
+
"Solver",
|
|
21
|
+
"Source",
|
|
22
|
+
"Transducer",
|
|
23
|
+
"TransducerGeometry",
|
|
24
|
+
"utils",
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
VERSION = "1.0.7"
|
|
28
|
+
__version__ = VERSION
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"""Material properties."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import ClassVar
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@dataclass
|
|
8
|
+
class MaterialProperties:
|
|
9
|
+
"""Material properties for different tissues."""
|
|
10
|
+
|
|
11
|
+
fat: ClassVar[dict] = {
|
|
12
|
+
"b_on_a": 9.6,
|
|
13
|
+
"alpha_coeff": 0.4,
|
|
14
|
+
"alpha_power": 1.1,
|
|
15
|
+
"sound_speed": 1412,
|
|
16
|
+
"density": 937,
|
|
17
|
+
}
|
|
18
|
+
fat["beta"] = 1 + fat["b_on_a"] / 2
|
|
19
|
+
|
|
20
|
+
liver: ClassVar[dict] = {
|
|
21
|
+
"b_on_a": 7.6,
|
|
22
|
+
"alpha_coeff": 0.5,
|
|
23
|
+
"alpha_power": 1.1,
|
|
24
|
+
"sound_speed": 1566.03,
|
|
25
|
+
"density": 1064,
|
|
26
|
+
}
|
|
27
|
+
liver["beta"] = 1 + liver["b_on_a"] / 2
|
|
28
|
+
|
|
29
|
+
muscle: ClassVar[dict] = {
|
|
30
|
+
"b_on_a": 9,
|
|
31
|
+
"alpha_coeff": 0.15,
|
|
32
|
+
"alpha_power": 1.0,
|
|
33
|
+
"sound_speed": 1527,
|
|
34
|
+
"density": 1070,
|
|
35
|
+
}
|
|
36
|
+
muscle["beta"] = 1 + muscle["b_on_a"] / 2
|
|
37
|
+
|
|
38
|
+
water: ClassVar[dict] = {
|
|
39
|
+
"b_on_a": 5,
|
|
40
|
+
"alpha_coeff": 0.005,
|
|
41
|
+
"alpha_power": 2.0,
|
|
42
|
+
"sound_speed": 1523,
|
|
43
|
+
"density": 1000,
|
|
44
|
+
}
|
|
45
|
+
water["beta"] = 1 + water["b_on_a"] / 2
|
|
46
|
+
|
|
47
|
+
skin: ClassVar[dict] = {
|
|
48
|
+
"b_on_a": 8,
|
|
49
|
+
"alpha_coeff": 2.1,
|
|
50
|
+
"alpha_power": 1,
|
|
51
|
+
"sound_speed": 1772,
|
|
52
|
+
"density": 1090,
|
|
53
|
+
}
|
|
54
|
+
skin["beta"] = 1 + skin["b_on_a"] / 2
|
|
55
|
+
|
|
56
|
+
tissue: ClassVar[dict] = {
|
|
57
|
+
"b_on_a": 9,
|
|
58
|
+
"alpha_coeff": 0.5,
|
|
59
|
+
"alpha_power": 1,
|
|
60
|
+
"sound_speed": 1540,
|
|
61
|
+
"density": 1000,
|
|
62
|
+
}
|
|
63
|
+
tissue["beta"] = 1 + tissue["b_on_a"] / 2
|
|
64
|
+
|
|
65
|
+
connective: ClassVar[dict] = {
|
|
66
|
+
"b_on_a": 8,
|
|
67
|
+
"alpha_coeff": 0.5,
|
|
68
|
+
"alpha_power": 1,
|
|
69
|
+
"sound_speed": 1613,
|
|
70
|
+
"density": 1120,
|
|
71
|
+
}
|
|
72
|
+
connective["beta"] = 1 + connective["b_on_a"] / 2
|
|
73
|
+
|
|
74
|
+
blood: ClassVar[dict] = {
|
|
75
|
+
"b_on_a": 5,
|
|
76
|
+
"alpha_coeff": 0.005,
|
|
77
|
+
"alpha_power": 2.0,
|
|
78
|
+
"sound_speed": 1583,
|
|
79
|
+
"density": 1000,
|
|
80
|
+
}
|
|
81
|
+
blood["beta"] = 1 + blood["b_on_a"] / 2
|
|
82
|
+
|
|
83
|
+
lung_fluid: ClassVar[dict] = {
|
|
84
|
+
"b_on_a": 5,
|
|
85
|
+
"alpha_coeff": 0.005,
|
|
86
|
+
"alpha_power": 2.0,
|
|
87
|
+
"sound_speed": 1440,
|
|
88
|
+
"density": 1000,
|
|
89
|
+
}
|
|
90
|
+
lung_fluid["beta"] = 1 + lung_fluid["b_on_a"] / 2
|
|
91
|
+
|
|
92
|
+
sound_speed: float = 1540.0
|
|
93
|
+
density: float = 1000.0
|
|
94
|
+
alpha_coeff: float = 0.5
|
|
95
|
+
alpha_power: float = 1.0
|
|
96
|
+
beta: float = 0.0
|
|
97
|
+
|
|
98
|
+
def __init__(
|
|
99
|
+
self,
|
|
100
|
+
sound_speed: float = 1540.0,
|
|
101
|
+
density: float = 1000.0,
|
|
102
|
+
alpha_coeff: float = 0.5,
|
|
103
|
+
alpha_power: float = 1.0,
|
|
104
|
+
beta: float = 0.0,
|
|
105
|
+
) -> None:
|
|
106
|
+
"""Initialize base material properties."""
|
|
107
|
+
super().__init__()
|
|
108
|
+
self.sound_speed = sound_speed
|
|
109
|
+
self.density = density
|
|
110
|
+
self.alpha_coeff = alpha_coeff
|
|
111
|
+
self.alpha_power = alpha_power
|
|
112
|
+
self.beta = beta
|
fullwave/grid.py
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"""Class to calculate the grid size, spacing, time step."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
|
|
5
|
+
import numpy as np
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class Grid:
|
|
10
|
+
"""Grid class to calculate grid size, spacing, and time step.
|
|
11
|
+
|
|
12
|
+
Parameters
|
|
13
|
+
----------
|
|
14
|
+
domain_size : tuple
|
|
15
|
+
Size of the domain in x, y, and z directions [m].
|
|
16
|
+
For 2D simulations, (x, y) is required.
|
|
17
|
+
For 3D simulations, (x, y, z) is required.
|
|
18
|
+
e.g. (0.1, 0.1) for 2D and (0.1, 0.1, 0.1) for 3D.
|
|
19
|
+
f0 : float
|
|
20
|
+
Center frequency of the wave [Hz].
|
|
21
|
+
e.g. 1e6 for 1 MHz.
|
|
22
|
+
duration : float
|
|
23
|
+
Duration of the simulation [s].
|
|
24
|
+
e.g. 1e-6 for 1 us.
|
|
25
|
+
c0 : float, optional
|
|
26
|
+
Speed of sound in the medium [m/s], by default 1540.
|
|
27
|
+
This value is only used to calculate the grid spacing.
|
|
28
|
+
The sound speed map is defined in the medium class.
|
|
29
|
+
ppw : int, optional
|
|
30
|
+
Points per wavelength, by default 12.
|
|
31
|
+
The number of grid points per wavelength.
|
|
32
|
+
It changes the accuracy of the simulation.
|
|
33
|
+
cfl : float, optional
|
|
34
|
+
Courant-Friedrichs-Lewy number, by default 0.2.
|
|
35
|
+
It changes the stability of the simulation.
|
|
36
|
+
lower values are more stable but slower.
|
|
37
|
+
0.2 - 0.45 is a good range.
|
|
38
|
+
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
domain_size: tuple[float, ...]
|
|
42
|
+
f0: float
|
|
43
|
+
duration: float
|
|
44
|
+
c0: float = 1540
|
|
45
|
+
ppw: int = 12
|
|
46
|
+
cfl: float = 0.2
|
|
47
|
+
|
|
48
|
+
def __post_init__(self) -> None:
|
|
49
|
+
"""Post-initialization processing for Grid.
|
|
50
|
+
|
|
51
|
+
Check the input parameters.
|
|
52
|
+
"""
|
|
53
|
+
self._check_input()
|
|
54
|
+
self.is_3d = len(self.domain_size) == 3
|
|
55
|
+
|
|
56
|
+
def _check_input(self) -> None:
|
|
57
|
+
"""Check the input parameters."""
|
|
58
|
+
assert len(self.domain_size) in [2, 3], "Domain size must be 2D or 3D"
|
|
59
|
+
assert self.f0 > 0, "Center frequency must be greater than 0"
|
|
60
|
+
assert self.f0 < 30e6, "Center frequency must be less than 30 MHz"
|
|
61
|
+
assert self.duration > 0, "Duration must be greater than 0"
|
|
62
|
+
assert self.c0 > 0, "Speed of sound must be greater than 0"
|
|
63
|
+
assert self.ppw > 5, "Points per wavelength must be greater than 5"
|
|
64
|
+
assert self.cfl > 0.01, "CFL number must be greater than 0.01"
|
|
65
|
+
assert self.cfl < 0.5, "CFL number must be less than 0.5"
|
|
66
|
+
|
|
67
|
+
@property
|
|
68
|
+
def omega(self) -> float:
|
|
69
|
+
"""Angular frequency of the wave [rad/s]."""
|
|
70
|
+
return 2 * np.pi * self.f0
|
|
71
|
+
|
|
72
|
+
@property
|
|
73
|
+
def wavelength(self) -> float:
|
|
74
|
+
"""Wavelength of the wave [m]."""
|
|
75
|
+
return self.c0 / self.f0
|
|
76
|
+
|
|
77
|
+
@property
|
|
78
|
+
def nx(self) -> int:
|
|
79
|
+
"""Number of grid points in x-direction."""
|
|
80
|
+
return int(np.round(self.domain_size[0] / self.dx).item())
|
|
81
|
+
|
|
82
|
+
@property
|
|
83
|
+
def ny(self) -> int:
|
|
84
|
+
"""Number of grid points in y-direction."""
|
|
85
|
+
return int(np.round(self.domain_size[1] / self.dy).item())
|
|
86
|
+
|
|
87
|
+
@property
|
|
88
|
+
def nz(self) -> int:
|
|
89
|
+
"""Number of grid points in z-direction."""
|
|
90
|
+
return (
|
|
91
|
+
int(np.round(self.domain_size[2] / self.dz).item()) if len(self.domain_size) == 3 else 0
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
@property
|
|
95
|
+
def n_axial(self) -> int:
|
|
96
|
+
"""Number of grid points in axial-direction."""
|
|
97
|
+
return self.nx
|
|
98
|
+
|
|
99
|
+
@property
|
|
100
|
+
def n_lateral(self) -> int:
|
|
101
|
+
"""Number of grid points in lateral-direction."""
|
|
102
|
+
return self.ny
|
|
103
|
+
|
|
104
|
+
@property
|
|
105
|
+
def n_elevational(self) -> int:
|
|
106
|
+
"""Number of grid points in elevational-direction."""
|
|
107
|
+
return self.nz
|
|
108
|
+
|
|
109
|
+
@property
|
|
110
|
+
def dx(self) -> float:
|
|
111
|
+
"""Grid point spacing in x-direction [m]."""
|
|
112
|
+
return self.wavelength / self.ppw
|
|
113
|
+
|
|
114
|
+
@property
|
|
115
|
+
def dy(self) -> float:
|
|
116
|
+
"""Grid point spacing in y-direction [m]."""
|
|
117
|
+
return self.wavelength / self.ppw
|
|
118
|
+
|
|
119
|
+
@property
|
|
120
|
+
def dz(self) -> float:
|
|
121
|
+
"""Grid point spacing in z-direction [m]."""
|
|
122
|
+
return self.wavelength / self.ppw if len(self.domain_size) == 3 else 0
|
|
123
|
+
|
|
124
|
+
@property
|
|
125
|
+
def nt(self) -> int:
|
|
126
|
+
"""Number of time steps."""
|
|
127
|
+
return round(self.duration / self.dt)
|
|
128
|
+
|
|
129
|
+
@property
|
|
130
|
+
def dt(self) -> float:
|
|
131
|
+
"""Time step [s]."""
|
|
132
|
+
return self.cfl * self.dx / self.c0
|
|
133
|
+
|
|
134
|
+
@property
|
|
135
|
+
def t(self) -> np.ndarray:
|
|
136
|
+
"""Time step [s]."""
|
|
137
|
+
return np.arange(0, self.duration, self.dt)
|
|
138
|
+
|
|
139
|
+
@property
|
|
140
|
+
def shape(self) -> tuple[int, int, int] | tuple[int, int]:
|
|
141
|
+
"""Shape of the grid."""
|
|
142
|
+
return (self.nx, self.ny, self.nz) if len(self.domain_size) == 3 else (self.nx, self.ny)
|
|
143
|
+
|
|
144
|
+
def print_info(self) -> None:
|
|
145
|
+
"""Print grid information."""
|
|
146
|
+
print(str(self))
|
|
147
|
+
|
|
148
|
+
def summary(self) -> None:
|
|
149
|
+
"""Alias for print_info."""
|
|
150
|
+
self.print_info()
|
|
151
|
+
|
|
152
|
+
def __str__(self) -> str:
|
|
153
|
+
"""Print string representation of the Grid object.
|
|
154
|
+
|
|
155
|
+
Returns
|
|
156
|
+
-------
|
|
157
|
+
str
|
|
158
|
+
String representation of the Grid object.
|
|
159
|
+
|
|
160
|
+
"""
|
|
161
|
+
domain_size_str_desc = (
|
|
162
|
+
" Domain size (axial, lateral, elevational) (grid.domain_size): "
|
|
163
|
+
if self.is_3d
|
|
164
|
+
else " Domain size (axial, lateral) (grid.domain_size): "
|
|
165
|
+
)
|
|
166
|
+
domain_size_str = (
|
|
167
|
+
(
|
|
168
|
+
f"({self.domain_size[0]:.2e} m, "
|
|
169
|
+
f"{self.domain_size[1]:.2e} m, "
|
|
170
|
+
f"{self.domain_size[2]:.2e} m)"
|
|
171
|
+
)
|
|
172
|
+
if self.is_3d
|
|
173
|
+
else f"({self.domain_size[0]:.2e} m, {self.domain_size[1]:.2e} m)"
|
|
174
|
+
)
|
|
175
|
+
grid_spacing_str_desc = (
|
|
176
|
+
" Grid spacing (grid.dx, grid.dy, grid.dz): "
|
|
177
|
+
if self.is_3d
|
|
178
|
+
else " Grid spacing (grid.dx, grid.dy): "
|
|
179
|
+
)
|
|
180
|
+
grid_spacing_str = (
|
|
181
|
+
f"({self.dx * 1e3:.2e} m, {self.dy * 1e3:.2e} m, {self.dz * 1e3:.2e} m)"
|
|
182
|
+
if self.is_3d
|
|
183
|
+
else f"({self.dx * 1e3:.2e} m, {self.dy * 1e3:.2e} m)"
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
num_grid_points_str_desc = (
|
|
187
|
+
" Number of grid points (grid.nx, grid.ny, grid.nz): "
|
|
188
|
+
if self.is_3d
|
|
189
|
+
else " Number of grid points (grid.nx, grid.ny): "
|
|
190
|
+
)
|
|
191
|
+
num_grid_points_str = (
|
|
192
|
+
f"({self.nx}, {self.ny}, {self.nz})" if self.is_3d else f"({self.nx}, {self.ny})"
|
|
193
|
+
)
|
|
194
|
+
return (
|
|
195
|
+
"Grid Information:\n" + domain_size_str_desc + domain_size_str + "\n"
|
|
196
|
+
f" Center frequency: (grid.f0) {self.f0 / 1e6} MHz\n"
|
|
197
|
+
f" Duration: (grid.duration) {self.duration:.2e} s\n"
|
|
198
|
+
f" Speed of sound (grid.c0): {self.c0} m/s\n"
|
|
199
|
+
f" Points per wavelength (PPW) (grid.ppw): {self.ppw}\n"
|
|
200
|
+
f" Courant-Friedrichs-Lewy (CFL) number (grid.cfl): {self.cfl}\n"
|
|
201
|
+
f" Wavelength (grid.wavelength): {self.wavelength * 1e3:.2e} m\n"
|
|
202
|
+
+ grid_spacing_str_desc
|
|
203
|
+
+ grid_spacing_str
|
|
204
|
+
+ "\n"
|
|
205
|
+
+ num_grid_points_str_desc
|
|
206
|
+
+ num_grid_points_str
|
|
207
|
+
+ "\n"
|
|
208
|
+
+ f" Time step (grid.dt): {self.dt:.2e} sec\n"
|
|
209
|
+
f" Number of time steps (grid.nt): {self.nt}\n"
|
|
210
|
+
f" is 3D simulation (grid.is_3d): {self.is_3d}"
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
def __repr__(self) -> str:
|
|
214
|
+
"""Print string representation of the Grid object.
|
|
215
|
+
|
|
216
|
+
Returns
|
|
217
|
+
-------
|
|
218
|
+
str
|
|
219
|
+
String representation of the Grid object.
|
|
220
|
+
|
|
221
|
+
"""
|
|
222
|
+
return self.__str__()
|