subroutine srfxfer(state,cam_out,prec_zmc,snow_zmc, & 1,13 prec_cmf,snow_cmf,prec_sed,snow_sed, & prec_pcw,snow_pcw) !----------------------------------------------------------------------- ! ! Purpose: ! Transfer atmospheric fields into necessary surface data structures ! ! Author: L. Bath CMS Contact: M. Vertenstein ! !----------------------------------------------------------------------- use shr_kind_mod, only: r8 => shr_kind_r8 use physics_types, only: physics_state use ppgrid, only: pver, pcols use cam_history, only: outfld use comsrf, only: psm1, srfrpdel, prcsnw use camsrfexch_types, only: surface_state use chem_surfvals, only: chem_surfvals_get use co2_cycle, only: co2_transport, c_i use physconst, only: mwdry, mwco2 use constituents, only: pcnst use cam_control_mod, only: rair implicit none !------------------------------Arguments-------------------------------- ! ! Input arguments ! type(physics_state) , intent(in) :: state type (surface_state), intent(inout) :: cam_out real(r8), intent(in) :: prec_zmc(pcols) ! total precipitation from ZM convection real(r8), intent(in) :: snow_zmc(pcols) ! snow from ZM convection real(r8), intent(in) :: prec_cmf(pcols) ! total precipitation from Hack convection real(r8), intent(in) :: snow_cmf(pcols) ! snow from Hack convection real(r8), intent(in) :: prec_sed(pcols) ! total precipitation from ZM convection real(r8), intent(in) :: snow_sed(pcols) ! snow from ZM convection real(r8), intent(in) :: prec_pcw(pcols) ! total precipitation from Hack convection real(r8), intent(in) :: snow_pcw(pcols) ! snow from Hack convection ! !---------------------------Local variables----------------------------- ! integer :: i ! Longitude index integer :: m ! constituent index integer :: lchnk ! Chunk index integer :: ncol !----------------------------------------------------------------------- lchnk = state%lchnk ncol = state%ncol do i=1,ncol cam_out%tbot(i) = state%t(i,pver) cam_out%thbot(i) = state%t(i,pver) * state%exner(i,pver) cam_out%zbot(i) = state%zm(i,pver) cam_out%ubot(i) = state%u(i,pver) cam_out%vbot(i) = state%v(i,pver) cam_out%pbot(i) = state%pmid(i,pver) cam_out%rho(i) = cam_out%pbot(i)/(rair*cam_out%tbot(i)) cam_out%netsw(i) = cam_out%srfrad(i) - cam_out%flwds(i) psm1(i,lchnk) = state%ps(i) srfrpdel(i,lchnk)= state%rpdel(i,pver) end do do m = 1, pcnst do i = 1, ncol cam_out%qbot(i,m) = state%q(i,pver,m) end do end do cam_out%co2diag(:ncol) = chem_surfvals_get('CO2VMR') * 1.0e+6_r8 if (co2_transport()) then do i=1,ncol cam_out%co2prog(i) = state%q(i,pver,c_i(4)) * 1.0e+6_r8 *mwdry/mwco2 end do end if ! ! Precipation and snow rates from shallow convection, deep convection and stratiform processes. ! Compute total convective and stratiform precipitation and snow rates ! do i=1,ncol cam_out%precc (i) = prec_zmc(i) + prec_cmf(i) cam_out%precl (i) = prec_sed(i) + prec_pcw(i) cam_out%precsc(i) = snow_zmc(i) + snow_cmf(i) cam_out%precsl(i) = snow_sed(i) + snow_pcw(i) ! jrm These checks should not be necessary if they exist in the parameterizations if (cam_out%precc(i) .lt.0._r8) cam_out%precc(i)=0._r8 if (cam_out%precl(i) .lt.0._r8) cam_out%precl(i)=0._r8 if (cam_out%precsc(i).lt.0._r8) cam_out%precsc(i)=0._r8 if (cam_out%precsl(i).lt.0._r8) cam_out%precsl(i)=0._r8 if (cam_out%precsc(i).gt.cam_out%precc(i)) cam_out%precsc(i)=cam_out%precc(i) if (cam_out%precsl(i).gt.cam_out%precl(i)) cam_out%precsl(i)=cam_out%precl(i) ! end jrm end do ! total snowfall rate: needed by slab ocean model prcsnw(:ncol,lchnk) = cam_out%precsc(:ncol) + cam_out%precsl(:ncol) end subroutine srfxfer