How to construct an atm_field_compact?
======================================

**TODO: Finish FAQ**
How to construct an atm_fields_compact?
=======================================

An :arts:`atm_fields_compact` is a compact set of atmospheric fields on a
common set of grids.

Data is supposed to contain basic atmsopheric fields for a radiative transfer
calculation (i.e., temperature, altitude, and gas VMRs) and is stored in a
:class:`~typhon.arts.griddedfield.GriddedField4`.

The following code snippet demonstrates how to create an
:arts:`atm_fields_compact` and write it to an ARTS XML file.

.. code-block:: python

    import numpy as np
    import typhon


    # Initialize an empty GriddedField4 object.
    atm_fields_compact = typhon.arts.types.GriddedField4()

    # Create required grids.
    field_names = ['T', 'z', 'abs_species-H2O']
    p_grid = typhon.math.nlogspace(1000e2, 0.01e2, 50)
    lat_grid = np.array([])
    lon_grid = np.array([])

    # Assign the `grids` attribute with a list of the grids created.
    atm_fields_compact.grids = [field_names, p_grid, lat_grid, lon_grid]
    atm_fields_compact.gridnames = [
        'Fieldnames', 'Pressure', 'Latitude', 'Longitude',
    ]

    # Create (dummy) data arrays.
    T = 300 * np.ones(p_grid.size)
    z = np.linspace(0, 80e3, p_grid.size)
    vmr = 0.04 * (p_grid / p_grid[0])**1.7

    # The data is stored as :arts:`Tensor4` which is represented as a
    # four-dimensional ndarray in Python. We stack our (one-dimensional)
    # arrays to create the required tensor. The following line adds two
    # extra dimension to account for the empty latitude/longitude dimensions.
    # The resulting data has the shape `[3, 50, 1, 1]`.
    data_tensor = np.stack(
        [x.reshape(-1, 1, 1) for x in (T, z, vmr)]
    )
    atm_fields_compact.data = data_tensor

    # Manually check if grid and data dimensions match. This is done
    # automatically when assigning data or before writing GriddedFields to an
    # XML file.
    atm_fields_compact.check_dimension()

    # Write the atm_fields_compact to an XML file that can be read by ARTS.
    typhon.arts.xml.save(atm_fields_comapct, 'atmfield.xml')

Add FAQ on how to construct an atm_fields_compact.
Add FAQ on how to construct an atm_fields_compact.

This closes #66.
