Inversion¶
Note
This chapter is devoted to inversion (or optimization) of model geometry. Inversion of model physical properties (density/susceptibility) is covered by the section Density inversion.
Geometry optimization in IGMAS+ is based on nonlinear optimization and specifically deals with adjusting the shape, position, and size of the model elements to minimize the difference between the observed data (e.g. gravity measurements) and the model predictions (the calculated potential field). Hence, geometry optimization is possible for a correctly triangulated model and requires a measured potential field.
As we consider optimization of geometrical parameters of a 3-D model, and it is a highly non-linear problem, this requires a suitable nonlinear optimization method. For optimization the Evolution Strategy with Covariance Matrix Adaptation, or CMA-ES (Hansen, 2016; Weng, 2019) has been chosen.
Geometry optimization based on spring-based space warping¶
The geometry optimization based on spring-based space warping utilizing the CMA-ES is introduced in details in Alvers at al. (2023).
In order to be able to use the spring-based space warping, it is necessary to setup a lattice of nodes which would serve as connections for the virtual elastic springs, and which will be actually controlling the warping.
Setup lattice¶
By default, the whole model volume is taken and the lattice consists of a single rectangular prism with 4 edges/nodes on the corners of the model.
- With icon
you can add more lattice nodes, i.e. make the lattice finer - Similarly, with icon
you can remove lattice nodes, i.e. make the lattice coarser - In case of mistakes, you can completely remove the lattice using icon

There are two lattice transformation modes controlled by swapping icons
and
:
means that the matrix transformation mode is selected (default)
means that the trilinear transformation mode is selected
Matrix transformation mode¶
In the matrix transformation mode you can adjust the lattice coarseness with
and
.
It is also possible to adjust the positions of individual nodes with pressing Shift and dragging with mouse Left Button.
Trilinear transformation mode¶
In the trilinear transformation mode it is possible to move (translate), scale and rotate the lattice:
- The translation mode is enabled by default or by pressing L. You can move along one of the three axes (by dragging one of the three arrows) or arbitrary (by dragging the central cube)
- The scaling mode is enabled by pressing K. it can be also done in one dimension
- The rotation mode is enabled by pressing J
Interface geometry optimization¶
Here is the minimal workflow to start the interface inversion:
- Load or create the model with at least one interface (you can use this simple two-body model for testing)
- Load the measured data
- In the Object Tree, right click on Interfaces and select Add Category
- Choose Inversion and click OK
- The new Inversion entry will appear in Interfaces
- Add an interface to the Inversion category
- Pick the desired interface and drag it to the Inversion entry
-
Open interface inversion dialogue using the start icon

- Interface inversion settings window will open
- Select the Optimizer
- Optimizer tri-check: enable checking if triangles in the mesh modified after each generation are intersecting (results in longer evaluation time)
- Optimizer no-check: no checking is enabled (faster, but can result in an inconsistent mesh with intersections)
- Adjust the Standard Deviation: the initial standard deviation of depth coordinates of interface vertices
- Adjust the Stop-Quality SD: the threshold value of the quality
- Select the effects to be used for the update of the calculated fields:
- Use Triangle Effect: involve calculation of effect of the triangulated bodies
- Use Voxel Effect: involve calculation of the effect of the voxel cubes
- Select a desired field to use in optimization: by default all available fields are used
-
Click Next
- The area settings window will open:
The default area is the area covered by stations.
- Click Finish
Tip
Feel free to use the simple two-body model from our example in this release post for testing.


