==========
Quickstart
==========

This example shows how to configure and run one emissions timestep.
It mirrors how a host model (e.g. MPAS-A) drives MIEM directly in C++,
without going through the YAML parsing layer.

Species mapping and inventory translation are handled upstream by
``MechanismConfiguration`` and ``musica::Translate()``. By the time
``MIEMConfig`` reaches MIEM, species are already resolved.

Setting Up Sources
==================

.. code-block:: cpp

   #include <miem/config.hpp>
   #include <miem/emissions.hpp>
   #include <miem/emissions_state.hpp>

   using namespace miem;

   SourceConfig cams_anthro{
     .name_                   = "cams anthro",
     .mode_                   = SourceMode::Offline,
     .type_                   = SourceType::Anthropogenic,
     .file_pattern_           = "/path/to/CAMS-GLOB-ANT_{YYYY}-{MM}.nc",
     .temporal_interpolation_ = TemporalInterpolation::Linear,
     .vertical_injection_     = VerticalInjection::Surface,
     .category_               = 0,
     .hierarchy_              = 1,
     .scaling_factor_         = 1.0,
     .sector_                 = "anthropogenic",
   };

Assembling the Config and Running
==================================

.. code-block:: cpp

   MIEMConfig cfg{
     .sources_ = { cams_anthro },
   };

   EmissionsModule module(cfg, /*n_cells=*/163842, /*n_vert_levels=*/60);

   EmissionsState state = module.Run(
     86400.0 * 180.0,  // sim_time_sec: day 180
     600.0             // dt_sec: 10 minutes
   );

Reading the Output
==================

.. code-block:: cpp

   double no_flux = state.surface_flux_(0, "NO");  // kg m-2 s-1 at cell 0

   double anthro_no = state.sector_fluxes_.at("anthropogenic")(0, "NO");

See ``examples/full_example.cpp`` for the complete worked example including
multiple layered sources and sector diagnostics.
