From d3d6062a8f94e7366c879e97abc36d27f446ced3 Mon Sep 17 00:00:00 2001 From: Craig Warren Date: Fri, 31 Mar 2023 15:43:38 +0100 Subject: [PATCH] Sorted broken links --- docs/source/accelerators.rst | 18 ++++++++++++++---- docs/source/examples_antennas.rst | 4 ++-- docs/source/examples_simple_2D.rst | 2 +- docs/source/faqs.rst | 2 +- docs/source/features.rst | 4 ++-- docs/source/gprmodelling.rst | 2 +- docs/source/input_api.rst | 12 ++++++------ docs/source/input_hash_cmds.rst | 6 +++--- docs/source/output.rst | 4 +++- examples/cylinder_Ascan_2D.h5 | Bin 27520 -> 27520 bytes toolboxes/DebyeFit/README.rst | 4 ++-- 11 files changed, 35 insertions(+), 23 deletions(-) diff --git a/docs/source/accelerators.rst b/docs/source/accelerators.rst index 57c77505..4fa736ca 100644 --- a/docs/source/accelerators.rst +++ b/docs/source/accelerators.rst @@ -74,7 +74,8 @@ Run one of the test models: .. note:: - If you want to select a specific GPU card on your system, you can specify an integer after the ``-gpu`` flag. The integer should be the NVIDIA CUDA device ID for a specific GPU card. If it is not specified it defaults to device ID 0. + * If you want to select a specific GPU card on your system, you can specify an integer after the ``-gpu`` flag. The integer should be the NVIDIA CUDA device ID for a specific GPU card. If it is not specified it defaults to device ID 0. + * You can use the ``get_host_spec.py`` module (in ``toolboxes/Utilities``) to help you understand what hardware (CPU/GPU) you have and how gprMax can use it. OpenCL @@ -85,20 +86,29 @@ Software required The following steps provide guidance on how to install the extra components to allow gprMax to use OpenCL: -TODO: Add OpenCL instructions -***************************** +1. Install the pyopencl Python module. Open a Terminal (Linux/macOS) or Command Prompt (Windows), navigate into the top-level gprMax directory, and if it is not already active, activate the gprMax conda environment ``conda activate gprMax``. Run ``pip install pyopencl`` Example ------- +Open a Terminal (Linux/macOS) or Command Prompt (Windows), navigate into the top-level gprMax directory, and if it is not already active, activate the gprMax conda environment ``conda activate gprMax`` +Run one of the test models: +.. code-block:: none + + (gprMax)$ python -m gprMax examples/cylinder_Ascan_2D.in -opencl + +.. note:: + + * If you want to select a specific computer device on your system, you can specify an integer after the ``-opencl`` flag. The integer should be the device ID for a specific compute device. If it is not specified it defaults to device ID 0. + * You can use the ``get_host_spec.py`` module (in ``toolboxes/Utilities``) to help you understand what hardware (CPU/GPU) you have and how gprMax can use it. CUDA/MPI ======== -Message Passing Interface (MPI) has been utilised to implement a simple task farm that can be used to distribute a series of models as independent tasks. This is described in more detail in the :ref:`HPC section `. MPI can be combined with the GPU functionality to allow a series models to be distributed to multiple GPUs on the same machine (node). +Message Passing Interface (MPI) has been utilised to implement a simple task farm that can be used to distribute a series of models as independent tasks. This is described in more detail in the :ref:`HPC ` section. MPI can be combined with the GPU functionality to allow a series models to be distributed to multiple GPUs on the same machine (node). Example ------- diff --git a/docs/source/examples_antennas.rst b/docs/source/examples_antennas.rst index 0c234d31..500f6114 100644 --- a/docs/source/examples_antennas.rst +++ b/docs/source/examples_antennas.rst @@ -19,7 +19,7 @@ This example demonstrates a model of a half-wavelength wire dipole antenna in fr The wire is modelled using an edge which specifies properties of the edge of the Yee cell. The antenna is fed using a transmission line The one-dimensional transmission line model virtually attaches to the dipole at the gap between the arms. The antenna has an input resistance :math:`Z_{in} = 73~\Omega` specified in the transmissions, and uses a Gaussian waveform with a centre frequency of 1GHz. A time window of 60ns is used: firstly, to give enough time for the response to decay down to zero; and secondly, to allow a reasonable resolution (17MHz) for calculating antenna parameters that involve taking a FFT (:math:`\Delta f=1/T` where :math:`\Delta f` is the frequency bin spacing and :math:`T` is the time window). -Time histories of voltage and current values in the transmission line are saved to the output file. These are documented in the :ref:`` section. These parameters are useful for calculating characteristics of the antenna such as the input impedance or S-parameters. gprMax includes a Python module (in the ``toolboxes\Plotting`` package) to help you view the input impedance and admittance and s11 parameter from an antenna model fed using a transmission line. Details of how to use this module are given in the README.rst for that package. +Time histories of voltage and current values in the transmission line are saved to the output file. These are documented in the :ref:`output` section. These parameters are useful for calculating characteristics of the antenna such as the input impedance or S-parameters. gprMax includes a Python module (in the ``toolboxes\Plotting`` package) to help you view the input impedance and admittance and s11 parameter from an antenna model fed using a transmission line. Details of how to use this module are given in the README.rst for that package. Results ------- @@ -131,7 +131,7 @@ The antenna must be moved to a new position for every single A-scan (trace) in t Results ------- -After merging the A-scans into a single file you can now view an image of the B-scan using the command see :ref:`output` and :ref:`tools` sections: +After merging the A-scans into a single file you can now view an image of the B-scan using the command (see :ref:`output` section and README.rst for the ``toolboxes/Plotting`` package): .. code-block:: none diff --git a/docs/source/examples_simple_2D.rst b/docs/source/examples_simple_2D.rst index dc1aaa92..c89f40e7 100644 --- a/docs/source/examples_simple_2D.rst +++ b/docs/source/examples_simple_2D.rst @@ -137,7 +137,7 @@ This example uses the same geometry as the previous example but this time a B-sc :language: none :linenos: -The differences between this input file and the one from the A-scan are the x coordinates of the source and receiver (lines 11 and 12), and the commands needed to move the source and receiver (lines 13 and 14). As before, the source and receiver are offset by 40mm from each other as before but they are now shifted to a starting position for the scan. The ``#src_steps`` command is used to move every source in the model by specified steps each time the model is run. Similarly, the ``#rx_steps`` command is used to move every receiver in the model by specified steps each time the model is run. Note, the same functionality can be achieved by using our Python API to move the source and receiver individually (see the :ref:`Python API ` section). +The differences between this input file and the one from the A-scan are the x coordinates of the source and receiver (lines 11 and 12), and the commands needed to move the source and receiver (lines 13 and 14). As before, the source and receiver are offset by 40mm from each other as before but they are now shifted to a starting position for the scan. The ``#src_steps`` command is used to move every source in the model by specified steps each time the model is run. Similarly, the ``#rx_steps`` command is used to move every receiver in the model by specified steps each time the model is run. Note, the same functionality can be achieved by using our Python API to move the source and receiver individually (see the :ref:`Python API ` section). To run the model to create a B-scan you must pass an optional argument to specify the number of times the model should be run. In this case this is the number of A-scans (traces) that will comprise the B-scan. For a B-scan over a distance of 120mm with a step of 2mm that is 60 A-scans. diff --git a/docs/source/faqs.rst b/docs/source/faqs.rst index 446038dd..fc70e292 100644 --- a/docs/source/faqs.rst +++ b/docs/source/faqs.rst @@ -32,4 +32,4 @@ Spatial resolution should be chosen to mitigate numerical dispersion and to adeq gprMax builds objects in a model in the order the objects were specified in the input file, using a layered canvas approach. This means, for example, a cylinder object which comes after a box object in the input file will overwrite the properties of the box object at any locations where they overlap. This approach allows complex geometries to be created using basic object building blocks. **Can I run gprMax on my HPC/cluster?** -Yes. gprMax has been parallelised using OpenMP and features a task farm based on MPI. For more information read the :ref:`parallel performance section of the User Guide ` +Yes. gprMax has been parallelised using OpenMP and features a task farm based on MPI. For more information read the :ref:`HPC ` section. diff --git a/docs/source/features.rst b/docs/source/features.rst index 565319e6..32cdfb51 100644 --- a/docs/source/features.rst +++ b/docs/source/features.rst @@ -25,7 +25,7 @@ Fractal correlated noise [TUR1997]_ is used to describe the stochastic distribut Library of antenna models ========================= -gprMax now includes Python modules with pre-defined models of antennas that behave similarly to commercial antennas [WAR2011]_ [STA2017]_. Currently models of antennas similar to `Geophysical Survey Systems, Inc. (GSSI) `_ 1.5 GHz (Model 5100) antenna, and 400 MHz antenna, as well as `MALA Geoscience `_ 1.2 GHz antenna are included. By taking advantage of our Python API, using such complex structures in a model is straightforward without having to be built step-by-step by the user. For further details see the :ref:`Python API ` section. +gprMax now includes Python modules with pre-defined models of antennas that behave similarly to commercial antennas [WAR2011]_ [STA2017]_. Currently models of antennas similar to `Geophysical Survey Systems, Inc. (GSSI) `_ 1.5 GHz (Model 5100) antenna, and 400 MHz antenna, as well as `MALA Geoscience `_ 1.2 GHz antenna are included. By taking advantage of our Python API, using such complex structures in a model is straightforward without having to be built step-by-step by the user. For further details see the :ref:`Python API ` section. Anisotropic materials ===================== @@ -50,7 +50,7 @@ With increased research into quantitative information from GPR, it has become ne Python API ========== -There is now a **Python API**, which includes all the functionality of the input file (hash) commands as well as several more advanced features. It allows users to access to gprMax functions directly from Python through importing the gprMax module. This method is recommended for those who prefer to use Python or need access to specific API-only advanced features, and is described in the :ref:`Python API ` section. There are several advantages to using the Python API: +There is now a **Python API**, which includes all the functionality of the input file (hash) commands as well as several more advanced features. It allows users to access to gprMax functions directly from Python through importing the gprMax module. This method is recommended for those who prefer to use Python or need access to specific API-only advanced features, and is described in the :ref:`Python API ` section. There are several advantages to using the Python API: 1. Users can take advantage of the Python language - for instance, the structural elements of Python can be utilised more easily. 2. gprMax objects can be used directly within functions, classes, modules and packages. In this way collections of components can be defined, reused and modified. For example, complex targets can be imported from a separate module and combined with an antenna from another module. diff --git a/docs/source/gprmodelling.rst b/docs/source/gprmodelling.rst index a44a2b7f..79e26138 100644 --- a/docs/source/gprmodelling.rst +++ b/docs/source/gprmodelling.rst @@ -133,6 +133,6 @@ The ABCs employed in gprMax will, in general, perform well (i.e. without introdu The cells of the RIPML, which have a user adjustable thickness, very efficiently absorb most waves that propagate in them. Although, source and output points can be specified inside these cells **it is wrong to do so** from the point of view of correct modelling. The fields inside these cells are not of interest to GPR modelling. Placing sources inside these cells could have effects that have not been studied and will certainly provide erroneous results from the perspective of GPR modelling. The requirement to keep sources and targets at least 15 cells away for the PML has to be taken into account when deciding the size of the model domain. Additionally, free space (i.e. air) should be always included above a source for at least 15-20 cells in GPR models. Obviously, the more cells there are between observation points, sources, targets and the absorbing boundaries, the better the results will be. -gprMax now offers the ability (for advanced users) to customise the parameters of the PML which allows its performance to be better optimised for specific applications. For further details see the :ref:`PML commands section `. +gprMax now offers the ability (for advanced users) to customise the parameters of the PML which allows its performance to be better optimised for specific applications. For further details see the :ref:`Python API ` section. All other *boundary conditions* which apply at interfaces between different media in the FDTD model are automatically enforced in gprMax. diff --git a/docs/source/input_api.rst b/docs/source/input_api.rst index 4e7273f1..a43a2cfc 100644 --- a/docs/source/input_api.rst +++ b/docs/source/input_api.rst @@ -1,15 +1,15 @@ -.. _api: +.. _input-api: -************************************** -Model Building (Advanced - Python API) -************************************** +************************************ +Model Building (Advanced/Python API) +************************************ Introduction ============ gprMax has a choice of two methods for building a model to simulate: -1. A **text-based (ASCII) input file**, which can be created with any text editor, and uses a series of gprMax commands which begin with the hash character (``#``). This method is recommended for beginners and those not familiar with Python, and is described in the :ref:`input_hash_cmds` section. +1. A **text-based (ASCII) input file**, which can be created with any text editor, and uses a series of gprMax commands which begin with the hash character (``#``). This method is recommended for beginners and those not familiar with Python, and is described in the :ref:`input-hash-cmds` section. 2. A **Python API**, which includes all the functionality of method 1 as well as several more advanced features. This method is recommended for those who prefer to use Python or need access to specific API-only advanced features, and is described in this section of the documentation. The Python API in gprMax allows users to access to gprMax functions directly from Python through importing the gprMax module. There are several advantages to using the API: @@ -116,7 +116,7 @@ Material Material -------- -.. autoclass:: gprMax.cmds_multiple.Material +.. autoclass:: gprMax.cmds_multiuse.Material Debye Dispersion ---------------- diff --git a/docs/source/input_hash_cmds.rst b/docs/source/input_hash_cmds.rst index 60fa2164..aa7eac3e 100644 --- a/docs/source/input_hash_cmds.rst +++ b/docs/source/input_hash_cmds.rst @@ -1,4 +1,4 @@ -.. _commands: +.. _input-hash-cmds: ************** Model Building @@ -10,7 +10,7 @@ Introduction gprMax has a choice of two methods for building a model to simulate: 1. A **text-based (ASCII) input file**, which can be created with any text editor, and uses a series of gprMax commands which begin with the hash character (``#``). This method is recommended for beginners and those not familiar with Python, and is described in this section of the documentation. -2. A **Python API**, which includes all the functionality of method 1 as well as several more advanced features. This method is recommended for those who prefer to use Python or need access to specific API-only advanced features, and is documented in the :ref:`Python API ` section. +2. A **Python API**, which includes all the functionality of method 1 as well as several more advanced features. This method is recommended for those who prefer to use Python or need access to specific API-only advanced features, and is documented in the :ref:`Python API ` section. The general syntax of the hash commands is: @@ -878,7 +878,7 @@ or For example to save a snapshot of the electromagnetic fields in the model at a simulated time of 3 nanoseconds use: ``#snapshot: 0 0 0 1 1 1 0.1 0.1 0.1 3e-9 snap1`` .. tip:: - A series of snapshots can be more easily defined using a loop and our :ref:`Python API `, see :ref:`outputs-snaps`. + A series of snapshots can be more easily defined using a loop and our :ref:`Python API `, see :ref:`outputs-snaps`. PML commands diff --git a/docs/source/output.rst b/docs/source/output.rst index 6fdc33ca..0632f1ef 100644 --- a/docs/source/output.rst +++ b/docs/source/output.rst @@ -1,3 +1,5 @@ +.. _output: + ***************** Simulation Output ***************** @@ -5,7 +7,7 @@ Simulation Output Field(s) output =============== -gprMax produces an output file that primarily contains time history data for electromagnetic field outputs (receivers) in the model. The output file has the same name as the input file but with ``.h5`` appended, and therefore uses the widely-supported `HDF5 `_ format which was designed to store and organize large amounts of numerical data. There are a number of free tools available to read HDF5 files. Also MATLAB has high- and low-level functions for reading and writing HDF5 files, i.e. ``h5info`` and ``h5disp`` are useful for returning information and displaying the contents of HDF5 files respectively. gprMax includes some Python modules (in the ``toolboxes/plotting`` package) to help you view output data. These are documented in :ref:`plotting toolbox section `. +gprMax produces an output file that primarily contains time history data for electromagnetic field outputs (receivers) in the model. The output file has the same name as the input file but with ``.h5`` appended, and therefore uses the widely-supported `HDF5 `_ format which was designed to store and organize large amounts of numerical data. There are a number of free tools available to read HDF5 files. Also MATLAB has high- and low-level functions for reading and writing HDF5 files, i.e. ``h5info`` and ``h5disp`` are useful for returning information and displaying the contents of HDF5 files respectively. gprMax includes some Python modules (in the ``toolboxes/plotting`` package) to help you view output data, which are documented in the README.rst file for that package. File structure -------------- diff --git a/examples/cylinder_Ascan_2D.h5 b/examples/cylinder_Ascan_2D.h5 index 50094f4f06b1074ed981b63fcee509cd437e2c5f..f0da39e29957f51aa463e18cfe4e6d174f05cdb2 100644 GIT binary patch delta 7464 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. +More about the ``Relaxation`` class structure can be found in the :doc:`Relaxation doc <../../toolboxes/DebyeFit/relaxation.rst>`. Havriliak-Negami Function ^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -185,7 +185,7 @@ Class Optimizer This class supports global optimization algorithms (particle swarm, dual annealing, evolutionary algorithms) for finding an optimal set of relaxation times that minimise the error between the actual and the approximated electric permittivity, and calculates optimised weights for the given relaxation times. Code written here is mainly based on external libraries, like ``scipy`` and ``pyswarm``. -More about the ``Optimizer`` class structure can be found in the :doc:`Optimisation doc `. +More about the ``Optimizer`` class structure can be found in the :doc:`Optimisation doc <../../toolboxes/DebyeFit/optimisation.rst>`. PSO_DLS Class ^^^^^^^^^^^^^