/wrfv2_fire/phys/module_mp_gsfcgce.F
FORTRAN Legacy | 2838 lines | 1694 code | 322 blank | 822 comment | 147 complexity | 4686bc158b95f5e42c5d6615ed17ee47 MD5 | raw file
Possible License(s): AGPL-1.0
Large files files are truncated, but you can click here to view the full file
- !WRF:MODEL_LAYER:PHYSICS
- !
- MODULE module_mp_gsfcgce
- USE module_wrf_error
- !JJS 1/3/2008 vvvvv
- ! common /bt/
- REAL, PRIVATE :: rd1, rd2, al, cp
- ! common /cont/
- REAL, PRIVATE :: c38, c358, c610, c149, &
- c879, c172, c409, c76, &
- c218, c580, c141
- ! common /b3cs/
- REAL, PRIVATE :: ag, bg, as, bs, &
- aw, bw, bgh, bgq, &
- bsh, bsq, bwh, bwq
- ! common /size/
- REAL, PRIVATE :: tnw, tns, tng, &
- roqs, roqg, roqr
- ! common /bterv/
- REAL, PRIVATE :: zrc, zgc, zsc, &
- vrc, vgc, vsc
- ! common /bsnw/
- REAL, PRIVATE :: alv, alf, als, t0, t00, &
- avc, afc, asc, rn1, bnd1, &
- rn2, bnd2, rn3, rn4, rn5, &
- rn6, rn7, rn8, rn9, rn10, &
- rn101,rn10a, rn11,rn11a, rn12
- REAL, PRIVATE :: rn14, rn15,rn15a, rn16, rn17, &
- rn17a,rn17b,rn17c, rn18, rn18a, &
- rn19,rn19a,rn19b, rn20, rn20a, &
- rn20b, bnd3, rn21, rn22, rn23, &
- rn23a,rn23b, rn25,rn30a, rn30b, &
- rn30c, rn31, beta, rn32
- REAL, PRIVATE, DIMENSION( 31 ) :: rn12a, rn12b, rn13, rn25a
- ! common /rsnw1/
- REAL, PRIVATE :: rn10b, rn10c, rnn191, rnn192, rn30, &
- rnn30a, rn33, rn331, rn332
- !
- REAL, PRIVATE, DIMENSION( 31 ) :: aa1, aa2
- DATA aa1/.7939e-7, .7841e-6, .3369e-5, .4336e-5, .5285e-5, &
- .3728e-5, .1852e-5, .2991e-6, .4248e-6, .7434e-6, &
- .1812e-5, .4394e-5, .9145e-5, .1725e-4, .3348e-4, &
- .1725e-4, .9175e-5, .4412e-5, .2252e-5, .9115e-6, &
- .4876e-6, .3473e-6, .4758e-6, .6306e-6, .8573e-6, &
- .7868e-6, .7192e-6, .6513e-6, .5956e-6, .5333e-6, &
- .4834e-6/
- DATA aa2/.4006, .4831, .5320, .5307, .5319, &
- .5249, .4888, .3894, .4047, .4318, &
- .4771, .5183, .5463, .5651, .5813, &
- .5655, .5478, .5203, .4906, .4447, &
- .4126, .3960, .4149, .4320, .4506, &
- .4483, .4460, .4433, .4413, .4382, &
- .4361/
- !JJS 1/3/2008 ^^^^^
- CONTAINS
- !-------------------------------------------------------------------
- ! NASA/GSFC GCE
- ! Tao et al, 2001, Meteo. & Atmos. Phy., 97-137
- !-------------------------------------------------------------------
- ! SUBROUTINE gsfcgce( th, th_old, &
- SUBROUTINE gsfcgce( th, &
- qv, ql, &
- qr, qi, &
- qs, &
- ! qvold, qlold, &
- ! qrold, qiold, &
- ! qsold, &
- rho, pii, p, dt_in, z, &
- ht, dz8w, grav, &
- rhowater, rhosnow, &
- itimestep, &
- ids,ide, jds,jde, kds,kde, & ! domain dims
- ims,ime, jms,jme, kms,kme, & ! memory dims
- its,ite, jts,jte, kts,kte, & ! tile dims
- rainnc, rainncv, &
- snownc, snowncv, sr, &
- graupelnc, graupelncv, &
- ! f_qg, qg, pgold, &
- f_qg, qg, &
- ihail, ice2 &
- )
- !-------------------------------------------------------------------
- IMPLICIT NONE
- !-------------------------------------------------------------------
- !
- ! JJS 2/15/2005
- !
- INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde , &
- ims,ime, jms,jme, kms,kme , &
- its,ite, jts,jte, kts,kte
- INTEGER, INTENT(IN ) :: itimestep, ihail, ice2
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
- INTENT(INOUT) :: &
- th, &
- qv, &
- ql, &
- qr, &
- qi, &
- qs, &
- qg
- !
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
- INTENT(IN ) :: &
- ! th_old, &
- ! qvold, &
- ! qlold, &
- ! qrold, &
- ! qiold, &
- ! qsold, &
- ! qgold, &
- rho, &
- pii, &
- p, &
- dz8w, &
- z
- REAL, DIMENSION( ims:ime , jms:jme ), &
- INTENT(INOUT) :: rainnc, &
- rainncv, &
- snownc, &
- snowncv, &
- sr, &
- graupelnc, &
- graupelncv
- REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: ht
- REAL, INTENT(IN ) :: dt_in, &
- grav, &
- rhowater, &
- rhosnow
- LOGICAL, INTENT(IN), OPTIONAL :: F_QG
- ! LOCAL VAR
- !jjs INTEGER :: min_q, max_q
- !jjs REAL, DIMENSION( its:ite , jts:jte ) &
- !jjs :: rain, snow, graupel,ice
- !
- ! INTEGER :: IHAIL, itaobraun, ice2, istatmin, new_ice_sat, id
- INTEGER :: itaobraun, istatmin, new_ice_sat, id
- INTEGER :: i, j, k
- INTEGER :: iskip, ih, icount, ibud, i24h
- REAL :: hour
- REAL , PARAMETER :: cmin=1.e-20
- REAL :: dth, dqv, dqrest, dqall, dqall1, rhotot, a1, a2
- ! REAL, DIMENSION( its:ite , kts:kte , jts:jte ) :: &
- ! th1, qv1, ql1, qr1, qi1, qs1, qg1
-
- LOGICAL :: flag_qg
- !
- !c ihail = 0 for graupel, for tropical region
- !c ihail = 1 for hail, for mid-lat region
- ! itaobraun: 0 for Tao's constantis, 1 for Braun's constants
- !c if ( itaobraun.eq.1 ) --> betah=0.5*beta=-.46*0.5=-0.23; cn0=1.e-6
- !c if ( itaobraun.eq.0 ) --> betah=0.5*beta=-.6*0.5=-0.30; cn0=1.e-8
- itaobraun = 1
- !c ice2 = 0 for 3 ice --- ice, snow and graupel/hail
- !c ice2 = 1 for 2 ice --- ice and snow only
- !c ice2 = 2 for 2 ice --- ice and graupel only, use ihail = 0 only
- !c ice2 = 3 for 0 ice --- no ice, warm only
- ! if (ice2 .eq. 2) ihail = 0
- i24h=nint(86400./dt_in)
- if (mod(itimestep,i24h).eq.1) then
- write(6,*) 'ihail=',ihail,' ice2=',ice2
- if (ice2.eq.0) then
- write(6,*) 'Running 3-ice scheme in GSFCGCE with'
- if (ihail.eq.0) then
- write(6,*) ' ice, snow and graupel'
- else if (ihail.eq.1) then
- write(6,*) ' ice, snow and hail'
- else
- write(6,*) 'ihail has to be either 1 or 0'
- stop
- endif !ihail
- else if (ice2.eq.1) then
- write(6,*) 'Running 2-ice scheme in GSFCGCE with'
- write(6,*) ' ice and snow'
- else if (ice2.eq.2) then
- write(6,*) 'Running 2-ice scheme in GSFCGCE with'
- write(6,*) ' ice and graupel'
- else if (ice2.eq.3) then
- write(6,*) 'Running warm rain only scheme in GSFCGCE without any ice'
- else
- write(6,*) 'gsfcgce_2ice in namelist.input has to be 0, 1, 2, or 3'
- stop
- endif !ice2
- endif !itimestep
- !c new_ice_sat = 0, 1 or 2
- new_ice_sat = 2
- !c istatmin
- istatmin = 180
- !c id = 0 without in-line staticstics
- !c id = 1 with in-line staticstics
- id = 0
- !c ibud = 0 no calculation of dth, dqv, dqrest and dqall
- !c ibud = 1 yes
- ibud = 0
- !jjs dt=dt_in
- !jjs rhoe_s=1.29
- !
- ! IF (P_QI .lt. P_FIRST_SCALAR .or. P_QS .lt. P_FIRST_SCALAR) THEN
- ! CALL wrf_error_fatal3 ( "module_mp_lin.b" , 130 , 'module_mp_lin: Improper use of Lin et al scheme; no ice phase. Please chose another one.')
- ! ENDIF
- ! calculte fallflux and precipiation in MKS system
- call fall_flux(dt_in, qr, qi, qs, qg, p, &
- rho, z, dz8w, ht, rainnc, &
- rainncv, grav,itimestep, &
- rhowater, rhosnow, &
- snownc, snowncv, sr, &
- graupelnc, graupelncv, &
- ihail, ice2, &
- ims,ime, jms,jme, kms,kme, & ! memory dims
- its,ite, jts,jte, kts,kte ) ! tile dims
- !-----------------------------------------------------------------------
- !c set up constants used internally in GCE
- call consat_s (ihail, itaobraun)
- !c Negative values correction
- iskip = 1
-
- if (iskip.eq.0) then
- call negcor(qv,rho,dz8w,ims,ime,jms,jme,kms,kme, &
- itimestep,1, &
- its,ite,jts,jte,kts,kte)
- call negcor(ql,rho,dz8w,ims,ime,jms,jme,kms,kme, &
- itimestep,2, &
- its,ite,jts,jte,kts,kte)
- call negcor(qr,rho,dz8w,ims,ime,jms,jme,kms,kme, &
- itimestep,3, &
- its,ite,jts,jte,kts,kte)
- call negcor(qi,rho,dz8w,ims,ime,jms,jme,kms,kme, &
- itimestep,4, &
- its,ite,jts,jte,kts,kte)
- call negcor(qs,rho,dz8w,ims,ime,jms,jme,kms,kme, &
- itimestep,5, &
- its,ite,jts,jte,kts,kte)
- call negcor(qg,rho,dz8w,ims,ime,jms,jme,kms,kme, &
- itimestep,6, &
- its,ite,jts,jte,kts,kte)
- ! else if (mod(itimestep,i24h).eq.1) then
- ! print *,'no neg correction in mp at timestep=',itimestep
- endif ! iskip
- !c microphysics in GCE
- call SATICEL_S( dt_in, IHAIL, itaobraun, ICE2, istatmin, &
- new_ice_sat, id, &
- ! th, th_old, qv, ql, qr, &
- th, qv, ql, qr, &
- qi, qs, qg, &
- ! qvold, qlold, qrold, &
- ! qiold, qsold, qgold, &
- rho, pii, p, itimestep, &
- ids,ide, jds,jde, kds,kde, & ! domain dims
- ims,ime, jms,jme, kms,kme, & ! memory dims
- its,ite, jts,jte, kts,kte & ! tile dims
- )
- END SUBROUTINE gsfcgce
- !-----------------------------------------------------------------------
- SUBROUTINE fall_flux ( dt, qr, qi, qs, qg, p, &
- rho, z, dz8w, topo, rainnc, &
- rainncv, grav, itimestep, &
- rhowater, rhosnow, &
- snownc, snowncv, sr, &
- graupelnc, graupelncv, &
- ihail, ice2, &
- ims,ime, jms,jme, kms,kme, & ! memory dims
- its,ite, jts,jte, kts,kte ) ! tile dims
- !-----------------------------------------------------------------------
- ! adopted from Jiun-Dar Chern's codes for Purdue Regional Model
- ! adopted by Jainn J. Shi, 6/10/2005
- !-----------------------------------------------------------------------
- IMPLICIT NONE
- INTEGER, INTENT(IN ) :: ihail, ice2, &
- ims,ime, jms,jme, kms,kme, &
- its,ite, jts,jte, kts,kte
- INTEGER, INTENT(IN ) :: itimestep
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
- INTENT(INOUT) :: qr, qi, qs, qg
- REAL, DIMENSION( ims:ime , jms:jme ), &
- INTENT(INOUT) :: rainnc, rainncv, &
- snownc, snowncv, sr, &
- graupelnc, graupelncv
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
- INTENT(IN ) :: rho, z, dz8w, p
- REAL, INTENT(IN ) :: dt, grav, rhowater, rhosnow
- REAL, DIMENSION( ims:ime , jms:jme ), &
- INTENT(IN ) :: topo
- ! temperary vars
- REAL, DIMENSION( kts:kte ) :: sqrhoz
- REAL :: tmp1, term0
- REAL :: pptrain, pptsnow, &
- pptgraul, pptice
- REAL, DIMENSION( kts:kte ) :: qrz, qiz, qsz, qgz, &
- zz, dzw, prez, rhoz, &
- orhoz
- INTEGER :: k, i, j
- !
- REAL, DIMENSION( kts:kte ) :: vtr, vts, vtg, vti
- REAL :: dtb, pi, consta, constc, gambp4, &
- gamdp4, gam4pt5, gam4bbar
- ! Lin
- REAL , PARAMETER :: xnor = 8.0e6
- ! REAL , PARAMETER :: xnos = 3.0e6
- REAL , PARAMETER :: xnos = 1.6e7 ! Tao's value
- REAL , PARAMETER :: &
- ! constb = 0.8, constd = 0.25, o6 = 1./6., &
- constb = 0.8, constd = 0.11, o6 = 1./6., &
- cdrag = 0.6
- ! Lin
- ! REAL , PARAMETER :: xnoh = 4.0e4
- REAL , PARAMETER :: xnoh = 2.0e5 ! Tao's value
- REAL , PARAMETER :: rhohail = 917.
- ! Hobbs
- REAL , PARAMETER :: xnog = 4.0e6
- REAL , PARAMETER :: rhograul = 400.
- REAL , PARAMETER :: abar = 19.3, bbar = 0.37, &
- p0 = 1.0e5
- REAL , PARAMETER :: rhoe_s = 1.29
- ! for terminal velocity flux
- INTEGER :: min_q, max_q
- REAL :: t_del_tv, del_tv, flux, fluxin, fluxout ,tmpqrz
- LOGICAL :: notlast
- ! if (itimestep.eq.1) then
- ! write(6, *) 'in fall_flux'
- ! write(6, *) 'ims=', ims, ' ime=', ime
- ! write(6, *) 'jms=', jms, ' jme=', jme
- ! write(6, *) 'kms=', kms, ' kme=', kme
- ! write(6, *) 'its=', its, ' ite=', ite
- ! write(6, *) 'jts=', jts, ' jte=', jte
- ! write(6, *) 'kts=', kts, ' kte=', kte
- ! write(6, *) 'dt=', dt
- ! write(6, *) 'ihail=', ihail
- ! write(6, *) 'ICE2=', ICE2
- ! write(6, *) 'dt=', dt
- ! endif
- !-----------------------------------------------------------------------
- ! This program calculates precipitation fluxes due to terminal velocities.
- !-----------------------------------------------------------------------
- dtb=dt
- pi=acos(-1.)
- consta=2115.0*0.01**(1-constb)
- ! constc=152.93*0.01**(1-constd)
- constc=78.63*0.01**(1-constd)
- ! Gamma function
- gambp4=ggamma(constb+4.)
- gamdp4=ggamma(constd+4.)
- gam4pt5=ggamma(4.5)
- gam4bbar=ggamma(4.+bbar)
- !***********************************************************************
- ! Calculate precipitation fluxes due to terminal velocities.
- !***********************************************************************
- !
- !- Calculate termianl velocity (vt?) of precipitation q?z
- !- Find maximum vt? to determine the small delta t
- j_loop: do j = jts, jte
- i_loop: do i = its, ite
- pptrain = 0.
- pptsnow = 0.
- pptgraul = 0.
- pptice = 0.
- do k = kts, kte
- qrz(k)=qr(i,k,j)
- rhoz(k)=rho(i,k,j)
- orhoz(k)=1./rhoz(k)
- prez(k)=p(i,k,j)
- sqrhoz(k)=sqrt(rhoe_s/rhoz(k))
- zz(k)=z(i,k,j)
- dzw(k)=dz8w(i,k,j)
- enddo !k
- DO k = kts, kte
- qiz(k)=qi(i,k,j)
- ENDDO
- DO k = kts, kte
- qsz(k)=qs(i,k,j)
- ENDDO
- IF (ice2 .eq. 0) THEN
- DO k = kts, kte
- qgz(k)=qg(i,k,j)
- ENDDO
- ELSE
- DO k = kts, kte
- qgz(k)=0.
- ENDDO
- ENDIF
- !
- !-- rain
- !
- t_del_tv=0.
- del_tv=dtb
- notlast=.true.
- DO while (notlast)
- !
- min_q=kte
- max_q=kts-1
- !
- do k=kts,kte-1
- if (qrz(k) .gt. 1.0e-8) then
- min_q=min0(min_q,k)
- max_q=max0(max_q,k)
- tmp1=sqrt(pi*rhowater*xnor/rhoz(k)/qrz(k))
- tmp1=sqrt(tmp1)
- vtr(k)=consta*gambp4*sqrhoz(k)/tmp1**constb
- vtr(k)=vtr(k)/6.
- if (k .eq. 1) then
- del_tv=amin1(del_tv,0.9*(zz(k)-topo(i,j))/vtr(k))
- else
- del_tv=amin1(del_tv,0.9*(zz(k)-zz(k-1))/vtr(k))
- endif
- else
- vtr(k)=0.
- endif
- enddo
- if (max_q .ge. min_q) then
- !
- !- Check if the summation of the small delta t >= big delta t
- ! (t_del_tv) (del_tv) (dtb)
- t_del_tv=t_del_tv+del_tv
- !
- if ( t_del_tv .ge. dtb ) then
- notlast=.false.
- del_tv=dtb+del_tv-t_del_tv
- endif
- ! use small delta t to calculate the qrz flux
- ! termi is the qrz flux pass in the grid box through the upper boundary
- ! termo is the qrz flux pass out the grid box through the lower boundary
- !
- fluxin=0.
- do k=max_q,min_q,-1
- fluxout=rhoz(k)*vtr(k)*qrz(k)
- flux=(fluxin-fluxout)/rhoz(k)/dzw(k)
- ! tmpqrz=qrz(k)
- qrz(k)=qrz(k)+del_tv*flux
- qrz(k)=amax1(0.,qrz(k))
- qr(i,k,j)=qrz(k)
- fluxin=fluxout
- enddo
- if (min_q .eq. 1) then
- pptrain=pptrain+fluxin*del_tv
- else
- qrz(min_q-1)=qrz(min_q-1)+del_tv* &
- fluxin/rhoz(min_q-1)/dzw(min_q-1)
- qr(i,min_q-1,j)=qrz(min_q-1)
- endif
- !
- else
- notlast=.false.
- endif
- ENDDO
- !
- !-- snow
- !
- t_del_tv=0.
- del_tv=dtb
- notlast=.true.
- DO while (notlast)
- !
- min_q=kte
- max_q=kts-1
- !
- do k=kts,kte-1
- if (qsz(k) .gt. 1.0e-8) then
- min_q=min0(min_q,k)
- max_q=max0(max_q,k)
- tmp1=sqrt(pi*rhosnow*xnos/rhoz(k)/qsz(k))
- tmp1=sqrt(tmp1)
- vts(k)=constc*gamdp4*sqrhoz(k)/tmp1**constd
- vts(k)=vts(k)/6.
- if (k .eq. 1) then
- del_tv=amin1(del_tv,0.9*(zz(k)-topo(i,j))/vts(k))
- else
- del_tv=amin1(del_tv,0.9*(zz(k)-zz(k-1))/vts(k))
- endif
- else
- vts(k)=0.
- endif
- enddo
- if (max_q .ge. min_q) then
- !
- !
- !- Check if the summation of the small delta t >= big delta t
- ! (t_del_tv) (del_tv) (dtb)
- t_del_tv=t_del_tv+del_tv
- if ( t_del_tv .ge. dtb ) then
- notlast=.false.
- del_tv=dtb+del_tv-t_del_tv
- endif
- ! use small delta t to calculate the qsz flux
- ! termi is the qsz flux pass in the grid box through the upper boundary
- ! termo is the qsz flux pass out the grid box through the lower boundary
- !
- fluxin=0.
- do k=max_q,min_q,-1
- fluxout=rhoz(k)*vts(k)*qsz(k)
- flux=(fluxin-fluxout)/rhoz(k)/dzw(k)
- qsz(k)=qsz(k)+del_tv*flux
- qsz(k)=amax1(0.,qsz(k))
- qs(i,k,j)=qsz(k)
- fluxin=fluxout
- enddo
- if (min_q .eq. 1) then
- pptsnow=pptsnow+fluxin*del_tv
- else
- qsz(min_q-1)=qsz(min_q-1)+del_tv* &
- fluxin/rhoz(min_q-1)/dzw(min_q-1)
- qs(i,min_q-1,j)=qsz(min_q-1)
- endif
- !
- else
- notlast=.false.
- endif
- ENDDO
- !
- ! ice2=0 --- with hail/graupel
- ! ice2=1 --- without hail/graupel
- !
- if (ice2.eq.0) then
- !
- !-- If IHAIL=1, use hail.
- !-- If IHAIL=0, use graupel.
- !
- ! if (ihail .eq. 1) then
- ! xnog = xnoh
- ! rhograul = rhohail
- ! endif
- t_del_tv=0.
- del_tv=dtb
- notlast=.true.
- !
- DO while (notlast)
- !
- min_q=kte
- max_q=kts-1
- !
- do k=kts,kte-1
- if (qgz(k) .gt. 1.0e-8) then
- if (ihail .eq. 1) then
- ! for hail, based on Lin et al (1983)
- min_q=min0(min_q,k)
- max_q=max0(max_q,k)
- tmp1=sqrt(pi*rhohail*xnoh/rhoz(k)/qgz(k))
- tmp1=sqrt(tmp1)
- term0=sqrt(4.*grav*rhohail/3./rhoz(k)/cdrag)
- vtg(k)=gam4pt5*term0*sqrt(1./tmp1)
- vtg(k)=vtg(k)/6.
- if (k .eq. 1) then
- del_tv=amin1(del_tv,0.9*(zz(k)-topo(i,j))/vtg(k))
- else
- del_tv=amin1(del_tv,0.9*(zz(k)-zz(k-1))/vtg(k))
- endif !k
- else
- ! added by JJS
- ! for graupel, based on RH (1984)
- min_q=min0(min_q,k)
- max_q=max0(max_q,k)
- tmp1=sqrt(pi*rhograul*xnog/rhoz(k)/qgz(k))
- tmp1=sqrt(tmp1)
- tmp1=tmp1**bbar
- tmp1=1./tmp1
- term0=abar*gam4bbar/6.
- vtg(k)=term0*tmp1*(p0/prez(k))**0.4
- if (k .eq. 1) then
- del_tv=amin1(del_tv,0.9*(zz(k)-topo(i,j))/vtg(k))
- else
- del_tv=amin1(del_tv,0.9*(zz(k)-zz(k-1))/vtg(k))
- endif !k
- endif !ihail
- else
- vtg(k)=0.
- endif !qgz
- enddo !k
- if (max_q .ge. min_q) then
- !
- !
- !- Check if the summation of the small delta t >= big delta t
- ! (t_del_tv) (del_tv) (dtb)
- t_del_tv=t_del_tv+del_tv
- if ( t_del_tv .ge. dtb ) then
- notlast=.false.
- del_tv=dtb+del_tv-t_del_tv
- endif
- ! use small delta t to calculate the qgz flux
- ! termi is the qgz flux pass in the grid box through the upper boundary
- ! termo is the qgz flux pass out the grid box through the lower boundary
- !
- fluxin=0.
- do k=max_q,min_q,-1
- fluxout=rhoz(k)*vtg(k)*qgz(k)
- flux=(fluxin-fluxout)/rhoz(k)/dzw(k)
- qgz(k)=qgz(k)+del_tv*flux
- qgz(k)=amax1(0.,qgz(k))
- qg(i,k,j)=qgz(k)
- fluxin=fluxout
- enddo
- if (min_q .eq. 1) then
- pptgraul=pptgraul+fluxin*del_tv
- else
- qgz(min_q-1)=qgz(min_q-1)+del_tv* &
- fluxin/rhoz(min_q-1)/dzw(min_q-1)
- qg(i,min_q-1,j)=qgz(min_q-1)
- endif
- !
- else
- notlast=.false.
- endif
- !
- ENDDO
- ENDIF !ice2
- !
- !-- cloud ice (03/21/02) follow Vaughan T.J. Phillips at GFDL
- !
- t_del_tv=0.
- del_tv=dtb
- notlast=.true.
- !
- DO while (notlast)
- !
- min_q=kte
- max_q=kts-1
- !
- do k=kts,kte-1
- if (qiz(k) .gt. 1.0e-8) then
- min_q=min0(min_q,k)
- max_q=max0(max_q,k)
- vti(k)= 3.29 * (rhoz(k)* qiz(k))** 0.16 ! Heymsfield and Donner
- if (k .eq. 1) then
- del_tv=amin1(del_tv,0.9*(zz(k)-topo(i,j))/vti(k))
- else
- del_tv=amin1(del_tv,0.9*(zz(k)-zz(k-1))/vti(k))
- endif
- else
- vti(k)=0.
- endif
- enddo
- if (max_q .ge. min_q) then
- !
- !
- !- Check if the summation of the small delta t >= big delta t
- ! (t_del_tv) (del_tv) (dtb)
- t_del_tv=t_del_tv+del_tv
- if ( t_del_tv .ge. dtb ) then
- notlast=.false.
- del_tv=dtb+del_tv-t_del_tv
- endif
- ! use small delta t to calculate the qiz flux
- ! termi is the qiz flux pass in the grid box through the upper boundary
- ! termo is the qiz flux pass out the grid box through the lower boundary
- !
- fluxin=0.
- do k=max_q,min_q,-1
- fluxout=rhoz(k)*vti(k)*qiz(k)
- flux=(fluxin-fluxout)/rhoz(k)/dzw(k)
- qiz(k)=qiz(k)+del_tv*flux
- qiz(k)=amax1(0.,qiz(k))
- qi(i,k,j)=qiz(k)
- fluxin=fluxout
- enddo
- if (min_q .eq. 1) then
- pptice=pptice+fluxin*del_tv
- else
- qiz(min_q-1)=qiz(min_q-1)+del_tv* &
- fluxin/rhoz(min_q-1)/dzw(min_q-1)
- qi(i,min_q-1,j)=qiz(min_q-1)
- endif
- !
- else
- notlast=.false.
- endif
- !
- ENDDO !notlast
- ! prnc(i,j)=prnc(i,j)+pptrain
- ! psnowc(i,j)=psnowc(i,j)+pptsnow
- ! pgrauc(i,j)=pgrauc(i,j)+pptgraul
- ! picec(i,j)=picec(i,j)+pptice
- !
- ! write(6,*) 'i=',i,' j=',j,' ', pptrain, pptsnow, pptgraul, pptice
- ! call flush(6)
- snowncv(i,j) = pptsnow
- snownc(i,j) = snownc(i,j) + pptsnow
- graupelncv(i,j) = pptgraul
- graupelnc(i,j) = graupelnc(i,j) + pptgraul
- RAINNCV(i,j) = pptrain + pptsnow + pptgraul + pptice
- RAINNC(i,j) = RAINNC(i,j) + pptrain + pptsnow + pptgraul + pptice
- sr(i,j) = 0.
- if (RAINNCV(i,j) .gt. 0.) sr(i,j) = (pptsnow + pptgraul + pptice) / RAINNCV(i,j)
- ENDDO i_loop
- ENDDO j_loop
- ! if (itimestep.eq.6480) then
- ! write(51,*) 'in the end of fallflux, itimestep=',itimestep
- ! do j=jts,jte
- ! do i=its,ite
- ! if (rainnc(i,j).gt.400.) then
- ! write(50,*) 'i=',i,' j=',j,' rainnc=',rainnc
- ! endif
- ! enddo
- ! enddo
- ! endif
- END SUBROUTINE fall_flux
- !----------------------------------------------------------------
- REAL FUNCTION ggamma(X)
- !----------------------------------------------------------------
- IMPLICIT NONE
- !----------------------------------------------------------------
- REAL, INTENT(IN ) :: x
- REAL, DIMENSION(8) :: B
- INTEGER ::j, K1
- REAL ::PF, G1TO2 ,TEMP
- DATA B/-.577191652,.988205891,-.897056937,.918206857, &
- -.756704078,.482199394,-.193527818,.035868343/
- PF=1.
- TEMP=X
- DO 10 J=1,200
- IF (TEMP .LE. 2) GO TO 20
- TEMP=TEMP-1.
- 10 PF=PF*TEMP
- 100 FORMAT(//,5X,'module_gsfcgce: INPUT TO GAMMA FUNCTION TOO LARGE, X=',E12.5)
- WRITE(wrf_err_message,100)X
- CALL wrf_error_fatal(wrf_err_message)
- 20 G1TO2=1.
- TEMP=TEMP - 1.
- DO 30 K1=1,8
- 30 G1TO2=G1TO2 + B(K1)*TEMP**K1
- ggamma=PF*G1TO2
- END FUNCTION ggamma
- !-----------------------------------------------------------------------
- !c Correction of negative values
- SUBROUTINE negcor ( X, rho, dz8w, &
- ims,ime, jms,jme, kms,kme, & ! memory dims
- itimestep, ics, &
- its,ite, jts,jte, kts,kte ) ! tile dims
- !-----------------------------------------------------------------------
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
- INTENT(INOUT) :: X
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ), &
- INTENT(IN ) :: rho, dz8w
- integer, INTENT(IN ) :: itimestep, ics
- !c Local variables
- ! REAL, DIMENSION( kts:kte ) :: Y1, Y2
- REAL :: A0, A1, A2
- A1=0.
- A2=0.
- do k=kts,kte
- do j=jts,jte
- do i=its,ite
- A1=A1+max(X(i,k,j), 0.)*rho(i,k,j)*dz8w(i,k,j)
- A2=A2+max(-X(i,k,j), 0.)*rho(i,k,j)*dz8w(i,k,j)
- enddo
- enddo
- enddo
- ! A1=0.0
- ! A2=0.0
- ! do k=kts,kte
- ! A1=A1+Y1(k)
- ! A2=A2+Y2(k)
- ! enddo
- A0=0.0
- if (A1.NE.0.0.and.A1.GT.A2) then
- A0=(A1-A2)/A1
- if (mod(itimestep,540).eq.0) then
- if (ics.eq.1) then
- write(61,*) 'kms=',kms,' kme=',kme,' kts=',kts,' kte=',kte
- write(61,*) 'jms=',jms,' jme=',jme,' jts=',jts,' jte=',jte
- write(61,*) 'ims=',ims,' ime=',ime,' its=',its,' ite=',ite
- endif
- if (ics.eq.1) then
- write(61,*) 'qv timestep=',itimestep
- write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0
- else if (ics.eq.2) then
- write(61,*) 'ql timestep=',itimestep
- write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0
- else if (ics.eq.3) then
- write(61,*) 'qr timestep=',itimestep
- write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0
- else if (ics.eq.4) then
- write(61,*) 'qi timestep=',itimestep
- write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0
- else if (ics.eq.5) then
- write(61,*) 'qs timestep=',itimestep
- write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0
- else if (ics.eq.6) then
- write(61,*) 'qg timestep=',itimestep
- write(61,*) ' A1=',A1,' A2=',A2,' A0=',A0
- else
- write(61,*) 'wrong cloud specieis number'
- endif
- endif
- do k=kts,kte
- do j=jts,jte
- do i=its,ite
- X(i,k,j)=A0*AMAX1(X(i,k,j), 0.0)
- enddo
- enddo
- enddo
- endif
- END SUBROUTINE negcor
- SUBROUTINE consat_s (ihail,itaobraun)
- !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
- ! c
- ! Tao, W.-K., and J. Simpson, 1989: Modeling study of a tropical c
- ! squall-type convective line. J. Atmos. Sci., 46, 177-202. c
- ! c
- ! Tao, W.-K., J. Simpson and M. McCumber, 1989: An ice-water c
- ! saturation adjustment. Mon. Wea. Rev., 117, 231-235. c
- ! c
- ! Tao, W.-K., and J. Simpson, 1993: The Goddard Cumulus Ensemble c
- ! Model. Part I: Model description. Terrestrial, Atmospheric and c
- ! Oceanic Sciences, 4, 35-72. c
- ! c
- ! Tao, W.-K., J. Simpson, D. Baker, S. Braun, M.-D. Chou, B. c
- ! Ferrier,D. Johnson, A. Khain, S. Lang, B. Lynn, C.-L. Shie, c
- ! D. Starr, C.-H. Sui, Y. Wang and P. Wetzel, 2003: Microphysics, c
- ! radiation and surface processes in the Goddard Cumulus Ensemble c
- ! (GCE) model, A Special Issue on Non-hydrostatic Mesoscale c
- ! Modeling, Meteorology and Atmospheric Physics, 82, 97-137. c
- ! c
- ! Lang, S., W.-K. Tao, R. Cifelli, W. Olson, J. Halverson, S. c
- ! Rutledge, and J. Simpson, 2007: Improving simulations of c
- ! convective system from TRMM LBA: Easterly and Westerly regimes. c
- ! J. Atmos. Sci., 64, 1141-1164. c
- ! c
- ! Coded by Tao (1989-2003), modified by S. Lang (2006/07) c
- ! c
- ! Implemented into WRF by Roger Shi 2006/2007 c
- !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
- ! itaobraun=0 ! see Tao and Simpson (1993)
- ! itaobraun=1 ! see Tao et al. (2003)
- integer :: itaobraun
- real :: cn0
- !JJS 1/3/2008 vvvvv
- !JJS the following common blocks have been moved to the top of
- !JJS module_mp_gsfcgce_driver_instat.F
- !
- ! real, dimension (1:31) :: a1, a2
- ! data a1/.7939e-7,.7841e-6,.3369e-5,.4336e-5,.5285e-5,.3728e-5, &
- ! .1852e-5,.2991e-6,.4248e-6,.7434e-6,.1812e-5,.4394e-5,.9145e-5, &
- ! .1725e-4,.3348e-4,.1725e-4,.9175e-5,.4412e-5,.2252e-5,.9115e-6, &
- ! .4876e-6,.3473e-6,.4758e-6,.6306e-6,.8573e-6,.7868e-6,.7192e-6, &
- ! .6513e-6,.5956e-6,.5333e-6,.4834e-6/
- ! data a2/.4006,.4831,.5320,.5307,.5319,.5249,.4888,.3894,.4047, &
- ! .4318,.4771,.5183,.5463,.5651,.5813,.5655,.5478,.5203,.4906, &
- ! .4447,.4126,.3960,.4149,.4320,.4506,.4483,.4460,.4433,.4413, &
- ! .4382,.4361/
- !JJS 1/3/2008 ^^^^^
- ! ******************************************************************
- !JJS
- al = 2.5e10
- cp = 1.004e7
- rd1 = 1.e-3
- rd2 = 2.2
- !JJS
- cpi=4.*atan(1.)
- cpi2=cpi*cpi
- grvt=980.
- cd1=6.e-1
- cd2=4.*grvt/(3.*cd1)
- tca=2.43e3
- dwv=.226
- dva=1.718e-4
- amw=18.016
- ars=8.314e7
- scv=2.2904487
- t0=273.16
- t00=238.16
- alv=2.5e10
- alf=3.336e9
- als=2.8336e10
- avc=alv/cp
- afc=alf/cp
- asc=als/cp
- rw=4.615e6
- cw=4.187e7
- ci=2.093e7
- c76=7.66
- c358=35.86
- c172=17.26939
- c409=4098.026
- c218=21.87456
- c580=5807.695
- c610=6.1078e3
- c149=1.496286e-5
- c879=8.794142
- c141=1.4144354e7
- !*** DEFINE THE COEFFICIENTS USED IN TERMINAL VELOCITY
- !*** DEFINE THE DENSITY AND SIZE DISTRIBUTION OF PRECIPITATION
- !********** HAIL OR GRAUPEL PARAMETERS **********
- if(ihail .eq. 1) then
- roqg=.9
- ag=sqrt(cd2*roqg)
- bg=.5
- tng=.002
- else
- roqg=.4
- ag=351.2
- ! AG=372.3 ! if ice913=1 6/15/02 tao's
- bg=.37
- tng=.04
- endif
- !********** SNOW PARAMETERS **********
- !ccshie 6/15/02 tao's
- ! TNS=1.
- ! TNS=.08 ! if ice913=1, tao's
- tns=.16 ! if ice913=0, tao's
- roqs=.1
- ! AS=152.93
- as=78.63
- ! BS=.25
- bs=.11
- !********** RAIN PARAMETERS **********
- aw=2115.
- bw=.8
- roqr=1.
- tnw=.08
- !*****************************************************************
- bgh=.5*bg
- bsh=.5*bs
- bwh=.5*bw
- bgq=.25*bg
- bsq=.25*bs
- bwq=.25*bw
- !**********GAMMA FUNCTION CALCULATIONS*************
- ga3b = gammagce(3.+bw)
- ga4b = gammagce(4.+bw)
- ga6b = gammagce(6.+bw)
- ga5bh = gammagce((5.+bw)/2.)
- ga3g = gammagce(3.+bg)
- ga4g = gammagce(4.+bg)
- ga5gh = gammagce((5.+bg)/2.)
- ga3d = gammagce(3.+bs)
- ga4d = gammagce(4.+bs)
- ga5dh = gammagce((5.+bs)/2.)
- !CCCCC LIN ET AL., 1983 OR LORD ET AL., 1984 CCCCCCCCCCCCCCCCC
- ac1=aw
- !JJS
- ac2=ag
- ac3=as
- !JJS
- bc1=bw
- cc1=as
- dc1=bs
- zrc=(cpi*roqr*tnw)**0.25
- zsc=(cpi*roqs*tns)**0.25
- zgc=(cpi*roqg*tng)**0.25
- vrc=aw*ga4b/(6.*zrc**bw)
- vsc=as*ga4d/(6.*zsc**bs)
- vgc=ag*ga4g/(6.*zgc**bg)
- ! ****************************
- ! RN1=1.E-3
- rn1=9.4e-15 ! 6/15/02 tao's
- bnd1=6.e-4
- rn2=1.e-3
- ! BND2=1.25E-3
- ! BND2=1.5E-3 ! if ice913=1 6/15/02 tao's
- bnd2=2.0e-3 ! if ice913=0 6/15/02 tao's
- rn3=.25*cpi*tns*cc1*ga3d
- esw=1.
- rn4=.25*cpi*esw*tns*cc1*ga3d
- ! ERI=1.
- eri=.1 ! 6/17/02 tao's ice913=0 (not 1)
- rn5=.25*cpi*eri*tnw*ac1*ga3b
- ! AMI=1./(24.*4.19E-10)
- ami=1./(24.*6.e-9) ! 6/15/02 tao's
- rn6=cpi2*eri*tnw*ac1*roqr*ga6b*ami
- ! ESR=1. ! also if ice913=1 for tao's
- esr=.5 ! 6/15/02 for ice913=0 tao's
- rn7=cpi2*esr*tnw*tns*roqs
- esr=1.
- rn8=cpi2*esr*tnw*tns*roqr
- rn9=cpi2*tns*tng*roqs
- rn10=2.*cpi*tns
- rn101=.31*ga5dh*sqrt(cc1)
- rn10a=als*als/rw
- !JJS
- rn10b=alv/tca
- rn10c=ars/(dwv*amw)
- !JJS
- rn11=2.*cpi*tns/alf
- rn11a=cw/alf
- ! AMI50=1.51e-7
- ami50=3.84e-6 ! 6/15/02 tao's
- ! AMI40=2.41e-8
- ami40=3.08e-8 ! 6/15/02 tao's
- eiw=1.
- ! UI50=20.
- ui50=100. ! 6/15/02 tao's
- ri50=2.*5.e-3
- cmn=1.05e-15
- rn12=cpi*eiw*ui50*ri50**2
- do 10 k=1,31
- y1=1.-aa2(k)
- rn13(k)=aa1(k)*y1/(ami50**y1-ami40**y1)
- rn12a(k)=rn13(k)/ami50
- rn12b(k)=aa1(k)*ami50**aa2(k)
- rn25a(k)=aa1(k)*cmn**aa2(k)
- 10 continue
- egw=1.
- rn14=.25*cpi*egw*tng*ga3g*ag
- egi=.1
- rn15=.25*cpi*egi*tng*ga3g*ag
- egi=1.
- rn15a=.25*cpi*egi*tng*ga3g*ag
- egr=1.
- rn16=cpi2*egr*tng*tnw*roqr
- rn17=2.*cpi*tng
- rn17a=.31*ga5gh*sqrt(ag)
- rn17b=cw-ci
- rn17c=cw
- apri=.66
- bpri=1.e-4
- bpri=0.5*bpri ! 6/17/02 tao's
- rn18=20.*cpi2*bpri*tnw*roqr
- rn18a=apri
- rn19=2.*cpi*tng/alf
- rn19a=.31*ga5gh*sqrt(ag)
- rn19b=cw/alf
- !
- rnn191=.78
- rnn192=.31*ga5gh*sqrt(ac2/dva)
- !
- rn20=2.*cpi*tng
- rn20a=als*als/rw
- rn20b=.31*ga5gh*sqrt(ag)
- bnd3=2.e-3
- rn21=1.e3*1.569e-12/0.15
- erw=1.
- rn22=.25*cpi*erw*ac1*tnw*ga3b
- rn23=2.*cpi*tnw
- rn23a=.31*ga5bh*sqrt(ac1)
- rn23b=alv*alv/rw
- !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
- !cc
- !cc "c0" in routine "consat" (2d), "consatrh" (3d)
- !cc if ( itaobraun.eq.1 ) --> betah=0.5*beta=-.46*0.5=-0.23; cn0=1.e-6
- !cc if ( itaobraun.eq.0 ) --> betah=0.5*beta=-.6*0.5=-0.30; cn0=1.e-8
- if (itaobraun .eq. 0) then
- cn0=1.e-8
- beta=-.6
- elseif (itaobraun .eq. 1) then
- cn0=1.e-6
- beta=-.46
- endif
- !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
- ! CN0=1.E-6
- ! CN0=1.E-8 ! 6/15/02 tao's
- ! BETA=-.46
- ! BETA=-.6 ! 6/15/02 tao's
- rn25=cn0
- rn30a=alv*als*amw/(tca*ars)
- rn30b=alv/tca
- rn30c=ars/(dwv*amw)
- rn31=1.e-17
- rn32=4.*51.545e-4
- !
- rn30=2.*cpi*tng
- rnn30a=alv*alv*amw/(tca*ars)
- !
- rn33=4.*tns
- rn331=.65
- rn332=.44*sqrt(ac3/dva)*ga5dh
- !
- return
- END SUBROUTINE consat_s
- SUBROUTINE saticel_s (dt, ihail, itaobraun, ice2, istatmin, &
- new_ice_sat, id, &
- ptwrf, qvwrf, qlwrf, qrwrf, &
- qiwrf, qswrf, qgwrf, &
- rho_mks, pi_mks, p0_mks,itimestep, &
- ids,ide, jds,jde, kds,kde, &
- ims,ime, jms,jme, kms,kme, &
- its,ite, jts,jte, kts,kte &
- )
- IMPLICIT NONE
- !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
- ! c
- ! Tao, W.-K., and J. Simpson, 1989: Modeling study of a tropical c
- ! squall-type convective line. J. Atmos. Sci., 46, 177-202. c
- ! c
- ! Tao, W.-K., J. Simpson and M. McCumber, 1989: An ice-water c
- ! saturation adjustment. Mon. Wea. Rev., 117, 231-235. c
- ! c
- ! Tao, W.-K., and J. Simpson, 1993: The Goddard Cumulus Ensemble c
- ! Model. Part I: Model description. Terrestrial, Atmospheric and c
- ! Oceanic Sciences, 4, 35-72. c
- ! c
- ! Tao, W.-K., J. Simpson, D. Baker, S. Braun, M.-D. Chou, B. c
- ! Ferrier,D. Johnson, A. Khain, S. Lang, B. Lynn, C.-L. Shie, c
- ! D. Starr, C.-H. Sui, Y. Wang and P. Wetzel, 2003: Microphysics, c
- ! radiation and surface processes in the Goddard Cumulus Ensemble c
- ! (GCE) model, A Special Issue on Non-hydrostatic Mesoscale c
- ! Modeling, Meteorology and Atmospheric Physics, 82, 97-137. c
- ! c
- ! Lang, S., W.-K. Tao, R. Cifelli, W. Olson, J. Halverson, S. c
- ! Rutledge, and J. Simpson, 2007: Improving simulations of c
- ! convective system from TRMM LBA: Easterly and Westerly regimes. c
- ! J. Atmos. Sci., 64, 1141-1164. c
- ! c
- ! Tao, W.-K., J. J. Shi, S. Lang, C. Peters-Lidard, A. Hou, S. c
- ! Braun, and J. Simpson, 2007: New, improved bulk-microphysical c
- ! schemes for studying precipitation processes in WRF. Part I: c
- ! Comparisons with other schemes. to appear on Mon. Wea. Rev. C
- ! c
- ! Coded by Tao (1989-2003), modified by S. Lang (2006/07) c
- ! c
- ! Implemented into WRF by Roger Shi 2006/2007 c
- !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
- !
- ! COMPUTE ICE PHASE MICROPHYSICS AND SATURATION PROCESSES
- !
- integer, parameter :: nt=2880, nt2=2*nt
- !cc using scott braun's way for pint, pidep computations
- integer :: itaobraun,ice2,ihail,new_ice_sat,id,istatmin
- integer :: itimestep
- real :: tairccri, cn0, dt
- !cc
- !JJS common/bxyz/ n,isec,nran,kt1,kt2
- !JJS common/option/ lipps,ijkadv,istatmin,iwater,itoga,imlifting,lin,
- !JJS 1 irf,iadvh,irfg,ismg,id
- !JJS common/timestat/ ndt_stat,idq
- !JJS common/iice/ new_ice_sat
- !JJS common/bt/ dt,d2t,rijl2,dts,f5,rd1,rd2,bound,al,cp,ra,ck,ce,eps,
- !JJS 1 psfc,fcor,sec,aminut,rdt
- !JJS the following common blocks have been moved to the top of
- !JJS module_mp_gsfcgce_driver_instat.F
- ! common/bt/ rd1,rd2,al,cp
- !
- !
- ! common/bterv/ zrc,zgc,zsc,vrc,vgc,vsc
- ! common/size/ tnw,tns,tng,roqs,roqg,roqr
- ! common/cont/ c38,c358,c610,c149,c879,c172,c409,c76,c218,c580,c141
- ! common/b3cs/ ag,bg,as,bs,aw,bw,bgh,bgq,bsh,bsq,bwh,bwq
- ! common/bsnw/ alv,alf,als,t0,t00,avc,afc,asc,rn1,bnd1,rn2,bnd2, &
- ! rn3,rn4,rn5,rn6,rn7,rn8,rn9,rn10,rn101,rn10a,rn11,rn11a, &
- ! rn12,rn12a(31),rn12b(31),rn13(31),rn14,rn15,rn15a,rn16,rn17, &
- ! rn17a,rn17b,rn17c,rn18,rn18a,rn19,rn19a,rn19b,rn20,rn20a,rn20b, &
- ! bnd3,rn21,rn22,rn23,rn23a,rn23b,rn25,rn25a(31),rn30a,rn30b, &
- ! rn30c,rn31,beta,rn32
- ! common/rsnw1/ rn10b,rn10c,rnn191,rnn192,rn30,rnn30a,rn33,rn331, &
- ! rn332
- !JJS
- integer ids,ide,jds,jde,kds,kde
- integer ims,ime,jms,jme,kms,kme
- integer its,ite,jts,jte,kts,kte
- integer i,j,k, kp
- real :: a0 ,a1 ,a2 ,afcp ,alvr ,ami100 ,ami40 ,ami50 ,ascp ,avcp ,betah &
- ,bg3 ,bgh5 ,bs3 ,bs6 ,bsh5 ,bw3 ,bw6 ,bwh5 ,cmin ,cmin1 ,cmin2 ,cp409 &
- ,cp580 ,cs580 ,cv409 ,d2t ,del ,dwvp ,ee1 ,ee2 ,f00 ,f2 ,f3 ,ft ,fv0 ,fvs &
- ,pi0 ,pir ,pr0 ,qb0 ,r00 ,r0s ,r101f ,r10ar ,r10t ,r11at ,r11rt ,r12r ,r14f &
- ,r14r ,r15af ,r15ar ,r15f ,r15r ,r16r ,r17aq ,r17as ,r17r ,r18r ,r19aq ,r19as &
- ,r19bt ,r19rt ,r20bq ,r20bs ,r20t ,r22f ,r23af ,r23br ,r23t ,r25a ,r25rt ,r2ice &
- ,r31r ,r32rt ,r3f ,r4f ,r5f ,r6f ,r7r ,r8r ,r9r ,r_nci ,rft ,rijl2 ,rp0 ,rr0 &
- ,rrq ,rrs ,rt0 ,scc ,sccc ,sddd ,see ,seee ,sfff ,smmm ,ssss ,tb0 ,temp ,ucog &
- ,ucor ,ucos ,uwet ,vgcf ,vgcr ,vrcf ,vscf ,zgr ,zrr ,zsr
- real, dimension (its:ite,jts:jte,kts:kte) :: fv
- real, dimension (its:ite,jts:jte,kts:kte) :: dpt, dqv
- real, dimension (its:ite,jts:jte,kts:kte) :: qcl, qrn, &
- qci, qcs, qcg
- !JJS 10/16/06 vvvv
- ! real dpt1(ims:ime,jms:jme,kms:kme)
- ! real dqv1(ims:ime,jms:jme,kms:kme),
- ! 1 qcl1(ims:ime,jms:jme,kms:kme)
- ! real qrn1(ims:ime,jms:jme,kms:kme),
- ! 1 qci1(ims:ime,jms:jme,kms:kme)
- ! real qcs1(ims:ime,jms:jme,kms:kme),
- ! 1 qcg1(ims:ime,jms:jme,kms:kme)
- !JJS 10/16/06 ^^^^
- !JJS
- real, dimension (ims:ime, kms:kme, jms:jme) :: ptwrf, qvwrf
- real, dimension (ims:ime, kms:kme, jms:jme) :: qlwrf, qrwrf, &
- qiwrf, qswrf, qgwrf
- !JJS 10/16/06 vvvv
- ! real ptwrfold(ims:ime, kms:kme, jms:jme)
- ! real qvwrfold(ims:ime, kms:kme, jms:jme),
- ! 1 qlwrfold(ims:ime, kms:kme, jms:jme)
- ! real qrwrfold(ims:ime, kms:kme, jms:jme),
- ! 1 qiwrfold(ims:ime, kms:kme, jms:jme)
- ! real qswrfold(ims:ime, kms:kme, jms:jme),
- ! 1 qgwrfold(ims:ime, kms:kme, jms:jme)
- !JJS 10/16/06 ^^^^
- !JJS in MKS
- real, dimension (ims:ime, kms:kme, jms:jme) :: rho_mks
- real, dimension (ims:ime, kms:kme, jms:jme) :: pi_mks
- real, dimension (ims:ime, kms:kme, jms:jme) :: p0_mks
- !JJS
- ! real, dimension (its:ite,jts:jte,kts:kte) :: ww1
- ! real, dimension (its:ite,jts:jte,kts:kte) :: rsw
- ! real, dimension (its:ite,jts:jte,kts:kte) :: rlw
- !JJS COMMON /BADV/
- real, dimension (its:ite,jts:jte) :: &
- vg, zg, &
- ps, pg, &
- prn, psn, &
- pwacs, wgacr, &
- pidep, pint, &
- qsi, ssi, &
- esi, esw, &
- qsw, pr, &
- ssw, pihom, &
- pidw, pimlt, &
- psaut, qracs, &
- psaci, psacw, &
- qsacw, praci, &
- pmlts, pmltg, &
- asss, y1, y2
- !JJS Y2(its:ite,jts:jte), DDE(NB)
- !JJS COMMON/BSAT/
- real, dimension (its:ite,jts:jte) :: &
- praut, pracw, &
- psfw, psfi, &
- dgacs, dgacw, &
- dgaci, dgacr, &
- pgacs, wgacs, &
- qgacw, wgaci, &
- qgacr, pgwet, &
- pgaut, pracs, &
- psacr, qsacr, &
- pgfr, psmlt, &
- pgmlt, psdep, &
- pgdep, piacr, &
- y5, scv, &
- tca, dwv, &
- egs, y3, &
- y4, ddb
- !JJS COMMON/BSAT1/
- real, dimension (its:ite,jts:jte) :: &
- pt, qv, &
- qc, qr, &
- qi, qs, &
- qg, tair, &
- tairc, rtair, &
- dep, dd, &
- dd1, qvs, &
- dm, rq, &
- rsub1, col, &
- cnd, ern, &
- dlt1, dlt2, &
- dlt3, dlt4, &
- zr, vr, &
- zs, vs, &
- pssub, &
- pgsub, dda
- !JJS COMMON/B5/
- real, dimension (its:ite,jts:jte,kts:kte) :: rho
- real, dimension (kts:kte) :: &
- tb, qb, rho1, &
- ta, qa, ta1, qa1, &
- coef, z1, z2, z3, &
- am, am1, ub, vb, &
- wb, ub1, vb1, rrho, &
- rrho1, wbx
- !JJS COMMON/B6/
- real, dimension (its:ite,jts:jte,kts:kte) :: p0, pi, f0
- real, dimension (kts:kte) :: &
- fd, fe, &
- st, sv, &
- sq, sc, &
- se, sqa
- !JJS COMMON/BRH1/
- real, dimension (kts:kte) :: &
- srro, qrro, sqc, sqr, &
- sqi, sqs, sqg, stqc, &
- stqr, stqi, stqs, stqg
- real, dimension (nt) :: &
- tqc, tqr, tqi, tqs, tqg
- !JJS common/bls/ y0(nx,ny),ts0new(nx,ny),qss0new(nx,ny)
- !JJS COMMON/BLS/
- real, dimension (ims:ime,jms:jme) :: &
- y0, ts0, qss0
- !JJS COMMON/BI/ IT(its:ite,jts:jte), ICS(its:ite,jts:jte,4)
- integer, dimension (its:ite,jts:jte) :: it
- integer, dimension (its:ite,jts:jte, 4) :: ics
- integer :: i24h
- integer :: iwarm
- real :: r2is, r2ig
-
- !JJS COMMON/MICRO/
- ! real, dimension (ims:ime,kms:kme,jms:jme) :: dbz
- !23456789012345678901234567890123456789012345678901234567890123456789012
- !
- !JJS 1/3/2008 vvvvv
- !JJS the following common blocks have been moved to the top of
- !JJS module_mp_gsfcgce_driver.F
- ! real, dimension (31) :: aa1, aa2
- ! data aa1/.7939e-7, .7841e-6, .3369e-5, .4336e-5, .5285e-5, &
- ! .3728e-5, .1852e-5, .2991e-6, .4248e-6, .7434e-6, &
- ! .1812e-5, .4394e-5, .9145e-5, .1725e-4, .3348e-4, &
- ! .1725e-4, .9175e-5, .44…
Large files files are truncated, but you can click here to view the full file