pyGIMLi electrical-resistivity tomography
A completed electrical-resistivity tomography study comparing Wenner alpha, dipole-dipole, and gradient arrays under controlled noise and regularisation conditions.

Software compatibility
The source, retained inversions, figures, and documentation use pyGIMLi 1.6.0, pgcore 1.6.0, and the pinned Python 3.12 environment. The complete release is verified on macOS. Other operating systems or versions need a new backend verification run.
Project definition
Problem statement
Electrical-resistivity tomography results depend on electrode geometry, measurement error, regularisation, and subsurface sensitivity, even when each inversion gives a plausible data fit.
The geology problem is to compare three common arrays against known synthetic targets and measure both data agreement and geological recovery without treating a coloured section as proof by itself.
Project objectives
- Build a two-dimensional near-surface model with a conductive plume and a deeper resistive block.
- Simulate Wenner alpha, dipole-dipole, and gradient measurements on one 33-electrode profile.
- Compare 1, 3, and 5 percent relative noise at lambda values 5, 20, and 60.
- Measure data fit, covered model error, usable coverage, target resistivity, and contrast recovery.
- Retain reproducible measurements, inverse cells, exact tables, figures, tests, references, and documentation.
Project structure
Project components
Synthetic geology
Creates the 100 ohm m background, 20 ohm m conductive ellipse, 500 ohm m resistive block, electrode line, and independent forward mesh.
Survey simulation
Builds three valid array schemes and writes nine deterministic noisy apparent-resistivity datasets.
Inversion experiment
Runs all 27 array, noise, and lambda combinations on survey-specific parameter meshes.
Model appraisal
Calculates chi2, relative RMS, covered log10 error, coverage fraction, target geometric means, contrast recovery, and a declared rank score.
Evidence builder
Retains every cell model, exact summary table, fourteen figure pairs, tests, references, and editable documentation.
Methodology
Project workflow
- 01Define the geology
A validated JSON file declares geometry, physical properties, arrays, noise, lambda, iterations, seed, and coverage threshold.
- 02Create measurements
pyGIMLi solves the forward problem on a refined mesh and applies three deterministic noise conditions to each array.
- 03Run inversions
Each measurement set is inverted at three regularisation strengths without supplying target boundaries or true resistivity.
- 04Appraise recovery
Recovered cells are compared with known truth only where sensitivity passes the declared coverage rule.
- 05Compare and verify
The complete matrix is ranked, plotted, tested, checked for cross-platform execution, and retained with exact results.
Demonstration scenario
The best declared case is dipole-dipole with 1 percent noise and lambda 5. It gives chi2 0.7408, covered log10 model RMSE 0.0958, 91.17 percent covered cells, 80.03 percent conductive contrast recovery, and 74.37 percent resistive contrast recovery.
Engineering
Tools and method
- Tools
- The project uses pyGIMLi 1.6.0, pgcore 1.6.0, Python 3.12, NumPy, Pandas, Matplotlib for subject analysis, simulation, and results.
- Forward model
- An unstructured finite-element mesh represents known synthetic geology and the 80 m electrode profile.
- Inverse model
- pyGIMLi creates an independent parameter domain for each array and solves regularised nonlinear inversions.
- Experiment control
- Python applies deterministic seeds and executes the full three by three by three factorial design.
- Evidence layer
- Pandas, CSV, JSON, PNG, and SVG retain measurements, recovered cells, metrics, and figures.
- Verification
- Automated tests, full workflow reproduction, dependency checks, vulnerability audit, and repository validation verify the delivery.
Testing
Evaluation
Evaluation measures
- Chi2 and relative RMS under each declared error model
- Covered-cell log10 resistivity RMSE against known synthetic truth
- Conductive-plume and resistive-block geometric-mean resistivity
- Target contrast recovery and spatial coverage fraction
- Array, noise, and regularisation sensitivity across all 27 cases
- Automated tests, cross-platform workflow, dependency audit, and repository acceptance
Project boundaries
- The targets, noise, and background are synthetic and are not measurements from a field site.
- The preferred array and lambda apply only to the declared geometry, electrode line, error model, and appraisal score.
- The study does not include topography, induced polarization, anisotropy, time-lapse change, three-dimensional structure, or calibrated petrophysics.
- Field decisions require site-specific acquisition, reciprocal errors, surveyed electrodes, geological control, uncertainty analysis, permissions, and qualified geoscientists.
Included
- 01Complete Python and pyGIMLi source code
- 02Three electrode arrays and nine retained apparent-resistivity datasets
- 03Twenty-seven complete inversions and cell-level model tables
- 04Fourteen project figures in PNG and SVG
- 05Three public-domain ERT images with provenance
- 06Fifty annotated references, including current 2026 work
- 07Thirty-eight automated tests with 100 percent scientific statement and branch coverage
- 08Complete project files, calculations, results, and analysis material in a private GitHub repository
- 0974-page project documentation in PDF and editable Word formats
- 109-page setup and usage guide in PDF and editable Word formats
Project record
No information is collected on this page.
- Permanent project ID
- GP-GE-08D8KXF
- Catalogued
- 21 Aug 2026
- Completed
- 26 Aug 2026
- Verified
- 26 Aug 2026
- Demonstration
- Included in repository
Handover
After purchase
- 01Payment is confirmed
The project is marked unavailable and cannot be purchased again.
- 02Repository access is granted
The buyer's submitted GitHub account receives access to the private repository.
- 03The purchase record is delivered
The certification sheet is prepared from the reviewed buyer details and sent privately by email.