! ! !MODULE: Sfc_Flx_ESMFMod --- Definition of the surface ! fields in the ESMF internal state. ! ! !DESCRIPTION: Sfc_Flx_ESMFMod --- Define the surfacee variables ! in the ESMF internal state. !--------------------------------------------------------------------------- ! !REVISION HISTORY: ! ! March 2007 Shrinivas Moorthi Initial code. ! ! !INTERFACE: ! MODULE Sfc_Flx_ESMFMod use machine , only : kind_phys IMPLICIT none TYPE Sfc_Var_Data real(kind=kind_phys),pointer:: tsea(:,:)=>null() real(kind=kind_phys),pointer:: smc(:,:,:)=>null() real(kind=kind_phys),pointer:: sheleg(:,:)=>null() real(kind=kind_phys),pointer:: sncovr(:,:)=>null() real(kind=kind_phys),pointer:: stc(:,:,:)=>null() real(kind=kind_phys),pointer:: tg3(:,:)=>null() real(kind=kind_phys),pointer:: zorl(:,:)=>null() real(kind=kind_phys),pointer:: cv(:,:)=>null() real(kind=kind_phys),pointer:: cvb(:,:)=>null() real(kind=kind_phys),pointer:: cvt(:,:)=>null() real(kind=kind_phys),pointer:: alvsf(:,:)=>null() real(kind=kind_phys),pointer:: alvwf(:,:)=>null() real(kind=kind_phys),pointer:: alnsf(:,:)=>null() real(kind=kind_phys),pointer:: alnwf(:,:)=>null() real(kind=kind_phys),pointer:: slmsk(:,:)=>null() real(kind=kind_phys),pointer:: vfrac(:,:)=>null() real(kind=kind_phys),pointer:: canopy(:,:)=>null() real(kind=kind_phys),pointer:: f10m(:,:)=>null() real(kind=kind_phys),pointer:: t2m(:,:)=>null() real(kind=kind_phys),pointer:: q2m(:,:)=>null() real(kind=kind_phys),pointer:: vtype(:,:)=>null() real(kind=kind_phys),pointer:: stype(:,:)=>null() real(kind=kind_phys),pointer:: facsf(:,:)=>null() real(kind=kind_phys),pointer:: facwf(:,:)=>null() real(kind=kind_phys),pointer:: uustar(:,:)=>null() real(kind=kind_phys),pointer:: ffmm(:,:)=>null() real(kind=kind_phys),pointer:: ffhh(:,:)=>null() real(kind=kind_phys),pointer:: hice(:,:)=>null() real(kind=kind_phys),pointer:: fice(:,:)=>null() real(kind=kind_phys),pointer:: tisfc(:,:)=>null() real(kind=kind_phys),pointer:: tprcp(:,:)=>null() real(kind=kind_phys),pointer:: srflag(:,:)=>null() real(kind=kind_phys),pointer:: snwdph(:,:)=>null() real(kind=kind_phys),pointer:: slc(:,:,:)=>null() real(kind=kind_phys),pointer:: shdmin(:,:)=>null() real(kind=kind_phys),pointer:: shdmax(:,:)=>null() real(kind=kind_phys),pointer:: slope(:,:)=>null() real(kind=kind_phys),pointer:: snoalb(:,:)=>null() real(kind=kind_phys),pointer:: oro(:,:)=>null() end type Sfc_Var_Data !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! TYPE Flx_Var_Data real(kind=kind_phys),pointer:: SFCDSW(:,:)=>null() real(kind=kind_phys),pointer:: COSZEN(:,:)=>null() real(kind=kind_phys),pointer:: PWAT(:,:)=>null() real(kind=kind_phys),pointer:: TMPMIN(:,:)=>null() real(kind=kind_phys),pointer:: TMPMAX(:,:)=>null() !jwang add spfhmax/spfhmin real(kind=kind_phys),pointer:: SPFHMIN(:,:)=>null() real(kind=kind_phys),pointer:: SPFHMAX(:,:)=>null() real(kind=kind_phys),pointer:: DUSFC(:,:)=>null() real(kind=kind_phys),pointer:: DVSFC(:,:)=>null() real(kind=kind_phys),pointer:: DTSFC(:,:)=>null() real(kind=kind_phys),pointer:: DQSFC(:,:)=>null() real(kind=kind_phys),pointer:: DLWSFC(:,:)=>null() real(kind=kind_phys),pointer:: ULWSFC(:,:)=>null() real(kind=kind_phys),pointer:: GFLUX(:,:)=>null() real(kind=kind_phys),pointer:: RUNOFF(:,:)=>null() real(kind=kind_phys),pointer:: EP(:,:)=>null() real(kind=kind_phys),pointer:: CLDWRK(:,:)=>null() real(kind=kind_phys),pointer:: DUGWD(:,:)=>null() real(kind=kind_phys),pointer:: DVGWD(:,:)=>null() real(kind=kind_phys),pointer:: PSMEAN(:,:)=>null() real(kind=kind_phys),pointer:: GESHEM(:,:)=>null() real(kind=kind_phys),pointer:: BENGSH(:,:)=>null() real(kind=kind_phys),pointer:: SFCNSW(:,:)=>null() real(kind=kind_phys),pointer:: SFCDLW(:,:)=>null() real(kind=kind_phys),pointer:: TSFLW(:,:)=>null() real(kind=kind_phys),pointer:: PSURF(:,:)=>null() real(kind=kind_phys),pointer:: U10M(:,:)=>null() real(kind=kind_phys),pointer:: V10M(:,:)=>null() real(kind=kind_phys),pointer:: HPBL(:,:)=>null() real(kind=kind_phys),pointer:: CHH(:,:)=>null() real(kind=kind_phys),pointer:: CMM(:,:)=>null() real(kind=kind_phys),pointer:: EPI(:,:)=>null() real(kind=kind_phys),pointer:: DLWSFCI(:,:)=>null() real(kind=kind_phys),pointer:: ULWSFCI(:,:)=>null() real(kind=kind_phys),pointer:: USWSFCI(:,:)=>null() real(kind=kind_phys),pointer:: DSWSFCI(:,:)=>null() real(kind=kind_phys),pointer:: DTSFCI(:,:)=>null() real(kind=kind_phys),pointer:: DQSFCI(:,:)=>null() real(kind=kind_phys),pointer:: GFLUXI(:,:)=>null() real(kind=kind_phys),pointer:: SRUNOFF(:,:)=>null() real(kind=kind_phys),pointer:: T1(:,:)=>null() real(kind=kind_phys),pointer:: Q1(:,:)=>null() real(kind=kind_phys),pointer:: U1(:,:)=>null() real(kind=kind_phys),pointer:: V1(:,:)=>null() real(kind=kind_phys),pointer:: ZLVL(:,:)=>null() real(kind=kind_phys),pointer:: EVBSA(:,:)=>null() real(kind=kind_phys),pointer:: EVCWA(:,:)=>null() real(kind=kind_phys),pointer:: TRANSA(:,:)=>null() real(kind=kind_phys),pointer:: SBSNOA(:,:)=>null() real(kind=kind_phys),pointer:: SNOWCA(:,:)=>null() real(kind=kind_phys),pointer:: SOILM(:,:)=>null() real(kind=kind_phys),pointer:: SNOHFA(:,:)=>null() end type Flx_Var_Data !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! contains subroutine sfcvar_aldata(dim1,dim2,dim3,data,iret) implicit none integer, intent(in) :: dim1, dim2, dim3 type(sfc_var_data),intent(inout) :: data integer, intent(out) :: iret ! iret = 0 allocate( & data%tsea (dim1,dim2), & data%smc (dim3,dim1,dim2),& data%sheleg (dim1,dim2), & data%sncovr (dim1,dim2), & data%stc (dim3,dim1,dim2),& data%tg3 (dim1,dim2), & data%zorl (dim1,dim2), & data%cv (dim1,dim2), & data%cvb (dim1,dim2), & data%cvt (dim1,dim2), & data%alvsf (dim1,dim2), & data%alvwf (dim1,dim2), & data%alnsf (dim1,dim2), & data%alnwf (dim1,dim2), & data%slmsk (dim1,dim2), & data%vfrac (dim1,dim2), & data%canopy (dim1,dim2), & data%f10m (dim1,dim2), & data%t2m (dim1,dim2), & data%q2m (dim1,dim2), & data%vtype (dim1,dim2), & data%stype (dim1,dim2), & data%facsf (dim1,dim2), & data%facwf (dim1,dim2), & data%uustar (dim1,dim2), & data%ffmm (dim1,dim2), & data%ffhh (dim1,dim2), & data%hice (dim1,dim2), & data%fice (dim1,dim2), & data%tisfc (dim1,dim2), & data%tprcp (dim1,dim2), & data%srflag (dim1,dim2), & data%snwdph (dim1,dim2), & data%slc (dim3,dim1,dim2),& data%shdmin (dim1,dim2), & data%shdmax (dim1,dim2), & data%slope (dim1,dim2), & data%snoalb (dim1,dim2), & data%oro (dim1,dim2), & stat=iret) if(iret.ne.0) iret=-3 return end subroutine subroutine flxvar_aldata(dim1,dim2,data,iret) implicit none integer, intent(in) :: dim1, dim2 type(flx_var_data),intent(inout) :: data integer, intent(out) :: iret ! iret = 0 ! ! allocate(data%SFCDSW (dim1,dim2)) allocate( & data%SFCDSW (dim1,dim2), & data%COSZEN (dim1,dim2), & data%PWAT (dim1,dim2), & data%TMPMIN (dim1,dim2), & data%TMPMAX (dim1,dim2), & !jwang add spfhmax/spfhmin data%SPFHMIN (dim1,dim2), & data%SPFHMAX (dim1,dim2), & data%DUSFC (dim1,dim2), & data%DVSFC (dim1,dim2), & data%DTSFC (dim1,dim2), & data%DQSFC (dim1,dim2), & data%DLWSFC (dim1,dim2), & data%ULWSFC (dim1,dim2), & data%GFLUX (dim1,dim2), & data%RUNOFF (dim1,dim2), & data%EP (dim1,dim2), & data%CLDWRK (dim1,dim2), & data%DUGWD (dim1,dim2), & data%DVGWD (dim1,dim2), & data%PSMEAN (dim1,dim2), & data%GESHEM (dim1,dim2), & data%BENGSH (dim1,dim2), & data%SFCNSW (dim1,dim2), & data%SFCDLW (dim1,dim2), & data%TSFLW (dim1,dim2), & data%PSURF (dim1,dim2), & data%U10M (dim1,dim2), & data%V10M (dim1,dim2), & data%HPBL (dim1,dim2), & data%CHH (dim1,dim2), & data%CMM (dim1,dim2), & data%EPI (dim1,dim2), & data%DLWSFCI (dim1,dim2), & data%ULWSFCI (dim1,dim2), & data%USWSFCI (dim1,dim2), & data%DSWSFCI (dim1,dim2), & data%DTSFCI (dim1,dim2), & data%DQSFCI (dim1,dim2), & data%GFLUXI (dim1,dim2), & data%SRUNOFF (dim1,dim2), & data%T1 (dim1,dim2), & data%Q1 (dim1,dim2), & data%U1 (dim1,dim2), & data%V1 (dim1,dim2), & data%ZLVL (dim1,dim2), & data%EVBSA (dim1,dim2), & data%EVCWA (dim1,dim2), & data%TRANSA (dim1,dim2), & data%SBSNOA (dim1,dim2), & data%SNOWCA (dim1,dim2), & data%SOILM (dim1,dim2), & data%SNOHFA (dim1,dim2), & stat=iret) if(iret.ne.0) iret=-4 return end subroutine subroutine flx_init(data,iret) implicit none type(flx_var_data),intent(inout) :: data integer, intent(out) :: iret ! iret = 0 data%TMPMIN = 1.e10 data%TMPMAX = 0. !jwang add spfhmax/spfhmin data%SPFHMIN = 1.e10 data%SPFHMAX = 0. data%GESHEM = 0. data%BENGSH = 0. data%DUSFC = 0. data%DVSFC = 0. data%DTSFC = 0. data%DQSFC = 0. data%DLWSFC = 0. data%ULWSFC = 0. data%GFLUX = 0. ! data%RUNOFF = 0. data%EP = 0. data%CLDWRK = 0. data%DUGWD = 0. data%DVGWD = 0. data%PSMEAN = 0. ! data%EVBSA = 0. data%EVCWA = 0. data%TRANSA = 0. data%SBSNOA = 0. data%SNOWCA = 0. data%SRUNOFF = 0. data%SNOHFA = 0. return end subroutine END MODULE Sfc_Flx_ESMFMod