<p><b>fanglin.yang@noaa.gov</b> 2012-05-09 19:07:10 -0600 (Wed, 09 May 2012)</p><p>9may2012 work version<br>
</p><hr noshade><pre><font color="gray">Modified: branches/atmos_physics_gfs/src/core_atmos_physics_gfs/physics_gfs/dotstep.f
===================================================================
--- branches/atmos_physics_gfs/src/core_atmos_physics_gfs/physics_gfs/dotstep.f        2012-05-09 22:12:47 UTC (rev 1884)
+++ branches/atmos_physics_gfs/src/core_atmos_physics_gfs/physics_gfs/dotstep.f        2012-05-10 01:07:10 UTC (rev 1885)
@@ -58,11 +58,11 @@
        real(kind=kind_phys) :: sfc_mpas(nsfc_mpas,ncell_mpas)
        real(kind=kind_phys) :: air_mpas(nair_mpas,ncell_mpas,levs_mpas)
 
-! --prsi  : model interface level pressure in Pasca
-! --prsl  : model integer layer pressure in Pasca
+! --prsi  : model interface level pressure in centibar
+! --prsl  : model integer layer pressure in centibar
 ! --gu    : model layer zonal wind m/s   
 ! --gv    : model layer meridional wind m/s   
-! --vvel  : model layer vertical velocity in Pascal/sec
+! --vvel  : model layer vertical velocity in centibar/sec
 ! --gt    : model layer temperature in K
 ! --gr    : model layer specific humidity in gm/gm
 ! --gtrace: model layer tracer (ozne and cloud water) mass mixing ratio
@@ -72,23 +72,17 @@
 !-----mpas related fileds--------
 
 !****************************************************************************
-      INTEGER :: INDLSEV,JBASEV, INDLSOD,JBASOD
-      include 'function2'
-!
-!
-!------------------------------------------------------------
+
 !--at initial time to allocate GFS-related model arrays, 
 !--to read in GFS namelist file and set up running parameters, 
 !--and to read in most static boundary conditions.
-
-
       if(ifirst &gt; 0) then
 
 !--GFS initial condition date, 1-hour,2-month,3-day,4-year
        do j=1,4
         idate(j)=idate_mpas(j)
        enddo
