anchor.diff:  
       end subroutine
   
  -    !> -------------------------------
  -    !! Send the halos from all exchangable objects to their neighbors
  -    !!
  -    !! -------------------------------
  -    module subroutine halo_send(this)
  -      class(domain_t), intent(inout) :: this
  -      call this%water_vapor%send()
  -      call this%potential_temperature%send()
  -      call this%cloud_water_mass%send()
  -      call this%cloud_ice_mass%send()
  -      call this%cloud_ice_number%send()
  -      call this%rain_mass%send()
  -      call this%rain_number%send()
  -      call this%snow_mass%send()
  -      call this%graupel_mass%send()
  -    end subroutine
  -
  -    !> -------------------------------
  -    !! Get the halos from all exchangable objects from their neighbors
  -    !!
  -    !! -------------------------------
  -    module subroutine halo_retrieve(this)
  -      class(domain_t), intent(inout) :: this
  -      call this%water_vapor%retrieve() ! the retrieve call will sync all
  -      call this%potential_temperature%retrieve(no_sync=.True.)
  -      call this%cloud_water_mass%retrieve(no_sync=.True.)
  -      call this%cloud_ice_mass%retrieve(no_sync=.True.)
  -      call this%cloud_ice_number%retrieve(no_sync=.True.)
  -      call this%rain_mass%retrieve(no_sync=.True.)
  -      call this%rain_number%retrieve(no_sync=.True.)
  -      call this%snow_mass%retrieve(no_sync=.True.)
  -      call this%graupel_mass%retrieve(no_sync=.True.)
  -    end subroutine
  -
  -    !> -------------------------------
  -    !! Send and get the halos from all exchangable objects to/from their neighbors
  -    !!
  -    !! -------------------------------
  -    module subroutine halo_exchange(this)
  -      class(domain_t), intent(inout) :: this
  -      call this%halo_send()
  -
  -      call this%halo_retrieve()
  -    end subroutine
  -
  -    !> -------------------------------
  -    !! Set up the initial conditions for the domain
  -    !!
  -    !! This includes setting up all of the geographic interpolation now that we have the forcing grid
  -    !! and interpolating the first time step of forcing data on to the high res domain grids
  -    !!
  -    !! -------------------------------
  -    module subroutine get_initial_conditions(this, forcing, options)
  -      implicit none
  -      class(domain_t),  intent(inout) :: this
  -      class(boundary_t),intent(inout) :: forcing
  -      class(options_t), intent(in)    :: options
  -
  -      ! create geographic lookup table for domain
  -      call setup_geo_interpolation(this, forcing)
  -
  -      ! for all variables with a forcing_var /= "", get forcing, interpolate to local domain
  -      call interpolate_datasets(this, forcing)
  -
  -    end subroutine
   
       !> -------------------------------
       !! Setup the Geographic look up tables for interpolating a given forcing data set to each of the grids
  
positive.code: submodule(domain_interface) domain_implementation
    use assertions_mod,       only : assert, assertions
    use iso_fortran_env,      only : error_unit
    use grid_interface,       only : grid_t
    use options_interface,    only : options_t
    use mod_atm_utilities,    only : exner_function, sat_mr, pressure_at_elevation
    use icar_constants,       only : kVARS
    use string,               only : str
    use microphysics,         only : mp_simple_var_request
    use co_util,              only : broadcast
    use io_routines,          only : io_read, io_write
    use geo,                  only : geo_lut, geo_interp, geo_interp2d, standardize_coordinates
    use array_utilities,      only : array_offset_x, array_offset_y
    use vertical_interpolation,only : vinterp, vLUT
  
    implicit none
  
    interface setup
        module procedure setup_var, setup_exch
    end interface
  
  contains
  
  
  
negative.code:     end subroutine
  
  
      !> -------------------------------
      !! Set up the initial conditions for the domain
      !!
      !! This includes setting up all of the geographic interpolation now that we have the forcing grid
      !! and interpolating the first time step of forcing data on to the high res domain grids
      !!
      !! -------------------------------
      module subroutine get_initial_conditions(this, forcing, options)
        implicit none
        class(domain_t),  intent(inout) :: this
        class(boundary_t),intent(inout) :: forcing
        class(options_t), intent(in)    :: options
  
        ! create geographic lookup table for domain
        call setup_geo_interpolation(this, forcing)
  
        ! for all variables with a forcing_var /= "", get forcing, interpolate to local domain
        call interpolate_datasets(this, forcing)
  
      end subroutine
  
  
      !> -------------------------------
      !! Send the halos from all exchangable objects to their neighbors
      !!
      !! -------------------------------
      module subroutine halo_send(this)
        class(domain_t), intent(inout) :: this
        call this%water_vapor%send()
        call this%potential_temperature%send()
        call this%cloud_water_mass%send()
        call this%cloud_ice_mass%send()
        call this%cloud_ice_number%send()
        call this%rain_mass%send()
        call this%rain_number%send()
        call this%snow_mass%send()
        call this%graupel_mass%send()
      end subroutine
  
      !> -------------------------------
      !! Get the halos from all exchangable objects from their neighbors
      !!
      !! -------------------------------
      module subroutine halo_retrieve(this)
        class(domain_t), intent(inout) :: this
        call this%water_vapor%retrieve() ! the retrieve call will sync all
        call this%potential_temperature%retrieve(no_sync=.True.)
        call this%cloud_water_mass%retrieve(no_sync=.True.)
        call this%cloud_ice_mass%retrieve(no_sync=.True.)
        call this%cloud_ice_number%retrieve(no_sync=.True.)
        call this%rain_mass%retrieve(no_sync=.True.)
        call this%rain_number%retrieve(no_sync=.True.)
        call this%snow_mass%retrieve(no_sync=.True.)
        call this%graupel_mass%retrieve(no_sync=.True.)
      end subroutine
  
      !> -------------------------------
      !! Send and get the halos from all exchangable objects to/from their neighbors
      !!
      !! -------------------------------
      module subroutine halo_exchange(this)
        class(domain_t), intent(inout) :: this
        call this%halo_send()
  
        call this%halo_retrieve()
      end subroutine
  
  
      !> -------------------------------
  