Welcome
=======

Dear reader, thank you for choosing [**IGMAS+**](https://www.gfz.de/igmas) and welcome to the **IGMAS+** Online and [:fontawesome-brands-osi: Open-Source](https://git.gfz-potsdam.de/igmas/igmas-docs) Documentation!

[![](assets/images/igmasLogo.png){width="500" style="display:block; margin:0 auto;"}](https://www.gfz.de/igmas)

<!-- <figure markdown>
  [![](assets/images/igmasLogo.png){ width="500" }](https://www.gfz.de/igmas)  
</figure> -->
About
-----

This website aims to enhance your understanding of the fundamental capabilities of the **IGMAS+** software and offer basic support. It provides a detailed explanation of how to fully utilize the powerful graphical interface of **IGMAS+**.

This documentation is the result of diligent and meticulous work carried out by the members of the [**IGMAS+ Team**](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/about/#team) over the years. Their motivation stems from the high demand within the **IGMAS+** user community for an in-depth description of the software.

We encourage you to take your time to become familiar with **IGMAS+**. Please bear in mind that this documentation has been written by non-native English speakers.
We believe that **IGMAS+** will significantly contribute to your scientific endeavors, aiding in the integrated, interdisciplinary interpretation of complex geological structures at the macro-, meso-, and micro-scale.

???+ warning

    This online documentation is under ongoing development: some parts can be missing and some materials can look incorrectly.

AI Assistant
------------

This documentation is used as a knowledge base for the [**IGMAS+ AI Assistant**](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/getting-started/documentation/#ai-assistant) based on ChatGPT by :simple-openai: OpenAI.
The **IGMAS+ AI Assistant** is designed to help users in finding information and answering questions related to the **IGMAS+** software.

The knowledge base for the **IGMAS+ AI Assistant** is represented by a single ASCII file in markdown format and contains all relevant information from this documentation. It is continuously updated to ensure that the information provided to the AI Assistant is accurate and up-to-date.
Download the knowledge base file `igmas-knowledge-base.md` here:

[Download  :fontawesome-brands-markdown:](https://igmas.git-pages.gfz-potsdam.de/igmas-docs/files/igmas-knowledge-base.md){.md-button .md-button--primary}

Download as PDF
---------------

The contents of this website can also be downloaded as a standalone PDF file:

[Download  :fontawesome-solid-file-pdf:](https://igmas.git-pages.gfz-potsdam.de/igmas-docs/files/igmas-docs.pdf){.md-button .md-button--primary}

The legacy IGMAS+ User Manual is available [here](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/files/IGMAS_User_Manual.pdf).

Quick Links
-----------

::: {.grid .cards markdown=""}
-   :fontawesome-solid-display: [**User Interface**](./user_interface/index.md)

    ------------------------------------------------------------------------

    [![User Interface](gui_window.png)](./user_interface/index.md)

    The detailed description of the **IGMAS+** graphical user interface and its elements.

    [:octicons-arrow-right-24: **User Interface**](./user_interface/index.md)

-   :fontawesome-solid-graduation-cap: [**Tutorial**](./tutorial/index.md)

    ------------------------------------------------------------------------

    [![Tutorial](./tutorial/two_polyhedra_model.png)](./tutorial/index.md)

    Gravity and magnetic modelling basics blended with **IGMAS+** practical insights.

    [:octicons-arrow-right-24: **Tutorial**](./tutorial/index.md)

-   :fontawesome-solid-list-ol: [**Workflows**](./workflows/index.md)

    ------------------------------------------------------------------------

    [![Workflows](create_model_result_calculation.png)](./workflows/index.md)

    Typical **IGMAS+** workflows explained in a simple and efficient way.

    [:octicons-arrow-right-24: **Workflows**](./workflows/index.md)

-   :fontawesome-solid-images: [**Examples**](./examples/index.md)

    ------------------------------------------------------------------------

    [![Examples](./examples/eva_3d_view_sections.png)](./examples/index.md)

    A collection of exemplary applications showcasing how **IGMAS+** can successfully tackle various challenges. The examples are organized in a way that they focus on a specific topic or workflow, making it easier for users to learn from real-world scenarios.

    [:octicons-arrow-right-24: **Examples**](./examples/index.md)

-   :fontawesome-solid-gears: [**Technical Information**](./technical_information/index.md)

    ------------------------------------------------------------------------

    [![Technical Information](technical_information.png)](./technical_information/index.md)

    This chapter describes core algorithms and calculation methods used in **IGMAS+**: triangle kernel, invariants, voxel processing, isosurface extraction. It contains an overview of supported file formats, units, coordinate systems and projections.

    [:octicons-arrow-right-24: **Technical Information**](./technical_information/index.md)

-   :fontawesome-solid-book-atlas: [**Glossary**](./glossary.md)

    ------------------------------------------------------------------------

    [![Glossary](glossary.png)](./glossary.md)

    Key terms, abbreviations and definitions used throughout **IGMAS+**, covering software, graphics and computer science topics, as well as geophysics, geology and related concepts to aid your understanding of the software and its foundations.

    [:octicons-arrow-right-24: **Glossary**](./glossary.md)
:::

Discover More
-------------

::: {.grid .cards markdown="" style="grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));"}
-   :fontawesome-solid-circle-down:{ .lg .middle }  [Get the installer](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/getting-started/installation/#download)

    ------------------------------------------------------------------------

    The **IGMAS+** installer is a self-extracting JAR file that contains all necessary files to run **IGMAS+** on your computer

    [Download  :fontawesome-solid-download:](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/getting-started/installation/#download){.md-button .md-button--primary}

    [:octicons-arrow-right-24: **Browse Versions**](https://git.gfz-potsdam.de/igmas/igmas-releases/-/releases)

-   :material-clock-fast:{ .lg .middle }  [**Set up quickly**](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/getting-started)

    ------------------------------------------------------------------------

    [This quick tutorial](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/getting-started) will show you how to install and run **IGMAS+** on different platforms

    [:octicons-arrow-right-24: **Getting Started**](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/getting-started)

-   :material-scale-balance:{ .lg .middle }  [**No cost license**](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/getting-started/license)

    ------------------------------------------------------------------------

    **IGMAS+** is provided at no cost according to the [**IGMAS+ license agreement**](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/getting-started/license/license-terms-and-conditions)

    [:octicons-arrow-right-24: **Get License**](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/getting-started/license)

-   :fontawesome-solid-circle-info:{ .lg .middle }  [**Read more**](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/about)

    ------------------------------------------------------------------------

    Discover **IGMAS+**: the [team](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/about/#team), [history](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/about/#history), and the [timeline](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/about/#timeline) of **IGMAS+** across years

    [:octicons-arrow-right-24: **About IGMAS+**](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/about)

-   :fontawesome-solid-book-open-reader:{ .lg .middle }  [**References**](./references.md)

    ------------------------------------------------------------------------

    A comprehensive [list of references](./references.md) used in the **IGMAS+** documentation

    [:octicons-arrow-right-24: **References**](./references.md)
:::

<figure>
[![](img/legal_header_light.png#only-light){width="1400"}](https://www.gfz.de)[![](img/legal_header_dark.png#only-dark){width="1400"}](https://www.gfz.de)
</figure>
User Interface
==============

???+ quote
If you find an element of your interface requires instructions, then you need to redesign it.
― *Dan Rubin*

Preface
-------

The **User Interface** chapter is your key to unlocking the full potential of **IGMAS+**. In these pages, we'll guide you through the intuitive layout and powerful tools that make navigating the software a breeze.

Get ready to:

-   Master the workspace: understand the menus, toolbars, and customizable elements that shape your **IGMAS+** experience.
-   Discover shortcuts: streamline your workflow with time-saving keyboard shortcuts and efficient navigation techniques.
-   Visualize your ideas: learn how to customize displays, manipulate views, and use visual tools to gain insights into your models.

Let's dive in and make **IGMAS+** your intuitive modeling companion!

Interface layout
----------------

Here are general **IGMAS+** interface layouts in light and dark themes:

=== "Light theme"

    ![IGMAS+ Graphical User Interface: light theme](1_light_layout.png){: style="width:800px"}

=== "Dark theme"

    ![IGMAS+ Graphical User Interface: dark theme](2_dark_layout.png){: style="width:800px"}

<!-- <a name="figure-interface_layout"></a>

<figure markdown>
  ![IGMAS+ Graphical User Interface: light theme](1_light_layout.png){: style="width:500px"}
  ![IGMAS+ Graphical User Interface: dark theme](2_dark_layout.png){: style="width:500px"}
  <figcaption>IGMAS+ Graphical User Interface</figcaption>
</figure> -->
Check out [how to set up the interface theme](../workflows/initial.md#theme).

The main elements of the layout are:

::: {.grid .cards markdown=""}
-   :fontawesome-solid-arrow-up-wide-short:{ .lg .middle }  **[Menu Bar](./menu.md)**

    ------------------------------------------------------------------------

    [![Menu Bar](menu_bar.png)](./menu.md)

    Most functions are called using the menu entries in the **Menu Bar** at the top left of the interface window.

    [![Information panel](information_panel.png)](./menu.md)

    Information panel contains information about the **IGMAS+** version, as well as a current project name and a timeline version tag.

    [![Search panel](search_panel.png)](./menu.md)

    Search panel can be used for quick access to the search functionality on this website.

    [:octicons-arrow-right-24: **Discover more**](./menu.md)

-   :fontawesome-solid-toolbox:{ .lg .middle }  **[Tool Bar](./toolbar.md)**

    ------------------------------------------------------------------------

    [![Tool Bar](tool_bar.png)](./toolbar.md)

    Left side of the **Tool Bar** below the **Menu Bar** is used for quick access to typical project manager functions

    [![Tool Bar icons](tool_bar_icons.png)](./toolbar.md)

    Icons on the right side of the **Tool Bar** are used for quick access to typical functionality, model views and plugins

    [:octicons-arrow-right-24: **Discover more**](./toolbar.md)

-   :fontawesome-solid-folder-tree:{ .lg .middle }  **[Object Tree](./object_tree.md)**

    ------------------------------------------------------------------------

    [![Object Tree](object_tree.png)](./object_tree.md)

    The **Object Tree** at the left side represents the workspace with all model objects listed in a hierarchical order. Visualization for each object can be toggled using the checkboxes, and right mouse button is used to access options specific for each object.

    [:octicons-arrow-right-24: **Discover more**](./object_tree.md)

-   :fontawesome-solid-cube:{ .lg .middle }  **[Views Window](./views.md)**

    ------------------------------------------------------------------------

    [![Views window](views_window.png)](./views.md)

    The **Views Window** at the right side contains one or more various views of the model

    [:octicons-arrow-right-24: **Discover more**](./views.md)

-   :fontawesome-solid-list:{ .lg .middle }  **[Property Editor Tab](./property_editor.md)**

    ------------------------------------------------------------------------

    [![Property editor tab](property_editor_tab.png)](./property_editor.md)

    The **Property Editor Tab** at the bottom left is used to view or change the properties of individual elements selected in the **Object Tree**

    [:octicons-arrow-right-24: **Discover more**](./property_editor.md)

-   :fontawesome-solid-table-list:{ .lg .middle }  **[Body Manager Tab](./body_manager.md)**

    ------------------------------------------------------------------------

    [![Body manager tab](body_manager_tab.png)](./body_manager.md)

    The **Body Manager Tab** at the bottom left contains a table to manage model bodies, as well as to view, add and modify the physical properties of the bodies. It is possible to export the table using the icon on the top right side.

    [:octicons-arrow-right-24: **Discover more**](./body_manager.md)

-   :fontawesome-solid-circle-info:{ .lg .middle }  **[Information Tab](./information.md)**

    ------------------------------------------------------------------------

    [![Information tab](information_tab.png)](./information.md)

    The **Information Tab** at the bottom left contains information on numerical data at cursor position in different views

    [:octicons-arrow-right-24: **Discover more**](./information.md)

-   :fontawesome-solid-bars-progress:{ .lg .middle }  **[Status Bar](./status.md)**

    ------------------------------------------------------------------------

    [![Status bar](status_bar.png)](./status.md)

    The **Status Bar** at the bottom of the interface contains information on the current session:
    -   Memory status: place the cursor above the memory status bar to get more information about actual and maximum available memory. The bar turns red, if the allocated memory reaches a critical level
    -   Progress status: visualizes the activity status. The progress in not necessarily linear
    -   Model status: traffic light shows the model status

    [:octicons-arrow-right-24: **Discover more**](./status.md)
:::

For more details on each element, check out the links in the list above.

Menu Bar
========

<a name="figure-menu_bar_full"></a>![IGMAS+ Menu Bar](menu_bar_full.png)

In the **Menu Bar** of the interface one can find menu entries:

-   [++"File"++](#file)
-   [++"Edit"++](#edit)
-   [++"View"++](#view)
-   [++"Tools"++](#tools)
-   [++"Research"++](#research)
-   [++"Help"++](#help)

There is also an [information panel](#figure-information_panel) showing the **IGMAS+** version number (e.g. `1.4.8837`), the name of the loaded project (model, e.g., `salt.model`) and its timeline version tag (e.g., `V_2023-09-29_10_53`).

<a name="figure-information_panel"></a>*![Information panel](information_panel.png)*

The timeline version tag shows the date and time when the model was saved last time and is given in the format: `V_YYYY_MM_DD_HH_mm`, where

-   `V` stands for version
-   `YYYY` is the year
-   `MM` is the month
-   `DD` is the day
-   `HH` are hours
-   `mm` are minutes

The [search panel](#figure-search_panel) can be used for quick access to the search functionality on this website:

<a name="figure-search_panel"></a>
*![Search panel](search_panel.png)*

A search request is constructed in the following format:

[`https://igmas.git-pages.gfz-potsdam.de/igmas-docs/?q=request`](https://igmas.git-pages.gfz-potsdam.de/igmas-docs/?q=request)

where `request` is what you search for.

------------------------------------------------------------------------

File
----

++"File"++ menu entry consists of the following sub-entries:

-   [Project-related menu entries](#project-related-menu-entries):
    -   ++"New Project"++ is used to create a new project
    -   ++"Open Project"++ is used to load an already existing project
    -   ++"Save Project"++ and ++"Save as"++ are used to save the current modified project.
    -   ++"Close Project"++ is used to close the current project.
-   [Import / Export menu entries](#import-export-menu-entries):
    -   ++"Import"++ is used to import data
    -   ++"Export"++ is used to export data
-   [++"Exit"++](#exit) is used to quit

### Project-related menu entries

The typical file load/save functionality is implemented in ++"Open Project"++ and ++"Save Project"++ menu entries. Both ++"Save Project"++ and ++"Save as"++ allow you to save the project within a folder. In both cases **IGMAS+** will ask after a directory name and a new directory (global folder) and subdirectory (timeline folder) will be created. This directory structure keeps the valuable information about project changes over time. In this way the user can always recover old and current models.

### Import / Export menu entries

++"Import"++ and ++"Export"++ entrees can be used for data exchange with other software products.

It is possible to import the following data to **IGMAS+**:

-   Borehole
-   Model
-   Stations
-   Interfaces
-   PointSet (set of points)
-   Lines
-   Image
-   VoxelCube
-   Project (XML)

It is possible to export the following data from **IGMAS+**:

-   Body Parameter Table
-   Boreholes
-   Model
-   Stations
-   Interfaces
-   VoxelCube
-   Border-VoxelCube
-   StressMap

### Exit

Menu entry ++"Exit"++ is used to quit **IGMAS+**. Before closing, **IGMAS+** will check for changes in the project and a corresponding dialogue will pop up:

<a name="figure-exit_dialogue"></a>
*![Exit dialogue](exit_dialogue.png)*

------------------------------------------------------------------------

Edit
----

++"Edit"++ menu entry consists of the following sub-entries:

-   [++"Add sections"++](#add-sections)
-   [++"Model - Triangulation"++](#model-triangulation)
-   [++"Preferences"++](#preferences)
-   [++"Options"++](#options)
-   [++"Undo"++](#undo-redo) and [++"Redo"++](#undo-redo)

### Add sections

++"Add sections"++ will open the sectioning wizard:

<a name="figure-sectioning_wizard"></a>
<figure>
![Sectioning wizard](sectioning_wizard.png){: style="width:500px"}
<figcaption>
Sectioning wizard
</figcaption>
</figure>
It is used to generate new vertical working sections, usually it is needed to get a higher flexibility for the structures.
The sections are constructed by cutting the complete triangulated domain with section planes, and build polygons out of the resulting cross sections.

!!! warning
To use the sectioning wizard you must be sure, that the triangulation is up-to-date.
In doubt, use ++"Edit"++ --\> [++"Model - Triangulation"++](#model-triangulation) or ![Triangulation](icon_triangulation.png) once.

The wizard [shows](#figure-sectioning_wizard) the area where your model is located. Change the values according to your needs:

-   Define the distance (**Spacing**) between the newly created working sections
-   Change the number (**Count**) of them

Use ++"Preview"++ to update the preview of the working sections on the right.

It is also possible to adjust the area in which the working sections are defined:

<a name="figure-sectioning_wizard_adjust_area"></a>
<figure>
![Sectioning wizard](sectioning_wizard_adjust_area.png){: style="width:500px"}
<figcaption>
Adjusting area covered with working sections in the sectioning wizard
</figcaption>
</figure>
To define the area, either move one of the white circle, or click one of them with ++"right mouse button"++ to use numeric input.

The green color shows the side which is used as a first section. In the [figure above](#figure-sectioning_wizard_adjust_area) the southern side of the rectangular area is used is a first working section. In the [figure below](#figure-sectioning_wizard_adjust_area) the western side of the rectangular area is used is a first working section.

Select ++"Preview"++ and then ++"Finish"++ once you are ready and run ++"Edit"++ --\> [++"Model - Triangulation"++](#model-triangulation) or ![Triangulation](icon_triangulation.png) again to update the triangulation.

If you want to reset the current configuration of the working sections, use ++"Reset"++.

See also the [Simple Basin example](../examples/Simple_Basin.md#2-add-a-working-section) for a use case.

The same sectioning wizard is used when [importing horizons](../workflows/import.md#import-horizons), with the only change is that there you can also control the direction (azimuth) of the sections:

<a name="figure-sectioning_wizard_change_azimuth"></a>
<figure>
![Sectioning wizard](sectioning_wizard_change_azimuth.png){: style="width:500px"}
<figcaption>
Adding sections with ability to change their direction (azimuth)
</figcaption>
</figure>
!!! tip
You can also change the orientation of newly created work sections if you have previously deleted all existing sections.

### Model Triangulation

++"Model - Triangulation"++ or ![Triangulation](icon_triangulation.png) will open the model triangulation wizard:

<a name="figure-model_triangulation_wizard"></a>
<figure>
![Model triangulation wizard](model_triangulation_wizard.png){: style="width:500px"}
<figcaption>
Model triangulation wizard
</figcaption>
</figure>
You decide if you want to recompute the anomaly at the same time after the triangulation.

The triangulation wizard checks the model vertices for potential triangulation error:

<a name="figure-model_triangulation_error"></a>
<figure>
![Example of a potential model triangulation error](model_triangulation_error.png){: style="width:500px"}
<figcaption>
Example of a potential model triangulation error
</figcaption>
</figure>
In case of a potential triangulation error, the wizard [shows](#figure-model_triangulation_error) the section where the problem has occurred, the corresponding body to which the affected polygon belongs, and the respective coordinates. In the [simple example above](#figure-model_triangulation_error) the error has been caused by the intersection of a body with the boundary of the model:

<a name="figure-model_triangulation_error_reason"></a>
<figure>
![Intersection of interfaces causing a potential model triangulation error](model_triangulation_error_reason.png){: style="width:500px"}
<figcaption>
Intersection of interfaces causing a potential model triangulation error
</figcaption>
</figure>
Even if there are potential error reports, you can run the triangulation by pressing ++"Finish"++, and the final triangulation can still be successful. After triangulation of the model, the actual validity of the triangulation is automatically checked for:

-   **Completeness**: each body has to be surrounded by a complete hull of triangles
-   **Orientation**: the hull of triangles has to take the orientation of the triangles into account.

The result of the triangulation check is shown in the [**Status Bar**](./status.md):

<a name="figure-model_triangulation_status"></a>
<figure>
![Status after model triangulation](model_triangulation_status.png){: style="width:500px"}
<figcaption>
Status after model triangulation
</figcaption>
</figure>
In the [example above](#figure-model_triangulation_error_reason) both the **Completeness** and **Orientation** conditions are fulfilled, therefore triangulation is successful.
However, the resulting model doesn't make physical sense because it does not correspond to a realistic geological configuration and a potential field response calculated from such a model is not comparable to a measured data.

!!! warning
Even when triangulation is successful, the model can have no physical sense

In the contrast to the situation [shown earlier](#figure-model_triangulation_error_reason), triangulation for a more complex model with the section [shown below](#figure-model_triangulation_true_error) produces several errors:

<a name="figure-model_triangulation_true_error"></a>
*![Actual triangulation errors detected after validation](model_triangulation_true_error.png)*

The reason for the error is that the **Completeness** criterion is not fulfilled. The problematic vertices in each section are highlighted with red.

### Preferences

++"Preferences"++ menu entry will open the [**Preferences** window with four tabs](#figure-preferences_general):

-   [**General**](#general)
-   [**Colour Map**](#colour-map)
-   [**Units**](#units)
-   [**Controls**](#controls)

It is possible to ++"Import"++ and ++"Export"++ the preferences in XML format, and reset them to ++"Default"++.

After changing the preferences, ++"Import"++

#### General

The preferences in the **General** tab are divided into three categories:

-   [2D](#table-preferences_2D) (control the graphics in 2D views)
-   [3D](#table-preferences_3D) (control the graphics in 3D views)
-   [General](#table-preferences_general)

<a name="figure-preferences_general"></a>
<figure>
![Preferences: general](preferences_general.png){: style="width:500px"}
<figcaption>
Preferences: general
</figcaption>
</figure>
<a name="table-preferences_2D"></a>
Preferences related to the 2D view:

  -----------------------------------------------------------------------------------------------------
  Name                              Function                                            Values
  --------------------------------- --------------------------------------------------- ---------------
  2D Rendering Quality              Rendering quality of the graphics in 2D views       high/low

  Point Colour                      Color of the polygon vertices                       color palette

  show tooltip                      Turn on/off tooltips with information on polygons   true/false

  Size in Pixel \[Point Size 2D\]   Size of the polygons vertices in pixels             numeric

  Station Dot Size \[Pixel\]        Size of the station dots in pixels                  numeric
  -----------------------------------------------------------------------------------------------------

<a name="table-preferences_3D"></a>
Preferences related to the 3D view:

  Name                  Function                                       Values
  --------------------- ---------------------------------------------- ------------------------------------------------
  Background Colour     Background color for the 3D View               color palette
  Interface Shading     Type of shading of the interfaces              [Gouraud](../glossary.md#gouraud-shading)/Flat
  Marker Colour         Color for the cursor tracking line             color palette
  Marker Size           Size of the cursor tracking marker in pixels   numeric
  Marker Speed          Speed to update each frame                     5(fast) - 30(slow)
  Render Mode           Select Render Mode                             Solid/Wireframe/Point
  Show section marker   Turn on/off section marker                     true/false

<a name="table-preferences_general"></a>
General preferences:

  Name                      Function                                                           Values
  ------------------------- ------------------------------------------------------------------ ---------------
  Clipping Box Colour       Color for the model clipping box                                   color palette
  Colour of Marker Lines    Color of the triangle lines                                        color palette
  Colour of Section Lines   Color of the lines between polygons                                color palette
  Global Transparency       Level of transparency of bodies in the 3D View                     0 - 1
  Marker Line Width         Width of the triangles lines                                       numeric
  Project Path              The default path to open projects for the user                     text path
  Section Line Width        Width of the lines between polygons                                numeric
  Show Clipping Bounds      Turn on/off the model clipping box                                 true/false
  Show Marker Lines         Turn on/off the triangles lines                                    true/false
  Show Polygon Outline      Turn on/off the lines between polygons                             true/false
  use Antialiasing          Turn on/off [antialiasing](../glossary.md#spatial-anti-aliasing)   true/false

#### Colour Map

In the **Colour Map** tab you can specify the colour map that is used for density, as well as you can adjust the range for densities manually:

<a name="figure-preferences_colour_map"></a>
<figure>
![Preferences: colour map](preferences_colour_map.png){: style="width:500px"}
<figcaption>
Preferences: colour map
</figcaption>
</figure>
#### Units

In the **Units** tab you can adjust the default project units for several physical quantities:

  Physical quantity                                       Available values for units           Default unit
  ------------------------------------------------------- ------------------------------------ --------------
  [Acceleration](../glossary.md#acceleration)             $mm/s^2, ft/s^2, gu, mGal, Gal$      $mGal$
  [Bulk Density](../glossary.md#bulk-density)             $g/cm^3, t/m^3, kg/m^3$              $t/m^3$
  [Magnetic Field](../glossary.md#magnetic-field)         $\mu T, n T$                         $n T$
  [Gravity Gradient](../glossary.md#gravity-gradient)     $mGal/m, 1/s^2, mGal/km, Eoetvoes$   $mGal/km$
  [Magnetic Gradient](../glossary.md#magnetic-gradient)   $n T/m, n T/km$                      $n T/km$

Length units are provided here just for information purposes and can't be changed in this window, as they are selected independently during the [creation of a project](../workflows/model.md#start-a-new-project).

<a name="figure-preferences_units"></a>
<figure>
![Preferences: units](preferences_units.png){: style="width:500px"}
<figcaption>
Preferences: units
</figcaption>
</figure>
#### Controls

In the **Controls** tab you can adjust preferences related to navigation in the 3D view:

-   Reverse Zoom: reverse the direction of the mouse wheel to zoom in/zoom out. If checked, rotating the mouse wheel backwards will zoom in, otherwise it will zoom out
-   Reverse Rotation: reverse the direction of rotation of the model while dragging it with the ++"left mouse button"++
-   Reverse Translation: reverse the direction of translation (movement in space) of the model while dragging it with the ++"right mouse button"++
-   Head-Up-Mode: control the way 3D rotation is done. If checked, it will no be possible to rotate the model upside-down, so the top of the model will always face upwards.

<a name="figure-preferences_controls"></a>
<figure>
![Preferences: controls](preferences_controls.png){: style="width:500px"}
<figcaption>
Preferences: controls
</figcaption>
</figure>
### Options

++"Option"++ menu entry consists of the following sub-entries:

-   [++"Look & Feel"++](#look-feel)
-   [++"Language"++](#language)

#### Look & Feel

Select among a large number of theme in light and dark variants:

*![Select interface theme](interface_theme.png)*

The "FlatLaf" themes are based on the [Flat Look and Feel](https://www.formdev.com/flatlaf/) for Java Swing desktop applications.

#### Language

**IGMAS+**, **IGMAS+** installer and **IGMAS+ Settings** are available in two languages:

-   English (default)
-   Deutsch (German)

*![Select interface language](interface_language.png)*

### Undo / Redo

With ++"Undo"++ and ++"Redo"++, and similarly with ![Undo](icon_undo.png) and ![Redo](icon_redo.png) icons you can undo or redo the last action.

!!! warning
Be careful, not all actions performed in **IGMAS+** can be undone using ++"Undo"++

------------------------------------------------------------------------

View
----

++"View"++ menu entry consists of the following sub-entries:

-   [++"Fit To Screen"++](#fit-to-screen)
-   [++"Center at"++](#center-at)
-   [++"Body Color Mode"++](#center-at)
-   [++"Add view"++](#add-view)
-   [++"Show section back"++](#show-section-backfront)
-   [++"Show section front"++](#show-section-backfront)

### Fit to Screen

When using this function, the model in the current view (3D View, 2D View or 2D Maps View) is zoomed in our out such that it fits the view tab, i.e. it is completely visible on the screen.

++"Fit To Screen"++ can alternatively be called by pressing ++f++ or by the ![Fit to Screen](view_center.png) icon on the [**Tool Bar**](./toolbar.md).

### Center at

++"Center at"++ menu entry allows to rotate the model in the 3D view and center the size at which it is facing:

-   Left side of the model: ++"View Left"++ or ![View Left](view_left.png)
-   Front side of the model: ++"View Front"++ or ![View Front](view_front.png)
-   Bottom side of the model: ++"View Bottom"++ or ![View Bottom](view_bottom.png)
-   Right side of the model: ++"View Right"++ or ![View Right](view_right.png)
-   Back side of the model: ++"View Back"++ or ![View Back](view_back.png)
-   Top side of the model: ++"View Top"++ or ![View Top](view_top.png)

### Body Color Mode

++"Body Color Mode"++ menu entry allows to change the color mode of the bodies in the 3D and 2D views.

It is possible to select among the following color modes:

-   Density Color Mode: bodies are colored according to their density
-   Normal Color Mode (default): bodies are colored according to the assigned color
-   Susceptibility Color Mode: bodies are colored according to their magnetic susceptibility

### Add View

++"Add View"++ menu entry repeats the ++"Add View"++ button and allows to add a new view to the **Views Window**.
It is possible to add the following views:

-   2D View
-   3D View
-   2D Maps View
-   Borehole View
-   SEG-Y Inspector View
-   Multiple Cutter View
-   Script View
-   Globe View

### Show section back/front

Menu entries ++"Show section back"++ and ++"Show section front"++ allow to show the back and front side (default) of the sections in the 2D view.

------------------------------------------------------------------------

Tools
-----

++"Tools"++ menu entry consists of the following sub-entries:

-   [++"Calculate Anomalies"++](#calculate-anomalies)
-   [++"Re-Calculate Anomaly"++](#re-calculate-anomaly)
-   [++"Check Topology"++](#check-topology)
-   [++"Create Station Grid"++](#create-station-grid)
-   [++"Parameter inversion (MMSE)"++](#parameter-inversion)
-   [++"Timeline Editor"++](#timeline-editor)

### Calculate Anomalies

*to be added*

### Re-Calculate Anomaly

*to be added*

### Check Topology

*to be added*

### Create Station Grid

*to be added*

### Parameter inversion

*to be added*

### Timeline Editor

*to be added*

------------------------------------------------------------------------

Research
--------

++"Research"++ menu entry consists of the following sub-entries:

-   [++"Voxelize Model"++](#voxelize-model)
-   [++"Border effect"++](#border-effect)
-   [++"Voxel algorithm"++](#voxel-algorithm)
-   [++"Triangle algorithm"++](#triangle-algorithm)
-   [++"Plugin"++](#plugin)
-   [++"Plugin Manager"++](#plugin-manager)
-   [++"JVM Settings"++](#jvm-settings)

### Voxelize Model

*to be added*

### Border effect

*to be added*

### Voxel algorithm

*to be added*

### Triangle algorithm

*to be added*

### Plugin Manager

*to be added*

### Plugin

*to be added*

### JVM Settings

In ++"Research"++ --\> ++"JVM Settings"++ user can adjust the following settings related to the [Java Virtual Machine (JVM)](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/getting-started/setup/#adjust-jvm-settings):

<a name="figure-jvm_settings_app"></a>
*![IGMAS+ Java Virtual Machine (JVM) settings](JVM_settings.png)*

-   **Initial heap size**: When JVM starts, its heap space is equal to the initial size of heap memory specified by this parameter. As application progress, more objects get created and heap space is expanded to accommodate new objects. Usually it is not needed to adjust this value.
-   **Maximum heap size**: The JVM expands heap memory in :fontawesome-brands-java: Java somewhere near to maximum heap size specified by this parameter and if there is no more memory left for creating new objects in java heap, JVM throws `java.lang.OutOfMemoryError` and application dies. Adjust it if you have [problems](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/getting-started/troubleshooting/) with loading or creating a big model.
-   **JRE for IGMAS+**: Version of the [JRE used by **IGMAS+**](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/getting-started/requirements/#java-runtime-environment).
-   **Proxy settings**: Setup proxy settings for internet connection, if needed.
-   **Stereo Settings**: User can force stereo rendering which can help to overcome [potential visualization issues](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/getting-started/troubleshooting/).

???+ tip
See more information on how to adjust the JVM settings [here](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/getting-started/setup/#adjust-jvm-settings).

The JVM settings window can also be accessed directly from the system without starting **IGMAS+**.

In Windows just start typing *IGMAS+ settings* in the **Start Menu** to find the shortcut:

<a name="figure-igmas_settings_app"></a>
<figure>
![Searching for the IGMAS+ Settings App](IGMAS_Settings_App.png){: style="width:500px"}
<figcaption>
Searching for the IGMAS+ Settings App
</figcaption>
</figure>
???+ note
You should restart **IGMAS+** for changes in the JVM settings to take effect.

------------------------------------------------------------------------

Help
----

++"Help"++ menu entry consists of the following sub-entries:

-   [++"View Help"++](#view-help)
-   [++"Check for updates"++](#check-for-updates)
-   [++"About"++](#about)
-   [++"Log Window"++](#log-window)
-   [++"License Wizard"++](#license-wizard)

### View Help

++"View Help"++ menu entry opens the Help window in the **Views Window**.
It has two tabs:

-   [List of shortcuts](#list-of-shortcuts)
-   [Equation Description](#equation-description)

#### List of shortcuts

<a name="figure-list_of_shortcuts"></a>
<figure>
![List of IGMAS+ shortcuts](list_of_shortcuts.png){: style="width:500px"}
<figcaption>
List of IGMAS+ shortcuts
</figcaption>
</figure>
#### Equation Description

The Equation Description tab contains a list of equation elements used in **IGMAS+**:

  --------------------------------------------------------------------------------------------------------------------------------------
  Operator               Description                                                                               Example
  ---------------------- ----------------------------------------------------------------------------------------- ---------------------
  `+`                    Addition of Values                                                                        `x + y`

  `-`                    Subtraction of Values                                                                     `x - y`

  `*`                    Multiplication of Values                                                                  `x * y`

  `/`                    Division of Values                                                                        `x / y`

  `%`                    Modulus of Values                                                                         `x % y`

  `^`                    Power operator                                                                            `x^2`

  `e`                    The double value that is closer than any other to e, the base of the natural logarithms   `2.718281828459045`
  --------------------------------------------------------------------------------------------------------------------------------------

  ---------------------------------------------------------------------------------------------------------------------------------------------------------------
  Constant               Description                                                                                                        Example
  ---------------------- ------------------------------------------------------------------------------------------------------------------ ---------------------
  `pi`                   The double value that is closer than any other to pi, the ratio of the circumference of a circle to its diameter   `3.141592653589793`

  ---------------------------------------------------------------------------------------------------------------------------------------------------------------

  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  Function                Description                                                                                                                                                                                                                                     Example                         Parameters                                                                                          Returns
  ----------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------- --------------------------------------------------------------------------------------------------- ------------------------------------------------
  `gardner(a, scale)`     Gardner's relation, or Gardner's equation, named after G. H. F. Gardner and L. W. Gardner, is an empirically derived equation that relates seismic P-wave velocity to the bulk density of the lithology in which the wave travels               `gardner(cellvalue, scale)`     `a` - an argument (typical: `cellvalue`), `scale` - factor for scale the unit (ex. 1000 for km/s)   evaluation of the `gardner` function for m/s

  `nafedrake(a, scale)`   Nafe - Drake relationship -a n empirical relationship between the P-wave velocity and density of water-saturated sediments and sedimentary rocks. It is commonly used to evaluate the density of sedimentary rocks in shallow seismic surveys   `nafedrake(cellvalue, scale)`   `a` - an argument (typical: `cellvalue`), `scale` - factor for scale the unit (ex. 1000 for km/s)   evaluation of the `nafedrake` function for m/s
  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

\| `sin(a)` \| Returns the trigonometric sine of an angle.<br>Special cases:
<ul>
<li>
If the argument is `NaN` or an infinity, then the result is `NaN`.
</li>
<li>
If the argument is zero, then the result is a zero with the same sign as the argument.
</li>
</ul>
<br>The computed result must be within 1 ulp of the exact result. Results must be semi-monotonic. \| `sin(a)`\| `a` - an angle, in radians \| the sine of the argument \|
\| `cos(a)` \| Returns the trigonometric cosine of an angle.<br>Special cases:
<ul>
<li>
If the argument is `NaN` or an infinity, then the result is `NaN`.
</li>
</ul>
<br>The computed result must be within 1 ulp of the exact result. Results must be semi-monotonic. \| `cos(a)`\| `a` - an angle, in radians \| the cosine of the argument \|
\| `tan(a)` \| Returns the trigonometric tangent of an angle.<br>Special cases:
<ul>
<li>
If the argument is `NaN` or an infinity, then the result is `NaN`.
</li>
<li>
If the argument is zero, then the result is a zero with the same sign as the argument.
</li>
</ul>
<br>The computed result must be within 1 ulp of the exact result. Results must be semi-monotonic. \| `tan(a)`\| `a` - an angle, in radians \| the tangent of the argument \|
\| `sinh(x)` \| Returns the hyperbolic sine of a double value.<br>The hyperbolic sine of `x` is defined to be $(e^x - e^{-x})/2$ where $e$ is Euler's number.<br>Special cases:
<ul>
<li>
If the argument is `NaN`, then the result is `NaN`.
</li>
<li>
If the argument is infinite, then the result is an infinity with the same sign as the argument.
</li>
<li>
If the argument is zero, then the result is a zero with the same sign as the argument.
</li>
</ul>
<br>The computed result must be within 2.5 ulps of the exact result. \| `sinh(x)`\| `x` - the number whose hyperbolic sine is to be returned \| the hyperbolic sine of the argument \|
\| `cosh(x)` \| Returns the hyperbolic cosine of a double value.<br>The hyperbolic cosine of `x` is defined to be $(e^x + e^{-x})/2$ where $e$ is Euler's number.<br>Special cases:
<ul>
<li>
If the argument is `NaN`, then the result is `NaN`.
</li>
<li>
If the argument is infinite, then the result is a positive infinity.
</li>
<li>
If the argument is zero, then the result is 1.0.
</li>
</ul>
<br>The computed result must be within 2.5 ulps of the exact result. \| `cosh(x)`\| `x` - the number whose hyperbolic cosine is to be returned \| the hyperbolic cosine of the argument \|
\| `tanh(x)` \| Returns the hyperbolic tangent of a double value.<br>The hyperbolic tangent of `x` is defined to be $(e^x - e^{-x})/(e^x + e^{-x})$, in other words, `sinh(x)/cosh(x)`.<br>Note that the absolute value of the exact `tanh` is always less than 1.<br>Special cases:
<ul>
<li>
If the argument is `NaN`, then the result is `NaN`.
</li>
<li>
If the argument is infinite, then the result is an infinity with the same sign as the argument.
</li>
<li>
If the argument is zero, then the result is a zero with the same sign as the argument.
</li>
<li>
If the argument is positive infinity, then the result is +1.0.
</li>
<li>
If the argument is negative infinity, then the result is -1.0.
</li>
</ul>
<br>The computed result must be within 2.5 ulps of the exact result. \| `tanh(x)`\| `x` - the number whose hyperbolic tangent is to be returned \| the hyperbolic tangent of the argument \|
\| `asin(a)` \| Returns the arc sine of a value; the returned angle is in the range $-\pi/2$ through $\pi/2$.<br>Special cases:
<ul>
<li>
If the argument is `NaN` or its absolute value is greater than 1, then the result is `NaN`.
</li>
<li>
If the argument is zero, then the result is a zero with the same sign as the argument.
</li>
</ul>
<br>The computed result must be within 1 ulp of the exact result. Results must be semi-monotonic. \| `asin(a)`\| `a` - the value whose arc sine is to be returned \| the arc sine of the argument \|
\| `acos(a)` \| Returns the arc cosine of a value; the returned angle is in the range 0.0 through $\pi$.<br>Special cases:
<ul>
<li>
If the argument is `NaN` or its absolute value is greater than 1, then the result is `NaN`.
</li>
</ul>
<br>The computed result must be within 1 ulp of the exact result. Results must be semi-monotonic. \| `acos(a)`\| `a` - the value whose arc cosine is to be returned \| the arc cosine of the argument \|
\| `atan(a)` \| Returns the arc tangent of a value; the returned angle is in the range $-\pi/2$ through $\pi/2$.<br>Special cases:
<ul>
<li>
If the argument is `NaN`, then the result is `NaN`.
</li>
<li>
If the argument is zero, then the result is a zero with the same sign as the argument.
</li>
</ul>
<br>The computed result must be within 1 ulp of the exact result. Results must be semi-monotonic. \| `atan(a)`\| `a` - the value whose arc tangent is to be returned \| the arc tangent of the argument \|
\| `atan2(y, x)` \| Returns the angle theta from the conversion of rectangular coordinates $(x, y)$ to polar coordinates $(r, \theta)$.<br>This method computes the phase $\theta$ by computing an arc tangent of `y/x` in the range of $-\pi$ to $\pi$.<br>Special cases:
<ul>
<li>
If the argument is `NaN`, then the result is `NaN`.
</li>
<li>
If the first argument is positive zero and the second argument is positive, or the first argument is positive and finite and the second argument is positive infinity, then the result is positive zero.
</li>
<li>
If the first argument is negative zero and the second argument is positive, or the first argument is negative and finite and the second argument is positive infinity, then the result is negative zero.
</li>
<li>
If the first argument is positive zero and the second argument is negative, or the first argument is positive and finite and the second argument is negative infinity, then the result is the double value closest to $\pi$.
</li>
<li>
If the first argument is negative zero and the second argument is negative, or the first argument is negative and finite and the second argument is negative infinity, then the result is the double value closest to $-\pi$.
<li>
If the first argument is positive and the second argument is positive zero or negative zero, or the first argument is positive infinity and the second argument is finite, then the result is the double value closest to $\pi/2$.
</li>
<li>
If the first argument is negative and the second argument is positive zero or negative zero, or the first argument is negative infinity and the second argument is finite, then the result is the double value closest to $-\pi/2$.
</li>
<li>
If both arguments are positive infinity, then the result is the double value closest to $\pi/4$.
</li>
<li>
If the first argument is positive infinity and the second argument is negative infinity, then the result is the double value closest to $3\pi/4$.
</li>
<li>
If the first argument is negative infinity and the second argument is positive infinity, then the result is the double value closest to $-\pi/4$.
</li>
<li>
If both arguments are negative infinity, then the result is the double value closest to $-3\pi/4$.
</li>
</ul>
<br>The computed result must be within 2 ulps of the exact result. Results must be semi-monotonic. \| `atan2(y, x)`\| `y` - the ordinate coordinate, `x` - the abscissa coordinate \| the theta component of the point $(r, \theta)$ in polar coordinates that corresponds to the point $(x, y)$ in Cartesian coordinates. \|
\| `deg(x)` \| Converts an angle measured in radians to an approximately equivalent angle measured in degrees.<br>The conversion from radians to degrees is generally inexact; users should not expect `cos(toRadians(90.0))` to exactly equal 0.0. \| `deg(x)` \| `x` - an angle, in radians \| the measurement of the argument in degrees \|
\| `rad(x)` \| Converts an angle measured in degrees to an approximately equivalent angle measured in radians.<br>The conversion from degrees to radians is generally inexact. \| `rad(x)` \| `x` - an angle, in degrees \| the measurement of the argument in radians \|
\| `abs(a)` \| Returns the absolute value of a double value.<br>If the argument is not negative, the argument is returned.<br>If the argument is negative, the negation of the argument is returned.<br>Special cases:
<ul>
<li>
If the argument is positive zero or negative zero, the result is positive zero.
</li>
</ul>
\| `abs(a)` \| `a` - the argument whose absolute value is to be determined \| the absolute value of the argument \|
\| `round(a)` \| Returns the closest int to the argument.<br>The result is rounded to an integer by adding 1/2, taking the floor of the result, and casting the result to type `int`.<br>Special cases:
<ul>
<li>
If the argument is NaN, the result is 0.
</li>
<li>
If the argument is negative infinity or any value less than or equal to the value of `Integer.MIN_VALUE`, the result is equal to the value of `Integer.MIN_VALUE`.
</li>
<li>
If the argument is positive infinity or any value greater than or equal to the value of `Integer.MAX_VALUE`, the result is equal to the value of `Integer.MAX_VALUE`.
</li>
</ul>
\| `round(a)` \| `a` - a floating-point value to be rounded to an integer \| the value of the argument rounded to the nearest `int` value \|
\| `ceil(a)` \| Returns the smallest (closest to negative infinity) double value that is greater than or equal to the argument and is equal to a mathematical integer. \| `ceil(a)` \| `a` - a value \| the smallest (closest to negative infinity) floating-point value that is greater than or equal to the argument and is equal to a mathematical integer \|
\| `floor(a)` \| Returns the largest (closest to positive infinity) double value that is less than or equal to the argument and is equal to a mathematical integer. \| `floor(a)`\| `a` - a value \| the largest (closest to positive infinity) floating-point value that less than or equal to the argument and is equal to a mathematical integer \|
\| `exp(a)` \| Returns Euler's number $e$ raised to the power of a double value.<br>Special cases:
<ul>
<li>
If the argument is `NaN`, the result is `NaN`.
</li>
<li>
If the argument is positive infinity, then the result is positive infinity.
</li>
<li>
If the argument is negative infinity, then the result is positive zero.
</li>
</ul>
<br>The computed result must be within 1 ulp of the exact result. Results must be semi-monotonic. \| `exp(a)` \| `a` - the exponent to raise $e$ to \| the value $e^a$, where $e$ is the base of the natural logarithm \|
\| `ln(a)` \| Returns the natural logarithm (base $e$) of a double value.<br>Special cases:
<ul>
<li>
If the argument is `NaN` or less than zero, then the result is `NaN`.
</li>
<li>
If the argument is positive infinity, then the result is positive infinity.
</li>
<li>
If the argument is positive zero or negative zero, then the result is negative infinity.
</li>
</ul>
<br>The computed result must be within 1 ulp of the exact result. Results must be semi-monotonic. \| `ln(a)` \| `a` - a value \| the value `ln a`, the natural logarithm of `a` \|
\| `log(a)` \| Returns the base 10 logarithm of a double value.<br>Special cases:
<ul>
<li>
If the argument is `NaN` or less than zero, then the result is `NaN`.
</li>
<li>
If the argument is positive infinity, then the result is positive infinity.
</li>
<li>
If the argument is positive zero or negative zero, then the result is negative infinity.
</li>
<li>
If the argument is equal to `10n` for integer `n`, then the result is `n`.
</li>
</ul>
<br>The computed result must be within 1 ulp of the exact result. Results must be semi-monotonic. \| `log(a)` \| `a` - a value \| the base 10 logarithm of `a` \|
\| `sqrt(a)` \| Returns the correctly rounded positive square root of a double value.<br>Special cases:
<ul>
<li>
If the argument is `NaN` or less than zero, then the result is `NaN`.
</li>
<li>
If the argument is positive infinity, then the result is positive infinity.
</li>
<li>
If the argument is positive zero or negative zero, then the result is the same as the argument.
</li>
</ul>
<br>Otherwise, the result is the double value closest to the true mathematical square root of the argument value. \| `sqrt(a)` \| `a` - a value \| the positive square root of `a` \|
\| `min(a, b)` \| Returns the smaller of two values. \| `min(a, b)` \| `a` - an argument, `b` - another argument \| the smaller of `a` and `b` \|
\| `max(a, b)` \| Returns the larger of two values. \| `max(a, b)` \| `a` - an argument, `b` - another argument \| the larger of `a` and `b` \|
\| `rnd(a)` \| Generate a random number (between 0 and a given argument) \| `rnd(a)` \| `a` - a value \| a random number \|
\| `sign(a)` \| Returns the signum function of the argument; zero if the argument is zero, `1.0f` if the argument is greater than zero, `-1.0f` if the argument is less than zero. \| `sign(a)` \| `a` - the floating-point value whose signum is to be returned \| the signum function of the argument \|
\| `if(condition, expr1, expr2)` \| Provides an if-like function; it expects three arguments: a condition, an expression being evaluated if the condition is 1 and an expression which is being evaluated if the condition is not 1. \| `if(z > -6, exp(z), z)` \| `condition` - the condition (`<`, `<=`, `=`, `>=`, `>`, `!=`), `expr1` - will be evaluated if condition is true, `expr2` - will be evaluated if condition false \| the evaluation of the condition \|

  -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  Variable                        Description                                                                                                                                                          Returns
  ------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------
  `x`                             Returns the middle $x$ coordinate of the current cell in the voxelization process                                                                                    mid `x` - cell value

  `y`                             Returns the middle $y$ coordinate of the current cell in the voxelization process                                                                                    mid `y` - cell value

  `z`                             Returns the middle $z$ coordinate of the current cell in the voxelization process                                                                                    mid `z` - cell value

  `density`                       Returns the density value of the Body (subtract by reference density) at Cell Location $x$, $y$, $z$ of the current cell in the voxelization process                 `density` - density value subtract by reference density (only if available!)

  `susceptibility`                Returns the susceptibility value of the Body (subtract by reference susceptibility) at Cell Location $x$, $y$, $z$ of the current cell in the voxelization process   `susceptibility` - susceptibility value subtract by reference susceptibility(only if available!)

  `zmin`                          Gets the lower $z$ - corner of the bounding box from the current Body                                                                                                `z` - lower $z$ - corner

  `zmax`                          Gets the upper $z$ - corner of the bounding box from the current Body                                                                                                `z` - upper $z$ - corner

  `cellvalue`                     Gets the current Cell Value of the Voxel Cube(for import)                                                                                                            `cellvalue` - the current cell value (0 - if not found)

  `ztopo`                         Gets the deepest $z$ value at Cell \[$x$,$y$\] of the Interfaces defined in the Bathymetry Tree Node                                                                 `ztopo` - $z$ value at Cell \[$x$,$y$\]
  -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Equation elements are used mainly during the [voxel import](../workflows/voxels.md#import-a-voxel-cube).

### Check for updates

*to be added*

### About

*to be added*

### Log Window

*to be added*

### License Wizard

*to be added*

Tool Bar
========

<a name="figure-tool_bar_full"></a>![IGMAS+ tool bar](tool_bar_full.png)
\# Object Tree

The **Object Tree** is a powerful feature of the **IGMAS+** GUI that allows you to view and manipulate the structure of your project. It provides a hierarchical view of all objects in your project.

In this chapter, you will not only learn how to use the **Object Tree** to manage your project objects but also the basic concepts of the **IGMAS+** modelling. This includes the [model](#model), [bodies](#bodies), [interfaces](#interfaces), [working sections](#sections), [anomaly fields](#fields), [stations](#stations), [voxel cubes](#voxel-cube), etc.

The **Object Tree** is located on the left side of the GUI and displays all objects in a tree-like structure.
You can use the **Object Tree** to [search](#search) select, rename, delete, and organize objects in your project.
Each object can be expanded or collapsed to show or hide its children:

<a name="figure-object-tree"></a>
<figure>
![IGMAS+ Object Tree](object_tree_full.png)
<figcaption>
IGMAS+ Object Tree
</figcaption>
</figure>
Objects are organized in a hierarchical structure, with the root object at the top and child objects nested below. The **Object Tree** is divided into several sections, each representing a different type of object in your project:

-   ![Project icon](treenode_project.png) **Project**: The root object of the project. It contains all other objects in the project:
    -   ![Model icon](treenode_model.png) [**Model**](#model): The model object represents the entire model in your project. It contains all other objects related to the model, such as:
        -   ![Fields icon](treenode_fields.png) [**Fields**](#fields): the measured, calculated and residual anomaly fields of the model, grouped by their type (e.g., `Gravity: z-component`, `Geoid Undulation`, `Magnetic: Total Field induced`, etc).
        -   ![Interface icon](treenode_interface.png) [**Interfaces**](#interfaces): the interfaces of the model, which are used to define the boundaries between the bodies in the model.
        -   ![Section icon](treenode_section.png) [**Sections**](#sections): the [working sections](../glossary.md#working-section) of the model, vertical planes that are used to edit and visualize the model.
        -   ![Station icon](treenode_station.png) [**Stations**](#stations): the stations of the model, which are used to define the locations of measurements in the model.
        -   ![Voxel icon](treenode_image3d.png) [**Voxel Cube**](#voxel-cube): the [voxel cube](../glossary.md#voxel-cube) of the model, a 3D grid of [voxels](../glossary.md#voxel).
    -   ![Clipping plane icon](treenode_clipplane.png) [**Clipping Planes**](#clipping-planes): the clipping planes of the model, which are used to define the boundaries of the model in the 3D view.
    -   ![Image icon](treenode_image.png) [**Bitmaps**](#bitmaps): collection of images that can be visualized in the 3D and 2D views.
    -   ![Bookmark icon](treenode_bookmark.png) [**Bookmarks**](#bookmarks): the bookmarks of the model, which are used to save the various camera positions in the 3D view.
    -   ![Additional data icon](icon_object.png) [**Additional Data**](#additional-data): the additional data of the model, e.g. set of points ![Points icon](treenode_vertexset.png) or lines ![Lines icon](icon-lines.png).

------------------------------------------------------------------------

Model
-----

**IGMAS+** workflows are based on the concept of a 3-D subsurface [model](../glossary.md#3d-model), which is a simplified representation of a real-world subsurface.

Here is a couple of nice quotes that might be good to keep in mind about the models:

???+ quote
A theory has only the alternative of being right or wrong. A model has a third possibility: it may be right, but irrelevant.
― *Manfred Eigen*

???+ quote
All models are wrong, but some are useful.
― *George E. P. Box*

The ![Model icon](treenode_model.png) **Model** object represents the entire model in your project. It contains all other objects related to the model, such as fields, interfaces, sections, stations and a voxel cube.
The model name is displayed in the **Object Tree** in square brackets after `Model`, e.g. `Model [Synthetic Saltdome]`.

The **Model** properties are:

*![Model properties](object_tree_model_properties.png)*

-   **Name**: The name of the model. It can be changed here.
-   **Body Count**: The number of bodies in the model (fon information only, can't be changed here).
-   **Projection**: The geographic [projection](../glossary.md#projection) of the model coordinates. It can be changed here, see more in the [Projections](../technical_information/coordinates.md#projections) chapter.
-   Properties related to the magnetic field calculation:
    -   **magnetic total field**: The magnitude of the inducing total magnetic field. Can be changed here.
    -   **inclination**: The inclination of the inducing total magnetic field. Can be changed here.
    -   **declination**: The declination of the inducing total magnetic field. Can be changed here.
-   **vertical exaggeration**: The vertical exaggeration of the model. It is used to visualize the model in the 2D and 3D views. Can be changed here.
-   **Triangle Kernel**: The properties related to the triangle (polyhedron) computation kernel of **IGMAS+**:
    -   **Algorithm**: The algorithm used to calculate the response of the polyhedron model. Can be changed here.
    -   **gravitational constant**: The [gravitational constant](../glossary.md#gravitational-constant) used for the gravity anomaly calculations, both for polyhedron (triangles) and voxel (voxels) models. Can be changed here.
    -   **Use Triangle anomaly**: The option to turn on or off the triangle (polyhedron) anomaly calculation.
-   **Border Effect**: The properties related to the reduction of the border (edge) effect of the model:
    -   **border-algorithm**: The option to select an algorithm used for reduction of the border effect of the model. Default is `none`, which means there is no reduction of the border effect.
    -   **Use border anomaly**: The option to turn on or off the border effect reduction.

### Bodies

The basic model element is the [**body**](../glossary.md#body), which defines an area of constant physical parameter (e.g. [density](../glossary.md#density), [susceptibility](../glossary.md#magnetic-susceptibility)). Its [hull](../glossary.md#hull) is composed of a number of triangles with controlled orientation. This hull has to be complete, without gaps or overlapping triangles.

For a single isolated body there is **Reference body** that is surrounding it, but usually a body has more than one direct neighbors.

### Interfaces

An [interface](../glossary.md#interface) is a set of triangles separating two bodies. Each interface belongs to one body on the **right hand side** and to another body on the **left hand side**.

!!! note

    Left and right is defined by the mathematical orientation of the triangle, not by the geometry itself (see [Triangle Orientation](../technical_information/algorithms.md#triangle-orientation)).

The core **Interfaces** object has the following uneditable properties:

-   Interfaces: total number of interfaces in the model
-   Triangle count: total number of triangles in the model

<a name="figure-interfaces_properties"></a>*![IGMAS+ Interfaces - Properties](interfaces_properties.png)*

All existing interfaces are listed in the **Object Tree** under the **Interfaces** object and are grouped by their body names. Their visualization in the 3D View may be switched on or off using the check-boxes.

<a name="figure-interfaces_objects"></a>*![IGMAS+ Interfaces - Objects](interfaces_objects.png)*

Under the body name, all interfaces surrounding this body are listed:

<a name="figure-interfaces_body_objects"></a>*![IGMAS+ Interfaces - Body - Objects](interfaces_body_objects.png)*

Two body names for each single interface, which are separated by the body separator `<>`, e.g `Caprock <> Cretaceous`. The first name specifies the name of the left body, the second name the body on the right hand side.

The list entries are sorted according to bodies: Each body has an entry in the first hierarchical level, followed by all interfaces surrounding this body, i.e. building its complete hull.

The interfaces themselves as well as their list are built
automatically and cannot be changed by the user.

The following figure shows all interfaces which belong to the hull of the `Caprock` body from the [Salt Dome model](../examples/Salt_Dome.md):

<a name="figure-caprock_body"></a>
<figure>
![Caprock body hull](caprock_body.png){: style="width:500px"}
<figcaption>
Caprock body hull
</figcaption>
</figure>
These interfaces are:

-   Caprock and Cretaceous - `Caprock <> Cretaceous` (orange)
-   Caprock and Zechstein - `Caprock <> Zechstein` (orange)
-   Reference and Caprock - `Reference <> Caprock` (cyan)

Together they build the complete hull of the body `Caprock`.

Interfaces are the actual targets for the anomaly calculation: there is no anomaly without at least one interface separating two bodies with different physical parameter.

While interface properties are not editable, each interface link to the following body properties:

<a name="figure-object-tree-interface-properties"></a>
<figure>
![Object tree - interface and body properties](object_tree_interface_properties.png){: style="width:100%"}
<figcaption>
Object tree - interface and body properties
</figcaption>
</figure>
### Sections

Sections or [working sections](../glossary.md#working-section) are vertical planes, which are used as carriers for the geometry [vertices](../glossary.md#vertex). Each vertex of a triangle lies on one of the sections, the vertices of each triangle have to lie either on adjacent sections, or on the same section (in this case they are vertical). There are no vertices between the sections.

All sections of the model have to be parallel to each
other, however, they do not have to be equidistant nor do
they have to be parallel to the axes.

Each section has the following properties:

<a name="figure-object-tree-section-properties"></a>
<figure>
![Object tree - section properties](object_tree_section_properties.png)
<figcaption>
Object tree - section properties
</figcaption>
</figure>
-   **Name** (Default: An index): May be changed.
-   **Section Normal**: The normal defines the orientation of the section, it is not changeable, as it has to be defined during the model initialization process.
-   **Point**: The two points define the position of each section (not changeable for an existing model).
-   **Section Mirrors**: Each section may be accompanied by one or two mirror sections, which may be used to control the 3D triangulation. Please refer to the [EVA example](../examples/Eifel_Volcanic_Area.md) for more details on the use of section mirrors.

You may **Remove** or **Copy and Shift** an existing section (++rbutton++ in the **Object Tree**).

!!! note

    Use ++"Edit"++ --> ++"Model - Triangulation"++ or ![Triangulation icon](icon_triangulation.png) after these operations.

The **[2D View](./views.md#2d-view)** (++"Add View"++ --\> ++"Add 2D View"++ or ![2D View icon](icon_2d.png) in the [**Toolbar**](./toolbar.md)) is used to display the geometry on the sections.
Sections be [edited](../workflows/geometry.md) only in the **2D View**.

### Polygons and Vertices

The [**2D View**](./views.md#2d-view) show the model along the section, which is composed of [polygons](../glossary.md#polygon).

The polygons are defined by a number of [vertices](../glossary.md#vertex), usually marked with grey circles:

<figure>
![Polygon vertices](object_tree_gray_vertices.png){: style="width:500px"}
<figcaption>
Polygon vertices
</figcaption>
</figure>
Vertices marked with red colour are associated to triangulation errors:

<figure>
![Polygon vertices associated to triangulation errors](object_tree_red_vertices.png){: style="width:500px"}
<figcaption>
Polygon vertices associated to triangulation errors
</figcaption>
</figure>
See more about the triangulation errors in the [Model Triangulation](./menu.md#model-triangulation) chapter.

The vertex symbols may be switched on and off use ++v++ key. Their size and color may be changed using ++"Edit"++ --\> ++"Preferences"++.

Polygons are always related to a section. Their properties are:

*![Polygon properties](object_tree_polygon_properties.png)*

-   **Body Part Index**: a name or a number (index), which may be assigned to each polygon. This name is used to identify geometrically separated parts of the same body.
-   **zState**: Position of a polygon relative to the other polygons of the same body. The **zState** is for information only, and is not editable. Possible values are:
    -   `MIDDLE`: The same body has a polygon on the next and on the previous section. May be used for continuous triangulation.
    -   `ALONE`: No polygon of the same body on the adjacent sections. Polygon is not used for the triangulation.
    -   `FRONT`: The same body has a polygon on the previous section, but not on the next one. The corresponding section is the last section defining this body.
    -   `BACK`: The same body has a polygon on the next section, but not on the previous one. The corresponding section is the first section defining this body.
-   **Body**: The interior of the polygon defines the intersection of a body with the vertical section. The body itself can't be changed here, but may be changed using the function **Set Body(s)** (see, e.g. [EVA example](../examples/Eifel_Volcanic_Area.md)).

The vertices define the geometry of the polygon. They may be shifted, deleted or inserted (see [Geometry Modification](../workflows/geometry.md) chapter).
A polygon may be removed using ++rbutton++ click on a polygon in the **Object Tree** and then ++"Remove"++.

### Fields

The **Fields** object contains all the anomaly fields of the model: measured, calculated and residual anomaly fields of the model, grouped by their type.

You can turn the visualization of the fields in the different views on or off using the check-boxes.

The anomaly fields are given at each station as point data.
For the 3D View the station points are
triangulated and built into a color-coded surface:

<a name="figure-fields_3d_view"></a>
<figure>
![Fields - in 3D view](fields_3d_view.png){: style="width:800px"}
<figcaption>
Fields - in 3D view
</figcaption>
</figure>
For the 2D View the station triangulated surface is projected on the section plane and displayed as a profile line above each section:

<a name="figure-fields_2d_view"></a>
<figure>
![Fields - in 2D View](fields_2d_view.png){: style="width:800px"}
<figcaption>
Fields - in 2D View
</figcaption>
</figure>
!!! note

    Click on the legend entry to change the color and line style of the corresponding field profile line:

    ![Fields - 2D View legend](fields_2d_view_legend.png)

The following fields are available (each measured or/and calculated, and corresponding residual):

-   ![Gravity icon](treenode_gravity.png) **Gravity**: The three components of the gravity field, i.e. the x-component, y-component and z-component: $G_x$, $G_y$ amd $G_z$.
    $G_z$, the vertical component of the gravity field, is usually called "gravity field".
-   ![Gravity icon](treenode_gravity.png) **Gravity invariants**: $Inv_0$, $Inv_1$ and $Inv_2$;
-   ![Gravity icon](treenode_gravity.png) **Gravity gradients**: All tensor components of the gravity gradient tensor: $G_{xx}$, $G_{xy}$, $G_{xz}$, $G_{yx}$, $G_{yz}$ and $G_{zz}$ (6 components due to symmetry of the tensor), and also the horizontal gradient $HG_z$ and horizontal directive tendency $HDT$ which are based on the invariants;
-   ![Magnetic icon](treenode_magnetic.png) **Magnetic quantities**: The three components $MAG_x$, $MAG_y$, $MAG_z$, the total magnetic field anomaly $MAG_{tot}$ and the total sum of induced and remanent field anomalies $MAG_{totr}$;
-   ![Magnetic icon](treenode_magnetic.png) **Magnetic gradients**: $M_{xx}$, $M_{xy}$, $M_{xz}$, $M_{yx}$, $M_{yz}$ and $M_{zz}$ (6 components due to symmetry of the tensor).

*![Field available for calculation in IGMAS+](object_tree_fields_for_calculation.png)*

Each field has its individual properties:

*![Individual field properties](object_tree_field_properties.png)*

-   **Auto Shift**: The constant offset between measured and corresponding calculated anomaly field is subtracted automatically, if switched **on**.
    The algorithm behind this shift is described in the [tutorial](../tutorial/modelling_fields.md#handling-modelling-shift):

    $${\mathrm{shift}} = \mathrm{mean} \mathrm{(observed~field)} – \mathrm{mean} \mathrm{(modelled~field)}$$

    $$\mathrm{calculated~value} = \mathrm{modelled~value} + \mathrm{shift}$$

    This correction is updated after each modification of the calculated anomaly.
-   **Shift value**: Only used, if **Auto Shift** is switched **off** - the value is used to be added to the calculated anomalies, which causes a constant offset (or shift).
-   **error**: Estimated error of the anomaly fields. It is used for the [linear inversion of the physical parameter(s)](../workflows/properties.md).

    !!! note

        **error gz** indicates the estimated error of the component $G_z$, **error gxx** is the estimated error of the component $G_{xx}$, etc.

-   **Statistics**: shows the following statistical values:
    -   **Standard Deviation**: The [standard deviation](../glossary.md#standard-deviation) of the calculated anomaly field from the measured anomaly field
    -   **Average**: The average difference between measured and calculated anomaly field (which is the **Shift value**, see above)
    -   **Variance**: The [variance](../glossary.md#variance) of the anomaly field, calculated as the square of the **Standard Deviation**.

    These values are only for information, and only available, if both measured and calculated fields are defined. They are updated after each modification of the calculated anomaly.

Each field can be visualized in the [2D View](./views.md#2d-view), [2D Maps View](./views.md#2d-maps-view) and [3D View](./views.md#3d-view).

In the properties of the **Field** object you can adjust the way the field is visualized in the 3D View:

*![Fields properties](object_tree_fields_properties.png)*

-   **Transparency**: control the transparency of the anomaly representation using the **Transparency** slider
-   **Light**: switch shading "on" or "off" using **Light** check-box
-   **Show in 3D**: select the field to be visualized in the 3D View
-   **Exaggeration**: change the exaggeration factor of the field
-   **Offset**: change the vertical offset of the field above the model

For instance:

*![Measured field in the 3D view with zero exaggeration factor, adjusted vertical offset and 30% transparency](object_tree_adjusting_fields_properties.png)*

### Stations

The observed, calculated or residual anomaly [fields](#fields) are defined at stations i.e. a set of points with coordinates ($x$, $y$, $z$). If the elevation ($z$) is not given, 0 is assumed.

An offset (default: 13 cm) may be added to each station elevation. **IGMAS+** assumes the coordinate system of model and station data to be identical.

The station positions are displayed as red points in the 3D View, connected by a red triangulated surface:

<figure>
![Stations in the 3D view](create_model_stations.png){: style="width:500px"}
<figcaption>
Stations in the 3D view
</figcaption>
</figure>
In the 2D View the approximate positions of stations are displayed as a red line, which is the projection of the triangulated surface on the section plane:

<figure>
![Stations in the 2D view](create_model_2d_view.png){: style="width:500px"}
<figcaption>
Stations in the 2D view
</figcaption>
</figure>
The station coordinates are imported together with the measured field(s) from a [station file](../technical_information/files.md#station-files).

This function is deactivated, if there is no model present.

Please refer to the [tutorial](../tutorial/fitting_gravity.md) for a detailed discussion on station elevation.

Stations the following properties:

*![Station properties](object_tree_station_properties.png)*

-   **Station Count**: The number of stations in the model (for information only, can't be changed here).
-   **Name**: The file name used to load the station data (for information only, can't be changed here).
-   **Projection Distance** (default 0): This value is used as the maximum distance (in model units) of station locations to be projected on the 2D View. The projected measured stations are marked with the `+` symbol, the calculated stations with a dot. The default value 0 results in no projected station symbols at all.

<figure>
![Stations in the 2D view with non-zero projection distance](object_tree_projection_distance_on.png){: style="width:800px"}
<figcaption>
Stations in the 2D view with non-zero projection distance
</figcaption>
</figure>
-   **Difference Offset** (default 0.001): Offset for calculation of magnetic gradients, related to the difference quotient. The default value is in model units.
-   **zOffset** (default 13 cm):
    This offset will be added to every station elevation. It may be used to shift all the station elevations by the same amount. The default of 13 cm represents the standard the distance of a gravimeter system from the ground (see more in the [tutorial](../tutorial/fitting_gravity.md)).

### Voxel Cube

???+ tip "What is a voxel?"
A [voxel](../glossary.md#voxel), short for "volumetric pixel," is a three-dimensional pixel element used to represent a value on a regular grid in three-dimensional space. Similar to how a pixel represents a point or an area in a two-dimensional image, a voxel represents a point or a volume element in a three-dimensional space, typically in the context of computer graphics, medical imaging and scientific visualization. Each voxel contains information about properties such as color, density, texture, or other attributes, depending on the application. Voxel-based representations are commonly used in various fields for tasks like modeling, simulation, analysis, and rendering of three-dimensional data.

Voxel cubes are used to represent a model as a 3D grid of voxels. The voxel cube is a 3D grid of regularly spaced points, each representing a voxel with a constant physical parameter (density or susceptibility).

???+ note
Strictly speaking, "cube" is not a correct term here, parallelepiped is the appropriate one. We use cube for historical reasons and simplicity.

------------------------------------------------------------------------

Clipping Planes
---------------

**IGMAS+** models are often extended laterally in order to avoid edge effects.
As these extensions are cumbersome for 3D visualization, they are clipped automatically in 3D views, using:

-   the lateral bounding box spanned by the station positions
-   the maximum vertical extension of the model and the station elevation, respectively

<a name="figure-object-tree_clip_planes_extension"></a>
*![Clipping planes for the laterally extended model](object_tree_clip_planes_extension.png)*

The clipping planes ![Clipping plane icon](treenode_clipplane.png) (clipplanes) define the clipping box of the model. The clipping planes are used to cut the model in the 3D view, so that only the part of the model inside the clipping box is displayed.

Clipping planes are six planes (Right, Left, Back, Front, Top, Bottom), one for each side, with the following properties:

*![Clipping planes properties](object_tree_clip_planes_properties.png)*

Their positions may be changed using the slider (select the appropriate entry in the **Object Tree**, then the [**Property Editor Tab**](./property_editor.md)). To reset the position of the six clipping planes, use the **Property Editor Tab** of the **Clipplanes** entry in the **Object Tree**.

Use **Clip to model** icon ![Clip to model icon](icon_cliptomodel.png) on the [**Tool bar**](./toolbar.md) to set the clipping planes to the model bounding box. This is useful if you want to visualize the whole model in the [3D View](./views.md#3d-view).

Use **Clip to stations** icon ![Clip to stations icon](icon_cliptostations.png) on the [**Tool bar**](./toolbar.md) to set the clipping planes to the bounding box of the stations. This is useful if you want to visualize the model in the [3D View](./views.md#3d-view) without the extensions and focus on the stations.

The following figures show the same model as in the [previous figure](#figure-object-tree_clip_planes_extension), but clipped to the area covered by stations, without (left) and with (right) clipping plane visualization:

=== "Without clipping planes"

    ![Model clipped to stations without clipping planes](object_tree_without_clipplanes.png){: style="width:500px"}

=== "With clipping planes"

    ![Model clipped to stations with clipping planes](object_tree_with_clipplanes.png){: style="width:500px"}

------------------------------------------------------------------------

Bitmaps
-------

*... to be added ...*

------------------------------------------------------------------------

Bookmarks
---------

*... to be added ...*

------------------------------------------------------------------------

Additional Data
---------------

*... to be added ...*

------------------------------------------------------------------------

Search
------

The **Search** function allows you to quickly find objects in the **Object Tree** by name one by one (by using up and down arrows or by pressing ++enter++):

*![Object Tree - Search](object_tree_search.png)*

or highlight all of them at once by using the list icon:

*![Object Tree - Highlight search results as a list](object_tree_search_list.png)*

The search results are highlighted in the **Object Tree**, and you can click on an object to select it.

Views Window
============

**Views Window** is the right side of the interface and contains one or more various views of the model.
With [++"Add View"++ menu entry](./menu.md#add-view) (or ++"Add View"++ button on the [**Tool Bar**](./toolbar.md)) is possible to add the following views:

-   [Views Window](#views-window)
    -   [2D View](#2d-view)
    -   [3D View](#3d-view)
    -   [2D Maps View](#2d-maps-view)
    -   [Borehole View](#borehole-view)
    -   [SEG-Y Inspector View](#seg-y-inspector-view)
    -   [Multiple Cutter View](#multiple-cutter-view)
    -   [Script View](#script-view)
    -   [Globe View](#globe-view)

2D View
-------

3D View
-------

2D Maps View
------------

Borehole View
-------------

SEG-Y Inspector View
--------------------

Multiple Cutter View
--------------------

Script View
-----------

Globe View
----------

Property Editor Tab
===================

The **Property Editor Tab** is used to view or change the properties of individual objects selected in the [**Object Tree**](./object_tree.md).

*![Property Editor Tab](property_editor_tab.png)*

Contents of the **Property Editor Tab** depend on the selected object in the [**Object Tree**](./object_tree.md).

Properties for each object are explained in the [**Object Tree**](./object_tree.md) section.

Properties can be sorted by Name using the icon in the top left corner of the **Property Editor Tab**.
You can also toggle between a category view and a list view and turn property descriptions on and off.
\# Body Manager Tab

*to be added*
\# Information Tab

*to be added*
\# Status Bar

*to be added*
\# Tutorial

???+ quote
You can't blame gravity for falling in love
― *Albert Einstein*

Preface
-------

This tutorial provides a basic working concept of **IGMAS+** when used to investigate [gravity](../glossary.md#gravity-field) and [magnetic](../glossary.md#magnetic-field) fields, including all aspects that need to be considered when starting an **IGMAS+** project. It is intended to bridge general textbook knowledge on gravity modelling with the specific "how-to" information given in other chapters. Hence, it provides both key words from the gravity research field (without repeating textbook contents) and definitions for **IGMAS+** specific terms which can be further looked up in the documentation.

Potential fields
----------------

**IGMAS+** calculates both fields of the potential methods: the gravity field and the magnetic field. It is user friendly and allows very fast calculations. In this tutorial we focus on the explanations with gravity field modelling. The calculation of the magnetic field of geological [bodies](../glossary.md#body) is equivalent: one replaces the rock parameter "density" by the rock parameter "magnetic susceptibility" or, where it is necessary, by the "remanent magnetization" of rocks. All explanations are valid for modelling with both fields.

Chapters
--------

::: {.grid .cards markdown="" style="grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));"}
-   :material-earth: [**Gravity Anomalies**](./gravity_anomalies.md)

    ------------------------------------------------------------------------

    <!-- [![Gravity Anomalies](anomaly_3d_view.png)](./gravity_anomalies.md) -->
    Explore how deviations from Earth's normal gravity field reveal subsurface density structures, the challenge of non-uniqueness, and how **IGMAS+** addresses it using independent constraints.

-   :material-layers-triple-outline: [**Density Model**](./density_model.md)

    ------------------------------------------------------------------------

    <!-- [![Density Model](voxel_model.png)](./density_model.md) -->
    Learn how to construct 3D density or susceptibility models in **IGMAS+**, define bodies and voxels, assign model parameters, and manage stations - core steps for reliable gravity modelling.

-   :material-vector-triangle: [**Modelling Fields**](./modelling_fields.md)

    ------------------------------------------------------------------------

    Understand how **IGMAS+** calculates gravity and magnetic field components and gradients, accounts for modelling shifts, and handles edge effects for precise results.

-   :material-chart-line: [**Fitting Gravity**](./fitting_gravity.md)

    ------------------------------------------------------------------------

    <!-- [![Fitting Gravity Observations](cba_simple.png)](./fitting_gravity.md) -->
    Get guidance on how to fit observed gravity data using **IGMAS+**, differentiate between Bouguer and Free Air anomalies, and utilize global gravity datasets effectively.
:::

Gravity Anomalies
=================

**Gravity anomalies** - i.e. deviations from the normal field or theoretical gravity field of the Earth,

$$\Delta g  = g_{measured} - \gamma_{normal}$$

provide us with insights into the geological structure and related density distribution of a region.

------------------------------------------------------------------------

Gravity non-uniqueness
----------------------

For a specific gravity anomaly, or, more realistically expressed, for an ensemble of anomalies to be explained, however, an infinite number of density distributions can theoretically cause these anomalies (see [figure below](#figure-gravity_nonuniqueness)).

<a name="figure-gravity_nonuniqueness"></a>
*![Non-uniqueness of gravity interpretations. Three differently shaped bodies with density ρ₂ are embedded in a material of lower density ρ₁. The gravity anomaly above the section corresponds to only one of these bodies and shows a central high due to the density difference given. Without any other independent information (constraints) it cannot be concluded, which of the ρ₂-bodies is responsible for the observed gravity anomaly.](gravity_nonuniqueness.png)*

!!! warning

    Keep in mind the ambiguity of all potential field observations!

------------------------------------------------------------------------

Gravity observations
--------------------

It is essential to the modelling philosophy of **IGMAS+** to overcome this ambiguity by means of gravity-independent observations (constraints). With this software package, *Free Air*, *Bouguer*- and *geoid anomalies* can be modelled (among others: Götze and Lahmeyer (1988)[@GoetzeLahmeyer1988], Schmidt et al. (2011)[@SchmidtPlonkaEtAl2011], Schmidt et al. (2020)[@SchmidtAnikievEtAl2020]).

At the beginning of each modelling, the user should decide whether to work with [**Bouguer**](../glossary.md#bouguer-anomaly) or [**Free Air**](../glossary.md#free-air-gravity-anomaly) anomaly:

-   work with **Free Air anomalies** if no terrain and Bouguer slab corrections were calculated before

and

-   work with **Bouguer anomalies** if both corrections had been applied to measurements.

This is an important decision, because the model must be built accordingly. **IGMAS+** does not calculate one or the other anomaly, but the static part (attraction) of the gravity field of an Earth model, a sedimentary basin, a cavity or a mountain range which are represented as an ensemble of three-dimensional closed density bodies. For the following it will be agreed that the geophysical term "Free Air anomaly" is equivalent to the geodetic term "Disturbance".

Free Air anomaly (disturbance in geodesy):

$$FA = g_P - \gamma + \delta g_F$$

Bouguer anomaly:

$$BA = FA - \delta g_B$$

with:

-   $g_P$ -- observed/measured gravity value at station $P$
-   $\gamma$ -- normal gravity at the ellipsoid
-   $\delta g_F$ -- Free Air correction (normal gravity at station $P$)
-   $\delta g_B$ -- Bouguer mass correction (gravity effect of masses between the station $P$ and the ellipsoid)

The [figure below](#figure-gravity_anomalies) illustrates the diverse processing steps which are necessary to calculate gravity anomalies:

<a name="figure-gravity_anomalies"></a>
*![This figure shows the various steps required to compute a geophysical anomaly and the resulting changes in the processed gravity field. The individual images are to be read from top left to bottom right. They are adapted from a presentation by Hajo Götze and Ron Hackney (pers. comm.)](gravity_anomalies.png)*

Calculation of $\gamma$, $\delta g_F$ and $\delta g_B$ is not a part of **IGMAS+** modelling and must be performed in advance. $\delta g_F$ and $\delta g_B$ are called correction terms, sometimes also "reduction" terms. The user should look more closely into these correction terms while using downloaded gravity fields from the [ICGEM website](https://icgem.gfz.de).

**IGMAS+** allows users to fit measured gravity observations to 3D and 2D density models and interactively compare the calculated fields to the observed anomalies. We mention "observed anomalies" and by this mean that comparative values of the gravity fields can originate from two different sources:

-   Specific processed field measurements, or
-   Global models like those available on the [ICGEM website](https://icgem.gfz.de).

Please refer also to [the remarks on the use of the ICGEM gravity datasets](./fitting_gravity.md#remarks-on-the-use-of-icgem-gravity-datasets).

To obtain an interactively optimized fit between calculated and observed anomalies, users can:

1.  manually adjust a density configuration by changing the density values and the geometries of density bodies
2.  automatically invert a gravity field for a density configuration.

In this workflow, gravity independent observations (such as geological maps, borehole information, seismic velocities and discontinuities, cross sections derived from other geological and geophysical interpretations, etc.) are integrated at two stages:

1.  when defining the density configuration of an initial 3D model and
2.  when interactively modifying the model while simultaneously visualizing the independent constraints.

Common to all inverse approaches, the number of the "free" parameters (degrees of freedom) in the modelling process should be significantly reduced before the final forward field matching, respectively inverse density calculation. For example, the final modelling step may be limited to the adjustment of the thickness and the lateral extent of a model unit with the pre-defined density (variation). Fixing as many other parameters of the initial 3D density model as possible requires the input data of appropriate spatial coverage and (in the best case) "old familiar" uncertainties. On the other hand, the model should be kept simple, in other words, one should choose complexity just to be able to answer a properly defined scientific question.

**Remember:**
???+ quote
A model which images any detail of the reality is as useful as a map of scale one to one.
― *Joan V. Robinson*

Note also the different scales for the individual results of the gravity calculations. This procedure must be done by the user before modelling.

References { data-search-exclude }
----------------------------------

\\bibliography

Density Model
=============

???+ quote
Lorraine, my density has popped me to you.
― *George McFly, Back to the Future, 1985*

For the modeller, each compilation of a density/susceptibility model always consists of two activities that result from a theoretical approach: a [**body**](../glossary.md#body) must be defined which contains a mass/magnetic material (here density and/or susceptibility), and the distances from stations where the gravity and/or magnetic fields were measured. Therefore, model stations must be defined (see below).

At first, the origin point of the model (its zero point) has to be fixed, which is not only the origin of model geometry, but also of model stations, of the corresponding gravity/magnetic fields which should be matched, of the voxel cube and of any available additional map information, for example from a geographical and/or a digitized geological map.

We start with the explanation on how to handle [the bodies](#model-bodies) and [densities](#model-densities) and continue with the [explanation for stations](#model-stations).

------------------------------------------------------------------------

Model bodies
------------

In **IGMAS+**, density in space can be defined either in terms of

1.  [triangulated polyhedra](#figure-two_polyhedra_model) surrounding a certain volume of constant density, or
2.  a [3D **voxel cube**](#figure-voxel_model) containing numerous [voxels](../glossary.md#voxel), each carrying its own density value.

<a name="figure-two_polyhedra_model"></a>
<figure>
*![A model with two polyhedra of constant densities (pink and red).](two_polyhedra_model.png){: style="width:500px"}*
<figcaption>
A model with two polyhedra of constant densities (pink and red).
</figcaption>
</figure>
<a name="figure-voxel_model">
<figure>
*![A voxel model defining sedimentary density structures around a salt body.](voxel_model.png){: style="width:500px"}*
<figcaption>
A voxel model defining sedimentary density structures around a salt body.
</figcaption>
</figure>
All polyhedra with the same density definition make up a model [**body**](../user_interface/object_tree.md#bodies) (see also [Body Manager Tab](../user_interface/body_manager.md) description), while a single model body may be divided into several geometrically separated [polyhedra](../glossary.md#polyhedron) (called "**indexed body parts**"). The [hull](../glossary.md#hull) of a polyhedron is composed of [interfaces](../glossary.md#interface) and the geometry of each interface is defined by vertices.

The user-defined positioning of these **vertices** is crucial for the triangulation process by which **IGMAS+** geometrically approximates the 3D density structure.
The obtained model [topology](../glossary.md#topology) is defined based on the position of such vertices on pre-defined, parallel oriented, vertical planes (vertical [**working sections**](#figure-model_construction)).

<a name="figure-model_construction"></a>
*![Illustration of basic terms for IGMAS+ model construction: vertices (black points), triangles (black lines), and working sections (vertical planes).](model_construction.png)*

These working sections are the virtual scenes for implementing any interactive modifications of model geometries, for example, by **adding**, **deleting**, or **moving vertices**.

In case the model is built on [**working sections**](#figure-model_construction), there are no vertices located between the working sections. The user therefore should define the number, spacing and horizontal orientation (strike direction) of these working sections:

1.  to keep sufficient control of model geometries throughout the interactive modelling process, and
2.  to allow for a proper analysis of elongated gravity anomalies (i.e., orient working sections perpendicular to the strike of major anomalies).

Working sections are always parallel, but spacing is variable (see [figure above](#figure-model_construction)). In order to achieve greatest flexibility, these vertical planes should be defined perpendicular to the dominating strike direction of the structures to be modelled:

<a name="figure-section_geometry"></a>
*![Four steps that are important when defining the geometry of the model bodies by "sections": (a) Decide which anomalies should be modelled; (b) Select the area to be modelled; (c) Mark the sections on the area to be modelled and define the intersections of the sections with the anomaly; (d) Consider which of the sections and the intersections are really important to model the anomaly correctly.](section_geometry.png)*

Vertical planes should be placed closer to each other in regions of high gravity gradients. Model parts in which gradients are smaller only a few vertical cross sections are necessary to fix the model geometry (e.g. a linear rise or descend of a horizon):

*![Typical examples of working section orientation (map view): gravity contours are colored with magenta, vertical planes (working sections) are yellow.](plane_orientation.png)*

!!! tip "Remember"

    **The simpler the model - the better it is!**

**IGMAS+** calculates gravity effect either for a flat or a spherically curved model. The latter is required for very extensive model domains. To get an impression of the Earth surface "depression" of a spherical model compared to a flat one, note the following numbers:

  Distance (km)   Depression (m)
  --------------- ----------------
  10              7.85
  50              196
  100             784
  200             \~3000
  250             \~5000

In addition, it should be considered that in a spherical model the calculation of the direction of the vertical component changes continuously according to the curvature of the Earth because it always points to the centre of the Earth. Thereby, a spherical model assumes that the Earth is approximated by a sphere; an elliptical shape cannot yet be realized (but this is negligible for many lithosphere modelling applications). Test calculations have shown that for a model extending by, e.g., 2000 $\times$ 2000 km$^2$ and reaching a depth of 200 km, there is a difference in calculated gravity between a spherical and flat modelling approach of about 20-25 $\times$ 10$^{-5}$ m/s$^2$ (20-25 mGal).

Depending on the user's objectives and the characteristics of gravity/magnetics independent information at hand, there are basically three different ways of building up an initial 3D density model ready to be analyzed in terms of its gravity/magnetics effects:

-   a)  "Defining sections" approach: define working sections before loading or creating model vertices.

-   b)  "Loading layers/interfaces/horizons" approach: load point sets forming body interfaces before defining working sections.

-   c)  "Loading a voxel cube" after defining the model space according to (a) or (b)

When selecting the **"sections" approach (a)**, the user builds the model from scratch by first defining the 3D model extent and the vertical (working) sections and then loading or creating vertices to construct interfaces that separate bodies of different density. Any gravity-independent data which are loaded into the obtained model space to help constructing the density bodies (e.g., bitmaps, point sets) can be projected and visualized on the vertical sections.

In this case, the sections should be appropriately positioned to keep the projection-related distortions of observed structures small. Since all vertical sections need to be parallel, it might not be possible to represent all available structural information ideally in the model domain. Hence, option (a) suits well to solve generic problems independent of correctly geo-referenced structures. Additionally, the approach may be selected if the spatial coverage of gravity-independent structural input data (e.g. seismic profiles, boreholes) is very limited with respect to a larger number of observed gravity anomalies. For example, the interpreted structure of a single 2D seismic section could thus be continued laterally by inferring a variety of consistent 3D models from the observed gravity field. Thereby, one would strategically start with a simple density configuration and increase the model extent and complexity stepwise.

If the spatial coverage of structural input data is dense enough and the depth/thickness configuration of several density bodies can be derived directly and modelled outside of **IGMAS+**, then the **"layer" approach (b)** offers the proper functionality. In this case, the user can load continuous **interfaces** or **horizons** -- sets of regularly or irregularly spaced points with XYZ coordinates. Each horizon defines the top of a spatial domain that -- according to gravity-/magnetics-independent observations -- has been identified as a potential contrast in density with respect to adjacent domains. The loaded interfaces/horizons are stacked by IGMAS+ and collectively define the default 3D model extent (to be changed optionally), while the working sections are defined only after this stage. As part of the model building process, **IGMAS+** interpolates between the loaded XYZ points of a horizon, derives the intersections of the horizon with the working sections and accordingly creates a number of vertices positioned on the latter. Hence, the initially loaded point sets are not identical with the final vertices representing a horizon! Care should be taken that the **horizons**/**layers**/**interfaces** do not intersect each other (corresponding to a negative thickness of the respective layer in between).

Generally speaking, there are no specific suggestions for the use of case (a) or (b). Recently, there has been some preference for the use of case (b), since many modelers prefer to work with predefined layers from open databases (for example [CRUST1.0](https://meetingorganizer.copernicus.org/EGU2012/EGU2012-3743-1.pdf), [LITHO1.0](https://doi.org/10.1002/2013JB010626), [ETOPO1](http://dx.doi.org/10.7289/V5C8276M) and many others). Layers cannot be eliminated from the model afterwards. But you can assign the same density to the horizon as to its neighbouring horizons, to the side of it, above it or below it. Then it has no more gravity effect on the model stations.

After setting up a model either following approach a) or b), one or several model bodies may be selected for **"voxelization" approach (c)**, i.e., for being differentiated into numerous voxels, each carrying its own density value. In this way, smaller-scale density variations derived from independent observations (e.g., seismic, mineralogical-petrological) can be superimposed on the geological structure and considered for the gravity calculation. Each voxel is associated with an effective density representing the sum of:

1.  a constant body density, and
2.  a voxel density.

One way of defining the voxel density is to first create a voxel grid and then apply a certain function to implement physical laws or empirical concepts such as seismic-velocity-to-density conversions or depth-controlled porosity-density functions. Alternatively, the voxel cube may be defined completely by data import including both the coordinates and density values of the voxels. Additional **IGMAS+** functionality related to voxel cubes is provided in terms of:

1.  multiplication of the voxel density with a voxel factor for fast model modifications,
2.  automatic edge effect minimization and
3.  transformation of voxel-related density variations into triangulated isosurfaces.

???+ note

    Currently only one voxel cube can be applied to an **IGMAS+** model.

------------------------------------------------------------------------

Model densities
---------------

Concerning the **density value** assigned to each model body, it does not matter if absolute or relative density values are chosen, since the resulting gravity effect only depends on the density differences at modelled interfaces and the distances from stations.
This implies that gravity modelling alone cannot determine absolute values of densities.
For a deeper understanding of these statements, a more detailed description of the basic mathematical-physical formulas for the calculation of the gravity effect in **IGMAS+** would be beneficial. However, this would go beyond the scope of this tutorial.
Therefore, the original publications by Götze and Lahmeyer (1988)[@GoetzeLahmeyer1988] or by Götze (2014)[@Goetze2014] are recommended.

------------------------------------------------------------------------

Model stations
--------------

The observed and calculated gravity fields are defined at the stations, each being defined by its $X$, $Y$, and $Z$ coordinates. The station height ($Z$) refers to its elevation with respect to the geoid, in case of elliptical coordinates -- also to the ellipsoid. It either represents the vertical position of the original gravimeter measurement (daylight surface for terrestrial data, height above the sea level for ship data, flight height for airborne and satellite data, etc.) or a reference level to which the acquired remote data have been continued (see [chapter "Fitting gravity anomalies"](./fitting_gravity.md) and Figures for [CBA (simple)](./fitting_gravity.md#figure-cba_simple), [FA (simple)](./fitting_gravity.md#figure-fa_simple) and [FA (difficult)](./fitting_gravity.md#figure-fa_difficult)). The only condition that must be met for the height of all stations is that they must be located above all model masses. It has its meaning for modelling exclusively when using Free Air anomalies.

*Practical experience and examples for heights* of the user-defined reference level  can be found here:

  Mountain range                                       Top mountain                Minimum height<br />of the reference level (m)
  ---------------------------------------------------- --------------------------- ------------------------------------------------
  European Mittelgebirge <br />(low mountain ranges)   Brocken (Germany)           1500
  Eastern Alps                                         Großglockner (Austria)      5000
  Western Alps                                         Mont Blanc (Italy/France)   6000
  Andes                                                Aconcagua (Argentina)       7000
  Himalayas                                            Everest (Nepal/China)       8000

Note that to avoid numerical/theoretical problems (namely, local outliers in the calculated gravity), the stations should neither be located inside a model body nor precisely on its edges or surfaces (hence, check the $Z$ values with respect to the top of the uppermost model body).
In case of doubt, add 13 cm to the height of the body surface -- the height of the gravimeter measuring system (see [Figure](./fitting_gravity.md#figure-fa_simple)).

The spatial coverage and spacing of the stations (i.e. their $XY$ coordinates), together with the wavelengths of the associated observed anomalies, provide limits to the scales and resolution of subsurface density heterogeneities that can be derived -- an important aspect when [planning a gravity modelling project](#figure-section_geometry).
In the context of resolution, **IGMAS+** allows gravity calculations for a large number of stations -- but user should keep in mind the memory size limit.
<!-- (refer to the {{% staticref "files/IGMAS_User_Manual.pdf" %}}**IGMAS+ User Manual**{{% /staticref %}}, chapter 2.1.2). -->

In general, there are two different types of station data that **IGMAS+** users may use: irregularly or regularly spaced data. When working with original irregularly spaced measurements (i.e. scattered and clustered $XY$ station coordinates), the observed and the modelled gravity have the same relative position with respect to the causative density bodies. If one chooses to interpret anomalies that have been transferred to a regular grid (e.g., by [use of ICGEM data sets](./fitting_gravity.md#remarks-on-the-use-of-icgem-gravity-datasets), or other grids), however, one accepts that the model bodies have a smaller effect with respect to the stations than the real bodies due to interpolation procedures. Hence, it is generally recommended to use irregularly distributed stations instead of gridded gravity data.

References { data-search-exclude }
----------------------------------

\\bibliography

Modelling Fields
================

**IGMAS+** allows modelling of the three components of gravity ($G_x$, $G_y$, $G_z$) of which $G_z$, the gravity field, is typically used for density modelling. In addition, the six independent tensor components of the gravity gradient ($G_{xx}$, $G_{xy}$, $G_{xz}$, $G_{yx}$, $G_{yz}$, $G_{zz}$) can be calculated.
Gradients provide a higher resolution than the vertical component of the gravity field. The calculation of gravity mass effects require:

1.  a successfully triangulated model geometry,
2.  bodies to be assigned with density values, and
3.  stations to be located in the study area.

???+ note "Note on magnetic modelling"

    As just described for the gravitational field, modelling of the Earth's magnetic field ($H$) is also possible if the modelling parameters are given (i.e. triangulated model bodies with defined magnetic susceptibility but also magnetic remanence). **IGMAS+** thus yields the three components of the magnetic field ($H_x$, $H_y$ and $H_z$) and the six independent gradients for the magnetic field components ($H_{xx}$, $H_{yy}$, $H_{zz}$, $H_{xy}$, $H_{xz}$ and $H_{yz}$).

**IGMAS+** uses the algorithm of Götze and Lahmeyer (1988)[@GoetzeLahmeyer1988] to calculate the effect of a homogeneous polyhedron on gravity by transforming the volume integral into a sum of line integrals by the application of theorems of potential theory. The fields are first calculated for each station and each interface (i.e. the set of triangles separating two bodies) separately and then the effects of all interfaces are summed up to obtain the total amount at a station.
Likewise, the anomaly effect of a voxel model is calculated independently and then added to the effects of the remaining **IGMAS+** model for each station. Thereby, each voxel is approximated by a sphere with its volume being identical to the volume of the voxel.

???+ note
The default value of the [gravitational constant](../glossary.md#gravitational-constant) used for any gravitational calculation in **IGMAS+** is $G$ = 6.67384 ⋅ 10$^{−11}$ m$^3$ kg$^{-1}$ s$^{-2}$. This value may be changed by the user following the [recommendations](https://physics.nist.gov/cgi-bin/cuu/Value?bg) of the [CODATA](../glossary.md#codata).

------------------------------------------------------------------------

Handling modelling shift
------------------------

There is a general gap in magnitude of the measured gravity and the calculated gravity of an **IGMAS+** density model. Gravity *measured* in the field is always caused by masses of the entire Earth. The *modelled* value in **IGMAS+** is much smaller in spatial extent and therefore consists of less mass. To handle this problem, **IGMAS+** operates with a **shift value**, thereby assuming that all far-field effects not considered by the **IGMAS+** density model cause a constant offset in the calculated with respect to the observed gravity. By default, this shift value is derived from the gravity field values at all stations as follows:

$${\mathrm{shift}} = \mathrm{mean} \mathrm{(observed~field)} – \mathrm{mean} \mathrm{(modelled~field)}$$

The derived shift value (alternatively, a user-defined one) is then added to the preliminarily calculated ones:

$$\mathrm{calculated~value} = \mathrm{modelled~value} + \mathrm{shift}$$

This correction is updated after each modification of the calculated anomaly. By introducing the shift value, the absolute differences between the observed and calculated anomalies are suppressed in support of the relative differences, which helps identifying and localising domains of mass deficit or mass excess, in the density model. Figuratively speaking, this means that the two fields are numerically merged so that their mean values are identical. This is necessary to make the phase (maxima and minima) and the magnitudes of these anomalies directly comparable in order to get information about the plausibility of the underground structures.

------------------------------------------------------------------------

Handling edge effects
---------------------

If the density of the space surrounding an **IGMAS+** model was not defined and thus actually set equal to zero, the stations close to the model borders would reveal gravity edge effects according to the large density differences at the marginal interfaces.
In **IGMAS+** there are two solutions to this problem.

The first one is to introduce a [**reference density**](../glossary.md#reference-density) (please see [Body Manager](../user_interface/body_manager.md)) which in fact has two different meanings: first of all, it is a user-defined density assumed to be present wherever there is no model body, including the entire surroundings of the 3D model. Hence, an isolated body would automatically be surrounded by the reference density. Secondly, the reference density is subtracted from all defined densities (i.e., reference and body densities) and any gravity effects at the stations are calculated from the resulting density differences. Hence, if the reference density is chosen to correspond to an average density at the model borders, the unwanted edge effects can be substantially reduced. No reference susceptibility is needed. Further minimization of the edge effects may be obtained through the integration of a layered background reference model which accounts for general density trends, such as an overall increase with depth.

???+ note

    The case with a layered background reference model has not been yet described in the documentation.

The following sequence of inputs is recommended:

-   Click on the ![Model icon](treenode_model.png) [**Model**](../user_interface/object_tree.md#model) in the [**Object Tree**](../user_interface/object_tree.md)
-   Select the [**Property Editor Tab**](../user_interface/property_editor.md)
-   Select **Border Effect** and then **Border Algorithm**
-   Select "Voxel Border Effect Kernel" and define a Density-Depth function
-   This will define a layered background model.

The second strategy for reducing the edge effects of flat **IGMAS+** models is to **extend the model space** for anomaly calculations beyond the initially defined model. Therefore, the four vertical border planes of the model are automatically mirrored to a set of new borders and the respective density structure is laterally continued in between. Per default, the amount of lateral extension is tenfold the total vertical depth range of the initial model. For example, we assume a vertical model extension of 100 km. Then the lateral model extension to each side should be larger or equal than 1000 km.

References { data-search-exclude }
----------------------------------

\\bibliography

Fitting Gravity
===============

**IGMAS+** is designed for analyzing the time-independent subsurface density contributions which cause the gravity field; hence, anomalies to be analyzed should already be corrected for the effects related to instrumental drifts, Earth tides, the "normal gravity" reflecting the effects of flattening and the centrifugal force as well as the free air and/or mass corrections.

???+ note "Note on magnetic modelling"

    For magnetic field modeling it is important to eliminate the International Geomagnetic Reference Field (IGRF), which describes the Earth's main magnetic field generated in the Earth's core. In the following, some important remarks are provided that need to be considered when modelling Bouguer and Free Air gravity anomalies. Magnetic field modelling is performed like modelling of the Free Air anomalies, since normally no magnetic effects of the topographic masses are subtracted from the field measurements.

------------------------------------------------------------------------

Complete Bouguer anomaly (CBA): the "simple" situation
------------------------------------------------------

<a name="figure-cba_simple"></a>
*![Modelling the complete Bouguer anomaly (CBA). Data are collected at the green stations (triangles) on the topographic surface or in the orbit of satellites (stippled line) or on any other height level outside the model bodies (small green triangles). After definition of Bouguer anomalies the masses between ellipsoid/geoid are removed. It is irrelevant whether the ellipsoid or the geoid is the reference surface.](./cba_simple.png)*

1.  The gravity effects of the topographical masses have been eliminated from the measured values by the mass correction. This means, the terrain correction is included, accounting for the deviation of local topographic features by a flat or a spherical slab. Therefore, the background of the topo-masses is drawn transparent and bright in [Figure](#figure-cba_simple). Stations of the terrestrial measurements are indicated by the green triangles; satellite gravity is measured at the orbit level (blue stippled line in [Figure](#figure-cba_simple)).

2.  The density model extends to the geoid/ellipsoid surface. The model stations lie on the topography, at the orbit height or at any other user defined height. It must be ensured that model stations are identical with the heights and positions of gravity stations in the field/airplane or satellite orbit.
    **Note:** The density model is bordered by a constant model surface (geoid) as well as by a constant model bottom surface if model is built by vertical sections (refer to [chapter "Model bodies"](./density_model.md#model-bodies), approach (a)). In case where horizons are used for model building ([chapter "Model bodies"](./density_model.md#model-bodies). approach (b)), we face a special situation which is [described later](#the-top-body-in-the-density-model): a body with the density "0" is added automatically by the software.

3.  It is irrelevant whether the modelling of satellite gravity is done at the orbit height, or at an arbitrarily chosen level (black with green triangles in [Figure](#figure-cba_simple)) above the highest elevation. It should be noted, however, that in the case of downward continuation of the satellite gravity field (from the satellite height to the arbitrarily chosen level), the so-called **omission error** (geodetic term) increases the further the chosen level is moved downwards. Reason: the gravity at the orbit height does not contain any small gravity wavelengths anymore, so that errors/inaccuracies/etc. are increased when the field continues downwards (through the massless space) and overlay the increased measurement signal.

4.  The reference density of a model can be set arbitrarily by the user if the model structure does not cause a significant boundary effect.

5.  It becomes difficult if not all mass effects between the surface and the reference surface (geoid/ellipsoid) could be eliminated because the rock densities deviate from the correction density (usually 2670 km/m$^3$). This information cannot be derived directly from gravity field modelling but must be extracted from independent information (e.g., geological maps and/or rock density determinations). In this case these deviating volumes must be later remodelled with a differential density:

$$\Delta\rho = \rho_{\mathrm{rock~mass}}-\rho_{\mathrm{mass~correction}}$$

------------------------------------------------------------------------

Free Air anomaly (FA): the "simple" situation
---------------------------------------------

In contrast to CBA, in the "simple" case of Free Air anomaly no mass correction is performed, so all masses in the model are preserved - including the topographic masses.
The surface of the density model is now topography-dependent.

<a name="figure-fa_simple"></a>
*![Free Air anomaly (FA): the "simple" situation. As in the case of complete Bouguer anomaly, stations are positioned in the satellite orbit, on the terrestrial surface marked by green triangles or at any user defined height level (small green triangles).](./fa_simple.png)*

The terrestrial stations remain in the positions and at the heights as shown in [Figure](#figure-fa_simple). If original satellite gravity is used for modelling purposes, those remain at the orbit height. If a grid with satellite gravity values (e.g. from the [ICGEM data bases](https://icgem.gfz.de)) is used, it can be extended down to any user-defined level (black line in [Figure](#figure-fa_simple)). Again, be careful: the omission error must be considered.

???+ warning "Attention:"
One can "design" the surface of the density model using the heights of the stations and subtracting 13 cm from each station height:

    $(\mathrm{heights~of~gravity~stations}) – 13~\mathrm{cm} = (\mathrm{height~of~model~top~surface})$

It is a **TIME CONSUMING PROCEDURE** to check for all model sections whether the surface of topographic masses is 13 cm below the stations. The **IGMAS+** developers are currently working on a much simpler method to use 3D topographies in the modelling. The result will appear in one of the next releases.

The value of 13 cm comes from the height (above the "ground") of the gravity meter measuring system of LaCoste-Gravimeter. If gravimeters of other companies are used, the measuring system height must be modified. Otherwise, one can assume an "overall" model station height of 1 m above the model surface; the error in larger crust/lithosphere models is to be neglected.

???+ tip "Hint:"

    If the user decides to follow the “layer” approach ((b) in [chapter "Model setup"](./density_model.md#model-bodies)) and load layers/horizons for building up an initial 3D density model, **IGMAS+** automatically closes the model body upwards with a constant surface (see **Top** in the Body Manager). This “Top” body has zero density to mimic the air masses; for more detailed information please refer to [this chapter](#the-top-body-in-the-density-model).

There are two possibilities to define the model station heights (see [Figure](#figure-fa_simple)):

-   the user chooses a constant height directly representing the satellite orbit (grey and pale blue body together) or
-   the user continues the satellite data to a height level which is individually chosen by the modeller with reference to the heights proposed in the table of [chapter "Model stations"](./density_model.md#model-stations).

The **"Top"** body can be eliminated manually in the **IGMAS+** input file. However, we suggest staying with "0"-density body; it does not cause any effect on the modelled anomaly and will disappear in one of the next **IGMAS+** releases.

... and still, if this body disturbs someone, one can just eliminate it by hand. One can delete its polygons on every section:

-   go to the first section
-   right click on "Top"
-   then select "Remove"
-   repeat this procedure on every section.

If the "0-Body" doesn't have a single polygon anymore, you can also delete it from the Body Manager, because then "Remove Body" option is no longer greyed out.

**Reference density**: in the case of modelling a Free Air anomaly, the reference density must be set to zero (i.e. equal to the density of the topmost model body representing *air*)! Hence, one should check if the lateral model extensions are appropriately chosen to minimize edge effects.

------------------------------------------------------------------------

Free Air anomaly (FA): the "difficult" situation
------------------------------------------------

<a name="figure-fa_difficult"></a>
*![Free Air anomaly (FA): the "difficult" situation. The topographic surface (e.g., a digital elevation model) is downloaded from an independent database and does not match the measured station heights everywhere.](./fa_difficult.png)*

We start from the same situation as we have already studied for the Bouguer and Free Air anomalies: stations are at the orbit level or on the terrestrial surface (see Figures for [CBA (simple)](#figure-cba_simple) and [FA (simple)](#figure-fa_simple)). **BUT:** the terrain surface is now taken from a digital elevation model (DEM) or an elevation grid available on the web.

The [illustration](#figure-fa_difficult) shows that the heights of the measured stations do not always correspond to the heights (often averaged) of the terrain model. Thus, it can happen that stations are located within the masses formed by the DEM. If this grid is loaded as "layer/horizon" (compare previous example), then some of the stations are located inside the mass. This leads to errors.

A similar situation must be considered if the satellite field data were continued to a level below the maximum DEM topography height. To be absolutely sure that this will not happen, choose a level that is "guaranteed" to be above the highest DEM elevation. For support refer again to [chapter "Model stations"](./density_model.md#model-stations).

A remarkably similar problem can also occur if the model surface of water masses in an offshore modelling scenario is not exactly 0 meters and the modeling stations are not 13 cm above it.

???+ note "Hint"
When using grids (a) for satellite gravity (e.g. EIGEN-6C4, GOCE) for comparison with model gravity and (b) for topography (e.g. MERIT, EMODnet, etc.), always make sure that the model stations are positioned exactly on the nodes of the elevation grid. It must be ensured that both grids (gravity and heights) have the same grid structure/geometry (same grid width, same projection etc.). The grid with the satellite gravity can be downloaded for any user-defined level (see Figures for [CBA (simple)](#figure-cba_simple), [FA (simple)](#figure-fa_simple) and [FA (diffucult)](#figure-fa_difficult)) above the topography.

------------------------------------------------------------------------

The "Top" body in the density model
-----------------------------------

Here we will explain the intentions of the "NULL body", which already played a role in previous chapters. This is only valid if layers/horizons were loaded. For this purpose, let us look at [Figure](#figure-offshore). Originally, the **IGMAS+** function was used to read in individual horizons. [Figure](#figure-offshore) shows a stack of horizons that were taken as output from other survey results, e.g., from an offshore seismic campaign:

<a name="figure-offshore"></a>
*![A scheme of 7 layers (horizons/interfaces) of an offshore scenario. The model consists of seven sedimentary layers, where layer ① indicates the bathymetric layer. For theoretical-methodological reasons, IGMAS+ closes the model with a "bottom layer" at the bottom and with a "top layer" at the top (here - the sea surface with height of 0 m). The user has the possibility to choose the densities for the automatically introduced bodies "Top" and "Bottom". The "Top" body is bounded by the model top layer and the bathymetry layer (with density of 1000 kg/m³). The "Bottom" body is bounded by the sediment layer ⑦ and the model bottom layer (with density ρz).](./offshore.png)*

The software sorts the **stack of layers** first with ⑦ (the lowest layer) to ① (the highest layer). Because **IGMAS+** only processes closed bodies, it "closes" bodies between layers ⑦--⑥, ⑥--⑤, ⑤--④, etc. automatically with the consequence that the user has to input a layer (in [this Figure](#figure-offshore) the top of the "Top layer" is at the sea level) with constant user-defined height ($Z$-top = 0 m) above the layer ①. Likewise, a constant model bottom layer has to be defined below the layer ⑦ to close the model's bottom. Both density-values are user-defined. The "Top" body automatically generated by **IGMAS+** gets the density of the water layer: 1000 kg/m$^3$, the "Bottom" body -- an appropriate user-defined density $\rho_z$. In the case of a model that contains both onshore and offshore areas, this body, of course, must be defined accordingly.

<a name="figure-onshore"></a>
*![Transfer of the offshore situation shown earlier to an onshore situation when modelling Free Air anomalies. Redefinition of layer ① into the topographic surface of a model. For more detailed information refer to the text of this chapter.](./onshore.png)*

The automatic completion of an [offshore model](#figure-offshore) with a "Top" layer can also be used to complete an [onshore model](#figure-onshore) "upwards" if we model a Free-Air anomaly. In this case, the "Top" layer has a density of $0$ kg/m$^3$. Its upper limit is to be defined by the user and corresponds to the height at which the small green triangles lie or the blue stippled line is drawn (see Figures for [CBA (simple)](#figure-cba_simple), [FA (simple)](#figure-fa_simple) and [FA (difficult)](#figure-fa_difficult)). These heights are always obligatory to be above the highest elevation of the topography. In this case of use of "interfaces/horizons" for the input of the model geometry, the "Top" layer in the model is reinterpreted as "topography layer". **IGMAS+** will then automatically form a body whose upper boundary ("Top" layer in [Figure](#figure-onshore)) is defined by the user; this body is given the density $\rho = 0$ kg/m$^3$ and therefore has no gravity effect on the stations lying on the topography (big green triangles in Figures for [CBA (simple)](#figure-cba_simple), [FA (simple)](#figure-fa_simple) and [FA (difficult)](#figure-fa_difficult)).

------------------------------------------------------------------------

Modifications of the density model
----------------------------------

The calculated gravity field of a density model can be analyzed based on the respective residual gravity:

When changing the density model, either by changing the density or the geometry of model bodies, **IGMAS+** automatically and instantaneously adjusts the calculated and residual gravity anomaly, which is displayed by a 3D or a 2D viewer (possibly together with additional constraining data). The 2D viewer always displays one of the working planes, which makes them the actual scenes of **interactive** geometrical modifications as implemented through:

1.  **moving, deleting or adding** of vertices, or
2.  **dividing** bodies through additional intersections.

Through its interactive mode, **IGMAS+** is primarily designed for analyzing and adjusting the 3D density model by visual inspection of gravity anomalies.
This clearly implies some level of subjectivity in the model evaluation but a major advantage in compression to automatic algorithms is that it gives the user more control and especially the ability to learn how different features influences the result.
For this reason, in addition to changing the density model through a complicated try-and-error procedure, **IGMAS+** also allows to **invert** for the density (of one or more bodies) by minimizing the residual of a model.

------------------------------------------------------------------------

Remarks on the use of ICGEM gravity datasets
--------------------------------------------

ICGEM stands for ["International Centre for Global Earth Models"](https://icgem.gfz.de/) (Ince et al., 2019[@InceBarthelmesEtAl2019]). For 15 years ICGEM is one of the five worldwide services coordinated by the [International Gravity Field Service (IGFS)](http://igfs.topo.auth.gr) of the [International Association of Geodesy (IAG)](http://www.iag-aig.org). Static and temporal global gravity field models of the Earth are provided in [a standardized format](https://icgem.gfz.de/ICGEM-Format-2011.pdf) with a possibility to assign a DOI number and interactive calculation and visualization services of gravity field functionals are available.

For more information refer also to the instructive [ICGEM poster](https://icgem.gfz.de/Ince_et_al_EGU2019_15513_poster.pdf) presented at EGU-2019 and to the [ICGEM documentation](https://icgem.gfz.de/str-0902-revised.pdf) "Definition of functionals of the geopotential and their calculation from spherical harmonic models" (Barthelmes, 2013[@Barthelmes2013]; see also Ince et al., 2019[@InceBarthelmesEtAl2019]).

The online availability of global models opens many research possibilities worldwide. However, to use the data provided from global model grids correctly one should pay an extra attention for what dataset actually represents. In the following section we provide some hints regarding the use of ICGEM models for geophysical modelling.

The [ICGEM documentation](https://icgem.gfz.de/str-0902-revised.pdf) (Barthelmes, 2013[@Barthelmes2013]) in a sophisticated mathematical-physical form shows how the different functionals and models of the gravity field are calculated. For understanding it is of great advantage to have certain geodetic knowledge. In the following we will try to give some useful hints in a very simplified manner. The first note refers to all users, who use the ICGEM anomaly `gravity_anomaly_bg`.

???+ note

    The [ICGEM documentation](https://icgem.gfz.de/str-0902-revised.pdf) provides the following comment for the calculation of the "simple Bouguer anomaly":

    "The (simple) Bouguer gravity anomaly (Functional selection $\Longrightarrow$ `gravity_anomaly_bg`) is defined by the classical gravity anomaly minus the attraction of the Bouguer plate. Here it will be calculated by the spherical approximation of the classical gravity anomaly minus $2 \pi G \rho H$ (eqs. 107 and 126 of [STR09/02](https://icgem.gfz.de/str-0902-revised.pdf)). The topographic heights $H(\lambda,\phi)$ are calculated from the spherical harmonic model of topography ([ETOPO1](https://www.ngdc.noaa.gov/mgg/global/)) used up to the same maximum degree as the gravity field model:

    - For $H \ge 0$ (rock)  $\rightarrow$ $\rho$ = 2670 kg/m$^3$,
    - For $H < 0$ (water) $\rightarrow$ $\rho$ = (2670--1025) kg/m$^3$ is used.

    The density contrast between ice and rock has not been taken into account $\Longrightarrow$ the results for Greenland and Antarctica are not correct."

Please have in mind, that $H$ is the height of topography above the geoid!

Fortunately, the differences between geoidal and ellipsoidal heights on Earth are small, however, present everywhere. From the geophysical/gravimetric viewpoint, not only the disregard of the gravity effects of ice masses is incorrect, but also the calculation itself. Firstly, a "flat bouguer plate" is considered, not a spherical Bouguer plate. Secondly, no topographic correction is conducted, which can lead to considerable errors in mountainous areas (Andes, Alps, Apennine, Himalaya). On the other hand, the transition areas between the continental margins and the oceans are also subject to errors, as [Figure](#figure-mass_correction_difference) shows.

<a name="figure-mass_correction_difference"></a>
*![Differences of a complete mass correction of gravimetric measurements (in geophysics) in contrast to the correction performed at ICGEM, where only a flat plate is attracted.](./mass_correction_difference.png)*

This illustration shows that in ICGEM's `gravity_anomaly_bg` not all masses were correctly removed. Remnants remain in the topography over land (density 2670 kg/m$^3$) and at the sea (density 1645 kg/m$^3$). The latter residue can be minimized by modelling the sea water layer by a body with a density of 1645 kg/m$^3$.

Another remark refers to the meaning of the term **anomaly** in geodesy and in geophysics (see, e.g., Li & Götze, 2001[@LiGoetze2001]). The [illustration below](#figure-anomaly_vs_disturbance) makes the difference graphically clear. A geodetic **anomaly** always implies, that the gravity anomaly $\Delta g$ is calculated at the geoidal surface which is **NOT** the "real" topographic surface (see [Figure](#figure-anomaly_vs_disturbance), left). This implies a downward continuation of $g_P$ into the topographic masses which is incorrect -- at least from a geophysical point of view.

<a name="figure-anomaly_vs_disturbance"></a>
*![To clarify the concept of anomaly and disturbance. In geodesy, an anomaly is always calculated on the geoid, which requires a downward field continuation (left panel) of gp by the amount of H; this is unstable and therefore forbidden. In contrast, geophysicists use an upward continuation (right panel) of the normal gravity γ from the ellipsoid by the amount of h into the position of P to compute a Free Air anomaly in P. This procedure is mathematically correct. In geodesy, a Free-Air anomaly is also called disturbance.](anomaly_vs_disturbance.png)*

<!-- {{< figure library="true" src="anomaly_vs_disturbance.png" lightbox="true" title="**FIGURE 4.7:** To clarify the concept of anomaly and disturbance. In geodesy, an anomaly is always calculated on the geoid, which requires a downward field continuation (left panel) of $g_P$ by the amount of $H$; this is unstable and therefore forbidden. In contrast, geophysicists use an upward continuation (right panel) of the normal gravity $\gamma$ from the ellipsoid by the amount of $h$ into the position of $P$ to compute a Free Air anomaly in $P$. This procedure is mathematically correct. In geodesy, a Free-Air anomaly is also called disturbance." numbered="false" id="anomaly_vs_disturbance" >}} -->
In contrast, geophysicists use the term **anomaly** (here, more precisely, **Free Air anomaly**) to determine the gravity difference $\Delta g$ directly at the observation point $P$. For this purpose, it is necessary to perform an upward continuation (height $h$ in [Figure](#figure-anomaly_vs_disturbance)) from the ellipsoid into the measuring point level $P$. This is a mathematically-physically stable procedure and therefore is allowed.

???+ note
The geophysical Free Air anomaly is the same in meaning as a geodetic disturbance.

So, if the model gravity is to be compared with the Free Air anomaly, in the [ICGEM calculation service](https://icgem.gfz.de/calcgrid) first the gravity model is selected under the heading "Model selection" (EIGEN-6C4 is a good choice, also XGM2019), then in the heading "Functional selection" `disturbance` is selected, if no specific non-zero meter altitude is to be selected.

This is dangerous, because then, under certain circumstances, the stations of the Free Air anomaly/disturbance can lie within the model masses (see chapters on [FA (simple)](#free-air-anomaly-fa-the-simple-situation), [FA (difficult)](#free-air-anomaly-fa-the-difficult-situation) and on the ["Top" body](#the-top-body-in-the-density-model)). If the model contains topographic heights which are higher than 0 m, then select `disturbance_sa` in the column "Functional selection" and enter the height in the input mask on the right under the input of "grid step \[°\]". The height is freely selectable by the user and must be above the maximum of the model topography; this corresponds to the height with the small green triangles in Figures for [CBA (simple)](#figure-cba_simple), [FA (simple)](#figure-fa_simple) and [FA (difficult)](#figure-fa_difficult).

To calculate complete Bouguer anomalies it is recommended to download the free-air/disturbance at station level and then perform Bouguer corrections using a DEM model for both on- and offshore masses.

References { data-search-exclude }
----------------------------------

\\bibliography

Workflows
=========

???+ quote
Design isn't finished until somebody is using it.
― *Brenda Laurel*

Preface
-------

In the **Workflows** chapter we break down the steps to make your **IGMAS+** project smoother.
You will learn here how to handle project parameters, explore different displays and visuals for a better view of your model, and discover seamless methods of importing model geometry, as well as easy ways to save and load your work.

Let's simplify the process of getting things done in **IGMAS+**!

Workflows Gallery
-----------------

::: {.grid .cards markdown=""}
-   :fontawesome-solid-wrench: [**Initial Setup**](./initial.md)

    ------------------------------------------------------------------------

    [![Initial Setup](interface_theme.png)](./initial.md)

    Initial setup of **IGMAS+** is the first step to getting started. This workflow describes how to set up the interface and JVM settings.

-   :material-cube-outline: [**Model Creation**](./model.md)

    ------------------------------------------------------------------------

    [![Model Creation](create_model_result_sections.png)](./model.md)

    Creating a model is the first step to start a new project. This workflow describes how to create a model in **IGMAS+** using the working sections.

-   :fontawesome-solid-file-import: [**Import**](./import.md)

    ------------------------------------------------------------------------

-   :fontawesome-solid-display: [**Display & Visualization**](./display.md)

    ------------------------------------------------------------------------

-   :fontawesome-solid-sliders: [**Physical Properties**](./properties.md)

    ------------------------------------------------------------------------

-   :fontawesome-solid-cubes: [**Voxels**](./voxels.md)

    ------------------------------------------------------------------------

-   :material-vector-polyline-edit: [**Model Geometry**](./geometry.md)

    ------------------------------------------------------------------------

-   :material-chart-timeline-variant-shimmer: [**Inversion**](./inversion.md)

    ------------------------------------------------------------------------

-   :fontawesome-solid-file-export: [**Export**](./export.md)

    ------------------------------------------------------------------------
:::

Initial Setup
=============

One important step of the initial setup which is directly related to the modelling process and to the performance of **IGMAS+** in general, is the setup of the the Java Virtual Machine (JVM) settings.
This can be done from the [**Menu Bar**](../user_interface/menu.md) under ++"Research"++ --\> ++"JVM Settings"++.
Read more in the [**JVM Settings section**](../user_interface/menu.md#jvm-settings).

But before getting started, two more decisions related to the **IGMAS+** interface are to be made that are independent of the modelling process:

-   the external appearance (interface [theme](#theme)).
-   the [language](#language) of the interface

Theme
-----

In the **Menu Bar** select ++"Edit"++ --\> ++"Options"++ --\> ++"Look & Feel"++ and select the theme you like:

<a name="figure-interface_theme"></a>
*![Select interface theme: selected one is "light"; in addition, there is a large number of colour shades for both "light" and "dark".](interface_theme.png)*

Language
--------

In the **Menu Bar** select ++"Edit"++ --\> ++"Options"++ --\> ++"Language"++:

<a name="figure-interface_language"></a>
*![Select interface language: English or German](interface_language.png)*

!!! note

    This documentation is available only in English.

Model Creation
==============

This workflow describes how to create a new model in **IGMAS+** using a "traditional" workflow using vertical sections (planes) or [working sections](../glossary.md#working-section). Historically, the idea behind this approach was to construct the model along seismic lines, which acted as constraints on the modelling.

This approach was used in **IGMAS+** since the beginning and represents an alternative to building a model using [horizons](../glossary.md#horizon) (or ["flying carpets"](../glossary.md#flying-carpet)), such as Moho interface, intra-crustal layers, etc.
The "flying carpet" approach is described in the [Import horizons](import.md#import-horizons) chapter and in the [Molasse Basin](../examples/Molasse_Basin.md) example.

Start a new project
-------------------

In the **Menu Bar** select ++"File"++ --\> ++"New Project"++:

!!! note

    This function is available **only** if there is no model loaded.

![New Project](File_New_Project.png)

This is the wizard to create a new project:

![New Project Wizard](New_Project_Wizard.png)

There are two possible ways of creating a project/model:

1.  New Model: build a new model using working sections - explained in this chapter and in the [EVA](../examples/Eifel_Volcanic_Area.md) example.\
2.  Horizon Import: build a model by importing layer surfaces (horizons) - explained in [Import horizons](import.md#import-horizons) chapter and in the [Molasse Basin](../examples/Molasse_Basin.md) example.

### Setup a new model

To build a new model, choose ++"New Model"++. The New Project Settings window will open:

![New Project - Settings](New_Project_Settings.png)

Set the origin (`X`, `Y`), the horizontal size (width in `X` and `Y` denoted as `Distance` in both cases) and the vertical size (`Depth`).
Don't forget to choose the units (meters `m` or kilometers `km`).

Default values are 0 for `X` and `Y`, 10 for `Distance`, and 5 for `Depth` with `m` as units.

Click on ++"Next"++.

### Setup the distribution of working sections

![New Project - Distribution of Working Sections](create_model_distribution_of_sections.png)

Here you can set the distribution of [working sections](../glossary.md#working-section):

-   Set the **Azimuth** - the orientation of the model sections in relation to the true north
-   Set the **Spacing** - the distance between the sections or change **Count** - number of sections

Click ++"Preview"++ to see the distribution of the working sections after the changes.

You can also user ++"Reset"++ to return to the default values.

More information on how to set the distribution of working sections can be found in the [EVA example](../examples/Eifel_Volcanic_Area.md) example.

Click ++"Finish"++ to continue.

The result is a new project with a new model consisting of working sections:

<figure>
*![New Project - Result](create_model_result_sections.png){: style="width:500px"}*
<figcaption>
New Project - Result
</figcaption>
</figure>
Save the created project
------------------------

After creating a project, both ++"Save Project"++ and ++"Save as"++ will allow you to save the created project within a folder. In both cases **IGMAS+** will ask for a directory name and a new directory (global folder) and subdirectory (timeline folder) will be created. This directory structure keeps the valuable information about project changes over time. In this way you can always recover old and current models.

Triangulate the model
---------------------

The [triangulation](../glossary.md#triangulation) is the process of creating a mesh of triangles that link the working sections of the model together.
It is a necessary step because the further modelling process is based on the triangulated model.

Click on ++"Edit"++ --\> ++"Model - Triangulation"++ in the **Menu Bar** or use the **Triangulate Sections** icon ![icon\_triangulation](icon_triangulation.png) to triangulate the model between the sections:

![New Project - Model - Triangulation](New_Project_Model_Triangulation.png)

If you don't have the stations in the model, the checkbox "new calculation of gravity and anomalies" is not relevant.
If you already have the stations in the model, keep the checkmark in this checkbox if you want to perform the calculation of gravity and anomalies after triangulation, and click ++"Finish"++.

If you want to calculate the gravity and anomalies later, uncheck the box.
You can do this later by selecting the ++"Tools"++ --\> ++"Re-Calculate Anomaly"++ option in the **Menu Bar** or using the icon ![icon\_recalculate](icon_recalculate.png).

The result of the triangulation will appear in the **3D View**:

<figure>
*![Triangulated model](create_model_result_triangulation.png){: style="width:500px"}*
<figcaption>
Triangulated model
</figcaption>
</figure>
Setup body parameters
---------------------

Calculation of anomalies requires the definition of the physical parameters of the model bodies - densities for gravity modelling and susceptibilities for magnetic modelling.

Go to the [**Body Manager Tab**](../user_interface/body_manager.md).
The list of [bodies](../glossary.md#body) contains the default name for bodies (`new_body`) and the name for the surrounding reference body (`reference`).

To add density, choose ++"Add Parameter"++, select Units (e.g. t/m$^3$), select Type - "Density".

Set the two density values for the two bodies, e.g. keep 0.0 t/m$^3$ for the "reference body" and set 1.0 t/m$^3$ for the "new body". To do this, double click ++lbutton++ on the value and enter the new one:

*![Assign density value in the Body Manager Tab](create_model_assign_density.png)*

In a similar way, you can assign other parameters to the bodies, e.g. susceptibility.

!!! note
If the parameter already exists, **IGMAS+** will inform you about it. It is not possible to overwrite the existing parameters by accident. Instead, you can change the existing parameters manually or by assigning the same value to all of them. For that click ++rbutton++ on the parameter name in te table header in the **Body Manager Tab** and select ++"Set/Add Values to..."++ in the context menu:

    *![Set or add to all body parameter values](create_model_set_add_values.png)*

Setup stations
--------------

### Create station grid

There is a possibility to create a grid of stations in the model.
This is useful in case you want to create a model with a regular grid of stations, e.g. for testing purposes.

Choose ++"Tools"++ --\> ++"Create Station - Grid"++.
The **Station Grid** window will open:

*![Create station grid](create_model_station_grid.png)*

Enter the area of the stations: The origin of the grid (**X**, **Y**), the size of the station grid (**Distance** in $X$ and $Y$) and the grid step (**X-Step**, **Y-Step**).
The total number of stations is calculated automatically and is shown in this window as well.

The stations are displayed as red dots, the station area (surface triangulated in between station points) is reddish:

<figure>
*![Created station grid](create_model_stations.png){: style="width:500px"}*
<figcaption>
Created station grid
</figcaption>
</figure>
### Import stations

If you have measured data at the stations, you can import it into the model.

For instance, we can use a [CSV file](../technical_information/files.md#station-files) with `X`, `Y`, `Z` coordinates and height.

For that in the [**Menu Bar**](../user_interface/menu.md) select ++"File"++ --\> ++"Import"++ --\> ++"Stations"++:

![New Project - Import Stations](New_Project_Import_Stations.png)

and pick the corresponding file with the data.

More information on how to import the station data can be found in the [Import stations](./import.md#import-stations) chapter.

Calculate anomalies
-------------------

Once the model is triangulated, stations are created and imported, and the body parameters are set, you can calculate the anomalies.
To do this, select the **Menu Bar** and choose ++"Tools"++ --\> ++"Calculate Anomaly"++ or use the icon ![Calculate icon](icon_calculate.png).

*![Calculate anomalies dialogue](create_model_calculate_anomalies.png)*

Select the type of anomaly you want to calculate (e.g. `calc Gz`).

Click ++"Finish"++ to accept the changes and start the calculation.

The result will be shown in the **3D View**:

<figure>
*![Calculated anomaly (vertical component of the gravity field) in the 3D View](create_model_result_calculation.png){: style="width:500px"}*
<figcaption>
Calculated anomaly (vertical component of the gravity field) in the 3D View
</figcaption>
</figure>
To see the calculated anomalies in the **2D View**, select ++"Add View"++ in the **Tool Bar** and then select ++"2D View"++:

<figure>
*![Calculated anomaly (vertical component of the gravity field) in 2D View](create_model_2d_view_full.png){: style="width:800px"}*
<figcaption>
Calculated anomaly (vertical component of the gravity field) in the 2D View
</figcaption>
</figure>
Import
======

This set of workflows describes how to import various data into **IGMAS+**.

Import horizons
---------------

This workflow is used if you have existing digital data that define continuous [horizons](../glossary.md#horizon) (or ["flying carpets"](../glossary.md#flying-carpet)) in the entire modelling area.

Several horizons are stacked to build a ["layer cake"](../glossary.md#layer-cake) model, and the physical parameters between the interfaces are assumed to be constant.\
Users must use **one file for each horizon**.

???+ note
Before we get started, here are a few tips to make sure the input works:

    **File formats**
    The following formats are possible: `*.xyz`,`*.csv` or [Geosoft binary grid format `*.grd`](https://surferhelp.goldensoftware.com/subsys/subsys_geosoft_grid_file_descr.htm). The `*.csv` file format is preferred. See the [File Formats Chapter](../technical_information/files.md#file-formats) for more information.

    **Point types**
    The points defining the horizons may be gridded or irregularly distributed. Points with identical location but different z-values will be averaged (there will be a notice during import).

???+ warning
Beware:

    - The points are interpreted to represent **point locations x, y, z**. They are not to be confused with **grid cells**, which are not used here, even in case of regularly gridded horizons.
    - Make sure that the files are read in such a way that they always start with the **top horizon**. The order (from top to bottom) is very important, because it directly controls the triangulation.
    - Have you prepared the "correct gravity field"?
    That means, do you want to calculate with a [FREE AIR](../glossary.md#free-air-gravity-anomaly) or with a [BOUGUER](../glossary.md#bouguer-anomaly) anomaly?
    In both cases a topography file must also be read in. Here you have to make sure that the model stations are located **OUTSIDE** of the model masses - otherwise the mathematics behind the algorithms are no applicable and the calculations will be incorrect.
    - Make sure that the units are correct: give densities in kg/m$^3$, gravity in mGal or 10$^{-5}$ m/s$^2$, depths and lengths in km or m.
    - And finally: did you prepare your model data files for a plane gravity calculation (e.g. use [UTM](../technical_information/coordinates.md#projection-universal-transverse-mercator) or [Gauss-Krueger](../technical_information/coordinates.md#projection-gauss-krueger) coordinates) or for a spherical calculation (use geographic coordinates with latitude and longitude)?

    If all this is considered, it goes off, assuming that **IGMAS+** is installed correctly.

This is how you can import the horizons:

-   Choose ++"File"++ --\> ++"New Project"++ --\> ++"Irregular/Regular Horizon (XY-Plane) Import"++ -\> ++"Finish"++:

    ![](create_new_project.png)

-   Choose the directory and the file(s) to be imported. Make sure to select all files for the model to be built, as later inclusion of additional horizons is not possible.
-   Press ++"Finish"++.
-   Now you see the following window:

    ![](find_horizon_files.png)

    On the right, the input files are listed with the horizons from top to bottom. Below that the "Folder name" is displayed and below that the file type.
-   Press ++"Next"++
-   The **Import Wizard** lists all imported horizons (files) and orders them from top to bottom according to the value **Zmin**:

    ![](list_of_loaded_horizons.png)

    Make sure, that the list corresponds to the stratigraphic column / layering in your modelling area. If necessary, change the order using the arrows on the right hand of the wizard.

    From left to right, the following information is displayed:

    -   **Name**: This name will be used as the name of the body **below** the corresponding horizon (can be changed later).
    -   **\# of points**: Number of points to be read from file (for information only).
    -   **Area**: Minimum x-coordinate, minimum y-coordinate, size in x-direction, size in y-direction (for information only).
    -   **Zmin** Minimum depth of the horizon (for information only, the value is used to define the layer order).
    -   **Zmax** Maximum depth of the horizon (for information only).
    -   **\# of x-points, \# of y-points** These values are used to apply averaging of horizon vertices on regularly spaced locations. Default is 0 for irregular points and original number of points for grids (no averaging). All three coordinates ($x$, $y$ and $z$) will be averaged using the [block average filter](../technical_information/algorithms.md#block-average-filter).
        Alternatively, user can use **x-spacing** and **y-spacing** to set up the grid for averaging (see below).
    -   **x-spacing, y-spacing** Instead of setting number of points one can set desired spacing and the corresponding number of points will be automatically recalculated.

        ???+ note "Hint:"
        The last four columns can be used for filtering of highly oversampled horizons. For instance, a resolution of 100 m $\times$ 100 m for [Moho](../glossary.md#moho-mohorovicic-discontinuity) depths is clearly an oversampling.

-   Press ++"Next"++
-   The next wizard defines the general model parameters derived from the loaded horizons:

    ![](horizon_import_model_settings.png)

    -   **Extend model borders**: Use this checkbox, if the model should be extended laterally to reduce the border effect, and specify the model extension in **Range**. \> *In our example we take default: 2192 km.*
    -   **Minimum vertical distance**: Minimum thickness of bodies. It is used only if the imported vertices have identical horizontal positions throughout all horizons or if the vertices are interpolated regularly on the sections (see **Project Points (Mundry)** below). \> *In our example it is 2.2 m.*
    -   **Z-Top.** Depth of the upper limit of the model (plane, horizontal). Default 0, if no topography is given, otherwise maximum **Zmin** of all horizons. \> *In our example model there is no topography.*
    -   **Z-Button.** Depth of the lower limit of the model (plane, horizontal) - defines the bottom of the model. Default: minimum $Z_{min}$ value of all horizons. \> *In our example model we take biggest depth of 400 km (upper mantle).*
    -   **Units.** Make your choice depending on the data entered (depths, distances, grid spacing, etc.). \> *In our example we use km.*
    -   **Project Points (Mundry).** Use this checkbox to interpolate irregularly spaced horizon vertices on the sections with the desired **Distance**. \> *In our model, we wanted to re-interpolate the data ("even" grid spacing). For this purpose a procedure according to Mundry is used.*

-   Press ++"Next"++
    <!-- ![](horizon_import_setup_sections.png) -->
-   In this last wizard we are able to specify the area to be modelled and the position of the vertical sections.

    -   The modelling area is the maximum area, which is covered by all horizons - indicated by a grey rectangle.
    -   By default 5 vertical sections are suggested.
    -   The numbers on the axes indicate coordinates in the example these are UTM coordinates.
    -   The **green circle** 🟢 defines the southwestmost point of the modelling area.
    -   The **red circle** 🔴 defines the northeastmost point of the modelling area.

    You may change the position of the circles by either clicking with the **right mouse button** on them (alphanumeric input); (an example for the coordinate input of the red point you can see here):

    ![](20423d66c7f6777aac7301a9330d1d2a.png)

    or just dragging them. Both input options redefine the model boundaries, also change the spacing of the five specified vertical planes (dashed lines in the window between the coloured points.

    ![](8dc7ac247f7d0e65d067e32e261dc004.png)

    -   **Azimuth, N -- E -- S - W.** Sometimes the horizontal direction of the vertical sections must be adapted to the gravity field to be examined, because the modeling should ideally always be as perpendicular as possible to the main strike of the anomaly - this ensures the greatest possible model gravity effect. You have the possibility to set a first rough adjustment of the direction via **N**orth - **S**outh - **E**ast - **W**est.

    ![](3079cf36c8d7c61d90de822d8fa023e0.png)

    -   **W**est: the vertical sections run in N-S-direction

    ![](4ccbcfb6a8910c15e7bc0409e6b6cb31.png)

    -   **S**outh: the vertical sections run E-W-direction.

    > In our example from the beginning, the vertical sections are aligned in the west-east direction and count from south to north.

    If you want to rotate it even more precisely, use the numeric input in the azimuth window of the setting. In the example in the next figure, 283° (270° + 13°) was used:

    ![](911c8fe547bcc0258e1ae7ed4de793fd.png)

    -   **Distance.** The vertical sections to be created are indicated by dashed lines. Use the numeric input field to modify the distance between the vertical sections. Specification in km (as defined above for the input units). In the example, this would be approx. 317 km (316.85 km).

    -   **Count:** Use the ++"\<"++ and ++"\>"++ buttons to decrease or increase the number of layers.

        In the example, the number of vertical sections has been doubled; the distance between vertical levels is reduced accordingly to 133.94 km:

        ![](horizon_import_setup_sections.png)

-   Press ++"Finish"++

    The model appears in the **IGMAS+** main window, defined by the 10 vertical planes in the central part of the model and additionally a bounding section in the north and in the south - as it was entered earlier in the 2nd wizard window (above).

    The model can now be moved back and forth for viewing. Click into the model with the **right mouse button** and keep it pressed. In this combination, move the model in the window. Moving the **mouse wheel** changes the zoom.

    ![](a5bc8f000771a3d3e023834ac481ddd3.png)

    ![](59e72cb2373a262d458207a93223c7ce.png)

    **Note:** The colours of the stratigraphic layers are set automatically by the program. You change them as shown below (refer to **Colors**). We still have no stations, no reference gravity field and the model densities loaded.

    But we can already have a quick look at the vertical sections. If you are interested, go straight to the item "**show vertical cross sections**" below and return later to this position.

Import stations
---------------

**How to import reference gravity/gradient/magnetic field and topography/bathymetry?**

Use the **File \> Import \> Stations**

![](7cade9abf7f83975e7f3d13e01879b57.png)

Be sure to use the correct units and file type (*.csv* or *.xyz*)

![](f13d9a5d1538bfe21f485f92cb8c70fa.png)

In this input window you have the chance to assign different input parameters to the individual columns X - Y - Z. Column Z could also contain gradients or a magnetic field size. "Measured z component" is selected correctly.

![](3946908a42e58976486800b8a41696a7.png)

**Press Finish**

![](2a0e22a0a25d080db6a24e7491277aee.png)

The stations are placed in red on top of the vertical cross sections.

However, we do not yet have a basis for calculating the model gravity field. For this, two steps are necessary for preparation.

(1) Triangulate the vertical cross section, which results in a true 3D structure.

**IGMAS+** offers the user two options:
**Press either in the TITLE BAR \> Edit \> Model - Triangulation**

![](New-1.png)

**or Press in the TOOL BAR** ![](0cd10dc92be237981beb5b06d939b4b6.png)

Next you will see this wizard:

![](acc5a34c979077f6b1d09d898a791aab.png)

**Press Next**

... and get from the program the following information:

![](476c2b0548f8701df46f1475678e4e08.png)

> ![](59e72cb2373a262d458207a93223c7ce.png) Check the messages in the table. *Here possible errors during triangulation are indicated, but at the same time it is pointed out that they will not be serious*. This is a numerical instability in the visualization, which has no influence on the gravity calculation.

**PRESS Finish**

In the status information (below) the message will be shown that your model has no errors (green light), and we can proceed to calculate the modelled gravity field.

![](b479964f08ae237708ac68bd6da7df3b.png)

To calculate the modelled fields, **IGMAS+** offers two possibilities:

Click in the **TITLE BAR \>Tools \> Calculate Anomalies**

and select Calculate Anomalies.

![](c1107463bff784fb7aca416d7cfab883.png)

or

press in the **TOOL BAR** ![](a7eb5531cd042caaedd0feee7f1ba3b3.png)

and see the window:
![](New-2.png)

Select the field component you will calculate and then

**PRESS Finish**

> Of course, the length of calculation time depends on the size of the model and the number of stations. **Be patient with large models!**

The green "traffic light" of the "**progress bar**" in the "**lower status line**" gives you the certainty that everything has been calculated correctly.

![](fc4a45e61cbe16206cf1c2d9e4111dc5.png)

... then the time has come to see the modelled field and the model in perspective on the screen.

![](54fb46971d7dcc53eae3678f0bb7f0c5.png)

Load a project
--------------

First select **"Open Project".**

**Open a version**

When opening a project, several versions are displayed. These are all versions that have been saved earlier.

Select the following:

![](fd79cabdd97ac0577b742432acb0aab6.png)

<!-- ???+ note

    Dark or light interface appearance [can be set by the user](./appearance.md#theme). -->
Display & Visualization
=======================

Visualization of working sections in 2D
---------------------------------------

If you want to go through the model step by step (vertical cross section for vertical cross section), you can use the 2D View.

In the **Tool Bar** under ++"Add View"++ --\> ++"2D View"++.

![](../media/select_2d_view.png)

The 2D View tab opens and the first vertical cross section of the model is displayed:

![](../media/New-8.png)

There are several ways to step through the vertical sections of the model.

(1) Use the **˄** (up) and **˅** (down) in the right upper part of the main window to step through the model.

![](../media/94c28f71e7ffaae775cc07709d4d0c30.png)

Now let's learn about two other options:

(2) Open the sections in the "**OBJECT-TREE**" window of **IGMAS+** and select the section to be visualized (for example section 7). Click with the right mouse button on the section symbol and select "View Section/2D" in the window. The selected section will appear. Because each section must be clicked individually, it will take longer to view large models than with the method described above.

![](../media/New-9.png)

The third possibility to visualize sections is realized via the "Map display".

**Add view \> 2D Maps View (click)**

Then the three maps appear that are active in the Object tree under **"Fields"**.

![](../media/New-10.png)

Then the three maps appear (measured - calculated residial field), which are active in the object tree under "Fields". From left to right you can see the map of the measured field, the modeled field, and the differences between the measured and the modeled field.

![](../media/0bf77451647a707b7503db810b8c66c4.png)

A map enlargement can be seen in the next figure. Click with the right mouse button on the map layer and the window that opens offers the possibility to draw the section (click "Show sections").

**![](../media/59e72cb2373a262d458207a93223c7ce.png) NOTE:** In the same way, other information can be selected in the same window.

For example, "**Show Stations**", "**Show Contours**", etc.

![](../media/949b157c6a2a74dd145ce2c4bbbbcd69.png)

Click on one of the lines/vertical sections. It will be highlighted in red and the section name will be displayed.

![](../media/New-11.png)

Clicking with the right mouse button on the selected line opens the 2D view of this section.

![](../media/New-12.png)

The default setting is always the perspective display of the reference field (measured field). The default setting is always the perspective display of the reference field (measured field). This can be adjusted by clicking the following button in the **TOOL-BAR** line:

**Add view \> 3D Model \> click**

![](../media/cb359dd296d9d9e0be038342deae938e.png)

If the display of the comparison field is not desired, the user has the option to change this in the 3D display. In the following the difference field is to be represented. A right mouse button click on "**Residual Field**" opens the window and one selects "**Show in 3D**":

![](../media/463efc3e92fbee390c5568b924e26005.png)

If you want to visualize the underlying information (e.g. positions of sections), you can change the transparency of the field display. Go to "Fields" in the **OBJECT TREE** and activate "**Property Editor**" in the **BODY MANAGER** below.

Here you can change the transparency (using the slider). In addition, a "shading" of the surface can be created and an exaggeration of the field.

![](../media/aaa29631e002c8140a0539544a74e29a.png)

> The value for exaggeration is always smaller than 1: ***ValExagg \< 1***

Perspective of 3D Model
-----------------------

The 3D model can be displayed in two perspectives. The default is the perspective view. Modification: click with the **right mouse button** in the model and select "**View**" in the window and select the perspective with the **left mouse button**:

![](../media/e165f4f4b61600b11a85389e3a7fc015.png)

A *second, alternate procedure* is:

Go to the line below the "**TOOL BAR**" and click the shown options for model perspective:

![](../media/New-13.png)

If all three types of display are selected, you will see below the **TOOL BAR**:

![](../media/11d9df7c409ce749c90f380e083a0b0c.png)

The three windows can be removed again by clicking on the **X**.

Zoom in, zoom out, move and place IGMAS+ elements
-------------------------------------------------

Click in the workspace window on the object to be enlarged/down sized.

-   **ZOOM in** with a movement of the **mouse wheel** *t o w a r d s the user*,

-   **ZOOM out** with a movement of the **mouse wheel** *a w a y* from the user.

This is generally true for all three \"views:

![](../media/666b5f20e3ba2b5ddadd6de82f905a3d.png)

But click for **2D View** in the model.

![](../media/96dde1c146712f9a17a22860d140adfc.png)

Click with the **right mouse** button on the object and moved it pressed:

**Moving** objects of: ![](../media/New-14.png)

Click with the **right mouse button** on the model and moved it pressed up and down, to the left and right. The window with the field curves will be placed correctly above the model.

**Tilting** a 3D View in its actual position: ![](../media/New-15.png)

Click with the **left mouse button** in the workspace window and moved it pressed:

**Center objects**

Center model and 2D map views: ![](../media/96dde1c146712f9a17a22860d140adfc.png)

Click with the **right mouse button** in the model, select "**Center at**" in the window and select the perspective with the **left mouse button**:

![](../media/86135acb63895dc4c2196fbb6fcf712e.png)

A *second, alternate procedure* is:

Go to the line below the "**Tool bar**" and click the shown options for centering the model:

![](../media/New-16.png)

Center 2D View:

Go to the line below the "Tool bar" and click the shown options for centering the 2D cross section:

![](../media/New-17.png)

The cross section (lower panel)) together with the field values above it (upper panel) is centered in the area where stations are located.

2D View Section front/back side

In vertical cross sections that show the geometry of different bodies on their front and back sides (also called: *double occupancy*), the two icons of the following figure determine whether the front side (left icon) or the back side (right icon) should be shown.

![](../media/New-18.png)

Color management
----------------

Colors are used in **IGMAS+** in two very different areas:

\- (1) For the differentiation of **bodies** (geological structures) or

\- (2) in the **map representation** of the used fields.

For the differentiation of bodies (1) the program distinguishes between two color schemes:

-   either the (geological) bodies are filled according to the colors known in geology (e.g. **blue for Jurassic, green for Cretaceous** and **yellow for Tertiary** rocks) or
-   the colors are determined according to the **density of the body**. **Blue colors** correspond to **high** densities of rocks, **brownish colors** to **low** densities.

This color spectrum is automatically set by the program and is based on the color scale used to create the residual gravity maps. In the current **IGMAS+** version, the user does not have the possibility to change the scaling or the colors of the color scale. You can see the color palette (Vik) here; the way to get there is described in this chapter below.

![](../media/45c0fbf3efcd836704fcc8832254385c.png)

> **Note:** At the beginning of a modeling project **IGMAS+** automatically sets the colors for geological bodies. They must then be changed by the user according to the two color schemes.

### Change colors for geological bodies/polyhedrons

Be sure to have selected the "**Normal Color Mode**" after clicking View in the **TITLE BAR** \> "**Body Color Mode**" in the popped-up window \> and set "**Normal Color Mode**".

![](../media/New-41.png)

If the colors for the susceptibility of the bodies are to be set, then of course "**Susceptibility Color Mode**" must be selected in the window shown above. The process is analogous to the selection of the "**Normal Color Mode**".

Select "**Add View"** in the **TITLE BAR** and klick on "**2D View**". Below the **TOOL BAR** the icon for "2D View" is set:

![](../media/New-42.png)

Then go to the "**Object tree"** (top left), click on ![](../media/a8da9e3385e671d4b61563dfe79f5047.png) to open the"**Interfaces**\" tree
and select the body whose color is to be changed (here: 032\_con\_Sed\_Po; blue bar):

![](../media/ea226873155072251e14a938ca8facb6.png)

... go to the „**Property Editor**" \> click in the opened menu in „**Body**" and „**Color**" \> click on the small color window and click on the three **grey points** ![](../media/f089387752bf8dcc5973866645c1bbea.png):

![](../media/1a2a3dcd82746dcdfd4401a2b89d8490.png)

The color is also identified in the RGB color scheme (R:102 - G:204 -- B:255).

Clicking the three grey points (figure above) this window popped up:

![](../media/c1be1c3217e65387a020448245dd2389.png)

Select by clicking a new color

![](../media/a479c19cac11d2329cdc31b3b23cb54d.png)

Alternatively, the colors can be changed in this window using the HSV - HSL - RGB - CMYK color scales. The effect is the same everywhere.

### Change colors for IGMAS+ maps

The color palettes used in **IGMAS+** for map display follow new findings regarding the **physiology of perception** of healthy and visually impaired people (see for example:

<https://theconversation.com/how-rainbow-colour-maps-can-distort-data-and-be-misleading-167159>.

**IGMAS+** uses two options for selecting different color palettes for displaying the comparison field (measured gravity/magnetic field) and the modeled field (calculated) on one side and for displaying the residual field on the other.

#### Selection of the color palette for measured and modeled field

Select "**Add View"** in the **TITLE BAR** and klick on "2**D Maps View**". Below the **TOOL BAR** the icon for "2D View" is set:

![](../media/New-43.png)

Three maps are shown:

![](../media/0bf77451647a707b7503db810b8c66c4.png)

**Measured field (left) ------------------------------------------ Calculated field (middel) ---------------------------- Residual field (right)**

Select below the **TOOL BAR** on the right upper corner the icon ![](../media/New-44.png) and select the tab "**meas Gz/calc Gz**".

Get a window which visualize the **Batlow palette.**

![](../media/New-45.png)

By click on ![](../media/a8da9e3385e671d4b61563dfe79f5047.png) of the **Colormaps**, other palettes may be selected:

![](../media/3c07b4605d580e03b55e3753516da8c1.png)

> **![](../media/9da9cdbe551c3f44c3a4446e06aee078.png) Note:** The selection of the Batlow palette represents a good compromise, in terms of the previously often traditional "rainbow colors" palette and the currently recommended.

To select the color palette for the **residual field/"Residual Anomaly"** select the tab "**Residual Anomaly**":

**![](../media/65f2eb379dd5c66550b2367fa175ceea.png)**

The **Vik** palette is grouped around a central value (here: the Null value of the residual anomaly).

By click on of the **Colormaps**, other palettes can be selected.

Switch on and off fields
------------------------

Refer to **OBJECT TREE** an select **Fields.** If you don't want any fields to be displayed at all, uncheck the box with the blue checkmark ![](../media/226ba88e657a19bb48f64b3dc203179a.png) in front of **Fields**. If fields are to be displayed, then expand the tree under Fields, by clicking on . By unchecking the blue tick boxes in front of the corresponding fields (*calc Gz* or *meas Gz* or *Residual Anomaly*), the corresponding field can then be switched off/off respectively.

![](../media/New-53.png)

Point information of model parts
--------------------------------

In addition to the Property Editor and Body Manager, there is also the Information Tab. Click on Information \> move the mouse over the screen. The window now shows the information about the respective item.

![](../media/c462d9320da1a6388951df5550ce8bf0.png)

Physical Properties
===================

We already knew this action when it came to changing the density/susceptibility of a new body (see also "Split a body/polyhedron on a specific vertical cross section").

Change densities/susceptibilities
---------------------------------

Select in the window of **BODY MANAGER / PROPERTY Editor** (bottom left) and select **Body manager.**

The names of the existing model bodies are displayed with their selected colors. Then follow from left to right "voxel factor", "density \[t/m\^3\]", "volume voxels \[km\^3\]" and "volume polyhedron \[km\]". What of this information is displayed, the user can specify

by clicking the small ![](../media/b372419d0b48c4dac4331b499e91936e.png) in the right corner.

The various parameters can be changed in their horizontal position: Click with the **left mouse button** on the parameter to be moved and **drag it** to the desired position with the **mouse button** lowered.

![](../media/b9ce3a3f343abdf9576abf2216e37ecd.png)

**Double left mouse click** on the body (here upper mantle) where the density/susceptibility is to be changed and type in the new density alpha-numerically.

![](../media/9a2b047d139b9ac6e651f00a65f81115.png)

> ![](../media/4cee53174bf45847094a267c366ab816.png) **Note:** The resulting change in model gravity is displayed immediately, that is, the density change is performed automatically by the program.

The definition of „**reference density**" is import because it minimizes the edge effect" of the model. Always set the reference density so that the edge effect is a minimum! **Try this out on your model.**

![](../media/New-36.png)

Density inversion
-----------------

Besides the possibility to change densities directly by the user, **IGMAS+** also offers the possibility of an automatic calculation (inversion).

???+ warning "Attention:"
The inversion does not make sense if all or very many densities are to be changed in a model. The system of equations would then have too many parameters, would be overdetermined and the result would be meaningless. You have to try it out! One or two density values should be allowed for an inversion (e.g. 2 values out of 10).

The **MMSE method** is used in **IGMAS+**. MMSE stands for "Minimum Mean Square Error" and utilizes the mean square approach and Gaussian random variables within a statistical framework (refer to [Haase (2014)](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/publication/haase-2014/) for details).

Select in the **TITLE BAR "Tools"** among other important program activities -- we already know **--** klick on **"Parameter inversion (MMSE)**. Here is what you see:

*![](../media/3b83e96b5c759a93bc0df8ba6139d633.png)*

The next window opens:

*![](../media/e0c5be9cef0da1757a45fb4c55ac72e5.png)*

First, one has the possibility to select the density-inversion by means of **Gravity and/or Gradients";** with "M**agnetic**" one would make an inversion of susceptibilities (no susceptibilities exist in this example); refer to figure above.

To *modify* the error given for the field(s) (here 0.2 mGal) refer to scenario "**Change error of measured fields**" in last wizard.

At the right side of the above window, under the tab "**IGMAS effect**", the inversion of densities of polyhedra is to be selected (figure above). To set and/or to modify the standard deviations for the different densities in the menu above (STD: 5.0 t/m3) refer to scenario "**Change standard deviation of densities/susceptibilities**" below. For the inversion it will be sufficient in most cases to leave the values (STD) unchanged.

Otherwise, the densities of the voxel cube "**Voxel Effect**" can also be inverted (next figure).

To set and/or to modify the *voxel factor* (here 1.0) and the variance/STD 5.0) for the different bodies in the menu above refer to scenario "**Change standard deviation of densities/susceptibilities**" below. For the inversion it will be sufficient in most cases to leave the values ("voxel factor" and STD) unchanged. The "voxel factor" is explained in detail in the scenario "Voxelcube).

*![](../media/New-37.png)*

Below under "**settings**" you can switch off or switch on ![](../media/226ba88e657a19bb48f64b3dc203179a.png) the of geological bodies listed above.

**Invert** the densities of polyhedra "4Astenosphere" and "reference" (under IGMAS Effect). **All bodies under "Voxel Effect" are disabled now**:

![](../media/bcb23a34fb89b0576bd4eee50434edd4.png)

**Click** Next and the result will be presented in the next window

![](../media/New-38.png)

**Click Finish** to accept the new densities

The upper panel lists the densities before and after the inversion and the lower statistics panel shows the standard deviations (before/after) and the *Pearson correlation coefficients*. Since the correlation after the inversion is better than before, the result of the inversion was accepted.

In the other case, by clicking on "**Previous**", the user would have the possibility to select other bodies, respectively to change the standard deviations and errors.

> **![](../media/59e72cb2373a262d458207a93223c7ce.png) Attention:**
>
> To change standard deviations and errors, the inversion must be canceled. It is not possible to change the above parameters in the inversion window.

### Change error of measured fields

Click in the **OBJECT TREE** on "**Gravity z-component**". Then select **Property editor**

And select one of the icons ![](../media/cb7976e3e4a4c54c8d17208f493e8f84.png) :

**Click on "error gz"** and then on **"Value". Double click** with **left mouse button**

Enables the user to input a new value for the error of measured gravity field.

![](../media/bf5e357816fae2495338fef20fb2bb4a.png)

### Change standard deviation of densities/suceptibilities

Click in the **OBJECT TREE** on "**Gravity z-component**". Then select **Body Manager**.

You will see a window like this; (be aware: this here is only a snippet):

In the next step it is important to move the displayed parameters so that the items to be changed are visible. To do this, the window can be enlarged (keep the **left mouse button pressed** on the right edge of the **BODY MANAGERS** and drag it larger...).

Then, by clicking the ICON above right corner, a selection of the parameters can be made. Now it is important that **Standard deviation** is selected - for the density or for the susceptibility.

![](../media/cac230ee97d44dad86d0649350058ade.png)

This results in the next screen:

![](../media/cfb8fd55a1fbed2ce221fd3aa247570b.png)

... and after moving/sorting the parameters by *pressing* **left mouse button** and *moving* them into another position in the **BODY MANGER**, we see:

![](../media/e8891e81e04824e67873c5eee1754a3a.png)

To select a new Standard deviation for the density/susceptibility of one of the geological bodies
\> **click** on the body \> and then on ++"Add Parameter"++.

In the small window that is displayed you may **select** the correct units (here t/m\^3) and the **type** you will change: "**Density Standard Deviation**":

![](../media/New-39.png)

... finally **double click** with the **left mouse button** on body and include the new value:

![](../media/New-40.png)

In the same way, the other parameters can be changed - for example, the "**Voxel Factor**", which can also be inverted. In this case, the "**Voxel Effect\" tab** must be activated in the"Inversion\" window (see "**DENSITY INVERSION**" above).

Voxels
======

This workflow describes how to manage [voxel cubes](../user_interface/object_tree.md#voxel-cube) in **IGMAS+**.

The use of voxels is related to the topic of parameter (density/susceptibility) variations. In **IGMAS+**, a voxel cube is a cube consisting of many sub cubes, or voxels. The size of the cube as well as the size of the voxel can be specified by the user.

For example, think of a velocity cube in 3D seismic. Quite analogously, the 3D density (or susceptibility) cube is used in **IGMAS+**. The densities in the voxel cube overlay the densities of the polyhedra/rock bodies in the three-dimensional modeling space. A typical application would be to define a depth-depending or laterally changing density function to a sedimentary body, as shown in the figure **below**: the grey colors indicate varying densities for the underlying rock density.

![](../media/29386ebb740d7b924f7d9d404d7ba4e7.png)

The voxel functionality may also be used to calculate the anomalies of an imported seismic velocity cube, applying a function for the conversion of velocities (normally Vp) into densities. If only the effect of an imported voxel cube has to be calculated, the simplest **IGMAS+**+ model, a cube, might be defined with constant density ρ = 0. Refer to the following figure for basic information and to the **IGMAS+ User Manual page 104**.

Import a voxel cube
-------------------

???+ note
Only one voxel cube can be loaded in a current modeling. Any existing voxel cube must be deleted beforehand (see [Delete a voxel cube](#delete-a-voxel-cube)).

Select **File** in the "**TITLE BAR**" \> **click Import** \> select **VoxelCube** \> click with **left mouse button** on it.

![](../media/2c4f9ebd93a9d61714da074fa08d2de2.png)

Navigate in the new "**Open**" window to the directory where the file with the voxel cube is stored.

**IGMAS+** provides several possibilities for navigation by the small icons at the right side of the directory pull down menu:

![](../media/9f9a35b08af6faa810476f6b0bac9f2b.png)

These icons allow the user to do the following -- goto/show:

-   **Up on level -**
-   **Home**
-   **Create new folder**
-   **List**

**Details:**

Of course, you can also navigate to the desired directory with the ▼ next to the folder name; see next figure.

The "**Open"** window provides important information and enable the user to check the input data:

> ![](../media/59e72cb2373a262d458207a93223c7ce.png) **Most important:**
> Does your voxel file have the extension "xxx.**vxo**"? If not, rename file before you continue!

> **![](../media/59e72cb2373a262d458207a93223c7ce.png) Units: Also important and often neglected**
> Ensure that units of voxel positions (x,y,z = depth) correspond to units of polyhedrons (either in meter or kilometers \> or feet). Select units in the pull-down menu "units" on the upper right of the "Open" window.

Leave all other settings as they are: for "*Acceleration*" (gravity field), "*Gravity Gradient*" and/or *Magnetic Field*.

In the next menu item of the **OPEN** window, the user decides how to proceed with any unoccupied voxel cube elements. The default action is "*Fill empty cells with nodata value*". This means that **IGMAS+** inserts numbers with unrealistically high values (e.g. 1039) at the corresponding positions in the cube. If the alternative "*Use interpolation to fill empty cells*" is selected, corresponding values in the cube are interpolated.

The use of a CSV setting is strongly suggested. The separation of the values is indicated with "*blank*" in the example. In the following it is still determined whether a header is placed ahead of the data of the voxel file ("*Interprete Header*") and/or whether the cube values are separated with quotes ("*use Quote for Values*").

A few lines of the voxel cube input is given as an example for visual inspection.

![](../media/New-27.png)

The columns contain from left to right: x-, y- and z-values (depths) of the voxel elements; **note the direction of Z: it is negative downwards** . The last column shows densities of voxel cube elements.

![](../media/4cee53174bf45847094a267c366ab816.png) Here all lengths are given in km!!! **Click on "km"** to select the correct unit.

![](../media/New-27.png)

Otherwise, the data in the voxelcube file will be read in meters, with the consequence that the size of the voxelcube does not match the size of the density model: the voxelcube becomes too small by a factor of 1000 per unit length.

If all input boxes are filled in, click on **Open** with the **left mouse button**.

You get the window and sect "D**ensity type**" for gravity modelling and "**Susceptibility type**" for magnetic modelling; **click "Next"**:

![](../media/9b867de3bab82f4cc5c2aa2d9b93b622.png)

You get the window "**Model Voxellisation**" which contains further specifications regarding the use of the voxelcube in the context of combined Polyeder/Voxelcube - modeling. In the following INSET we explain the resulting possibilities for a correct 3D modeling.

> **INSET VOXELISATION**
>
> The **Voxelisation** is an important part of modeling with **IGMAS+** and is quite different from other software packages \> for modeling potential fields. For example, it is possible to realize very elegantly 3D density changes with depth (for example by compaction). The V**oxelization** function allows the user to take over a seismic velocity cube 1:1, whose velocities (Vp) in densities are performed by means of self-created or predefined functions in the software.
>
> We start with a **textbook example** which was elaborated by Sabine Schmidt (February 15, 2023):
>
> ![](../media/b09fd7fb2ed944e703f5ac49e06846de.png)
>
> On the right side of the above figure, a density distribution is given in t/m3 (2.6 - 2.4 - 2.8). This corresponds to reality (blue, Real world). The middle figure shows the modeling conducted for this purpose (yellow, Model: Polyeder). We recognize that the density distribution with 2.9 was modeled at a lower depth - thus outlining a deviation from reality. This deviation can be corrected by blending a voxelcube model with the polyhedron model. This could have been determined from independent measurements and contains the densities 2.4 - 2.6 - 2.4 -2.8).
>
> **IGMAS+** allows the user to blend the voxelcube and polyhedron model with a special input function. The voxel function is called:
>
> \*\*\* "cellvalue - density" \*\*\*

> and corresponds to the import of a voxelcube with density differences, which, however, are determined by the software \> independently of the user.
>
> ![](../media/816bac572b725657fe6af3900a28b0e0.png)
>
> In the voxelcube domain, the "effective" densities are then obtained from the superposition of the polyhedron and voxelcube models: the left side shows the difference formation, the right side the superposition of both for the two models.
>
> The superimposed density model has the same effect as the "real world" density model. We call this "hybrid modeling" and take advantage of the fact that the total density of all masses corresponds to the superposition principle. By dimensioning the voxel size, extremely fine tuning can be achieved within the 3D density model. The computation of millions of voxels is possible without lasting disturbance of the interactive processing or very long computation time.

Let's move back to the description of the voxelcube input (voxelization window).

**The window for Model Voxelisation**

![](../media/a9194ee20d6e76c8b43e6374c89cfae3.png)

For all geological bodies, special procedures for the use of the voxel cube can be defined here. Of course, this is only the case where the voxelcube covers the polyhedra. If this is the case, minus density can be entered directly after "**cellvalue**"; cellvalue contains the density element of the voxelcube element:

![](../media/b977eff9b344fcbe63b50b2b6647ae7b.png)

When entering a function, the user is supported by operators, mathematical functions, and the definition of constants.

![](../media/New-29.png)

It is also possible to use pre-defined functions (to convert velocities into densities such as the **Gardener and/or Nafe & Drake - relations** . These are provided for dimensioning the model in "meters/second" or "kilometers/seconds" and are used for the conversion of seismic velocity models into density models. Click the three small dots.

![](../media/New-30.png)

It is also possible to formulate your own conversions and calculations using the instructions provided.

In the lower part of the voxelization window there are still three input possibilities to be explained:

(1) **Equation Settings**, (2) **Unit** and (3) ![](../media/f83a7fb56d4ebdcc52e67b0d625503f6.png)

![](../media/fff182a3fb7858e24930ce3331ec4427.png)

(1) **Equation Settings** allows the definition of a voxel function for

**A L L** geological bodies in the model. This is only useful if the voxelcube really covers all bodies.

(2) **Unit**: Here the units for the voxelcube densities are defined. Attention: the definition must not be forgotten, otherwise the model gravity field will not be calculated correctly.

(3) ![](../media/6dd411bb75fe8720cbcb8dc4f0240a13.png) Here all those bodies can be hidden altogether (or switched on again), which are not covered by the voxelcube.

When all is defined**,** click **FINISH**

Modification of voxel cube functions
------------------------------------

Regardless of the equation specified when importing the voxel (refer to the explanations before), the original cellvalue is always saved and can be changed manually for each body independently later.

Select in **Interfaces** of the **OBJECT TREE** the body whose the cellvalue function should be changed (29\_Mantle in the example) and click:

![](../media/New-31.png)

In the **PROPERTY EDITOR** body 29 is displayed with the

> *Body name*
>
> *Voxel equation:* cellvalue-density.
> If the user will change this function, click on the three small dots and an other window for the new input will be opened. If you like, change cellvalue by the definition as before.

Export a voxel cube
-------------------

Select **File** in the "**TITLE BAR**" \> **click Export** \> select **VoxelCube** \> click with **left mouse button** on it.

![](../media/2c4f9ebd93a9d61714da074fa08d2de2.png)

In the **Save** window select the folder where the voxel cube will be stored under the user specified file name. **Press** "save" .

![](../media/New-32.png)

Delete a voxel cube
-------------------

If you want to delete a voxel cube or replace it with a new (updated) one, **click** with the **right mouse button** on the letters of "VoxelCube" in the "**OBJECT TREE**": the "Remove" window opens. **Click** with the **left mouse button** in the window and the voxel cube will be deleted from the model visualization (Screen).

> ![](../media/New-33.png)
>
> ![](../media/4cee53174bf45847094a267c366ab816.png) **Important:**
>
> However, the gravity effect of the voxel cube is not yet eliminated from the overall gravity field of the model. The next section explains how to delete the gravity effect of the voxel cube from the modeled gravity field. See the section "**Use/invert Cube anomaly**" at the end.

Voxel cube effects and their visualization
------------------------------------------

Information about the voxel cube can be obtained by clicking on "*VoxelCube*" in the **"OBJECT TREE"** and then activating the **PROPERTY EDITOR** (window at the bottom left). Click on VoxelCube then you see this screen:

![](../media/5226342b97e2ee188a88effc590bf273.png)

The window shows the name of the used voxel field (in light grey). The "*Transparency*" slider controls the transparency of the voxel cube in the "**WORKSPACE WINDOW**".

-   "*Cube Type*" indicates either a density or susceptibility voxel cube.

-   "*Algorithm*" provides information on the calculation of voxel cube effects. In the example above a Newton Fast Fourier (Newton FFT) method is set calculating on multi cores. This is a fast and normal procedure. More information/other methos are available if you press the three small dots right of "*Algorithm*". The "*Voxel algorithm Wizard*" opens:

![](../media/38d485d81e7e71f361d87b864e0eb736.png)

![](../media/aad2d5ee599305fe725b17980ae6260f.png)

We read that a CPU multicore implementation is active and the (gravity) effects of mass points are calculated in the wave number domain (FFT).

> ![](../media/4cee53174bf45847094a267c366ab816.png) Again, this is a fast method to calculate the gravity effects. Other methos are also available after clicking the pull-down menu "*Algorithm*":
>
> -   Newton mass points calculation by OpenCL or
> -   Prism calculation (both multicore and OpenCL) or
> -   Gauss Quadrature (both multicore and OpenCL) even
> -   Spherical Newton mass point calculations are available if calculations are spherically done.

One can also **extend the FFT grid**.

If you click in the "Voxel algorithm Wizard" on the item "*Interpolation Type*" (Refer to the last image, left side) the types of interpolation are listed. An interpolation is necessary to transfer the calculated values at the FFT nodes to the measuring stations.

There are three methods to choose from:

-   Kernel (3x3) Mundry interpolation,
-   Nearest neighbor and
-   Kernel (3x3) average interpolation.

![](../media/4cee53174bf45847094a267c366ab816.png) Kernel (3x3) Mundry interpolation is robust and reliable.

> ![](../media/New-34.png)

If stations are located in a constant height, click on "Use Constant Station Elevation".

Click "Finish"

Activate "**VoxelCube**" and go to the "**PROPERTY EDITOR**"

> ![](../media/New-35.png)

The item "**Use/invert Cube anomaly**" in the **PROPERTY EDITOR** plays an important role. If it is "true":

![](../media/a28ba9a0eeac28f1b77c1ee5f2e77cbb.png)

the gravity effects of the voxel cube **and** the polyhedrons are calculated at all stations; if it is "false":

![](../media/fc813aa36c9b6ad67afa052a4b3570fa.png)

And the gravity of the polyhedrons will be calculated **without** the effect of the voxel file.

Model Geometry
==============

This chapter describes how to modify the model geometry in **IGMAS+**. The model geometry can be modified in two ways:

-   [**Manually**](#manual-model-geometry-changes): by changing vertices and bodies in working sections, described in this chapter.
-   [**Automatically**](#automated-model-geometry-changes): by using the geometry optimization tools in **IGMAS+**:
    -   [Interface geometry optimization](./inversion.md#interface-geometry-optimization)
    -   [Spring-based geometry optimization](./inversion.md#geometry-optimization-based-on-spring-based-space-warping)

Manual model geometry changes
-----------------------------

If changes to the geometry of the model become necessary, the user can make model adjustments manually by changing model vertices on the working sections and/or modifying the geometry of the bodies.

### Changing model vertices

The actions **Insert - Delete - Move vertices** are described here.

**Insert a vertex:**

Press key I-key ![](../media/d9174235a3900e6b899f6bf7cb73b5eb.png) and navigate with **left mouse button** on the position of an interface/horizon \> **click**.

**Delete a vertex**

Press shift key ![](../media/d9174235a3900e6b899f6bf7cb73b5eb.png) and navigate with **left mouse button** on the vertex \> **click**

Be sure to see the coordinates of the vertex to delete on the screen:

![](../media/New-19.png)

**Shift a vertex:**

Press shift-key ![](../media/b0e05ac8537b9e8470e771a49f20a210.png) and navigate with **left mouse button** on the vertex to be shifted \> **click**

![](../media/d51faddcf79532c703903850bda51d59.png)

**Shift grouped vertices**:

Press shift-key ![](../media/d24be6651bcf0262770e57aa2ebd792a.png) together with the key ![](../media/b1b41f3a859ab8f204b0b59a54f63b48.png). Then define region of vertices to be shifted by open a window with **left mouse button** and move pressed **left mouse button** into the new position

![](../media/27f1fead106f7eb8af78670246a550e9.png)

Release the **left mouse button**. This is the result:

![](../media/a355e6870e5be142cb6ca81dd866323d.png)

The model gravity field is automatically recalculated.

### Split a body/polyhedron on a specific vertical cross section

Select "**2D maps view**" ![](../media/New-20.png) and mark in the map the cross section on which the density of the body should change (in ascending section number order). Here section 10 was selected; it is marked in red.

Alternatively, the vertical section can also be selected (1) in the **OBJECT TREE** or (2) by the "section up & down":

![](../media/68c58d4f21c02d71bd950abb854a67bd.png)

![](../media/4aad6cf9d8f7bf0ba9c28165a08fe1b8.png)

**Click** on the body to be divided (e.g. astenosphere) with the **right mouse button** and select "**divide body**".

![](../media/New-21.png)

The "**divide body assistant**" appears with the new name "Astenosphere new".

**Click "finish"**

![](../media/457a7e12967d67c77bbc9b7966d1509c.png)
![](../media/d75b0fc291e0c90b28510cf8b8505745.png)

In the **PROPERTY EDITOR** (lower left window) the list of updated bodies with their properties appears (here "volume" and "density" are selected).

> **![](../media/59e72cb2373a262d458207a93223c7ce.png) Note these important points:**
>
> **(1)** The newly inserted body (Astenosphere new) **still has the same density as the old one**. The color has been selected by the program and can be changed by the user (see section "Colors").
> **(2)** Check the topology of the "new model". Select Tools in the **TITLE BAR** and select "**Check Topology**":

![](../media/New-22.png)

If now "error" is detected (normal case) continue with the next step. You may notice that the **PROGRESS BAR** (traffic light) indicates **red light**:

![](../media/New-23.png)

**Explanation:**

The model has been changed and both triangulation and modeled gravity are no longer correct. Start with:

**(3) "Model -- Triangulation"** to the new model. Select **Edit** in the **TITLE BAR** and select "**Model-triangulation**":

**![](../media/New-24.png)**

**Alternatively**, the ![](../media/53124753db639be4dad16eb587d34839.png) icon can be used for model triangulation. Go to the **TOOL** **BAR** line and select ![](../media/53124753db639be4dad16eb587d34839.png).

**(4) Re-calculate the gravity** of the "new model". Select **Tools** in the **TITLE BAR** and select "Re-calculate Anomaly":

![](../media/New-25.png)

**...** and the **PROGRESS BAR** (traffic light) indicates **green light.**

**![](../media/New-26.png)**

**If necessary, change density** of the new body by "**double click**" on the density value and insert a new value:
PROPERTY EDITOR\*\*

**\>** **Body manager** **\> double click**" on the density of the new body.

Automated model geometry changes
--------------------------------

Apart from the [manual geometry modifications](#manual-model-geometry-changes) it is possible to use the automated geometry modifications through geometry optimization.

Geometry optimization 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).

In **IGMAS+** there are two types of automated geometry optimization:

-   Spring-based geometry optimization, or space warping (read more in [this post](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/post/alvers-goetze-et-al-2023/) and see [Alvers at al. (2023)](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/publication/alvers-goetze-et-al-2023/))
-   Interface geometry optimization (read more in [this release post](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/post/release_1-4-8840/))

Both methods are described in [Inversion worklows](inversion.md).

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](./properties.md#density-inversion).

Geometry [optimization](../glossary.md#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](https://en.wikipedia.org/wiki/CMA-ES) ([Hansen, 2016](https://arxiv.org/abs/1604.00772); [Weng, 2019](https://lilianweng.github.io/posts/2019-09-05-evolution-strategies)) 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)](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/publication/alvers-goetze-et-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.

<!-- ???+ warning
    As functionality of working sections is destroyed during the space warping, it is recommended to remove all sections before starting the optimization process. However, sections can still be used for interactive visualization purpose. Fully functional working sections can be added again after the optimization process. -->
### Setup lattice

-   Create a lattice using icon ![add lattice](../media/add_grid_icon.png)
    You will be asked to define the area for the lattice:

<a name="figure-lattice_define_area">
*![Define lattice area](../media/lattice_define_area.png)*

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 ![add lattice nodes](../media/add_grid_node.png) you can add more lattice nodes, i.e. make the lattice finer
-   Similarly, with icon ![remove lattice nodes](../media/remove_grid_node.png) you can remove lattice nodes, i.e. make the lattice coarser
-   In case of mistakes, you can completely remove the lattice using icon ![remove lattice](../media/remove_grid_icon.png)

There are two lattice transformation modes controlled by swapping icons ![mode matrix](../media/mode_tri.png) and ![mode trilinear](../media/mode_matrix.png):

-   ![mode matrix](../media/mode_tri.png) means that the [matrix transformation mode](#matrix-transformation-mode) is selected (default)
-   ![mode trilinear](../media/mode_matrix.png) means that the [trilinear transformation mode](#trilinear-transformation-mode) is selected

#### Matrix transformation mode

In the matrix transformation mode you can adjust the lattice coarseness with ![add lattice nodes](../media/add_grid_node.png) and ![remove lattice nodes](../media/remove_grid_node.png).

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](https://nextcloud.gfz.de/s/SQXyNRt5dctmH9y) 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 ![inversion start](../media/start_icon.png)
    -   Interface inversion settings window will open

    *![Interface inversion settings](interface_inversion_settings.png)*

-   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:

    *![Area settings](interface_inversion_area_settings.png)*

The default area is the area covered by stations.

-   Click ++"Finish"++
    -   Inversion process will start
        -   To stop the inversion process use the stop icon ![inversion stop](../media/stop_icon.png)
    -   Once inversion is done, the stop icon ![inversion stop](../media/stop_icon.png) will change back to the start icon ![inversion start](../media/start_icon.png)

???+ tip
Feel free to use the [simple two-body model](https://nextcloud.gfz.de/s/SQXyNRt5dctmH9y) from our example [in this release post](https://igmas.git-pages.gfz-potsdam.de/igmas-pages/post/release_1-4-8840/) for testing.

Export
======

Saving a project
----------------

> Before we start to explore the model, the fields and their possibilities for representation, we should learn how a model and its fields are stored.
> **This should be done from time to time by the user himself.**

**IGMAS+** offers two types of storage (see below):

-   SAVE PROJECT and
-   SAVE AS ...

(1) The SAVE project action is initiated by a click in the **TOOL BAR \> "SAVE PROJECT"**.

![](../media/aaca98fca89016b70693f31f15f97828.png)

A window will appear warning you not to overwrite the current model version. If this is desired, click ++"Yes"++.

**IGMAS+** will create a new Model INPUT. Loading a model file in the next working phase you see that in the Timeline appears the former model (in green colour) and the new model blue shaded:

![](../media/10f8ad11ae425673a59391d7b12a0066.png)

If you click ***No***, nothing will happen and the model will remain. ***CANCEL*** will terminate the action without any decision.

![](../media/New-3.png)

(2) There is a second possibility to save model changes.

![](../media/New-4.png)

Click on "**File**\* in the **TITLE BAR**

![](../media/d59fbdec93a1fd5e20b0dd70ff412af2.png)

In the pull down menu appears (short key is "Strg+S" bottom).

"Save project" will save the entire model as already described above in (1).

![](../media/24ce31b1c3fa9c12555eb83421b70ad1.png) enables the user to give a new name to the model output.

![](../media/New-6.png)

Click on the "create a new folder symbol" ![](../media/35eeb949b5814e3535470e4699603926.png) , rename the new folder and press **"Save"**.

![](../media/New-5.png)

![](../media/c1eabaa1e354982c875a3fd28a2da77c.png)

The small symbols indicate from left to right:

![](../media/78301de3a9a1395a2b25bc32b04bddfa.png)

From left to right: <br>
Go one level up in the folder hierarchy - Go to home directory - Add a new folder - Show folders - Show folders listed.

Save project
------------

At the end of each working phase, but also frequently during this process, it is advisable to save the model.

(1) This action is initiated by a click in the toolbar "**SAVE PROJECT**".

![](../media/New-46.png)

A window will appear warning you not to overwrite the current model version. If this is desired, click ++"Yes"++.

**IGMAS+** will create a new Model INPUT. Loading a model file in the next working phase you see that in the Timeline appears the former model (in green colour) and the new model blue shaded:

![](../media/10f8ad11ae425673a59391d7b12a0066.png)

If you click ***NO***, nothing will happen and the model will remain. CANCEL will terminate the action without decision.

![](../media/New-3.png)

(2) There is a second possibility to save model changes.

Click on "File" in the **TITLE BAR**

![](../media/New-47.png)

In the pull down menu appears ![](../media/d59fbdec93a1fd5e20b0dd70ff412af2.png) (short key is ++Ctrl++ +++S++ bottom) and ![](../media/24ce31b1c3fa9c12555eb83421b70ad1.png).

-   **"Save project"** will save the entire model as already described above in (1).
-   **"Save as"** enables the user to give a new name to the model output.

**![](../media/0ce09be2a3b1881d356ae4f825219119.png)**

Click on the "create a new folder symbol" ![](../media/35eeb949b5814e3535470e4699603926.png), and ...

![](../media/fed7ca626087fcfe62e57917730316dc.png)
![](../media/c1eabaa1e354982c875a3fd28a2da77c.png)

rename the new folder and press **"save"**.

Export Results and Model components
-----------------------------------

**IGMAS+** does not provide the user with direct tools for printing model components and fields (calculated, measured and residual fields). It is not necessarily the task of an interactive modeling software to offer all possibilities of a modern graphics processing. However, in order to take advantage of this, there are a number of possibilities for the user to further process **IGMAS+** results with this other software.

Clicking FILE in the TITLE BAR select "Export" and get information on the components to export:

![](../media/ac7669cfe63c3fe7b8466d5f8035c172.png)

**IGMAS+** offers seven Export actions:
- (1) Borehole(s),
- (2) Model,
- (3) Stations,
- (4) Interface(s),
- (5) Voxelcube,
- (6) Border-VoxelCube and
- (7) StressMap.

The exports are alpha-numeric and are used for further processing of the model results in external software.

### (1) Borehole(s) (To be done)

### (2) Model

After clicking this wizard appears on the screen.

![](../media/31389fca0ef6b1343c4d5ef3f7009bb9.png)

> **![](../media/9da9cdbe551c3f44c3a4446e06aee078.png) \#\#\# Note:** There is currently only one file type available: XML (Extensible Markup Language).

Click: Save

In the selected folder in your PC folder structure you will find the new file My model.model:

**![](../media/New-48.png)**

The file is opened with an editor and the entire model structure with the **IGMAS+** geometry, the fields and other components can be seen in plain text:

Here we show snippets from the relatively large XML file:

**![](../media/New-49.png)**
**![](../media/New-50.png)**

### **(3) Stations**

In contrast to the model export, we select ***\[csv\] \[xyz\] - Comma Separated Values***, which can be used in many external computer programs for further processing.

![](../media/23bbf63c58de89a03b4091c7a1e9f464.png)![](../media/2fe27d941e3b216644b33403e7525ea4.png)

Make sure that the ***units*** of the station data (here: meters), the ***acceleration/gravity*** (here: mGal), the ***gravity Gradient(s)*** and or the ***magnetic Field*** are specified correctly according to the modelling. In the separator field, **"blank"** (used in the example above) or a tabulator can be used.

Click: Save

... and above the progress bar (bottom right of the screen) you will read the information that the stations were successfully saved:

![](../media/d6900457d11df17034ea577fe283651c.png)

In the selected folder in your PC folder structure you will find the new file

My stations.model:

![](../media/New-51.png)

This file is much smaller than the saved "Model file" and looks like this:

"x" "y" "z" "measured z component" "calculated z component" "residual z component"

![](../media/New-52.png)

When continuing to process the station file externally, you should make sure that the software can process the header in the station file.

![](../media/7e59407370cae2bc496ae08ab94ad043.png)

### (4) Interface(s)

Select in the **TITLE BAR** Export \> Exort \> Interface(s)

![](../media/Interfaces-0.png)

and get the screen:

![](../media/Interfaces.png)

Check "the file"My Interfaces:

![](../media/Out-Interfaces.png)

This ia large file (22 MB); here we prsent a short parge only to get information on its structure.

### (5) Voxelcube

![](../media/Export-Voxelcube.png)

![](../media/out-voxelcube-1.png)

The saved Voxelcube always has the extension **".vxo"**. The file can be renamed without problems and get the extension \".***txt\"*** - then it can be read with any editor.. The file-header and the first lines of the file look like this:

![](../media/out-voxelcube-2.png)

### (6) Border-Voxelcube

*to be added*

### (7) Stress map (to be done)

Examples
========

???+ quote
Example is not the main thing in influencing others. It is the only thing.
― *Albert Schweitzer*

Preface
-------

In the **Examples** chapter, you'll see the power and versatility of **IGMAS+** in real-world scenarios.
We present a collection of exemplary applications showcasing how the software can successfully tackle various challenges.

These practical examples serve as a testament to the capabilities of **IGMAS+**, demonstrating its potential in interactive forward modelling and inversion.

Collection of examples
----------------------

::: {.grid .cards markdown=""}
-   [**:fontawesome-regular-file-lines: Salt Dome: basics**](./Salt_Dome.md)

    ------------------------------------------------------------------------

    [![Salt Dome](salt_dome_model_3D_view.png)](./Salt_Dome.md)

    Basic **IGMAS+** functionality explained on a synthetic but realistic model of a salt dome.

    [:octicons-arrow-right-24: **Discover more**](./Salt_Dome.md)

-   [**:fontawesome-regular-file-lines: Simple Basin: geometry modification**](./Simple_Basin.md)

    ------------------------------------------------------------------------

    [![Simple Basin](simple_basin_result_3D.png)](./Simple_Basin.md)

    A detailed description on how to create a simple synthetic model of a sedimentary basin.

    [:octicons-arrow-right-24: **Discover more**](./Simple_Basin.md)

-   [**:fontawesome-regular-file-lines: Two Layers: interface inversion**](./Two_Layers.md)

    ------------------------------------------------------------------------

    [![Two Layeres](two_layers_final_model_3D_view.png)](./Two_Layers.md)

    An example of application of interface inversion to a simple synthetic model with two layers.

    [:octicons-arrow-right-24: **Discover more**](./Two_Layers.md)

-   [**:fontawesome-regular-file-lines: Simple Salt Dome: geometry optimization**](./Simple_Salt_Dome.md)

    ------------------------------------------------------------------------

    [![Simple Salt Dome](simple_salt_dome_final_model_3D_view.png)](./Simple_Salt_Dome.md)

    An example of application of geometry optimization based on the CMA-ES and virtual elastic springs to a simplified synthetic model of a salt dome.

    [:octicons-arrow-right-24: **Discover more**](./Simple_Salt_Dome.md)

-   [**:fontawesome-regular-file-lines: Molasse Basin: construct with horizons**](./Molasse_Basin.md)

    ------------------------------------------------------------------------

    [![Molasse Basin](molasse_basin_major_horizons.png)](./Molasse_Basin.md)

    An example on how to construct a realistic model of the European Molasse Basin based on the available structural data using horizon import.

    [:octicons-arrow-right-24: **Discover more**](./Molasse_Basin.md)

-   [**:fontawesome-regular-file-lines: Eifel Volcanic Area: construct with sections**](./Eifel_Volcanic_Area.md)

    ------------------------------------------------------------------------

    [![Eifel Volcanic Area](eva_3d_view_sections.png)](./Eifel_Volcanic_Area.md)

    An example on how to construct a realistic detailed model of the Eifel Volcanic Area using working sections and constraining data.

    [:octicons-arrow-right-24: **Discover more**](./Eifel_Volcanic_Area.md)
:::

Salt Dome
=========

This example is devoted to demonstration of basic **IGMAS+** functionality on a synthetic model of a [salt dome](../glossary.md#salt-dome).

Description
-----------

### Model

The model contains seven units, names and densities are given in the [Table below](#table-salt_dome_units).

<a name="table-salt_dome_units"></a>

  Name         Density
  ------------ --------------
  Tertiary     2.17 t/m$^3$
  Cretacious   2.27 t/m$^3$
  Jurassic     2.37 t/m$^3$
  Triassic     2.47 t/m$^3$
  Caprock      2.87 t/m$^3$
  Zechstein    2.07 t/m$^3$
  Permian      2.57 t/m$^3$

The Zechstein unit forms a salt dome starting at a depth of around 6 km and going up to around 2 km in the center of the model domain (see [Figure below](#figure-salt_dome_model_2D_view)).

<a name="figure-salt_dome_model_2D_view"></a>
<figure>
![Vertical cross-section through the salt dome model.](salt_dome_model_2D_view.png){width="500"}
<figcaption>
Vertical cross-section through the salt dome model.
</figcaption>
</figure>
There is a horizontal extension of the bodies of 500 km in each side beyond the station boundaries (20 $\times$ 12 km).

The reference density is 2.32 t/m$^3$.

<a name="figure-salt_dome_model_3D_view"></a>
<figure>
![3D View of the salt dome model.](salt_dome_model_3D_view.png){width="500"}
<figcaption>
3D View of the salt dome model.
</figcaption>
</figure>
### Input data

The described model was used to create a gravity dataset calculated for a set of 273 stations regularly placed on the plane at a zero depth level (see [Figure below](#figure-salt_dome_measured_gravity)).

<a name="figure-salt_dome_measured_gravity"></a>
<figure>
![Bouguer anomaly modelled above a salt dome model measured with a regularly spaced set of stations placed at a zero depth level.](salt_dome_measured_gravity.png){width="500"}
<figcaption>
Bouguer anomaly modelled above a salt dome model measured with a regularly spaced set of stations placed at a zero depth level.
</figcaption>
</figure>
Stations cover the area 20 $\times$ 12 km.

### Download

The input data related to this example are available for download [here](https://nextcloud.gfz.de/s/NdFrKLBdjtR359P).

The share contains several files:

-   `Salt_Dome_Measured_Gravity.csv`: the [input measured gravity data](#input-data) in CSV format
-   `Salt_Dome.zip`: the **IGMAS+** model
-   `Salt_Dome.vxo`: the voxel cube with densities obtained by voxelization of the model
-   `Salt_Dome_Seismic_Image.jpg`: an example of a seismic section image in JPG format.

The input gravity data file `Salt_Dome_Measured_Gravity.csv` is in CSV format and has 4 data columns: `"x" "y" "z" "measured z component"` and 6561 data rows corresponding to stations.
The values in columns are delimited with space.

The model is a zip archive with the **IGMAS+** project. Simply unpack and [load the project](../user_interface/menu.md#project-related-menu-entries) in **IGMAS+**.

The project is also distributed together with **IGMAS+** under name `project_salt`.
You can open it if you navigate to the folder with **IGMAS+** installation, e.g. `C:\Users\user\IGMAS+\bin\`.
There, open folder `example\` and open project `project_salt` (see [Figure below](#figure-salt_dome_open_project)).

<a name="figure-salt_dome_open_project"></a>
<figure>
![Find the Salt Dome example project inside the IGMAS+ installation folder.](salt_dome_open_project.png){width="500"}
<figcaption>
Find the Salt Dome example project inside the IGMAS+ installation folder.
</figcaption>
</figure>
Simple Basin
============

This example contains a detailed description on how to create a simple model of a sedimentary basin based on synthetically generated gravity anomaly data using interactive geometry modification in **IGMAS+**.

Description
-----------

### Input data

To create the input gravity dataset we used a simple model of a sedimentary basin with densities of 2300 kg/m$^3$ for the sediments and 2700 kg/m$^3$ for the basement.
A set of 1938 gravimeters are placed on a flat Earth's surface above the sedimentary basin.

The [Figure](#figure-simple_basin_measured_gravity) below shows the measured gravity ([Bouguer anomaly](../glossary.md#bouguer-anomaly) with values in the range from approximately -33 to 0 mGal:

<a name="figure-simple_basin_measured_gravity"></a>
<figure>
![A simulation of Bouguer anomaly above a sedimentary basin measured with a regularly spaced set of stations on a flat Earth's surface.](simple_basin_measured_gravity.png){width="500"}
<figcaption>
A simulation of a typical Bouguer anomaly above a sedimentary basin measured with a regularly spaced set of stations on a flat Earth's surface.
</figcaption>
</figure>
### Download

The input data required for this example as well as the resulting two models are available for download [here](https://nextcloud.gfz.de/s/yNLAGz3pSDtnWPB).

The share contains 3 files:

-   `Simple_Basin_Measured_Gravity.csv`: the input gravity data in CSV format
-   `Simple_Basin_2D.zip`: the resulting 2D IGMAS+ model together with intermediate timeline steps (for comparison)
-   `Simple_Basin_3D.zip`: the resulting 3D IGMAS+ model together with intermediate timeline steps (for comparison)

The input gravity data file `Simple_Basin_Measured_Gravity.csv` is in CSV format and has 4 data columns: `"x" "y" "z" "calculated z component"` and 1938 data rows corresponding to stations.
The values in columns are delimited with space.

The two models are zip archives with **IGMAS+** projects. Simply unpack and [load projects](../user_interface/menu.md#project-related-menu-entries) in **IGMAS+**.

Modelling
---------

!!! abstract "Goal"
The goal of this modelling example is to determine the depth and extent of sedimentary basin based on the input gravity data and known densities.

The modelling is carried out in three steps:

1.  [1D interpretation](#1d-interpretation): Perform a quick initial estimate of the maximal depth of the sediments using the simple Bouguer Plate.
2.  [2D interpretation](#2d-interpretation): Build a 2D model through the gravity minimum. Use a single section with mirrors, its direction should be West-East, which is perpendicular to the North-South striking of the anomaly. Use **IGMAS+** for this task.
3.  [3D interpretation](#3d-interpretation): Extend the 2D model in **IGMAS+** to a 3D model by adding more sections north and south of the 2D model. Do not use more than 5 sections in total.

### 1D interpretation

We start with a quick initial estimate of the maximum sediments depth using a simple Bouguer Plate approach.

The formula for [Bouguer Plate correction](../glossary.md#bouguer-correction),

$$\delta g_{max} = 2\pi G \Delta\rho h_{max},$$

reformulated for $h_{max}$ reads

$$h_{max} = \frac{\delta g_{max}}{2\pi G \Delta\rho},$$

where:

-   $\delta g_{max}$ is the maximum absolute gravity anomaly value
-   $\Delta\rho$ is the density difference between the basement and the sediments
-   $G$ is the [gravitational constant](../glossary.md#gravitational-constant).

!!! question
What is the approximate maximum sediment thickness based on the quick 1D estimate?

??? tip
Using the maximum absolute gravity anomaly of 33 mGal and density difference of 400 kg/m$^3$, this estimation results in a maximum sediment thickness of approximately 2 km.
Here is how it can be calculated:

    $h_{max} \approx \frac{33~mGal}{4.19358\times10^{−5}~mGal~m^2~kg^{−1}\cdot400~kg~m^{-3}} \approx 1967~m \approx 2~km$

??? success "Answer"
Based on the 1D theoretical estimate, the sediment thickness is approximately 2 km.

### 2D interpretation

Here we build a 2D model through the gravity minimum. We use a single West-East oriented section, perpendicular to the North-South strike of the anomaly.

#### 1. Import the measured anomaly

-   Start **IGMAS+**
-   Open the import dialogue: ++"File"++ --\> ++"Import"++ --\> ++"Stations"++
-   Select the measured anomaly file `Simple_Basin_Measured_Gravity.csv`
-   Specify the unit of the coordinates: "km"
-   Program will automatically generate a model domain with 8 km depth for the area covered by stations (see [Figure](#figure-simple_basin_loaded_gravity) below), but without any working sections.

<a name="figure-simple_basin_loaded_gravity"></a>
<figure>
![A 3D view of the model in IGMAS+ created after loading of the measured gravity.](simple_basin_loaded_gravity.png){width="500"}
<figcaption>
A 3D view of the model in IGMAS+ created after loading of the measured gravity.
</figcaption>
</figure>
#### 2. Add a working section

Add a single working section along $y$=10 km (West-East):

-   Open sectioning dialogue: ++"Edit"++ --\> ++"Add Sections"++
-   Adjust the ++"Count"++ of sections to 1
-   Press ++"Preview"++
-   Click ++"right mouse button"++ on the South West node (bottom-left white dot) of the section area rectangle (see [Figure](#figure-simple_basin_add_section) below)
-   Leave -3 in field X, change field Y value to 10 and click ++"OK"++
-   Click ++"Finish"++

<a name="figure-simple_basin_add_section"></a>
<figure>
![Adding a single West-East oriented section in IGMAS+](simple_basin_add_section.png){width="500"}
<figcaption>
Adding a single West-East oriented section in IGMAS+
</figcaption>
</figure>
#### 3. Mirror the section

Now add mirrors to the working section:

-   Select the section in the [**Object Tree**](../user_interface/object_tree.md) and add 100 (km) to "mirror+" and "mirror-" in the **Section Mirror** dropdown:

    ![Simple Basin: adding mirrors](simple_basin_add_mirrors.png)

-   This creates a pseudo-3D model extending 100 km on either side of the profile.
-   Now triangulate the model using ++"Edit"++ --\> ++"Model Triangulation"++.
-   Click ![Clip to Model Bounds](icon_cliptomodel.png) to clip to model bounds and view the entire model:

<a name="figure-simple_basin_pseudo_3D_model"></a>
<figure>
![A pseudo-3D model created using section mirrors.](simple_basin_pseudo_3D_model.png){width="500"}
<figcaption>
A pseudo-3D model created using section mirrors.
</figcaption>
</figure>
#### 4. Assign densities

Now create bodies for the sediments and the basement and assign the densities:

-   In the [**Body Manager Tab**](../user_interface/body_manager.md) use ++"Add Parameter"++ and select "Density"
-   Rename the "new\_body" body to "Basement" (double click the name to rename it)
-   Add a body with name "Sediments" using ++"Add Body"++
-   Assign a density of 2.7 t/m$^3$ to the "Basement" and 2.3 t/m$^3$ to the "Sediments"
-   Assign the "reference" body with the density of 2.7 t/m$^3$ to avoid any edge effect

    ![Create bodies and assign densities](simple_basin_assign_densities.png){width="500"}

#### 5. Define the "Sediments" body and adjust its geometry

There is still just one body ("Basement"), no "Sediments" body in the triangulated geometry.

-   Add the 2D view with ![2D view](icon_2d.png) or ++"Add View"++ --\> ++"2D View"++
-   You must now cut off the upper part of the model block to build the "Sediments" body. There are several possibilities. The simplest is to insert 2 vertices on the surface to the left and right of the centre (A and B) and then move the central vertex upwards:

    ![Add vertices in 2D view](simple_basin_add_vertices.png){width="500"}

    -   To insert a vertex, hold ++i++ and click ++"left mouse button"++ on the border of a polygon. A new vertex will appear in this position.
    -   To shift a vertex, hold ++shift++ and drag the desired vertex with ++"left mouse button"++

-   Now divide the polygon between the new vertices A and B by holding ++d++ and dragging the ++"left mouse button"++:

    ![Set body in 2D view](simple_basin_set_body.png){width="500"}

-   Double ++"left mouse button"++ click on the upper part, use ++"right mouse button"++ and select ++"Set Body"++ --\> "Sediments"
-   New triangulation is necessary after this step: ++"Edit"++ --\> ++"Model Triangulation"++
-   Now insert some points along the interface between "Sediments" and "Basement": hold ++i++ and click ++"left mouse button"++:

    ![Add vertices on the border between the bodies](simple_basin_add_border_vertices.png){width="500"}

-   Move the new vertices to form a basin structure: hold ++shift++ and drag the desired vertex with ++"left mouse button"++:

    ![Adjust vertices](simple_basin_adjust_vertices.png){width="500"}

-   Delete or shift down the central uppermost vertex. To delete, hold ++i++ and click ++"left mouse button"++ on the undesired vertex
-   Again, new triangulation is necessary: ++"Edit"++ --\> ++"Model Triangulation"++
-   Now there are both "Basement" and "Sediments" bodies in the triangulated geometry and both have assigned densities.

#### 6. Fit the anomaly

Now calculate the anomaly of the model using ![Calculate anomaly](icon_calculate.png) or ++"Tools"++ --\> ++"Calculate Anomalies"++.

-   To fit the calculated anomaly to the measured better, adjust the positions and/or add/remove the subsurface vertices
-   A constant shift may remain due to additional stations in the file:

<a name="figure-simple_basin_auto_shift_on"></a>
<figure>
![Constant shift between the calculated and measured anomaly](simple_basin_auto_shift_on.png){width="700"}
<figcaption>
Constant shift between the calculated and measured anomaly
</figcaption>
</figure>
You can switch off Auto Shift (see [Figure](#figure-simple_basin_fit_anomaly_2D) below):

-   Select "Gravity: z-component" under "Model" --\> "Fields" in the **Object Tree**.
-   Open [**Property Editor Tab**](../user_interface/property_editor.md)
-   Uncheck "Auto Shift" checkbox

<a name="figure-simple_basin_fit_anomaly_2D"></a>
<figure>
![Adjusting the geometry of the "Sediments" body to fit the measurements](simple_basin_fit_anomaly_2D.png){width="700"}
<figcaption>
Adjusting the geometry of the "Sediments" body to fit the measurements
</figcaption>
</figure>
!!! question
What is the approximate maximum sediment thickness based on the anomaly fit in 2D?

??? success "Answer"
Based on the anomaly fit in 2D, the sediment thickness is approximately 2.9 km.

### 3D interpretation

Here we extend the 2D model to a 3D model by adding more sections north and south of the 2D model. We use not more than 5 sections in total:

-   Save a copy of the 2D model: ++"Files"++ --\> ++"Save as..."++
    -   Create an empty folder and select it
    -   Click ++"Save"++: your 2D model has been saved and now you can use the current project to create the 3D model
-   Add more sections:
    -   Open the sectioning dialogue with ++"Edit"++ --\> ++"Add Sections"++
    -   Change the area to be sectionized by changing the position of the points (marked red in the Figure below) using ++"right mouse button"++:

        ![Add more sections](simple_basin_add_more_sections.png){width="300"}

        -   Enter X = -3 and Y = 0 for the lower point
        -   Enter X = -3 and Y = 20 for the upper point
        -   Use 5 for the "Spacing" between the sections
        -   Click ++"Preview"++ and then ++"Finish"++.

!!! tip
!["Copy and Shift" option for working section](simple_basin_copy_and_shift.png){width="200", align=right}
Instead of using the function ++"Edit"++ --\> ++"Add Sections"++ you can use the function "Copy and Shift" four times using the shift 10, 5, -5, and -10 km to copy the central section.

-   Remove mirrors from the first section (this is the central section number 0 at $y$=10) by setting them to 0.
-   Perform new triangulation: ++"Edit"++ --\> ++"Model Triangulation"++
-   Use ![Re-calculate anomaly](icon_recalculate.png) or ++"Tools"++ --\> ++"Re-Calculate Anomalies"++ to recalculate the anomalies.

-   Open 2D View and step through the model -- all sections are identical and they should be modified to mitigate the discrepancy between the measured and the calculated anomalies.
-   The goal is to get the residual field as low as possible (see [Figure](#figure-simple_basin_residual_3D) below). In this case residuals are below 3.4 mGal in absolute value.

<a name="figure-simple_basin_residual_3D"></a>
<figure>
![Residual between the measured and calculated anomalies for the final 3D model](simple_basin_residual_3D.png){width="700"}
<figcaption>
Residual between the measured and calculated anomalies for the final 3D model
</figcaption>
</figure>
-   After the adjustments one can estimate the maximum depth of the sediments using the 2D view:

<a name="figure-simple_basin_fit_anomaly_3D"></a>
<figure>
![Section with the largest sediment thickness for the 3D model and the corresponding anomaly fit](simple_basin_fit_anomaly_3D.png){width="500"}
<figcaption>
Section with the largest sediment thickness for the 3D model and the corresponding anomaly fit
</figcaption>
</figure>
-   The final resulting sedimentary basin can be seen from the 3D view:

<a name="figure-simple_basin_result_3D"></a>
<figure>
![The resulting shape of the sedimentary basin derived with the 3D gravity modelling](simple_basin_result_3D.png){width="500"}
<figcaption>
The resulting shape of the sedimentary basin derived with the 3D gravity modelling
</figcaption>
</figure>
!!! question
What is the approximate maximum sediment thickness based on the anomaly fit in 3D?

??? success "Answer"
Based on the anomaly fit in 3D, the sediment thickness is approximately 3.3 km.

!!! question
What is the maximum extent of the sedimentary basin in North-South and East-West directions?

??? success "Answer"
Based on the maximum extent of the sedimentary basin in North-South direction is about 20 km and in the East-West directions it is about 13 km.

Two Layers
==========

This example is devoted to demonstration of [interface geometry optimization](../workflows/inversion.md#interface-geometry-optimization) (interface inversion) applied to a simple synthetic model consisting of two layers.

Description
-----------

### Original model

The original (or true) model contains two bodies (layers) of identical sizes: an upper body with zero density (an air layer) and a lower body (a subsurface layer) with density of 200 kg/m$^3$, separated by a horizontal plane at a depth of 5 km (see [Figure below](#figure-two_layers_original_model)).

<a name="figure-two_layers_original_model"></a>
*![Vertical cross-section through an original model with two horizontal layers: upper (green) with zero density and lower (gray) with a density of 0.2 t/m³.](two_layers_original_model.png)*

Both bodies are 20 $\times$ 20 km horizontally and 5 km thick.

### Input data

The [original model](#original-model) was used to create a gravity dataset calculated for a set of 6561 stations regularly placed on the plane at a zero depth level (see [Figure below](#figure-two_layers_measured_gravity)).

<a name="figure-two_layers_measured_gravity"></a>
<figure>
![Bouguer anomaly modelled above a simple two-layer model measured with a regularly spaced set of stations placed at a zero depth level.](two_layers_measured_gravity.png){width="500"}
<figcaption>
Bouguer anomaly modelled above a simple two-layer model measured with a regularly spaced set of stations placed at a zero depth level.
</figcaption>
</figure>
Stations cover the area 40 $\times$ 40 km, exceeding the model edges by 10 km in each direction.
For simplicity, there is no extension of the bodies beyond the model boundaries, and the edge effect is clearly visible in the dataset.

The described dataset was used as an input measured gravity data for inversion.

### Starting model

In order to have a starting model which would differ from the original model, additional vertices have been added on the boundary between the two bodies and then manually moved up or down (see [Figure below](#figure-two_layers_starting_model_2D_view)).

<a name="figure-two_layers_starting_model_2D_view"></a>
*![Vertical cross-section through a starting model with a distorted boundary between the two layers and a misfit between the measured and calculated gravity.](two_layers_starting_model_2D_view.png)*

From a 3D view of the starting model one can see that the boundary is modified at each of the 5 working sections (see [Figure below](#figure-two_layers_starting_model_3D_view)).

<a name="figure-two_layers_starting_model_3D_view"></a>
*![The 3D view of the starting model showing modified boundary at 5 working sections. The measured gravity is shown on the top.](two_layers_starting_model_3D_view.png)*

### Download

The input data required for this example as well as the two models are available for download [here](https://nextcloud.gfz.de/s/M5y3aH2gGxGqRXd).

The share contains 3 files:

-   `Two_Layers_Measured_Gravity.csv`: the [input measured gravity data](#input-data) in CSV format
-   `Two_Layers_Original.zip`: the [original](#original-model) **IGMAS+** model of two layers separated with a horizontal plane used to calculate the input gravity data
-   `Two_Layers_Inversion.zip`: the **IGMAS+** model used for inversion consisting of two timeline steps:
    -   [starting model](#starting-model): a model where the boundary between the two layers was distorted
    -   [final model](#final-model) - a model after application of the interface inversion to the starting model

The input gravity data file `Two_Layers_Measured_Gravity.csv` is in CSV format and has 4 data columns: `"x" "y" "z" "measured z component"` and 6561 data rows corresponding to stations.
The values in columns are delimited with space.

The two models are zip archives with **IGMAS+** projects. Simply unpack and [load projects](../user_interface/menu.md#project-related-menu-entries) in **IGMAS+**.

Modelling
---------

!!! abstract "Goal"
The goal of this modelling example is to apply interface geometry optimization to the starting model in order to demonstrate how it can be iteratively inverted to a final model close to the true one based on the input gravity data, assuming that densities are known.

The interface geometry optimization functionality is provided by the **Interface Inversion** plugin. With this plugin it is possible to iteratively optimize the geometry of an interface using the misfit between the measured and calculated (at each iteration) field.

### Open the starting model

-   Start **IGMAS+**

<br>
![Select the earliest timeline in the project.](two_layers_open_project.png){ width="300", align=right }
- Select ++"File"++ --\> ++"Open Project"++
- Select the folder `Two_Layers_Inversion`
- In the Timeline window select the earliest timeline - this is the starting model (see Figure on the right)

<br>
![The starting model opened in the 3D view with no stations.](two_layers_opened_starting_model_3D_view.png){ width="300", align=right }
- The starting model will open in the 3D view
- However, there are no stations - for that you need to [load the input gravity data](#load-input-gravity-data).

### Load input gravity data

![Change the file type to see the CSV file with input gravity data.](two_layers_import_stations_change_file_type.png){ width="300", align=right }
- Select ++"File"++ --\> ++"Import"++ --\> ++"Stations"++
- Navigate to the folder with `Two_Layers_Measured_Gravity.csv` file
- Change the file type to `[csv|xyz] - Comma Separated Values` to see the file

<br><br><br>
![The CSV file with input gravity data is visible and can be opened now.](two_layers_import_stations_open_file.png){ width="300", align=right }
- Now you can see the files with `.csv` and `.xyz` extensions
- Click on the `Two_Layers_Measured_Gravity.csv` file
- Information on the units that will be used for input is visible on the right
- Click ++"Open"++

<br>
![Preview of the imported station data.](two_layers_import_stations_data_preview.png){ width="300", align=right }
- The preview window will show the data from the file distributed in columns
- Click ++"Finish"++

<br><br><br><br><br><br>
![Preview of the imported station data.](two_layers_starting_model_with_loaded_data_3D_view.png){ width="300", align=right }
- The loaded data will be displayed on top of the model together with stations
- The data will also appear as measured data ("meas Gz") in the **Object Tree** under "Fields" --\> "Gravity: z-component"
- Now it is necessary to [calculate the gravity field](#calculate-gravity-field) for the loaded.

### Calculate gravity field

![Select "Calc Gz" to calculate vertical component of the gravity anomaly.](two_layers_calculate_anomalies.png){ width="300", align=right }
- First, triangulate the model using ++"Edit"++ --\> ++"Model Triangulation"++ or by clicking ![Triangulation](icon_triangulation.png)
- Then calculate the anomaly of the model using ++"Tools"++ --\> ++"Calculate Anomalies"++ or by clicking ![Calculate anomaly](icon_calculate.png)
- Select "Calc Gz"
- Click ++"Finish"++

![Misfit between the measured and calculated gravity anomalies for the starting model.](two_layers_starting_model_2D_view.png){ width="300", align=right }
- Open **2D View** using ++"Add View"++ --\> ++"2D View"++ or by clicking ![2D View](icon_2d.png)
- The curves above the vertical cross section shows the misfit between the measured and calculated gravity anomalies for the starting model
- In the **Object Tree** under "Fields" select "Gravity: z-component"
- Click on the [**Property Editor Tab**](../user_interface/property_editor.md) and uncheck "Auto Shift" if you want to run inversion without the autoshift.
- Now, before starting the inversion, it is necessary to [add the inversion category](#add-inversion-category).

### Add inversion category

![Add category in "Interfaces".](two_layers_add_category.png){ width="300", align=right }

-   In the [**Object Tree**](../user_interface/object_tree.md), click ++"right mouse button"++ on "Interfaces" and select ++"Add Category"++
-   In the dropdown list choose "Inversion" and click ++"OK"++
-   A new "Inversion" entry will appear in "Interfaces"

<br><br><br><br><br><br><br><br><br><br>
!["Inversion" category with the added interface between the upper and lower bodies.](two_layers_added_inversion_category.png){ width="300", align=right }
- Add an interface to the "Inversion" category
- In the \[**Object Tree**\] under "Interfaces" find the interface between the upper and lower bodies called "Unten \<\> Oben"
- Pick this interface with ++"left mouse button"++ and drag it to the "Inversion"
- The interface "Unten \<\> Oben" will be copied under the "Inversion" (see Figure on the right)
- Now you are ready to [start the interface inversion](#start-interface-inversion).

<br><br><br><br><br>
??? tip
The model at this stage can be opened from the middle timeline of the `Two_Layers_Inversion` model.

### Start interface inversion

-   Open the interface inversion wizard using the start icon ![inversion start](start_icon.png)

<br>
![Interface inversion settings.](two_layers_interface_inversion_settings.png){ width="300", align=right }
- Interface inversion settings window will open (see Figure on the right)
- Select the "Optimizer" to be "Optimizer no-check"
- Adjust the "Standard Deviation" to be in the range from `0.15` to `0.05` - this is the initial standard deviation for variation of depth coordinates of the interface vertices. The more the value, the larger is the initial variation. We recommend to keep 0.1 here.
- Adjust the "Stop-Quality SD" to be in the range from `0.1` to `0.002`. The less the value is, the longer the inversion will last and the better the fit will be in the end. A recommended value for the "Stop-Quality SD" to reach an optimal accuracy in a reasonable time is 0.05.
- Make sure the "Use Triangle Effect" is **checked**: it involves calculation of gravity effect for the triangulated bodies
- Make sure the "Use Voxel Effect" is **unchecked**: there are no voxel cubes and we don't need to involve it
- Once ready, click ++"Next"++

<br>
![Interface inversion area settings.](interface_inversion_area_settings.png){ width="300", align=right }
- Area settings window will open:
- The default area is the area covered by stations
- Click ++"Finish"++

<br><br><br><br>
![Population quality graph.](two_layers_population_quality.png){ width="300", align=right }
- Interface inversion process will start
- A **Population Quality** window will open automatically and will dynamically show the statistics on the optimization process
- Usually it takes about 20 to 30 minutes to reach the quality of 0.002 for this model
- To stop the inversion process before it reaches the stop quality threshold, use the stop icon ![inversion stop](stop_icon.png)
- Once inversion is done, the stop icon ![inversion stop](stop_icon.png) will change back to the start icon ![inversion start](start_icon.png)

The animation of the inversion process is shown on [Figure below](#figure-two_layers_interface_inversion) (video version is [here](https://nextcloud.gfz.de/s/qyx6NMz3n883YBc)):

<a name="figure-two_layers_interface_inversion"></a>
*![Interface inversion process](https://git.gfz-potsdam.de/igmas/igmas-docs/-/raw/devel/large-media/two_layers_interface_inversion.gif?ref_type=heads&inline=false)*

### Final model

The final result, as [explained earlier](#start-interface-inversion) depends on the stop quality and the initial standard deviation, and, besides, is not possible to reproduce because of the random nature of the evolution strategy.

The result obtained for the stop quality of 0.002 and the initial standard deviation of 0.1 shows that the [original flat interface](#figure-two_layers_original_model) is almost perfectly [reconstructed](#figure-two_layers_final_model) with minimal [residual gravity field](#figure-two_layers_final_model_misfit):

<a name="figure-two_layers_final_model"></a>
*![Result of interface inversion: vertical cross-section through the final model and the misfit between the measured and calculated gravity fields.](two_layers_final_model.png)*

<a name="figure-two_layers_final_model_misfit"></a>
*![Result of interface inversion: map view on the measured and calculated gravity fields and the residual.](two_layers_final_model_misfit.png)*

<a name="figure-two_layers_final_model_3D_view"></a>
<figure>
![Result of interface inversion: 3D view of the final model.](two_layers_final_model_3D_view.png){width="500"}
<figcaption>
Result of interface inversion: 3D view of the final model.
</figcaption>
</figure>
??? tip
The final model can be opened from the latest timeline of the `Two_Layers_Inversion` model.

Simple Salt Dome
================

This example is devoted to demonstration of [geometry optimization based on spring-based space warping](../workflows/inversion.md#geometry-optimization-based-on-spring-based-space-warping) applied to a simple synthetic model of a [salt dome](../glossary.md#salt-dome).

Description
-----------

### Original model

The model contains four units, names and densities are given in the [Table below](#table-simple_salt_dome_units).

<a name="table-simple_salt_dome_units"></a>

  Name   Density
  ------ --------------
  S1     2.21 t/m$^3$
  S2     2.57 t/m$^3$
  S3     2.77 t/m$^3$
  salt   2.31 t/m$^3$

The salt unit forms a salt dome starting at a depth of around 3.5 km and going up to around 1 km in the center of the model domain (see [Figure below](#figure-simple_salt_dome_original_model_2D_view)).

<a name="figure-simple_salt_dome_original_model_2D_view"></a>
<figure>
![Vertical cross-section through the simple salt dome model.](simple_salt_dome_original_model_2D_view.png){width="500"}
<figcaption>
Vertical cross-section through the simple salt dome model.
</figcaption>
</figure>
The model has 4 working sections which are identical, so that the model is simply prolonged in the North direction (perpendicular to the working sections):

<a name="figure-simple_salt_dome_original_model_3D_view"></a>
<figure>
![The 3D view of the simple salt dome model.](simple_salt_dome_original_model_3D_view.png){width="500"}
<figcaption>
The 3D view of the simple salt dome model.
</figcaption>
</figure>
There is a horizontal extension of the bodies by 100 km in each side beyond the station boundaries (10 $\times$ 10 km):

<a name="figure-simple_salt_dome_extended_original_model_3D_view"></a>
<figure>
![The 3D view of the simple salt dome model with extensions.](simple_salt_dome_extended_original_model_3D_view.png){width="500"}
<figcaption>
The 3D view of the simple salt dome model with extensions.
</figcaption>
</figure>
The reference density is 2.43 t/m$^3$.

### Input data

The [original model](#original-model) was used to create a gravity dataset calculated for a set of 441 stations regularly placed on the plane at a zero depth level (see [Figure below](#figure-simple_salt_dome_measured_gravity)).

<a name="figure-simple_salt_dome_measured_gravity"></a>
<figure>
![Bouguer anomaly modelled above the simple salt dome model measured with a regularly spaced set of stations placed at a zero depth level.](simple_salt_dome_measured_gravity.png){width="500"}
<figcaption>
Bouguer anomaly modelled above the simple salt dome model measured with a regularly spaced set of stations placed at a zero depth level.
</figcaption>
</figure>
Stations cover the area 40 $\times$ 40 km, exceeding the model edges by 10 km in each direction.
For simplicity, there is no extension of the bodies beyond the model boundaries, and the edge effect is clearly visible in the dataset.

The described dataset was used as an input measured gravity data for inversion.

### Starting model

In order to have a starting model which would differ from the original model, the shape of the salt dome in the middle section has been manually modified (see [Figure below](#figure-simple_salt_dome_starting_model_3D_view)).

<a name="figure-simple_salt_dome_starting_model_3D_view"></a>
<figure>
![The 3D view of the starting model showing modified salt dome shape in the middle working section. The measured gravity is shown on the top.](simple_salt_dome_starting_model_3D_view.png){width="500"}
<figcaption>
The 3D view of the starting model showing modified salt dome shape in the middle working section. The measured gravity is shown on the top.
</figcaption>
</figure>
### Download

The input data required for this example as well as the two models are available for download [here](https://nextcloud.gfz.de/s/tyTP6G5CMzpxYBJ).

The share contains 3 files:

-   `Simple_Salt_Dome_Measured_Gravity.csv`: the [input measured gravity data](#input-data) in CSV format
-   `Simple_Salt_Dome_Original.zip`: the [original](#original-model) **IGMAS+** model with a salt dome
-   `Simple_Salt_Dome_Inversion.zip`: the **IGMAS+** model used for inversion consisting of two timeline steps:
    -   [starting model](#starting-model): a model where the salt dome shape distorted
    -   [final model](#final-model) - a model after application of the geometry optimization to the starting model

The input gravity data file `Simple_Salt_Dome_Measured_Gravity.csv` is in CSV format and has 4 data columns: `"x" "y" "z" "measured z component"` and 441 data rows corresponding to stations.
The values in columns are delimited with space.

The two models are zip archives with **IGMAS+** projects. Simply unpack and [load projects](../user_interface/menu.md#project-related-menu-entries) in **IGMAS+**.

Modelling
---------

!!! abstract "Goal"
The goal of this modelling example is to apply geometry optimization to the starting model in order to demonstrate how it can be iteratively inverted to a final model somewhat close to the true one based on the input gravity data, assuming that densities of the units are known.

The geometry optimization functionality is provided by the **Inversion** plugin. With this plugin it is possible to iteratively optimize the geometry of a model by space warping using the misfit between the measured and calculated (at each iteration) field.

### Open the starting model

-   Start **IGMAS+**
-   Select ++"File"++ --\> ++"Open Project"++
-   Select the folder `Simple_Salt_Dome_Inversion`
-   In the Timeline window select the earliest timeline - this is the starting model
-   The starting model will open in the [3D view](#figure-simple_salt_dome_starting_model_3D_view), already with the loaded [input measured gravity data](#input-data)
-   Note that there are no working sections in the starting model, because 3D geometry optimization based on space warping will destroy the working sections
-   Now it is necessary to [calculate the gravity field](#calculate-gravity-field) for the loaded.

### Calculate gravity field

-   Calculate the anomaly of the model using ++"Tools"++ --\> ++"Calculate Anomalies"++ or by clicking ![Calculate anomaly](icon_calculate.png)
    -   Select "Calc Gz"
    -   Click ++"Finish"++
-   Open **2D Maps View** using ++"Add View"++ --\> ++"2D Maps View"++ or by clicking ![2D Maps View](icon_2d_maps.png)
-   The program show the map views of the measured, calculated and residual gravity fields for the starting model:

*![Measured, calculated and residual gravity anomalies for the starting model.](simple_salt_dome_starting_model_residual.png)*

-   Open **Multiple Cutter View** using ++"Add View"++ --\> ++"Cutter View"++ or by clicking ![Multiple Cutter](icon_2d_maps.png)
-   Draw a horizontal line and adjust the coordinates to be $X$=0, $Y$=5 for the start of the line and $X$=0, $Y$=10 for the end of it:

<a name="figure-simple_salt_dome_starting_model_misfit_2D_view"></a>
<figure>
![Vertical cross-section through the starting model and the misfit between the measured and calculated gravity fields.](simple_salt_dome_starting_model_misfit_2D_view.png){width="500"}
<figcaption>
Vertical cross-section through the starting model and the misfit between the measured and calculated gravity fields.
</figcaption>
</figure>
<!-- - In the **Object Tree** under "Fields" select "Gravity: z-component"
- Click on the [**Property Editor Tab**](../user_interface/property_editor.md) and uncheck "Auto Shift" if you want to run inversion without the autoshift

*![Measured, calculated and residual gravity anomalies for the starting model with disabled autoshift.](simple_salt_dome_starting_model_residual_no_autoshift.png)* -->
-   Now, before starting the inversion, it is necessary to [prepare the inversion lattice](#prepare-the-inversion-lattice).

??? tip
The model at this stage can be opened from the middle timeline of the `Simple_Salt_Dome_Inversion` model.

### Prepare the inversion lattice

-   Create a lattice using icon ![add lattice](add_grid_icon.png)
-   You will be asked to define the area for the lattice:<br>
    ![Define lattice area](simple_salt_dome_lattice_define_area.png){width="300"}
-   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:<br>
    ![Define lattice area](simple_salt_dome_create_lattice_3D_view.png){width="300"}
-   With icon ![add lattice nodes](add_grid_node.png) you can add more lattice nodes, i.e. make the lattice finer, step-by-step:<br>
    ![Define lattice area](simple_salt_dome_refine_lattice_3D_view.png){width="300"}
-   Similarly, with icon ![remove lattice nodes](remove_grid_node.png) you can remove lattice nodes, i.e. make the lattice coarser
-   In case of mistakes, you can completely remove the lattice using icon ![remove lattice](remove_grid_icon.png)
-   There are two lattice transformation modes controlled by swapping icons ![mode matrix](mode_tri.png) and ![mode trilinear](mode_matrix.png):
    -   ![mode matrix](mode_tri.png) means that the [matrix transformation mode](../workflows/inversion.md#matrix-transformation-mode) is selected (default)
    -   ![mode trilinear](mode_matrix.png) means that the [trilinear transformation mode](../workflows/inversion.md#trilinear-transformation-mode) is selected

<!-- ???+ abstract "Exercise"
    Use [lattice tools](../workflows/inversion.md#setup-lattice) to create a lattice around the central part of a model where the salt dome has been modified

The lattice created for the whole model domain is usually not an optimal way to do the geometry optimization. Instead, it is better to make a more local lattice.

After creation of a lattice area in a more optimal dimensions:<br>
![Define optimal lattice area](simple_salt_dome_lattice_define_optimal_area.png){ width="300"}-->
After refining the lattice 7 times, one can obtain an optimal lattice for geometry optimization:<br>
![Optimal lattice](simple_salt_dome_optimal_lattice_3D_view.png){width="300"}

Now it is time to [start geometry optimization](#start-geometry-optimization).

### Start geometry optimization

-   Open the geometry optimization wizard using the start icon ![inversion start](start_icon.png)
-   Adjust the parameters:
    -   The "Optimizer" is selected to be "SpringSystem Optimizer" and can't be changed, meaning that the spring-based optimization will be performed.
    -   Adjust the "Standard Deviation" to be in the range from `0.25` to `0.05` - this is the initial standard deviation for variation of depth coordinates of the lattice nodes. The more the value, the larger is the initial variation. We recommend to have 0.2 here.
    -   Adjust the "Stop-Quality SD" to be in the range from `0.1` to `0.01`. The less the value is, the longer the inversion will last and the better the fit will be in the end. A recommended value for the "Stop-Quality SD" to reach an optimal accuracy is 0.05.
    -   Make sure the "Use Triangle Effect" is **checked**: it involves calculation of gravity effect for the triangulated bodies
    -   Make sure the "Use Voxel Effect" is **unchecked**: there are no voxel cubes and we don't need to involve it

<a name="figure-simple_salt_dome_inversion_settings"></a>
<figure>
![Recommended geometry optimization settings.](simple_salt_dome_inversion_settings.png){width="500"}
<figcaption>
Recommended geometry optimization settings.
</figcaption>
</figure>
-   Once ready, click ++"Next"++
-   Click ++"Finish"++
    -   Geometry optimization process will start

<a name="figure-Geometry optimization process"></a>
<figure>
![Geometry optimization process](https://git.gfz-potsdam.de/igmas/igmas-docs/-/raw/devel/large-media/simple_salt_dome_geometry_optimization.gif?ref_type=heads&inline=false){width="800"} --\>
<figcaption>
Geometry optimization process.
</figcaption>
</figure>
-   The **Population Quality** window will open automatically and will dynamically show the statistics on the optimization process:

<a name="figure-Population quality statistics"></a>
<figure>
![Population quality statistics](simple_salt_dome_population_quality.png){width="800"}
<figcaption>
Population quality statistics after reaching the "Stop-Quality SD" threshold.
</figcaption>
</figure>
<!-- - Usually it takes about 20 to 30 minutes to reach the quality of 0.002 for this model -->
-   To stop the inversion process before it reaches the stop quality threshold, use the stop icon ![inversion stop](stop_icon.png)
-   Once inversion is done, the stop icon ![inversion stop](stop_icon.png) will change back to the start icon ![inversion start](start_icon.png)

### Final model

The final result, as [explained earlier](#start-geometry-optimization) depends on the stop quality and the initial standard deviation. Besides, is not possible to get two identical final optimization results because of the random nature of the CMA-ES.

The result obtained for the stop quality of 0.05 and the initial standard deviation of 0.2 shows that the [original salt dome shape](#figure-simple_salt_dome_original_model_2D_view) is [reconstructed](#figure-simple_salt_dome_final_model_misfit_2D_view) with an excellent accuracy and the [residual gravity field](#figure-simple_salt_dome_final_model_residual) is minimal:

<a name="figure-simple_salt_dome_final_model_misfit_2D_view"></a>
<figure>
![Result of geometry optimization: vertical cross-section through the final model and the misfit between the measured and calculated gravity fields.](simple_salt_dome_final_model_misfit_2D_view.png){width="800"}
<figcaption>
Result of geometry optimization: vertical cross-section through the final model and the misfit between the measured and calculated gravity fields.
</figcaption>
</figure>
<a name="figure-simple_salt_dome_final_model_residual"></a>
*![Result of geometry optimization: measured, calculated and residual gravity fields for the final model.](simple_salt_dome_final_model_residual.png)*

The [Figure below](#figure-simple_salt_dome_final_model_3D_view_with_lattice) represents the 3D shape of the final reconstructed salt dome and the final distorted lattice:

<a name="figure-simple_salt_dome_final_model_3D_view_with_lattice"></a>
<figure>
![Result of geometry optimization: 3D view of the final model with the lattice and the corresponding calculated gravity field.](simple_salt_dome_final_model_3D_view_with_lattice.png){width="800"}
<figcaption>
Result of geometry optimization: 3D view of the final model with the lattice and the corresponding calculated gravity field.
</figcaption>
</figure>
Final model without lattice:

<a name="figure-simple_salt_dome_final_model_3D_view"></a>
<figure>
![Result of geometry optimization: 3D view of the final model.](simple_salt_dome_final_model_3D_view.png){width="800"}
<figcaption>
Result of geometry optimization: 3D view of the final model.
</figcaption>
</figure>
??? tip
The final model can be opened from the latest timeline of the `Simple_Salt_Dome_Inversion` model.

Molasse Basin
=============

This example is devoted to demonstration on how **IGMAS+** can be used to perform a lithosphere-scale modelling based on a European Molasse basin (MOLA) model using ["flying carpets"](../glossary.md#flying-carpet) ([horizons](../glossary.md#horizon)) as input data.

Description
-----------

!!! abstract "Goal"
The goal of this modelling example is to show the typical modelling workflow using horizon files from a data publication: load the structural model, convert the horizons to a suitable format, import and use the horizons for construction of an IGMAS+ model, import stations, run anomaly calculation and apply the border effect minimization.

### Model

The MOLA model is described in the following publication[^1]:

*Przybycin, A. M., Scheck-Wenderoth, M., & Schneider, M. (2015). Assessment of the isostatic state and the load distribution of the European Molasse basin by means of lithospheric-scale 3D structural and 3D gravity modelling. International Journal of Earth Sciences, 104(5), 1405-1424. <https://doi.org/10.1007/s00531-014-1132-4>*

The structural model itself is published on Zenodo[^2]:

*Szymanski (Przybycin), A., Scheck-Wenderoth, M., Schneider, M., & Anikiev, D. (2024). MOLA: 3D lithospheric-scale structural model of the European Molasse basin (Version 1). Zenodo. <https://doi.org/10.5281/zenodo.10869954>*

<a name="figure-molasse_basin_major_horizons"></a>
<figure>
![Representative horizons of the MOLA model: Top of the Folded Molasse sediments (light green color), Top of the Upper Crust (blue color), Top of the Lower Crust (turquoise color), Top of the Lithospheric Mantle (Moho, lavender color).](molasse_basin_major_horizons.png){width="800"}
<figcaption>
Representative horizons of the MOLA model: Top of the Folded Molasse sediments (light green color), Top of the Upper Crust (blue color), Top of the Lower Crust (turquoise color), Top of the Lithospheric Mantle (Moho, lavender color).
</figcaption>
</figure>
The MOLA model consists of the following units with assigned densities (Table 2 in Przybycin et al. (2015)[^3]):

<a name="table-molasse_basin_densities"></a>

  ------------------------------------------------------------------------------------------------------------
  Number   Unit name                                   File name                               Density
  -------- ------------------------------------------- --------------------------------------- ---------------
  1        Nördlinger Ries impact structure            `2024-MOLA_01_Ries.txt`                 2000 kg/m$^3$

  2        Alpine Body                                 `2024-MOLA_02_AlpineBody.txt`           2730 kg/m$^3$

  3        Folded Molasse                              `2024-MOLA_03_FoldedMolasse.txt`        2400 kg/m$^3$

  4        Foreland Molasse                            `2024-MOLA_04_ForelandMolasse.txt`      2350 kg/m$^3$

  5        Cretaceous                                  `2024-MOLA_05_Cretaceous.txt`           2640 kg/m$^3$

  6        Upper Jurassic Malm                         `2024-MOLA_06_Malm.txt`                 2650 kg/m$^3$

  7        PreMalm Sediments (Jurassic and Triassic)   `2024-MOLA_07_PreMalm.txt`              2680 kg/m$^3$

  8        Tauern Body                                 `2024-MOLA_08_TauernBody.txt`           2800 kg/m$^3$

  9        Upper crystalline crust                     `2024-MOLA_09_UpperCrust.txt`           2850 kg/m$^3$

  10       Lower crystalline crust                     `2024-MOLA_10_LowerCrust.txt`           3150 kg/m$^3$

  11       Lithospheric Mantle                         `2024-MOLA_11_LithosphericMantle.txt`   3180 kg/m$^3$
  ------------------------------------------------------------------------------------------------------------

### Gravity data

The evaluation of the resulting density model in Przybycin et al. (2015)[^4] was done by comparing the gravity calculations with the Earth Gravitational Model 2008 (EGM2008) provided by the International Gravimetric Bureau (BGI 2012[^5]; Pavlis et al. 2012[^6]).

### Download

Load the structural [model](#model) archive from [Zenodo](https://zenodo.org/records/10869954/files/MOLA_3D_model_files.zip?download=1) and unpack to folder `MOLA_3D_model_files`.

The [scripts](#scripts) necessary for the conversion of the data, and the [gravity data](#gravity-data) are available [here](https://nextcloud.gfz.de/s/weosQiMGBYXAsjT).

### Scripts

At least one script ([`convert_horizons.sh`](#convert-horizons)) is required to process the original publication data files, to be able to involve them in **IGMAS+** modelling. The second one ([`cut_horizons.sh`](#cut-horizons)) is required only when working with earlier versions of **IGMAS+** (prior to v1.5).

???+ note
Originally the bash scripts are designed for Unix, but one can run them on Windows. The best way to run these scripts is to use Git Bash:
- load Git-SCM from [the official site](https://git-scm.com/download/win)
- install
- run Git Bash (right click menu in the folder with scripts and select "Open Git Bash here")
- run scripts as explained below

#### Convert horizons

`convert_horizons.sh` is a bash script that converts ASCII (TXT) files in the format of data publications to CSV horizon files readable by **IGMAS+**.

Usage:

``` {.bash}
./convert_horizons.sh
```

takes files from folder `MOLA_3D_model_files` (must be in the same folder as the script) from the original data publication data archive, converts them and saves to folder `MOLA_3D_model_horizons`.

#### Cut horizons

???+ note
Using this script is **optional**.
Cutting of horizons can be done inside **IGMAS+** (for v1.5 and higher).

`cut_horizons.sh` is a bash script that processes the CSV horizon files by adjusting Z-coordinate values such that the units are cut at zero level.
It is necessary to convert the files in this way in order to be able to model [Complete Bouguer Anomaly](../glossary.md#complete-bouguer-anomaly) in **IGMAS+** correctly (versions below v1.5).

Usage:

``` {.bash}
./cut_horizons.sh
```

processes files from folder `MOLA_3D_model_horizons` (created by [`convert_horizons.sh`](#convert-horizons)), converts them (cuts the unit surfaces) and saves to folder `MOLA_3D_model_horizons_cut`.

Modelling
---------

### Importing horizons

To load the horizons first start a new project with ++"File"++ --\> ++"New Project"++:

![molasse\_basin\_new\_project](./molasse_basin_new_project.png)

Select **Irregular/Regular Horizon(XY-Plane) Import** and click ++"Finish"++

Then navigate to the `MOLA_3D_model_horizons` folder created by the [`convert_horizons.sh`](#convert-horizons) script:

![molasse\_basin\_select\_horizon\_files](./molasse_basin_select_horizon_files.png)

Ensure all relevant files are selected and proceed with ++"Next"++:

![molasse\_basin\_horizon\_import](./molasse_basin_horizon_import.png)

The window shows the information about the loaded horizons.
You can interpolate them by adjusting the number of points or spacing in $x$ and $y$ dimensions, if necessary.
Details can be found in [this chapter](../workflows/import.md#import-horizons).

Or simply proceed with ++"Next"++:

![molasse\_basin\_horizon\_import\_model\_size](./molasse_basin_horizon_import_model_size.png)

On the next step you can define model borders extension, minimum vertical distance, vertical model limits (Z-Top, Z-Bottom) and model units:

![molasse\_basin\_horizon\_import\_adjust\_model\_size](./molasse_basin_horizon_import_adjust_model_size.png)

Brief explanaion on the selected parameters:
- **Extend model borders**: Extending model borders and adjusting the **Range** can be applied to remove the edge effect.
In the case of MOLA model we will use automatic **Border effect** reduction instead, so simply uncheck **Extend model borders**.
- **Minimum vertical distance**: here we defined the minimum thickness of the bodies to avoid identical positions of the vertices.
MOLA model has been constructed in a way that there is a minimum 10 cm thickness, so it makes sense to set 0.1 m here.
- **Z-Top**: in order to perform [Complete Bouguer Anomaly](../glossary.md#complete-bouguer-anomaly) modelling it necessary to have all masses in the model to be below the zero level.
To cut the model horizons at zero level, set the **Z-Top** parameter to 0.

???+ warning
Cutting of horizons in this way can not be done in **IGMAS+** version earlier than v1.5.
Therefore, when using earlier **IGMAS+** versions you should use the pre-cut horizons from folder `MOLA_3D_model_horizons_cut` prepared by the [`cut_horizons.sh`](#cut-horizons) script and **Z-Top** will be automatically determined as 0.

-   **Z-Bottom**: we don't need to change this parameter as it is automatically defined and the depth of the model is sufficient[^7].
-   **Units**: original coordinates in the horizon files are in meters (UTM32N), so we must keep "m".
-   **Project Points (Mundry)**: we don't need to use interpolation algorithms of Mundry[^8] because the horizon grids are regularly spaced[^9]. Keep it unchecked.

After adjusting parameters, proceed with ++"Next"++:

![molasse\_basin\_setup\_sections](./molasse_basin_setup_sections.png)

In this window one can setup the orientation and number of working sections.
Due to the nature of the subsurface structures[^10], it makes sense to span the sections from North to East, therefore we use the ++"→ 90"++ button to zet **Azimuth** to 90°.
Since the original horizontal grid spacing in MOLA is 2.5 km[^11], to keep the original resolution, we change the spacing to 2500 m.
After changing parameters, click on ++"Preview"++ and then ++"Finish"++.

**IGMAS+** will import the working sections and create the corresponding model domain.

### Triangulation

After that, click on **Triangulate Sections** icon ![icon\_triangulation](../media/icon_triangulation.png):

![molasse\_basin\_triangulation](./molasse_basin_triangulation.png)

Simply proceed with ++"Finish"++. **IGMAS+** will show the triangulated model domain:

![molasse\_basin\_triangulated\_model](./molasse_basin_triangulated_model.png){width="600"}

### Visualizing horizons

To visualize the horizons, in the [**Object Tree**](../user_interface/object_tree.md) switch off the **Sections**, and in **Interfaces** switch off interfaces both related to **reference** and **Top**

![molasse\_basin\_switch\_off\_sections\_top\_reference](./molasse_basin_switch_off_sections_top_reference.png)

The **3D View** will show the model horizons (or interfaces) as surfaces:

![molasse\_basin\_horizons](./molasse_basin_horizons.png){width="600"}

Sometimes it is more convenient to visualize the models with vertical exaggeration.
In the **Object Tree** select **Model**, then go to the [**Property Editor Tab**](../user_interface/property_editor.md) and change **vertical exaggeration** to 4:

<a name="figure-molasse_basin_horizons_exaggerated"></a>
<figure>
![Horizons of the MOLA model after triangulation and applying vertical exaggeration factor of 4.](molasse_basin_horizons_exaggerated.png){width="800"}
<figcaption>
Horizons of the MOLA model after triangulation and applying vertical exaggeration factor of 4.
</figcaption>
</figure>
### Setting up model parameters

Now we should set up model parameters.
We are modelling gravity, so it is necessary to set up densities according to the [Table of densities](#table-molasse_basin_densities).

In the [**Body Manager Tab**](../user_interface/body_manager.md) use ++"Add parameter"++ button and add density:

![molasse\_basin\_add\_density\_parameter](./molasse_basin_add_density_parameter.png)

You can choose any units, but keep the entered values consistent with the units. Here we select the default t/m$^3$ and click ++"OK"++.
After that in the same **Body Manager Tab** we fill in the values:

![molasse\_basin\_density\_table](./molasse_basin_density_table.png)

The reference density is set to 3.1 t/m$^3$ to minimize the edge effect when modelling Bouguer anomaly.

### Importing stations

Import stations with ++"File"++ --\> ++"Import"++ --\> ++"Stations"++:

![molasse\_basin\_stations\_import](./molasse_basin_stations_import.png)

Switch file type to **\[csv \| xyz\] - Comma Separated Values**, select the provided gravity data file `Molasse_Basin_Measured_Gravity.csv`, and proceed with ++"Open"++:

![molasse\_basin\_imported\_station\_data](./molasse_basin_imported_station_data.png)

Here you can see the columns imported from the CSV file. If all looks good, finalize the importing with ++"Finish"++.
The measured gravity field will show up on top of the model as a color-coded surface, and stations are visualized as red dots:

![molasse\_basin\_horizons\_with\_gravity](./molasse_basin_horizons_with_gravity.png){width="600"}

### Calculating anomalies

Once the project has triangulated model, stations are imported (or created) and parameters are assigned, it is possible to calculate the anomalies.
Just use the **Calculate Anomalies** icon ![icon\_calculate](../media/icon_calculate.png) or use ++"Tools"++ --\> ++"Calculate Anomalies"++:

![molasse\_basin\_calculate\_anomalies](./molasse_basin_calculate_anomalies.png){width="600"}

Here we are interested in the default vertical ($G_z$) component. Click ++"Finish"++ to start calculations.

### Visualizing misfit

To visualize the gravity misfit it is better to use the **2D View**. Click on the **2D View** icon ![icon\_2d](../media/icon_2d.png) or use ++"View"++ --\> ++"View"++ --\> ++"2D View"++.

![molasse\_basin\_gravity\_misfit\_2D\_section\_view](./molasse_basin_gravity_misfit_2D_section_view.png){width="600"}

in the 2D section view one can see the measured (solid red (for the vertical component) line), calculated (dashed red line) and residual (dotted red line) anomalies.
One can also see the edge effect on the sides of the model (too much mass due to the reference body).

### Minimizing border effect

To reduce the border (edge) effect we can use the automatic border effect minimization algorithm.
In the **Object Tree** select **Model**, then go to the **Property Editor Tab** and find ++"..."++ button on the right from the **border-algorithm** in the **Border effect** section.

![molasse\_basin\_find\_border\_effect](./molasse_basin_find_border_effect.png){width="600"}

First uncheck **User border anomaly** to set it to **false** and then click ++"..."++ button or, alternatively, use ++"Research"++ --\> ++"Wizard [Border effect](#border-effect)"++:

???+ warning
With **User border anomaly** checkmark set to **true** it is not possible to modify the voxel dimensions and resolution required for the border effect algorithm.

![molasse\_basin\_select\_border\_effect\_minimization\_algorithm](./molasse_basin_select_border_effect_minimization_algorithm.png)

Select **Automatic** and proceed with ++"Next"++:

![molasse\_basin\_setup\_border\_effect\_minimization\_algorithm](./molasse_basin_setup_border_effect_minimization_algorithm.png)

Leave the defaults here and proceed with ++"Next"++:

![molasse\_basin\_adjust\_voxel\_border\_effect\_minimization\_algorithm](./molasse_basin_adjust_voxel_border_effect_minimization_algorithm.png)

The minimization of the border effect is done using a special voxel cube. The initial resolution of 250 m is too fine, it is enough to reduce it to 2500 m (resolution of the original horizon grid[^12]):

![molasse\_basin\_adjusted\_voxel\_resolution\_border\_effect\_minimization\_algorithm](./molasse_basin_adjusted_voxel_resolution_border_effect_minimization_algorithm.png)

Click with ++"Finish"++ and check **User border anomaly** back to **true**.

### Re-calculating anomalies

In order to recalculate the anomalies, click **Re-Calculate Anomaly** icon ![icon\_recalculate](../media/icon_recalculate.png) or use ++"Tools"++ --\> ++"Re-Calculate Anomaly"++.

After recalculation is finished, the border effect minimization is applied automatically.
To visualize the updated gravity misfit switch to the the **2D View**:

![Molasse Basin: gravity misfit on the 2D section view after border effect minimization](./molasse_basin_gravity_misfit_2D_section_view_after_border_effect_minimization.png){width="600"}

The border effect has been successfully minimized.

### Visualizing misfit on the map

To visualize the anomaly misfit on the 2D map, use **2D Maps View**: click **2D Maps View** icon ![icon\_2d\_maps](../media/icon_2d_maps.png) or use ++"View"++ --\> ++"View"++ --\> ++"2D Maps View"++:

![Molasse Basin: gravity misfit on the 2D maps view after border effect minimization](./molasse_basin_gravity_misfit_2D_maps_view_after_border_effect_minimization.png)

It is possible to adjust the visualization options using **Map rendering preferences** (brush) icon ![icon\_brush](../media/icon_brush.png) in the top toolbar panel of the **2D Maps View** window:

![Molasse Basin: change map settings](./molasse_basin_change_map_settings.png){width="600"}

Select **z component** and adjust font size for both measured/calculated and residual anomaly maps:

![Molasse Basin: adjust font size in map settings](./molasse_basin_adjusted_fontsize_map_settings.png){width="600"}

Click +"OK"++ and you can see changes of the fonts directly on the maps:

![Molasse Basin: gravity misfit on the 2D maps view with adjusted font size](./molasse_basin_gravity_misfit_2D_maps_view_adjusted_fontsize.png)

In the same way you can change the contours, contour labelling, color maps, as well as the color limits.

### Exporting the calculated anomalies

To export the calculated fields as well as the misfits, use ++"File"++ --\> ++"Export"++ --\> ++"Stations"++:

![Molasse Basin: export stations](./molasse_basin_export_stations.png){width="600"}

Select the desired file type, e.g. **\[csv \| xyz\] - Comma Separated Values** for exporting in the CSV format and click ++"Save"++.

References { data-search-exclude }
----------------------------------

Eifel Volcanic Area
===================

This example is devoted to demonstration on how **IGMAS+** can be used to construct a detailed model of the Eifel Volcanic Area (EVA) using [working sections](../glossary.md#working-section).

Description
-----------

!!! abstract "Goal"

    The goal of this modelling example is to show the typical modelling workflow using working sections from scratch: define model dimensions, create sections, modify vertices and bodies, import stations, calculate anomalies, visualize results.

### Area of interest

The Eifel Volcanic Area (EVA) is located in the western part of Germany, near the border with Belgium and Luxembourg. It is a region characterized by volcanic activity, including numerous volcanic craters, lava flows, and other volcanic features. The area is part of the larger Eifel region, which is known for its unique geological formations, rich volcanic history and seismological activity (see, e.g., Dahm et al. (2020)[@DahmStillerEtAl2020]).

There are several volcanic craters in the EVA, including the famous Laacher See, which is a large crater lake and Dauner Maare, which is a group of maar craters formed by explosive volcanic eruptions less than 13000 years ago.

<a name="figure-eva_gemuendener_maar"></a>
<figure>
![Gemündener Maar, a lake formed by a volcanic eruption in Dauner Maare, a group of maar craters in the Eifel Volcanic Area. Source: Wikimedia under CC BY-SA 4.0 license.](https://upload.wikimedia.org/wikipedia/commons/0/05/Dauner_Maare%2C_Gem%C3%BCndener_Maar.jpg){width="800"}
<figcaption>
Gemündener Maar, a lake formed by a volcanic eruption in Dauner Maare, a group of maar craters in the Eifel Volcanic Area. Source: Wikimedia under CC BY-SA 4.0 license.)
</figcaption>
</figure>
### Model

The EVA model is under ongoing development and is not yet published. It is based on the available geological and geophysical data, including seismic profiles, gravity data, and geological maps.

<a name="figure-eva_3d_view_sections"></a>
<figure>
![3D view of the Eifel Volcanic Area (EVA) model. The model is composed of 18 working sections, spanning from North-West to South-East. The model is under ongoing development and is not yet published.](eva_3d_view_sections.png){width="800"}
<figcaption>
3D view of the Eifel Volcanic Area (EVA) model. The model is composed of 18 working sections, spanning from North-West to South-East. The model is under ongoing development and is not yet published.
</figcaption>
</figure>
### Gravity data

The evaluation of the resulting density model in this example is done by comparing the gravity calculations with the gravity data provided by The Leibniz Institute for Applied Geophysics (LIAG).
<!-- 
### Download

Load the structural [model](#model) archive from [Zenodo]() and unpack to folder `EVA_3D_model_files`.

The [scripts](#scripts) necessary for the conversion of the data, and the [gravity data](#gravity-data) are available [here](https://nextcloud.gfz.de/s/weosQiMGBYXAsjT). -->

Modelling
---------

In this example, we will see how a crustal-scale model of the Eifel Volcanic Area (EVA) can be constructed in **IGMAS+** using working sections.

### Start a new project

In the **Menu Bar** select ++"File"++ --\> ++"New Project"++

![New Project](File_New_Project.png)

This is the wizard to create a new project:

![New Project Wizard](New_Project_Wizard.png)

There are two possible ways of creating a project:

1.  **New Model**: the approach of building a model with working sections described in this example - see also the [Model Creation](../workflows/model.md) chapter.

2.  **Irregular/Regular Horizon(XY-Plane) Import**: the approach of building a model by importing layer surfaces (horizons) - explained in the [Molasse Basin example](./Molasse_Basin.md) (see also [Import horizons](../workflows/import.md#import-horizons) chapter).

### Set up a new model

To build a new model, choose ++"New Model"++. The New Project Settings window will open:

![EVA - Settings](New_Project_Settings.png)

Set the origin (`X`, `Y`), the horizontal size (width in `X` and `Y` denoted as `Distance` in both cases) and the vertical size (`Depth`).
Don't forget to choose the units (meters `m` or kilometers `km`).

Default values are 0 for `X` and `Y`, 10 for `Distance`, and 5 for `Depth` with `m` as units.

We change the values according to our needs, taking into account the size of the model and the area of interest. The values are:

![EVA - EVA - Settings: Edited](eva_project_settings_edited.png)

and click on ++"Next"++.

### Set up the distribution of working sections

![EVA - EVA - Distribution of Working Sections](eva_distribution_of_working_sections.png)

Here you can set the distribution of [working sections](../glossary.md#working-section):

-   To set the **Azimuth** enter the direction of the model sections in relation to true north: here it is 40 degrees (clockwise from the north)
-   To set the number of sections (**count**) to 1 (we will create only one section); **Spacing** here is the distance between the sections, and it will change to 0 meters if there is only one working section.

Click ++"Preview"++ now:

![EVA - EVA - Distribution of Working Sections: Preview](eva_distribution_of_working_sections_preview.png)

To set the coordinates of the section move the green dot to the point where the section (its northern end point) should begin:

![EVA - EVA - Distribution of Working Sections: Move](eva_distribution_of_working_sections_move.png)

If you click ++rbutton++ on the green dot, you can enter the coordinates (`X` and `Y`) of the edge of the box manually:

<a name="figure-eva_distribution_of_working_sections_move_coordinates"></a>
![EVA - EVA - Distribution of Working Sections: Move using Coordinates](eva_distribution_of_working_sections_move_coordinates.png)

Then click ++"Preview"++ again (**important!**) to see the updated section position:

![EVA - EVA - Distribution of Working Sections: Preview after moving](eva_distribution_of_working_sections_move_preview.png)

and then ++"Finish"++. The result is a new project with a new model consisting of a single working section:

![EVA - EVA - Result](eva_new_project_result.png)

### Import stations

Import stations with ++"File"++ --\> ++"Import"++ --\> ++"Stations"++:

![EVA - Import stations](eva_stations_import.png)

Switch file type to **\[csv \| xyz\] - Comma Separated Values**, select the gravity data file `EVA_Measured_Gravity.csv`, and proceed with ++"Open"++:

![EVA - Imported stations data](eva_imported_station_data.png)

Here you can see the columns imported from the CSV file. If all looks good, finalize the importing with ++"Finish"++.
The measured gravity field will show up on top of the model as a color-coded surface, and stations are visualized as red dots:

![EVA - Imported gravityin 3D View](eva_import_stations_result.png){: style="width:600px"}

### Visualize data

Now select ++"2D View"++ under ++"Add View"++ and you will see the entire section that now needs to be edited:

![EVA - Imported gravity in 2D view](eva_imported_stations_2d_view.png)

Select ++"Add View"++ then ++"2D Maps View"++. Click ++rbutton++ on the map and select **Show Sections**.
This will show the section lines on the map:

![EVA - Imported gravity in 2D Maps View with section shown as lines](eva_imported_stations_2d_maps_view_sections.png){: style="width:600px"}

### Manage model bodies

In order to define and manage [model bodies](../user_interface/object_tree.md#bodies), you need to select the [**2D View**](../user_interface/views.md#2d-view).

A body in a working section is defined by [polygons and vertices](../user_interface/object_tree.md#polygons-and-vertices).

#### Manage vertices

You can manage the vertices of the model in the **2D View**: ++"Add View"++ --\> ++"2D View"++.

The following actions are possible:

-   To **insert (add)** a vertex:
    -   press and hold ++"i"++ (the potential new vertex will be shown as a blue dot)
    -   place the cursor in the desired position
    -   click ++"lbutton"++ to insert a vertex

    ![EVA - Add a vertex](New_Project_Add_Vertex.png)

-   To **move** a vertex:
    -   press and hold ++shift++
    -   place the cursor on the vertex to be moved
    -   click and hold ++"lbutton"++ to select the vertex (the selected cursor will become a red dot)
    -   drag the cursor to move the vertex to the new position
    -   release both ++"lbutton"++ and ++shift++ to keep the vertex in the new position

    ![EVA - Move a vertex](New_Project_Move_Vertex.png)

-   To **delete** a vertex:
    -   press and hold ++"i"++ (the blue dot will appear)
    -   place the blue dot cursor on the vertex to be deleted (make sure to point the cursor on the vertex)
    -   click ++"lbutton"++ to remove the selected vertex

    ![EVA - Remove a vertex](New_Project_Remove_Vertex.png)

-   To **check** or to **edit** the coordinates of any vertex, use the ++"Alpha numeric"++ function:
    -   place the cursor on the vertex
    -   click ++"rbutton"++ on the vertex
    -   select ++"Alpha numeric"++ in the context menu

    ![EVA - Check vertex - Alpha numeric](New_Project_Vertex_Alpha_Numeric.png)

    -   you can edit the new coordinates in the window that appears:

    ![EVA - Input vertex coordinates](New_Project_Input_Vertex_Coordinates.png)

!!! note

    If you have made a mistake, you can undo the last action by pressing ++ctrl+"Z"++ or using the [**Undo** icon](../user_interface/menu.md#undo-redo) ![icon_undo](icon_undo.png) in the [**Tool Bar**](../user_interface/toolbar.md).

More examples on how to manage the vertices can be found in the [Model geometry workflow](../workflows/geometry.md) and in the [Simple Basin example](../examples/Simple_Basin.md).

#### Divide polygons

Bodies in the model are defined by [polygons](../glossary.md#polygon), i.e. by vertices connected with lines.
It is possible to **divide** a polygon into two separate parts by connecting its vertices with a line.

To **connect** vertices and divide a polygon:

-   press and hold ++"d"++
-   place the cursor on the polygon vertex to be connected
-   click and hold ++"lbutton"++ to select this vertex
-   drag cursor to the target polygon vertex (the dashed line will appear connecting the cursor to the initial vertex)
-   place the cursor on the target vertex to be connected

    ![EVA - Connect vertices](New_Project_Connect_Vertices.png)

-   release both ++"lbutton"++ and ++"d"++ to connect the two vertices (a solid black line will appear)
-   this black line will divide the body into two separate parts

    ![EVA - Connected vertices](New_Project_Connected_Vertices.png)

!!! warning

    It is not possible to undo the last action of connecting vertices and dividing a polygon, so be careful when doing this.

See more information in the [Polygons and vertices chapter](../user_interface/object_tree.md#polygons-and-vertices).

#### Name bodies

After inserting vertices and dividing polygons to design the bodies, their names can be chosen individually, e.g, here the proposed names are "A", "B", "C", "D", "E", "F", "G":

![EVA - Naming bodies](./eva_naming_bodies.png)

To rename a body, open [**Body Manager Tab**](../user_interface/body_manager.md), double click ++lbutton++ on the body name and enter the new name:

![EVA - Rename body](New_Project_Rename_Body.png)

!!! note

    Naming bodies is not mandatory, but it is highly recommended to do so, as it helps to identify the bodies in the model and to assign them to the polygons later.
    It is also possible to rename the bodies later, and use more logical names, e.g. "Upper_Crust", "Lower_Crust", "Mantle", etc.

#### Add bodies

Now we need to add the bodies to the model so that they can be assigned to the prepared polygons.

To add a new body:

-   Open the [**Body Manager Tab**](../user_interface/body_manager.md) and click on ++"Add Body"++:

![EVA - Add body](eva_add_body.png)

-   Enter the name of the body here (in the example above "E") and click ++"OK"++
-   Repeat the step for all bodies you want to add.

#### Assign polygons to bodies

Now we need to assign the existing polygons to the newly created bodies.

Double click ++lbutton++ on the desired polygon in the working section to select it.
The polygon will be highlighted in red:

![EVA - Select polygon](eva_select_polygon.png)

Then right-click on it again to open the context menu and select ++"Set Body(s)"++ and choose the desired body name (here "B"):

![EVA - Set body](eva_set_body.png)

Once the body is assigned, the body change its color according to the **Body Manager Tab**:

![EVA - Set body - Result](eva_set_body_result.png)

!!! warning "Important"

    Always double-click on the polygon again to deselect it (so that the red contour disappears).

Repeat the steps for all bodies:

![EVA - All bodies are set](eva_all_bodies_set.png)

#### Assign body properties

To assign a new parameter (e.g. density) to the new body, first you need to add this parameter in the **Body Manager Tab**.
To do this, click on ++"Add parameter"++ in the **Body Manager Tab**:

![EVA - Add a parameter](eva_add_parameter.png)

Then:

-   click on the desired body in the **Body Manager Tab** (here we take body "A") and look for the column with the parameter to be assigned (here "Density")
-   click on the value (by default 0.0) to insert a new density (here 2.65 t/m$^3$):

![EVA - Assign parameter - Density](eva_assign_parameter.png)

Repeat the steps for all bodies except the reference body:

![EVA - All parameters are assigned](eva_all_assigned_parameters.png)

<!-- !!! example "Intermediate step" -->
### Set up section mirrors

!!! note

    This is an intermediate step, which is not necessary for the final model, but it is useful to prepare a pseudo-3D model which we can visualize in the 3D View and to test the 2D gravity representation.
    In order to create a proper 3D model, you need to create several working sections as explained in the [next sections](#extend-the-model).

At this stage it is possible to use [**Section Mirrors**](../user_interface/object_tree.md#sections) functionality. With this, you can create a pseudo-3D model with the geometry of the existing 2D working section by mirroring the section in the third dimension.
For example, in **Section Mirrors** set "mirror +" and "mirror -" to a position that is far enough to the left and right of the plane (in figure below 200 000 meters):

![EVA - Add section mirrors](eva_add_section_mirrors.png)

Setting up mirrors only makes sense:

1.  if you want to test a 2D gravity representation
    or
2.  if different independent partial geometries are to be "united" in the model.

See more information on the 2D gravity representation in the [Simple Basin example](./Simple_Basin.md#2d-interpretation).

### Triangulate the model

Now triangulate the model, click on **Triangulate Sections** icon ![icon\_triangulation](icon_triangulation.png) or use ++"Edit"++ --\> ++"Model - Triangulation"++:

![EVA - Triangulation dialogue](eva_triangulation_dialogue.png)

Simply proceed with ++"Finish"++. **IGMAS+** will show the triangulated model domain:

![EVA - Triangulation result](eva_triangulation_result.png)

Click on the **Clip to model** icon ![Clip to model icon](icon_cliptomodel.png) to clip the view to the model bounds:

![EVA - Triangulation result - Clip to model](eva_triangulation_result_model_view.png){: style="width:600px"}

### Calculate anomalies

Once the project has a triangulated model, stations are imported (or created) and parameters are assigned, it is possible to calculate the anomalies.
Just use the **Calculate Anomalies** icon ![icon\_calculate](icon_calculate.png) or ++"Tools"++ --\> ++"Calculate Anomalies"++.

![EVA - Calculate anomalies dialogue](eva_calculate_anomalies_dialogue.png)

Here we are interested in the default vertical ($G_z$) component, "calc Gz". Check it and click ++"Finish"++ to start calculations.

!!! note

    Warning message "Susceptibilities not defined" can be ignored, as we are not using magnetic data in this example.

The calculated field can be visualized in the **3D View** instead of the measured field:

-   in the **Object Tree** find the **Fields** section
-   find the **Calculated** field, e.g. `calc Gz`
-   click ++rbutton++ on it and select **Show in 3D** in the context menu:

![Eva - Show calculated field in 3D View](eva_calculated_field_show_in_3D.png)

The calculated field shown in the **3D View** will look like this:

![EVA - Calculation result](eva_calculation_result_model_view.png){: style="width:600px"}

!!! note

    The measured and calculated fields share the same color scale, so when the range is different, the colors look very different.

### Extend the model

In order to extend the model, we have to create additional working sections that will be used in a proper triangulation of the model.
It is important that the topology of the neighboring sections must be consistent, i.e. the bodies in the neighboring sections must have the same names and [body part indices](#check-body-part-indices).
This can be simply achieved by copying the existing working section and shifting it to a new position, as explained in the [next section](#copy-and-shift-sections).
If topology is not consistent, you have to [use section mirrors](#use-section-mirrors).

#### Copy and shift sections

The quick and easy way to extend the model is to copy the working section and move it to a new position, e.g. to extend the model in the direction perpendicular to the working section plane.

For that you can use the **Copy and Shift** functionality:

-   Select the working section in the **Object Tree**
-   Click ++rbutton++ on the section object and select **Copy and Shift** in the context menu:

    ![EVA - Copy and shift section](eva_section_copy_and_shift.png){: style="width:300px"}

-   In the **Copy and Shift** dialogue, set the shift values in the model units (here in meters) to the desired value, e.g. *15000*:

    ![EVA - Copy and shift section - Input](eva_section_copy_and_shift_input.png)

The working section will be copied and moved to the new position, which is 15 000 meters away from the original section in the direction of the azimuth (here 40 degrees clockwise from the north):

![EVA - Copy and shift section - Result](eva_section_copy_and_shift_result.png){: style="width:600px"}

For a deeper understanding, we will now continue with an extended model that already consists of 5 working sections obtained by copy-and-shift of the original working section.

The model has a rather complicated structure of layers and bodies:

<a name="figure-eva_model_with_5_sections"></a>
![EVA - Model with 5 sections](./eva_model_with_5_sections.png)

!!! note

    Make sure to check that names and densities are properly assigned to the bodies.

#### Check body part indices

It has to be checked whether bodies with the same color can also be distinguished with regard to the model [topology](../glossary.md#topology); this is of decisive importance for the subsequent triangulation and is the cause of many potential errors.

Body part indices are used to assign the same body definition to geometrically separated bodies.

For example, we check the body "Upper\_Crust\_1" (violet color on the [figure above](#figure-eva_model_with_5_sections)):

-   Select the section (here section "2") in the **Object Tree**
-   Click ++rbutton++ on the section object and select **View Section/2D** in the context menu
-   In the **2D View**, double click ++lbutton++ on the corresponding polygon (here "Upper\_Crust\_1") to select it (red contour will appear around the polygon):

    ![EVA - Select "Upper Crust" body](./eva_select_upper_crust_body.png)

-   click ++rbutton++ on it and select ++"Set Body Part Index"++ in the context menu

    ![EVA - Set Body Part Index](./eva_set_body_part_index.png)

-   a window appears where you can type in the body part index (here it is already set to "NW" as North-West):

    ![EVA - Set Body Part Index - Input](eva_type_body_part_index.png){: style="width:400px"}

-   if the body part index was not set, it would have to be inserted **here and now**
-   click ++"OK"++ to accept the changes
-   repeat this step for all bodies.

#### Use section mirrors

The model with the several already existing cross sections can now be "artificially" extended into the northeast and southwest direction e.g. to avoid edge effects, by applying **section mirrors** similar to how it was introduced [earlier](#set-up-section-mirrors):

-   Click on the south-westernmost working section (section "1" here) and switch to [**Property Editor Tab**](../user_interface/property_editor.md):

    ![EVA - Section properties](eva_section_properties.png){: style="width:400px"}

    The options "mirror + = 0.0" and "mirror - = 100 000" (in meters) means that Section 1 is mirrored by 100 000 meters in the "negative" direction.
    No mirror is set in the positive direction, as nothing needs to be mirrored (remember the definition of the model area in [this figure](#figure-eva_distribution_of_working_sections_move_coordinates)).

-   For the very same reason, accordingly, select "mirror + = 100 000" and "mirror - = 0.0" for the last working section (section "5" here).

The intermediate result of the model extension in 3D view is shown below:

![EVA - Model extension result in 3D](./eva_model_extension_result_3d_view.png){: style="width:600px"}

#### Re-calculate anomalies

In order to recalculate the anomalies, click **Re-Calculate Anomaly** icon ![icon\_recalculate](../media/icon_recalculate.png) or use ++"Tools"++ --\> ++"Re-Calculate Anomaly"++.

As a result of the model extension by adding section mirrors to the outer vertical cross sections in the "2D Maps View" (here shown without the "residual map") we see the 2D (pseudo-3D) model gravity field on the right side:

![EVA - Fields in the 2D Maps View after the model extension](./eva_2d_maps_view.png)

The outer cross sections in the southwest and northeast are not present in the above figure.

#### Extend the model in the south-west direction

In the next step we show how to extend the model to the south-west of the study area.

The existing model here is extended by 3 vertical planes but with a different geometry compared to south-westernmost working section "1". Similarly, we can also extend the existing model in the northeast direction.

Copy working section "1" by moving its copy 15 000 m in a south-east direction:

-   Select the section in the **Object Tree**
-   Click ++rbutton++ on the section object and select **Copy and Shift** in the context menu:
-   In the **Copy and Shift** dialogue, set the shift values to *-15000* (in meters)

The working section "6" appears (here renamed to "South1-new"), in the **2D Maps View** it looks like this:

![EVA - New working sections](./eva_sw_extension_new_working_sections.png)

Note that the mirrors were set between the "South1-new" and "Central1" working sections.

The new geometry is implemented on it, which is also used for the later working sections "South2-new" and "South3-new". In this example, we change only the 5 bodies of the lower crust (LC):

-   With ++"Add Body"++ in the **Body Manager Tab** the 5 new bodies are first defined
-   Then the bodies are named: "South-LC1" , "South-LC2", "South-LC3", "South-LC4" and "South-LC5"
-   Densities can also be added at the same time. Here, the density was set to 2.9 t/m$^3$.

The resulting extended model in the **3D View** looks like this:

![EVA - Model SW extension result in 3D](./eva_model_sw_extension_result_3d_view.png){: style="width:600px"}

The similar procedure must be used in order to extend the model also into the north-east direction. Note that the bodies must have different names.

The final result of the modelling with 18 working sections created in a similar fashion is shown in the [figure](#figure-eva_3d_view_sections) in the beginning of this example.

References { data-search-exclude }
----------------------------------

\\bibliography

Technical Information
=====================

???+ quote
Simple things should be simple, complex things should be possible.
― *Alan Kay*

Preface
-------

The **Technical Information** chapter provides detailed insights into the core algorithms and calculation methods employed by **IGMAS+**. It also addresses main file formats, units, coordinate system and projections.

Topics
------

::: {.grid .cards markdown=""}
-   :fontawesome-solid-puzzle-piece: [**Algorithms**](./algorithms.md)

    ------------------------------------------------------------------------

    Core **IGMAS+** algorithms explained in detail.

-   :fontawesome-solid-globe: [**Coordinate System**](./coordinates.md)

    ------------------------------------------------------------------------

    Units, coordinate system and projections used in **IGMAS+**.

-   :fontawesome-solid-file-circle-question: [**File Formats**](./files.md)

    ------------------------------------------------------------------------

    Main file formats used in **IGMAS+**.
:::

Algorithms
==========

In this chapter, we describe the algorithms used in **IGMAS+** for the calculation of potential fields interpolation, triangulation, and isosurface extraction.

Anomaly Calculation
-------------------

### Gravitational Constant

The default of the [**gravitational constant**](../glossary.md#gravitational-constant) used for any gravitational calculation is $G$ = 6.67384 $\cdot$ 10$^{-11}$ m$^3$ kg$^{-1}$ s$^{-2}$.

Due to compatibility reasons, mantissa of this constant can be changed by user via the property **Triangle Kernel** of the **Model** entry in the **Object Tree**, in the **Property Editor Tab**:

![Set gravitational constant](set_gravitational_constant.png)

!!! warning
Modification of the gravitational constant is valid for the **current session only**. Be careful, you might turn the gravitational anomalies into nonsense!

### Calculation of Anomalies of Triangulated Polyhedrons

This section lists all available algorithms for calculation of the effect for triangulated polyhedrons and some background on how to improve performance for interactivity.

For interactive work it is essential that after model changes the recalculation of the model is done immediately. It is important that this performance is achieved not only when a single point in the model is altered, but also when bigger parts are changed at once (e.g., several triangles). The basis for a fast recalculation is a changed-only recalculation (fortunately possible in gravity and magnetics):

1.  Identify parts of the model which have been changed
2.  Subtract these effects from the actual field
3.  Add the newly calculated effects.

One important aspect is the speed of the calculation of the gravity effect for triangles (single- and multi-z surfaces). This can be achieved, for example, by parallelizing calculations on all available CPU-cores and/or GPU via OpenCL (Alvers et al. 2014[@AlversGoetzeEtAl2014]). Another way of speeding up the calculations is to approximate them. [Gaussian Quadrature](../glossary.md#gaussian-quadrature) can approximate the exact calculation of the surface integrals over the triangles, if certain conditions hold. Approximations have to be applied carefully in order to prevent errors. For the recalculation of the model (after model changes) this is often less critical. The introduced error of subtracted and newly added calculation are quite often very similar and cancel out each other at least partly. Parallelization and approximation can obviously be combined. Depending on the available hardware one should decide which algorithms should be applied.

**IGMAS+** offers 6 different algorithms for calculation of the effect for triangulated polyhedrons:

1.  **Triangle Kernel (Multicore):** Multicore implementation of the algorithm of Götze and Lahmeyer (1988)[@GoetzeLahmeyer1988].

!!! note
Triangle Kernel (OpenCL) algorithm is the default option.

2.  **Triangle Kernel (OpenCL):** OpenCL implementation of the algorithm of Götze and Lahmeyer (1988)[@GoetzeLahmeyer1988].

!!! warning
Triangle Kernel (OpenCL) algorithm requires **double precision**, check if your graphics card supports it.

!!! warning
Calculation of the following potential fields is not supported with Triangle Kernel (OpenCL):
- Magnetic: $MAG_{totr}$
- Magnetic gradients: $M_{xx}$, $M_{yy}$, $M_{zz}$, $M_{xy}$, $M_{zx}$, $M_{zy}$
- Geoid

3.  **Gaussian (Approximation) Quadrature (Multicore):** Multicore implementation of triangle approximation using 3-points Gaussian Quadrature.

!!! warning
Calculation of the following potential fields is not supported with Gaussian (Approximation) Quadrature (Multicore):
- Magnetic gradients: $M_{xx}$, $M_{yy}$, $M_{zz}$, $M_{xy}$, $M_{zx}$, $M_{zy}$
- Geoid

4.  **Gaussian (Approximation) Quadrature (OpenCL):** OpenCL implementation of triangle approximation using 3-points Gaussian Quadrature.

!!! warning
Gaussian (Approximation) Quadrature (OpenCL) algorithm requires **double precision**, check if your graphics card supports it.

!!! warning
Calculation of the following potential fields is not supported with Gaussian (Approximation) Quadrature (OpenCL):
- Magnetic: $MAG_{totr}$
- Magnetic gradients: $M_{xx}$, $M_{yy}$, $M_{zz}$, $M_{xy}$, $M_{zx}$, $M_{zy}$
- Geoid

5.  **Mix exact and approximated (Multicore)**: This algorithm mixes exact and approximate calculations of Gaussian Quadrature using Multicore.
    Two options are taken into account to select the exact calculation of the effect triangles:

-   a)  a threshold for maximum triangle areas (in model units)

-   b)  an error threshold for automated error estimation (in mGal), minDepth (in model units).
        That means for deeper parts of the model the calculation can be approximated by Gaussian Quadrature.

!!! warning
Calculation of the following potential fields is not supported with Mix exact and approximated (Multicore):
- Magnetic gradients: $M_{xx}$, $M_{yy}$, $M_{zz}$, $M_{xy}$, $M_{zx}$, $M_{zy}$
- Geoid

6.  **Spherical Triangle Kernel (Multicore)**: Multicore implementation of the algorithm of Götze and Lahmeyer (1988)[@GoetzeLahmeyer1988] on a sphere.
    **IGMAS+** will subdivide large triangles into smaller triangles so that the geometry can be projected onto the curvature of the Earth without accuracy problems.
    The user has to define the maximum length of the triangles (in **model units**, the default value is 10).

!!! note
Numerical experiments indicate that a maximum length of 10 km gives satisfying results.

!!! note
The coordinate [projection](./coordinates.md#projections) of the project is used for spherical calculations:
- if the projection is known (e.g. [UTM](./coordinates.md#projection-universal-transverse-mercator), [GK](./coordinates.md#projection-gauss-krueger), [EPSG](./coordinates.md#projection-european-petroleum-survey-group-epsg)), it will be used to exactly calculate the 3D position of the vertices and stations
- if the projection is unknown, a simple sphere will be assumed having a **radius of 6371 km**.

!!! warning
Interactive modelling is not supported with the Spherical Triangle Kernel (Multicore) algorithm.

#### Change Triangle Kernel Algorithm

To change the Triangle Kernel algorithm in **IGMAS+** use **Property Editor Tab** of the **Model** entry from the **Object Tree**, click ++"..."++ button near **Algorithm** property in the **Triangle Kernel** category:

![Set triangle kernel algorithm](set_triangle_kernel_algorithm.png)

Alternatively, open the wizard using ++"Research"++ --\> ++"Wizard [Triangle algorithm](#triangle-algorithm)"++.

Select between the available options but take into account the warnings and instructions for each of the algorithm:

![Select triangle kernel algorithm](select_triangle_kernel_algorithm.png)

!!! warning
Take into account the warnings and instructions listed in the window for each algorithm.

#### Change OpenCL Configuration

[OpenCL](../glossary.md#opencl-open-computing-language) algorithms require **double precision** calculation, however not all graphics card support it.
To change it, use ++"Research"++ --\> ++"Plugin"++ --\> ++"OpenCL Configuration"++:

![OpenCL configuration](opencl_configuration.png)

Notice the difference between different graphics cards: Intel Iris Xe doesn't support double precision operations, while NVIDIA RTX A2000 supports it:

=== "Intel Iris Xe"

    ![](opencl_configuration_intel_iris_xe.png)

=== "NVIDIA RTX A2000"

    ![](opencl_configuration_nvidia_rtx_a2000.png)

### Calculation of Invariants, Horizontal Gradient and Horizontal Directive Tendency

The invariants $Inv_0$, $Inv_1$, $Inv_2$ are combinations of gravity gradients components, which are the second derivatives of the potential.
Interpretation of invariants can give more information about the high-frequency part of the anomaly field.
Calculations of invariants and gradients are based on Pedersen & Rasmussen (1990)[@PedersenRasmussen1990].

$$\begin{split}
Inv_0 &= G_{xx} + G_{yy} + G_{zz}\\
Inv_1 &= G_{xx} G_{yy} + G_{yy} G_{zz} + G_{xx} G_{zz} - G_{xy}^{2} - G_{zy}^{2} - G_{zx}^{2}\\
Inv_2 &= G_{xx} (G_{yy}  G_{zz} - G_{yz}^{2}) + G_{xy} (G_{yz} G_{xz} - G_{xy} G_{zz})\\
 &  +  G_{xz} (G_{xy}G_{yz} - G_{xz} G_{yy})\\
\end{split}$$

The horizontal gradient and the horizontal directive tendency are given by:

$$\begin{split}
HG_z &= \sqrt{G_{zx}^{2} + G_{zy}^{2}}\\
HDT &= \sqrt{(G_{xx} - G_{yy})^{2} + (2G_{xy})^{2}}\\
\end{split}$$

### Calculation of Anomalies of Voxels

#### Anomalies of Mass Points (Homogeneous Spheres)

Each [voxel](../glossary.md#voxel) of the [voxel cube](../glossary.md#voxel-cube) is approximated by a [mass point](../glossary.md#mass-point) - a sphere with its volume being identical to the volume of the voxel.

Let us define the following variables:

-   $R$ -- radius of the sphere
-   $\rho$ -- [mass density](../glossary.md#mass-density) of the sphere
-   $r = \sqrt{x^2 + y^2}$ -- horizontal distance between the centre of the sphere and the station
-   $x$, $y$, $z$ -- distance components between the centre of the sphere and the station
-   $G$ -- [gravitational constant](#gravitational-constant)

The following equations are used for the calculation of the voxel effects:

**Components of the gravity** (all to be multiplied by the [gravitational constant](#gravitational-constant)):

$$g_x = \frac{4}{3} \pi \rho R^3 \frac{x}{(r^2 + z^2)^{3/2}}$$

$$g_y = \frac{4}{3} \pi \rho R^3 \frac{y}{(r^2 + z^2)^{3/2}}$$

$$g_z = \frac{4}{3} \pi \rho R^3 \frac{-z}{(r^2 + z^2)^{3/2}}$$

**Gradients of the gravity** (all to be multiplied by the [gravitational constant](#gravitational-constant)):

$$V_{xx} = \frac{4}{3} \pi \rho R^3 \frac{r^2 + z^2 - 3x^2}{(r^2 + z^2)^{5/2}}$$

$$V_{yy} = \frac{4}{3} \pi \rho R^3 \frac{r^2 + z^2 - 3y^2}{(r^2 + z^2)^{5/2}}$$

$$V_{zz} = \frac{4}{3} \pi \rho R^3 \frac{r^2 - 2z^2}{(r^2 + z^2)^{5/2}}$$

$$V_{xy} = \frac{4}{3} \pi \rho R^3 \frac{-3xy}{(r^2 + z^2)^{5/2}}$$

$$V_{zx} = \frac{4}{3} \pi \rho R^3 \frac{3xz}{(r^2 + z^2)^{5/2}}$$

$$V_{zy} = \frac{4}{3} \pi \rho R^3 \frac{3yz}{(r^2 + z^2)^{5/2}}$$

**Induced magnetic field**:

$$M_x = \frac{4}{3} \pi \sigma |H| R^3 \frac{3x(H_x x + H_y y + H_z z) - H_x (r^2 + z^2)}{(r^2 + z^2)^{5/2}}$$

$$M_y = \frac{4}{3} \pi \sigma |H| R^3 \frac{3y(H_x x + H_y y + H_z z) - H_y (r^2 + z^2)}{(r^2 + z^2)^{5/2}}$$

$$M_z = \frac{4}{3} \pi \sigma |H| R^3 \frac{3z(H_x x + H_y y + H_z z) - H_z (r^2 + z^2)}{(r^2 + z^2)^{5/2}}$$

$$M_{total} = \frac{4}{3} \pi \sigma |H| R^3 \frac{3(H_x x + H_y y + H_z z)^2 - (r^2 + z^2)}{(r^2 + z^2)^{5/2}}$$

where:
- $H_x$, $H_y$, $H_z$ -- direction of the external field (components of the unit vector)
- $|H|$ -- magnitude of the external field
- $\sigma$ -- [magnetic susceptibility](../glossary.md#magnetic-susceptibility)

Interpolation
-------------

### Block Average Filter

The Block Average Filter is applied in when [importing horizons](../workflows/import.md#import-horizons) with regularly spaced points.
If the point data are highly oversampled (i.e. have too high number of points), they have to be down-sampled during import.

For that, each imported point is assigned to the nearest regular vertex. Finally, for each vertex the average of all 3 coordinates ($x$, $y$ and $z$) is calculated, and only these average values are stored and used.

!!! note
The averaging within the vertex surrounding area is calculated successively during import procedure, so that the required memory does not depend on the number of the points to be imported.

### Mundry interpolation

The interpolation algorithm based on the work of Mundry (1970)[@Mundry1970] is used when [importing horizons](../workflows/import.md#import-horizons) with irregular distribution of points.

Triangulation
-------------

[Triangulation](../glossary.md#triangulation) is a subdivision of a planar object into triangles (or simplices in a higher-dimension geometry).

### Triangle Orientation

A triangle has **right** and a **left** hand side, depending on the order of the vertex definition:

![image](triangle_orientations.png)

Each triangulated surface has one body on its right and another body on its left hand side.

???+ note "Remember the **Right Hand Rule:**"
If the fingers follow the order of the vertices (1 --\> 2 --\> 3), the thumb shows the direction of the positive normal (the right hand side).

    <figure markdown="span">
      ![Right Hand Rule. Image is taken from the [GEO1004 course of TU Delft](https://3d.bk.tudelft.nl/courses/backup/geo1004/2020/hw/01/)](../media/right_hand_rule.png){ width="400" }
      <figcaption>Right Hand Rule. Image is taken from the [GEO1004 course of TU Delft](https://3d.bk.tudelft.nl/courses/backup/geo1004/2020/hw/01/).</figcaption>
    </figure>

!!! note
Usually the user should not be concerned about the triangle orientation - it will be chosen correctly by **IGMAS+**.
However, if a triangulation is imported from another program (e.g. GOCAD), it might be necessary to think about the orientation.

The **Object Tree** shows the **orientation** of each interface: it shows two body names for each single interface, which are separated by the body separator **\< \>**. The first name (left) specifies the name of the body on the left hand side, the second name (right) the body on the right hand side:

![image](object_tree_orientation_of_interfaces.png)

Extraction of Isosurfaces from Voxel Cubes
------------------------------------------

A [voxel cube](../glossary.md#voxel-cube) may be transformed into [triangulated](../glossary.md#triangulation) [isosurfaces](../glossary.md#isosurface) using the **Voxel Cube Isofurface Extraction Wizard**. Use icon ![Marching Cube icon](mc_icon.png) to open it:

![Voxel Cube Isofurface Extraction Wizard](isosurface_creation_wizard.png)

You can set the limits for the voxel cell values to be included (**Lower Value** for lower limit and **Upper Value** for upper limit).\
It is also possible to choose, whether the resulting isosurface bodies are closed at the model boundaries or not (**Close the body on the sides** checkbox).

Using **Mesh Simplification** checkbox helps reducing the number of triangles after geometry extraction.

!!! note
The function uses the [Marching Cubes algorithm](../glossary.md#marching-cubes).

References { data-search-exclude }
----------------------------------

\\bibliography

Coordinate System
=================

Units
-----

Model units may be either meters (m, default) or kilometers (km), this can be selected when [creating a model](../workflows/model.md#model-creation).
You can check the units using **Preferences** (++"Edit"++ --\> ++"Preferences"++), in the **Units Tab**:

![](preferences_units.png)

**IGMAS+** is using the following coordinate system ([ENU system](../glossary.md#enu-system)):

-   x positive to the **E**ast
-   y positive to the **N**orth
-   z positive to the top (**U**p)

![Coordinate System](coordinate_system.png)

Projections
-----------

For the modelling it is not necessary to use a special geographical projection, the only prerequisite is an **orthogonal coordinate system** - which may be any projection.

However, if you plan to visualize the model and the anomaly fields using [WorldWind](../glossary.md#worldwind), you have to specify the correct projection.

Use the **Property editor** tab of the **Object Tree** entry **Model** to get the projection definition:

![image](projection_settings.png)

### Projection: unknown

Use this default setting, if you don't know the projection being used, if you use local coordinates (not referred to world coordinates) or if you are not interested in visualization with [WorldWind](../glossary.md#worldwind).

### Projection: Universal Transverse Mercator

The [Universal Transverse Mercator (UTM)](../glossary.md#utm-universal-transverse-mercator) projection uses the [Hayford Ellipsoid](../glossary.md#hayford-ellipsoid)/

The parameters are: **Ref. meridian**, **UTM Zone**, **Hemisphere**, **East - Delta** and **North - Delta**:

![Projections settings: Universal Transverse Mercator (UTM)](projection_settings_UTM.png)

**Ref. meridian:**

The central meridian (in **IGMAS+** called reference meridian) varies between -177° and +177° according to the table:

  **UTM Zone**   **Central Meridian**   **UTM Zone**   **Central Meridian**
  -------------- ---------------------- -------------- ----------------------
  1              -177° W                31             3° E
  2              -171° W                32             9° E
  3              -165° W                33             15° E
  4              -159° W                34             21° E
  5              -153° W                35             27° E
  6              -147° W                36             33° E
  7              -141° W                37             39° E
  8              -135° W                38             45° E
  9              -129° W                39             51° E
  10             -123° W                40             57° E
  11             -117° W                41             63° E
  12             -111° W                42             69° E
  13             -105° W                43             75° E
  14             -99° W                 44             81° E
  15             -93° W                 45             87° E
  16             -87° W                 46             93° E
  17             -81° W                 47             99° E
  18             -75° W                 48             105° E
  19             -69° W                 49             111° E
  20             -63° W                 50             117° E
  21             -57° W                 51             123° E
  22             -51° W                 52             129° E
  23             -45° W                 53             135° E
  24             -39° W                 54             141° E
  25             -33° W                 55             147° E
  26             -27° W                 56             153° E
  27             -21° W                 57             159° E
  28             -15° W                 58             165° E
  29             -9° W                  59             171° E
  30             -3° W                  60             177° E

**UTM Zone:**

The UTM Zone varies between 1 and 60 and is linked to the central meridian via the following equation:

$$\mathrm{Zone} = (\mathrm{Central~Meridian} + 183)/6$$

UTM Zones 1 to 30 cover the western hemisphere (west of Greenwich).
UTM Zones 31 to 60 cover the eastern hemisphere (east of Greenwich).

Each UTM zone spans 6 degrees of longitude, with the central meridian located in the middle of the zone.

**Hemisphere:**

Either North or South (Default: North)

North and South UTM Zones refer to the division of UTM zones based on the hemisphere:

-   UTM North (N) Zones:
    -   Cover the northern hemisphere (from the equator to 84°N).
    -   Zone numbers range from 1N to 60N.
    -   Latitude values are positive, starting at 0 m at the equator and increasing northward.
-   UTM South (S) Zones:
    -   Cover the southern hemisphere (from the equator to 80°S).
    -   Zone numbers range from 1S to 60S.
    -   Latitude values are negative, starting at 0 m at the equator and increasing southward.
    -   To avoid negative coordinates, false northing of 10,000,000 meters is applied at the equator.

**East Delta:**

This value (in meters, default is 0) will be added to the model $x$-coordinates before transformation into geographical coordinates.

**East Delta:**

This value (in meters, default is 0) will be added to the model $y$-coordinates before transformation into geographical coordinates.

### Projection: Gauss-Krueger

The [Gauss-Krueger](../glossary.md#gauss-krueger-coordinate-system) (Gauß-Krüger) projection uses the [Bessel Ellipsoid](../glossary.md#bessel-ellipsoid).

The system is similar to the [UTM (Universal Transverse Mercator)](#projection-universal-transverse-mercator) system but the central meridians of the Gauss-Krueger zones are only 3° apart, as opposed to 6° in UTM.

The parameters are: **Ref. meridian**, **Hemisphere**, **East - Delta** and **North - Delta**:

![Projections settings: Gauß-Krüger (GK)](projection_settings_GK.png)

Zones of the Gauss-Krueger projections are defined by the central meridian (parameter **Ref. meridian**).
Each GK zone spans 3 degrees of longitude, with the central meridian located in the middle of the zone.

**Ref. meridian:**

The central meridian (in **IGMAS+** reference meridian) varies between -177° and +177°.

**Hemisphere:**

Either North or South (Default: North)

**East Delta:**

This value (in meters, default is 0) will be added to the model $x$-coordinates before transformation into geographical coordinates.

**East Delta:**

This value (in meters, default is 0) will be added to the model $y$-coordinates before transformation into geographical coordinates.

### Projection: European Petroleum Survey Group (EPSG)

The [European Petroleum Survey Group (EPSG)](../glossary.md#epsg-european-petroleum-survey-group) established a system to define and access all geodetic coordinate projections used worldwide.
The website <http://epsg.io> may be used to find the EPSG code for a special projection.

The parameters are: **EPSG - Code** and **Proj4 Definition**:

![Projections settings: European Petroleum Survey Group (EPSG)](projection_settings_EPSG.png)

By specifying the appropriate EPSG code code in the field **EPSG - Code** you can set up any projection.

Examples:

  ---------------------------------------------------------------------------------------------------------------
  **EPSG code**   **Description**
  --------------- -----------------------------------------------------------------------------------------------
  3857            WGS 84 / Pseudo-Mercator - Spherical Mercator, Google Maps, OpenStreetMap, Bing, ArcGIS, ESRI

  31466           DHDN, Gauß-Krüger Zone 2, Germany

  31467           DHDN, Gauß-Krüger Zone 3, Germany

  31468           DHDN, Gauß-Krüger Zone 4. Germany

  24819           PSAD56, UTM Zone 19, Chile
  ---------------------------------------------------------------------------------------------------------------

!!! note
If the EPSG code is used, the model coordinates have to be in **meters**, and there is no additional offset for the locations possible.

#### PROJ.4 Definition

[PROJ](../glossary.md#proj) (formerly PROJ.4) is an open-source software library used for cartographic projections and coordinate transformations.
The ideas is that each projection may be defined by a number of parameters and thus described by a single line definition using [PROJ](https://proj.org) syntax.

The PROJ definition is given for each projection on the [EPSG website](https://epsg.io), in addition it is always shown in the **IGMAS+** EPSG projection settings (see the previous figure).
You may alter the value under **Proj4 Definition** to define your own projection. (the **EPSG - Code** value is then set to 0).

???+ example
The Proj4 definition of the [EPSG code 24819](https://epsg.io/24819) (UTM zone 19N) is:

    ```plaintext
    +proj=utm +zone=19 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs
    ```

See also [this archive article](https://live.osgeo.org/archive/11.0/en/overview/proj4_overview.html) for more information.

#### Mercator projection

The Mercator projection is the easiest way to transfer spherical (geographical) coordinates into plane (orthogonal) coordinates.
Use the following transfer functions - they are exact and easy to use:

Forward (spherical into orthogonal):

$$x = (\lambda - \lambda_0)$$

$$y = 0.5 \cdot \ln \left(\dfrac{1+\sin(\varphi)} {1-\sin(\varphi)}\right)$$

Here $\lambda$ and $\varphi$ are given in radians. $x$ and $y$ are normalized with the Earth radius, so multiply x and y with 6378137 to get meters or 6378.137 to get kilometers.

Reverse (orthogonal into spherical):

$$\lambda = \lambda_0 + x$$

$$\varphi = \arcsin (\tanh(y))$$

!!! note
The Mercator projection (used for rendering maps in Google Maps, OpenStreetMap, Bing etc.) is most accurate in the area of low latitudes, it cannot be used in polar regions.

The EPSG code of this projection is 3857.

### Projection: GeoTools Projection

GeoTools is another open-source Java library designed for geospatial data processing. It supports projections and coordinate transformations by leveraging standards like OGC and EPSG codes. GeoTools is widely used in [GIS](../glossary.md#gis-geographic-information-system) applications to handle vector and raster data, offering robust tools for reprojecting spatial data between [coordinate reference systems (CRS)](../glossary.md#crs-coordinate-reference-system).

There is only one parameter, **EPSG - Code**:

![Projections settings: GeoTools](projection_settings_GeoTools.png)

However, it is possible to provide information about the custom projection using the [WKT format](../glossary.md#wkt-well-known-text) by loading files with `*.wrt` and `.prj` extensions (++"Import WKT"++ button).

???+ example
A typical WKT string for WGS84 ([EPSG:4326](https://epsg.io/4326)) looks like this:

    ```plaintext
    GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563]],
    PRIMEM["Greenwich",0],
    UNIT["degree",0.0174532925199433]]
    ```

File Formats
============

File extensions
---------------

File extensions used in **IGMAS+** together with related functionality are presented in the following summary table:

  -----------------------------------------------------------------------------------------------------------------------------------------
  Function ↓ / Format →          `.csv`   `.grd`   `.igmas`   `.meta`   `.model`   `.obj`   `.stations`   `.ts`   `.vxo`   `.xml`   `.xyz`
  ----------------------------- -------- -------- ---------- --------- ---------- -------- ------------- ------- -------- -------- --------
  Import project                                      \+                                                                     \+    

  Import model                                                  \+         \+        \+                    \+                \+    

  Export model                                                             \+                                                      

  Import stations                  \+                                                           \+                           \+       \+

  Export stations/anomaly          \+       \+                                                  \+                                    \+

  Import horizon                   \+       \+                                                                                        \+

  Import interface                                              \+         \+        \+                    \+                \+       \+

  Export interface                 \+                                      \+                                                         \+

  Import borehole                  \+                                                                                              

  Export borehole                  \+                                                                                                 \+

  Import VoxelCube                                                                                                  \+             

  Export VoxelCube                                                                                                  \+             

  Export Body Parameter Table      \+                                                                                              

  Export StressMap                 \+                                                                                              

  Import lines                     \+                                                                               \+                \+

  Import PointSet                  \+                                                                               \+                \+
  -----------------------------------------------------------------------------------------------------------------------------------------

Extension Descriptions
----------------------

Brief descriptions of file extensions are given the following summary table:

  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  Extension     Format                                       Description
  ------------- -------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  `.csv`        Comma Separated Value, ASCII file            Standard format for point data

  `.grd`        Geosoft Grid file                            Geosoft Grid is a binary format for storing raster data typically used for geophysical and elevation data

  `.igmas`      **IGMAS+** project file (deprecated)         Old format for storing projects

  `.meta`       **IGMAS+** model file (deprecated)           Old format for storing models and interfaces

  `.model`      **IGMAS+** model file, XML-based             Holds an internal [DTD](../glossary.md#dtd-document-type-definition) for [XML](../glossary.md#xml-extensible-markup-language) file validation. No external `.dtd` file is required.

  `.obj`        Wavefront Object file                        Open file format for definition of geometry and other properties for 3D objects

  `.stations`   stations, XML-based                          Holds an internal [DTD](../glossary.md#dtd-document-type-definition) for [XML](../glossary.md#xml-extensible-markup-language) file validation. No external `.dtd` file is required.

  `.ts`         GOCAD TSURF (Triangulated Surface format)    Triangle based surface format containing vertex coordinates and triangle to vertex connectivities

  `.xyz`        XYZ grid data file                           Grid data for model geometry and point sets for e.g. borehole data or Euler Depth. Three columns (x, y, z).

  `.xml`        XML file                                     General extension for all XML-based formats

  `.vxo`        Voxel Cube file                              Similar to `.xyz`, but with 4 columns (x, y, z, value). Used for voxel import and export.
  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Format Descriptions
-------------------

<!-- #### Point Data `.csv`

The Comma Separated Value (CSV) or `.csv` file format is a format used in **IGMAS+** for ASCII point data like stations, horizons and interfaces. -->
<!-- 
#### Point Data `.xyz`

The `.xyz` file format is similar to the [`.csv` format](#point-data-csv). and is used for ASCII point data. -->
### Horizon Files

#### Horizon Files `.xyz`

The `.xyz` file format is similar to the `.csv` format and is also used for ASCII point data.

Each line in horizon `.xyz` files contains one point using a fixed column order `x, y, z`.

A header line

``` {.plaintext}
X,Y,Z
```

will be interpreted, but is not needed. If this header is missing, an additional window will ask for the columns to be imported.

### Voxel Cube Files `.vxo`

The only file format for importing and exporting voxel cubes is an ASCII file with the file extension `.vxo`.

???+ example
An example of a `.vxo` Voxel Cube file exported from **IGMAS+**.:

    ```plaintext
    #VoxelCube Header Information [start]
    #unit=km
    #nx=80
    #ny=48
    #nz=36
    #dx=0.25
    #dy=0.25
    #dz=0.25
    #lower=(0.0, -2.0E-4, -9.0)
    #upper=(20.0, 12.0, 0.0)
    #nodata=-9999
    #VoxelCube Header Information [end]
    x y z cellValue
    0.125 0.1248 -8.875 0.25
    0.375 0.1248 -8.875 0.25
    0.625 0.1248 -8.875 0.25
    0.875 0.1248 -8.875 0.25
    1.125 0.1248 -8.875 0.25
    1.375 0.1248 -8.875 0.25
    1.625 0.1248 -8.875 0.25
    ...
    ```

The file may contain header line(s) marked with a `#` symbol. These header lines in are **not** interpreted! It may also contain additional (commenting) lines: each line containing non-numeric information is **ignored** without notice!

A special order of the cell elements is not required. The size of the cells has to be regular (constant) throughout the file. The cell size is determined by the first non-zero difference between two consecutive lines in x, y and z separately. Negative differences are taken positively.

!!! note
The number of voxel cells is limited - the maximum number of voxel cells is **50000000** (50 million).

<!-- !!! note
    It is possible to import Voxel Cubes that contain irregular grids in vertical $z$ dimension. The cube is then imported using a  transformation to a regular cell size. For that purpose the voxel import wizard contains the mode **Use interpolation to fill empty cells**. Use this function to transform the irregular cells into regular cells using the smallest cellsize of the original voxel cube:

    ![](import_voxel_use_interpolation.png)

    Please note, that this transformation will result in a greater number of cells. -->
### Station Files

A station file contains the station coordinates ($x$, $y$, $z$) or ($x$, $y$), as well the measured (and/or calculated) data corresponding to these stations.

[**Import stations**](../workflows/import.md#import-stations): Use ++"File"++ --\> ++"Import"++ --\> ++"Stations"++ to import the station data.

!!! note
After importing the stations, the model is automatically clipped to the station area using clipplanes. If there is no model in the project, a model domain of a corresponding size will be automatically created.

**Export stations**: Use ++"File"++ --\> ++"Export"++ --\> ++"Stations"++ to save the **Fields** that are actually selected in the **Object Tree**.

There are two main file formats for station files: [`.csv`](#station-files-csv) and [`.stations`](#station-files-stations-xml) (can optionally be `.xml`).

#### Station Files `.csv`

Each line in station `.csv` files contains information about one point, and the number of columns in each line is fixed.

The following settings may be used:
- **separator**: comma (`[,]`), semicolon (`[;]`), tab (`[tabulator]`) or space (`[blank]`).
- **header**: a header line can be included or not
- **quotes**: one can use quotes for numbers and/or header entries, e.g. `"value"`

While importing, the settings used in the file will be recognized and used automatically.
While exporting, a wizard will pop up and offer export CSV settings:

![](export_stations.png){width="500"}

A station `.csv` file **does not contain** information about the units used. However, the wizard (figure above) give you the possibility to choose the units used from a list (available both for **Import** and **Export**).

**IGMAS+** uses double precision (64bit) for measured values and single precision (32bit) for coordinates.

???+ example
An example of a station `.csv` file with `;` delimeter:

    ```plaintext
    X;Y;Z;measured gravity;measured gzz
    472;7968;0.129999995;14.5165615081787;-1.19159984588623
    474;7968;0.129999995;15.8175678253174;6.28382110595703
    476;7968;0.129999995;17.1463527679443;10.6069469451904
    478;7968;0.129999995;16.2382793426514;0.371654510498047
    480;7968;0.129999995;15.7985668182373;-0.996235847473145
    482;7968;0.129999995;16.1438369750977;2.18927764892578
    484;7968;0.129999995;16.5048122406006;-0.554471015930176
    ```

A header with descriptions about the stations and data can be included in the first line.
In this case don't forget to check **interpret Header** checkbox in the wizard:

![](import_stations_interpret_header.png){width="500"}

For changing the value types, please click on table header and select the column value that you want to change:

![](import_stations_select_value_type.png){width="500"}

Possible header entries are:

-   `"x"`
-   `"y"`
-   `"z"`
-   `"measured x component"`
-   `"measured y component"`
-   `"measured z component"` (similar to `"measured gravity"`)
-   `"measured gxx"`
-   `"measured gxy"`
-   `"measured gxz"`
-   `"measured gyx"`
-   `"measured gyy"`
-   `"measured gyz"`
-   `"measured gzx"`
-   `"measured gzy"`
-   `"measured gzz"`
-   `"measured geoid"`
-   `"measured i0"`
-   `"measured i1"`
-   `"measured i2"`
-   `"measured hdt"`
-   `"measured hg"`
-   `"measured magnetic x"`
-   `"measured magnetic y"`
-   `"measured magnetic z"`
-   `"measured magnetic tfi"`
-   `"measured magnetic tfir"`
-   `"measured magnetic vg"`
-   `"measured mxx"`
-   `"measured mxy"`
-   `"measured mxz"`
-   `"measured myx"`
-   `"measured myy"`
-   `"measured myz"`
-   `"measured mzx"`
-   `"measured mzy"`
-   `"measured mzz"`

The keyword `measured` in the file header can be replaced by `calculated`.

!!! note
During the import of stations `calculated` anomalies are skipped.

#### Station Files `.stations`, `.xml`

The internally preferred `.stations` format is an [XML](../glossary.md#xml-extensible-markup-language)-based format, which contains more information compared to the `.csv` station file, e.g. the coordinate system, units etc.

???+ example
An example of a `.stations` file with three stations:

    ```xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE geodata SYSTEM "geodata.dtd">
    <geodata>
    <projection name="unknown" units="km" />
    <vertex x=".00000" y="-.00020" z=".00020" >
    <property name="Measured gravity" value="-1.63953" units="mGal"/>
    </vertex>
    <vertex x=".00000" y="1.00000" z=".00020" >
    <property name="Measured gravity" value="-1.53329" units="mGal"/>
    </vertex>
    <vertex x=".00000" y="1.99980" z=".00020" >
    <property name="Measured gravity" value="-1.43530" units="mGal"/>
    </vertex>
    </geodata>
    ```

Station files in the `.stations` format with an `.xml` extension can also be imported to **IGMAS+**.

### Model Files `.model`, `.xml`

**IGMAS+** model files with extension `.model` are [XML](../glossary.md#xml-extensible-markup-language)-based files that are used to store information about the model elements like bodies and working sections, as well as information about [projection](./coordinates.md#projections) and [units](./coordinates.md#units).

???+ example
An example of the `.model` (for the original model from the [Two Layers Example](../examples/Two_Layers.md)), that contains two bodies and five working sections:

    ```xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- <!DOCTYPE geodata SYSTEM "geodata.dtd"> -->
    <geodata name="Two Layers">
    <projection name="unknown" units="km"></projection>
    <magnetic_field units="nT" total_field="49441.0" inclination="69.0" declination="1.0"></magnetic_field>
    <property name="body" value="Oben">
        <property name="density" units="t/m³" value="0.0"></property>
        <color red="0.0" green="1.0" blue="0.0"></color>
    </property>
    <property name="body" value="Unten">
        <property name="voxel mzz" units="km³" value="0.0"></property>
        <property name="density" units="t/m³" value="0.2"></property>
        <color red="0.28235295" green="0.23921569" blue="0.24313726"></color>
    </property>
    <property name="body" value="reference">
        <property name="density" units="t/m³" value="0.0"></property>
        <color red="0.5019608" green="0.5019608" blue="0.5019608"></color>
    </property>
    <geometry>
        <cross_section name="1" x_start="0.0" y_start="0.0" x_end="20.0" y_end="0.0"></cross_section>
        <vertex id="19" x="20.0" z="0.0"></vertex>
        <vertex id="18" x="0.0" z="0.0"></vertex>
        <vertex id="17" x="0.0" z="-5.0"></vertex>
        <vertex id="16" x="20.0" z="-5.0"></vertex>
        <vertex id="29" x="0.0" z="-10.0"></vertex>
        <vertex id="28" x="20.0" z="-10.0"></vertex>
        <entry type="polygon" id_list="16 19 18 17 ">
            <property name="body" value="Oben "></property>
        </entry>
        <entry type="polygon" id_list="17 29 28 16 ">
            <property name="body" value="Unten "></property>
        </entry>
    </geometry>
    <geometry>
        <cross_section name="2" x_start="0.0" y_start="5.0" x_end="22.912878" y_end="5.0"></cross_section>
        <vertex id="15" x="20.0" z="-5.0"></vertex>
        <vertex id="14" x="20.0" z="0.0"></vertex>
        <vertex id="13" x="0.0" z="-5.0"></vertex>
        <vertex id="12" x="0.0" z="0.0"></vertex>
        <vertex id="27" x="0.0" z="-10.0"></vertex>
        <vertex id="26" x="20.0" z="-10.0"></vertex>
        <entry type="polygon" id_list="15 14 12 13 ">
            <property name="body" value="Oben "></property>
        </entry>
        <entry type="polygon" id_list="13 27 26 15 ">
            <property name="body" value="Unten "></property>
        </entry>
    </geometry>
    <geometry>
        <cross_section name="3" x_start="0.0" y_start="10.0" x_end="20.0" y_end="10.0"></cross_section>
        <vertex id="11" x="20.0" z="-5.0"></vertex>
        <vertex id="10" x="20.0" z="0.0"></vertex>
        <vertex id="9" x="0.0" z="-5.0"></vertex>
        <vertex id="8" x="0.0" z="0.0"></vertex>
        <vertex id="25" x="0.0" z="-10.0"></vertex>
        <vertex id="24" x="20.0" z="-10.0"></vertex>
        <entry type="polygon" id_list="11 10 8 9 ">
            <property name="body" value="Oben "></property>
        </entry>
        <entry type="polygon" id_list="9 25 24 11 ">
            <property name="body" value="Unten "></property>
        </entry>
    </geometry>
    <geometry>
        <cross_section name="4" x_start="0.0" y_start="15.0" x_end="26.925823" y_end="15.0"></cross_section>
        <vertex id="22" x="20.0" z="-10.0"></vertex>
        <vertex id="7" x="20.0" z="-5.0"></vertex>
        <vertex id="6" x="20.0" z="0.0"></vertex>
        <vertex id="5" x="0.0" z="-5.0"></vertex>
        <vertex id="4" x="0.0" z="0.0"></vertex>
        <vertex id="23" x="0.0" z="-10.0"></vertex>
        <entry type="polygon" id_list="7 6 4 5 ">
            <property name="body" value="Oben "></property>
        </entry>
        <entry type="polygon" id_list="5 23 22 7 ">
            <property name="body" value="Unten "></property>
        </entry>
    </geometry>
    <geometry>
        <cross_section name="5" x_start="0.0" y_start="20.0" x_end="20.0" y_end="20.0"></cross_section>
        <vertex id="21" x="0.0" z="-10.0"></vertex>
        <vertex id="20" x="20.0" z="-10.0"></vertex>
        <vertex id="3" x="20.0" z="0.0"></vertex>
        <vertex id="2" x="0.0" z="-5.0"></vertex>
        <vertex id="1" x="0.0" z="0.0"></vertex>
        <vertex id="0" x="20.0" z="-5.0"></vertex>
        <entry type="polygon" id_list="0 3 1 2 ">
            <property name="body" value="Oben "></property>
        </entry>
        <entry type="polygon" id_list="2 21 20 0 ">
            <property name="body" value="Unten "></property>
        </entry>
    </geometry>
    </geodata>
    ```

Model files in the `.model` format with an `.xml` extension can also be imported to **IGMAS+**.

### GOCAD Model Files `.ts`

The GOCAD(r) TSURF (Triangulated Surface format) is used to store triangulated surfaces containing vertex coordinates and triangle-to-vertex connectivities.

The elements which are interpreted are:

-   `name`: (in `HEADER`)
    -   Each interface separates two bodies, the names of which are separate by `<>`. Example: `Saltbody<>Mesozoic`
    -   The first body name (here: `Saltbody`) is assumed to be on the left hand side of the interface, the second (here: Mesozoic) on the right hand side, i.e. on the side of the [positive triangle normal](./algorithms.md#triangle-orientation).
    -   Using **Saltbody\<\>Mesozoic** instead of **Mesozoic\<\>Saltbody** will flip the orientation of every single triangle of the entire interface.
    -   If the body separator `<>` is missing (eg. `name: Saltbody`), `Saltbody<>Reference` is interpreted.
-   `*solid*color:RGB`$\alpha$ (in `HEADER`)
    -   The Red, Green, Blue, Transparency values (transparency is not interpreted).
    -   The color is assigned to the body name to the left of the body separator `<>`.
-   `ZPOSITIVE` (Elevation \| Depth):
    -   Z-Coordinate positive to the top / to the bottom.
    -   Default: Elevation.
-   `AXIS_UNIT` ("m" "m" "m" \| "km" "km" "km")
    -   Default: "m" "m" "m"
-   `TFACE`
    -   Starts a new triangulated interface.
-   `VRTX`
    -   Keyword to identify lines with vertices, which contain of 5 columns:
        `VRTX id x_coordinate y_coordinate z_coordinate`
-   `ATOM`
    -   Linked `VRTX` indices are interpreted
-   `TRGL`
    -   Keyword to identify lines with trianges, which contain of 4 columns:
        `TRGL id1 id2 id3`

!!! note
The orientation of the triangles is assumed to be identical throughout the entire `TFACE`. It is defined by the order of the triangle vertices with the right hand thumb-rule: the thumb is indicating the positive triangle normal, if the fingers follow the order of the vertices (see more in the [Triangle Orientation chapter](./algorithms.md#triangle-orientation)).

???+ example
A TSURF `.ts` file, defining a simple cube:

    ```plaintext
    GOCAD TSurf 1
    HEADER {
    name: reference<>new_body
    *solid*color: 0.5019608 0.5019608 0.5019608 1
    }
    GOCAD_ORIGINAL_COORDINATE_SYSTEM
    NAME: from_Shape
    AXIS_NAME: "X" "Y" "Z"
    AXIS_UNIT: "m" "m" "m"
    END_ORIGINAL_COORDINATE_SYSTEM
    TFACE
    VRTX 7 0.0 0.0 0.0
    VRTX 6 0.0 1.0 0.0
    VRTX 5 1.0 1.0 0.0
    VRTX 4 1.0 0.0 0.0
    VRTX 3 1.0 0.0 -1.0
    VRTX 2 0.0 1.0 -1.0
    VRTX 1 1.0 1.0 -1.0
    VRTX 0 0.0 0.0 -1.0
    TRGL 0 1 2
    TRGL 0 3 1
    TRGL 3 4 1
    TRGL 4 5 1
    TRGL 4 6 5
    TRGL 4 7 6
    TRGL 7 2 6
    TRGL 7 0 2
    TRGL 4 0 7
    TRGL 4 3 0
    TRGL 5 6 2
    TRGL 5 2 1
    END
    ```

### Wavefront Object files `.obj`

**IGMAS+** can import and export models and interfaces using the Wavefront Object `.obj` file format, which is a plain ASCII text format.

See more about this format [here](http://en.wikipedia.org/wiki/Wavefront_.obj_file).

The interpreted lines are:

-   `v`
    -   Keyword to identify lines with vertices, which contain 4 columns:
        `v x_coordinate y_coordinate z_coordinate`
-   `f`
    -   Keyword to identify lines with trianges, which contain 4 columns:
        `f id1 id2 id3`
        Lines with more than 4 columns (i.e. faces with more than 3 vertices) are not interpreted.
-   `#`
    -   Comments, not interpreted.

???+ example
An example of a Wavefront Object `.obj` file defining a simple cube:

    ```plaintext
    #vertex definitions
    v 0.0 0.0 -1.0
    v 1.0 1.0 -1.0
    v 0.0 1.0 -1.0
    v 1.0 0.0 -1.0
    v 1.0 0.0 0.0
    v 1.0 1.0 0.0
    v 0.0 1.0 0.0
    v 0.0 0.0 0.0
    #Face: reference <> new_body
    f 1 2 3
    f 1 4 2
    f 4 5 2
    f 5 6 2
    f 5 7 6
    f 5 8 7
    f 8 3 7
    f 8 1 3
    f 5 1 8
    f 5 4 1
    f 6 7 3
    f 6 3 2
    ```

Glossary
========

???+ quote
The only source of knowledge is experience.
― *Albert Einstein*

------------------------------------------------------------------------

A
-

### acceleration

The rate of change of velocity over time, often measured in meters per second squared (m/s$^2$). In [geophysics](#geophysics), [gravitational acceleration](#gravitational-acceleration) refers to the force exerted by [gravity](#gravity) on objects at the Earth's surface.

### API

API (Application Programming Interface): a set of protocols and tools for building software applications, allowing different software programs to communicate.

### asthenosphere

A semi-fluid, ductile layer of the Earth's upper [mantle](#mantle) located below the [lithosphere](#lithosphere). It is mechanically weaker than the overlying rigid lithosphere and allows for the movement of [tectonic plates](#tectonic-plate) through slow [convection](#mantle-convection). The asthenosphere plays a key role in [plate tectonics](#plate-tectonics), [isostasy](#isostasy), and [mantle convection](#mantle-convection), as its flow accommodates the motion of the plates and the distribution of heat from the Earth's interior.

------------------------------------------------------------------------

B
-

### basin

A low area in the Earth's surface, often filled with [sediments](#sediments), studied for its potential as a resource reservoir.

### Bessel Ellipsoid

The Bessel Ellipsoid, introduced in 1841 by Friedrich Bessel, is an early mathematical model of the Earth's shape based on arc measurements in Europe. It was widely used in European [geodesy](#geodesy) throughout the 19th and early 20th centuries. The Bessel Ellipsoid provided a more accurate regional fit for Europe compared to global models at the time.

### body

In [geophysics](#geophysics), a body refers to a distinct geological or physical entity within the Earth's subsurface, characterized by specific properties such as [density](#density), [magnetic susceptibility](#magnetic-susceptibility), etc. Bodies can represent various geological formations, such as rocks, minerals, or fluids, and are often used in numerical models to simulate and analyze geophysical data.
In **IGMAS+**, a body is a 3D object with a defined shape and properties, composed of a set of triangles that form its [convex hull](#convex-hull).

### Bouguer anomaly

A [gravity anomaly](#gravity-anomaly) that has been [corrected](#bouguer-correction) for terrain and elevation, used to study subsurface mass distribution. The anomaly is named after Pierre Bouguer (1698--1758), a French mathematician, geophysicist, geodesist, and astronomer.

### Bouguer correction

The adjustment to a measurement of gravitational acceleration to account for elevation and the density of rock between the measurement station and a reference level. It can be expressed mathematically as the product of the density of the rock, the height relative to sea level or another reference, and a constant, in units of mGal:

$$\delta g_B = 2\pi G \rho h \approx 4.19358\cdot10^{−5}\cdot\rho h,$$

where

-   $\delta g_B$ - Bouguer correction in mGal
-   $\rho$ - rock density in kg/m$^3$
-   $h$ - height difference between two locations in m, also called Bouguer plate thickness
-   $G$ - [gravitational constant](#gravitational-constant).

[:octicons-arrow-right-24: **Source**](https://glossary.slb.com/en/terms/b/bouguer_correction)

### bulk density

The overall [density](#density) of a material, including both solid particles and the pore spaces between them. In subsurface [geology](#geology), bulk density is important for determining rock and sediment composition and is often measured in [subsurface modelling](#subsurface-modelling).

------------------------------------------------------------------------

C
-

### CAD (Computer-Aided Design)

CAD refers to software used to create precision drawings and 3D models. In geophysics and geology, CAD tools help design equipment, geological models, and infrastructure layouts, aiding in the visualization and planning of field operations and simulations.

### central meridian

The central meridian is the longitudinal line at the center of a map [projection](#projection) zone, serving as the axis of least distortion. It is crucial in coordinate systems like the [Universal Transverse Mercator (UTM)](#utm-universal-transverse-mercator) and other cylindrical projections. The central meridian helps minimize distortion near the middle of the projection zone, with distortion increasing as you move away from it.

### CODATA

CODATA is the Committee on Data of the International Science Council (ISC) founded in 1966 (at that time known as the Committee on Data for Science and Technology). CODATA's mission is to connect data and people to advance science and improve our world by promoting international collaboration to advance Open Science and to improve the availability and usability of data for all areas of research.

The purpose of the CODATA Task Group on Fundamental Constants (CODATA-TGFC) is to periodically provide the scientific and technological communities with a self-consistent set of internationally recommended values of the fundamental physical constants, such as [gravitational constant](#gravitational-constant) and conversion factors of physics and chemistry based on all of the relevant data available at a given point in time.

[:octicons-arrow-right-24: **Source 1**](https://codata.org/about-codata/our-mission/)
[:octicons-arrow-right-24: **Source 2**](https://www.bipm.org/en/hosting/codata-tgfc)

### Complete Bouguer Anomaly

Complete Bouguer Anomaly (CBA): a [gravity anomaly](#gravity-anomaly) that has been fully corrected for both elevation and the gravitational effect of [terrain](#terrain-correction), building upon the [Bouguer Anomaly](#bouguer-anomaly). In addition to the standard [Bouguer correction](#bouguer-correction), which accounts for the gravitational influence of a flat [slab](#slab) of material between the measurement point and sea level, the Complete Bouguer Anomaly includes [terrain corrections](#terrain-correction) to remove the effects of local [topography](#topography). This results in a more refined representation of subsurface mass distribution, making it especially useful in mountainous or rugged areas where topographic variations significantly affect gravity measurements. Like the [Bouguer anomaly](#bouguer-anomaly), it is expressed in [mGal](#gal) and is an important tool in [geophysical](#geophysics) exploration for identifying [geological](#geology) structures beneath the Earth's surface.

### convex hull

Convex hull, or just [hull](#hull), is the smallest convex shape that encloses a set of points, often used in spatial data processing and modelling.

### core

The innermost layer of the Earth, consisting of two parts: the solid inner core and the liquid outer core. The core is primarily composed of iron and nickel and is responsible for generating Earth's [magnetic field](#magnetic-field) through the movement of molten metal in the outer core. The core plays a crucial role in Earth's geodynamics, including heat transfer and magnetic field generation.

### covariance

Covariance is a measure of how two variables change together. If the variables tend to increase or decrease together, the covariance is positive; if one tends to increase while the other decreases, the covariance is negative. In [geophysics](#geophysics), covariance is used to assess the relationships between different parameters, which is critical in [uncertainty analysis](#uncertainty-analysis) and model fitting processes like inversion or parameter estimation.

The covariance between two variables $X$ and $Y$, $Cov(X, Y)$, can be calculated by taking the [expected value](#expected-value), or mean, $E$ of the product of two values: the deviation of $X$ from its mean $\mu X$ and the deviation of $Y$ from its mean $\mu Y$. That is:

$$Cov(X, Y) = E[(X − \mu X)(Y − \mu Y)].$$

[:octicons-arrow-right-24: **Source 1**](https://www.britannica.com/topic/covariance)

### covariance matrix

A covariance matrix is a square matrix that represents the [covariance](#covariance) between pairs of variables. Each element of the matrix indicates how much two variables change together. In [geophysics](#geophysics), a covariance matrix can be used to quantify the relationships between different parameters in a model, helping in the [uncertainty analysis](#uncertainty-analysis) or parameter optimization processes in techniques like [potential field](#potential-field) [inversion](#inverse-modelling).

### Covariance Matrix Adaptation Evolution Strategy

Covariance Matrix Adaptation Evolution Strategy (CMA-ES) is an advanced [optimization](#optimization) algorithm based on [Evolution Strategy](#evolution-strategy) often used for solving non-linear problems. It evolves a population of candidate solutions and adapts their distribution by updating a [covariance matrix](#covariance-matrix), which allows the algorithm to effectively search the solution space. In [geophysical](#geophysics) studies, such as [potential field](#potential-field) modelling or [inversion](#inverse-modelling), CMA-ES can be applied to optimize model parameters by minimizing the misfit between observed and predicted data.

### CPU (Central Processing Unit)

The CPU is the primary component of a computer that executes instructions from software, handling general-purpose tasks. While versatile, CPUs are less efficient for parallel processing compared to GPUs.

### CRS (Coordinate Reference System)

A Coordinate Reference System (CRS) defines how spatial data is mapped to the Earth's surface. It includes parameters like datum, [projection](#projection), and coordinate units, ensuring that geographic data aligns correctly across different datasets and software. CRS is essential in [GIS](#gis-geographic-information-system), [geophysics](#geophysics), and geodesy for accurate mapping and spatial analysis.

### crust

The outermost layer of the Earth, consisting of solid rock. It is divided into oceanic and continental crust and varies in thickness, playing a key role in geophysical studies of [gravity](#gravity) and [magnetics](#magnetism).

------------------------------------------------------------------------

D
-

### data visualization

The graphical representation of data to help users understand trends, patterns, and insights, often used in subsurface modelling.

### datum

A datum is a reference framework for measuring locations on the Earth's surface. It defines the origin and orientation of a coordinate system, often based on an ellipsoid that approximates the Earth's shape. Datums are crucial in [geodesy](#geodesy) and [GIS](#gis-geographic-information-system) for accurate mapping and positioning.

### DEM

DEM (Digital Elevation Model): a 3D representation of a terrain's surface created from terrain elevation data. It is commonly used in geographic information systems (GIS), remote sensing, and various engineering applications to model landscapes and analyze topography.

### density

A physical property of matter defined as mass per unit volume, often measured in kilograms per cubic meter (kg/m$^3$). In [geophysics](#geophysics), density variations in the Earth's materials can influence [gravity](#gravity-field) and [magnetic](#magnetic-field) fields.

### DTD (Document Type Definition)

DTD is a set of rules that defines the structure and legal elements and attributes of an XML document. It ensures that [XML](#xml-extensible-markup-language) data adheres to a specific format by validating the document's elements, nesting, and data types. DTDs are essential in data exchange, web development, and geophysical applications where consistent data formats are crucial for interoperability and model configuration.

------------------------------------------------------------------------

E
-

### earthquake

The sudden release of energy caused by the shifting of [tectonic plates](#tectonic-plate), [volcanic activity](#volcanic-activity), or other reasons, resulting in ground shaking. Earthquakes are a key focus in [geophysics](#geophysics) and seismology and provide insights into subsurface structures and [geodynamics](#geodynamics).

### Evolution Strategy

Evolution Strategy (ES) is an [optimization](#optimization) technique inspired by the process of natural selection. It is commonly used in fields like machine learning and numerical modelling to solve complex optimization problems. In [geophysics](#geophysics), ES can be applied to [potential field](#potential-field) modelling, helping to iteratively improve solutions to fit observed [gravity](#gravity) or [magnetic](#magnetism) data. Unlike [genetic algorithms](#genetic-algorithm), ES focuses more on the evolution of continuous parameters rather than discrete gene-like structures, making it suitable for refining models in scientific computing.

### ENU system

The ENU system is a local [geodetic](#geodesy) coordinate system used in [geophysics](#geophysics) and navigation, where coordinates are defined relative to a specific point on the Earth's surface. The three axes are:

-   East (E): Positive towards the east.
-   North (N): Positive towards the north.
-   Up (U): Positive vertically, away from the Earth's center.

This system is essential for mapping, GPS positioning, and representing vector data.

### EPSG (European Petroleum Survey Group)

EPSG is a standard for [coordinate reference systems](#crs-coordinate-reference-system) and spatial data projections, widely used in [geodesy](#geodesy), [GIS](#gis-geographic-information-system), and mapping. The EPSG database assigns unique codes to coordinate systems, [datums](#datum), and [projections](#projection), ensuring consistency in geospatial data processing and exchange.

### expected value

Expected value is the average or mean value that one would expect from a random variable over many trials. It represents the central tendency of a probability distribution. In [geophysics](#geophysics), the expected value is often used in probabilistic models or [uncertainty analysis](#uncertainty-analysis) to predict the most likely outcome of a parameter based on known data or distributions.

Mathematically,

$$E(X) = \sum_{i=1}^{n} x_i \cdot P(x_i),$$

where:

-   $E(X)$ is the expected value,
-   $x_i$​ represents each possible value of the random variable $X$,
-   $P(x_i)$ is the probability of $x_i$,
-   $n$ is the total number of possible outcomes.

------------------------------------------------------------------------

F
-

### fault

A fracture or zone of fractures in the Earth's [crust](#crust) along which there has been displacement of the rock on either side. Faults are caused by tectonic forces and are often associated with [earthquakes](#earthquake), as stress builds up and is released along these fractures. Faults can be classified into different types, such as normal, reverse, and strike-slip, depending on the direction of movement.

### flying carpet

Flying carpet is a term used in [geophysics](#geophysics) to describe a method of visualizing and interpreting geophysical data. It involves creating a 3D representation of the subsurface, where the data is "floated" above the ground surface, allowing for better visualization of geological structures and anomalies. In the context of **IGMAS+**, the flying carpet is often used to describe the interface between different geological layers or the topography of the subsurface, or [horizons](#horizon).

### fold

A fold is a geological structure formed by the bending or warping of rock layers due to [tectonic](#plate-tectonics) forces. Folds can vary in size and shape, and they are classified into different types, such as anticlines (upward folds) and synclines (downward folds). Folds are important in [geology](#geology) and [geophysics](#geophysics) as they can indicate the presence of oil and gas reservoirs, mineral deposits, and other geological features.

### forward modelling

A method of predicting how a physical system behaves by applying known physical laws to create a model of the system.

### forward problem

In [geophysics](#geophysics), a forward problem involves predicting the observable data (such as [gravity](#gravity-field), [magnetic](#magnetic-field) fields, or seismic waves) based on a known model of the subsurface, including properties like [density](#density), [magnetic susceptibility](#magnetic-susceptibility). It is the opposite of an [inverse problem](#inverse-problem), where the goal is to infer the subsurface properties from observed data. [Forward modelling](#forward-modelling) helps validate assumptions and simulate how geological structures will affect geophysical measurements.

### free-air correction

A correction applied to gravity measurements to account for changes in elevation above sea level. It adjusts the measured gravity value to what it would be at a standard elevation, assuming no mass between the observation point and sea level. This correction is used to isolate the effect of elevation from other gravitational influences.

### free-air gravity anomaly

The measured [gravity anomaly](#gravity-anomaly) after a [free-air correction](#free-air-correction) is applied to account for the elevation at which a measurement is made.

[:octicons-arrow-right-24: **Source**](https://en.wikipedia.org/wiki/Free-air_gravity_anomaly)

------------------------------------------------------------------------

G
-

### gal

Unit of acceleration, named in honour of the Italian physicist and astronomer Galileo Galilei (1564--1642) and used especially in measurements of gravity. One gal (Gal) equals a change in rate of motion of 1 cm per second per second (0.01 m/s$^2$). The milligal (mGal) and microgal ($\mu$ Gal) are respectively one thousandth and one millionth of a Gal.

[:octicons-arrow-right-24: **Source 1**](https://www.britannica.com/science/gal)
[:octicons-arrow-right-24: **Source 2**](https://en.wikipedia.org/wiki/Gal_(unit))

### Gauss-Krueger Coordinate System

The Gauss-Krueger (Gauß-Krüger) system is a transverse cylindrical map projection used primarily in Europe and Asia for large-scale mapping and [geodetic](#geodesy) surveys. It is similar to the [UTM (Universal Transverse Mercator)](#utm-universal-transverse-mercator) system but differs in zone width and reference conventions.

### Gaussian Quadrature

Gaussian Quadrature is a numerical integration technique used to approximate the integral of a function, particularly in potential field modelling and geophysical data analysis. It achieves high accuracy by selecting optimal points (nodes) and weights, reducing computational effort compared to standard methods like the trapezoidal rule. This method is essential in solving complex integrals arising in gravity and magnetic modelling.

### Genetic Algorithm

Genetic Algorithm (GA) is a heuristic [optimization](#optimization) technique inspired by the process of natural selection. It uses operations like selection, crossover, and mutation to evolve solutions toward optimal results. In geophysical modelling, GAs can be applied to fit observed [gravity](#gravity) and [magnetic](#magnetism) data by evolving [potential field](#potential-field) models over successive generations to minimize error or improve accuracy.

### geodesy

Geodesy is the science of measuring and understanding the Earth's shape, orientation in space, and [gravitational field](#gravity-field). It provides the foundation for mapping, navigation, and [geophysical](#geophysics) studies by establishing accurate coordinate systems and reference frames. Geodesy is essential for GPS, surveying, and monitoring Earth's [dynamic](#geodynamics) processes, such as [plate tectonics](#plate-tectonics) and sea level changes.

### geodynamics

The study of the forces and processes that drive the movement and deformation of the Earth's [crust](#crust), [mantle](#mantle), and [core](#core). It encompasses [plate tectonics](#plate-tectonics), [mantle convection](#mantle-convection), [earthquakes](#earthquake), [volcanic activity](#volcanic-activity), and the flow of heat and materials within the Earth. Geodynamics helps explain the Earth's changing structure and the physical mechanisms behind [gravity](#gravity), [magnetism](#magnetism), and [tectonic movements](#tectonic-plate).

### geoid

The hypothetical shape of the Earth, representing mean sea level, used as a reference for [gravity](#gravity) measurements.

### geology

The science of the Earth's physical structure, composition, and history. It focuses on studying rocks, minerals, and geological processes like tectonics, erosion, and sedimentation, helping to understand the Earth's past and predict future changes.

### geomagnetic field

The magnetic field surrounding the Earth, generated by movements in its molten outer core.

### geometry optimization

In [subsurface modelling](#subsurface-modelling), geometry optimization is the process of refining the shapes, positions, and boundaries of subsurface structures (such as bodies, layers, layer boundaries, [faults](#fault)) to achieve the best fit with geophysical data, such as [gravity](#gravity), [magnetic](#magnetism), or [seismic](#seismicity) measurements.

### geophysical inversion

A process of using observed data to derive a model of the subsurface, e.g. for gravity or magnetic fields.

### geophysics

The branch of earth sciences that uses physical methods, such as [gravity](#gravity), [magnetics](#magnetism), and seismic waves, to study the Earth's structure, composition, and processes. Geophysics is essential for exploring subsurface features and resources and understanding [geodynamic](#geodynamics) activities.

### georeferencing

Georeferencing is the process of aligning spatial data to a known coordinate system so it can be accurately mapped. This involves assigning real-world coordinates (latitude/longitude or [projected](#projection) coordinates) to images, maps, or datasets. In [geophysics](#geophysics), georeferencing is vital for overlaying survey data onto base maps and ensuring accurate positioning in [GIS](#gis-geographic-information-system) applications.

### GIS (Geographic Information System)

A Geographic Information System (GIS) is a framework for gathering, managing, and analyzing spatial and geographic data. It integrates data layers with maps to visualize, interpret, and analyze relationships, patterns, and trends. GIS is essential in [geophysics](#geophysics) for mapping geological features, analyzing [potential fields](#potential-field), and managing survey data.

### Gouraud shading

An [interpolation](#interpolation) method used in computer graphics to produce continuous shading of surfaces represented by polygon meshes, named after Henri Gouraud.

[:octicons-arrow-right-24: **Source**](https://en.wikipedia.org/wiki/Gouraud_shading)

### GPU (Graphics Processing Unit)

A GPU is a specialized processor designed to accelerate graphics rendering and parallel computations. GPUs excel at handling large datasets and complex simulations, making them essential for 3D geological modeling, seismic data processing, and potential field visualization.

### gravimeter

An instrument used to measure the strength of [gravitational fields](#gravity-field) at specific locations.

### gravitational acceleration

The [acceleration](#acceleration) due to Earth's [gravity](#gravity) at or near its surface, typically denoted as $g$ and approximately equal to 9.8 meters per second squared (m/s$^2$). It represents the force of gravity acting on objects and varies slightly with altitude and geographical location due to Earth's shape and mass distribution.

### gravitational constant

A physical constant denoted by $G$ and used in calculating the gravitational attraction between two objects. In Newton's law of universal gravitation, the attractive force between two objects ($F$) is equal to $G$ times the product of their masses ($m_1 m_2$) divided by the square of the distance between them ($r^2$):

$$F = G \frac{m_1 m_2}{r^2}.$$

The value of $G$ is (6.67430 ± 0.00015) ⋅ 10$^{−11}$ m$^3$ kg$^{−1}$ s$^{−2}$ or (6.67430 ± 0.00015) ⋅ 10$^{−6}$ mGal m$^2$ kg$^{−1}$, as [recommended in 2018](https://doi.org/10.1103/RevModPhys.93.025010) by the [CODATA](#codata).

Note, that the default value of $G$ used in **IGMAS+** is 6.67384 ⋅ 10$^{−11}$ m$^3$ kg$^{−1}$ s$^{−2}$, but users can change it, as explained [here](./technical_information/algorithms.md#gravitational-constant).

[:octicons-arrow-right-24: **Source 1**](https://doi.org/10.1103/RevModPhys.93.025010)
[:octicons-arrow-right-24: **Source 2**](https://physics.nist.gov/cgi-bin/cuu/Value?bg)
[:octicons-arrow-right-24: **Source 3**](https://www.britannica.com/science/gravitational-constant)

### gravity

A natural force of attraction between objects that have mass. On Earth, gravity pulls objects toward the planet's center, giving them weight. In [geophysics](#geophysics), gravity is used to study variations in the Earth's subsurface by measuring changes in gravitational force, which can indicate differences in rock density and geological structures.

### gravity anomaly

The difference between the observed value of [gravity](#gravity) and the value predicted by a theoretical model at a location on the Earth's surface.

Different theoretical models will predict different values of gravity, and so a gravity anomaly is always specified with reference to a particular model. The [Bouguer](#bouguer-anomaly), [free-air](#free-air-gravity-anomaly), and [isostatic](#isostatic-gravity-anomaly) gravity anomalies are each based on different theoretical corrections to the value of gravity.

[:octicons-arrow-right-24: **Source**](https://en.wikipedia.org/wiki/Gravity_anomaly)

### gravity field

The region of space around a mass where the force of [gravity](#gravity) is exerted. In [geophysics](#geophysics), variations in the Earth's gravity field help map subsurface structures and [densities](#density).

### gravity gradient

The rate of change of [gravitational acceleration](#gravitational-acceleration) with distance. This measurement provides detailed information about subsurface mass distribution and is used to detect variations in rock [density](#density) and other geological features.

### GUI

GUI (Graphical User Interface): a visual interface that allows users to interact with computers or applications through graphical elements like buttons, icons, and menus, rather than typing text commands.

------------------------------------------------------------------------

H
-

### half-space

In [geophysics](#geophysics), a half-space refers to a theoretical, homogeneous, and infinite subsurface region extending below a boundary, often used in mathematical models to simplify the study of [gravitational](#gravity), [magnetic](#magnetism), or seismic responses. It is assumed to have uniform properties such as density or magnetization, and is useful for approximating real-world conditions in [subsurface modelling](#subsurface-modelling).

### Hayford Ellipsoid

The Hayford Ellipsoid, also known as the International Ellipsoid of 1924, is a mathematical model of the Earth's shape, representing it as an oblate spheroid. It was one of the first globally adopted reference ellipsoids for [geodesy](#geodesy) and mapping, providing a standard for international measurements. The Hayford Ellipsoid approximates the Earth's surface more accurately than earlier models, aiding in the development of coordinate systems and geophysical studies.

### horizon

In [geophysics](#geophysics) and [geology](#geology), a horizon refers to a distinct layer within the Earth's subsurface, often identified by contrasts in rock type, geophysical properties, or [stratigraphy](#stratigraphy). Horizons are key markers in [seismic](#seismic-imaging) and [potential field](#potential-field) data interpretation, aiding in structural and stratigraphic modelling.

### HTML

HTML (Hypertext Markup Language): the standard markup language used to create and design web pages. It structures content on the web using elements like headings, paragraphs, links, and images.

### hull

A hull typically refers to the [convex hull](#convex-hull), the outer boundary or envelope of a set of points in space, often used in 3D modelling and visualization. The hull can represent the limits of geological bodies, survey data, or other spatial datasets, helping to define the extent of a region of interest.

------------------------------------------------------------------------

I
-

### interface

In [geophysics](#geophysics) and [geology](#geology), an interface refers to the boundary or surface between two different geological layers or materials, such as between rock and sediment or between different rock types. Interfaces are critical in interpreting geophysical data, as they often represent changes in physical properties like [density](#density), [magnetic susceptibility](#magnetic-susceptibility), [seismic velocity](#seismic-waves), which can indicate the presence of resources or geological structures.
In **IGMAS+**, an interface is a set of triangles separating two [bodies](#body).

### interpolation

Interpolation is a mathematical method used to estimate unknown values within a range of known data points. In [geophysics](#geophysics), interpolation is crucial for creating continuous models from discrete measurements, such as [gravity](#gravity) or [magnetic](#magnetism) data. It helps visualize subsurface structures and properties by filling in gaps in the data.

### inverse modelling

A technique used to estimate subsurface properties by adjusting a model until it matches observed data, such as [gravity](#gravity-anomaly) or [magnetic](#magnetic-anomaly) anomalies.

### inverse problem

In [geophysics](#geophysics) and other scientific fields, an inverse problem involves using observed data to infer the underlying physical properties or structures that produced the data. Unlike [forward problems](#forward-problem), where the outcome is predicted from known inputs, inverse problems aim to reconstruct subsurface models (such as [density](#density) or [magnetic susceptibility](#magnetic-susceptibility)) from measurements like [gravity](#gravity), [seismic](#seismicity), or [magnetic](#magnetism) data. Solving inverse problems is critical for understanding subsurface [geology](#geology) and resource exploration.

### interpolation

Interpolation is a mathematical technique used to estimate values at unknown points by using known data points. In [geophysics](#geophysics), interpolation is essential for creating continuous models from discrete measurements. It plays a key role in numerical modelling, image processing, and grid-based data visualization.

### isostasy

The concept in [geophysics](#geophysics) that describes the gravitational equilibrium between the Earth's [lithosphere](#lithosphere) ([crust](#crust) and upper [mantle](#mantle)) and the denser, underlying [asthenosphere](#asthenosphere). According to isostasy, the Earth's [crust](#crust) "floats" at an elevation that balances the downward gravitational force of its mass and the upward buoyant force exerted by the [mantle](#mantle). This concept explains why mountain ranges have deep "roots" of crustal material extending into the mantle, and why regions with thick, less dense crust rise higher than those with thin, denser crust. Isostasy is central to understanding large-scale geological processes like crustal deformation, [tectonics](#plate-tectonics), and the distribution of mass within the Earth.

### isostatic correction

A correction applied to [gravity](#gravity) data to account for isostatic equilibrium, which assumes that the Earth's [crust](#crust) is "floating" in gravitational balance over the denser [mantle](#mantle). This correction adjusts for the mass differences caused by variations in [topography](#topography) (such as mountain ranges or ocean basins) and compensates for the corresponding "roots" beneath these features. The goal is to isolate the gravity signal caused by subsurface structures rather than surface-level mass differences, often used in conjunction with [Bouguer Anomaly](#bouguer-anomaly) studies to provide deeper insights into crustal [density](#density) and composition.

### isostatic gravity anomaly

A type of [gravity anomaly](#gravity-anomaly) that accounts for variations in the Earth's gravity field due to differences in the density and elevation of crustal rocks. It is corrected for isostatic equilibrium, meaning the Earth's crust is assumed to be "floating" in balance, compensating for the mass of mountains and valleys.

### isosurface

An isosurface is a three-dimensional surface representing points of constant value within a scalar field, such as temperature, pressure, or [density](#density). In [geophysics](#geophysics), isosurfaces are used to visualize [subsurface](#subsurface-modelling) structures in [seismic data](#seismic-imaging) or other parameter distributions, aiding in the interpretation of [geological](#geology) formations. They are generated through algorithms like [Marching Cubes](#marching-cubes).

------------------------------------------------------------------------

J
-

### JDK

JDK (Java Development Kit): a software development kit used to write, compile, and run Java programs. It includes the [JRE](#jre) as well as tools like the Java compiler and debugger.

### JRE

JRE (Java Runtime Environment): a software package that provides the libraries, [JVM](#jvm), and other components needed to run Java applications.

### JVM

JVM (Java Virtual Machine): A core component of the Java programming language that enables Java programs to run on any device or operating system. It interprets and executes compiled Java bytecode, providing platform independence by allowing the same code to run on different platforms.

------------------------------------------------------------------------

K
-

### KML (Keyhole Markup Language)

A KML file (Keyhole Markup Language) is an XML-based format used to store geographic data for visualization in mapping applications like Google Earth and [GIS](#gis-geographic-information-system) platforms. KML files can represent points, lines, polygons, and images, enabling users to overlay geospatial data on 3D earth models. In [geophysics](#geophysics), KML files are often used to display survey paths, geophysical anomalies, and potential field data in a spatial context, facilitating better interpretation and presentation.

------------------------------------------------------------------------

L
-

### layer cake

A layer cake is a simplified model of the Earth's subsurface, where different [geological](#geology) layers are represented as distinct, horizontal strata. This model is often used in [geophysical](#geophysics) to describe vertical variations in properties like [density](#density) or [magnetic susceptibility](#magnetic-susceptibility) assuming uniformity within each layer. The layer cake model helps in understanding the [stratigraphy](#stratigraphy) and structure of the [subsurface](#subsurface-modelling), aiding in resource exploration and geological mapping.
The key assumption of the layer cake model is that each layer is homogeneous and is defined by its thickness and physical properties across the entire area of model. This simplification allows for easier analysis and interpretation of geophysical data, as well as it is easier for numerical modelling, but such a model may not accurately represent complex geological formations like [salt domes](#salt-dome), [folds](#fold), or [faults](#fault).

### Lithosphere

The rigid outer layer of the Earth, including the crust and upper mantle, involved in tectonic and subsurface studies.

------------------------------------------------------------------------

M
-

### magnetic anomaly

Deviation from the Earth's expected magnetic field, revealing subsurface features like mineral deposits.

### magnetic field

The region around a magnetic material or moving electric charge where magnetic forces are exerted. The Earth's magnetic field is generated by its core and provides data about the structure and composition of the subsurface.

### magnetic gradient

The rate of change of the Earth's [magnetic field](#magnetic-field) strength over distance. It is used in [geophysics](#geophysics) to detect small-scale variations in magnetic properties and to map subsurface features such as mineral deposits.

### magnetic susceptibility

Quantitative measure of the extent to which a material may be magnetized in relation to a given applied magnetic field. The magnetic susceptibility of a material, commonly symbolized by $\chi_m$, is equal to the ratio of the magnetization $M$ within the material to the applied magnetic field strength $H$, or $\chi_m = M/H$. This ratio, strictly speaking, is the volume susceptibility, because magnetization essentially involves a certain measure of magnetism (dipole moment) per unit volume.

[:octicons-arrow-right-24: **Source**](https://www.britannica.com/science/magnetic-susceptibility)

### magnetization

The degree to which a material, typically rocks, becomes magnetized in the presence of an external [magnetic field](#magnetic-field). It reflects the alignment of magnetic minerals within the material and provides important insights into the Earth's past magnetic field, as well as the composition and structure of the subsurface.

### magnetism

A physical phenomenon produced by the motion of electric charges, leading to the attraction or repulsion of objects. In [geophysics](#geophysics), Earth's magnetism, generated by the [core](#core), is studied to understand the [magnetic field](#magnetic-field) and its interactions with subsurface materials, helping map geological structures.

### magnetometer

A device that measures magnetic field intensity and variations in the Earth's [magnetic field](#magnetic-field).

### mantle

The layer of the Earth located between the [crust](#crust) and the [core](#core), extending to a depth of about 2,900 kilometers. It is composed mostly of silicate rocks rich in magnesium and iron and behaves as a solid but flows slowly over geological time. The mantle plays a key role in [plate tectonics](#plate-tectonics), [volcanic activity](#volcanic-activity), and the transfer of heat and materials within the Earth.

### mantle convection

The slow, churning movement of the Earth's [mantle](#mantle). Hotter, less dense material rises while cooler, denser material sinks, driving [plate tectonics](#plate-tectonics) and influencing [volcanic activity](#volcanic-activity), [earthquakes](#earthquake), and the formation of geological features.

### Marching Cubes

Marching Cubes is an algorithm used to extract a polygonal mesh of an [isosurface](#isosurface) from a three-dimensional scalar field (often a 3D grid of values). It is widely applied in [geophysics](#geophysics) for visualizing [subsurface](#subsurface-modelling) data, [seismic](#seismic-imaging) interpretation, and medical imaging. The method calculates surface intersections within grid cells and constructs a [triangulated](#triangulation) representation of the surface. This algorithm is essential for rendering volumetric data in [potential field](#potential-field) modelling and numerical simulations.

### mass density

The amount of mass per unit volume of a substance, synonymous with [density](#density). Mass density is a key parameter in understanding the distribution of materials in the Earth's [crust](#crust) and [mantle](#mantle).

### mass point

A mass point is an idealized object representing a body with mass concentrated at a single point. In [geophysics](#geophysics), mass points are used in [potential field](#potential-field) modelling to simplify [gravitational](#gravity) or [magnetic field](#magnetic-field) calculations. They serve as sources in numerical simulations, helping to approximate the effects of complex [geological](#geology) structures.

### model vertice

Model vertices are the points in a 3D model that define its shape and structure. In [geophysical](#geophysics) modelling, these vertices represent the corners of polygons or mesh elements used to create a visual representation of subsurface features. They are essential for rendering and analyzing geological structures in software applications.

### Moho (Mohorovičić Discontinuity)

The Moho is the boundary between Earth's [crust](#crust) and the [mantle](#mantle), named after Andrija Mohorovičić, a Croatian seismologist who discovered it in 1909. It marks a distinct change in [seismic wave](#seismic-waves) velocities, reflecting the transition from less dense crustal rocks to denser mantle materials. The Moho plays a crucial role in understanding crustal thickness and geophysical surveys involving [seismic](#seismic-imaging), [gravity](#gravity), and [magnetic](#magnetism) data.

------------------------------------------------------------------------

N
-

### numerical modelling

Numerical modelling involves using mathematical models and computational techniques to simulate real-world physical processes. In [geophysics](#geophysics), this method is essential for interpreting [gravity](#gravity), [magnetic](#magnetism), and other geophysical data, e.g. by simulating [density](#density) or seismic velocity models to understand subsurface structures.

------------------------------------------------------------------------

O
-

### OpenCL (Open Computing Language)

OpenCL is an open standard for parallel programming of heterogeneous systems, including [CPUs](#cpu-central-processing-unit) and [GPUs](#gpu-graphics-processing-unit). It enables developers to accelerate computing tasks by distributing workloads across diverse processors, making it valuable for geophysical modeling, numerical simulations, and large-scale data processing in IT and scientific applications.

### OpenGL (Open Graphics Library)

OpenGL is a cross-platform API for rendering 2D and 3D vector graphics. It is widely used in graphics-intensive applications such as geophysical visualization, [CAD](#cad-computer-aided-design), and game development. OpenGL allows for efficient rendering of models and simulations, playing a key role in visualizing potential field data and geological formations.

### optimization

Optimization refers to the process of finding the best solution from a set of possible solutions, often by maximizing or minimizing a particular function. In [geophysics](#geophysics), optimization is crucial for tasks like refining models of Earth's subsurface based on [seismic](#seismicity), [gravity](#gravity) and [magnetic](#magnetism) data, where algorithms (like [genetic algorithms](#genetic-algorithm) or [evolution strategies](#evolution-strategy)) help fine-tune parameters to achieve the most accurate representation of geological features.

------------------------------------------------------------------------

P
-

### potential field

A field, such as [gravity](#gravity-field) or [magnetics](#magnetic-field), where the force is a function of position and can be described by a potential function.

### plate tectonics

A scientific theory that describes the large-scale movement of Earth's [lithosphere](#lithosphere), which is divided into [tectonic plates](#tectonic-plate).

### polygon

A polygon is a two-dimensional geometric figure with straight sides. In [geophysics](#geophysics), polygons are often used to represent geological features, survey areas, or boundaries in [GIS](#gis-geographic-information-system) applications. They can be defined by a series of [vertices](#vertex) (points) connected by edges, forming a closed shape or [hull](#hull).

### polyhedron

A polyhedron is a three-dimensional geometric shape with flat polygonal faces, straight edges, and [vertices](#vertex). In **IGMAS+** polyhedra are used to represent complex geological structures, such as [bodies](#body) or [horizons](#horizon), in 3D models. They are essential for visualizing subsurface features and conducting numerical simulations in **IGMAS+** and geophysical applications in general.

### PROJ

[PROJ](https://proj.org) (also knows as PROJ.4) is an open-source software library used for cartographic projections and coordinate transformations. It enables the conversion of geographic coordinates between different [coordinate reference systems](#crs-coordinate-reference-system) by applying mathematical models of the Earth's shape, such as ellipsoids and geoids.

### projection

A projection transforms the Earth's curved surface into a flat, two-dimensional map. This process inevitably introduces distortions in area, shape, distance, or direction. Different projections are chosen based on the purpose of the map and the region being represented. In [geophysics](#geophysics) and [GIS](#gis-geographic-information-system), projections are crucial for spatial analysis and accurate visualization.

------------------------------------------------------------------------

Q
-

------------------------------------------------------------------------

R
-

### reference body

In **IGMAS+**, a reference body is a special [body](#body) that surrounds all other bodies in a model.
The reference body is defined by the [reference density](#reference-density).

### reference density

Reference density is a baseline or assumed constant density value used in gravity and potential field modelling to calculate density contrasts in the subsurface. In **IGMAS+** reference density is a density value of the [reference body](#reference-body), therefore, the reference density is the density, which surrounds the entire model. The reference density is subtracted from the density values of each body when calculating of their gravity responses.

### reference meridian

A reference meridian is the prime longitudinal line used as the starting point for measuring longitude. It serves as a global standard for geographic [coordinate systems](#crs-coordinate-reference-system). The most widely recognized reference meridian is the Greenwich Prime Meridian (0° longitude), adopted internationally in 1884.

### remanent magnetization

The [magnetization](#magnetization) retained by a rock after the removal of an external [magnetic field](#magnetic-field), revealing past geomagnetic conditions.

------------------------------------------------------------------------

S
-

### salt dome

A salt dome is a geologic structure formed when a mass of salt (halite) moves upward through overlying [sedimentary](#sediments) rock layers. This occurs due to salt's lower [density](#density) compared to surrounding rocks, causing it to rise. Salt domes are significant in [geophysics](#geophysics), particularly in [gravity](#gravity) and [seismic](#seismic-imaging) studies, because they can distort the Earth's [potential fields](#potential-field) and serve as traps for hydrocarbons, making them important in oil and gas exploration. Salt domes affect the propagation of seismic waves due to salt's unique physical properties (high velocity of [seismic waves](#seismic-waves) and low absorption), which often result in challenges when interpreting seismic data.

### sediments

Particles of rock, minerals, or organic material that have been transported and deposited by wind, water, or ice. Over time, these can compact and lithify to form sedimentary rocks, often studied in subsurface geology.

### seismic imaging

Seismic imaging is a [geophysical](#geophysics) technique used to create detailed pictures of the Earth's subsurface by analyzing the propagation of [seismic waves](#seismic-waves). It involves recording seismic waves, typically generated by controlled sources or natural [earthquakes](#earthquake), and processing the data to visualize geological structures. This method is widely used in oil and gas exploration, mineral prospecting, and understanding [fault](#fault) zones for [earthquake](#earthquake) studies.

### seismic waves

Seismic waves are vibrations that travel through the Earth, typically caused by [earthquakes](#earthquake), [volcanic activity](#volcanic-activity), or artificial explosions. They are categorized into two main types: body waves (P-waves and S-waves), which travel through the Earth's interior, and surface waves (Love and Rayleigh waves), which travel along the Earth's surface. Seismic waves are crucial in geophysical studies for investigating the Earth's internal structure and in [seismic imaging](#seismic-imaging) for resource exploration.

### seismicity

The frequency, distribution, and magnitude of [earthquakes](#earthquake) in a specific region over time. It provides valuable information about [tectonic activity](#plate-tectonics), [fault](#fault) movements, and [stress](#stress) accumulation in the Earth's [crust](#crust). Seismicity is studied to understand earthquake patterns, assess hazards, and explore subsurface geological structures.

### seismology

Seismology is the scientific study of [earthquakes](#earthquake) and the propagation of [seismic waves](#seismic-waves) through the Earth. It aims to understand the mechanisms of earthquakes, the behavior of seismic waves, and the Earth's internal structure. Seismology plays a crucial role in earthquake monitoring, hazard assessment, and resource exploration by analyzing seismic data to map subsurface structures.

### slab

A portion of the Earth's [lithosphere](#lithosphere), often referring to a [tectonic plate](#tectonic-plate) that has been subducted beneath another plate. Slabs influence [gravity](#gravity-field) and [magnetic](#magnetic-field) fields and are key features in plate tectonics and subsurface studies.

### spatial anti-aliasing

In digital signal processing, spatial anti-aliasing is a technique for minimizing the distortion artifacts (aliasing) when representing a high-resolution image at a lower resolution. Anti-aliasing is used in digital photography, computer graphics, digital audio, and many other applications.

[:octicons-arrow-right-24: **Source**](https://en.wikipedia.org/wiki/Spatial_anti-aliasing)

### standard deviation

Standard deviation is a statistical measure that quantifies the amount of variation or dispersion of a set of values from its mean. A low standard deviation indicates that the values are close to the mean, while a high standard deviation indicates greater variability. In [geophysics](#geophysics), it is used to assess the spread or [uncertainty](#uncertainty) of model parameters or data measurements, providing insight into data reliability.

It is calculated using the formula:

$$\sigma = \sqrt{ \frac{1}{N} \sum_{i=1}^{N} (x_i - \mu)^2},$$

where:

-   $\sigma$ is the standard deviation,
-   $N$ is the number of data points,
-   $x_i$​ is each individual data point,
-   $\mu$ is the mean of the data set.

### stratigraphy

Stratigraphy refers both to the study of layered rock formations and the actual sequence of these layers in the [subsurface](#subsurface-modelling). In geophysical applications, stratigraphy is interpreted from [seismic](#seismic-imaging), [gravity](#gravity), and [magnetic](#magnetism) data to identify [horizons](#horizon), model geological history, and support exploration and resource assessments.

### stress

The force per unit area applied to a material, such as rock, that can cause deformation or fracturing. In [geophysics](#geophysics), stress in the Earth's [crust](#crust) is caused by tectonic forces, leading to phenomena such as [earthquakes](#earthquake) and the formation of [faults](#fault). There are three primary types of stress: compressional, tensional, and shear, each influencing how rocks deform or break.

### subsurface modelling

The process of creating a representation of the Earth's subsurface using geophysical data, such as seismic, gravity, magnetic data, to understand geological structures and material properties.

### SVD

SVD (Singular Value Decomposition): a mathematical technique used in data analysis and modelling to decompose a matrix into three components: singular vectors and singular values. In [geophysics](#geophysics), SVD is often applied to solve [inverse problems](#inverse-problem), process [potential field](#potential-field) data, and enhance subsurface imaging by reducing noise and extracting key features from complex datasets.

------------------------------------------------------------------------

T
-

### tectonic plate

A massive [slab](#slab) of Earth's [lithosphere](#lithosphere) that moves and interacts with other plates, influencing [gravity](#gravity-field) and [magnetic](#magnetic-field) fields.

### terrain correction

A correction applied to [gravity](#gravity) measurements to account for the gravitational influence of surrounding topographic features such as hills, valleys, and mountains. This correction refines the [Bouguer Anomaly](#bouguer-anomaly) by adjusting for the variations in gravitational pull caused by uneven terrain. It is particularly important in rugged or mountainous areas, where [topography](#topography) significantly affects gravity data, ensuring that subsurface interpretations are not distorted by surface features.

### tidal correction

A correction applied to [gravity](#gravity) measurements to account for the gravitational effects of tidal forces from the Moon and the Sun. These celestial bodies cause variations in Earth's [gravity field](#gravity-field) as they exert their pull on the Earth, leading to slight fluctuations in measured gravity values. Tidal correction removes this time-varying influence, ensuring that gravity data reflects only the local geological conditions and not temporary effects from tides.

### topography

The physical shape and features of the Earth's surface, including mountains, valleys, plains, and other landforms. In [geophysics](#geophysics), topography influences [gravity](#gravity) and [magnetic](#magnetism) data, as variations in elevation and surface features affect measurements. Correcting for topographic effects (through methods like [terrain correction](#terrain-correction)) is crucial for accurately interpreting subsurface structures in gravity and magnetic surveys.

### topology

Topology is a branch of mathematics that studies the properties of space that are preserved under continuous transformations. **Model topology** refers to the arrangement and connectivity of elements within a model. In **IGMAS+** we understand by **topology of a model** the relationships between its elements, such as [bodies](#body), [interfaces](#interface), and [horizons](#horizon). It is used to define how these elements are connected or interact with each other, which is essential for understanding the overall structure and behavior of the model.

### triangulation

Triangulation is the process of dividing a geometric surface or space into triangles, which can be used to approximate shapes and surfaces. In [geophysics](#geophysics), triangulation is critical for creating [3D models](#3d-model) of geological structures, isosurfaces, and topographic maps. This technique enhances numerical modelling, [interpolation](#interpolation), and [visualization](#data-visualization) by breaking complex surfaces into simpler elements.

------------------------------------------------------------------------

U
-

### uncertainty

Uncertainty refers to the lack of certainty in measurements, predictions, or model outcomes. In [geophysics](#geophysics), uncertainty can arise from limitations in data quality, measurement errors, or assumptions made during modelling. Understanding and quantifying uncertainty is essential for interpreting geophysical models and assessing the reliability of conclusions, particularly in processes like inversion and potential field studies.

### uncertainty analysis

Uncertainty analysis involves quantifying the degree of [uncertainty](#uncertainty) in model parameters or predictions. In [geophysics](#geophysics), it is crucial to assess how uncertainties in data, model assumptions, or input parameters can affect the reliability of the results. This helps in determining the confidence in models, such as those derived from [potential field](#potential-field) inversion, and understanding the range of possible solutions for a given dataset.

### UTM (Universal Transverse Mercator)

The Universal Transverse Mercator (UTM) is a global coordinate system that divides the Earth into 60 longitudinal zones, each spanning 6 degrees. It uses a transverse Mercator [projection](#projection) to map curved surfaces onto a flat grid with minimal distortion. UTM coordinates are widely used in [geophysics](#geophysics), surveying, and [GIS](#gis-geographic-information-system) for precise location mapping and spatial analysis.

------------------------------------------------------------------------

V
-

### variance

Variance is a statistical measure that describes the extent to which a set of values deviates from its mean. In geophysical studies, variance can be used to quantify the variability or spread of parameters, helping to assess data reliability or model stability. Higher variance indicates greater variability in the data or parameters being analyzed.

Mathematically it is the square of the standard deviation.

### vertex

Vertices are the points in a geometric shape where edges meet. In [3D models](#3d-model), vertices define the corners of [polygons](#polygon) or mesh elements, forming the structure of the model. Vertices are used to represent geological features, survey data, and other spatial information in visualizations and numerical simulations.
In **IGMAS+**, vertices are used to define the model geometry at [working sections](#working-section), including the shape and position of geological [bodies](#body) and [interfaces](#interface).

### volcanic activity

The eruption of molten rock (magma), ash, and gases from a volcano. It is driven by [mantle convection](#mantle-convection) and [plate tectonics](#plate-tectonics), and it plays a significant role in shaping the Earth's surface, contributing to [crust](#crust) formation and geophysical phenomena like [gravity](#gravity-anomaly) and [magnetic](#magnetic-anomaly) anomalies.

### voxel

A voxel, short for "volumetric pixel," is a three-dimensional pixel element used to represent a value on a regular grid in three-dimensional space. Similar to how a pixel represents a point or an area in a two-dimensional image, a voxel represents a point or a volume element in a three-dimensional space, typically in the context of computer graphics, medical imaging and scientific visualization. Each voxel contains information about properties such as color, density, texture, or other attributes, depending on the application. Voxel-based representations are commonly used in various fields for tasks like modelling, simulation, analysis, and rendering of three-dimensional data.

In **IGMAS+**, voxels are used to encounter parameter variations ([density](#density)/[susceptibility](#magnetic-susceptibility)).

### voxel cube

In **IGMAS+**, a voxel cube is a volume consisting of many sub-volumes, or [voxels](#voxel). The term "cube" is not a correct term here, parallelepiped is the appropriate one. The term "cube" is used for historical reasons and simplicity.

------------------------------------------------------------------------

W
-

### WGS84 (World Geodetic System 1984)

WGS84 is the global standard coordinate system and datum used for GPS. It models the Earth as an ellipsoid and provides a common reference frame for geospatial data worldwide. WGS84 defines the shape of the Earth and serves as the basis for most modern mapping, navigation, and geophysical applications.

### WKT (Well-Known Text)

WKT (Well-Known Text) is a text-based format used to describe geospatial data and [coordinate reference systems](#crs-coordinate-reference-system). It provides a human-readable way to represent geometric shapes (like points, lines, and polygons) and coordinate systems used in [GIS](#gis-geographic-information-system).

### working section

Working section in **IGMAS+** is a vertical user-defined plane used for constructing and editing the 3D density model.
All [model vertices](#model-vertice) lie on these parallel planes, which serve as interactive canvases for defining interfaces and geological bodies. The number, spacing, and orientation of working sections determine model resolution (for editing) and must be chosen based on the geometry of target anomalies.

### WorldWind

[WorldWind](https://worldwind.arc.nasa.gov/) is an open-source virtual globe developed by NASA for geospatial data visualization. It allows users to interact with 3D representations of Earth and other celestial bodies, providing tools to overlay and analyze geospatial data, such as satellite imagery, terrain, and vector data. WorldWind is widely used in scientific research and [GIS](#gis-geographic-information-system). In **IGMAS+** [WorldWind Java](https://github.com/NASAWorldWind/WorldWindJava) is is used for visualizing gravity and magnetic data on the globe.

------------------------------------------------------------------------

X
-

### XML (eXtensible Markup Language)

XML is a markup language used to encode documents in a format that is both human-readable and machine-readable. It defines rules for structuring data through tags and attributes, enabling hierarchical organization. XML documents can reference a [DTD (Document Type Definition)](#dtd-document-type-definition) to validate their structure, ensuring that the data conforms to predefined rules. This is crucial in web development, data exchange, and geophysical software for configuring models, storing metadata, and transmitting structured information.

------------------------------------------------------------------------

Y
-

------------------------------------------------------------------------

Z
-

------------------------------------------------------------------------

0-10
----

### 3D Model

A representation of subsurface structures in three dimensions, based on geophysical data.

References
==========

Below is a list of references (sorted by date, newest first) used in the **IGMAS+** documentation, [tutorial](./tutorial/index.md), [examples](./examples/index.md), as well as in the **IGMAS+** software itself.
The list also includes publications with **IGMAS+** applications and some additional references that are not directly used in the documentation, but are relevant to the topics covered.

\full\_bibliography

[^1]: Przybycin, A. M., Scheck-Wenderoth, M., & Schneider, M. (2015). Assessment of the isostatic state and the load distribution of the European Molasse basin by means of lithospheric-scale 3D structural and 3D gravity modelling. International Journal of Earth Sciences, 104(5), 1405-1424. [doi:10.1007/s00531-014-1132-4](https://doi.org/10.1007/s00531-014-1132-4)

[^2]: Szymanski (Przybycin), A., Scheck-Wenderoth, M., Schneider, M., & Anikiev, D. (2024). MOLA: 3D lithospheric-scale structural model of the European Molasse basin (Version 1). Zenodo. [doi:10.5281/zenodo.10869954](https://doi.org/10.5281/zenodo.10869954)

[^3]: Przybycin, A. M., Scheck-Wenderoth, M., & Schneider, M. (2015). Assessment of the isostatic state and the load distribution of the European Molasse basin by means of lithospheric-scale 3D structural and 3D gravity modelling. International Journal of Earth Sciences, 104(5), 1405-1424. [doi:10.1007/s00531-014-1132-4](https://doi.org/10.1007/s00531-014-1132-4)

[^4]: Przybycin, A. M., Scheck-Wenderoth, M., & Schneider, M. (2015). Assessment of the isostatic state and the load distribution of the European Molasse basin by means of lithospheric-scale 3D structural and 3D gravity modelling. International Journal of Earth Sciences, 104(5), 1405-1424. [doi:10.1007/s00531-014-1132-4](https://doi.org/10.1007/s00531-014-1132-4)

[^5]: BGI (2012). The International Gravimetric Bureau. In: Drewes H, Hornik H, Adam J, Rozsa S (eds) The Geodesist's handbook 2012. (International Association of Geodesy). J Geodesy 86(10). [doi:10.1007/s00190-012-0584-1](http://dx.doi.org/10.1007/s00190-012-0584-1)

[^6]: Pavlis N. K., Holmes S. A., Kenyon A. C., Factor J. K. (2012). The development and evaluation of the Earth Gravitational Model 2008 (EGM2008). J. Geophys. Res. 117:B04406. [doi:10.1029/2011JB008916](http://dx.doi.org/10.1029/2011JB008916)

[^7]: Przybycin, A. M., Scheck-Wenderoth, M., & Schneider, M. (2015). Assessment of the isostatic state and the load distribution of the European Molasse basin by means of lithospheric-scale 3D structural and 3D gravity modelling. International Journal of Earth Sciences, 104(5), 1405-1424. [doi:10.1007/s00531-014-1132-4](https://doi.org/10.1007/s00531-014-1132-4)

[^8]: Mundry, E. (1970). "Zur automatischen Herstellung von Isolinienplänen". In: BEIH. GEOL. JB. 98, pp. 77--93.

[^9]: Szymanski (Przybycin), A., Scheck-Wenderoth, M., Schneider, M., & Anikiev, D. (2024). MOLA: 3D lithospheric-scale structural model of the European Molasse basin (Version 1). Zenodo. [doi:10.5281/zenodo.10869954](https://doi.org/10.5281/zenodo.10869954)

[^10]: Przybycin, A. M., Scheck-Wenderoth, M., & Schneider, M. (2015). Assessment of the isostatic state and the load distribution of the European Molasse basin by means of lithospheric-scale 3D structural and 3D gravity modelling. International Journal of Earth Sciences, 104(5), 1405-1424. [doi:10.1007/s00531-014-1132-4](https://doi.org/10.1007/s00531-014-1132-4)

[^11]: Szymanski (Przybycin), A., Scheck-Wenderoth, M., Schneider, M., & Anikiev, D. (2024). MOLA: 3D lithospheric-scale structural model of the European Molasse basin (Version 1). Zenodo. [doi:10.5281/zenodo.10869954](https://doi.org/10.5281/zenodo.10869954)

[^12]: Szymanski (Przybycin), A., Scheck-Wenderoth, M., Schneider, M., & Anikiev, D. (2024). MOLA: 3D lithospheric-scale structural model of the European Molasse basin (Version 1). Zenodo. [doi:10.5281/zenodo.10869954](https://doi.org/10.5281/zenodo.10869954)
