diff --git a/.readthedocs.yaml b/.readthedocs.yaml
index 2d55c0fa..4db4877d 100644
--- a/.readthedocs.yaml
+++ b/.readthedocs.yaml
@@ -7,6 +7,8 @@ version: 2
build:
os: ubuntu-22.04
+ apt_packages:
+ - mpich
tools:
python: "mambaforge-22.9"
jobs:
diff --git a/CREDITS b/CREDITS
index bdf69641..5c632202 100644
--- a/CREDITS
+++ b/CREDITS
@@ -1,5 +1,6 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, and John Hartley
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# and Nathan Mannall
#
# This is the official list of entities and people who have contributed to gprMax
#
@@ -15,6 +16,5 @@ gprMax is a contribution to COST Action TU1208 'Civil Engineering Applications o
As well as the aforementioned authors, the following individuals have contributed to gprMax:
Oystein Bjorndal
-John Hartley
Rajath Kumar
Tobias Schruff
diff --git a/conda_env.yml b/conda_env.yml
index 10b9d63f..ab835c07 100644
--- a/conda_env.yml
+++ b/conda_env.yml
@@ -17,7 +17,7 @@ dependencies:
- pip:
- humanize
-# - mpi4py
+ - mpi4py
- numpy-stl
# - pycuda
# - pyopencl
diff --git a/docs/source/input_api.rst b/docs/source/input_api.rst
index 217b3170..18210a99 100644
--- a/docs/source/input_api.rst
+++ b/docs/source/input_api.rst
@@ -78,104 +78,103 @@ Creating a model scene
Domain
------
-.. autoclass:: gprMax.Domain
- :members: __init__
+.. autoclass:: gprMax.user_objects.cmds_singleuse.Domain
Discretisation
--------------
-.. autoclass:: gprMax.Discretisation
+.. autoclass:: gprMax.user_objects.cmds_singleuse.Discretisation
Time Window
-----------
-.. autoclass:: gprMax.TimeWindow
+.. autoclass:: gprMax.user_objects.cmds_singleuse.TimeWindow
General functions
=================
Title
-----
-.. autoclass:: gprMax.Title
+.. autoclass:: gprMax.user_objects.cmds_singleuse.Title
Number of OpenMP threads
------------------------
-.. autoclass:: gprMax.OMPThreads
+.. autoclass:: gprMax.user_objects.cmds_singleuse.OMPThreads
Time Step Stability Factor
--------------------------
-.. autoclass:: gprMax.TimeStepStabilityFactor
+.. autoclass:: gprMax.user_objects.cmds_singleuse.TimeStepStabilityFactor
Output Directory
----------------
-.. autoclass:: gprMax.OutputDir
+.. autoclass:: gprMax.user_objects.cmds_singleuse.OutputDir
Material functions
==================
Material
--------
-.. autoclass:: gprMax.Material
+.. autoclass:: gprMax.user_objects.cmds_multiuse.Material
Debye Dispersion
----------------
-.. autoclass:: gprMax.AddDebyeDispersion
+.. autoclass:: gprMax.user_objects.cmds_multiuse.AddDebyeDispersion
Lorentz Dispersion
------------------
-.. autoclass:: gprMax.AddLorentzDispersion
+.. autoclass:: gprMax.user_objects.cmds_multiuse.AddLorentzDispersion
Drude Dispersion
----------------
-.. autoclass:: gprMax.AddDrudeDispersion
+.. autoclass:: gprMax.user_objects.cmds_multiuse.AddDrudeDispersion
Soil Peplinski
--------------
-.. autoclass:: gprMax.SoilPeplinski
+.. autoclass:: gprMax.user_objects.cmds_multiuse.SoilPeplinski
Object construction functions
=============================
-Object construction commands are processed in the order they appear in the scene. Therefore space in the model allocated to a specific material using for example the :class:`gprMax.cmds_geometry.box.Box` command can be reallocated to another material using the same or any other object construction command. Space in the model can be regarded as a canvas in which objects are introduced and one can be overlaid on top of the other overwriting its properties in order to produce the desired geometry. The object construction commands can therefore be used to create complex shapes and configurations.
+Object construction commands are processed in the order they appear in the scene. Therefore space in the model allocated to a specific material using for example the :class:`gprMax.user_objects.cmds_geometry.box.Box` command can be reallocated to another material using the same or any other object construction command. Space in the model can be regarded as a canvas in which objects are introduced and one can be overlaid on top of the other overwriting its properties in order to produce the desired geometry. The object construction commands can therefore be used to create complex shapes and configurations.
Box
---
-.. autoclass:: gprMax.Box
+.. autoclass:: gprMax.user_objects.cmds_geometry.box.Box
Cone
----
-.. autoclass:: gprMax.Cone
+.. autoclass:: gprMax.user_objects.cmds_geometry.cone.Cone
Cylinder
--------
-.. autoclass:: gprMax.Cylinder
+.. autoclass:: gprMax.user_objects.cmds_geometry.cylinder.Cylinder
Cylindrical Sector
------------------
-.. autoclass:: gprMax.CylindricalSector
+.. autoclass:: gprMax.user_objects.cmds_geometry.cylindrical_sector.CylindricalSector
Edge
----
-.. autoclass:: gprMax.Edge
+.. autoclass:: gprMax.user_objects.cmds_geometry.edge.Edge
Ellipsoid
---------
-.. autoclass:: gprMax.Ellipsoid
+.. autoclass:: gprMax.user_objects.cmds_geometry.ellipsoid.Ellipsoid
Plate
-----
-.. autoclass:: gprMax.Plate
+.. autoclass:: gprMax.user_objects.cmds_geometry.plate.Plate
Sphere
------
-.. autoclass:: gprMax.Sphere
+.. autoclass:: gprMax.user_objects.cmds_geometry.sphere.Sphere
Triangle
--------
-.. autoclass:: gprMax.Triangle
+.. autoclass:: gprMax.user_objects.cmds_geometry.triangle.Triangle
Fractal Box
-----------
-.. autoclass:: gprMax.FractalBox
+.. autoclass:: gprMax.user_objects.cmds_geometry.fractal_box.FractalBox
.. note::
@@ -183,74 +182,74 @@ Fractal Box
Add Grass
---------
-.. autoclass:: gprMax.AddGrass
+.. autoclass:: gprMax.user_objects.cmds_geometry.add_grass.AddGrass
Add Surface Roughness
---------------------
-.. autoclass:: gprMax.AddSurfaceRoughness
+.. autoclass:: gprMax.user_objects.cmds_geometry.add_surface_roughness.AddSurfaceRoughness
Add Surface Water
-----------------
-.. autoclass:: gprMax.AddSurfaceWater
+.. autoclass:: gprMax.user_objects.cmds_geometry.add_surface_water.AddSurfaceWater
Geometry View
-------------
-.. autoclass:: gprMax.GeometryView
+.. autoclass:: gprMax.user_objects.cmds_multiuse.GeometryView
Geometry Objects Write
----------------------
-.. autoclass:: gprMax.GeometryObjectsWrite
+.. autoclass:: gprMax.user_objects.cmds_multiuse.GeometryObjectsWrite
Source and output functions
===========================
Waveform
--------
-.. autoclass:: gprMax.Waveform
+.. autoclass:: gprMax.user_objects.cmds_multiuse.Waveform
Voltage Source
--------------
-.. autoclass:: gprMax.VoltageSource
+.. autoclass:: gprMax.user_objects.cmds_multiuse.VoltageSource
Hertzian Dipole Source
----------------------
-.. autoclass:: gprMax.HertzianDipole
+.. autoclass:: gprMax.user_objects.cmds_multiuse.HertzianDipole
Magnetic Dipole Source
----------------------
-.. autoclass:: gprMax.MagneticDipole
+.. autoclass:: gprMax.user_objects.cmds_multiuse.MagneticDipole
Transmission Line
-----------------
-.. autoclass:: gprMax.TransmissionLine
+.. autoclass:: gprMax.user_objects.cmds_multiuse.TransmissionLine
Discrete Plane Wave
-------------------
-.. autoclass:: gprMax.DiscretePlaneWave
+.. autoclass:: gprMax.user_objects.cmds_multiuse.DiscretePlaneWave
Excitation File
---------------
-.. autoclass:: gprMax.ExcitationFile
+.. autoclass:: gprMax.user_objects.cmds_multiuse.ExcitationFile
Receiver
--------
-.. autoclass:: gprMax.Rx
+.. autoclass:: gprMax.user_objects.cmds_multiuse.Rx
Receiver Array
--------------
-.. autoclass:: gprMax.RxArray
+.. autoclass:: gprMax.user_objects.cmds_multiuse.RxArray
Source Steps
------------
-.. autoclass:: gprMax.SrcSteps
+.. autoclass:: gprMax.user_objects.cmds_singleuse.SrcSteps
Receiver Steps
--------------
-.. autoclass:: gprMax.RxSteps
+.. autoclass:: gprMax.user_objects.cmds_singleuse.RxSteps
Snapshot
--------
-.. autoclass:: gprMax.Snapshot
+.. autoclass:: gprMax.user_objects.cmds_multiuse.Snapshot
Subgrid
-------
@@ -266,13 +265,13 @@ The default behaviour for the absorbing boundary conditions (ABC) is first order
PML properties
--------------
-.. autoclass:: gprMax.PMLProps
+.. autoclass:: gprMax.user_objects.cmds_singleuse.PMLProps
PML CFS
-------
Allows you control of the specific parameters that are used to build each order of the PML. Up to a second order PML can currently be specified, i.e. by using two ``PMLCFS`` commands.
-.. autoclass:: gprMax.PMLCFS
+.. autoclass:: gprMax.user_objects.cmds_multiuse.PMLCFS
The CFS values (which are internally specified) used for the default standard first order PML are:
* ``alphascalingprofile = 'constant'``
diff --git a/gprMax/cython/plane_wave.pyx b/gprMax/cython/plane_wave.pyx
index 408f59b6..cbc1ac8e 100644
--- a/gprMax/cython/plane_wave.pyx
+++ b/gprMax/cython/plane_wave.pyx
@@ -1,6 +1,6 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley, and
-# Adittya Pal
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Adittya Pal, and Nathan Mannall
#
# This file is part of gprMax.
#
diff --git a/gprMax/geometry_outputs/geometry_objects.py b/gprMax/geometry_outputs/geometry_objects.py
index 2e0bad2f..5c764ffc 100644
--- a/gprMax/geometry_outputs/geometry_objects.py
+++ b/gprMax/geometry_outputs/geometry_objects.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
diff --git a/gprMax/geometry_outputs/geometry_view_lines.py b/gprMax/geometry_outputs/geometry_view_lines.py
index 337e40c8..6b603695 100644
--- a/gprMax/geometry_outputs/geometry_view_lines.py
+++ b/gprMax/geometry_outputs/geometry_view_lines.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
diff --git a/gprMax/geometry_outputs/geometry_view_voxels.py b/gprMax/geometry_outputs/geometry_view_voxels.py
index b95dc64e..61e4844f 100644
--- a/gprMax/geometry_outputs/geometry_view_voxels.py
+++ b/gprMax/geometry_outputs/geometry_view_voxels.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
diff --git a/gprMax/geometry_outputs/geometry_views.py b/gprMax/geometry_outputs/geometry_views.py
index eb3da1cb..fe2786d2 100644
--- a/gprMax/geometry_outputs/geometry_views.py
+++ b/gprMax/geometry_outputs/geometry_views.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
diff --git a/gprMax/geometry_outputs/grid_view.py b/gprMax/geometry_outputs/grid_view.py
index 17fa62dc..5d92a228 100644
--- a/gprMax/geometry_outputs/grid_view.py
+++ b/gprMax/geometry_outputs/grid_view.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
diff --git a/gprMax/grid/cuda_grid.py b/gprMax/grid/cuda_grid.py
index f5c82b91..b98cd6f3 100644
--- a/gprMax/grid/cuda_grid.py
+++ b/gprMax/grid/cuda_grid.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
diff --git a/gprMax/grid/fdtd_grid.py b/gprMax/grid/fdtd_grid.py
index 7b989cd9..7530b593 100644
--- a/gprMax/grid/fdtd_grid.py
+++ b/gprMax/grid/fdtd_grid.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
diff --git a/gprMax/grid/mpi_grid.py b/gprMax/grid/mpi_grid.py
index 587e7a8a..f74aaf57 100644
--- a/gprMax/grid/mpi_grid.py
+++ b/gprMax/grid/mpi_grid.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
diff --git a/gprMax/grid/opencl_grid.py b/gprMax/grid/opencl_grid.py
index 01caef78..da9f4703 100644
--- a/gprMax/grid/opencl_grid.py
+++ b/gprMax/grid/opencl_grid.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
diff --git a/gprMax/hash_cmds_multiuse.py b/gprMax/hash_cmds_multiuse.py
index 35ac78f2..2f4b2225 100644
--- a/gprMax/hash_cmds_multiuse.py
+++ b/gprMax/hash_cmds_multiuse.py
@@ -408,20 +408,20 @@ def process_multicmds(multicmds):
poles = int(tmp[0])
material_ids = tmp[(3 * poles) + 1 : len(tmp)]
er_delta = []
- tau = []
- alpha = []
+ omega = []
+ delta = []
for pole in range(1, 3 * poles, 3):
er_delta.append(float(tmp[pole]))
- tau.append(float(tmp[pole + 1]))
- alpha.append(float(tmp[pole + 2]))
+ omega.append(float(tmp[pole + 1]))
+ delta.append(float(tmp[pole + 2]))
lorentz_dispersion = AddLorentzDispersion(
poles=poles,
material_ids=material_ids,
er_delta=er_delta,
- tau=tau,
- alpha=alpha,
+ omega=omega,
+ delta=delta,
)
scene_objects.append(lorentz_dispersion)
@@ -443,15 +443,15 @@ def process_multicmds(multicmds):
poles = int(tmp[0])
material_ids = tmp[(3 * poles) + 1 : len(tmp)]
- tau = []
- alpha = []
+ omega = []
+ gamma = []
for pole in range(1, 2 * poles, 2):
- tau.append(float(tmp[pole]))
- alpha.append(float(tmp[pole + 1]))
+ omega.append(float(tmp[pole]))
+ gamma.append(float(tmp[pole + 1]))
drude_dispersion = AddDrudeDispersion(
- poles=poles, material_ids=material_ids, tau=tau, alpha=alpha
+ poles=poles, material_ids=material_ids, omega=omega, gamma=gamma
)
scene_objects.append(drude_dispersion)
diff --git a/gprMax/taskfarm.py b/gprMax/taskfarm.py
index 335a3ae1..8d1eca31 100644
--- a/gprMax/taskfarm.py
+++ b/gprMax/taskfarm.py
@@ -1,5 +1,6 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Tobias Schruff
+# Authors: Craig Warren, Antonis Giannopoulos, Tobias Schruff,
+# John Hartley, and Nathan Mannall
#
# This file is part of gprMax.
#
diff --git a/gprMax/updates/cpu_updates.py b/gprMax/updates/cpu_updates.py
index 09d05ef2..577c0aa6 100644
--- a/gprMax/updates/cpu_updates.py
+++ b/gprMax/updates/cpu_updates.py
@@ -1,5 +1,6 @@
-# Copyright (C) 2015-2024: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, and John Hartley
+# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# and Nathan Mannall
#
# This file is part of gprMax.
#
diff --git a/gprMax/updates/cuda_updates.py b/gprMax/updates/cuda_updates.py
index 0e73cdc3..68cbcfca 100644
--- a/gprMax/updates/cuda_updates.py
+++ b/gprMax/updates/cuda_updates.py
@@ -1,5 +1,6 @@
-# Copyright (C) 2015-2024: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, and John Hartley
+# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# and Nathan Mannall
#
# This file is part of gprMax.
#
diff --git a/gprMax/updates/mpi_updates.py b/gprMax/updates/mpi_updates.py
index b369e6d9..199787d4 100644
--- a/gprMax/updates/mpi_updates.py
+++ b/gprMax/updates/mpi_updates.py
@@ -1,5 +1,6 @@
-# Copyright (C) 2015-2024: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, and John Hartley
+# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# and Nathan Mannall
#
# This file is part of gprMax.
#
diff --git a/gprMax/updates/opencl_updates.py b/gprMax/updates/opencl_updates.py
index bcacfcd8..eb18e637 100644
--- a/gprMax/updates/opencl_updates.py
+++ b/gprMax/updates/opencl_updates.py
@@ -1,5 +1,6 @@
-# Copyright (C) 2015-2024: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, and John Hartley
+# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# and Nathan Mannall
#
# This file is part of gprMax.
#
diff --git a/gprMax/updates/updates.py b/gprMax/updates/updates.py
index d1a2563f..ab14434c 100644
--- a/gprMax/updates/updates.py
+++ b/gprMax/updates/updates.py
@@ -1,5 +1,6 @@
-# Copyright (C) 2015-2024: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, and John Hartley
+# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# and Nathan Mannall
#
# This file is part of gprMax.
#
diff --git a/gprMax/user_objects/cmds_multiuse.py b/gprMax/user_objects/cmds_multiuse.py
index 4f9cebc1..3fb2b17e 100644
--- a/gprMax/user_objects/cmds_multiuse.py
+++ b/gprMax/user_objects/cmds_multiuse.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
@@ -1449,7 +1449,7 @@ class AddLorentzDispersion(GridUserObject):
f"{self.grid_name(grid)}Lorentz disperion added to {disp_material.ID} "
f"with delta_eps_r={', '.join(f'{deltaer:4.2f}' for deltaer in disp_material.deltaer)}, "
f"omega={', '.join(f'{omega:4.3e}' for omega in disp_material.tau)} secs, "
- f"and gamma={', '.join(f'{delta:4.3e}' for delta in disp_material.alpha)} created."
+ f"and delta={', '.join(f'{delta:4.3e}' for delta in disp_material.alpha)} created."
)
@@ -1530,7 +1530,7 @@ class AddDrudeDispersion(GridUserObject):
logger.info(
f"{self.grid_name(grid)}Drude disperion added to {disp_material.ID} "
f"with omega={', '.join(f'{omega:4.3e}' for omega in disp_material.tau)} secs, "
- f"and gamma={', '.join(f'{alpha:4.3e}' for alpha in disp_material.alpha)} secs created."
+ f"and alpha={', '.join(f'{alpha:4.3e}' for alpha in disp_material.alpha)} secs created."
)
diff --git a/gprMax/user_objects/cmds_output.py b/gprMax/user_objects/cmds_output.py
index c54e3f48..9bb5fa13 100644
--- a/gprMax/user_objects/cmds_output.py
+++ b/gprMax/user_objects/cmds_output.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
diff --git a/gprMax/user_objects/cmds_singleuse.py b/gprMax/user_objects/cmds_singleuse.py
index 13a8943b..59e803a2 100644
--- a/gprMax/user_objects/cmds_singleuse.py
+++ b/gprMax/user_objects/cmds_singleuse.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
diff --git a/gprMax/user_objects/rotatable.py b/gprMax/user_objects/rotatable.py
index 41b88da9..51188060 100644
--- a/gprMax/user_objects/rotatable.py
+++ b/gprMax/user_objects/rotatable.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
diff --git a/gprMax/user_objects/user_objects.py b/gprMax/user_objects/user_objects.py
index 0b56e80d..ed15883c 100644
--- a/gprMax/user_objects/user_objects.py
+++ b/gprMax/user_objects/user_objects.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
diff --git a/gprMax/vtkhdf_filehandlers/vtk_image_data.py b/gprMax/vtkhdf_filehandlers/vtk_image_data.py
index c7d57a0f..a26041d7 100644
--- a/gprMax/vtkhdf_filehandlers/vtk_image_data.py
+++ b/gprMax/vtkhdf_filehandlers/vtk_image_data.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
diff --git a/gprMax/vtkhdf_filehandlers/vtk_unstructured_grid.py b/gprMax/vtkhdf_filehandlers/vtk_unstructured_grid.py
index 937bfa08..30601654 100644
--- a/gprMax/vtkhdf_filehandlers/vtk_unstructured_grid.py
+++ b/gprMax/vtkhdf_filehandlers/vtk_unstructured_grid.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
diff --git a/gprMax/vtkhdf_filehandlers/vtkhdf.py b/gprMax/vtkhdf_filehandlers/vtkhdf.py
index f9b17723..b9b853af 100644
--- a/gprMax/vtkhdf_filehandlers/vtkhdf.py
+++ b/gprMax/vtkhdf_filehandlers/vtkhdf.py
@@ -1,5 +1,5 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
# and Nathan Mannall
#
# This file is part of gprMax.
diff --git a/reframe_tests/benchmark_tests/reframe_benchmarks.py b/reframe_tests/benchmark_tests/reframe_benchmarks.py
index f1b98acc..28826bb2 100644
--- a/reframe_tests/benchmark_tests/reframe_benchmarks.py
+++ b/reframe_tests/benchmark_tests/reframe_benchmarks.py
@@ -1,3 +1,22 @@
+# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# and Nathan Mannall
+#
+# This file is part of gprMax.
+#
+# gprMax is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# gprMax is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with gprMax. If not, see .
+
import os
from pathlib import Path
diff --git a/reframe_tests/configuration/archer2_settings.py b/reframe_tests/configuration/archer2_settings.py
index cf0d9fe1..a4608d4b 100644
--- a/reframe_tests/configuration/archer2_settings.py
+++ b/reframe_tests/configuration/archer2_settings.py
@@ -1,3 +1,22 @@
+# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# and Nathan Mannall
+#
+# This file is part of gprMax.
+#
+# gprMax is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# gprMax is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with gprMax. If not, see .
+
site_configuration = {
"general": [
{
diff --git a/requirements.txt b/requirements.txt
index d18d11ca..2b715058 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -8,7 +8,7 @@ humanize
jinja2
jupyter
matplotlib
-# mpi4py
+mpi4py
mpi4py-fft
numpy<2
numpy-stl
diff --git a/testing/analytical_solutions.py b/testing/analytical_solutions.py
index 94256f94..02c4109f 100644
--- a/testing/analytical_solutions.py
+++ b/testing/analytical_solutions.py
@@ -1,5 +1,6 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, and John Hartley
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# and Nathan Mannall
#
# This file is part of gprMax.
#
diff --git a/testing/diff_output_files.py b/testing/diff_output_files.py
index 46c2f1a7..872ce33e 100644
--- a/testing/diff_output_files.py
+++ b/testing/diff_output_files.py
@@ -1,5 +1,6 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, and John Hartley
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# and Nathan Mannall
#
# This file is part of gprMax.
#
diff --git a/testing/test_experimental.py b/testing/test_experimental.py
index b8b7921b..6e958053 100644
--- a/testing/test_experimental.py
+++ b/testing/test_experimental.py
@@ -1,5 +1,6 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, and John Hartley
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# and Nathan Mannall
#
# This file is part of gprMax.
#
diff --git a/testing/test_models.py b/testing/test_models.py
index 4afa8ae8..c5d4bb16 100644
--- a/testing/test_models.py
+++ b/testing/test_models.py
@@ -1,5 +1,6 @@
# Copyright (C) 2015-2025: The University of Edinburgh, United Kingdom
-# Authors: Craig Warren, Antonis Giannopoulos, and John Hartley
+# Authors: Craig Warren, Antonis Giannopoulos, John Hartley,
+# and Nathan Mannall
#
# This file is part of gprMax.
#