subroutine idea_co2(im,ix,levs,nlev,ntrac,grav,cp,adr,adt,        &
     &dtdt,cosz,dtdth)
!hmhj subroutine idea_co2(im,ix,levs,nlev,ntrac,grav,cp,adr,adt,dir,    &
!hmhj&dtdt,cosz,dtdth)
!
! Apr 06 2012   Henry Juang, initial implement for nems
! Dec 13 2012   Jun Wang     move init step out of column physics
! Feb 13 2012   Jun Wang     move gravity array gg to idea_compistion module
!
      use co2pro_mod, only: co2my
!     use co2c_mod
!     use qnir_mod
      use physcons,  amo2=>con_amo2, amo3=>con_amo3,                    &
     &               amh2o=>con_amw
      use idea_composition 
!
      implicit none
! Argument
      integer, intent(in) :: im  ! number of data points in adt (first dim)
      integer, intent(in) :: ix  ! max data points in adt (first dim)
      integer, intent(in) :: levs   ! number of pressure levels
      integer, intent(in) :: nlev   ! number of pressure levels in calculation
      integer, intent(in) :: ntrac  ! number of tracer
      real, intent(in)    :: adr(ix,levs,ntrac) ! tracer
      real, intent(in)    :: adt(ix,levs)    ! temperature
      real, intent(in)    :: cp(ix,levs)    ! J/kg/k
      real, intent(in)    :: grav(ix,levs)    ! g (m/s2)
      real, intent(in)    :: cosz(im)    !cos solar zenith angle 
!hmhj character*(*), intent(in) ::   dir    ! directory located coef files
      real, intent(out)   :: dtdt(ix,levs)    ! cooling rate k/s
      real, intent(out)   :: dtdth(ix,levs)    ! heating rate k/s
!
      real pmod(levs),q_n2(ix,nlev),ma(ix,nlev)                         &
     &,q_o(ix,nlev),q_o2(ix,nlev),hold(levs)
      integer i,k,kk
!
! precalling
      dtdth=0.
      dtdt=0.
!
      do i=1,im
        do k=k43,levs
          kk=k-k43+1
          q_n2(i,kk)=1.-adr(i,k,4)-adr(i,k,5)-adr(i,k,1)-adr(i,k,2)
          ma(i,kk)=1./(adr(i,k,4)/amo+adr(i,k,5)/amo2+adr(i,k,1)/amh2o+ &
     &             adr(i,k,2)/amo3+q_n2(i,kk)/amn2)
          q_o(i,kk)=adr(i,k,4)*ma(i,kk)/amo
          q_o2(i,kk)=adr(i,k,5)*ma(i,kk)/amo2
          q_n2(i,kk)=q_n2(i,kk)*ma(i,kk)/amn2
        enddo
      enddo
!     print*,'www2',im,ix,q_o(1:im1,nlev)
! CO2 cooling
      call co2cc(ix,im,prlog,adt,levs,prlog(k43),                       &
     &           dtdt(1,k43),nlev,ma,q_o,q_o2,q_n2)
! J/kg/s to k/s
      do i=1,im
        do k=k43,levs
          dtdt(i,k)=dtdt(i,k)/cp(i,k)
        enddo
          dtdt(i,1:k43-1)=0.
      enddo
! CO2 heating
      do i=1,im
        call qnirc(cosz(i),prlog(k43),co2my,hold(k43),nlev)
        do k=k43,levs
!       dtdth(i,k)=hold(k-k43+1)
        dtdth(i,k)=hold(k)
        enddo
        dtdth(i,1:k43-1)=0.
      enddo
      return
      end