3 !===============================================================================
4 ! Single-Layer Urban Canopy Model for WRF Noah-LSM
5 ! Original Version: 2002/11/06 by Hiroyuki Kusaka
6 ! Last Update: 2006/08/24 by Fei Chen and Mukul Tewari (NCAR/RAL)
7 !===============================================================================
9 CHARACTER(LEN=4) :: LU_DATA_TYPE
13 REAL, ALLOCATABLE, DIMENSION(:) :: ZR_TBL
14 REAL, ALLOCATABLE, DIMENSION(:) :: Z0C_TBL
15 REAL, ALLOCATABLE, DIMENSION(:) :: Z0HC_TBL
16 REAL, ALLOCATABLE, DIMENSION(:) :: ZDC_TBL
17 REAL, ALLOCATABLE, DIMENSION(:) :: SVF_TBL
18 REAL, ALLOCATABLE, DIMENSION(:) :: R_TBL
19 REAL, ALLOCATABLE, DIMENSION(:) :: RW_TBL
20 REAL, ALLOCATABLE, DIMENSION(:) :: HGT_TBL
21 REAL, ALLOCATABLE, DIMENSION(:) :: CDS_TBL
22 REAL, ALLOCATABLE, DIMENSION(:) :: AS_TBL
23 REAL, ALLOCATABLE, DIMENSION(:) :: AH_TBL
24 REAL, ALLOCATABLE, DIMENSION(:) :: BETR_TBL
25 REAL, ALLOCATABLE, DIMENSION(:) :: BETB_TBL
26 REAL, ALLOCATABLE, DIMENSION(:) :: BETG_TBL
27 REAL, ALLOCATABLE, DIMENSION(:) :: FRC_URB_TBL
29 REAL :: CAPR_DATA, CAPB_DATA, CAPG_DATA
30 REAL :: AKSR_DATA, AKSB_DATA, AKSG_DATA
31 REAL :: ALBR_DATA, ALBB_DATA, ALBG_DATA
32 REAL :: EPSR_DATA, EPSB_DATA, EPSG_DATA
33 REAL :: Z0R_DATA, Z0B_DATA, Z0G_DATA
34 REAL :: Z0HR_DATA, Z0HB_DATA, Z0HG_DATA
35 REAL :: TRLEND_DATA, TBLEND_DATA, TGLEND_DATA
37 INTEGER :: BOUNDR_DATA,BOUNDB_DATA,BOUNDG_DATA
38 INTEGER :: CH_SCHEME_DATA, TS_SCHEME_DATA
39 INTEGER :: ahoption ! Miao, 2007/01/17, cal. ah
40 REAL, DIMENSION(1:24) :: ahdiuprf ! ah diurnal profile, tloc: 1-24
42 INTEGER :: allocate_status
44 ! INTEGER :: num_roof_layers
45 ! INTEGER :: num_wall_layers
46 ! INTEGER :: num_road_layers
50 !===============================================================================
53 ! Hiroyuki KUSAKA, PhD
54 ! University of Tsukuba, JAPAN
55 ! (CRIEPI, NCAR/MMM visiting scientist, 2002-2004)
56 ! kusaka@ccs.tsukuba.ac.jp
60 ! NCAR/RAP feichen@ucar.edu
62 ! NCAR/RAP mukul@ucar.edu
65 ! Calculate surface temeprature, fluxes, canopy air temperature, and canopy wind
72 ! |- multi_layer or force_restore
73 ! |- urban_param_init <-- urban_param.tbl
76 ! Input Data from WRF [MKS unit]:
78 ! UTYPE [-] : Urban type. 1=urban, 2=suburban, 3=rural
79 ! TA [K] : Potential temperature at 1st wrf level (absolute temp)
80 ! QA [kg/kg] : Mixing ratio at 1st atmospheric level
81 ! UA [m/s] : Wind speed at 1st atmospheric level
82 ! SSG [W/m/m] : Short wave downward radiation at a flat surface
83 ! Note this is the total of direct and diffusive solar
84 ! downward radiation. If without two components, the
85 ! single solar downward can be used instead.
87 ! LSOLAR [-] : Indicating the input type of solar downward radiation
88 ! True: both direct and diffusive solar radiation
90 ! False: only total downward ridiation is available.
91 ! SSGD [W/m/m] : Direct solar radiation at a flat surface
92 ! if SSGD is not available, one can assume a ratio SRATIO
93 ! (e.g., 0.7), so that SSGD = SRATIO*SSG
94 ! SSGQ [W/m/m] : Diffuse solar radiation at a flat surface
95 ! If SSGQ is not available, SSGQ = SSG - SSGD
96 ! LLG [W/m/m] : Long wave downward radiation at a flat surface
97 ! RAIN [mm/h] : Precipitation
98 ! RHOO [kg/m/m/m] : Air density
99 ! ZA [m] : First atmospheric level
100 ! as a lowest boundary condition
101 ! DECLIN [rad] : solar declination
102 ! COSZ : = sin(fai)*sin(del)+cos(fai)*cos(del)*cos(omg)
103 ! OMG [rad] : solar hour angle
104 ! XLAT [deg] : latitude
105 ! DELT [sec] : Time step
106 ! ZNT [m] : Roughnes length
108 ! Output Data to WRF [MKS unit]:
110 ! TS [K] : Surface potential temperature (absolute temp)
111 ! QS [-] : Surface humidity
113 ! SH [W/m/m/] : Sensible heat flux, = FLXTH*RHOO*CPP
114 ! LH [W/m/m] : Latent heat flux, = FLXHUM*RHOO*ELL
115 ! LH_INEMATIC [kg/m/m/sec]: Moisture Kinematic flux, = FLXHUM*RHOO
116 ! SW [W/m/m] : Upward shortwave radiation flux,
117 ! = SSG-SNET*697.7*60. (697.7*60.=100.*100.*4.186)
118 ! ALB [-] : Time-varying albedo
119 ! LW [W/m/m] : Upward longwave radiation flux,
120 ! = LNET*697.7*60.-LLG
121 ! G [W/m/m] : Heat Flux into the Ground
122 ! RN [W/m/m] : Net radiation
124 ! PSIM [-] : Diagnostic similarity stability function for momentum
125 ! PSIH [-] : Diagnostic similarity stability function for heat
127 ! TC [K] : Diagnostic canopy air temperature
128 ! QC [-] : Diagnostic canopy humidity
130 ! TH2 [K] : Diagnostic potential temperature at 2 m
131 ! Q2 [-] : Diagnostic humidity at 2 m
132 ! U10 [m/s] : Diagnostic u wind component at 10 m
133 ! V10 [m/s] : Diagnostic v wind component at 10 m
135 ! CHS, CHS2 [m/s] : CH*U at ZA, CH*U at 2 m (not used)
137 ! Important parameters:
138 ! Following parameter are assigned in run/urban_param.tbl
140 ! ZR [m] : roof level (building height)
141 ! Z0C [m] : Roughness length above canyon for momentum (1/10 of ZR)
142 ! Z0HC [m] : Roughness length above canyon for heat (1/10 of Z0C)
143 ! ZDC [m] : Zero plane displacement height (1/5 of ZR)
144 ! SVF [-] : sky view factor. Calculated again in urban_param_init
145 ! R [-] : building coverage ratio
147 ! HGT [-] : normalized building height
148 ! CDS [-] : drag coefficient by buildings
149 ! AS [1/m] : buildings volumetric parameter
150 ! AH [cal/cm/cm] : anthropogenic heat
151 ! BETR [-] : minimum moisture availability of roof
152 ! BETB [-] : minimum moisture availability of building wall
153 ! BETG [-] : minimum moisture availability of road
154 ! CAPR[cal/cm/cm/cm/degC]: heat capacity of roof
155 ! CAPB[cal/cm/cm/cm/degC]: heat capacity of building wall
156 ! CAPG[cal/cm/cm/cm/degC]: heat capacity of road
157 ! AKSR [cal/cm/sec/degC] : thermal conductivity of roof
158 ! AKSB [cal/cm/sec/degC] : thermal conductivity of building wall
159 ! AKSG [cal/cm/sec/degC] : thermal conductivity of road
160 ! ALBR [-] : surface albedo of roof
161 ! ALBB [-] : surface albedo of building wall
162 ! ALBG [-] : surface albedo of road
163 ! EPSR [-] : surface emissivity of roof
164 ! EPSB [-] : surface emissivity of building wall
165 ! EPSG [-] : surface emissivity of road
166 ! Z0R [m] : roughness length for momentum of roof
167 ! Z0B [m] : roughness length for momentum of building wall (only for CH_SCHEME = 1)
168 ! Z0G [m] : roughness length for momentum of road (only for CH_SCHEME = 1)
169 ! Z0HR [m] : roughness length for heat of roof
170 ! Z0HB [m] : roughness length for heat of building wall (only for CH_SCHEME = 1)
171 ! Z0HG [m] : roughness length for heat of road
172 ! num_roof_layers : number of layers within roof
173 ! num_wall_layers : number of layers within building walls
174 ! num_road_layers : number of layers within below road surface
175 ! NOTE: for now, these layers are defined as same as the number of soil layers in namelist.input
176 ! DZR [cm] : thickness of each roof layer
177 ! DZB [cm] : thickness of each building wall layer
178 ! DZG [cm] : thickness of each ground layer
179 ! BOUNDR [integer 1 or 2] : Boundary Condition for Roof Layer Temp [1: Zero-Flux, 2: T = Constant]
180 ! BOUNDB [integer 1 or 2] : Boundary Condition for Building Wall Layer Temp [1: Zero-Flux, 2: T = Constant]
181 ! BOUNDG [integer 1 or 2] : Boundary Condition for Road Layer Temp [1: Zero-Flux, 2: T = Constant]
182 ! TRLEND [K] : lower boundary condition of roof temperature
183 ! TBLEND [K] : lower boundary condition of building temperature
184 ! TGLEND [K] : lower boundary condition of ground temperature
185 ! CH_SCHEME [integer 1 or 2] : Sfc exchange scheme used for building wall and road
186 ! [1: M-O Similarity Theory, 2: Empirical Form (recommend)]
187 ! TS_SCHEME [integer 1 or 2] : Scheme for computing surface temperature (for roof, wall, and road)
188 ! [1: 4-layer model, 2: Force-Restore method]
192 ! Kusaka and Kimura (2004) J.Appl.Meteor., vol.43, p1899-1910
193 ! Kusaka and Kimura (2004) J.Meteor.Soc.Japan, vol.82, p45-65
194 ! Kusaka et al. (2001) Bound.-Layer Meteor., vol.101, p329-358
197 ! 2006/06 modified by H. Kusaka (Univ. Tsukuba), M. Tewari
198 ! 2005/10/26, modified by Fei Chen, Mukul Tewari
199 ! 2003/07/21 WRF , modified by H. Kusaka of CRIEPI (NCAR/MMM)
200 ! 2001/08/26 PhD , modified by H. Kusaka of CRIEPI (Univ.Tsukuba)
201 ! 1999/08/25 LCM , developed by H. Kusaka of CRIEPI (Univ.Tsukuba)
203 !===============================================================================
207 !===============================================================================
209 SUBROUTINE urban(LSOLAR, & ! L
210 num_roof_layers,num_wall_layers,num_road_layers, & ! I
212 UTYPE,TA,QA,UA,U1,V1,SSG,SSGD,SSGQ,LLG,RAIN,RHOO, & ! I
213 ZA,DECLIN,COSZ,OMG,XLAT,DELT,ZNT, & ! I
215 TR, TB, TG, TC, QC, UC, & ! H
217 XXXR, XXXB, XXXG, XXXC, & ! H
218 TS,QS,SH,LH,LH_KINEMATIC, & ! O
219 SW,ALB,LW,G,RN,PSIM,PSIH, & ! O
221 U10,V10,TH2,Q2,UST & ! O
226 REAL, PARAMETER :: CP=0.24 ! heat capacity of dry air [cgs unit]
227 REAL, PARAMETER :: EL=583. ! latent heat of vaporation [cgs unit]
228 REAL, PARAMETER :: SIG=8.17E-11 ! stefun bolzman constant [cgs unit]
229 REAL, PARAMETER :: SIG_SI=5.67E-8 ! [MKS unit]
230 REAL, PARAMETER :: AK=0.4 ! kalman const. [-]
231 REAL, PARAMETER :: PI=3.14159 ! pi [-]
232 REAL, PARAMETER :: TETENA=7.5 ! const. of Tetens Equation [-]
233 REAL, PARAMETER :: TETENB=237.3 ! const. of Tetens Equation [-]
234 REAL, PARAMETER :: SRATIO=0.75 ! ratio between direct/total solar [-]
236 REAL, PARAMETER :: CPP=1004.5 ! heat capacity of dry air [J/K/kg]
237 REAL, PARAMETER :: ELL=2.442E+06 ! latent heat of vaporization [J/kg]
238 REAL, PARAMETER :: XKA=2.4E-5
240 !-------------------------------------------------------------------------------
241 ! C: configuration variables
242 !-------------------------------------------------------------------------------
244 LOGICAL, INTENT(IN) :: LSOLAR ! logical [true=both, false=SSG only]
246 ! The following variables are also model configuration variables, but are
247 ! defined in the URBAN.TBL and in the contains statement in the top of
248 ! the module_urban_init, so we should not declare them here.
250 INTEGER, INTENT(IN) :: num_roof_layers
251 INTEGER, INTENT(IN) :: num_wall_layers
252 INTEGER, INTENT(IN) :: num_road_layers
255 REAL, INTENT(IN), DIMENSION(1:num_roof_layers) :: DZR ! grid interval of roof layers [cm]
256 REAL, INTENT(IN), DIMENSION(1:num_wall_layers) :: DZB ! grid interval of wall layers [cm]
257 REAL, INTENT(IN), DIMENSION(1:num_road_layers) :: DZG ! grid interval of road layers [cm]
259 !-------------------------------------------------------------------------------
260 ! I: input variables from LSM to Urban
261 !-------------------------------------------------------------------------------
263 INTEGER, INTENT(IN) :: UTYPE ! urban type [urban=1, suburban=2, rural=3]
265 REAL, INTENT(IN) :: TA ! potential temp at 1st atmospheric level [K]
266 REAL, INTENT(IN) :: QA ! mixing ratio at 1st atmospheric level [kg/kg]
267 REAL, INTENT(IN) :: UA ! wind speed at 1st atmospheric level [m/s]
268 REAL, INTENT(IN) :: U1 ! u at 1st atmospheric level [m/s]
269 REAL, INTENT(IN) :: V1 ! v at 1st atmospheric level [m/s]
270 REAL, INTENT(IN) :: SSG ! downward total short wave radiation [W/m/m]
271 REAL, INTENT(IN) :: LLG ! downward long wave radiation [W/m/m]
272 REAL, INTENT(IN) :: RAIN ! precipitation [mm/h]
273 REAL, INTENT(IN) :: RHOO ! air density [kg/m^3]
274 REAL, INTENT(IN) :: ZA ! first atmospheric level [m]
275 REAL, INTENT(IN) :: DECLIN ! solar declination [rad]
276 REAL, INTENT(IN) :: COSZ ! sin(fai)*sin(del)+cos(fai)*cos(del)*cos(omg)
277 REAL, INTENT(IN) :: OMG ! solar hour angle [rad]
279 REAL, INTENT(IN) :: XLAT ! latitude [deg]
280 REAL, INTENT(IN) :: DELT ! time step [s]
281 REAL, INTENT(IN) :: ZNT ! roughness length [m]
282 REAL, INTENT(IN) :: CHS,CHS2 ! CH*U at za and 2 m [m/s]
284 REAL, INTENT(INOUT) :: SSGD ! downward direct short wave radiation [W/m/m]
285 REAL, INTENT(INOUT) :: SSGQ ! downward diffuse short wave radiation [W/m/m]
287 !-------------------------------------------------------------------------------
288 ! O: output variables from Urban to LSM
289 !-------------------------------------------------------------------------------
291 REAL, INTENT(OUT) :: TS ! surface potential temperature [K]
292 REAL, INTENT(OUT) :: QS ! surface humidity [K]
293 REAL, INTENT(OUT) :: SH ! sensible heat flux [W/m/m]
294 REAL, INTENT(OUT) :: LH ! latent heat flux [W/m/m]
295 REAL, INTENT(OUT) :: LH_KINEMATIC ! latent heat, kinetic [kg/m/m/s]
296 REAL, INTENT(OUT) :: SW ! upward short wave radiation flux [W/m/m]
297 REAL, INTENT(OUT) :: ALB ! time-varying albedo [fraction]
298 REAL, INTENT(OUT) :: LW ! upward long wave radiation flux [W/m/m]
299 REAL, INTENT(OUT) :: G ! heat flux into the ground [W/m/m]
300 REAL, INTENT(OUT) :: RN ! net radition [W/m/m]
301 REAL, INTENT(OUT) :: PSIM ! similality stability shear function for momentum
302 REAL, INTENT(OUT) :: PSIH ! similality stability shear function for heat
303 REAL, INTENT(OUT) :: GZ1OZ0
304 REAL, INTENT(OUT) :: U10 ! u at 10m [m/s]
305 REAL, INTENT(OUT) :: V10 ! u at 10m [m/s]
306 REAL, INTENT(OUT) :: TH2 ! potential temperature at 2 m [K]
307 REAL, INTENT(OUT) :: Q2 ! humidity at 2 m [-]
308 !m REAL, INTENT(OUT) :: CHS,CHS2 ! CH*U at za and 2 m [m/s]
309 REAL, INTENT(OUT) :: UST ! friction velocity [m/s]
312 !-------------------------------------------------------------------------------
313 ! H: Historical (state) variables of Urban : LSM <--> Urban
314 !-------------------------------------------------------------------------------
316 ! TR: roof temperature [K]; TRP: at previous time step [K]
317 ! TB: building wall temperature [K]; TBP: at previous time step [K]
318 ! TG: road temperature [K]; TGP: at previous time step [K]
319 ! TC: urban-canopy air temperature [K]; TCP: at previous time step [K]
320 ! (absolute temperature)
321 ! QC: urban-canopy air mixing ratio [kg/kg]; QCP: at previous time step [kg/kg]
323 ! XXXR: Monin-Obkhov length for roof [dimensionless]
324 ! XXXB: Monin-Obkhov length for building wall [dimensionless]
325 ! XXXG: Monin-Obkhov length for road [dimensionless]
326 ! XXXC: Monin-Obkhov length for urban-canopy [dimensionless]
328 ! TRL, TBL, TGL: layer temperature [K] (absolute temperature)
330 REAL, INTENT(INOUT):: TR, TB, TG, TC, QC, UC
331 REAL, INTENT(INOUT):: XXXR, XXXB, XXXG, XXXC
333 REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: TRL
334 REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: TBL
335 REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: TGL
337 !-------------------------------------------------------------------------------
338 ! L: Local variables from read_param
339 !-------------------------------------------------------------------------------
341 REAL :: ZR, Z0C, Z0HC, ZDC, SVF, R, RW, HGT, CDS, AS, AH
342 REAL :: CAPR, CAPB, CAPG, AKSR, AKSB, AKSG, ALBR, ALBB, ALBG
343 REAL :: EPSR, EPSB, EPSG, Z0R, Z0B, Z0G, Z0HR, Z0HB, Z0HG
344 REAL :: TRLEND,TBLEND,TGLEND
348 INTEGER :: BOUNDR, BOUNDB, BOUNDG
349 INTEGER :: CH_SCHEME, TS_SCHEME
351 LOGICAL :: SHADOW ! [true=consider svf and shadow effects, false=consider svf effect only]
353 !-------------------------------------------------------------------------------
355 !-------------------------------------------------------------------------------
357 REAL :: BETR, BETB, BETG
358 REAL :: SX, SD, SQ, RX
359 REAL :: UR, ZC, XLB, BB
360 REAL :: Z, RIBR, RIBB, RIBG, RIBC, BHR, BHB, BHG, BHC
361 REAL :: TSC, LNET, SNET, FLXUV, THG, FLXTH, FLXHUM, FLXG
362 REAL :: W, VFGS, VFGW, VFWG, VFWS, VFWW
363 REAL :: HOUI1, HOUI2, HOUI3, HOUI4, HOUI5, HOUI6, HOUI7, HOUI8
364 REAL :: SLX, SLX1, SLX2, SLX3, SLX4, SLX5, SLX6, SLX7, SLX8
365 REAL :: FLXTHR, FLXTHB, FLXTHG, FLXHUMR, FLXHUMB, FLXHUMG
366 REAL :: SR, SB, SG, RR, RB, RG
367 REAL :: SR1, SR2, SB1, SB2, SG1, SG2, RR1, RR2, RB1, RB2, RG1, RG2
368 REAL :: HR, HB, HG, ELER, ELEB, ELEG, G0R, G0B, G0G
369 REAL :: ALPHAC, ALPHAR, ALPHAB, ALPHAG
370 REAL :: CHC, CHR, CHB, CHG, CDC, CDR, CDB, CDG
371 REAL :: C1R, C1B, C1G, TE, TC1, TC2, QC1, QC2, QS0R, QS0B, QS0G,RHO,ES
376 REAL :: DRRDTR, DHRDTR, DELERDTR, DG0RDTR
378 REAL :: FX, FY, GF, GX, GY
379 REAL :: DTCDTB, DTCDTG
380 REAL :: DQCDTB, DQCDTG
381 REAL :: DRBDTB1, DRBDTG1, DRBDTB2, DRBDTG2
382 REAL :: DRGDTB1, DRGDTG1, DRGDTB2, DRGDTG2
383 REAL :: DRBDTB, DRBDTG, DRGDTB, DRGDTG
384 REAL :: DHBDTB, DHBDTG, DHGDTB, DHGDTG
385 REAL :: DELEBDTB, DELEBDTG, DELEGDTG, DELEGDTB
386 REAL :: DG0BDTB, DG0BDTG, DG0GDTG, DG0GDTB
387 REAL :: DQS0BDTB, DQS0GDTG
388 REAL :: DTB, DTG, DTC
390 REAL :: THEATAZ ! Solar Zenith Angle [rad]
391 REAL :: THEATAS ! = PI/2. - THETAZ
392 REAL :: FAI ! Latitude [rad]
394 REAL :: PS ! Surface Pressure [hPa]
395 REAL :: TAV ! Vertial Temperature [K]
397 REAL :: XXX, X, Z0, Z0H, CD, CH
398 REAL :: XXX2, PSIM2, PSIH2, XXX10, PSIM10, PSIH10
399 REAL :: PSIX, PSIT, PSIX2, PSIT2, PSIX10, PSIT10
401 REAL :: TRP, TBP, TGP, TCP, QCP, TST, QST
403 INTEGER :: iteration, K
406 !-------------------------------------------------------------------------------
408 !-------------------------------------------------------------------------------
410 ! Miao, 2007/01/17, cal. ah
412 tloc=mod(int(OMG/PI*180./15.+12.+0.5 ),24)
416 CALL read_param(UTYPE,ZR,Z0C,Z0HC,ZDC,SVF,R,RW,HGT,CDS,AS,AH, &
417 CAPR,CAPB,CAPG,AKSR,AKSB,AKSG,ALBR,ALBB,ALBG, &
418 EPSR,EPSB,EPSG,Z0R,Z0B,Z0G,Z0HR,Z0HB,Z0HG, &
419 BETR,BETB,BETG,TRLEND,TBLEND,TGLEND, &
420 BOUNDR,BOUNDB,BOUNDG,CH_SCHEME,TS_SCHEME)
422 ! Miao, 2007/01/17, cal. ah
423 if(ahoption==1) AH=AH*ahdiuprf(tloc)
425 IF( ZDC+Z0C+2. >= ZA) THEN
426 PRINT *, 'ZDC + Z0C + 2m is larger than the 1st WRF level'
427 PRINT *, 'Stop in the subroutine urban - change ZDC and Z0C'
435 SSGD = SRATIO*SSG ! No radiation scheme has SSGD and SSGQ.
441 VFWG=(1.-SVF)*(1.-R)/W
445 !-------------------------------------------------------------------------------
446 ! Convert unit from MKS to cgs
447 ! Renew surface and layer temperatures
448 !-------------------------------------------------------------------------------
450 SX=(SSGD+SSGQ)/697.7/60. ! downward short wave radition [ly/min]
451 SD=SSGD/697.7/60. ! downward direct short wave radiation
452 SQ=SSGQ/697.7/60. ! downward diffiusion short wave radiation
453 RX=LLG/697.7/60. ! downward long wave radiation
454 RHO=RHOO*0.001 ! air density at first atmospheric level
463 PS=RHOO*287.*TAV/100. ![hPa]
465 !-------------------------------------------------------------------------------
467 !-------------------------------------------------------------------------------
469 IF ( ZR + 2. < ZA ) THEN
470 UR=UA*LOG((ZR-ZDC)/Z0C)/LOG((ZA-ZDC)/Z0C)
474 BB=ZR*(CDS*AS/(2.*XLB**2.))**(1./3.)
475 UC=UR*EXP(-BB*(1.-ZC/ZR))
477 print *,'ZR=',ZR, 'ZA=',ZA
478 PRINT *, 'Warning ZR + 2m is larger than the 1st WRF level'
483 !-------------------------------------------------------------------------------
484 ! Net Short Wave Radiation at roof, wall, and road
485 !-------------------------------------------------------------------------------
492 IF(.NOT.SHADOW) THEN ! no shadow effects model
495 SG1=SX*VFGS*(1.-ALBG)
496 SB1=SX*VFWS*(1.-ALBB)
497 SG2=SB1*ALBB/(1.-ALBB)*VFGW*(1.-ALBG)
498 SB2=SG1*ALBG/(1.-ALBG)*VFWG*(1.-ALBB)
500 ELSE ! shadow effects model
504 THEATAS=ABS(ASIN(COSZ))
505 THEATAZ=ABS(ACOS(COSZ))
507 SNT=COS(DECLIN)*SIN(OMG)/COS(THEATAS)
508 CNT=(COSZ*SIN(FAI)-SIN(DECLIN))/COS(THEATAS)/COS(FAI)
510 HOUI1=(SNT*COS(PI/8.) -CNT*SIN(PI/8.))
511 HOUI2=(SNT*COS(2.*PI/8.) -CNT*SIN(2.*PI/8.))
512 HOUI3=(SNT*COS(3.*PI/8.) -CNT*SIN(3.*PI/8.))
513 HOUI4=(SNT*COS(4.*PI/8.) -CNT*SIN(4.*PI/8.))
514 HOUI5=(SNT*COS(5.*PI/8.) -CNT*SIN(5.*PI/8.))
515 HOUI6=(SNT*COS(6.*PI/8.) -CNT*SIN(6.*PI/8.))
516 HOUI7=(SNT*COS(7.*PI/8.) -CNT*SIN(7.*PI/8.))
517 HOUI8=(SNT*COS(8.*PI/8.) -CNT*SIN(8.*PI/8.))
519 SLX1=HGT*ABS(TAN(THEATAZ))*ABS(HOUI1)
520 SLX2=HGT*ABS(TAN(THEATAZ))*ABS(HOUI2)
521 SLX3=HGT*ABS(TAN(THEATAZ))*ABS(HOUI3)
522 SLX4=HGT*ABS(TAN(THEATAZ))*ABS(HOUI4)
523 SLX5=HGT*ABS(TAN(THEATAZ))*ABS(HOUI5)
524 SLX6=HGT*ABS(TAN(THEATAZ))*ABS(HOUI6)
525 SLX7=HGT*ABS(TAN(THEATAZ))*ABS(HOUI7)
526 SLX8=HGT*ABS(TAN(THEATAZ))*ABS(HOUI8)
528 IF(SLX1 > RW) SLX1=RW
529 IF(SLX2 > RW) SLX2=RW
530 IF(SLX3 > RW) SLX3=RW
531 IF(SLX4 > RW) SLX4=RW
532 IF(SLX5 > RW) SLX5=RW
533 IF(SLX6 > RW) SLX6=RW
534 IF(SLX7 > RW) SLX7=RW
535 IF(SLX8 > RW) SLX8=RW
537 SLX=(SLX1+SLX2+SLX3+SLX4+SLX5+SLX6+SLX7+SLX8)/8.
556 !-------------------------------------------------------------------------------
558 !-------------------------------------------------------------------------------
560 !-------------------------------------------------------------------------------
562 !-------------------------------------------------------------------------------
565 BHR=LOG(Z0R/Z0HR)/0.4
566 RIBR=(9.8*2./(TA+TRP))*(TA-TRP)*(Z+Z0R)/(UA*UA)
568 CALL mos(XXXR,ALPHAR,CDR,BHR,RIBR,Z,Z0R,UA,TA,TRP,RHO)
572 IF(RAIN > 1.) BETR=0.7
574 IF (TS_SCHEME == 1) THEN
576 !-------------------------------------------------------------------------------
577 ! TR Solving Non-Linear Equation by Newton-Rapson
578 ! TRL Solving Heat Equation by Tri Diagonal Matrix Algorithm
579 !-------------------------------------------------------------------------------
581 ! ES=EXP(19.482-4303.4/(TSC+243.5)) ! WMO
582 ! ES=6.11*10.**(TETENA*TSC/(TETENB+TSC)) ! Tetens
583 ! DESDT=( 6.1078*(2500.-2.4*TSC)/ & ! Tetens
584 ! (0.46151*(TSC+273.15)**2.) )*10.**(7.5*TSC/(237.3+TSC))
585 ! ES=6.11*EXP((2.5*10.**6./461.51)*(TRP-273.15)/(273.15*TRP) ) ! Clausius-Clapeyron
586 ! DESDT=(2.5*10.**6./461.51)*ES/(TRP**2.) ! Clausius-Clapeyron
587 ! QS0R=0.622*ES/(PS-0.378*ES)
588 ! DQS0RDTR = DESDT*0.622*PS/((PS-0.378*ES)**2.)
589 ! DQS0RDTR = 17.269*(273.15-35.86)/((TRP-35.86)**2.)*QS0R
595 ES=6.11*EXP( (2.5*10.**6./461.51)*(TRP-273.15)/(273.15*TRP) )
596 DESDT=(2.5*10.**6./461.51)*ES/(TRP**2.)
597 QS0R=0.622*ES/(PS-0.378*ES)
598 DQS0RDTR = DESDT*0.622*PS/((PS-0.378*ES)**2.)
600 RR=EPSR*(RX-SIG*(TRP**4.)/60.)
601 HR=RHO*CP*CHR*UA*(TRP-TA)*100.
602 ELER=RHO*EL*CHR*UA*BETR*(QS0R-QA)*100.
603 G0R=AKSR*(TRP-TRL(1))/(DZR(1)/2.)
605 F = SR + RR - HR - ELER - G0R
607 DRRDTR = (-4.*EPSR*SIG*TRP**3.)/60.
608 DHRDTR = RHO*CP*CHR*UA*100.
609 DELERDTR = RHO*EL*CHR*UA*BETR*DQS0RDTR*100.
610 DG0RDTR = 2.*AKSR/DZR(1)
612 DFDT = DRRDTR - DHRDTR - DELERDTR - DG0RDTR
618 IF( ABS(F) < 0.000001 .AND. ABS(DTR) < 0.000001 ) EXIT
622 ! multi-layer heat equation model
624 CALL multi_layer(num_roof_layers,BOUNDR,G0R,CAPR,AKSR,TRL,DZR,DELT,TRLEND)
628 ES=6.11*EXP( (2.5*10.**6./461.51)*(TRP-273.15)/(273.15*TRP) )
629 QS0R=0.622*ES/(PS-0.378*ES)
631 RR=EPSR*(RX-SIG*(TRP**4.)/60.)
632 HR=RHO*CP*CHR*UA*(TRP-TA)*100.
633 ELER=RHO*EL*CHR*UA*BETR*(QS0R-QA)*100.
636 CALL force_restore(CAPR,AKSR,DELT,SR,RR,HR,ELER,TRLEND,TRP,TR)
642 FLXTHR=HR/RHO/CP/100.
643 FLXHUMR=ELER/RHO/EL/100.
645 !-------------------------------------------------------------------------------
647 !-------------------------------------------------------------------------------
649 !-------------------------------------------------------------------------------
650 ! CHC, CHB, CDB, BETB, CHG, CDG, BETG
651 !-------------------------------------------------------------------------------
654 BHC=LOG(Z0C/Z0HC)/0.4
655 RIBC=(9.8*2./(TA+TCP))*(TA-TCP)*(Z+Z0C)/(UA*UA)
657 CALL mos(XXXC,ALPHAC,CDC,BHC,RIBC,Z,Z0C,UA,TA,TCP,RHO)
659 IF (CH_SCHEME == 1) THEN
662 BHB=LOG(Z0B/Z0HB)/0.4
663 BHG=LOG(Z0G/Z0HG)/0.4
664 RIBB=(9.8*2./(TCP+TBP))*(TCP-TBP)*(Z+Z0B)/(UC*UC)
665 RIBG=(9.8*2./(TCP+TGP))*(TCP-TGP)*(Z+Z0G)/(UC*UC)
667 CALL mos(XXXB,ALPHAB,CDB,BHB,RIBB,Z,Z0B,UC,TCP,TBP,RHO)
668 CALL mos(XXXG,ALPHAG,CDG,BHG,RIBG,Z,Z0G,UC,TCP,TGP,RHO)
672 ALPHAB=RHO*CP*(6.15+4.18*UC)/1200.
673 IF(UC > 5.) ALPHAB=RHO*CP*(7.51*UC**0.78)/1200.
674 ALPHAG=RHO*CP*(6.15+4.18*UC)/1200.
675 IF(UC > 5.) ALPHAG=RHO*CP*(7.51*UC**0.78)/1200.
684 IF(RAIN > 1.) BETG=0.7
686 IF (TS_SCHEME == 1) THEN
688 !-------------------------------------------------------------------------------
689 ! TB, TG Solving Non-Linear Simultaneous Equation by Newton-Rapson
690 ! TBL,TGL Solving Heat Equation by Tri Diagonal Matrix Algorithm
691 !-------------------------------------------------------------------------------
698 ES=6.11*EXP( (2.5*10.**6./461.51)*(TBP-273.15)/(273.15*TBP) )
699 DESDT=(2.5*10.**6./461.51)*ES/(TBP**2.)
700 QS0B=0.622*ES/(PS-0.378*ES)
701 DQS0BDTB=DESDT*0.622*PS/((PS-0.378*ES)**2.)
703 ES=6.11*EXP( (2.5*10.**6./461.51)*(TGP-273.15)/(273.15*TGP) )
704 DESDT=(2.5*10.**6./461.51)*ES/(TGP**2.)
705 QS0G=0.622*ES/(PS-0.378*ES)
706 DQS0GDTG=DESDT*0.22*PS/((PS-0.378*ES)**2.)
709 +EPSB*VFGW*SIG*TBP**4./60. &
713 +EPSG*VFWG*SIG*TGP**4./60. &
714 +EPSB*VFWW*SIG*TBP**4./60. &
717 RG2=EPSG*( (1.-EPSB)*(1.-SVF)*VFWS*RX &
718 +(1.-EPSB)*(1.-SVF)*VFWG*EPSG*SIG*TGP**4./60. &
719 +EPSB*(1.-EPSB)*(1.-SVF)*(1.-2.*VFWS)*SIG*TBP**4./60. )
721 RB2=EPSB*( (1.-EPSG)*VFWG*VFGS*RX &
722 +(1.-EPSG)*EPSB*VFGW*VFWG*SIG*(TBP**4.)/60. &
723 +(1.-EPSB)*VFWS*(1.-2.*VFWS)*RX &
724 +(1.-EPSB)*VFWG*(1.-2.*VFWS)*EPSG*SIG*EPSG*TGP**4./60. &
725 +EPSB*(1.-EPSB)*(1.-2.*VFWS)*(1.-2.*VFWS)*SIG*TBP**4./60. )
730 DRBDTB1=EPSB*(4.*EPSB*SIG*TB**3.*VFWW-4.*SIG*TB**3.)/60.
731 DRBDTG1=EPSB*(4.*EPSG*SIG*TG**3.*VFWG)/60.
732 DRBDTB2=EPSB*(4.*(1.-EPSG)*EPSB*SIG*TB**3.*VFGW*VFWG &
733 +4.*EPSB*(1.-EPSB)*SIG*TB**3.*VFWW*VFWW)/60.
734 DRBDTG2=EPSB*(4.*(1.-EPSB)*EPSG*SIG*TG**3.*VFWG*VFWW)/60.
736 DRGDTB1=EPSG*(4.*EPSB*SIG*TB**3.*VFGW)/60.
737 DRGDTG1=EPSG*(-4.*SIG*TG**3.)/60.
738 DRGDTB2=EPSG*(4.*EPSB*(1.-EPSB)*SIG*TB**3.*VFWW*VFGW)/60.
739 DRGDTG2=EPSG*(4.*(1.-EPSB)*EPSG*SIG*TG**3.*VFWG*VFGW)/60.
741 DRBDTB=DRBDTB1+DRBDTB2
742 DRBDTG=DRBDTG1+DRBDTG2
743 DRGDTB=DRGDTB1+DRGDTB2
744 DRGDTG=DRGDTG1+DRGDTG2
746 HB=RHO*CP*CHB*UC*(TBP-TCP)*100.
747 HG=RHO*CP*CHG*UC*(TGP-TCP)*100.
749 DTCDTB=W*ALPHAB/(RW*ALPHAC+RW*ALPHAG+W*ALPHAB)
750 DTCDTG=RW*ALPHAG/(RW*ALPHAC+RW*ALPHAG+W*ALPHAB)
752 DHBDTB=RHO*CP*CHB*UC*(1.-DTCDTB)*100.
753 DHBDTG=RHO*CP*CHB*UC*(0.-DTCDTG)*100.
754 DHGDTG=RHO*CP*CHG*UC*(1.-DTCDTG)*100.
755 DHGDTB=RHO*CP*CHG*UC*(0.-DTCDTB)*100.
757 ELEB=RHO*EL*CHB*UC*BETB*(QS0B-QCP)*100.
758 ELEG=RHO*EL*CHG*UC*BETG*(QS0G-QCP)*100.
760 DQCDTB=W*ALPHAB*BETB*DQS0BDTB/(RW*ALPHAC+RW*ALPHAG*BETG+W*ALPHAB*BETB)
761 DQCDTG=RW*ALPHAG*BETG*DQS0GDTG/(RW*ALPHAC+RW*ALPHAG*BETG+W*ALPHAB*BETB)
763 DELEBDTB=RHO*EL*CHB*UC*BETB*(DQS0BDTB-DQCDTB)*100.
764 DELEBDTG=RHO*EL*CHB*UC*BETB*(0.-DQCDTG)*100.
765 DELEGDTG=RHO*EL*CHG*UC*BETG*(DQS0GDTG-DQCDTG)*100.
766 DELEGDTB=RHO*EL*CHG*UC*BETG*(0.-DQCDTB)*100.
768 G0B=AKSB*(TBP-TBL(1))/(DZB(1)/2.)
769 G0G=AKSG*(TGP-TGL(1))/(DZG(1)/2.)
771 DG0BDTB=2.*AKSB/DZB(1)
773 DG0GDTG=2.*AKSG/DZG(1)
776 F = SB + RB - HB - ELEB - G0B
777 FX = DRBDTB - DHBDTB - DELEBDTB - DG0BDTB
778 FY = DRBDTG - DHBDTG - DELEBDTG - DG0BDTG
780 GF = SG + RG - HG - ELEG - G0G
781 GX = DRGDTB - DHGDTB - DELEGDTB - DG0GDTB
782 GY = DRGDTG - DHGDTG - DELEGDTG - DG0GDTG
784 DTB = (GF*FY-F*GY)/(FX*GY-GX*FY)
785 DTG = -(GF+GX*DTB)/GY
793 TC1=RW*ALPHAC+RW*ALPHAG+W*ALPHAB
794 TC2=RW*ALPHAC*TA+RW*ALPHAG*TGP+W*ALPHAB*TBP
797 QC1=RW*ALPHAC+RW*ALPHAG*BETG+W*ALPHAB*BETB
798 QC2=RW*ALPHAC*QA+RW*ALPHAG*BETG*QS0G+W*ALPHAB*BETB*QS0B
805 IF( ABS(F) < 0.000001 .AND. ABS(DTB) < 0.000001 &
806 .AND. ABS(GF) < 0.000001 .AND. ABS(DTG) < 0.000001 &
807 .AND. ABS(DTC) < 0.000001) EXIT
811 CALL multi_layer(num_wall_layers,BOUNDB,G0B,CAPB,AKSB,TBL,DZB,DELT,TBLEND)
813 CALL multi_layer(num_road_layers,BOUNDG,G0G,CAPG,AKSG,TGL,DZG,DELT,TGLEND)
817 !-------------------------------------------------------------------------------
818 ! TB, TG by Force-Restore Method
819 !-------------------------------------------------------------------------------
821 ES=6.11*EXP((2.5*10.**6./461.51)*(TBP-273.15)/(273.15*TBP) )
822 QS0B=0.622*ES/(PS-0.378*ES)
824 ES=6.11*EXP((2.5*10.**6./461.51)*(TGP-273.15)/(273.15*TGP) )
825 QS0G=0.622*ES/(PS-0.378*ES)
828 +EPSB*VFGW*SIG*TBP**4./60. &
832 +EPSG*VFWG*SIG*TGP**4./60. &
833 +EPSB*VFWW*SIG*TBP**4./60. &
836 RG2=EPSG*( (1.-EPSB)*(1.-SVF)*VFWS*RX &
837 +(1.-EPSB)*(1.-SVF)*VFWG*EPSG*SIG*TGP**4./60. &
838 +EPSB*(1.-EPSB)*(1.-SVF)*(1.-2.*VFWS)*SIG*TBP**4./60. )
840 RB2=EPSB*( (1.-EPSG)*VFWG*VFGS*RX &
841 +(1.-EPSG)*EPSB*VFGW*VFWG*SIG*(TBP**4.)/60. &
842 +(1.-EPSB)*VFWS*(1.-2.*VFWS)*RX &
843 +(1.-EPSB)*VFWG*(1.-2.*VFWS)*EPSG*SIG*EPSG*TGP**4./60. &
844 +EPSB*(1.-EPSB)*(1.-2.*VFWS)*(1.-2.*VFWS)*SIG*TBP**4./60. )
849 HB=RHO*CP*CHB*UC*(TBP-TCP)*100.
850 ELEB=RHO*EL*CHB*UC*BETB*(QS0B-QCP)*100.
853 HG=RHO*CP*CHG*UC*(TGP-TCP)*100.
854 ELEG=RHO*EL*CHG*UC*BETG*(QS0G-QCP)*100.
857 CALL force_restore(CAPB,AKSB,DELT,SB,RB,HB,ELEB,TBLEND,TBP,TB)
858 CALL force_restore(CAPG,AKSG,DELT,SG,RG,HG,ELEG,TGLEND,TGP,TG)
863 TC1=RW*ALPHAC+RW*ALPHAG+W*ALPHAB
864 TC2=RW*ALPHAC*TA+RW*ALPHAG*TGP+W*ALPHAB*TBP
867 QC1=RW*ALPHAC+RW*ALPHAG*BETG+W*ALPHAB*BETB
868 QC2=RW*ALPHAC*QA+RW*ALPHAG*BETG*QS0G+W*ALPHAB*BETB*QS0B
876 FLXTHB=HB/RHO/CP/100.
877 FLXHUMB=ELEB/RHO/EL/100.
878 FLXTHG=HG/RHO/CP/100.
879 FLXHUMG=ELEG/RHO/EL/100.
881 !-------------------------------------------------------------------------------
882 ! Total Fulxes from Urban Canopy
883 !-------------------------------------------------------------------------------
885 FLXUV = ( R*CDR + RW*CDC )*UA*UA
886 ! Miao, 2007/01/17, cal. ah
888 FLXTH = ( R*FLXTHR + W*FLXTHB + RW*FLXTHG ) + AH/RHOO/CPP
890 FLXTH = ( R*FLXTHR + W*FLXTHB + RW*FLXTHG )
892 FLXHUM = ( R*FLXHUMR + W*FLXHUMB + RW*FLXHUMG )
893 FLXG = ( R*G0R + W*G0B + RW*G0G )
894 LNET = R*RR + W*RB + RW*RG
896 !----------------------------------------------------------------------------
897 ! Convert Unit: FLUXES and u* T* q* --> WRF
898 !----------------------------------------------------------------------------
900 SH = FLXTH * RHOO * CPP ! Sensible heat flux [W/m/m]
901 LH = FLXHUM * RHOO * ELL ! Latent heat flux [W/m/m]
902 LH_KINEMATIC = FLXHUM * RHOO ! Latent heat, Kinematic [kg/m/m/s]
903 LW = LLG - (LNET*697.7*60.) ! Upward longwave radiation [W/m/m]
904 SW = SSG - (SNET*697.7*60.) ! Upward shortwave radiation [W/m/m]
906 IF( ABS(SSG) > 0.0001) ALB = SW/SSG ! Effective albedo [-]
907 G = -FLXG*697.7*60. ! [W/m/m]
908 RN = (SNET+LNET)*697.7*60. ! Net radiation [W/m/m]
910 UST = SQRT(FLXUV) ! u* [m/s]
911 TST = -FLXTH/UST ! T* [K]
912 QST = -FLXHUM/UST ! q* [-]
914 !------------------------------------------------------
915 ! diagnostic GRID AVERAGED PSIM PSIH TS QS --> WRF
916 !------------------------------------------------------
922 XXX = 0.4*9.81*Z*TST/TA/UST/UST
924 IF ( XXX >= 1. ) XXX = 1.
925 IF ( XXX <= -5. ) XXX = -5.
931 X = (1.-16.*XXX)**0.25
932 PSIM = 2.*ALOG((1.+X)/2.) + ALOG((1.+X*X)/2.) - 2.*ATAN(X) + PI/2.
933 PSIH = 2.*ALOG((1.+X*X)/2.)
937 CD = 0.4**2./(ALOG(Z/Z0)-PSIM)**2.
939 !m CH = 0.4**2./(ALOG(Z/Z0)-PSIM)/(ALOG(Z/Z0H)-PSIH)
940 !m CHS = 0.4*UST/(ALOG(Z/Z0H)-PSIH)
941 !m TS = TA + FLXTH/CH/UA ! surface potential temp (flux temp)
942 !m QS = QA + FLXHUM/CH/UA ! surface humidity
944 TS = TA + FLXTH/CHS ! surface potential temp (flux temp)
945 QS = QA + FLXHUM/CHS ! surface humidity
947 !-------------------------------------------------------
948 ! diagnostic GRID AVERAGED U10 V10 TH2 Q2 --> WRF
949 !-------------------------------------------------------
952 IF ( XXX2 >= 1. ) XXX2 = 1.
953 IF ( XXX2 <= -5. ) XXX2 = -5.
959 X = (1.-16.*XXX2)**0.25
960 PSIM2 = 2.*ALOG((1.+X)/2.) + ALOG((1.+X*X)/2.) - 2.*ATAN(X) + 2.*ATAN(1.)
961 PSIH2 = 2.*ALOG((1.+X*X)/2.)
964 !m CHS2 = 0.4*UST/(ALOG(2./Z0H)-PSIH2)
968 IF ( XXX10 >= 1. ) XXX10 = 1.
969 IF ( XXX10 <= -5. ) XXX10 = -5.
971 IF ( XXX10 > 0 ) THEN
975 X = (1.-16.*XXX10)**0.25
976 PSIM10 = 2.*ALOG((1.+X)/2.) + ALOG((1.+X*X)/2.) - 2.*ATAN(X) + 2.*ATAN(1.)
977 PSIH10 = 2.*ALOG((1.+X*X)/2.)
980 PSIX = ALOG(Z/Z0) - PSIM
981 PSIT = ALOG(Z/Z0H) - PSIH
983 PSIX2 = ALOG(2./Z0) - PSIM2
984 PSIT2 = ALOG(2./Z0H) - PSIH2
986 PSIX10 = ALOG(10./Z0) - PSIM10
987 PSIT10 = ALOG(10./Z0H) - PSIH10
989 U10 = U1 * (PSIX10/PSIX) ! u at 10 m [m/s]
990 V10 = V1 * (PSIX10/PSIX) ! v at 10 m [m/s]
992 ! TH2 = TS + (TA-TS)*(PSIT2/PSIT) ! potential temp at 2 m [K]
993 ! TH2 = TS + (TA-TS)*(PSIT2/PSIT) ! Fei: this seems to be temp (not potential) at 2 m [K]
994 !Fei: consistant with M-O theory
995 TH2 = TS + (TA-TS) *(CHS/CHS2)
997 Q2 = QS + (QA-QS)*(PSIT2/PSIT) ! humidity at 2 m [-]
999 ! TS = (LW/SIG_SI/0.88)**0.25 ! Radiative temperature [K]
1003 END SUBROUTINE urban
1004 !===============================================================================
1008 !===============================================================================
1009 SUBROUTINE mos(XXX,ALPHA,CD,B1,RIB,Z,Z0,UA,TA,TSF,RHO)
1011 ! XXX: z/L (requires iteration by Newton-Rapson method)
1012 ! B1: Stanton number
1013 ! PSIM: = PSIX of LSM
1014 ! PSIH: = PSIT of LSM
1018 REAL, PARAMETER :: CP=0.24
1019 REAL, INTENT(IN) :: B1, Z, Z0, UA, TA, TSF, RHO
1020 REAL, INTENT(OUT) :: ALPHA, CD
1021 REAL, INTENT(INOUT) :: XXX, RIB
1022 REAL :: XXX0, X, X0, FAIH, DPSIM, DPSIH
1023 REAL :: F, DF, XXXP, US, TS, AL, XKB, DD, PSIM, PSIH
1025 INTEGER, PARAMETER :: NEWT_END=10
1027 IF(RIB <= -15.) RIB=-15.
1033 IF(XXX >= 0.) XXX=-1.E-3
1037 X=(1.-16.*XXX)**0.25
1038 X0=(1.-16.*XXX0)**0.25
1040 PSIM=ALOG((Z+Z0)/Z0) &
1041 -ALOG((X+1.)**2.*(X**2.+1.)) &
1043 +ALOG((X+1.)**2.*(X0**2.+1.)) &
1045 FAIH=1./SQRT(1.-16.*XXX)
1046 PSIH=ALOG((Z+Z0)/Z0)+0.4*B1 &
1047 -2.*ALOG(SQRT(1.-16.*XXX)+1.) &
1048 +2.*ALOG(SQRT(1.-16.*XXX0)+1.)
1050 DPSIM=(1.-16.*XXX)**(-0.25)/XXX &
1051 -(1.-16.*XXX0)**(-0.25)/XXX
1052 DPSIH=1./SQRT(1.-16.*XXX)/XXX &
1053 -1./SQRT(1.-16.*XXX0)/XXX
1055 F=RIB*PSIM**2./PSIH-XXX
1057 DF=RIB*(2.*DPSIM*PSIM*PSIH-DPSIH*PSIM**2.) &
1062 IF(XXX <= -10.) XXX=-10.
1066 ELSE IF(RIB >= 0.142857) THEN
1069 PSIM=ALOG((Z+Z0)/Z0)+7.*XXX
1076 DD=-4.*RIB*7.*XKB*AL+(AL+XKB)**2.
1078 XXX=(AL+XKB-2.*RIB*7.*AL-SQRT(DD))/(2.*(RIB*7.**2-7.))
1079 PSIM=ALOG((Z+Z0)/Z0)+7.*MIN(XXX,0.714)
1085 IF(US <= 0.01) US=0.01
1086 TS=0.4*(TA-TSF)/PSIH ! T*
1088 CD=US*US/UA**2. ! CD
1089 ALPHA=RHO*CP*0.4*US/PSIH ! RHO*CP*CH*U
1093 !===============================================================================
1097 !===============================================================================
1098 SUBROUTINE louis79(ALPHA,CD,RIB,Z,Z0,UA,RHO)
1102 REAL, PARAMETER :: CP=0.24
1103 REAL, INTENT(IN) :: Z, Z0, UA, RHO
1104 REAL, INTENT(OUT) :: ALPHA, CD
1105 REAL, INTENT(INOUT) :: RIB
1106 REAL :: A2, XX, CH, CMB, CHB
1108 A2=(0.4/ALOG(Z/Z0))**2.
1110 IF(RIB <= -15.) RIB=-15.
1113 IF(RIB >= 0.142857) THEN
1116 XX=RIB*LOG(Z/Z0)/(1.-7.*RIB)
1118 CH=0.16/0.74/(LOG(Z/Z0)+7.*MIN(XX,0.714))**2.
1119 CD=0.16/(LOG(Z/Z0)+7.*MIN(XX,0.714))**2.
1121 CMB=7.4*A2*9.4*SQRT(Z/Z0)
1122 CHB=5.3*A2*9.4*SQRT(Z/Z0)
1123 CH=A2/0.74*(1.-9.4*RIB/(1.+CHB*SQRT(-RIB)))
1124 CD=A2*(1.-9.4*RIB/(1.+CHB*SQRT(-RIB)))
1130 END SUBROUTINE louis79
1131 !===============================================================================
1135 !===============================================================================
1136 SUBROUTINE louis82(ALPHA,CD,RIB,Z,Z0,UA,RHO)
1140 REAL, PARAMETER :: CP=0.24
1141 REAL, INTENT(IN) :: Z, Z0, UA, RHO
1142 REAL, INTENT(OUT) :: ALPHA, CD
1143 REAL, INTENT(INOUT) :: RIB
1144 REAL :: A2, FM, FH, CH, CHH
1146 A2=(0.4/ALOG(Z/Z0))**2.
1148 IF(RIB <= -15.) RIB=-15.
1151 FM=1./((1.+(2.*5.*RIB)/SQRT(1.+5.*RIB)))
1152 FH=1./(1.+(3.*5.*RIB)*SQRT(1.+5.*RIB))
1156 CHH=5.*3.*5.*A2*SQRT(Z/Z0)
1157 FM=1.-(2.*5.*RIB)/(1.+3.*5.*5.*A2*SQRT(Z/Z0+1.)*(-RIB))
1158 FH=1.-(3.*5.*RIB)/(1.+CHH*SQRT(-RIB))
1166 END SUBROUTINE louis82
1167 !===============================================================================
1171 !===============================================================================
1172 SUBROUTINE multi_layer(KM,BOUND,G0,CAP,AKS,TSL,DZ,DELT,TSLEND)
1176 REAL, INTENT(IN) :: G0, CAP, AKS, DELT,TSLEND
1178 INTEGER, INTENT(IN) :: KM, BOUND
1180 REAL, DIMENSION(KM), INTENT(IN) :: DZ
1182 REAL, DIMENSION(KM), INTENT(INOUT) :: TSL
1184 REAL, DIMENSION(KM) :: A, B, C, D, X, P, Q
1194 B(1) = CAP*DZ(1)/DELT &
1195 +2.*AKS/(DZ(1)+DZ(2))
1196 C(1) = -2.*AKS/(DZ(1)+DZ(2))
1197 D(1) = CAP*DZ(1)/DELT*TSL(1) + G0
1200 A(K) = -2.*AKS/(DZ(K-1)+DZ(K))
1201 B(K) = CAP*DZ(K)/DELT + 2.*AKS/(DZ(K-1)+DZ(K)) + 2.*AKS/(DZ(K)+DZ(K+1))
1202 C(K) = -2.*AKS/(DZ(K)+DZ(K+1))
1203 D(K) = CAP*DZ(K)/DELT*TSL(K)
1206 IF(BOUND == 1) THEN ! Flux=0
1207 A(KM) = -2.*AKS/(DZ(KM-1)+DZ(KM))
1208 B(KM) = CAP*DZ(KM)/DELT + 2.*AKS/(DZ(KM-1)+DZ(KM))
1210 D(KM) = CAP*DZ(KM)/DELT*TSL(KM)
1212 A(KM) = -2.*AKS/(DZ(KM-1)+DZ(KM))
1213 B(KM) = CAP*DZ(KM)/DELT + 2.*AKS/(DZ(KM-1)+DZ(KM)) + 2.*AKS/(DZ(KM)+DZEND)
1215 D(KM) = CAP*DZ(KM)/DELT*TSL(KM) + 2.*AKS*TSLEND/(DZ(KM)+DZEND)
1222 P(K) = -C(K)/(A(K)*P(K-1)+B(K))
1223 Q(K) = (-A(K)*Q(K-1)+D(K))/(A(K)*P(K-1)+B(K))
1229 X(K) = P(K)*X(K+1)+Q(K)
1237 END SUBROUTINE multi_layer
1238 !===============================================================================
1240 ! subroutine read_param
1242 !===============================================================================
1243 SUBROUTINE read_param(UTYPE, & ! in
1244 ZR,Z0C,Z0HC,ZDC,SVF,R,RW,HGT,CDS,AS,AH, & ! out
1245 CAPR,CAPB,CAPG,AKSR,AKSB,AKSG,ALBR,ALBB,ALBG, & ! out
1246 EPSR,EPSB,EPSG,Z0R,Z0B,Z0G,Z0HR,Z0HB,Z0HG, & ! out
1247 BETR,BETB,BETG,TRLEND,TBLEND,TGLEND, & ! out
1248 BOUNDR,BOUNDB,BOUNDG,CH_SCHEME,TS_SCHEME) ! out
1250 INTEGER, INTENT(IN) :: UTYPE
1252 REAL, INTENT(OUT) :: ZR,Z0C,Z0HC,ZDC,SVF,R,RW,HGT,CDS,AS,AH, &
1253 CAPR,CAPB,CAPG,AKSR,AKSB,AKSG,ALBR,ALBB,ALBG, &
1254 EPSR,EPSB,EPSG,Z0R,Z0B,Z0G,Z0HR,Z0HB,Z0HG, &
1255 BETR,BETB,BETG,TRLEND,TBLEND,TGLEND
1257 INTEGER, INTENT(OUT) :: BOUNDR,BOUNDB,BOUNDG,CH_SCHEME,TS_SCHEME
1261 Z0HC= Z0HC_TBL(UTYPE)
1270 BETR= BETR_TBL(UTYPE)
1271 BETB= BETB_TBL(UTYPE)
1272 BETG= BETG_TBL(UTYPE)
1274 !m FRC_URB= FRC_URB_TBL(UTYPE)
1300 CH_SCHEME = CH_SCHEME_DATA
1301 TS_SCHEME = TS_SCHEME_DATA
1304 END SUBROUTINE read_param
1305 !===============================================================================
1307 ! subroutine urban_param_init: Read parameters from urban_param.tbl
1309 !===============================================================================
1310 SUBROUTINE urban_param_init(DZR,DZB,DZG,num_soil_layers &
1312 ! num_roof_layers,num_wall_layers,num_road_layers)
1316 INTEGER, INTENT(IN) :: num_soil_layers
1318 ! REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR
1319 ! REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB
1320 ! REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG
1321 REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR
1322 REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB
1323 REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG
1325 INTEGER :: INDEX, LC, K
1326 INTEGER :: IOSTATUS, ALLOCATE_STATUS
1327 INTEGER :: num_roof_layers
1328 INTEGER :: num_wall_layers
1329 INTEGER :: num_road_layers
1331 REAL :: DHGT, HGT, VFWS, VFGS
1334 FILE='urban_param.tbl', &
1335 ACCESS='SEQUENTIAL', &
1338 POSITION='REWIND', &
1341 IF (IOSTATUS > 0) STOP 'ERROR OPEN urban_param.tbl'
1344 READ(11,'(A4)') LU_DATA_TYPE
1347 ALLOCATE( ZR_TBL(ICATE), stat=allocate_status )
1348 if(allocate_status == 0) THEN
1349 ALLOCATE( Z0C_TBL(ICATE), stat=allocate_status )
1350 if(allocate_status /= 0) stop 'error allocate Z0C_TBL in urban_param_init'
1351 IF( .NOT. ALLOCATED( Z0HC_TBL ) ) &
1352 ALLOCATE( Z0HC_TBL(ICATE), stat=allocate_status )
1353 if(allocate_status /= 0) stop 'error allocate Z0HC_TBL in urban_param_init'
1354 IF( .NOT. ALLOCATED( ZDC_TBL ) ) &
1355 ALLOCATE( ZDC_TBL(ICATE), stat=allocate_status )
1356 if(allocate_status /= 0) stop 'error allocate ZDC_TBL in urban_param_init'
1357 IF( .NOT. ALLOCATED( SVF_TBL ) ) &
1358 ALLOCATE( SVF_TBL(ICATE), stat=allocate_status )
1359 if(allocate_status /= 0) stop 'error allocate SVF_TBL in urban_param_init'
1360 IF( .NOT. ALLOCATED( R_TBL ) ) &
1361 ALLOCATE( R_TBL(ICATE), stat=allocate_status )
1362 if(allocate_status /= 0) stop 'error allocate R_TBL in urban_param_init'
1363 IF( .NOT. ALLOCATED( RW_TBL ) ) &
1364 ALLOCATE( RW_TBL(ICATE), stat=allocate_status )
1365 if(allocate_status /= 0) stop 'error allocate RW_TBL in urban_param_init'
1366 IF( .NOT. ALLOCATED( HGT_TBL ) ) &
1367 ALLOCATE( HGT_TBL(ICATE), stat=allocate_status )
1368 if(allocate_status /= 0) stop 'error allocate HGT_TBL in urban_param_init'
1369 IF( .NOT. ALLOCATED( CDS_TBL ) ) &
1370 ALLOCATE( CDS_TBL(ICATE), stat=allocate_status )
1371 if(allocate_status /= 0) stop 'error allocate CDS_TBL in urban_param_init'
1372 IF( .NOT. ALLOCATED( AS_TBL ) ) &
1373 ALLOCATE( AS_TBL(ICATE), stat=allocate_status )
1374 if(allocate_status /= 0) stop 'error allocate AS_TBL in urban_param_init'
1375 IF( .NOT. ALLOCATED( AH_TBL ) ) &
1376 ALLOCATE( AH_TBL(ICATE), stat=allocate_status )
1377 if(allocate_status /= 0) stop 'error allocate AH_TBL in urban_param_init'
1378 IF( .NOT. ALLOCATED( BETR_TBL ) ) &
1379 ALLOCATE( BETR_TBL(ICATE), stat=allocate_status )
1380 if(allocate_status /= 0) stop 'error allocate BETR_TBL in urban_param_init'
1381 IF( .NOT. ALLOCATED( BETB_TBL ) ) &
1382 ALLOCATE( BETB_TBL(ICATE), stat=allocate_status )
1383 if(allocate_status /= 0) stop 'error allocate BETB_TBL in urban_param_init'
1384 IF( .NOT. ALLOCATED( BETG_TBL ) ) &
1385 ALLOCATE( BETG_TBL(ICATE), stat=allocate_status )
1386 if(allocate_status /= 0) stop 'error allocate BETG_TBL in urban_param_init'
1387 ALLOCATE( FRC_URB_TBL(ICATE), stat=allocate_status )
1388 if(allocate_status /= 0) stop 'error allocate FRC_URB_TBL in urban_param_init'
1412 READ(11,*) CAPR_DATA
1414 READ(11,*) CAPB_DATA
1416 READ(11,*) CAPG_DATA
1418 READ(11,*) AKSR_DATA
1420 READ(11,*) AKSB_DATA
1422 READ(11,*) AKSG_DATA
1424 READ(11,*) ALBR_DATA
1426 READ(11,*) ALBB_DATA
1428 READ(11,*) ALBG_DATA
1430 READ(11,*) EPSR_DATA
1432 READ(11,*) EPSB_DATA
1434 READ(11,*) EPSG_DATA
1442 READ(11,*) Z0HR_DATA
1444 READ(11,*) Z0HB_DATA
1446 READ(11,*) Z0HG_DATA
1448 ! READ(11,*) num_roof_layers
1451 ! READ(11,*) num_wall_layers
1454 ! READ(11,*) num_road_layers
1457 num_roof_layers = num_soil_layers
1458 num_wall_layers = num_soil_layers
1459 num_road_layers = num_soil_layers
1461 DO K=1,num_roof_layers
1466 DO K=1,num_wall_layers
1471 DO K=1,num_road_layers
1477 READ(11,*) BOUNDR_DATA
1479 READ(11,*) BOUNDB_DATA
1481 READ(11,*) BOUNDG_DATA
1483 READ(11,*) TRLEND_DATA
1485 READ(11,*) TBLEND_DATA
1487 READ(11,*) TGLEND_DATA
1489 READ(11,*) CH_SCHEME_DATA
1491 READ(11,*) TS_SCHEME_DATA
1492 ! Miao, 2007/01/17, cal. ah
1495 if(ahoption==1) then
1497 READ(11,*) (ahdiuprf(k),k=1,24)
1502 ! Calculate Sky View Factor
1505 DHGT=HGT_TBL(LC)/100.
1508 HGT=HGT_TBL(LC)-DHGT/2.
1511 VFWS=VFWS+0.25*(1.-HGT/SQRT(HGT**2.+RW_TBL(LC)**2.))
1517 VFGS=1.-2.*VFWS*HGT_TBL(LC)/RW_TBL(LC)
1521 END SUBROUTINE urban_param_init
1522 !===========================================================================
1524 ! subroutine urban_var_init: initialization of urban state variables
1526 !===========================================================================
1527 SUBROUTINE urban_var_init(TSURFACE0_URB,TLAYER0_URB,TDEEP0_URB,IVGTYP, & ! in
1528 ims,ime,jms,jme,num_soil_layers, & ! in
1529 ! num_roof_layers,num_wall_layers,num_road_layers, & ! in
1531 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & ! inout
1532 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & ! inout
1533 TRL_URB3D,TBL_URB3D,TGL_URB3D, & ! inout
1534 SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D, & ! inout
1535 TS_URB2D, FRC_URB2D, UTYPE_URB2D) ! inout
1538 INTEGER, INTENT(IN) :: ims,ime,jms,jme,num_soil_layers
1539 ! INTEGER, INTENT(IN) :: num_roof_layers, num_wall_layers, num_road_layers
1541 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: TSURFACE0_URB
1542 REAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(IN) :: TLAYER0_URB
1543 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: TDEEP0_URB
1544 INTEGER, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: IVGTYP
1545 LOGICAL , INTENT(IN) :: restart
1547 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D
1548 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D
1549 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D
1550 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D
1551 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D
1552 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D
1553 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D
1554 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D
1555 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D
1557 ! REAL, DIMENSION(ims:ime, 1:num_roof_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D
1558 ! REAL, DIMENSION(ims:ime, 1:num_wall_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D
1559 ! REAL, DIMENSION(ims:ime, 1:num_road_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D
1560 REAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D
1561 REAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D
1562 REAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D
1564 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D
1565 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D
1566 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D
1567 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D
1568 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D
1570 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D
1571 INTEGER, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D
1572 INTEGER :: UTYPE_URB
1579 ! XXXR_URB2D(I,J)=0.
1580 ! XXXB_URB2D(I,J)=0.
1581 ! XXXG_URB2D(I,J)=0.
1582 ! XXXC_URB2D(I,J)=0.
1592 IF( IVGTYP(I,J) == 1) THEN
1593 UTYPE_URB2D(I,J) = 2 ! for default. high-density
1594 UTYPE_URB = UTYPE_URB2D(I,J) ! for default. high-density
1595 FRC_URB2D(I,J) = FRC_URB_TBL(UTYPE_URB)
1597 IF( IVGTYP(I,J) == 31) THEN
1598 UTYPE_URB2D(I,J) = 3 ! low-density residential
1599 UTYPE_URB = UTYPE_URB2D(I,J) ! low-density residential
1600 FRC_URB2D(I,J) = FRC_URB_TBL(UTYPE_URB)
1602 IF( IVGTYP(I,J) == 32) THEN
1603 UTYPE_URB2D(I,J) = 2 ! high-density
1604 UTYPE_URB = UTYPE_URB2D(I,J) ! high-density
1605 FRC_URB2D(I,J) = FRC_URB_TBL(UTYPE_URB)
1607 IF( IVGTYP(I,J) == 33) THEN
1608 UTYPE_URB2D(I,J) = 1 ! Commercial/Industrial/Transportation
1609 UTYPE_URB = UTYPE_URB2D(I,J) ! Commercial/Industrial/Transportation
1610 FRC_URB2D(I,J) = FRC_URB_TBL(UTYPE_URB)
1616 IF (.not.restart) THEN
1624 TC_URB2D(I,J)=TSURFACE0_URB(I,J)+0.
1625 TR_URB2D(I,J)=TSURFACE0_URB(I,J)+0.
1626 TB_URB2D(I,J)=TSURFACE0_URB(I,J)+0.
1627 TG_URB2D(I,J)=TSURFACE0_URB(I,J)+0.
1629 TS_URB2D(I,J)=TSURFACE0_URB(I,J)+0.
1631 ! DO K=1,num_roof_layers
1632 ! DO K=1,num_soil_layers
1633 ! TRL_URB3D(I,1,J)=TLAYER0_URB(I,1,J)+0.
1634 ! TRL_URB3D(I,2,J)=TLAYER0_URB(I,2,J)+0.
1635 ! TRL_URB3D(I,3,J)=TLAYER0_URB(I,3,J)+0.
1636 ! TRL_URB3D(I,4,J)=TLAYER0_URB(I,4,J)+0.
1638 TRL_URB3D(I,1,J)=TLAYER0_URB(I,1,J)+0.
1639 TRL_URB3D(I,2,J)=0.5*(TLAYER0_URB(I,1,J)+TLAYER0_URB(I,2,J))
1640 TRL_URB3D(I,3,J)=TLAYER0_URB(I,2,J)+0.
1641 TRL_URB3D(I,4,J)=TLAYER0_URB(I,2,J)+(TLAYER0_URB(I,3,J)-TLAYER0_URB(I,2,J))*0.29
1644 ! DO K=1,num_wall_layers
1645 ! DO K=1,num_soil_layers
1646 !m TBL_URB3D(I,1,J)=TLAYER0_URB(I,1,J)+0.
1647 !m TBL_URB3D(I,2,J)=TLAYER0_URB(I,2,J)+0.
1648 !m TBL_URB3D(I,3,J)=TLAYER0_URB(I,3,J)+0.
1649 !m TBL_URB3D(I,4,J)=TLAYER0_URB(I,4,J)+0.
1651 TBL_URB3D(I,1,J)=TLAYER0_URB(I,1,J)+0.
1652 TBL_URB3D(I,2,J)=0.5*(TLAYER0_URB(I,1,J)+TLAYER0_URB(I,2,J))
1653 TBL_URB3D(I,3,J)=TLAYER0_URB(I,2,J)+0.
1654 TBL_URB3D(I,4,J)=TLAYER0_URB(I,2,J)+(TLAYER0_URB(I,3,J)-TLAYER0_URB(I,2,J))*0.29
1657 ! DO K=1,num_road_layers
1658 DO K=1,num_soil_layers
1659 TGL_URB3D(I,K,J)=TLAYER0_URB(I,K,J)+0.
1667 END SUBROUTINE urban_var_init
1668 !===========================================================================
1672 !===========================================================================
1673 SUBROUTINE force_restore(CAP,AKS,DELT,S,R,H,LE,TSLEND,TSP,TS)
1675 REAL, INTENT(IN) :: CAP,AKS,DELT,S,R,H,LE,TSLEND,TSP
1676 REAL, INTENT(OUT) :: TS
1679 C2=24.*3600./2./3.14159
1680 C1=SQRT(0.5*C2*CAP*AKS)
1682 TS = TSP + DELT*( (S+R-H-LE)/C1 -(TSP-TSLEND)/C2 )
1684 END SUBROUTINE force_restore
1685 !===========================================================================
1687 ! bisection (not used)
1689 !==============================================================================
1690 SUBROUTINE bisection(TSP,PS,S,EPS,RX,SIG,RHO,CP,CH,UA,QA,TA,EL,BET,AKS,TSL,DZ,TS)
1692 REAL, INTENT(IN) :: TSP,PS,S,EPS,RX,SIG,RHO,CP,CH,UA,QA,TA,EL,BET,AKS,TSL,DZ
1693 REAL, INTENT(OUT) :: TS
1694 REAL :: ES,QS0,R,H,ELE,G0,F1,F
1701 ES=6.11*EXP( (2.5*10.**6./461.51)*(TS1-273.15)/(273.15*TS1) )
1702 QS0=0.622*ES/(PS-0.378*ES)
1703 R=EPS*(RX-SIG*(TS1**4.)/60.)
1704 H=RHO*CP*CH*UA*(TS1-TA)*100.
1705 ELE=RHO*EL*CH*UA*BET*(QS0-QA)*100.
1706 G0=AKS*(TS1-TSL)/(DZ/2.)
1707 F1= S + R - H - ELE - G0
1711 ES=6.11*EXP( (2.5*10.**6./461.51)*(TS-273.15)/(273.15*TS) )
1712 QS0=0.622*ES/(PS-0.378*ES)
1713 R=EPS*(RX-SIG*(TS**4.)/60.)
1714 H=RHO*CP*CH*UA*(TS-TA)*100.
1715 ELE=RHO*EL*CH*UA*BET*(QS0-QA)*100.
1716 G0=AKS*(TS-TSL)/(DZ/2.)
1717 F = S + R - H - ELE - G0
1719 IF (F1*F > 0.0) THEN
1728 END SUBROUTINE bisection
1729 !===========================================================================
1730 END MODULE module_sf_urban