DeepGPR 0.0.7__tar.gz → 0.0.8__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.
Files changed (41) hide show
  1. deepgpr-0.0.8/.gitignore +7 -0
  2. deepgpr-0.0.8/CMakeLists.txt +70 -0
  3. deepgpr-0.0.8/Fig/2dfwiinit.png +0 -0
  4. deepgpr-0.0.8/Fig/2dfwipred.png +0 -0
  5. deepgpr-0.0.8/Fig/2dfwitrue.png +0 -0
  6. deepgpr-0.0.8/Fig/3dfwiinit.png +0 -0
  7. deepgpr-0.0.8/Fig/3dfwipred.png +0 -0
  8. deepgpr-0.0.8/Fig/3dfwitrue.png +0 -0
  9. deepgpr-0.0.8/Fig/example.png +0 -0
  10. {deepgpr-0.0.7/src/DeepGPR.egg-info → deepgpr-0.0.8}/PKG-INFO +41 -8
  11. deepgpr-0.0.7/PKG-INFO → deepgpr-0.0.8/README.md +34 -15
  12. deepgpr-0.0.8/examples/1.Forward.ipynb +95 -0
  13. deepgpr-0.0.8/examples/2.2DFWI.ipynb +579 -0
  14. deepgpr-0.0.8/examples/2DFWImodel.npy +0 -0
  15. deepgpr-0.0.8/examples/3.3DFWI.ipynb +842 -0
  16. deepgpr-0.0.8/examples/OverThrust.npy +0 -0
  17. deepgpr-0.0.8/license +21 -0
  18. deepgpr-0.0.8/pyproject.toml +52 -0
  19. deepgpr-0.0.8/src/DeepGPR/DeepGPR.egg-info/PKG-INFO +85 -0
  20. deepgpr-0.0.8/src/DeepGPR/DeepGPR.egg-info/SOURCES.txt +6 -0
  21. deepgpr-0.0.8/src/DeepGPR/DeepGPR.egg-info/top_level.txt +1 -0
  22. deepgpr-0.0.8/src/DeepGPR/__init__.py +199 -0
  23. deepgpr-0.0.8/src/DeepGPR/__pycache__/__init__.cpython-310.pyc +0 -0
  24. deepgpr-0.0.8/src/DeepGPR/__pycache__/common.cpython-310.pyc +0 -0
  25. deepgpr-0.0.8/src/DeepGPR/__pycache__/compute2.cpython-310.pyc +0 -0
  26. deepgpr-0.0.8/src/DeepGPR/__pycache__/multiscale.cpython-310.pyc +0 -0
  27. deepgpr-0.0.8/src/DeepGPR/__pycache__/visual.cpython-310.pyc +0 -0
  28. {deepgpr-0.0.7 → deepgpr-0.0.8}/src/DeepGPR/lib/deepgpr.cu +9 -6
  29. deepgpr-0.0.8/src/DeepGPR/requirements.txt +1 -0
  30. deepgpr-0.0.7/README.md +0 -217
  31. deepgpr-0.0.7/pyproject.toml +0 -25
  32. deepgpr-0.0.7/setup.cfg +0 -4
  33. deepgpr-0.0.7/src/DeepGPR/__init__.py +0 -139
  34. deepgpr-0.0.7/src/DeepGPR/lib/deepgpr.so +0 -0
  35. deepgpr-0.0.7/src/DeepGPR.egg-info/SOURCES.txt +0 -13
  36. deepgpr-0.0.7/src/DeepGPR.egg-info/top_level.txt +0 -1
  37. {deepgpr-0.0.7/src → deepgpr-0.0.8/src/DeepGPR}/DeepGPR.egg-info/dependency_links.txt +0 -0
  38. {deepgpr-0.0.7 → deepgpr-0.0.8}/src/DeepGPR/common.py +0 -0
  39. {deepgpr-0.0.7 → deepgpr-0.0.8}/src/DeepGPR/compute2.py +0 -0
  40. {deepgpr-0.0.7 → deepgpr-0.0.8}/src/DeepGPR/multiscale.py +0 -0
  41. {deepgpr-0.0.7 → deepgpr-0.0.8}/src/DeepGPR/wavelet.py +0 -0
