# gprMax

> open source electromagnetic simulation software

**Wikidata**: [Q106315290](https://www.wikidata.org/wiki/Q106315290)  
**Source**: https://4ort.xyz/entity/gprmax

## Summary
gprMax is an open-source electromagnetic simulation software used to model Ground Penetrating Radar (GPR) and electromagnetic wave propagation. It solves Maxwell’s equations in 3D using the Finite-Difference Time-Domain (FDTD) method and Yee's algorithm. The software is widely applied in fields such as engineering, geophysics, archaeology, and medicine.

## Key Facts
- **Inception:** Originally developed in 1996 by Dr. Antonis Giannopoulos; re-developed from scratch in 2015 by Dr. Craig Warren.
- **Lead Developer:** Craig Warren, a Chartered Engineer and remote sensing researcher from the United Kingdom.
- **License:** Distributed under the GNU General Public License, version 3.0.
- **Programming Languages:** Written in Python, with performance-critical sections implemented in Cython.
- **Operating Systems:** Compatible with Microsoft Windows, Linux, and macOS.
- **Methodology:** Utilizes the Finite-Difference Time-Domain (FDTD) method and Yee's algorithm.
- **Latest Version:** 3.1.5 (nicknamed "Big Smoke"), released on April 16, 2019.
- **File Formats:** Uses ASCII text files for input and Hierarchical Data Format (HDF5) for output.
- **Dependencies:** Requires Python libraries including NumPy, SciPy, Matplotlib, h5py, and Cython.

## FAQs
### Q: What is gprMax used for?
A: It is designed for simulating Ground Penetrating Radar (GPR) and modeling electromagnetic wave propagation. It is used by researchers and engineers in geophysics, archaeology, medicine, and civil engineering to understand how electromagnetic waves interact with different materials and structures.

### Q: Who are the primary developers of gprMax?
A: The software was originally created by Dr. Antonis Giannopoulos in 1996. The current version was re-developed in 2015 by Dr. Craig Warren, and both continue to supervise its ongoing development alongside contributors like Dr. Iraklis Giannakis and Dr. Nectaria Diamanti.

### Q: Is gprMax a command-line or graphical tool?
A: gprMax is a command-line-driven software. Users prepare ASCII text input files containing model commands, which the software then processes to run simulations.

### Q: What are the software requirements to run gprMax?
A: It requires a Python environment and several specific libraries, including Cython, Matplotlib, NumPy, SciPy, and h5py. It is cross-platform and runs on Windows, Linux, and macOS.

## Why It Matters
gprMax is a foundational tool in the field of computational electromagnetics, specifically for the Ground Penetrating Radar (GPR) community. By providing an open-source framework for 3D FDTD modeling, it democratizes access to high-level simulation capabilities that were once limited to proprietary or less accessible tools. Its transition in 2015 to a Python-based architecture made it significantly more extensible and easier for the academic community to integrate with modern data science workflows.

The software's ability to solve complex Maxwell’s equations allows for the precise modeling of wave propagation in diverse environments, from archaeological sites to medical imaging scenarios. Its reliance on the HDF5 format ensures it can handle the massive datasets generated by high-resolution 3D simulations. Furthermore, its status as a free software project under the GNU GPLv3 license ensures that its methodology remains transparent and reproducible, which is a critical requirement for scientific research and engineering safety assessments.

## Notable For
- **Naming Origin:** The name is derived from "GPR" (Ground Penetrating Radar) and "Max" (after James Clerk Maxwell, the father of modern electromagnetic theory).
- **Performance Optimization:** While written in Python for ease of use, it uses Cython to handle performance-critical computational tasks.
- **Academic Recognition:** It is supported by peer-reviewed publications and has been a participating organization in the Google Summer of Code in 2019 and 2021.
- **Data Standards:** It utilizes the widely-supported HDF5 format to organize and store large amounts of numerical simulation data.

## Body

### Historical Development
The original version of gprMax was created in 1996 by Dr. Antonis Giannopoulos during the early stages of GPR numerical modeling. In 2015, Dr. Craig Warren re-developed the software from scratch to create its current state. The project has evolved from a specialized research tool into a widely used open-source simulation suite.

### Technical Architecture
gprMax is built on a Python foundation, leveraging the language's flexibility for user interaction and model definition. 
- **Core Solver:** Uses Yee's algorithm to solve Maxwell’s equations in the time domain.
- **Language Integration:** Performance-critical parts are written in Cython to achieve speeds comparable to lower-level languages while maintaining Python compatibility.
- **Software Dependencies:** The system depends on a stack of scientific Python libraries, including:
    - **NumPy and SciPy:** For numerical computations.
    - **Matplotlib:** For creating visualizations of simulation results.
    - **h5py:** To interface with the HDF5 output format.
    - **Other utilities:** colorama, jupyter, psutil, terminaltables, and tqdm.

### Input and Output Workflow
- **Input:** Users provide an ASCII text file containing specific commands to define the GPR model, including geometry, material properties, and source characteristics.
- **Output:** The software generates output files in the HDF5 format, a standard designed for storing large volumes of numerical data. These files can be processed and visualized using Python or other compatible data analysis tools.

### Version History
The software has seen several major and minor releases:
- **3.0.0:** Released June 7, 2016, marking a major milestone in the re-developed version.
- **3.0.6 - 3.0.19:** A series of updates released between August 2016 and March 2017.
- **3.1.5:** Released April 16, 2019, as the "Big Smoke" version.

### Community and Distribution
gprMax is hosted on GitHub, which serves as its primary source code repository. It is also available via the Python Package Index (PyPI). The project maintains an active community through Google Groups for user support and shares updates via Twitter, Facebook, and YouTube.

```json
{
  "@context": "https://schema.org",
  "@type": "Thing",
  "name": "gprMax",
  "description": "Open source electromagnetic simulation software for Ground Penetrating Radar (GPR) and electromagnetic wave propagation using the FDTD method.",
  "url": "https://www.gprmax.com/",
  "sameAs": [
    "https://github.com/gprMax/gprMax",
    "https://twitter.com/gprMax_fdtd"
  ],
  "additionalType": "SoftwareApplication"
}

## References

1. [Source](https://www.youtube.com/watch?v=trjTAEhfwwc&t=52s)
2. [Source](https://www.gprmax.com/contact.shtml)
3. [Source](https://github.com/gprMax/gprMax/blob/master/LICENSE)
4. [Source](https://www.gprmax.com/about.shtml)
5. gprMax: Open source software to simulate electromagnetic wave propagation for Ground Penetrating Radar
6. [Source](https://github.com/gprMax/gprMax/releases/tag/v.3.1.5)
7. [Release 3.0.0. 2016](https://github.com/gprMax/gprMax/releases/tag/v.3.0.0)
8. [Release 3.0.6. 2016](https://github.com/gprMax/gprMax/releases/tag/v.3.0.6)
9. [Release 3.0.7. 2016](https://github.com/gprMax/gprMax/releases/tag/v.3.0.7)
10. [Release 3.0.8. 2016](https://github.com/gprMax/gprMax/releases/tag/v.3.0.8)
11. [Release 3.0.9. 2016](https://github.com/gprMax/gprMax/releases/tag/v.3.0.9)
12. [Release 3.0.12. 2016](https://github.com/gprMax/gprMax/releases/tag/v.3.0.12)
13. [Release 3.0.14. 2017](https://github.com/gprMax/gprMax/releases/tag/v.3.0.14)
14. [Release 3.0.17. 2017](https://github.com/gprMax/gprMax/releases/tag/v.3.0.17)
15. [Release 3.0.19. 2017](https://github.com/gprMax/gprMax/releases/tag/v.3.0.19)
16. [Release 3.0.20. 2017](https://github.com/gprMax/gprMax/releases/tag/v.3.0.20)
17. [Release 3.1.0. 2017](https://github.com/gprMax/gprMax/releases/tag/v.3.1.0)
18. [Release 3.1.1. 2017](https://github.com/gprMax/gprMax/releases/tag/v.3.1.1)
19. [Release 3.1.2. 2017](https://github.com/gprMax/gprMax/releases/tag/v.3.1.2)
20. [Release 3.1.3. 2018](https://github.com/gprMax/gprMax/releases/tag/v.3.1.3)
21. [Release 3.1.4. 2018](https://github.com/gprMax/gprMax/releases/tag/v.3.1.4)
22. [Release 3.1.6. 2022](https://github.com/gprMax/gprMax/releases/tag/v.3.1.6)
23. [Release 3.1.7. 2024](https://github.com/gprMax/gprMax/releases/tag/v.3.1.7)
24. [Source](http://docs.gprmax.com/en/latest/input.html#input-file-commands)
25. [Source](http://docs.gprmax.com/en/latest/output.html#field-s-output)
26. [Source](https://www.gprmax.com/publications.shtml)
27. [Source](https://summerofcode.withgoogle.com/archive/2019/organizations/5844947004030976/)
28. [Source](https://summerofcode.withgoogle.com/organizations/5884390523011072/)
29. YouTube API