#include <misc.h>

subroutine initindx 1,21
! Purpose: Register constituents and physics buffer fields.
! Author:    CSM Contact: M. Vertenstein, Aug. 1997
!            B.A. Boville, Oct 2001
  use shr_kind_mod, only: r8 => shr_kind_r8
  use constituents, only: pcnst, ppcnst, cnst_add, advected, cnst_chk_dim, cnst_name
  use phys_buffer,  only: pbuf_init
  use chemistry,    only: trace_gas, chem_register
  use cldcond,      only: cldcond_register
  use physconst,    only: mwdry, cpair, mwh2o, cph2o
  use tracers, only: tracers_register
!  use constituents, only: dcconnam, sflxnam, hadvnam, vadvnam, fixcnam, 
  use constituents, only: dcconnam, sflxnam, tendnam, tottnam
  use check_energy, only: check_energy_register
  use aerosol_intr, only: aerosol_register_cnst
#if ( defined BFB_CAM_SCAM_IOP )
  use iop
  implicit none
#include <comctl.h>
!---------------------------Local variables-----------------------------
  integer m            ! loop index
  integer mm           ! constituent index 

! Initialize physics buffer
  call pbuf_init()

! Register water vapor.
! ***** N.B. ***** This must be the first call to cnst_add so that
!                  water vapor is constituent 1.
  call cnst_add('Q', advected, mwh2o, cph2o, 1.E-12_r8, mm, &
                longname='Specific humidity', readiv=.true.)
! Register cloud water
  call cldcond_register()
! Register chemical constituents
  if (trace_gas) then
     call chem_register()
! register aerosols
  call aerosol_register_cnst()

! Register advected test tracers and determine starting index
  call tracers_register()

! All tracers registered, check that the dimensions are correct
  call cnst_chk_dim()
! Set default names for non-water advected and non-advected tracers
! Set names of advected and non-advected tracer diagnostics
  do m=1,ppcnst
     dcconnam(m) = 'DC'//cnst_name(m)
     sflxnam(m)  = 'SF'//cnst_name(m)
  end do
  do m=1,pcnst
!     hadvnam(m)  = 'HA'//cnst_name(m)
!     vadvnam(m)  = 'VA'//cnst_name(m)
!     fixcnam(m)  = 'DF'//cnst_name(m)
     tendnam(m)  = 'TE'//cnst_name(m)
     tottnam(m)  = 'TA'//cnst_name(m)
  end do

#if ( defined BFB_CAM_SCAM_IOP )
  do m=1,pcnst
     alphanam(m) = 'AFIX'//cnst_name(m)
     dqfxnam(m) = 'DQFX'//cnst_name(m)
     dqfxnam(m) = to_lower(dqfxnam(m))
  end do
  call check_energy_register()

end subroutine initindx