1 MODULE module_bl_fogdes
3 USE module_model_constants
5 !-------------------------------------------------------------------
7 !-------------------------------------------------------------------
8 REAL, PARAMETER :: gno=1.0 !original value seems too aggressive: 4.64158883361278196
9 REAL, PARAMETER :: gpw=5./3., qcgmin=1.e-8
13 SUBROUTINE bl_fogdes(&
14 vdfg,qc_curr,dtbl,rho,dz8w,grav_settling,dqc, &
15 ids,ide, jds,jde, kds,kde, &
16 ims,ime, jms,jme, kms,kme, &
17 its,ite, jts,jte, kts,kte &
20 ! This module was written by Joseph Olson (CIRES-NOAA/GSD/AMB) to allow
21 ! gravitational settling of cloud droplets in the atmosphere for all
22 ! PBL schemes (when grav_settling > 0). Previously, this option was only
23 ! available for the MYNN PBL scheme.
25 ! This module is a companion to module_sf_fogdes, which calulcates the
26 ! (fog) deposition onto the surface, so it uses a consistent formulation
27 ! at k=1. Currently, it uses a simple form taken from Dyunkerke (1991)
28 ! and Dyunkerke and Driedonks (1988), but uses a lower settling
29 ! velocity coefficient (gno = 1.0 instead of 4.6).
31 ! settling velocity: Vd = gno*(qc)**(2/3)
32 ! cloud water flux: gflux = Vd*qc = gno*(qc)**(5/3)
34 ! This form assumes a constant number concentration: 10**8 /m**3 for
35 ! gno = 4.6 and approx .2*10**8 /m**3 for gno = 1.0.
39 ! Dyunkerke, P.G. (1991), Radiation fog: a comparison of model simulations
40 ! with detailed observations, Mon. Wea. Rev., 119, 324-341.
41 ! Nakanishi, Mikio (2000), Large-eddy simulation of radiation fog,
42 ! Boundary Layer Meteorology, 94, 461-493.
44 !======================================================================
47 !-- vdfg deposition velocity of fog (m/s)
48 !-- qc_curr cloud water mixing ratio (kg/kg)
49 !-- dqc cloud water mixing ratio tendency
51 !-- rho density of the air (kg/m^3)
52 !-- dp_fog mean fog droplet diameter (m)
53 !-- dz8w dz between full levels (m)
54 !-- grav_settling flag for fog deposition at the lowest atmos layer
56 ! = 1 use Duynkerke (1991) - same as in atmos (above k = 1)
57 ! = 0 No gravitational settling
58 !-- lwc cloud liquid water content (kg/m^3)
59 !-- ims start index for i in memory
60 !-- ime end index for i in memory
61 !-- jms start index for j in memory
62 !-- jme end index for j in memory
63 !-- kms start index for k in memory
64 !-- kme end index for k in memory
65 !-- its start index for i in tile
66 !-- ite end index for i in tile
67 !-- jts start index for j in tile
68 !-- jte end index for j in tile
69 !-- kts start index for k in tile
70 !-- kte end index for k in tile
71 !------------------------------------------------------------------
73 INTEGER, INTENT(IN) :: ims,ime,jms,jme,kms,kme &
74 ,its,ite,jts,jte,kts,kte &
75 ,ids,ide,jds,jde,kds,kde
77 INTEGER, INTENT(IN) :: grav_settling
79 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
80 INTENT(IN),OPTIONAL :: qc_curr
81 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
83 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
86 REAL, DIMENSION( ims:ime, jms:jme ),INTENT(IN),OPTIONAL :: vdfg
88 REAL, INTENT(INOUT),OPTIONAL :: dtbl
90 !JOE-added for Dyunkerke(1991) & Dyunkerke and Driedonks (1988)
91 ! gravitational settling above the surface (creates qc tendency).
92 REAL,parameter :: gpw2=0.66666666666667
94 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
95 INTENT(INOUT),OPTIONAL :: dqc
99 INTEGER :: i,j,k,grav_settling2
100 !------------------------------------------------------------------
102 grav_settling2 = MIN(REAL(grav_settling), 1.)
107 !!====================================================
108 !! Calculate gravitational settling in the atmosphere.
109 !! This uses Dyunkerke (referenced above). Note that
110 !! only the cloud mixing ratio is settled, not the
111 !! number concentration.
112 !!====================================================
116 IF (qc_curr(i,k,j) > qcgmin) THEN
117 gfluxm=grav_settling2*qc_curr(i,k,j)*vdfg(i,j)
122 IF (.5*(qc_curr(i,k+1,j)+qc_curr(i,k,j)) > qcgmin) THEN
123 gfluxp=grav_settling2*gno* &
124 & (.5*(qc_curr(i,k+1,j)+qc_curr(i,k,j)))**gpw
129 dqc(i,k,j)=dqc(i,k,j) + (gfluxp - gfluxm)/dz8w(i,kts,j) !*dtbl
131 !print*,"in bl_fogdes: i,j=",i,j
132 !print*,"vdfg=",vdfg(i,j)," qc=",qc_curr(i,k,j)," dtbl=",dtbl
133 !print*,"dqc=",dqc(i,k,j)," gfluxm=",gfluxm," gfluxp=",gfluxp
137 IF (.5*(qc_curr(i,k+1,j)+qc_curr(i,k,j)) > qcgmin) THEN
138 gfluxp=grav_settling2*gno* &
139 & (.5*(qc_curr(i,k+1,j)+qc_curr(i,k,j)))**gpw
144 IF (.5*(qc_curr(i,k-1,j)+qc_curr(i,k,j)) > qcgmin) THEN
145 gfluxm=grav_settling2*gno* &
146 & (.5*(qc_curr(i,k-1,j)+qc_curr(i,k,j)))**gpw
151 dqc(i,k,j)= dqc(i,k,j) + (gfluxp - gfluxm)/dz8w(i,k,j) !*dtbl
160 END SUBROUTINE bl_fogdes
162 ! ==================================================================
164 END MODULE module_bl_fogdes