@@ -0,0 +1,7 @@
1
+ lib/deepgpr.so
2
+ __pycache__/
3
+ dist/
4
+ build/
5
+ .vscode/
6
+ *.egg-info/
7
+ pyproject.toml
@@ -0,0 +1,70 @@
1
+ cmake_minimum_required(VERSION 3.23)
2
+
3
+ project(DeepGPR LANGUAGES CUDA)
4
+
5
+ # ============================================================
6
+ # DeepGPR GPU-only build
7
+ # This CMake file only builds the CUDA backend library.
8
+ # No CPU backend is included.
9
+ # ============================================================
10
+
11
+ find_package(CUDAToolkit REQUIRED)
12
+
13
+ if(NOT CMAKE_BUILD_TYPE)
14
+ set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
15
+ endif()
16
+
17
+ set(DEEPGPR_PACKAGE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/DeepGPR")
18
+ set(DEEPGPR_LIB_DIR "${DEEPGPR_PACKAGE_DIR}/lib")
19
+ set(DEEPGPR_CUDA_SOURCE "${DEEPGPR_LIB_DIR}/deepgpr.cu")
20
+
21
+ if(NOT EXISTS "${DEEPGPR_CUDA_SOURCE}")
22
+ message(FATAL_ERROR "CUDA source file not found: ${DEEPGPR_CUDA_SOURCE}")
23
+ endif()
24
+
25
+ add_library(deepgpr SHARED
26
+ "${DEEPGPR_CUDA_SOURCE}"
27
+ )
28
+
29
+ # Generate:
30
+ # Linux: deepgpr.so
31
+ # Windows: deepgpr.dll
32
+ # Do not generate libdeepgpr.so on Linux.
33
+ set_target_properties(deepgpr PROPERTIES
34
+ PREFIX ""
35
+ OUTPUT_NAME "deepgpr"
36
+ POSITION_INDEPENDENT_CODE ON
37
+ CUDA_SEPARABLE_COMPILATION ON
38
+ CUDA_RESOLVE_DEVICE_SYMBOLS ON
39
+ WINDOWS_EXPORT_ALL_SYMBOLS ON
40
+ )
41
+
42
+ target_link_libraries(deepgpr PRIVATE CUDA::cudart)
43
+
44
+ target_compile_options(deepgpr PRIVATE
45
+ $<$<COMPILE_LANGUAGE:CUDA>:--use_fast_math>
46
+ $<$<COMPILE_LANGUAGE:CUDA>:-O3>
47
+ )
48
+
49
+ if(WIN32)
50
+ target_compile_options(deepgpr PRIVATE
51
+ $<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=/MD>
52
+ )
53
+ else()
54
+ target_compile_definitions(deepgpr PRIVATE _GLIBCXX_USE_CXX11_ABI=0)
55
+ endif()
56
+
57
+ # Install the compiled shared library into the Python package.
58
+ install(TARGETS deepgpr
59
+ LIBRARY DESTINATION DeepGPR/lib
60
+ RUNTIME DESTINATION DeepGPR/lib
61
+ ARCHIVE DESTINATION DeepGPR/lib
62
+ )
63
+
64
+ # Also include the CUDA source file in the package.
65
+ install(FILES "${DEEPGPR_CUDA_SOURCE}"
66
+ DESTINATION DeepGPR/lib
67
+ )
68
+
69
+ message(STATUS "DeepGPR CUDA source: ${DEEPGPR_CUDA_SOURCE}")
70
+ message(STATUS "DeepGPR will install CUDA backend to: DeepGPR/lib")
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,12 +1,15 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.2
2
2
  Name: DeepGPR
3
- Version: 0.0.7
3
+ Version: 0.0.8
4
4
  Summary: PyTorch and CUDA for GPR FWI
5
- Author-email: Lei Liu <liulei990222@gmail.com>
5
+ Author-Email: Lei Liu <liulei990222@gmail.com>
6
6
  Classifier: Programming Language :: Python :: 3
7
7
  Classifier: Operating System :: Microsoft :: Windows
8
8
  Classifier: Operating System :: POSIX :: Linux
9
- Requires-Python: >=3.7
9
+ Requires-Python: >=3.8
10
+ Requires-Dist: numpy
11
+ Requires-Dist: scipy
12
+ Requires-Dist: matplotlib
10
13
  Description-Content-Type: text/markdown
11
14
 
12
15
  # DeepGPR
@@ -30,10 +33,40 @@ Supports techniques such as checkpointing, DDP, and the utilization of CPU memor
30
33
  ## System Requirements
31
34
 
32
35
  - **OS**: Linux and Windows
33
- - **Environment**: Python 3.8+, CUDA Toolkit
34
- - **Libraries**: `torch` (with CUDA support), `numpy`, `scipy`, `matplotlib`
35
- - **Hardware**: NVIDIA GPU with sufficient VRAM for 3D computational grids.
36
+ - **Python**: Python 3.8+
37
+ - **GPU**: NVIDIA GPU with sufficient VRAM for 2D/3D computational grids
38
+ - **CUDA**: NVIDIA driver and CUDA Toolkit
39
+ - **Libraries**:
40
+ - `torch` with CUDA support
41
+ - `numpy`
42
+ - `scipy`
43
+ - `matplotlib`
36
44
 
45
+ ### Additional Requirements for Building from Source
46
+
47
+ DeepGPR contains a CUDA backend that is compiled during installation. Therefore, users who install the package from source need a working CUDA/C++ build environment.
48
+
49
+ #### Linux
50
+
51
+ - CUDA Toolkit with `nvcc`
52
+ - GCC/G++ compiler compatible with the installed CUDA version
53
+ - CMake 3.23 or later
54
+
55
+ #### Windows
56
+
57
+ - CUDA Toolkit with `nvcc`
58
+ - CMake 3.23 or later
59
+ - Microsoft Visual Studio Build Tools or Visual Studio Community
60
+ - The **Desktop development with C++** workload
61
+ - MSVC C++ compiler `cl.exe`
62
+ - Windows SDK
63
+ - Optional: `ninja`
64
+
65
+ On Windows, `nvcc` relies on the MSVC compiler to build CUDA code. Please make sure that both `nvcc` and `cl.exe` are available before running:
66
+
67
+ ```bash
68
+ pip install .
69
+ ```
37
70
 
38
71
  ## Start
39
72
 
@@ -225,4 +258,4 @@ If you find our codes useful, please kindly cite this article. Thanks.
225
258
 
226
259
  publisher={Elsevier}
227
260
 
228
- }
261
+ }
@@ -1,14 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: DeepGPR
3
- Version: 0.0.7
4
- Summary: PyTorch and CUDA for GPR FWI
5
- Author-email: Lei Liu <liulei990222@gmail.com>
6
- Classifier: Programming Language :: Python :: 3
7
- Classifier: Operating System :: Microsoft :: Windows
8
- Classifier: Operating System :: POSIX :: Linux
9
- Requires-Python: >=3.7
10
- Description-Content-Type: text/markdown
11
-
12
1
  # DeepGPR
