anchor.diff:      type, extends(interpolable_type) :: linearizable_type
           ! linear theory computes u,v at z.  Trying rho to mitigate boussinesq approx... 
           real, allocatable, dimension(:,:,:) :: u,v,dz,rho
  -        ! these are needed to compute Brunt Vaisalla Frequency... (cloud, ice snow, rain to check for moist vs dry)
  -        real, allocatable, dimension(:,:,:) :: th,p,pii,qv,cloud,ice,qsnow,qrain
  -        real, allocatable, dimension(:,:,:) :: nsquared ! BV frequency
  -        type(interpolable_type)             :: u_geo,v_geo
  -        real, allocatable, dimension(:,:)   :: terrain,dzdx,dzdy
  -        real, allocatable, dimension(:,:)   :: linear_mask, nsq_calibration
  -        complex(C_DOUBLE_COMPLEX), allocatable, dimension(:,:) :: fzs !FFT(terrain)
  -        real::dx
  +        ! these are needed to compute Brunt Vaisalla Frequency... 
  +        real, allocatable, dimension(:,:,:) :: th                   ! potential temperature         [K]
  +        real, allocatable, dimension(:,:,:) :: p                    ! pressure                      [Pa]
  +        real, allocatable, dimension(:,:,:) :: pii                  ! exner function                []
  +        real, allocatable, dimension(:,:,:) :: qv                   ! water vapor mixing ratio      [kg/kg]
  +        ! used to determine if moist or dry brunt vaisala frequency is used
  +        real, allocatable, dimension(:,:,:) :: cloud,ice,qsnow,qrain ! hydrometeor mixing ratios    [kg/kg]
  +        real, allocatable, dimension(:,:,:) :: nsquared             ! Brunt-Vaisala frequency       [1/s^2]
  +        type(interpolable_type)             :: u_geo,v_geo          ! types to store the staggered grid lat/lon & geoluts
  +        real, allocatable, dimension(:,:)   :: terrain              ! ground surface                [m]
  +        real                                :: dx                   ! the horizontal grid spacing   [m]
  +        real, allocatable, dimension(:,:)   :: dzdx,dzdy            ! change in terrain / dx        [m/m]
  +        real, allocatable, dimension(:,:)   :: linear_mask          ! weights to multiply linear wind by (default=1)
  +        real, allocatable, dimension(:,:)   :: nsq_calibration      ! calibration parameter to multiply brunt-vaisala frequency by [0-]
  +        complex(C_DOUBLE_COMPLEX), allocatable, dimension(:,:) :: fzs ! FFT(terrain)
       end type linearizable_type
       
       ! ------------------------------------------------
  
positive.code:         real, allocatable, dimension(:,:,:) :: du_dt,dv_dt,dp_dt,dth_dt,dqv_dt,dqc_dt
          ! sh, lh, and pblh fields are only 2d. 
          ! These are only used with LSM option 1 and are derived from forcing file
          real, allocatable, dimension(:,:) :: dsh_dt,dlh_dt,dpblh_dt
          ! change in shortwave and longwave at surface if read from forcing
          real, allocatable, dimension(:,:) :: dsw_dt, dlw_dt
          ! change in sst if read from forcing file
          real, allocatable, dimension(:,:) :: dsst_dt
          ! store the low resolution versionf of terrain and atmospheric elevations
          real,allocatable,dimension(:,:)::lowres_terrain
          real,allocatable,dimension(:,:,:)::lowres_z
          ! store the full high-res 3D grid for the next time step to compute dXdt fields
          ! includes high res versions of low res terrain and z
          type(domain_type)::next_domain
  
negative.code:     ! generic interpolable type so geo interpolation routines will work on winds, domain, or boundary conditions. 
      ! ------------------------------------------------
      type interpolable_type
          ! all interpolables must have position (lat, lon, z)
          real, allocatable, dimension(:,:) :: lat,lon
          real, allocatable, dimension(:,:,:) :: z
          
          ! these are the look up tables that describe how to interpolate vertically (vert_lut) and horizontally (geolut)
          type(vert_look_up_table)::vert_lut
          type(geo_look_up_table)::geolut
              
          ! used to keep track of whether or not a particular error has been printed yet for this structure
          logical :: dx_errors_printed=.False.
          logical :: dy_errors_printed=.False.
      end type interpolable_type
  