fullwave25 1.4.1.dev0__tar.gz → 1.4.1.dev2__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.
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/.bumpversion.toml +1 -1
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/PKG-INFO +30 -11
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/README.md +28 -10
- fullwave25-1.4.1.dev2/docker/Dockerfile +59 -0
- fullwave25-1.4.1.dev2/docker/Dockerfile.dockerignore +10 -0
- fullwave25-1.4.1.dev2/docker/README.md +78 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/__init__.py +1 -1
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/binary_manager.py +1 -1
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/pyproject.toml +3 -1
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/uv.lock +328 -245
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/.gitignore +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/.pre-commit-config.yaml +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/.python-version +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/CITATION.cff +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/CONTRIBUTING.md +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/LICENSE +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/Makefile +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/attenuation.png +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/beamformer.m +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/debug_solver_bin/fullwave2_2d_2_relax_multi_gpu_cuda124 +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/debug_solver_bin/fullwave2_2d_exponential_attenuation_multi_gpu +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/debug_solver_bin/fullwave2_2d_exponential_attenuation_multi_gpu_cuda124 +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/debug_solver_bin/fullwave2_2d_exponential_attenuation_multi_gpu_cuda124_ +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/debug_solver_bin/fullwave2_3d_exponential_attenuation_multi_gpu_cuda124 +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/debug_solver_bin/fullwave2_3d_exponential_attenuation_multi_gpu_cuda124_ +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/experiments/__init__.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/experiments/exp_scatterer_diameter.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/beamformer/__init__.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/beamformer/beamformer.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/constants/__init__.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/constants/material_properties.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/grid.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/medium.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/medium_builder/__init__.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/medium_builder/domain.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/medium_builder/medium_builder.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/medium_builder/presets/__init__.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/medium_builder/presets/data/.keep +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/medium_builder/presets/data/abdominal_wall/i2365f_etfw1.mat +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/medium_builder/presets/domain_abdominal_wall.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/medium_builder/presets/domain_background.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/medium_builder/presets/domain_scatterer.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/medium_builder/presets/domain_simple.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/medium_builder/presets/domain_water_gel.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/sensor.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/__init__.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/bins/_gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_cuda118 +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/bins/_gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_cuda124 +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/bins/_gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_cuda129 +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/bins/_gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_cuda130 +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/bins/_gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_cuda118 +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/bins/_gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_cuda124 +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/bins/_gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_cuda129 +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/bins/_gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_cuda130 +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/bins/database/relaxation_params_database_num_relax=3_20260828_1513.mat +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/bins/database/relaxation_params_database_num_relax=3_20260828_1513_invalid_cells.json +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/bins/database/relaxation_params_database_num_relax=4_20260828_1456.mat +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/bins/database/relaxation_params_database_num_relax=4_20260828_1456_invalid_cells.json +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/cuda_utils.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/input_file_writer.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/launcher.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/pml_builder.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/shipped_database.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/solver.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/source_type.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/solver/utils.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/source.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/transducer.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/transmit.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/utils/__init__.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/utils/check_functions.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/utils/coordinates.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/utils/memory_tempfile.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/utils/numerical.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/utils/plot_utils.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/utils/pulse.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/utils/relaxation_parameters.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/utils/scatterer.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/utils/signal_filter.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/fullwave/utils/signal_process.py +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/ruff.toml +0 -0
- {fullwave25-1.4.1.dev0 → fullwave25-1.4.1.dev2}/signal_filter_example.png +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: fullwave25
|
|
3
|
-
Version: 1.4.1-
|
|
3
|
+
Version: 1.4.1-dev2
|
|
4
4
|
Summary: Fullwave 2.5: Ultrasound wave propagation simulation with heterogeneous power law attenuation modelling capabilities
|
|
5
5
|
Author: Masashi Sode, Gianmarco Pinton
|
|
6
6
|
Maintainer: Masashi Sode
|
|
@@ -19,6 +19,7 @@ Requires-Dist: numba>=0.63.1
|
|
|
19
19
|
Requires-Dist: numexpr>=2.14.1
|
|
20
20
|
Requires-Dist: numpy>=2.0.0
|
|
21
21
|
Requires-Dist: opencv-python-headless>=4.12.0.88
|
|
22
|
+
Requires-Dist: pillow>=12.3.0
|
|
22
23
|
Requires-Dist: scipy>=1.13.1
|
|
23
24
|
Requires-Dist: tomli>=2.3.0
|
|
24
25
|
Requires-Dist: tqdm>=4.67.1
|
|
@@ -96,6 +97,34 @@ Fullwave 2.5 is developed and maintained by [Pinton Lab](https://github.com/pint
|
|
|
96
97
|
If you use Fullwave 2.5 in your research, please cite this repository as:
|
|
97
98
|
|
|
98
99
|
```bibtex
|
|
100
|
+
@ARTICLE{Sode2026-rd,
|
|
101
|
+
title = {Spatially heterogeneous power-law attenuation with multiple
|
|
102
|
+
relaxation mechanisms for ultrasound modeling},
|
|
103
|
+
author = {Sode, Masashi and Pinton, Gianmarco},
|
|
104
|
+
journaltitle = {arXiv [physics.med-ph]},
|
|
105
|
+
date = {2026},
|
|
106
|
+
eprint = {2606.11103},
|
|
107
|
+
eprinttype = {arXiv},
|
|
108
|
+
eprintclass = {physics.med-ph},
|
|
109
|
+
url = {http://arxiv.org/abs/2606.11103},
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
@ARTICLE{Sode2026-fullwave2,
|
|
113
|
+
title = "{A fullwave model of the nonlinear wave equation with multiple
|
|
114
|
+
relaxations and relaxing perfectly matched layers for high-order
|
|
115
|
+
numerical finite difference solutions}",
|
|
116
|
+
author = "Sode, Masashi and Pinton, Gianmarco",
|
|
117
|
+
journal = "Phys. Med. Biol.",
|
|
118
|
+
publisher = "IOP Publishing",
|
|
119
|
+
month = "27~" # jul,
|
|
120
|
+
year = 2026,
|
|
121
|
+
url = "http://dx.doi.org/10.1088/1361-6560/ae9116",
|
|
122
|
+
doi = "10.1088/1361-6560/ae9116",
|
|
123
|
+
issn = "0031-9155,1361-6560",
|
|
124
|
+
language = "en"
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
|
|
99
128
|
@software{Sode2025-fullwave25,
|
|
100
129
|
author = {Sode, Masashi and Pinton, Gianmarco},
|
|
101
130
|
title = {{Fullwave 2.5: Ultrasound wave propagation simulation with heterogeneous power law attenuation modelling capabilities}},
|
|
@@ -105,16 +134,6 @@ If you use Fullwave 2.5 in your research, please cite this repository as:
|
|
|
105
134
|
url = {https://github.com/pinton-lab/fullwave25},
|
|
106
135
|
}
|
|
107
136
|
|
|
108
|
-
@ARTICLE{Pinton2021-fullwave2,
|
|
109
|
-
title = "A fullwave model of the nonlinear wave equation with multiple relaxations and relaxing perfectly matched layers for high-order numerical finite-difference solutions",
|
|
110
|
-
author = "Pinton, Gianmarco",
|
|
111
|
-
month = jun,
|
|
112
|
-
year = 2021,
|
|
113
|
-
copyright = "http://creativecommons.org/licenses/by/4.0/",
|
|
114
|
-
archivePrefix = "arXiv",
|
|
115
|
-
primaryClass = "physics.med-ph",
|
|
116
|
-
eprint = "2106.11476"
|
|
117
|
-
}
|
|
118
137
|
```
|
|
119
138
|
|
|
120
139
|
---
|
|
@@ -56,6 +56,34 @@ Fullwave 2.5 is developed and maintained by [Pinton Lab](https://github.com/pint
|
|
|
56
56
|
If you use Fullwave 2.5 in your research, please cite this repository as:
|
|
57
57
|
|
|
58
58
|
```bibtex
|
|
59
|
+
@ARTICLE{Sode2026-rd,
|
|
60
|
+
title = {Spatially heterogeneous power-law attenuation with multiple
|
|
61
|
+
relaxation mechanisms for ultrasound modeling},
|
|
62
|
+
author = {Sode, Masashi and Pinton, Gianmarco},
|
|
63
|
+
journaltitle = {arXiv [physics.med-ph]},
|
|
64
|
+
date = {2026},
|
|
65
|
+
eprint = {2606.11103},
|
|
66
|
+
eprinttype = {arXiv},
|
|
67
|
+
eprintclass = {physics.med-ph},
|
|
68
|
+
url = {http://arxiv.org/abs/2606.11103},
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@ARTICLE{Sode2026-fullwave2,
|
|
72
|
+
title = "{A fullwave model of the nonlinear wave equation with multiple
|
|
73
|
+
relaxations and relaxing perfectly matched layers for high-order
|
|
74
|
+
numerical finite difference solutions}",
|
|
75
|
+
author = "Sode, Masashi and Pinton, Gianmarco",
|
|
76
|
+
journal = "Phys. Med. Biol.",
|
|
77
|
+
publisher = "IOP Publishing",
|
|
78
|
+
month = "27~" # jul,
|
|
79
|
+
year = 2026,
|
|
80
|
+
url = "http://dx.doi.org/10.1088/1361-6560/ae9116",
|
|
81
|
+
doi = "10.1088/1361-6560/ae9116",
|
|
82
|
+
issn = "0031-9155,1361-6560",
|
|
83
|
+
language = "en"
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
|
|
59
87
|
@software{Sode2025-fullwave25,
|
|
60
88
|
author = {Sode, Masashi and Pinton, Gianmarco},
|
|
61
89
|
title = {{Fullwave 2.5: Ultrasound wave propagation simulation with heterogeneous power law attenuation modelling capabilities}},
|
|
@@ -65,16 +93,6 @@ If you use Fullwave 2.5 in your research, please cite this repository as:
|
|
|
65
93
|
url = {https://github.com/pinton-lab/fullwave25},
|
|
66
94
|
}
|
|
67
95
|
|
|
68
|
-
@ARTICLE{Pinton2021-fullwave2,
|
|
69
|
-
title = "A fullwave model of the nonlinear wave equation with multiple relaxations and relaxing perfectly matched layers for high-order numerical finite-difference solutions",
|
|
70
|
-
author = "Pinton, Gianmarco",
|
|
71
|
-
month = jun,
|
|
72
|
-
year = 2021,
|
|
73
|
-
copyright = "http://creativecommons.org/licenses/by/4.0/",
|
|
74
|
-
archivePrefix = "arXiv",
|
|
75
|
-
primaryClass = "physics.med-ph",
|
|
76
|
-
eprint = "2106.11476"
|
|
77
|
-
}
|
|
78
96
|
```
|
|
79
97
|
|
|
80
98
|
---
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# fullwave25 with the released solver binaries, for Linux systems whose glibc is older than
|
|
2
|
+
# the binaries need (2.34, for example Ubuntu 20.04 or RHEL 8).
|
|
3
|
+
#
|
|
4
|
+
# Build from the repository root:
|
|
5
|
+
# docker build -f docker/Dockerfile -t fullwave25 .
|
|
6
|
+
#
|
|
7
|
+
# See docker/README.md for how to run it with Docker or Apptainer.
|
|
8
|
+
|
|
9
|
+
FROM ubuntu:22.04
|
|
10
|
+
|
|
11
|
+
# The release tag of the solver binaries, and the CUDA versions to include. The wrapper
|
|
12
|
+
# picks the binary that matches the CUDA version of the host driver.
|
|
13
|
+
ARG FULLWAVE_BIN_TAG=fullwave_bin_v1.5.2
|
|
14
|
+
ARG FULLWAVE_BIN_CUDA_VERSIONS="118 124 129 130"
|
|
15
|
+
ARG PYTHON_VERSION=3.12
|
|
16
|
+
|
|
17
|
+
ENV DEBIAN_FRONTEND=noninteractive
|
|
18
|
+
RUN apt-get update \
|
|
19
|
+
&& apt-get install -y --no-install-recommends ca-certificates curl ffmpeg \
|
|
20
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
21
|
+
|
|
22
|
+
COPY --from=ghcr.io/astral-sh/uv:0.9.9 /uv /usr/local/bin/uv
|
|
23
|
+
|
|
24
|
+
ENV UV_PYTHON_INSTALL_DIR=/opt/python \
|
|
25
|
+
UV_LINK_MODE=copy \
|
|
26
|
+
UV_COMPILE_BYTECODE=1 \
|
|
27
|
+
VIRTUAL_ENV=/opt/venv \
|
|
28
|
+
PATH=/opt/venv/bin:${PATH}
|
|
29
|
+
RUN uv venv --python ${PYTHON_VERSION} /opt/venv
|
|
30
|
+
|
|
31
|
+
COPY . /opt/fullwave25-src
|
|
32
|
+
# The [ctk] extra installs the CUDA libraries and headers that CuPy needs at run time.
|
|
33
|
+
RUN uv pip install --no-cache /opt/fullwave25-src \
|
|
34
|
+
&& uv pip install --no-cache "cupy-cuda12x[ctk]==$(python -c "import importlib.metadata as m; print(m.version('cupy-cuda12x'))")"
|
|
35
|
+
|
|
36
|
+
# Put the solver binaries where the installed package looks first, so a run needs no
|
|
37
|
+
# download and works when the home directory is mounted from the host (Apptainer).
|
|
38
|
+
RUN set -eu; \
|
|
39
|
+
bins="$(python -c "import importlib.util; print(importlib.util.find_spec('fullwave').submodule_search_locations[0])")/solver/bins"; \
|
|
40
|
+
url="https://github.com/pinton-lab/fullwave25/releases/download/${FULLWAVE_BIN_TAG}"; \
|
|
41
|
+
for cuda in ${FULLWAVE_BIN_CUDA_VERSIONS}; do \
|
|
42
|
+
for dim in 2d 3d; do \
|
|
43
|
+
mkdir -p "${bins}/gpu/${dim}" "${bins}/exponential_attenuation/gpu/${dim}"; \
|
|
44
|
+
curl -fsSL -o "${bins}/gpu/${dim}/fullwave2_${dim}_n_relax_multi_gpu_cuda${cuda}" \
|
|
45
|
+
"${url}/fullwave2_${dim}_n_relax_multi_gpu_cuda${cuda}"; \
|
|
46
|
+
curl -fsSL -o "${bins}/exponential_attenuation/gpu/${dim}/fullwave2_${dim}_exponential_attenuation_multi_gpu_cuda${cuda}" \
|
|
47
|
+
"${url}/fullwave2_${dim}_exponential_attenuation_multi_gpu_cuda${cuda}"; \
|
|
48
|
+
done; \
|
|
49
|
+
done; \
|
|
50
|
+
chmod 755 "${bins}"/gpu/*/* "${bins}"/exponential_attenuation/gpu/*/*; \
|
|
51
|
+
echo "${FULLWAVE_BIN_TAG}" > "${bins}/RELEASE_TAG"
|
|
52
|
+
|
|
53
|
+
# A container started with --user has no home of its own, so the caches of CuPy,
|
|
54
|
+
# matplotlib and numba go to /tmp. Apptainer sets HOME to the host home instead.
|
|
55
|
+
ENV HOME=/tmp \
|
|
56
|
+
NUMBA_CACHE_DIR=/tmp/numba
|
|
57
|
+
|
|
58
|
+
WORKDIR /work
|
|
59
|
+
CMD ["python"]
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# fullwave25 in a container
|
|
2
|
+
|
|
3
|
+
The released solver binaries need glibc 2.34 or newer (for example Ubuntu 22.04, Debian 12 or RHEL 9). On an older system, such as Ubuntu 20.04 or RHEL 8, they stop at start with an error like:
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
This image runs fullwave25 and the released solver binaries on such a system. The host needs only an NVIDIA driver for CUDA 12.0 or newer, and Docker with the NVIDIA Container Toolkit, or Apptainer.
|
|
10
|
+
|
|
11
|
+
The image contains:
|
|
12
|
+
|
|
13
|
+
- Ubuntu 22.04
|
|
14
|
+
- Python 3.12 and fullwave25, installed from this repository checkout, with the CUDA 12 libraries that CuPy needs
|
|
15
|
+
- the solver binaries of the release `fullwave_bin_v1.5.2`, for CUDA 11.8, 12.4, 12.9 and 13.0
|
|
16
|
+
- `ffmpeg`, for the video export of the plotting functions
|
|
17
|
+
|
|
18
|
+
## Build
|
|
19
|
+
|
|
20
|
+
Run from the repository root:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
docker build -f docker/Dockerfile -t fullwave25 .
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
To use another release of the solver binaries:
|
|
27
|
+
|
|
28
|
+
```sh
|
|
29
|
+
docker build -f docker/Dockerfile -t fullwave25 --build-arg FULLWAVE_BIN_TAG=<release tag> .
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Run with Docker
|
|
33
|
+
|
|
34
|
+
Mount your working directory at `/work` and run your script there. The outputs are written to your working directory, owned by your user.
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
docker run --rm --gpus all --user "$(id -u):$(id -g)" \
|
|
38
|
+
-v "$PWD":/work fullwave25 python my_simulation.py
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
If `--gpus all` is not available, use `--device nvidia.com/gpu=all` (CDI).
|
|
42
|
+
|
|
43
|
+
To use selected GPUs, pass them to fullwave25 as usual with `cuda_device_id` in `fullwave.Solver`.
|
|
44
|
+
|
|
45
|
+
## Run with Apptainer
|
|
46
|
+
|
|
47
|
+
Apptainer runs the same image without Docker. Build the image on a machine with Docker, and save it to a file:
|
|
48
|
+
|
|
49
|
+
```sh
|
|
50
|
+
docker save fullwave25 -o fullwave25.tar
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Copy `fullwave25.tar` to the target machine, and convert it there:
|
|
54
|
+
|
|
55
|
+
```sh
|
|
56
|
+
apptainer build fullwave25.sif docker-archive://fullwave25.tar
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
The saved image is about 4.3 GB and the `.sif` file about 2.3 GB, and the conversion needs temporary space of several GB in addition. If `/tmp` is small, set `APPTAINER_TMPDIR` and `APPTAINER_CACHEDIR` to a folder on a larger disk.
|
|
60
|
+
|
|
61
|
+
Then run your script. `--nv` gives the container the GPUs and the driver of the host. Apptainer mounts your home and the current directory by default.
|
|
62
|
+
|
|
63
|
+
```sh
|
|
64
|
+
apptainer exec --nv fullwave25.sif python my_simulation.py
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
If Apptainer prints `Error changing the container working directory`, your working directory is reached through a link to another disk. Run from its real path:
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
cd "$(pwd -P)"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Check the installation
|
|
74
|
+
|
|
75
|
+
```sh
|
|
76
|
+
apptainer exec --nv fullwave25.sif python -c "import fullwave; print(fullwave.__version__)"
|
|
77
|
+
docker run --rm --gpus all fullwave25 nvidia-smi -L
|
|
78
|
+
```
|
|
@@ -66,7 +66,7 @@ try:
|
|
|
66
66
|
__version__ = version("fullwave")
|
|
67
67
|
except PackageNotFoundError:
|
|
68
68
|
# Update via bump-my-version, not manually
|
|
69
|
-
__version__ = "1.4.1-
|
|
69
|
+
__version__ = "1.4.1-dev2"
|
|
70
70
|
|
|
71
71
|
VERSION = __version__ # for convenience
|
|
72
72
|
logger.info("Fullwave version: %s", __version__)
|
|
@@ -28,7 +28,7 @@ CACHE_DIR = Path.home() / ".cache" / "fullwave25" / "bins"
|
|
|
28
28
|
|
|
29
29
|
# Pinned release tag for the solver binaries.
|
|
30
30
|
# Update this only when new binaries are uploaded to a GitHub release.
|
|
31
|
-
BINARY_RELEASE_TAG = "fullwave_bin_v1.5.
|
|
31
|
+
BINARY_RELEASE_TAG = "fullwave_bin_v1.5.2"
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
def _download_url(filename: str, tag: str) -> str:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "fullwave25"
|
|
3
|
-
version = "1.4.1-
|
|
3
|
+
version = "1.4.1-dev2" # Update via bump-my-version, not manually
|
|
4
4
|
description = "Fullwave 2.5: Ultrasound wave propagation simulation with heterogeneous power law attenuation modelling capabilities"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.10"
|
|
@@ -14,6 +14,8 @@ dependencies = [
|
|
|
14
14
|
"numba>=0.63.1",
|
|
15
15
|
"numexpr>=2.14.1",
|
|
16
16
|
"cupy-cuda12x>=13.6.0",
|
|
17
|
+
# Pillow comes in through matplotlib; releases before 12.3.0 have known security advisories.
|
|
18
|
+
"pillow>=12.3.0",
|
|
17
19
|
]
|
|
18
20
|
authors = [{ name = "Masashi Sode" }, { name = "Gianmarco Pinton" }]
|
|
19
21
|
maintainers = [{ name = "Masashi Sode" }]
|