13
2
 
14
3
  DeepGPR provides a wave propagation module for PyTorch, designed for applications such as Ground Penetrating Radar (GPR) imaging and inversion. Its core concepts are derived from Deepwave. You can use it to perform both forward modeling and backpropagation—thereby enabling the simulation of wave propagation to generate synthetic data—as well as for Full Waveform Inversion (FWI). Furthermore, you can integrate this wave propagation functionality into a larger operational pipeline—incorporating various wavelets, loss functions, and other components—to achieve end-to-end forward and reverse propagation, powered by automatic differentiation and our high-performance operators.
@@ -30,10 +19,40 @@ Supports techniques such as checkpointing, DDP, and the utilization of CPU memor
30
19
  ## System Requirements
31
20
 
32
21
  - **OS**: Linux and Windows
33
- - **Environment**: Python 3.8+, CUDA Toolkit
34
- - **Libraries**: `torch` (with CUDA support), `numpy`, `scipy`, `matplotlib`
35
- - **Hardware**: NVIDIA GPU with sufficient VRAM for 3D computational grids.
22
+ - **Python**: Python 3.8+
23
+ - **GPU**: NVIDIA GPU with sufficient VRAM for 2D/3D computational grids
24
+ - **CUDA**: NVIDIA driver and CUDA Toolkit
25
+ - **Libraries**:
26
+ - `torch` with CUDA support
27
+ - `numpy`
28
+ - `scipy`
29
+ - `matplotlib`
30
+
31
+ ### Additional Requirements for Building from Source
32
+
33
+ DeepGPR contains a CUDA backend that is compiled during installation. Therefore, users who install the package from source need a working CUDA/C++ build environment.
34
+
35
+ #### Linux
36
+
37
+ - CUDA Toolkit with `nvcc`
38
+ - GCC/G++ compiler compatible with the installed CUDA version
39
+ - CMake 3.23 or later
36
40
 