-       lats_node_r=1             !for MPAS use 1-D block for each node
+       lats_node_r=1             !for MPAS use 1-D block for each task
 
        call GFS_Initialize(node0_mpas,fhour_mpas,levs_mpas,ncell_mpas,
      &amp;   xlon_mpas,xlat_mpas,lats_node_r,dt_mpas,nlunit_mpas,
@@ -179,7 +173,7 @@
             if(.not. adiab) then
              call gloopr
 !---input
-     &amp;       (lonsperlar,global_lats_r,phour,xlon,xlat,kdt,
+     &amp;       (phour,kdt,lonsperlar,global_lats_r,xlon,xlat,
      &amp;        sfc_fld%slmsk,sfc_fld%sheleg, 
      &amp;        sfc_fld%zorl, sfc_fld%tsea,
      &amp;        sfc_fld%alvsf, sfc_fld%alnsf, sfc_fld%alvwf, 
@@ -200,18 +194,15 @@
           endif  !sswr .or. lslwr
 
 
-!set to zero for every timestep
-
           if(.not. adiab) then
             call gloopb
-     &amp;        (lonsperlar,
-     &amp;         deltim,phour,sfc_fld, flx_fld, nst_fld, SFALB,
-     &amp;         xlon,
+     &amp;        (phour,kdt,deltim,lonsperlar,global_lats_r,
+     &amp;         lsout,fscav,xlon,xlat,
+     &amp;         sfc_fld, flx_fld, nst_fld, sfalb,
      &amp;         swh,hlw,hprime,slag,sdec,cdec,
-     &amp;         ozplin,jindx1,jindx2,ddy,pdryini,
-     &amp;         phy_f3d,  phy_f2d, xlat,kdt,
-     &amp;         batah,lsout,fscav,ngptc)
-          endif ! not.adiab
+     &amp;         ozplin,jindx1,jindx2,ddy,
+     &amp;         phy_f3d, phy_f2d) 
+          endif 
 
 !
       IF (mod(kdt,nszer) == 0 .and. lsout) THEN

Added: branches/atmos_physics_gfs/src/core_atmos_physics_gfs/physics_gfs/gloopb.f
===================================================================
--- branches/atmos_physics_gfs/src/core_atmos_physics_gfs/physics_gfs/gloopb.f                                (rev 0)
+++ branches/atmos_physics_gfs/src/core_atmos_physics_gfs/physics_gfs/gloopb.f        2012-05-10 01:07:10 UTC (rev 1885)
@@ -0,0 +1,726 @@
+!--modeified for MPAS, Fanglin Yang, May 2012
+!
+      subroutine gloopb
+     &amp;    (phour,kdt,tstep,lonsperlar, global_lats_r,
+     &amp;     lsout,fscav,xlon,xlat,
+     &amp;     sfc_fld, flx_fld, nst_fld, sfalb,
+     &amp;     swh,hlw,hprime,slag,sdec,cdec,
+     &amp;     ozplin,jindx1,jindx2,ddy,
+     &amp;     phy_f3d, phy_f2d)
+!!
+#include &quot;f_hpm.h&quot;
+!!
+      use machine             , only : kind_evod,kind_phys,kind_rad
+      use resol_def           , only : jcap,latr,levs,lonr,
+     &amp;                                 lsoil,ncld,nmtvr,nrcm,ntcw,ntoz,
+     &amp;                                 ntrac,num_p2d,num_p3d,
+     &amp;                                 thermodyn_id,sfcpress_id,nfxr
+
+      use layout1             , only : ipt_lats_node_r,
+     &amp;                                 lat1s_r,lats_dim_r,
+     &amp;                                 lats_node_a,lats_node_r,
+     &amp;                                 me,nodes
+      use gg_def              , only : coslat_r,rcs2_r,sinlat_r,wgt_r
+      use date_def            , only : fhour,idate
+      use namelist_def        , only : crtrh,fhswr,flgmin,
+     &amp;                                 gen_coord_hybrid,gg_tracers,
+     &amp;                                 hybrid,ldiag3d,lscca,lsfwd,
+     &amp;                                 lsm,lssav,lsswr,ncw,ngptc,
+     &amp;                                 old_monin,pre_rad,random_clds,
+     &amp;                                 ras,shuff_lats_r,
+     &amp;                                 sashal,ctei_rm,mom4ice,newsas,
+     &amp;                                 ccwf,cnvgwd,lggfs3d,trans_trac,
+     &amp;                                 mstrat,cal_pre,nst_fcst,
+     &amp;                                 dlqf,moist_adj,cdmbgwd,
+     &amp;                                 bkgd_vdif_m, bkgd_vdif_h,
+     &amp;                                 bkgd_vdif_s,shal_cnv,
+     &amp;                                 psautco, prautco, evpco, wminco
+      use coordinate_def      , only : vertcoord_id           
+      use module_ras          , only : ras_init
+      use physcons            , only :  grav =&gt; con_g,
+     &amp;                                 rerth =&gt; con_rerth,   ! hmhj
+     &amp;                                    fv =&gt; con_fvirt,   ! mjr
+     &amp;                                 rvrdm1 =&gt; con_FVirt,
+     &amp;                                    rd =&gt; con_rd
+      use ozne_def            , only : latsozp,levozp,
+     &amp;                                 pl_coeff,pl_pres,timeoz
+
+      use Sfc_Flx_ESMFMod
+      use Nst_Var_ESMFMod
+      use mersenne_twister
+      use d3d_def
+      use tracer_const
+!
+      include 'mpif.h'
+      implicit none
+!
+      TYPE(Sfc_Var_Data)        :: sfc_fld
+      TYPE(Flx_Var_Data)        :: flx_fld
+      TYPE(Nst_Var_Data)        :: nst_fld
+!
+      real(kind=kind_phys), PARAMETER :: RLAPSE=0.65E-2
+      real(kind=kind_evod), parameter :: cons_0=0.0,   cons_24=24.0
+     &amp;,                                  cons_99=99.0, cons_1p0d9=1.0E9
+
+
+!$$$      integer n1rac, n2rac,nlons_v(ngptc)
+!$$$      parameter (n1rac=ntrac-ntshft-1, n2rac=n1rac+1)
+!
+!     integer id,njeff,istrt,lon,kdt
+      integer id,njeff,      lon,kdt
+!!
+      real(kind=kind_phys)    prsl(ngptc,levs)
+      real(kind=kind_phys)   prslk(ngptc,levs),dpshc(ngptc)
+      real(kind=kind_phys)    prsi(ngptc,levs+1),phii(ngptc,levs+1)
+      real(kind=kind_phys)   prsik(ngptc,levs+1),phil(ngptc,levs)
+!!
+      real (kind=kind_phys) gu(ngptc,levs),  gv1(ngptc,levs)
+      real (kind=kind_phys) ugrd(ngptc,levs),vgrd(ngptc,levs)
+      real (kind=kind_phys) gphi(ngptc),     glam(ngptc)
+      real (kind=kind_phys) gq(ngptc),       gt(ngptc,levs), pgr(ngptc)
+      real (kind=kind_phys) gr(ngptc,levs,ntrac)
+      real (kind=kind_phys) gd(ngptc,levs)
+      real (kind=kind_phys) adt(ngptc,levs), adr(ngptc,levs,ntrac)
+      real (kind=kind_phys) adu(ngptc,levs), adv(ngptc,levs)
+      real (kind=kind_phys) gtv(ngptc,levs)                              ! hmhj
+      real (kind=kind_phys) gtvx(ngptc,levs), gtvy(ngptc,levs)           ! hmhj
+      real (kind=kind_phys) sumq(ngptc,levs), xcp(ngptc,levs)
+!
+      real (kind=kind_phys) dt3dt_v(ngptc,levs,6),
+     &amp;                      dq3dt_v(ngptc,levs,5+pl_coeff),
+     &amp;                      du3dt_v(ngptc,levs,4),
+     &amp;                      dv3dt_v(ngptc,levs,4)
+     &amp;,                     upd_mf_v(ngptc,levs), dwn_mf_v(ngptc,levs)
+     &amp;,                     det_mf_v(ngptc,levs)
+     &amp;,                     dkh_v(ngptc,LEVS),    rnp_v(ngptc,levs)
+!!
+      real(kind=kind_evod) gq_save(lonr,lats_dim_r)
+!!
+      real (kind=kind_rad) slag,sdec,cdec,phour
+      real (kind=kind_rad) xlon(lonr,lats_node_r)
+      real (kind=kind_rad) xlat(lonr,lats_node_r)
+      real (kind=kind_rad) coszdg(lonr,lats_node_r),
+     &amp;                     hprime(lonr,nmtvr,lats_node_r),
+!    &amp;                     fluxr(lonr,nfxr,lats_node_r),
+     &amp;                     sfalb(lonr,lats_node_r)
+      real (kind=kind_rad) swh(lonr,levs,lats_node_r)
+      real (kind=kind_rad) hlw(lonr,levs,lats_node_r)
+!!
+      real  (kind=kind_phys)
+     &amp;     phy_f3d(lonr,levs,num_p3d,lats_node_r),
+     &amp;     phy_f2d(lonr,num_p2d,lats_node_r), fscav(ntrac-ncld-1)
+!
+!
+      real (kind=kind_phys) exp,dtphys,dtp,dtf,sumed(2)
+      real (kind=kind_evod) tstep
+      real (kind=kind_phys) pdryini,sigshc,rk
+!!
+      integer              global_lats_r(latr)
+      integer                 lonsperlar(latr)
+      integer dimg
+cc
+      integer              i,ierr,iter,j,k,kap,kar,kat,kau,kav,ksq,jj,kk
+      integer              kst,kdtphi,kdtlam                            ! hmhj
+      integer              l,lan,lan0,lat,lmax,locl,ii,lonrbm
+!     integer              lon_dim,lons_lat,n,node
+      integer                      lons_lat,n,node
+      integer nsphys
+!
+      real(kind=kind_evod) pwatg(latr),pwatj(lats_node_r),
+     &amp;                     pwatp,ptotg(latr),sumwa,sumto,
+     &amp;                     ptotj(lats_node_r),pcorr,pdryg,
+     &amp;                     solhr,clstp
+cc
+      integer              ipt_ls                                       ! hmhj
+      real(kind=kind_evod) reall                                        ! hmhj

+       real(kind=kind_evod) typical_pgr
+c
+cc
+      integer              indlsev,jbasev,n0
+      integer              indlsod,jbasod
+cc
+      include 'function2'
+cc
+      real(kind=kind_evod) cons0,cons2     !constant
+cc
+      logical lsout
+      logical, parameter :: flipv = .true.
+cc
+! for nasa/nrl ozone production and distruction rates:(input through fixio)
+      real ozplin(latsozp,levozp,pl_coeff,timeoz)
+      integer jindx1(lats_node_r),jindx2(lats_node_r)!for ozone interpolaton
+      real ddy(lats_node_r)                          !for ozone interpolaton
+      real ozplout(levozp,lats_node_r,pl_coeff)
+!Moor real ozplout(lonr,levozp,pl_coeff,lats_node_r)
+!!
+      real(kind=kind_phys), allocatable :: acv(:,:),acvb(:,:),acvt(:,:)
+      save acv,acvb,acvt
+!!
+!     integer, parameter :: maxran=5000
+!     integer, parameter :: maxran=3000
+      integer, parameter :: maxran=6000, maxsub=6, maxrs=maxran/maxsub
+      type (random_stat) :: stat(maxrs)
+      real (kind=kind_phys), allocatable, save :: rannum_tank(:,:,:)
+      real (kind=kind_phys)                    :: rannum(lonr*latr)
+      integer iseed, nrc, seed0, kss, ksr, indxr(nrcm), iseedl
+      integer nf0,nf1,ind,nt,indod,indev
+      real(kind=kind_evod) fd2, wrk(1), wrk2(nrcm)
+
+      logical first,ladj
+      parameter (ladj=.true.)
+      data first/.true./
+!     save    krsize, first, nrnd,seed0
+      save    first, seed0
+!!
+      integer nlons_v(ngptc)
+      real(kind=kind_phys) smc_v(ngptc,lsoil),stc_v(ngptc,lsoil)
+     &amp;,                    slc_v(ngptc,lsoil)
+     &amp;,                    swh_v(ngptc,levs), hlw_v(ngptc,levs)
+     &amp;,                    vvel(ngptc,levs)
+     &amp;,                    hprime_v(ngptc,nmtvr)
+      real(kind=kind_phys) phy_f3dv(ngptc,LEVS,num_p3d),
+     &amp;                     phy_f2dv(ngptc,num_p2d)
+     &amp;,                    rannum_v(ngptc,nrcm)
+      real(kind=kind_phys) sinlat_v(ngptc),coslat_v(ngptc)
+     &amp;,                    ozplout_v(ngptc,levozp,pl_coeff)
+      real (kind=kind_rad) rqtk(ngptc), rcs2_lan, rcs_lan
+!     real (kind=kind_rad) rcs_v(ngptc), rqtk(ngptc), rcs2_lan
+!
+!--------------------------------------------------------------------
+!     print *,' in gloopb vertcoord_id =',vertcoord_id
+
+!     real(kind=kind_evod) sinlat_v(lonr),coslat_v(lonr),rcs2_v(lonr)
+!     real(kind=kind_phys) dpshc(lonr)
+      real (kind=kind_rad) work1, qmin, tem
+      parameter (qmin=1.0e-10)
+      integer              ksd,ksplam,kspphi
+      integer              ksu,ksv,ksz,item,jtem,ktem,ltem,mtem
+
+!
+!  ---  for debug test use
+      real (kind=kind_phys) :: temlon, temlat, alon, alat
+      integer :: ipt
+      logical :: lprnt
+!
+!
+!
+!----------------------
+      if (first) then
+!----------------------
+
+        allocate (acv(lonr,lats_node_r))
+        allocate (acvb(lonr,lats_node_r))
+        allocate (acvt(lonr,lats_node_r))
+!
+        seed0 = idate(1) + idate(2) + idate(3) + idate(4)
+        call random_setseed(seed0)
+        call random_number(wrk)
+        seed0 = seed0 + nint(wrk(1)*1000.0)
+!
+        if (.not. newsas) then  ! random number needed for RAS and old SAS
+          if (random_clds) then ! create random number tank
+!                                 -------------------------
+            if (.not. allocated(rannum_tank))
+     &amp;                allocate (rannum_tank(lonr,maxran,lats_node_r))
+!           lonrb2 = lonr / 2
+            lonrbm = lonr / maxsub
+            if (me == 0) write(0,*)' maxran=',maxran,' maxrs=',maxrs,
+     &amp;          'maxsub=',maxsub,' lonrbm=',lonrbm
+!$OMP       parallel do private(nrc,iseedl,rannum,lat,i,j,k,ii,jj,kk)
+            do nrc=1,maxrs
+              iseedl = seed0 + nrc - 1
+              call random_setseed(iseedl,stat(nrc))
+              call random_number(rannum,stat(nrc))
+              do j=1,lats_node_r
+                lat  = global_lats_r(ipt_lats_node_r-1+j)
+                jj = (lat-1)*lonr
+                do k=1,maxsub
+                  kk = k - 1
+                  do i=1,lonr
+                    ii = kk*lonrbm + i
+                    if (ii &gt; lonr) ii = ii - lonr
+                    rannum_tank(i,nrc+kk*maxrs,j) = rannum(ii+jj)
+                  enddo
+                enddo
+              enddo
+            enddo
+          endif
+        endif
+!
+        if (me .eq. 0) then
+          print *,' seed0=',seed0,' idate=',idate,' wrk=',wrk
+          if (num_p3d .eq. 3) print *,' USING Ferrier-MICROPHYSICS'
+          if (num_p3d .eq. 4) print *,' USING ZHAO-MICROPHYSICS'
+        endif
+        if (fhour .eq. 0.0) then
+          do j=1,lats_node_r
+            do i=1,lonr
+!             phy_f2d(i,j,num_p2d) = 0.0
+              phy_f2d(i,num_p2d,j) = 0.0
+            enddo
+          enddo
+        endif
+       
+        if (ras) call ras_init(levs, me)
+       
+        first = .false.
+!----------------------
+      endif                  ! if (first) done
+!----------------------
+!
+        dtphys = 3600.
+        nsphys = max(int((tstep+tstep)/dtphys+0.9999),1)
+        dtp    = (tstep+tstep)/nsphys
+        dtf    = 0.5*dtp
+!
+      if(lsfwd) dtf = dtp
+!
+      solhr = mod(phour+idate(1),cons_24)
+
+! **************  Ken Campana Stuff  ********************************
+!...  set switch for saving convective clouds
+      if(lscca.and.lsswr) then
+        clstp = 1100+min(fhswr,fhour,cons_99)  !initialize,accumulate,convert
+      elseif(lscca) then
+        clstp = 0100+min(fhswr,fhour,cons_99)  !accumulate,convert
+      elseif(lsswr) then
+        clstp = 1100                           !initialize,accumulate
+      else
+        clstp = 0100                           !accumulate
+      endif
+! **************  Ken Campana Stuff  ********************************
+!
+!
+      iseed = mod(100.0*sqrt(fhour*3600),cons_1p0d9) + 1 + seed0
+
+
+      if (.not. newsas) then  ! random number needed for RAS and old SAS
+        if (random_clds) then
+          call random_setseed(iseed)
+          call random_number(wrk2)
+          do nrc=1,nrcm
+            indxr(nrc) = max(1, min(nint(wrk2(nrc)*maxran)+1,maxran))
+          enddo
+        endif
+      endif
+!
+! doing ozone i/o and latitudinal interpolation to local gauss lats
+!      ifozphys=.true.

+      if (ntoz .gt. 0) then
+       call ozinterpol(me,lats_node_r,lats_node_r,idate,fhour,
+     &amp;                 jindx1,jindx2,ozplin,ozplout,ddy)
+
+!Moor   call ozinterpol(lats_node_r,lats_node_r,idate,fhour,
+!    &amp;                  jindx1,jindx2,ozplin,ozplout,ddy,
+!    &amp;                  global_lats_r,lonsperlar)
+      endif
+
+!     if (me == 0) write(0,*)' after ozinterpol'
+!!
+      pwatg = 0.
+      ptotg = 0.
+
+
+      do lan=1,lats_node_r
+        lat = global_lats_r(ipt_lats_node_r-1+lan)
+        lons_lat = lonsperlar(lat)
+        pwatp    = 0.
+        rcs2_lan = rcs2_r(min(lat,latr-lat+1))
+        rcs_lan  = sqrt(rcs2_lan)
+
+!$omp parallel do  schedule(dynamic,1) private(lon)
+!$omp+private(sumq,xcp,hprime_v,swh_v,hlw_v,stc_v,smc_v,slc_v)
+!$omp+private(nlons_v,sinlat_v,coslat_v,ozplout_v,rannum_v)
+!$omp+private(prslk,prsl,prsik,prsi,phil,phii,dpshc,work1,tem)
+!$omp+private(gu,gv1,gd,gq,gphi,glam,gt,gtv,gr,vvel,gtvx,gtvy)
+!$omp+private(adt,adr,adu,adv,pgr,ugrd,vgrd,rqtk)
+!!$omp+private(adt,adr,adu,adv,pgr,rcs_v,ugrd,vgrd,rqtk)
+!$omp+private(phy_f3dv,phy_f2dv)
+!$omp+private(dt3dt_v,dq3dt_v,du3dt_v,dv3dt_v,upd_mf_v,dwn_mf_v)
+!$omp+private(det_mf_v,dkh_v,rnp_v)
+!$omp+private(njeff,item,jtem,ktem,i,j,k,n,kss)
+!!!$omp+private(temlon,temlat,lprnt,ipt)
+        do lon=1,lons_lat,ngptc
+!!
+          njeff = min(ngptc,lons_lat-lon+1)
+!!
+!     lprnt = .false.
+!
+
+-------------------------------
+!---from MPAS
+          do k = 1, LEVS
+            do j = 1, njeff
+             jtem = lon-1+j
+             gu (j,k)  = 
+             gv1(j,k)  = 
+             gd (j,k)  =
+             gt (j,k) = gtv(j,k) / (1.0 + fv*max(gr(j,k,1),qmin))
+            enddo
+          enddo
+!
+          do i=1,njeff
+            item = lon+i-1
+            gq(i)   = for_gr_r_2(item,ksq,lan)
+            gphi(i) = for_gr_r_2(item,kspphi,lan)
+            glam(i) = for_gr_r_2(item,ksplam,lan)
+          enddo
+!  Tracers
+          do n=1,ntrac
+            do k=1,levs
+              item = KSR-1+k+(n-1)*levs
+              do j=1,njeff
+                gr(j,k,n) = for_gr_r_2(lon-1+j,item,lan)
+              enddo
+            enddo
+          enddo
+-------------------------------
+
+!
+!
+          do i=1,njeff
+            phil(i,levs) = 0.0 ! forces calculation of geopotential in gbphys
+            pgr(i)       = gq(i) * 1000.0  ! Convert from kPa to Pa for physics
+            prsi(i,1)    = pgr(i)
+            dpshc(i)     = 0.3  * prsi(i,1)
+!
+            nlons_v(i)   = lons_lat
+            sinlat_v(i)  = sinlat_r(lat)
+            coslat_v(i)  = coslat_r(lat)
+!           rcs_v(i)     = sqrt(rcs2_lan)
+!           rcs_v(i)     = sqrt(rcs2_r(min(lat,latr-lat+1)))
+          enddo
+          do k=1,levs
+            do i=1,njeff
+              ugrd(i,k)   = gu(i,k)     * rcs_lan
+              vgrd(i,k)   = gv1(i,k)    * rcs_lan
+!             ugrd(i,k)   = gu(i,k)     * rcs_v(i)
+!             vgrd(i,k)   = gv1(i,k)    * rcs_v(i)
+              prsl(i,k)   = prsl(i,k)   * 1000.0
+              prsi(i,k+1) = prsi(i,k+1) * 1000.0
+              vvel(i,k)   = vvel(i,k)   * 1000.0  ! Convert from Cb/s to Pa/s
+            enddo
+          enddo
+
+!??????????????????
+          if (gen_coord_hybrid .and. thermodyn_id == 3) then
+            do i=1,ngptc
+              prslk(i,1) = 0.0 ! forces calculation of geopotential in gbphys
+              prsik(i,1) = 0.0 ! forces calculation of geopotential in gbphys
+            enddo
+          endif
+!
+          if (ntoz .gt. 0) then
+            do j=1,pl_coeff
+              do k=1,levozp
+                do i=1,ngptc
+!Moorthi          ozplout_v(i,k,j) = ozplout(lon+i-1,k,j,lan)
+                  ozplout_v(i,k,j) = ozplout(k,lan,j)
+                enddo
+              enddo
+            enddo
+          endif
+          do k=1,lsoil
+            do i=1,njeff
+              item = lon+i-1
+              smc_v(i,k) = sfc_fld%smc(item,k,lan)
+              stc_v(i,k) = sfc_fld%stc(item,k,lan)
+              slc_v(i,k) = sfc_fld%slc(item,k,lan)
+            enddo
+          enddo
+          do k=1,nmtvr
+            do i=1,njeff
+              hprime_v(i,k) = hprime(lon+i-1,k,lan)
+            enddo
+          enddo
+!!
+          do j=1,num_p3d
+            do k=1,levs
+              do i=1,njeff
+                phy_f3dv(i,k,j) = phy_f3d(lon+i-1,k,j,lan)
+              enddo
+            enddo
+          enddo
+          do j=1,num_p2d
+            do i=1,njeff
+              phy_f2dv(i,j) = phy_f2d(lon+i-1,j,lan)
+            enddo
+          enddo
+          if (.not. newsas) then
+            if (random_clds) then
+              do j=1,nrcm
+                do i=1,njeff
+                  rannum_v(i,j) = rannum_tank(lon+i-1,indxr(j),lan)
+                enddo
+              enddo
+            else
+              do j=1,nrcm
+                do i=1,njeff
+                  rannum_v(i,j) = 0.6    ! This is useful for debugging
+                enddo
+              enddo
+            endif
+          endif
+          do k=1,levs
+            do i=1,njeff
+              item = lon+i-1
+              swh_v(i,k) = swh(item,k,lan)
+              hlw_v(i,k) = hlw(item,k,lan)
+            enddo
+          enddo
+          if (ldiag3d) then
+            do n=1,6
+             do k=1,levs
+              do i=1,njeff
+               dt3dt_v(i,k,n) = dt3dt(lon+i-1,k,n,lan)
+              enddo
+             enddo
+            enddo
+            do n=1,4
+             do k=1,levs
+              do i=1,njeff
+               du3dt_v(i,k,n) = du3dt(lon+i-1,k,n,lan)
+               dv3dt_v(i,k,n) = dv3dt(lon+i-1,k,n,lan)
+              enddo
+             enddo
+            enddo
+          endif
+          if (ldiag3d .or. lggfs3d) then
+            do n=1,5+pl_coeff
+             do k=1,levs
+              do i=1,njeff
+               dq3dt_v(i,k,n) = dq3dt(lon+i-1,k,n,lan)
+              enddo
+             enddo
+            enddo
+            do k=1,levs
+             do i=1,njeff
+              upd_mf_v(i,k) = upd_mf(lon+i-1,k,lan)
+              dwn_mf_v(i,k) = dwn_mf(lon+i-1,k,lan)
+              det_mf_v(i,k) = det_mf(lon+i-1,k,lan)
+             enddo
+            enddo
+          endif
+          if (lggfs3d) then
+            do k=1,levs
+             do i=1,njeff
+              dkh_v(i,k) = dkh(lon+i-1,k,lan)
+              rnp_v(i,k) = rnp(lon+i-1,k,lan)
+             enddo
+            enddo
+          endif
+!
+!     write(0,*)' calling gbphys kdt=',kdt,' lon=',lon,' lan=',lan
+!    &amp;,' nlons_v=',ntoz,ntcw,nmtvr,lonr,latr,jcap,ras
+!    &amp;,' tisfc=',sfc_fld%tisfc(lon,lan)
+!     print *,' temp=',for_gr_r_2(lon,kst,lan)
+!
+          call gbphys                                                   &amp;
+!  ---  inputs:
+     &amp;    ( njeff,ngptc,levs,lsoil,lsm,ntrac,ncld,ntoz,ntcw,            &amp;
+     &amp;      nmtvr,nrcm,levozp,lonr,latr,jcap,num_p3d,num_p2d,           &amp;
+     &amp;      kdt,lat,me,pl_coeff,nlons_v,ncw,flgmin,crtrh,cdmbgwd,       &amp;
+     &amp;      ccwf,dlqf,ctei_rm,clstp,dtp,dtf,fhour,solhr,                &amp;
+     &amp;      slag,sdec,cdec,sinlat_v,coslat_v,pgr,ugrd,vgrd,             &amp;
+     &amp;      gt,gr,vvel,prsi,prsl,prslk,prsik,phii,phil,                 &amp;
+     &amp;      rannum_v,ozplout_v,pl_pres,dpshc,                           &amp;
+     &amp;      hprime_v, xlon(lon,lan),xlat(lon,lan),                      &amp;
+     &amp;      sfc_fld%slope (lon,lan),    sfc_fld%shdmin(lon,lan),        &amp;
+     &amp;      sfc_fld%shdmax(lon,lan),    sfc_fld%snoalb(lon,lan),        &amp;
+     &amp;      sfc_fld%tg3   (lon,lan),    sfc_fld%slmsk (lon,lan),        &amp;
+     &amp;      sfc_fld%vfrac (lon,lan),    sfc_fld%vtype (lon,lan),        &amp;
+     &amp;      sfc_fld%stype (lon,lan),    sfc_fld%uustar(lon,lan),        &amp;
+     &amp;      sfc_fld%oro   (lon,lan),    flx_fld%coszen(lon,lan),        &amp;
+     &amp;      flx_fld%sfcdsw(lon,lan),    flx_fld%sfcnsw(lon,lan),        &amp;
+     &amp;      flx_fld%sfcdlw(lon,lan),    flx_fld%tsflw (lon,lan),        &amp;
+     &amp;      flx_fld%sfcemis(lon,lan),   sfalb(lon,lan),                 &amp;
+     &amp;      swh_v,                      hlw_v,                          &amp;
+     &amp;      ras,pre_rad,ldiag3d,lggfs3d,lssav,lssav_cc,                 &amp;
+     &amp;      bkgd_vdif_m,bkgd_vdif_h,bkgd_vdif_s,psautco,prautco, evpco, &amp;
+     &amp;      wminco,                                                     &amp;
+     &amp;      flipv,old_monin,cnvgwd,shal_cnv,sashal,newsas,cal_pre,      &amp;
+     &amp;      mom4ice,mstrat,trans_trac,nst_fcst,moist_adj,fscav,         &amp;
+     &amp;      thermodyn_id, sfcpress_id, gen_coord_hybrid,                &amp;
+!  ---  input/outputs:
+     &amp;      sfc_fld%hice  (lon,lan),    sfc_fld%fice  (lon,lan),        &amp;
+     &amp;      sfc_fld%tisfc (lon,lan),    sfc_fld%tsea  (lon,lan),        &amp;
+     &amp;      sfc_fld%tprcp (lon,lan),    sfc_fld%cv    (lon,lan),        &amp;
+     &amp;      sfc_fld%cvb   (lon,lan),    sfc_fld%cvt   (lon,lan),        &amp;
+     &amp;      sfc_fld%srflag(lon,lan),    sfc_fld%snwdph(lon,lan),        &amp;
+     &amp;      sfc_fld%sheleg(lon,lan),    sfc_fld%sncovr(lon,lan),        &amp;
+     &amp;      sfc_fld%zorl  (lon,lan),    sfc_fld%canopy(lon,lan),        &amp;
+     &amp;      sfc_fld%ffmm  (lon,lan),    sfc_fld%ffhh  (lon,lan),        &amp;
+     &amp;      sfc_fld%f10m  (lon,lan),    flx_fld%srunoff(lon,lan),       &amp;
+     &amp;      flx_fld%evbsa (lon,lan),    flx_fld%evcwa (lon,lan),        &amp;
+     &amp;      flx_fld%snohfa(lon,lan),    flx_fld%transa(lon,lan),        &amp;
+     &amp;      flx_fld%sbsnoa(lon,lan),    flx_fld%snowca(lon,lan),        &amp;
+     &amp;      flx_fld%soilm (lon,lan),    flx_fld%tmpmin(lon,lan),        &amp;
+     &amp;      flx_fld%tmpmax(lon,lan),    flx_fld%dusfc (lon,lan),        &amp;
+     &amp;      flx_fld%dvsfc (lon,lan),    flx_fld%dtsfc (lon,lan),        &amp;
+     &amp;      flx_fld%dqsfc (lon,lan),    flx_fld%geshem(lon,lan),        &amp;
+     &amp;      flx_fld%gflux (lon,lan),    flx_fld%dlwsfc(lon,lan),        &amp; 
+     &amp;      flx_fld%ulwsfc(lon,lan),    flx_fld%suntim(lon,lan),        &amp;
+     &amp;      flx_fld%runoff(lon,lan),    flx_fld%ep    (lon,lan),        &amp;
+     &amp;      flx_fld%cldwrk(lon,lan),    flx_fld%dugwd (lon,lan),        &amp;
+     &amp;      flx_fld%dvgwd (lon,lan),    flx_fld%psmean(lon,lan),        &amp;
+     &amp;      flx_fld%bengsh(lon,lan),    flx_fld%spfhmin(lon,lan),       &amp;
+     &amp;      flx_fld%spfhmax(lon,lan),                                   &amp;
+     &amp;      dt3dt_v, dq3dt_v, du3dt_v, dv3dt_v,                         &amp;
+     &amp;      acv(lon,lan), acvb(lon,lan), acvt(lon,lan),                 &amp;
+     &amp;      slc_v, smc_v, stc_v,                                        &amp;
+     &amp;      upd_mf_v, dwn_mf_v, det_mf_v, dkh_v, rnp_v,                 &amp;
+     &amp;      phy_f3dv, phy_f2dv,                                         &amp;
+     &amp;      DLWSFC_cc(lon,lan),  ULWSFC_cc(lon,lan),                    &amp;
+     &amp;      DTSFC_cc(lon,lan),   SWSFC_cc(lon,lan),                     &amp;
+     &amp;      DUSFC_cc(lon,lan),   DVSFC_cc(lon,lan),                     &amp;
+     &amp;      DQSFC_cc(lon,lan),   PRECR_cc(lon,lan),                     &amp;
+
+     &amp;      nst_fld%xt(lon,lan),        nst_fld%xs(lon,lan),            &amp;
+     &amp;      nst_fld%xu(lon,lan),        nst_fld%xv(lon,lan),            &amp;
+     &amp;      nst_fld%xz(lon,lan),        nst_fld%zm(lon,lan),            &amp;
+     &amp;      nst_fld%xtts(lon,lan),      nst_fld%xzts(lon,lan),          &amp;
+     &amp;      nst_fld%d_conv(lon,lan),    nst_fld%ifd(lon,lan),           &amp;
+     &amp;      nst_fld%dt_cool(lon,lan),   nst_fld%Qrain(lon,lan),         &amp;
+!  ---  outputs:
+     &amp;      adt, adr, adu, adv,                                         &amp;
+     &amp;      sfc_fld%t2m   (lon,lan),    sfc_fld%q2m   (lon,lan),        &amp;
+     &amp;      flx_fld%u10m  (lon,lan),    flx_fld%v10m  (lon,lan),        &amp;
+     &amp;      flx_fld%zlvl  (lon,lan),    flx_fld%psurf (lon,lan),        &amp;
+     &amp;      flx_fld%hpbl  (lon,lan),    flx_fld%pwat  (lon,lan),        &amp;
+     &amp;      flx_fld%t1    (lon,lan),    flx_fld%q1    (lon,lan),        &amp;
+     &amp;      flx_fld%u1    (lon,lan),    flx_fld%v1    (lon,lan),        &amp;
+     &amp;      flx_fld%chh   (lon,lan),    flx_fld%cmm   (lon,lan),        &amp;
+     &amp;      flx_fld%dlwsfci(lon,lan),   flx_fld%ulwsfci(lon,lan),       &amp;
+     &amp;      flx_fld%dswsfci(lon,lan),   flx_fld%uswsfci(lon,lan),       &amp;
+     &amp;      flx_fld%dtsfci(lon,lan),    flx_fld%dqsfci(lon,lan),        &amp;
+     &amp;      flx_fld%gfluxi(lon,lan),    flx_fld%epi   (lon,lan),        &amp;
+     &amp;      flx_fld%smcwlt2(lon,lan),   flx_fld%smcref2(lon,lan),       &amp;
+!hchuang code change [+3L] 11/12/2007 : add 2D
+     &amp;     flx_fld%gsoil(lon,lan),      flx_fld%gtmp2m(lon,lan),        &amp;
+     &amp;     flx_fld%gustar(lon,lan),     flx_fld%gpblh(lon,lan),         &amp;
+     &amp;     flx_fld%gu10m(lon,lan),      flx_fld%gv10m(lon,lan),         &amp;
+     &amp;     flx_fld%gzorl(lon,lan),      flx_fld%goro(lon,lan),          &amp;
+
+     &amp;      XMU_cc(lon,lan), DLW_cc(lon,lan), DSW_cc(lon,lan),          &amp;
+     &amp;      SNW_cc(lon,lan), LPREC_cc(lon,lan),                         &amp;
+
+     &amp;      nst_fld%Tref(lon,lan),       nst_fld%z_c(lon,lan),          &amp;
+     &amp;      nst_fld%c_0 (lon,lan),       nst_fld%c_d(lon,lan),          &amp;
+     &amp;      nst_fld%w_0 (lon,lan),       nst_fld%w_d(lon,lan),          &amp;
+     &amp;      rqtk                                                        &amp;! rqtkD
+!    &amp;      bak_gr_r_2(lon,kap,lan),                                    &amp;! rqtkD
+     &amp;      )
+!!
+!!
+            prsi  = prsi * 0.001                 ! Convert from Pa to kPa
+            do k=1,lsoil
+              do i=1,njeff
+                item = lon + i - 1
+                sfc_fld%smc(item,k,lan) = smc_v(i,k)
+                sfc_fld%stc(item,k,lan) = stc_v(i,k)
+                sfc_fld%slc(item,k,lan) = slc_v(i,k)
+              enddo
+            enddo
+!!
+            do j=1,num_p3d
+              do k=1,levs
+                do i=1,njeff
+                  phy_f3d(lon+i-1,k,j,lan) = phy_f3dv(i,k,j)
+                enddo
+              enddo
+            enddo
+            do j=1,num_p2d
+              do i=1,njeff
+                phy_f2d(lon+i-1,j,lan) = phy_f2dv(i,j)
+              enddo
+            enddo
+!
+          if (ldiag3d) then
+            do n=1,6
+             do k=1,levs
+              do i=1,njeff
+               dt3dt(lon+i-1,k,n,lan) = dt3dt_v(i,k,n)
+              enddo
+             enddo
+            enddo
+            do n=1,4
+             do k=1,levs
+              do i=1,njeff
+               du3dt(lon+i-1,k,n,lan) = du3dt_v(i,k,n)
+               dv3dt(lon+i-1,k,n,lan) = dv3dt_v(i,k,n)
+              enddo
+             enddo
+            enddo
+          endif
+          if (ldiag3d .or. lggfs3d) then
+            do n=1,5+pl_coeff
+             do k=1,levs
+              do i=1,njeff
+               dq3dt(lon+i-1,k,n,lan) = dq3dt_v(i,k,n)
+              enddo
+             enddo
+            enddo
+            do k=1,levs
+             do i=1,njeff
+              upd_mf(lon+i-1,k,lan) = upd_mf_v(i,k)
+              dwn_mf(lon+i-1,k,lan) = dwn_mf_v(i,k)
+              det_mf(lon+i-1,k,lan) = det_mf_v(i,k)
+             enddo
+            enddo
+          endif
+          if (lggfs3d) then
+            do k=1,levs
+             do i=1,njeff
+              dkh(lon+i-1,k,lan) = dkh_v(i,k)
+              rnp(lon+i-1,k,lan) = rnp_v(i,k)
+             enddo
+            enddo
+          endif
+!
+!---------------------------
+        enddo   ! lon loop
+!---------------------------
+!
+!
+        ptotj(lan) = 0.
+        do j=1,lons_lat
+          ptotj(lan) = ptotj(lan) + gq_save(j,lan)
+          pwatp      = pwatp + flx_fld%pwat(j,lan)
+!     print *,' kdt=',kdt,' pwatp=',pwatp,' pwat=',flx_fld%pwat(j,lan)
+!    &amp;,' j=',j
+        enddo
+        pwatj(lan) = pwatp*grav/(2.*lonsperlar(lat)*1.e3)
+        ptotj(lan) = ptotj(lan)/(2.*lonsperlar(lat))
+
+!---------------------------
+      enddo   ! lan loop
+!---------------------------
+!!
+!
+!!?????????????????????????????????????????????????
+      call excha(lats_nodes_r,global_lats_r,ptotj,pwatj,ptotg,pwatg)
+      sumwa = 0.
+      sumto = 0.
+      do lat=1,latr
+         sumto = sumto + wgt_r(min(lat,latr-lat+1))*ptotg(lat)
+         sumwa = sumwa + wgt_r(min(lat,latr-lat+1))*pwatg(lat)
+!     print *,' kdt=',kdt,' lat=',lat,' sumwa=',sumwa,' sumto=',sumto,
+!    &amp;' ptotg=',ptotg(lat),' pwatg=',pwatg(lat)
+      enddo
+cjfe
+cjfe  write(70+me,*) sumto,sumwa,kdt
+      pdryg = sumto - sumwa
+!!
+      if(pdryini == 0.) pdryini = pdryg
+
+      if( gen_coord_hybrid ) then                               ! hmhj
+        pcorr = (pdryini-pdryg)         * sqrt(2.)              ! hmhj
+      else                                                      ! hmhj
+        pcorr = (pdryini-pdryg) / sumto * sqrt(2.)
+      endif                                                     ! hmhj
+!!?????????????????????????????????????????????????
+
+      return
+      end

Modified: branches/atmos_physics_gfs/src/core_atmos_physics_gfs/physics_gfs/gloopr.f
===================================================================
--- branches/atmos_physics_gfs/src/core_atmos_physics_gfs/physics_gfs/gloopr.f        2012-05-09 22:12:47 UTC (rev 1884)
+++ branches/atmos_physics_gfs/src/core_atmos_physics_gfs/physics_gfs/gloopr.f        2012-05-10 01:07:10 UTC (rev 1885)
@@ -4,7 +4,7 @@
 
        subroutine gloopr
 !---input
-     &amp; (lonsperlar,global_lats_r,phour,xlon,xlat,kdt,
+     &amp; (phour,kdt,lonsperlar,global_lats_r,xlon,xlat,
      &amp;  slmsk,sheleg, zorl, tsea,
      &amp;  alvsf, alnsf, alvwf, alnwf, facsf, facwf,   
      &amp;  cv, cvt, cvb, fice, tisfc, sncovr, snoalb,
@@ -57,13 +57,13 @@
      &amp;                    hprime(lonr,nmtvr,lats_node_r), phour,        &amp;
      &amp;                    phy_f3d(lonr,levs,num_p3d,lats_node_r)
 
-! --prsi  : model level pressure in Pasca   
-! --prsl  : model layer mean pressure in Pasca   
+! --prsi  : model level pressure in centipar    
+! --prsl  : model layer mean pressure in centibar   
 ! --gt    : model layer mean temperature in k
 ! --gr    : layer specific humidity in gm/gm
 ! --gr1   : layer tracer (ozne and cloud water) mass mixing ratio
-! --vvel  : layer mean vertical velocity in Pascal/sec     
-      real (kind=kind_phys), intent(inout) ::                           &amp;
+! --vvel  : layer mean vertical velocity in centibar/sec     
+      real (kind=kind_phys), intent(in) ::                            
      &amp;   prsi(lonr,levp1,lats_node_r),prsl(lonr,levs,lats_node_r),      &amp;
      &amp;   gt(lonr,levs,lats_node_r),gr(lonr,levs,lats_node_r),           &amp;
      &amp;   gr1(lonr,levs,ntrac-1,lats_node_r),vvel(lonr,levs,lats_node_r)
@@ -354,18 +354,19 @@
         lat = global_lats_r(ipt_lats_node_r-1+j)
         lons_lat = lonsperlar(lan)
 
-!  ---  vertical structure variable prslk and minimum water vapor mixing ratio 
+!  ---  vertical structure variable prslk 
+!       and minimum water vapor mixing ratio 
         do k=1,levr 
         do i=1,lons_lat
-          prslk(i,k,lan) = prslk(i,k,lan)**con_rocp
-          gr(i,k,lan) = max(qmin,gr(i,k,lan))
+          prslk(i,k,lan) = (0.01*prsl(i,k,lan))**con_rocp
+!!        gr(i,k,lan) = max(qmin,gr(i,k,lan))
         enddo
         enddo
 
 !!
 !$omp parallel do schedule(dynamic,1) private(lon,i,j,k)
 !$omp+private(cldcov_v,fluxr_v,f_ice,f_rain,r_rime)
-!$omp+private(prslk,flgmin_v,hlw_v,swh_v)
+!$omp+private(flgmin_v,hlw_v,swh_v)
 !$omp+private(njeff,n,item,jtem,ks,work1,work2)
 !$omp+private(icsdsw,icsdlw)
 !$omp+private(lprnt,ipt)
@@ -374,6 +375,7 @@
 !--------------------
         NJEFF   = MIN(ngptc,lons_lat-lon+1)
         lprnt = .false.
+        ipt=lon   !diagnostic printout point
 !
         do k=1,nfxr
            do j=1,njeff

</font>
</pre>