41
+ #### Windows
42
+
43
+ - CUDA Toolkit with `nvcc`
44
+ - CMake 3.23 or later
45
+ - Microsoft Visual Studio Build Tools or Visual Studio Community
46
+ - The **Desktop development with C++** workload
47
+ - MSVC C++ compiler `cl.exe`
48
+ - Windows SDK
49
+ - Optional: `ninja`
50
+
51
+ On Windows, `nvcc` relies on the MSVC compiler to build CUDA code. Please make sure that both `nvcc` and `cl.exe` are available before running:
52
+
53
+ ```bash
54
+ pip install .
55
+ ```
37
56
 
38
57
  ## Start
39
58
 
@@ -225,4 +244,4 @@ If you find our codes useful, please kindly cite this article. Thanks.
225
244
 
226
245
  publisher={Elsevier}
227
246
 
228
- }
247
+ }
@@ -0,0 +1,95 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 2,
6
+ "id": "7ccfb192",
7
+ "metadata": {},
8
+ "outputs": [
9
+ {
10
+ "name": "stdout",
11
+ "output_type": "stream",
12
+ "text": [
13
+ "CUDA is available. Using device: NVIDIA GeForce RTX 4090\n"
14
+ ]
15
+ },
16
+ {
17
+ "data": {
18
+ "image/png": "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UyN37tzpOMbZZ58tKysr5f79+6WUUj733HMSgBw9erTVFsQTTzwhAcibb77ZaovH4/LYY4+VAOTSpUutdq/x/vKXv0gA8sUXX7Tafv3rX0sActOmTSn9vcaYMWOGHD16dNq5EkIIkbKxsVECkGeccUbKti+++EJ+/vnn1kP9zZ09e7YEIBcsWJCyj9ff5SVLlkghhPz000+ttsMPP1zW1NTIhoYGq+0f//iHBCBHjBjh2B+AvOaaa6zX2f6GHXzwwTIWi1n9fvvb30oA8t1337XaTjnllJTjks6BoUqkRzF9+nQMGjQItbW1+M53voM+ffpg+fLl1l2R3bt345///Ce++93vYs+ePdi5cyd27tyJXbt2YcaMGfjoo4+sKkyPPvooDjvsMMsDYUcIAcC4W3PwwQdj7Nix1lg7d+7E1772NQDAc8895zvXs846C21tbXjsscestn/84x9oaGjAWWedBcDwCjz66KM49dRTIaV0HGPGjBlobGzEm2++6Rh39uzZKCkpSXuu/va3vyEcDuOSSy6x2kKhEC699NKUvvbxWlpasHPnTnz5y18GgJTj+2Efo7GxETt37sRXvvIVbNy4EY2NjRmNQQghvRkVeup1h/3444/HoEGDrMedd97p2G7/W6+w/13et28fdu7ciaOPPhpSSrz11lsAgO3bt2PNmjWYPXs2Kisrrf5f//rXMW7cuMD55vIbdt555zk85SrkeOPGjYHHIp0DQ5VIj+LOO+/El770JTQ2NuLee+/Fiy++6EhK3rBhA6SUuPrqq3H11Vd7jrFjxw4MHToUH3/8MWbOnBl4vI8++ggffPCBFY7jNZYfhx12GMaOHYuHHnoIF1xwAQAjTGngwIGW8Pj888/R0NCAe+65B/fcc09Gxxg1alTgnBWffvopampqUn6ADjrooJS+u3fvxuLFi/Hggw+mHC9To//f//43rrnmGqxatQr79+9PGcP+g0QIISSV8vJyAEYorZs//OEP2LNnD+rr63Huuec6toXDYc+wos2bN2PRokVYvnw5vvjiC8c29bf9008/BQAceOCBKfsfdNBBgTePcvkNGz58uOO1CjV2z48UBgoH0qM46qijrKpKZ5xxBqZNm4bvfe97WL9+PcrKyqDrOgDgZz/7mZVD4OaAAw7I+Hi6rmPChAm49dZbPber5DQ/zjrrLNxwww3YuXMnysvLsXz5cpxzzjlWKTs133PPPdcz9wAADj30UMfrTLwN2fLd734XL7/8Mq644gocfvjh1rk86aSTrDkG8fHHH+OEE07A2LFjceutt6K2thaRSAR/+9vfcNttt2U0BiGE9HYqKytRU1ODtWvXpmxTOQ8qt89ONBpNqbKUSCTw9a9/Hbt378ZVV12FsWPHok+fPti2bRvmzJmTl7/LufyGhUIhz35SynbPh7QfCgfSYwmFQliyZAm++tWv4r/+67+wYMECjB49GgBQVFSE6dOnB+4/ZswYzz/O7j5vv/02TjjhBCt8KRvOOussLF68GI8++iiqqqrQ1NSEs88+29o+aNAglJeXI5FIpJ1vtqhSfnv37nV4HdavX+/o98UXX2DlypVYvHgxFi1aZLV/9NFHKWP6nYP/+7//QywWw/Llyx13k4JCuQghhKRyyimn4E9/+hNee+01HHXUUTmP8+677+LDDz/E/fffjx/84AdW+4oVKxz91FoQXn/z3b8XbjrqNyyX31uSH5jjQHo0xx9/PI466ijcfvvtaGlpweDBg3H88cfjD3/4A7Zv357S//PPP7eez5w5E2+//bZnyTl15+O73/0utm3bhj/+8Y8pfZqbm7Fv377A+R188MGYMGECHnroITz00EOoqanBcccdZ20PhUKYOXMmHn30UU8RY59vtnzjG99APB53lERNJBK44447HP3U3R/33R6vVTtVXXB3SVevMRobG7F06dKc508IIb2RK6+8EqWlpTj//PNRX1+fsj3TO/Nef5ellPjtb3/r6FdTU4PDDz8c999/vyM0dcWKFXj//ffTHqMjfsP69OnD3LgCQY8D6fFcccUVOPPMM3Hffffh4osvxp133olp06ZhwoQJuPDCCzF69GjU19dj1apV2Lp1K95++21rv//93//FmWeeifPPPx+TJk3C7t27sXz5ctx999047LDD8P3vfx8PP/wwLr74Yjz33HM45phjkEgksG7dOjz88MN45plnrNApP8466ywsWrQIxcXFuOCCC1LcyTfeeCOee+45TJkyBRdeeCHGjRuH3bt3480338Szzz6L3bt353ReTj31VBxzzDFYsGABPvnkE4wbNw6PPfZYyh/jiooKHHfccbj55pvR1taGoUOH4h//+Ac2bdqUMuakSZMAGOXyzj77bBQVFeHUU0/FiSeeiEgkglNPPRU//OEPsXfvXvzxj3/E4MGDPQUcIYQQbw488EAsW7YM55xzDg466CBr5WgpJTZt2oRly5ZB07S0pVLHjh2LMWPG4Gc/+xm2bduGiooKPProo565BEuWLMEpp5yCadOm4fzzz8fu3btxxx13YPz48Z75FnY64jds0qRJeOihhzB//nwceeSRKCsrw6mnnpr1OCQHClHKiZB8o8qxvv766ynbEomEHDNmjBwzZoyMx+NSSik//vhj+YMf/EBWV1fLoqIiOXToUPnNb35T/u///q9j3127dsl58+bJoUOHykgkIocNGyZnz57tKCvX2toqb7rpJjl+/HgZjUZlv3795KRJk+TixYtlY2Oj1c9djlXx0UcfSQASgHzppZc83199fb2cO3eurK2tlUVFRbK6ulqecMIJ8p577rH6qFJ2jzzySMbnbdeuXfL73/++rKiokJWVlfL73/++fOutt1LKsW7dulV+61vfkn379pWVlZXyzDPPlJ999llK2T0ppbz++uvl0KFDpaZpjtKsy5cvl4ceeqgsLi6WI0eOlDfddJO89957fcu3EkII8WfDhg3ykksukQcccIAsLi6WJSUlcuzYsfLiiy+Wa9assfrNnj1b9unTx3OM999/X06fPl2WlZXJgQMHygsvvFC+/fbbKb8BUkr56KOPyoMPPlhGo1E5btw4+dhjj8nZs2enLccqZft+wzZt2pQyn71798rvfe97sm/fvp4lYUnHIaRktgkhhBBCCCEkGOY4EEIIIYQQQtJC4UAIIYQQQghJC4UDIYQQQgghJC0UDoQQQgghhJC0UDgQQgghJCPuvPNOjBw5EsXFxZgyZQpee+21Qk+JENKJUDgQQgghJC2qbv4111yDN998E4cddhhmzJiBHTt2FHpqhJBOoleUY9V1HZ999hnKy8u5TDkhhHQiUkrs2bMHQ4YMSVnckHQvpkyZgiOPPBL/9V//BcD4ba2trcWll16KBQsWpN2fv8WEdE2y+TvdK1aO/uyzz1BbW1voaRBCSK9ly5YtaVeyJV2X1tZWrF69GgsXLrTaNE3D9OnTsWrVKs99YrEYYrGY9Xrbtm0YN25ch8+VEJIbmfyd7hXCoby8HIBxQioqKgo8G0II6T00NTWhtrbW+jtMuic7d+5EIpFAVVWVo72qqgrr1q3z3GfJkiVYvHhxSvu0I36KcCjaIfMk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",
19
+ "text/plain": [
20
+ "<Figure size 1000x300 with 2 Axes>"
21
+ ]
22
+ },
23
+ "metadata": {},
24
+ "output_type": "display_data"
25
+ }
26
+ ],
27
+ "source": [
28
+ "import torch\n",
29
+ "import DeepGPR\n",
30
+ "import matplotlib.pyplot as plt\n",
31
+ "\n",
32
+ "try:\n",
33
+ " assert torch.cuda.is_available()\n",
34
+ " print(f\"CUDA is available. Using device: {torch.cuda.get_device_name(0)}\")\n",
35
+ " device = torch.device(\"cuda\")\n",
36
+ "except AssertionError:\n",
37
+ " raise RuntimeError(\"CUDA is not available. Please check your PyTorch installation and GPU setup.\")\n",
38
+ "\n",
39
+ "# Set up the parameters and models\n",
40
+ "dx=0.02\n",
41
+ "dt=3e-11\n",
42
+ "nt=2000\n",
43
+ "er = torch.ones(100, 100,1) * 2 \n",
44
+ "er[50:,:]=5\n",
45
+ "se = torch.zeros_like(er) \n",
46
+ "er.requires_grad_()\n",
47
+ "source_location=torch.tensor([[[10,10,0]]],device=device,dtype=torch.int)\n",
48
+ "receiver_location=torch.tensor([[[10,90,0]]],device=device,dtype=torch.int)\n",
49
+ "freq=2e8\n",
50
+ "peak_time = 1 / freq\n",
51
+ "source_amplitudes = torch.zeros((1,nt,1),device=device)\n",
52
+ "source_amplitudes[0,:,0]=DeepGPR.ricker(freq, nt, dt, peak_time).to(device)\n",
53
+ "\n",
54
+ "#forward modeling\n",
55
+ "r = DeepGPR.compute(\n",
56
+ " device=device, dx=dx, dt=dt, \n",
57
+ " source_amplitudes=source_amplitudes,\n",
58
+ " source_location=source_location, \n",
59
+ " receiver_location=receiver_location, \n",
60
+ " er=er, se=se\n",
61
+ ")\n",
62
+ "\n",
63
+ "(r[-1]**2).sum().backward()\n",
64
+ "\n",
65
+ "_, ax = plt.subplots(1, 2, figsize=(10, 3))\n",
66
+ "ax[0].plot(r[-1].detach().flatten().cpu().numpy())\n",
67
+ "ax[0].set_title(\"Receiver data\")\n",
68
+ "ax[1].imshow(er.grad.detach())\n",
69
+ "ax[1].set_title(\"Gradient\")\n",
70
+ "plt.show()\n"
71
+ ]
72
+ }
73
+ ],
74
+ "metadata": {
75
+ "kernelspec": {
76
+ "display_name": "gprmax",
77
+ "language": "python",
78
+ "name": "python3"
79
+ },
80
+ "language_info": {
81
+ "codemirror_mode": {
82
+ "name": "ipython",
83
+ "version": 3
84
+ },
85
+ "file_extension": ".py",
86
+ "mimetype": "text/x-python",
87
+ "name": "python",
88
+ "nbconvert_exporter": "python",
89
+ "pygments_lexer": "ipython3",
90
+ "version": "3.10.14"
91
+ }
92
+ },
93
+ "nbformat": 4,
94
+ "nbformat_minor": 5
95
+ }