PageRenderTime 73ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 1ms

/wrfv2_fire/phys/module_sf_urban.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 2421 lines | 1481 code | 375 blank | 565 comment | 237 complexity | da74e6c6f59556f308ac988182e383d8 MD5 | raw file
Possible License(s): AGPL-1.0

Large files files are truncated, but you can click here to view the full file

  1. MODULE module_sf_urban
  2. !===============================================================================
  3. ! Single-Layer Urban Canopy Model for WRF Noah-LSM
  4. ! Original Version: 2002/11/06 by Hiroyuki Kusaka
  5. ! Last Update: 2006/08/24 by Fei Chen and Mukul Tewari (NCAR/RAL)
  6. !===============================================================================
  7. CHARACTER(LEN=4) :: LU_DATA_TYPE
  8. INTEGER :: ICATE
  9. REAL, ALLOCATABLE, DIMENSION(:) :: ZR_TBL
  10. REAL, ALLOCATABLE, DIMENSION(:) :: Z0C_TBL
  11. REAL, ALLOCATABLE, DIMENSION(:) :: Z0HC_TBL
  12. REAL, ALLOCATABLE, DIMENSION(:) :: ZDC_TBL
  13. REAL, ALLOCATABLE, DIMENSION(:) :: SVF_TBL
  14. REAL, ALLOCATABLE, DIMENSION(:) :: R_TBL
  15. REAL, ALLOCATABLE, DIMENSION(:) :: RW_TBL
  16. REAL, ALLOCATABLE, DIMENSION(:) :: HGT_TBL
  17. REAL, ALLOCATABLE, DIMENSION(:) :: AH_TBL
  18. REAL, ALLOCATABLE, DIMENSION(:) :: BETR_TBL
  19. REAL, ALLOCATABLE, DIMENSION(:) :: BETB_TBL
  20. REAL, ALLOCATABLE, DIMENSION(:) :: BETG_TBL
  21. REAL, ALLOCATABLE, DIMENSION(:) :: FRC_URB_TBL
  22. REAL, ALLOCATABLE, DIMENSION(:) :: COP_TBL
  23. REAL, ALLOCATABLE, DIMENSION(:) :: PWIN_TBL
  24. REAL, ALLOCATABLE, DIMENSION(:) :: BETA_TBL
  25. INTEGER, ALLOCATABLE, DIMENSION(:) :: SW_COND_TBL
  26. REAL, ALLOCATABLE, DIMENSION(:) :: TIME_ON_TBL
  27. REAL, ALLOCATABLE, DIMENSION(:) :: TIME_OFF_TBL
  28. REAL, ALLOCATABLE, DIMENSION(:) :: TARGTEMP_TBL
  29. REAL, ALLOCATABLE, DIMENSION(:) :: GAPTEMP_TBL
  30. REAL, ALLOCATABLE, DIMENSION(:) :: TARGHUM_TBL
  31. REAL, ALLOCATABLE, DIMENSION(:) :: GAPHUM_TBL
  32. REAL, ALLOCATABLE, DIMENSION(:) :: PERFLO_TBL
  33. REAL, ALLOCATABLE, DIMENSION(:) :: HSESF_TBL
  34. REAL, ALLOCATABLE, DIMENSION(:) :: CAPR_TBL, CAPB_TBL, CAPG_TBL
  35. REAL, ALLOCATABLE, DIMENSION(:) :: AKSR_TBL, AKSB_TBL, AKSG_TBL
  36. REAL, ALLOCATABLE, DIMENSION(:) :: ALBR_TBL, ALBB_TBL, ALBG_TBL
  37. REAL, ALLOCATABLE, DIMENSION(:) :: EPSR_TBL, EPSB_TBL, EPSG_TBL
  38. REAL, ALLOCATABLE, DIMENSION(:) :: Z0R_TBL, Z0B_TBL, Z0G_TBL
  39. REAL, ALLOCATABLE, DIMENSION(:) :: SIGMA_ZED_TBL
  40. REAL, ALLOCATABLE, DIMENSION(:) :: Z0HB_TBL, Z0HG_TBL
  41. REAL, ALLOCATABLE, DIMENSION(:) :: TRLEND_TBL, TBLEND_TBL, TGLEND_TBL
  42. REAL, ALLOCATABLE, DIMENSION(:) :: AKANDA_URBAN_TBL
  43. !for BEP
  44. ! MAXDIRS :: The maximum number of street directions we're allowed to define
  45. INTEGER, PARAMETER :: MAXDIRS = 3
  46. ! MAXHGTS :: The maximum number of building height bins we're allowed to define
  47. INTEGER, PARAMETER :: MAXHGTS = 50
  48. INTEGER, ALLOCATABLE, DIMENSION(:) :: NUMDIR_TBL
  49. REAL, ALLOCATABLE, DIMENSION(:,:) :: STREET_DIRECTION_TBL
  50. REAL, ALLOCATABLE, DIMENSION(:,:) :: STREET_WIDTH_TBL
  51. REAL, ALLOCATABLE, DIMENSION(:,:) :: BUILDING_WIDTH_TBL
  52. INTEGER, ALLOCATABLE, DIMENSION(:) :: NUMHGT_TBL
  53. REAL, ALLOCATABLE, DIMENSION(:,:) :: HEIGHT_BIN_TBL
  54. REAL, ALLOCATABLE, DIMENSION(:,:) :: HPERCENT_BIN_TBL
  55. !end BEP
  56. INTEGER :: BOUNDR_DATA,BOUNDB_DATA,BOUNDG_DATA
  57. INTEGER :: CH_SCHEME_DATA, TS_SCHEME_DATA
  58. INTEGER :: ahoption ! Miao, 2007/01/17, cal. ah
  59. REAL, DIMENSION(1:24) :: ahdiuprf ! ah diurnal profile, tloc: 1-24
  60. REAL, DIMENSION(1:24) :: hsequip_tbl
  61. INTEGER :: allocate_status
  62. ! INTEGER :: num_roof_layers
  63. ! INTEGER :: num_wall_layers
  64. ! INTEGER :: num_road_layers
  65. CONTAINS
  66. !===============================================================================
  67. !
  68. ! Author:
  69. ! Hiroyuki KUSAKA, PhD
  70. ! University of Tsukuba, JAPAN
  71. ! (CRIEPI, NCAR/MMM visiting scientist, 2002-2004)
  72. ! kusaka@ccs.tsukuba.ac.jp
  73. !
  74. ! Co-Researchers:
  75. ! Fei CHEN, PhD
  76. ! NCAR/RAP feichen@ucar.edu
  77. ! Mukul TEWARI, PhD
  78. ! NCAR/RAP mukul@ucar.edu
  79. !
  80. ! Purpose:
  81. ! Calculate surface temeprature, fluxes, canopy air temperature, and canopy wind
  82. !
  83. ! Subroutines:
  84. ! module_sf_urban
  85. ! |- urban
  86. ! |- read_param
  87. ! |- mos or jurges
  88. ! |- multi_layer or force_restore
  89. ! |- urban_param_init <-- URBPARM.TBL
  90. ! |- urban_var_init
  91. !
  92. ! Input Data from WRF [MKS unit]:
  93. !
  94. ! UTYPE [-] : Urban type. 1=Commercial/Industrial; 2=High-intensity residential;
  95. ! : 3=low-intensity residential
  96. ! TA [K] : Potential temperature at 1st wrf level (absolute temp)
  97. ! QA [kg/kg] : Mixing ratio at 1st atmospheric level
  98. ! UA [m/s] : Wind speed at 1st atmospheric level
  99. ! SSG [W/m/m] : Short wave downward radiation at a flat surface
  100. ! Note this is the total of direct and diffusive solar
  101. ! downward radiation. If without two components, the
  102. ! single solar downward can be used instead.
  103. ! SSG = SSGD + SSGQ
  104. ! LSOLAR [-] : Indicating the input type of solar downward radiation
  105. ! True: both direct and diffusive solar radiation
  106. ! are available
  107. ! False: only total downward ridiation is available.
  108. ! SSGD [W/m/m] : Direct solar radiation at a flat surface
  109. ! if SSGD is not available, one can assume a ratio SRATIO
  110. ! (e.g., 0.7), so that SSGD = SRATIO*SSG
  111. ! SSGQ [W/m/m] : Diffuse solar radiation at a flat surface
  112. ! If SSGQ is not available, SSGQ = SSG - SSGD
  113. ! LLG [W/m/m] : Long wave downward radiation at a flat surface
  114. ! RAIN [mm/h] : Precipitation
  115. ! RHOO [kg/m/m/m] : Air density
  116. ! ZA [m] : First atmospheric level
  117. ! as a lowest boundary condition
  118. ! DECLIN [rad] : solar declination
  119. ! COSZ : = sin(fai)*sin(del)+cos(fai)*cos(del)*cos(omg)
  120. ! OMG [rad] : solar hour angle
  121. ! XLAT [deg] : latitude
  122. ! DELT [sec] : Time step
  123. ! ZNT [m] : Roughnes length
  124. !
  125. ! Output Data to WRF [MKS unit]:
  126. !
  127. ! TS [K] : Surface potential temperature (absolute temp)
  128. ! QS [-] : Surface humidity
  129. !
  130. ! SH [W/m/m/] : Sensible heat flux, = FLXTH*RHOO*CPP
  131. ! LH [W/m/m] : Latent heat flux, = FLXHUM*RHOO*ELL
  132. ! LH_INEMATIC [kg/m/m/sec]: Moisture Kinematic flux, = FLXHUM*RHOO
  133. ! SW [W/m/m] : Upward shortwave radiation flux,
  134. ! = SSG-SNET*697.7*60. (697.7*60.=100.*100.*4.186)
  135. ! ALB [-] : Time-varying albedo
  136. ! LW [W/m/m] : Upward longwave radiation flux,
  137. ! = LNET*697.7*60.-LLG
  138. ! G [W/m/m] : Heat Flux into the Ground
  139. ! RN [W/m/m] : Net radiation
  140. !
  141. ! PSIM [-] : Diagnostic similarity stability function for momentum
  142. ! PSIH [-] : Diagnostic similarity stability function for heat
  143. !
  144. ! TC [K] : Diagnostic canopy air temperature
  145. ! QC [-] : Diagnostic canopy humidity
  146. !
  147. ! TH2 [K] : Diagnostic potential temperature at 2 m
  148. ! Q2 [-] : Diagnostic humidity at 2 m
  149. ! U10 [m/s] : Diagnostic u wind component at 10 m
  150. ! V10 [m/s] : Diagnostic v wind component at 10 m
  151. !
  152. ! CHS, CHS2 [m/s] : CH*U at ZA, CH*U at 2 m (not used)
  153. !
  154. ! Important parameters:
  155. !
  156. ! Morphology of the urban canyon:
  157. ! These parameters assigned in the URBPARM.TBL
  158. !
  159. ! ZR [m] : roof level (building height)
  160. ! SIGMA_ZED [m] : Standard Deviation of roof height
  161. ! ROOF_WIDTH [m] : roof (i.e., building) width
  162. ! ROAD_WIDTH [m] : road width
  163. !
  164. ! Parameters derived from the morphological terms above.
  165. ! These parameters are computed in the code.
  166. !
  167. ! HGT [-] : normalized building height
  168. ! SVF [-] : sky view factor
  169. ! R [-] : Normalized roof width (a.k.a. "building coverage ratio")
  170. ! RW [-] : = 1 - R
  171. ! Z0C [m] : Roughness length above canyon for momentum (1/10 of ZR)
  172. ! Z0HC [m] : Roughness length above canyon for heat (1/10 of Z0C)
  173. ! ZDC [m] : Zero plane displacement height (1/5 of ZR)
  174. !
  175. ! Following parameter are assigned in run/URBPARM.TBL
  176. !
  177. ! AH [ W m{-2} ] : anthropogenic heat ( W m{-2} in the table, converted internally to cal cm{-2} )
  178. ! CAPR[ J m{-3} K{-1} ] : heat capacity of roof ( units converted in code to [ cal cm{-3} deg{-1} ] )
  179. ! CAPB[ J m{-3} K{-1} ] : heat capacity of building wall ( units converted in code to [ cal cm{-3} deg{-1} ] )
  180. ! CAPG[ J m{-3} K{-1} ] : heat capacity of road ( units converted in code to [ cal cm{-3} deg{-1} ] )
  181. ! AKSR [ J m{-1} s{-1} K{-1} ] : thermal conductivity of roof ( units converted in code to [ cal cm{-1} s{-1} deg{-1} ] )
  182. ! AKSB [ J m{-1} s{-1} K{-1} ] : thermal conductivity of building wall ( units converted in code to [ cal cm{-1} s{-1} deg{-1} ] )
  183. ! AKSG [ J m{-1} s{-1} K{-1} ] : thermal conductivity of road ( units converted in code to [ cal cm{-1} s{-1} deg{-1} ] )
  184. ! ALBR [-] : surface albedo of roof
  185. ! ALBB [-] : surface albedo of building wall
  186. ! ALBG [-] : surface albedo of road
  187. ! EPSR [-] : surface emissivity of roof
  188. ! EPSB [-] : surface emissivity of building wall
  189. ! EPSG [-] : surface emissivity of road
  190. ! Z0B [m] : roughness length for momentum of building wall (only for CH_SCHEME = 1)
  191. ! Z0G [m] : roughness length for momentum of road (only for CH_SCHEME = 1)
  192. ! Z0HB [m] : roughness length for heat of building wall (only for CH_SCHEME = 1)
  193. ! Z0HG [m] : roughness length for heat of road
  194. ! num_roof_layers : number of layers within roof
  195. ! num_wall_layers : number of layers within building walls
  196. ! num_road_layers : number of layers within below road surface
  197. ! NOTE: for now, these layers are defined as same as the number of soil layers in namelist.input
  198. ! DZR [cm] : thickness of each roof layer
  199. ! DZB [cm] : thickness of each building wall layer
  200. ! DZG [cm] : thickness of each ground layer
  201. ! BOUNDR [integer 1 or 2] : Boundary Condition for Roof Layer Temp [1: Zero-Flux, 2: T = Constant]
  202. ! BOUNDB [integer 1 or 2] : Boundary Condition for Building Wall Layer Temp [1: Zero-Flux, 2: T = Constant]
  203. ! BOUNDG [integer 1 or 2] : Boundary Condition for Road Layer Temp [1: Zero-Flux, 2: T = Constant]
  204. ! TRLEND [K] : lower boundary condition of roof temperature
  205. ! TBLEND [K] : lower boundary condition of building temperature
  206. ! TGLEND [K] : lower boundary condition of ground temperature
  207. ! CH_SCHEME [integer 1 or 2] : Sfc exchange scheme used for building wall and road
  208. ! [1: M-O Similarity Theory, 2: Empirical Form (recommend)]
  209. ! TS_SCHEME [integer 1 or 2] : Scheme for computing surface temperature (for roof, wall, and road)
  210. ! [1: 4-layer model, 2: Force-Restore method]
  211. !
  212. !for BEP
  213. ! numdir [ - ] : Number of street directions defined for a particular urban category
  214. ! street_direction [ deg ] : Direction of streets for a particular urban category and a particular street direction
  215. ! street_width [ m ] : Width of street for a particular urban category and a particular street direction
  216. ! building_width [ m ] : Width of buildings for a particular urban category and a particular street direction
  217. ! numhgt [ - ] : Number of building height levels defined for a particular urban category
  218. ! height_bin [ m ] : Building height bins defined for a particular urban category.
  219. ! hpercent_bin [ % ] : Percentage of a particular urban category populated by buildings of particular height bins
  220. !end BEP
  221. ! Moved from URBPARM.TBL
  222. !
  223. ! BETR [-] : minimum moisture availability of roof
  224. ! BETB [-] : minimum moisture availability of building wall
  225. ! BETG [-] : minimum moisture availability of road
  226. ! Z0R [m] : roughness length for momentum of roof
  227. ! Z0HB [m] : roughness length for heat of building wall (only for CH_SCHEME = 1)
  228. ! Z0HG [m] : roughness length for heat of road
  229. ! num_roof_layers : number of layers within roof
  230. ! num_wall_layers : number of layers within building walls
  231. ! num_road_layers : number of layers within below road surface
  232. ! NOTE: for now, these layers are defined as same as the number of soil layers in namelist.input
  233. !
  234. ! References:
  235. ! Kusaka and Kimura (2004) J.Appl.Meteor., vol.43, p1899-1910
  236. ! Kusaka and Kimura (2004) J.Meteor.Soc.Japan, vol.82, p45-65
  237. ! Kusaka et al. (2001) Bound.-Layer Meteor., vol.101, p329-358
  238. !
  239. ! History:
  240. ! 2006/06 modified by H. Kusaka (Univ. Tsukuba), M. Tewari
  241. ! 2005/10/26, modified by Fei Chen, Mukul Tewari
  242. ! 2003/07/21 WRF , modified by H. Kusaka of CRIEPI (NCAR/MMM)
  243. ! 2001/08/26 PhD , modified by H. Kusaka of CRIEPI (Univ.Tsukuba)
  244. ! 1999/08/25 LCM , developed by H. Kusaka of CRIEPI (Univ.Tsukuba)
  245. !
  246. !===============================================================================
  247. !
  248. ! subroutine urban:
  249. !
  250. !===============================================================================
  251. SUBROUTINE urban(LSOLAR, & ! L
  252. num_roof_layers,num_wall_layers,num_road_layers, & ! I
  253. DZR,DZB,DZG, & ! I
  254. UTYPE,TA,QA,UA,U1,V1,SSG,SSGD,SSGQ,LLG,RAIN,RHOO, & ! I
  255. ZA,DECLIN,COSZ,OMG,XLAT,DELT,ZNT, & ! I
  256. CHS, CHS2, & ! I
  257. TR, TB, TG, TC, QC, UC, & ! H
  258. TRL,TBL,TGL, & ! H
  259. XXXR, XXXB, XXXG, XXXC, & ! H
  260. TS,QS,SH,LH,LH_KINEMATIC, & ! O
  261. SW,ALB,LW,G,RN,PSIM,PSIH, & ! O
  262. GZ1OZ0, & ! O
  263. CMR_URB,CHR_URB,CMC_URB,CHC_URB, & ! I/O
  264. U10,V10,TH2,Q2,UST & ! O
  265. )
  266. IMPLICIT NONE
  267. REAL, PARAMETER :: CP=0.24 ! heat capacity of dry air [cgs unit]
  268. REAL, PARAMETER :: EL=583. ! latent heat of vaporation [cgs unit]
  269. REAL, PARAMETER :: SIG=8.17E-11 ! stefun bolzman constant [cgs unit]
  270. REAL, PARAMETER :: SIG_SI=5.67E-8 ! [MKS unit]
  271. REAL, PARAMETER :: AK=0.4 ! kalman const. [-]
  272. REAL, PARAMETER :: PI=3.14159 ! pi [-]
  273. REAL, PARAMETER :: TETENA=7.5 ! const. of Tetens Equation [-]
  274. REAL, PARAMETER :: TETENB=237.3 ! const. of Tetens Equation [-]
  275. REAL, PARAMETER :: SRATIO=0.75 ! ratio between direct/total solar [-]
  276. REAL, PARAMETER :: CPP=1004.5 ! heat capacity of dry air [J/K/kg]
  277. REAL, PARAMETER :: ELL=2.442E+06 ! latent heat of vaporization [J/kg]
  278. REAL, PARAMETER :: XKA=2.4E-5
  279. !-------------------------------------------------------------------------------
  280. ! C: configuration variables
  281. !-------------------------------------------------------------------------------
  282. LOGICAL, INTENT(IN) :: LSOLAR ! logical [true=both, false=SSG only]
  283. ! The following variables are also model configuration variables, but are
  284. ! defined in the URBAN.TBL and in the contains statement in the top of
  285. ! the module_urban_init, so we should not declare them here.
  286. INTEGER, INTENT(IN) :: num_roof_layers
  287. INTEGER, INTENT(IN) :: num_wall_layers
  288. INTEGER, INTENT(IN) :: num_road_layers
  289. REAL, INTENT(IN), DIMENSION(1:num_roof_layers) :: DZR ! grid interval of roof layers [cm]
  290. REAL, INTENT(IN), DIMENSION(1:num_wall_layers) :: DZB ! grid interval of wall layers [cm]
  291. REAL, INTENT(IN), DIMENSION(1:num_road_layers) :: DZG ! grid interval of road layers [cm]
  292. !-------------------------------------------------------------------------------
  293. ! I: input variables from LSM to Urban
  294. !-------------------------------------------------------------------------------
  295. INTEGER, INTENT(IN) :: UTYPE ! urban type [1=Commercial/Industrial, 2=High-intensity residential,
  296. ! 3=low-intensity residential]
  297. REAL, INTENT(IN) :: TA ! potential temp at 1st atmospheric level [K]
  298. REAL, INTENT(IN) :: QA ! mixing ratio at 1st atmospheric level [kg/kg]
  299. REAL, INTENT(IN) :: UA ! wind speed at 1st atmospheric level [m/s]
  300. REAL, INTENT(IN) :: U1 ! u at 1st atmospheric level [m/s]
  301. REAL, INTENT(IN) :: V1 ! v at 1st atmospheric level [m/s]
  302. REAL, INTENT(IN) :: SSG ! downward total short wave radiation [W/m/m]
  303. REAL, INTENT(IN) :: LLG ! downward long wave radiation [W/m/m]
  304. REAL, INTENT(IN) :: RAIN ! precipitation [mm/h]
  305. REAL, INTENT(IN) :: RHOO ! air density [kg/m^3]
  306. REAL, INTENT(IN) :: ZA ! first atmospheric level [m]
  307. REAL, INTENT(IN) :: DECLIN ! solar declination [rad]
  308. REAL, INTENT(IN) :: COSZ ! sin(fai)*sin(del)+cos(fai)*cos(del)*cos(omg)
  309. REAL, INTENT(IN) :: OMG ! solar hour angle [rad]
  310. REAL, INTENT(IN) :: XLAT ! latitude [deg]
  311. REAL, INTENT(IN) :: DELT ! time step [s]
  312. REAL, INTENT(IN) :: ZNT ! roughness length [m]
  313. REAL, INTENT(IN) :: CHS,CHS2 ! CH*U at za and 2 m [m/s]
  314. REAL, INTENT(INOUT) :: SSGD ! downward direct short wave radiation [W/m/m]
  315. REAL, INTENT(INOUT) :: SSGQ ! downward diffuse short wave radiation [W/m/m]
  316. REAL, INTENT(INOUT) :: CMR_URB
  317. REAL, INTENT(INOUT) :: CHR_URB
  318. REAL, INTENT(INOUT) :: CMC_URB
  319. REAL, INTENT(INOUT) :: CHC_URB
  320. !-------------------------------------------------------------------------------
  321. ! O: output variables from Urban to LSM
  322. !-------------------------------------------------------------------------------
  323. REAL, INTENT(OUT) :: TS ! surface potential temperature [K]
  324. REAL, INTENT(OUT) :: QS ! surface humidity [K]
  325. REAL, INTENT(OUT) :: SH ! sensible heat flux [W/m/m]
  326. REAL, INTENT(OUT) :: LH ! latent heat flux [W/m/m]
  327. REAL, INTENT(OUT) :: LH_KINEMATIC ! latent heat, kinetic [kg/m/m/s]
  328. REAL, INTENT(OUT) :: SW ! upward short wave radiation flux [W/m/m]
  329. REAL, INTENT(OUT) :: ALB ! time-varying albedo [fraction]
  330. REAL, INTENT(OUT) :: LW ! upward long wave radiation flux [W/m/m]
  331. REAL, INTENT(OUT) :: G ! heat flux into the ground [W/m/m]
  332. REAL, INTENT(OUT) :: RN ! net radition [W/m/m]
  333. REAL, INTENT(OUT) :: PSIM ! similality stability shear function for momentum
  334. REAL, INTENT(OUT) :: PSIH ! similality stability shear function for heat
  335. REAL, INTENT(OUT) :: GZ1OZ0
  336. REAL, INTENT(OUT) :: U10 ! u at 10m [m/s]
  337. REAL, INTENT(OUT) :: V10 ! u at 10m [m/s]
  338. REAL, INTENT(OUT) :: TH2 ! potential temperature at 2 m [K]
  339. REAL, INTENT(OUT) :: Q2 ! humidity at 2 m [-]
  340. !m REAL, INTENT(OUT) :: CHS,CHS2 ! CH*U at za and 2 m [m/s]
  341. REAL, INTENT(OUT) :: UST ! friction velocity [m/s]
  342. !-------------------------------------------------------------------------------
  343. ! H: Historical (state) variables of Urban : LSM <--> Urban
  344. !-------------------------------------------------------------------------------
  345. ! TR: roof temperature [K]; TRP: at previous time step [K]
  346. ! TB: building wall temperature [K]; TBP: at previous time step [K]
  347. ! TG: road temperature [K]; TGP: at previous time step [K]
  348. ! TC: urban-canopy air temperature [K]; TCP: at previous time step [K]
  349. ! (absolute temperature)
  350. ! QC: urban-canopy air mixing ratio [kg/kg]; QCP: at previous time step [kg/kg]
  351. !
  352. ! XXXR: Monin-Obkhov length for roof [dimensionless]
  353. ! XXXB: Monin-Obkhov length for building wall [dimensionless]
  354. ! XXXG: Monin-Obkhov length for road [dimensionless]
  355. ! XXXC: Monin-Obkhov length for urban-canopy [dimensionless]
  356. !
  357. ! TRL, TBL, TGL: layer temperature [K] (absolute temperature)
  358. REAL, INTENT(INOUT):: TR, TB, TG, TC, QC, UC
  359. REAL, INTENT(INOUT):: XXXR, XXXB, XXXG, XXXC
  360. REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: TRL
  361. REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: TBL
  362. REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: TGL
  363. !-------------------------------------------------------------------------------
  364. ! L: Local variables from read_param
  365. !-------------------------------------------------------------------------------
  366. REAL :: ZR, Z0C, Z0HC, ZDC, SVF, R, RW, HGT, AH
  367. REAL :: SIGMA_ZED
  368. REAL :: CAPR, CAPB, CAPG, AKSR, AKSB, AKSG, ALBR, ALBB, ALBG
  369. REAL :: EPSR, EPSB, EPSG, Z0R, Z0B, Z0G, Z0HB, Z0HG
  370. REAL :: TRLEND,TBLEND,TGLEND
  371. REAL :: T1VR, T1VC,TH2V
  372. REAL :: RLMO_URB
  373. REAL :: AKANDA_URBAN
  374. REAL :: TH2X !m
  375. INTEGER :: BOUNDR, BOUNDB, BOUNDG
  376. INTEGER :: CH_SCHEME, TS_SCHEME
  377. LOGICAL :: SHADOW ! [true=consider svf and shadow effects, false=consider svf effect only]
  378. !for BEP
  379. INTEGER :: NUMDIR
  380. REAL, DIMENSION ( MAXDIRS ) :: STREET_DIRECTION
  381. REAL, DIMENSION ( MAXDIRS ) :: STREET_WIDTH
  382. REAL, DIMENSION ( MAXDIRS ) :: BUILDING_WIDTH
  383. INTEGER :: NUMHGT
  384. REAL, DIMENSION ( MAXHGTS ) :: HEIGHT_BIN
  385. REAL, DIMENSION ( MAXHGTS ) :: HPERCENT_BIN
  386. !end BEP
  387. !-------------------------------------------------------------------------------
  388. ! L: Local variables
  389. !-------------------------------------------------------------------------------
  390. REAL :: BETR, BETB, BETG
  391. REAL :: SX, SD, SQ, RX
  392. REAL :: UR, ZC, XLB, BB
  393. REAL :: Z, RIBB, RIBG, RIBC, BHR, BHB, BHG, BHC
  394. REAL :: TSC, LNET, SNET, FLXUV, THG, FLXTH, FLXHUM, FLXG
  395. REAL :: W, VFGS, VFGW, VFWG, VFWS, VFWW
  396. REAL :: HOUI1, HOUI2, HOUI3, HOUI4, HOUI5, HOUI6, HOUI7, HOUI8
  397. REAL :: SLX, SLX1, SLX2, SLX3, SLX4, SLX5, SLX6, SLX7, SLX8
  398. REAL :: FLXTHR, FLXTHB, FLXTHG, FLXHUMR, FLXHUMB, FLXHUMG
  399. REAL :: SR, SB, SG, RR, RB, RG
  400. REAL :: SR1, SR2, SB1, SB2, SG1, SG2, RR1, RR2, RB1, RB2, RG1, RG2
  401. REAL :: HR, HB, HG, ELER, ELEB, ELEG, G0R, G0B, G0G
  402. REAL :: ALPHAC, ALPHAR, ALPHAB, ALPHAG
  403. REAL :: CHC, CHR, CHB, CHG, CDC, CDR, CDB, CDG
  404. REAL :: C1R, C1B, C1G, TE, TC1, TC2, QC1, QC2, QS0R, QS0B, QS0G,RHO,ES
  405. REAL :: DESDT
  406. REAL :: F
  407. REAL :: DQS0RDTR
  408. REAL :: DRRDTR, DHRDTR, DELERDTR, DG0RDTR
  409. REAL :: DTR, DFDT
  410. REAL :: FX, FY, GF, GX, GY
  411. REAL :: DTCDTB, DTCDTG
  412. REAL :: DQCDTB, DQCDTG
  413. REAL :: DRBDTB1, DRBDTG1, DRBDTB2, DRBDTG2
  414. REAL :: DRGDTB1, DRGDTG1, DRGDTB2, DRGDTG2
  415. REAL :: DRBDTB, DRBDTG, DRGDTB, DRGDTG
  416. REAL :: DHBDTB, DHBDTG, DHGDTB, DHGDTG
  417. REAL :: DELEBDTB, DELEBDTG, DELEGDTG, DELEGDTB
  418. REAL :: DG0BDTB, DG0BDTG, DG0GDTG, DG0GDTB
  419. REAL :: DQS0BDTB, DQS0GDTG
  420. REAL :: DTB, DTG, DTC
  421. REAL :: THEATAZ ! Solar Zenith Angle [rad]
  422. REAL :: THEATAS ! = PI/2. - THETAZ
  423. REAL :: FAI ! Latitude [rad]
  424. REAL :: CNT,SNT
  425. REAL :: PS ! Surface Pressure [hPa]
  426. REAL :: TAV ! Vertial Temperature [K]
  427. REAL :: XXX, X, Z0, Z0H, CD, CH
  428. REAL :: XXX2, PSIM2, PSIH2, XXX10, PSIM10, PSIH10
  429. REAL :: PSIX, PSIT, PSIX2, PSIT2, PSIX10, PSIT10
  430. REAL :: TRP, TBP, TGP, TCP, QCP, TST, QST
  431. INTEGER :: iteration, K
  432. INTEGER :: tloc
  433. !-------------------------------------------------------------------------------
  434. ! Set parameters
  435. !-------------------------------------------------------------------------------
  436. ! Miao, 2007/01/17, cal. ah
  437. if(ahoption==1) then
  438. tloc=mod(int(OMG/PI*180./15.+12.+0.5 ),24)
  439. if(tloc==0) tloc=24
  440. endif
  441. CALL read_param(UTYPE,ZR,SIGMA_ZED,Z0C,Z0HC,ZDC,SVF,R,RW,HGT, &
  442. AH,CAPR,CAPB,CAPG,AKSR,AKSB,AKSG,ALBR,ALBB, &
  443. ALBG,EPSR,EPSB,EPSG,Z0R,Z0B,Z0G,Z0HB,Z0HG, &
  444. BETR,BETB,BETG,TRLEND,TBLEND,TGLEND, &
  445. !for BEP
  446. NUMDIR, STREET_DIRECTION, STREET_WIDTH, &
  447. BUILDING_WIDTH, NUMHGT, HEIGHT_BIN, &
  448. HPERCENT_BIN, &
  449. !end BEP
  450. BOUNDR,BOUNDB,BOUNDG,CH_SCHEME,TS_SCHEME, &
  451. AKANDA_URBAN)
  452. ! Miao, 2007/01/17, cal. ah
  453. if(ahoption==1) AH=AH*ahdiuprf(tloc)
  454. IF( ZDC+Z0C+2. >= ZA) THEN
  455. CALL wrf_error_fatal ("ZDC + Z0C + 2m is larger than the 1st WRF level "// &
  456. "Stop in subroutine urban - change ZDC and Z0C" )
  457. END IF
  458. IF(.NOT.LSOLAR) THEN
  459. SSGD = SRATIO*SSG
  460. SSGQ = SSG - SSGD
  461. ENDIF
  462. SSGD = SRATIO*SSG ! No radiation scheme has SSGD and SSGQ.
  463. SSGQ = SSG - SSGD
  464. W=2.*1.*HGT
  465. VFGS=SVF
  466. VFGW=1.-SVF
  467. VFWG=(1.-SVF)*(1.-R)/W
  468. VFWS=VFWG
  469. VFWW=1.-2.*VFWG
  470. !-------------------------------------------------------------------------------
  471. ! Convert unit from MKS to cgs
  472. ! Renew surface and layer temperatures
  473. !-------------------------------------------------------------------------------
  474. SX=(SSGD+SSGQ)/697.7/60. ! downward short wave radition [ly/min]
  475. SD=SSGD/697.7/60. ! downward direct short wave radiation
  476. SQ=SSGQ/697.7/60. ! downward diffuse short wave radiation
  477. RX=LLG/697.7/60. ! downward long wave radiation
  478. RHO=RHOO*0.001 ! air density at first atmospheric level
  479. TRP=TR
  480. TBP=TB
  481. TGP=TG
  482. TCP=TC
  483. QCP=QC
  484. TAV=TA*(1.+0.61*QA)
  485. PS=RHOO*287.*TAV/100. ![hPa]
  486. !-------------------------------------------------------------------------------
  487. ! Canopy wind
  488. !-------------------------------------------------------------------------------
  489. IF ( ZR + 2. < ZA ) THEN
  490. UR=UA*LOG((ZR-ZDC)/Z0C)/LOG((ZA-ZDC)/Z0C)
  491. ZC=0.7*ZR
  492. XLB=0.4*(ZR-ZDC)
  493. ! BB formulation from Inoue (1963)
  494. BB = 0.4 * ZR / ( XLB * alog( ( ZR - ZDC ) / Z0C ) )
  495. UC=UR*EXP(-BB*(1.-ZC/ZR))
  496. ELSE
  497. ! PRINT *, 'Warning ZR + 2m is larger than the 1st WRF level'
  498. ZC=ZA/2.
  499. UC=UA/2.
  500. END IF
  501. !-------------------------------------------------------------------------------
  502. ! Net Short Wave Radiation at roof, wall, and road
  503. !-------------------------------------------------------------------------------
  504. SHADOW = .false.
  505. ! SHADOW = .true.
  506. IF (SSG > 0.0) THEN
  507. IF(.NOT.SHADOW) THEN ! no shadow effects model
  508. SR1=SX*(1.-ALBR)
  509. SG1=SX*VFGS*(1.-ALBG)
  510. SB1=SX*VFWS*(1.-ALBB)
  511. SG2=SB1*ALBB/(1.-ALBB)*VFGW*(1.-ALBG)
  512. SB2=SG1*ALBG/(1.-ALBG)*VFWG*(1.-ALBB)
  513. ELSE ! shadow effects model
  514. FAI=XLAT*PI/180.
  515. THEATAS=ABS(ASIN(COSZ))
  516. THEATAZ=ABS(ACOS(COSZ))
  517. SNT=COS(DECLIN)*SIN(OMG)/COS(THEATAS)
  518. CNT=(COSZ*SIN(FAI)-SIN(DECLIN))/COS(THEATAS)/COS(FAI)
  519. HOUI1=(SNT*COS(PI/8.) -CNT*SIN(PI/8.))
  520. HOUI2=(SNT*COS(2.*PI/8.) -CNT*SIN(2.*PI/8.))
  521. HOUI3=(SNT*COS(3.*PI/8.) -CNT*SIN(3.*PI/8.))
  522. HOUI4=(SNT*COS(4.*PI/8.) -CNT*SIN(4.*PI/8.))
  523. HOUI5=(SNT*COS(5.*PI/8.) -CNT*SIN(5.*PI/8.))
  524. HOUI6=(SNT*COS(6.*PI/8.) -CNT*SIN(6.*PI/8.))
  525. HOUI7=(SNT*COS(7.*PI/8.) -CNT*SIN(7.*PI/8.))
  526. HOUI8=(SNT*COS(8.*PI/8.) -CNT*SIN(8.*PI/8.))
  527. SLX1=HGT*ABS(TAN(THEATAZ))*ABS(HOUI1)
  528. SLX2=HGT*ABS(TAN(THEATAZ))*ABS(HOUI2)
  529. SLX3=HGT*ABS(TAN(THEATAZ))*ABS(HOUI3)
  530. SLX4=HGT*ABS(TAN(THEATAZ))*ABS(HOUI4)
  531. SLX5=HGT*ABS(TAN(THEATAZ))*ABS(HOUI5)
  532. SLX6=HGT*ABS(TAN(THEATAZ))*ABS(HOUI6)
  533. SLX7=HGT*ABS(TAN(THEATAZ))*ABS(HOUI7)
  534. SLX8=HGT*ABS(TAN(THEATAZ))*ABS(HOUI8)
  535. IF(SLX1 > RW) SLX1=RW
  536. IF(SLX2 > RW) SLX2=RW
  537. IF(SLX3 > RW) SLX3=RW
  538. IF(SLX4 > RW) SLX4=RW
  539. IF(SLX5 > RW) SLX5=RW
  540. IF(SLX6 > RW) SLX6=RW
  541. IF(SLX7 > RW) SLX7=RW
  542. IF(SLX8 > RW) SLX8=RW
  543. SLX=(SLX1+SLX2+SLX3+SLX4+SLX5+SLX6+SLX7+SLX8)/8.
  544. SR1=SD*(1.-ALBR)+SQ*(1.-ALBR)
  545. SG1=SD*(RW-SLX)/RW*(1.-ALBG)+SQ*VFGS*(1.-ALBG)
  546. SB1=SD*SLX/W*(1.-ALBB)+SQ*VFWS*(1.-ALBB)
  547. SG2=SB1*ALBB/(1.-ALBB)*VFGW*(1.-ALBG)
  548. SB2=SG1*ALBG/(1.-ALBG)*VFWG*(1.-ALBB)
  549. END IF
  550. SR=SR1
  551. SG=SG1+SG2
  552. SB=SB1+SB2
  553. SNET=R*SR+W*SB+RW*SG
  554. ELSE
  555. SR=0.
  556. SG=0.
  557. SB=0.
  558. SNET=0.
  559. END IF
  560. !-------------------------------------------------------------------------------
  561. ! Roof
  562. !-------------------------------------------------------------------------------
  563. !-------------------------------------------------------------------------------
  564. ! CHR, CDR, BETR
  565. !-------------------------------------------------------------------------------
  566. ! Z=ZA-ZDC
  567. ! BHR=LOG(Z0R/Z0HR)/0.4
  568. ! RIBR=(9.8*2./(TA+TRP))*(TA-TRP)*(Z+Z0R)/(UA*UA)
  569. ! CALL mos(XXXR,ALPHAR,CDR,BHR,RIBR,Z,Z0R,UA,TA,TRP,RHO)
  570. ! Alternative option for MOST using SFCDIF routine from Noah
  571. ! Virtual temperatures needed by SFCDIF
  572. T1VR = TRP* (1.0+ 0.61 * QA)
  573. TH2V = (TA + ( 0.0098 * ZA)) * (1.0+ 0.61 * QA)
  574. ! note that CHR_URB contains UA (=CHR_MOS*UA)
  575. RLMO_URB=0.0
  576. CALL SFCDIF_URB (ZA,Z0R,T1VR,TH2V,UA,AKANDA_URBAN,CMR_URB,CHR_URB,RLMO_URB,CDR)
  577. ALPHAR = RHO*CP*CHR_URB
  578. CHR=ALPHAR/RHO/CP/UA
  579. IF(RAIN > 1.) BETR=0.7
  580. IF (TS_SCHEME == 1) THEN
  581. !-------------------------------------------------------------------------------
  582. ! TR Solving Non-Linear Equation by Newton-Rapson
  583. ! TRL Solving Heat Equation by Tri Diagonal Matrix Algorithm
  584. !-------------------------------------------------------------------------------
  585. ! TSC=TRP-273.15
  586. ! ES=EXP(19.482-4303.4/(TSC+243.5)) ! WMO
  587. ! ES=6.11*10.**(TETENA*TSC/(TETENB+TSC)) ! Tetens
  588. ! DESDT=( 6.1078*(2500.-2.4*TSC)/ & ! Tetens
  589. ! (0.46151*(TSC+273.15)**2.) )*10.**(7.5*TSC/(237.3+TSC))
  590. ! ES=6.11*EXP((2.5*10.**6./461.51)*(TRP-273.15)/(273.15*TRP) ) ! Clausius-Clapeyron
  591. ! DESDT=(2.5*10.**6./461.51)*ES/(TRP**2.) ! Clausius-Clapeyron
  592. ! QS0R=0.622*ES/(PS-0.378*ES)
  593. ! DQS0RDTR = DESDT*0.622*PS/((PS-0.378*ES)**2.)
  594. ! DQS0RDTR = 17.269*(273.15-35.86)/((TRP-35.86)**2.)*QS0R
  595. ! TRP=350.
  596. DO ITERATION=1,20
  597. ES=6.11*EXP( (2.5*10.**6./461.51)*(TRP-273.15)/(273.15*TRP) )
  598. DESDT=(2.5*10.**6./461.51)*ES/(TRP**2.)
  599. QS0R=0.622*ES/(PS-0.378*ES)
  600. DQS0RDTR = DESDT*0.622*PS/((PS-0.378*ES)**2.)
  601. RR=EPSR*(RX-SIG*(TRP**4.)/60.)
  602. HR=RHO*CP*CHR*UA*(TRP-TA)*100.
  603. ELER=RHO*EL*CHR*UA*BETR*(QS0R-QA)*100.
  604. G0R=AKSR*(TRP-TRL(1))/(DZR(1)/2.)
  605. F = SR + RR - HR - ELER - G0R
  606. DRRDTR = (-4.*EPSR*SIG*TRP**3.)/60.
  607. DHRDTR = RHO*CP*CHR*UA*100.
  608. DELERDTR = RHO*EL*CHR*UA*BETR*DQS0RDTR*100.
  609. DG0RDTR = 2.*AKSR/DZR(1)
  610. DFDT = DRRDTR - DHRDTR - DELERDTR - DG0RDTR
  611. DTR = F/DFDT
  612. TR = TRP - DTR
  613. TRP = TR
  614. IF( ABS(F) < 0.000001 .AND. ABS(DTR) < 0.000001 ) EXIT
  615. END DO
  616. ! multi-layer heat equation model
  617. CALL multi_layer(num_roof_layers,BOUNDR,G0R,CAPR,AKSR,TRL,DZR,DELT,TRLEND)
  618. ELSE
  619. ES=6.11*EXP( (2.5*10.**6./461.51)*(TRP-273.15)/(273.15*TRP) )
  620. QS0R=0.622*ES/(PS-0.378*ES)
  621. RR=EPSR*(RX-SIG*(TRP**4.)/60.)
  622. HR=RHO*CP*CHR*UA*(TRP-TA)*100.
  623. ELER=RHO*EL*CHR*UA*BETR*(QS0R-QA)*100.
  624. G0R=SR+RR-HR-ELER
  625. CALL force_restore(CAPR,AKSR,DELT,SR,RR,HR,ELER,TRLEND,TRP,TR)
  626. TRP=TR
  627. END IF
  628. FLXTHR=HR/RHO/CP/100.
  629. FLXHUMR=ELER/RHO/EL/100.
  630. !-------------------------------------------------------------------------------
  631. ! Wall and Road
  632. !-------------------------------------------------------------------------------
  633. !-------------------------------------------------------------------------------
  634. ! CHC, CHB, CDB, BETB, CHG, CDG, BETG
  635. !-------------------------------------------------------------------------------
  636. ! Z=ZA-ZDC
  637. ! BHC=LOG(Z0C/Z0HC)/0.4
  638. ! RIBC=(9.8*2./(TA+TCP))*(TA-TCP)*(Z+Z0C)/(UA*UA)
  639. !
  640. ! CALL mos(XXXC,ALPHAC,CDC,BHC,RIBC,Z,Z0C,UA,TA,TCP,RHO)
  641. ! Virtual temperatures needed by SFCDIF routine from Noah
  642. T1VC = TCP* (1.0+ 0.61 * QA)
  643. RLMO_URB=0.0
  644. CALL SFCDIF_URB(ZA,Z0C,T1VC,TH2V,UA,AKANDA_URBAN,CMC_URB,CHC_URB,RLMO_URB,CDC)
  645. ALPHAC = RHO*CP*CHC_URB
  646. IF (CH_SCHEME == 1) THEN
  647. Z=ZDC
  648. BHB=LOG(Z0B/Z0HB)/0.4
  649. BHG=LOG(Z0G/Z0HG)/0.4
  650. RIBB=(9.8*2./(TCP+TBP))*(TCP-TBP)*(Z+Z0B)/(UC*UC)
  651. RIBG=(9.8*2./(TCP+TGP))*(TCP-TGP)*(Z+Z0G)/(UC*UC)
  652. CALL mos(XXXB,ALPHAB,CDB,BHB,RIBB,Z,Z0B,UC,TCP,TBP,RHO)
  653. CALL mos(XXXG,ALPHAG,CDG,BHG,RIBG,Z,Z0G,UC,TCP,TGP,RHO)
  654. ELSE
  655. ALPHAB=RHO*CP*(6.15+4.18*UC)/1200.
  656. IF(UC > 5.) ALPHAB=RHO*CP*(7.51*UC**0.78)/1200.
  657. ALPHAG=RHO*CP*(6.15+4.18*UC)/1200.
  658. IF(UC > 5.) ALPHAG=RHO*CP*(7.51*UC**0.78)/1200.
  659. END IF
  660. CHC=ALPHAC/RHO/CP/UA
  661. CHB=ALPHAB/RHO/CP/UC
  662. CHG=ALPHAG/RHO/CP/UC
  663. BETB=0.0
  664. IF(RAIN > 1.) BETG=0.7
  665. IF (TS_SCHEME == 1) THEN
  666. !-------------------------------------------------------------------------------
  667. ! TB, TG Solving Non-Linear Simultaneous Equation by Newton-Rapson
  668. ! TBL,TGL Solving Heat Equation by Tri Diagonal Matrix Algorithm
  669. !-------------------------------------------------------------------------------
  670. ! TBP=350.
  671. ! TGP=350.
  672. DO ITERATION=1,20
  673. ES=6.11*EXP( (2.5*10.**6./461.51)*(TBP-273.15)/(273.15*TBP) )
  674. DESDT=(2.5*10.**6./461.51)*ES/(TBP**2.)
  675. QS0B=0.622*ES/(PS-0.378*ES)
  676. DQS0BDTB=DESDT*0.622*PS/((PS-0.378*ES)**2.)
  677. ES=6.11*EXP( (2.5*10.**6./461.51)*(TGP-273.15)/(273.15*TGP) )
  678. DESDT=(2.5*10.**6./461.51)*ES/(TGP**2.)
  679. QS0G=0.622*ES/(PS-0.378*ES)
  680. DQS0GDTG=DESDT*0.22*PS/((PS-0.378*ES)**2.)
  681. RG1=EPSG*( RX*VFGS &
  682. +EPSB*VFGW*SIG*TBP**4./60. &
  683. -SIG*TGP**4./60. )
  684. RB1=EPSB*( RX*VFWS &
  685. +EPSG*VFWG*SIG*TGP**4./60. &
  686. +EPSB*VFWW*SIG*TBP**4./60. &
  687. -SIG*TBP**4./60. )
  688. RG2=EPSG*( (1.-EPSB)*(1.-SVF)*VFWS*RX &
  689. +(1.-EPSB)*(1.-SVF)*VFWG*EPSG*SIG*TGP**4./60. &
  690. +EPSB*(1.-EPSB)*(1.-SVF)*(1.-2.*VFWS)*SIG*TBP**4./60. )
  691. RB2=EPSB*( (1.-EPSG)*VFWG*VFGS*RX &
  692. +(1.-EPSG)*EPSB*VFGW*VFWG*SIG*(TBP**4.)/60. &
  693. +(1.-EPSB)*VFWS*(1.-2.*VFWS)*RX &
  694. +(1.-EPSB)*VFWG*(1.-2.*VFWS)*EPSG*SIG*EPSG*TGP**4./60. &
  695. +EPSB*(1.-EPSB)*(1.-2.*VFWS)*(1.-2.*VFWS)*SIG*TBP**4./60. )
  696. RG=RG1+RG2
  697. RB=RB1+RB2
  698. DRBDTB1=EPSB*(4.*EPSB*SIG*TB**3.*VFWW-4.*SIG*TB**3.)/60.
  699. DRBDTG1=EPSB*(4.*EPSG*SIG*TG**3.*VFWG)/60.
  700. DRBDTB2=EPSB*(4.*(1.-EPSG)*EPSB*SIG*TB**3.*VFGW*VFWG &
  701. +4.*EPSB*(1.-EPSB)*SIG*TB**3.*VFWW*VFWW)/60.
  702. DRBDTG2=EPSB*(4.*(1.-EPSB)*EPSG*SIG*TG**3.*VFWG*VFWW)/60.
  703. DRGDTB1=EPSG*(4.*EPSB*SIG*TB**3.*VFGW)/60.
  704. DRGDTG1=EPSG*(-4.*SIG*TG**3.)/60.
  705. DRGDTB2=EPSG*(4.*EPSB*(1.-EPSB)*SIG*TB**3.*VFWW*VFGW)/60.
  706. DRGDTG2=EPSG*(4.*(1.-EPSB)*EPSG*SIG*TG**3.*VFWG*VFGW)/60.
  707. DRBDTB=DRBDTB1+DRBDTB2
  708. DRBDTG=DRBDTG1+DRBDTG2
  709. DRGDTB=DRGDTB1+DRGDTB2
  710. DRGDTG=DRGDTG1+DRGDTG2
  711. HB=RHO*CP*CHB*UC*(TBP-TCP)*100.
  712. HG=RHO*CP*CHG*UC*(TGP-TCP)*100.
  713. DTCDTB=W*ALPHAB/(RW*ALPHAC+RW*ALPHAG+W*ALPHAB)
  714. DTCDTG=RW*ALPHAG/(RW*ALPHAC+RW*ALPHAG+W*ALPHAB)
  715. DHBDTB=RHO*CP*CHB*UC*(1.-DTCDTB)*100.
  716. DHBDTG=RHO*CP*CHB*UC*(0.-DTCDTG)*100.
  717. DHGDTG=RHO*CP*CHG*UC*(1.-DTCDTG)*100.
  718. DHGDTB=RHO*CP*CHG*UC*(0.-DTCDTB)*100.
  719. ELEB=RHO*EL*CHB*UC*BETB*(QS0B-QCP)*100.
  720. ELEG=RHO*EL*CHG*UC*BETG*(QS0G-QCP)*100.
  721. DQCDTB=W*ALPHAB*BETB*DQS0BDTB/(RW*ALPHAC+RW*ALPHAG*BETG+W*ALPHAB*BETB)
  722. DQCDTG=RW*ALPHAG*BETG*DQS0GDTG/(RW*ALPHAC+RW*ALPHAG*BETG+W*ALPHAB*BETB)
  723. DELEBDTB=RHO*EL*CHB*UC*BETB*(DQS0BDTB-DQCDTB)*100.
  724. DELEBDTG=RHO*EL*CHB*UC*BETB*(0.-DQCDTG)*100.
  725. DELEGDTG=RHO*EL*CHG*UC*BETG*(DQS0GDTG-DQCDTG)*100.
  726. DELEGDTB=RHO*EL*CHG*UC*BETG*(0.-DQCDTB)*100.
  727. G0B=AKSB*(TBP-TBL(1))/(DZB(1)/2.)
  728. G0G=AKSG*(TGP-TGL(1))/(DZG(1)/2.)
  729. DG0BDTB=2.*AKSB/DZB(1)
  730. DG0BDTG=0.
  731. DG0GDTG=2.*AKSG/DZG(1)
  732. DG0GDTB=0.
  733. F = SB + RB - HB - ELEB - G0B
  734. FX = DRBDTB - DHBDTB - DELEBDTB - DG0BDTB
  735. FY = DRBDTG - DHBDTG - DELEBDTG - DG0BDTG
  736. GF = SG + RG - HG - ELEG - G0G
  737. GX = DRGDTB - DHGDTB - DELEGDTB - DG0GDTB
  738. GY = DRGDTG - DHGDTG - DELEGDTG - DG0GDTG
  739. DTB = (GF*FY-F*GY)/(FX*GY-GX*FY)
  740. DTG = -(GF+GX*DTB)/GY
  741. TB = TBP + DTB
  742. TG = TGP + DTG
  743. TBP = TB
  744. TGP = TG
  745. TC1=RW*ALPHAC+RW*ALPHAG+W*ALPHAB
  746. TC2=RW*ALPHAC*TA+RW*ALPHAG*TGP+W*ALPHAB*TBP
  747. TC=TC2/TC1
  748. QC1=RW*ALPHAC+RW*ALPHAG*BETG+W*ALPHAB*BETB
  749. QC2=RW*ALPHAC*QA+RW*ALPHAG*BETG*QS0G+W*ALPHAB*BETB*QS0B
  750. QC=QC2/QC1
  751. DTC=TCP - TC
  752. TCP=TC
  753. QCP=QC
  754. IF( ABS(F) < 0.000001 .AND. ABS(DTB) < 0.000001 &
  755. .AND. ABS(GF) < 0.000001 .AND. ABS(DTG) < 0.000001 &
  756. .AND. ABS(DTC) < 0.000001) EXIT
  757. END DO
  758. CALL multi_layer(num_wall_layers,BOUNDB,G0B,CAPB,AKSB,TBL,DZB,DELT,TBLEND)
  759. CALL multi_layer(num_road_layers,BOUNDG,G0G,CAPG,AKSG,TGL,DZG,DELT,TGLEND)
  760. ELSE
  761. !-------------------------------------------------------------------------------
  762. ! TB, TG by Force-Restore Method
  763. !-------------------------------------------------------------------------------
  764. ES=6.11*EXP((2.5*10.**6./461.51)*(TBP-273.15)/(273.15*TBP) )
  765. QS0B=0.622*ES/(PS-0.378*ES)
  766. ES=6.11*EXP((2.5*10.**6./461.51)*(TGP-273.15)/(273.15*TGP) )
  767. QS0G=0.622*ES/(PS-0.378*ES)
  768. RG1=EPSG*( RX*VFGS &
  769. +EPSB*VFGW*SIG*TBP**4./60. &
  770. -SIG*TGP**4./60. )
  771. RB1=EPSB*( RX*VFWS &
  772. +EPSG*VFWG*SIG*TGP**4./60. &
  773. +EPSB*VFWW*SIG*TBP**4./60. &
  774. -SIG*TBP**4./60. )
  775. RG2=EPSG*( (1.-EPSB)*(1.-SVF)*VFWS*RX &
  776. +(1.-EPSB)*(1.-SVF)*VFWG*EPSG*SIG*TGP**4./60. &
  777. +EPSB*(1.-EPSB)*(1.-SVF)*(1.-2.*VFWS)*SIG*TBP**4./60. )
  778. RB2=EPSB*( (1.-EPSG)*VFWG*VFGS*RX &
  779. +(1.-EPSG)*EPSB*VFGW*VFWG*SIG*(TBP**4.)/60. &
  780. +(1.-EPSB)*VFWS*(1.-2.*VFWS)*RX &
  781. +(1.-EPSB)*VFWG*(1.-2.*VFWS)*EPSG*SIG*EPSG*TGP**4./60. &
  782. +EPSB*(1.-EPSB)*(1.-2.*VFWS)*(1.-2.*VFWS)*SIG*TBP**4./60. )
  783. RG=RG1+RG2
  784. RB=RB1+RB2
  785. HB=RHO*CP*CHB*UC*(TBP-TCP)*100.
  786. ELEB=RHO*EL*CHB*UC*BETB*(QS0B-QCP)*100.
  787. G0B=SB+RB-HB-ELEB
  788. HG=RHO*CP*CHG*UC*(TGP-TCP)*100.
  789. ELEG=RHO*EL*CHG*UC*BETG*(QS0G-QCP)*100.
  790. G0G=SG+RG-HG-ELEG
  791. CALL force_restore(CAPB,AKSB,DELT,SB,RB,HB,ELEB,TBLEND,TBP,TB)
  792. CALL force_restore(CAPG,AKSG,DELT,SG,RG,HG,ELEG,TGLEND,TGP,TG)
  793. TBP=TB
  794. TGP=TG
  795. TC1=RW*ALPHAC+RW*ALPHAG+W*ALPHAB
  796. TC2=RW*ALPHAC*TA+RW*ALPHAG*TGP+W*ALPHAB*TBP
  797. TC=TC2/TC1
  798. QC1=RW*ALPHAC+RW*ALPHAG*BETG+W*ALPHAB*BETB
  799. QC2=RW*ALPHAC*QA+RW*ALPHAG*BETG*QS0G+W*ALPHAB*BETB*QS0B
  800. QC=QC2/QC1
  801. TCP=TC
  802. QCP=QC
  803. END IF
  804. FLXTHB=HB/RHO/CP/100.
  805. FLXHUMB=ELEB/RHO/EL/100.
  806. FLXTHG=HG/RHO/CP/100.
  807. FLXHUMG=ELEG/RHO/EL/100.
  808. !-------------------------------------------------------------------------------
  809. ! Total Fluxes from Urban Canopy
  810. !-------------------------------------------------------------------------------
  811. FLXUV = ( R*CDR + RW*CDC )*UA*UA
  812. ! Miao, 2007/01/17, cal. ah
  813. if(ahoption==1) then
  814. FLXTH = ( R*FLXTHR + W*FLXTHB + RW*FLXTHG ) + AH/RHOO/CPP
  815. else
  816. FLXTH = ( R*FLXTHR + W*FLXTHB + RW*FLXTHG )
  817. endif
  818. FLXHUM = ( R*FLXHUMR + W*FLXHUMB + RW*FLXHUMG )
  819. FLXG = ( R*G0R + W*G0B + RW*G0G )
  820. LNET = R*RR + W*RB + RW*RG
  821. !----------------------------------------------------------------------------
  822. ! Convert Unit: FLUXES and u* T* q* --> WRF
  823. !----------------------------------------------------------------------------
  824. SH = FLXTH * RHOO * CPP ! Sensible heat flux [W/m/m]
  825. LH = FLXHUM * RHOO * ELL ! Latent heat flux [W/m/m]
  826. LH_KINEMATIC = FLXHUM * RHOO ! Latent heat, Kinematic [kg/m/m/s]
  827. LW = LLG - (LNET*697.7*60.) ! Upward longwave radiation [W/m/m]
  828. SW = SSG - (SNET*697.7*60.) ! Upward shortwave radiation [W/m/m]
  829. ALB = 0.
  830. IF( ABS(SSG) > 0.0001) ALB = SW/SSG ! Effective albedo [-]
  831. G = -FLXG*697.7*60. ! [W/m/m]
  832. RN = (SNET+LNET)*697.7*60. ! Net radiation [W/m/m]
  833. UST = SQRT(FLXUV) ! u* [m/s]
  834. TST = -FLXTH/UST ! T* [K]
  835. QST = -FLXHUM/UST ! q* [-]
  836. !------------------------------------------------------
  837. ! diagnostic GRID AVERAGED PSIM PSIH TS QS --> WRF
  838. !------------------------------------------------------
  839. Z0 = Z0C
  840. Z0H = Z0HC
  841. Z = ZA - ZDC
  842. XXX = 0.4*9.81*Z*TST/TA/UST/UST
  843. IF ( XXX >= 1. ) XXX = 1.
  844. IF ( XXX <= -5. ) XXX = -5.
  845. IF ( XXX > 0 ) THEN
  846. PSIM = -5. * XXX
  847. PSIH = -5. * XXX
  848. ELSE
  849. X = (1.-16.*XXX)**0.25
  850. PSIM = 2.*ALOG((1.+X)/2.) + ALOG((1.+X*X)/2.) - 2.*ATAN(X) + PI/2.
  851. PSIH = 2.*ALOG((1.+X*X)/2.)
  852. END IF
  853. GZ1OZ0 = ALOG(Z/Z0)
  854. CD = 0.4**2./(ALOG(Z/Z0)-PSIM)**2.
  855. !
  856. !m CH = 0.4**2./(ALOG(Z/Z0)-PSIM)/(ALOG(Z/Z0H)-PSIH)
  857. !m CHS = 0.4*UST/(ALOG(Z/Z0H)-PSIH)
  858. !m TS = TA + FLXTH/CH/UA ! surface potential temp (flux temp)
  859. !m QS = QA + FLXHUM/CH/UA ! surface humidity
  860. !
  861. TS = TA + FLXTH/CHS ! surface potential temp (flux temp)
  862. QS = QA + FLXHUM/CHS ! surface humidity
  863. !-------------------------------------------------------
  864. ! diagnostic GRID AVERAGED U10 V10 TH2 Q2 --> WRF
  865. !-------------------------------------------------------
  866. XXX2 = (2./Z)*XXX
  867. IF ( XXX2 >= 1. ) XXX2 = 1.
  868. IF ( XXX2 <= -5. ) XXX2 = -5.
  869. IF ( XXX2 > 0 ) THEN
  870. PSIM2 = -5. * XXX2
  871. PSIH2 = -5. * XXX2
  872. ELSE
  873. X = (1.-16.*XXX2)**0.25
  874. PSIM2 = 2.*ALOG((1.+X)/2.) + ALOG((1.+X*X)/2.) - 2.*ATAN(X) + 2.*ATAN(1.)
  875. PSIH2 = 2.*ALOG((1.+X*X)/2.)
  876. END IF
  877. !
  878. !m CHS2 = 0.4*UST/(ALOG(2./Z0H)-PSIH2)
  879. !
  880. XXX10 = (10./Z)*XXX
  881. IF ( XXX10 >= 1. ) XXX10 = 1.
  882. IF ( XXX10 <= -5. ) XXX10 = -5.
  883. IF ( XXX10 > 0 ) THEN
  884. PSIM10 = -5. * XXX10
  885. PSIH10 = -5. * XXX10
  886. ELSE
  887. X = (1.-16.*XXX10)**0.25
  888. PSIM10 = 2.*ALOG((1.+X)/2.) + ALOG((1.+X*X)/2.) - 2.*ATAN(X) + 2.*ATAN(1.)
  889. PSIH10 = 2.*ALOG((1.+X*X)/2.)
  890. END IF
  891. PSIX = ALOG(Z/Z0) - PSIM
  892. PSIT = ALOG(Z/Z0H) - PSIH
  893. PSIX2 = ALOG(2./Z0) - PSIM2
  894. PSIT2 = ALOG(2./Z0H) - PSIH2
  895. PSIX10 = ALOG(10./Z0) - PSIM10
  896. PSIT10 = ALOG(10./Z0H) - PSIH10
  897. U10 = U1 * (PSIX10/PSIX) ! u at 10 m [m/s]
  898. V10 = V1 * (PSIX10/PSIX) ! v at 10 m [m/s]
  899. ! TH2 = TS + (TA-TS)*(PSIT2/PSIT) ! potential temp at 2 m [K]
  900. ! TH2 = TS + (TA-TS)*(PSIT2/PSIT) ! Fei: this seems to be temp (not potential) at 2 m [K]
  901. !Fei: consistant with M-O theory
  902. TH2 = TS + (TA-TS) *(CHS/CHS2)
  903. Q2 = QS + (QA-QS)*(PSIT2/PSIT) ! humidity at 2 m [-]
  904. ! TS = (LW/SIG_SI/0.88)**0.25 ! Radiative temperature [K]
  905. END SUBROUTINE urban
  906. !===============================================================================
  907. !
  908. ! mos
  909. !
  910. !===============================================================================
  911. SUBROUTINE mos(XXX,ALPHA,CD,B1,RIB,Z,Z0,UA,TA,TSF,RHO)
  912. ! XXX: z/L (requires iteration by Newton-Rapson method)
  913. ! B1: Stanton number
  914. ! PSIM: = PSIX of LSM
  915. ! PSIH: = PSIT of LSM
  916. IMPLICIT NONE
  917. REAL, PARAMETER :: CP=0.24
  918. REAL, INTENT(IN) :: B1, Z, Z0, UA, TA, TSF, RHO
  919. REAL, INTENT(OUT) :: ALPHA, CD
  920. REAL, INTENT(INOUT) :: XXX, RIB
  921. REAL :: XXX0, X, X0, FAIH, DPSIM, DPSIH
  922. REAL :: F, DF, XXXP, US, TS, AL, XKB, DD, PSIM, PSIH
  923. INTEGER :: NEWT
  924. INTEGER, PARAMETER :: NEWT_END=10
  925. IF(RIB <= -15.) RIB=-15.
  926. IF(RIB < 0.) THEN
  927. DO NEWT=1,NEWT_END
  928. IF(XXX >= 0.) XXX=-1.E-3
  929. XXX0=XXX*Z0/(Z+Z0)
  930. X=(1.-16.*XXX)**0.25
  931. X0=(1.-16.*XXX0)**0.25
  932. PSIM=ALOG((Z+Z0)/Z0) &
  933. -ALOG((X+1.)**2.*(X**2.+1.)) &
  934. +2.*ATAN(X) &
  935. +ALOG((X+1.)**2.*(X0**2.+1.)) &
  936. -2.*ATAN(X0)
  937. FAIH=1./SQRT(1.-16.*XXX)
  938. PSIH=ALOG((Z+Z0)/Z0)+0.4*B1 &
  939. -2.*ALOG(SQRT(1.-16.*XXX)+1.) &
  940. +2.*ALOG(SQRT(1.-16.*XXX0)+1.)
  941. DPSIM=(1.-16.*XXX)**(-0.25)/XXX &
  942. -(1.-16.*XXX0)**(-0.25)/XXX
  943. DPSIH=1./SQRT(1.-16.*XXX)/XXX &
  944. -1./SQRT(1.-16.*XXX0)/XXX
  945. F=RIB*PSIM**2./PSIH-XXX
  946. DF=RIB*(2.*DPSIM*PSIM*PSIH-DPSIH*PSIM**2.) &
  947. /PSIH**2.-1.
  948. XXXP=XXX
  949. XXX=XXXP-F/DF
  950. IF(XXX <= -10.) XXX=-10.
  951. END DO
  952. ELSE IF(RIB >= 0.142857) THEN
  953. XXX=0.714
  954. PSIM=ALOG((Z+Z0)/Z0)+7.*XXX
  955. PSIH=PSIM+0.4*B1
  956. ELSE
  957. AL=ALOG((Z+Z0)/Z0)
  958. XKB=0.4*B1
  959. DD=-4.*RIB*7.*XKB*AL+(AL+XKB)**2.
  960. IF(DD <= 0.) DD=0.
  961. XXX=(AL+XKB-2.*RIB*7.*AL-SQRT(DD))/(2.*(RIB*7.**2-7.))
  962. PSIM=ALOG((Z+Z0)/Z0)+7.*MIN(XXX,0.714)
  963. PSIH=PSIM+0.4*B1
  964. END IF
  965. US=0.4*UA/PSIM ! u*
  966. IF(US <= 0.01) US=0.01
  967. TS=0.4*(TA-TSF)/PSIH ! T*
  968. CD=US*US/UA**2. ! CD
  969. ALPHA=RHO*CP*0.4*US/PSIH ! RHO*CP*CH*U
  970. RETURN
  971. END SUBROUTINE mos
  972. !===============================================================================
  973. !
  974. ! louis79
  975. !
  976. !===============================================================================
  977. SUBROUTINE louis79(ALPHA,CD,RIB,Z,Z0,UA,RHO)
  978. IMPLICIT NONE
  979. REAL, PARAMETER :: CP=0.24
  980. REAL, INTENT(IN) :: Z, Z0, UA, RHO
  981. REAL, INTENT(OUT) :: ALPHA, CD
  982. REAL, INTENT(INOUT) :: RIB
  983. REAL :: A2, XX, CH, CMB, CHB
  984. A2=(0.4/ALOG(Z/Z0))**2.
  985. IF(RIB <= -15.) RIB=-15.
  986. IF(RIB >= 0.0) THEN
  987. IF(RIB >= 0.142857) THEN
  988. XX=0.714
  989. ELSE
  990. XX=RIB*LOG(Z/Z0)/(1.-7.*RIB)
  991. END IF
  992. CH=0.16/0.74/(LOG(Z/Z0)+7.*MIN(XX,0.714))**2.
  993. CD=0.16/(LOG(Z/Z0)+7.*MIN(XX,0.714))**2.
  994. ELSE
  995. CMB=7.4*A2*9.4*SQRT(Z/Z0)
  996. CHB=5.3*A2*9.4*SQRT(Z/Z0)
  997. CH=A2/0.74*(1.-9.4*RIB/(1.+CHB*SQRT(-RIB)))
  998. CD=A2*(1.-9.4*RIB/(1.+CHB*SQRT(-RIB)))
  999. END IF
  1000. ALPHA=RHO*CP*CH*UA
  1001. RETURN
  1002. END SUBROUTINE louis79
  1003. !===============================================================================
  1004. !
  1005. ! louis82
  1006. !
  1007. !===============================================================================
  1008. SUBROUTINE louis82(ALPHA,CD,RIB,Z,Z0,UA,RHO)
  1009. IMPLICIT NONE
  1010. REAL, PARAMETER :: CP=0.24
  1011. REAL, INTENT(IN) :: Z, Z0, UA, RHO
  1012. REAL, INTENT(OUT) :: ALPHA, CD
  1013. REAL, INTENT(INOUT) :: RIB
  1014. REAL :: A2, FM, FH, CH, CHH
  1015. A2=(0.4/ALOG(Z/Z0))**2.
  1016. IF(RIB <= -15.) RIB=-15.
  1017. IF(RIB >= 0.0) THEN
  1018. FM=1./((1.+(2.*5.*RIB)/SQRT(1.+5.*RIB)))
  1019. FH=1./(1.+(3.*5.*RIB)*SQRT(1.+5.*RIB))
  1020. CH=A2*FH
  1021. CD=A2*FM
  1022. ELSE
  1023. CHH=5.*3.*5.*A2*SQRT(Z/Z0)
  1024. FM=1.-(2.*5.*RIB)/(1.+3.*5.*5.*A2*SQRT(Z/Z0+1.)*(-RIB))
  1025. FH=1.-(3.*5.*RIB)/(1.+CHH*SQRT(-RIB))
  1026. CH=A2*FH
  1027. CD=A2*FM
  1028. END IF
  1029. ALPHA=RHO*CP*CH*UA
  1030. RETURN
  1031. END SUBROUTINE louis82
  1032. !===============================================================================
  1033. !
  1034. ! multi_layer
  1035. !
  1036. !===============================================================================
  1037. SUBROUTINE multi_layer(KM,BOUND,G0,CAP,AKS,TSL,DZ,DELT,TSLEND)
  1038. IMPLICIT NONE
  1039. REAL, INTENT(IN) :: G0
  1040. REAL, INTENT(IN) :: CAP
  1041. REAL, INTENT(IN) :: AKS
  1042. REAL, INTENT(IN) :: DELT ! Time step [ s ]
  1043. REAL, INTENT(IN) :: TSLEND
  1044. INTEGER, INTENT(IN) :: KM
  1045. INTEGER, INTENT(IN) :: BOUND
  1046. REAL, DIMENSION(KM), INTENT(IN) :: DZ
  1047. REAL, DIMENSION(KM), INTENT(INOUT) :: TSL
  1048. REAL, DIMENSION(KM) :: A, B, C, D, X, P, Q
  1049. REAL :: DZEND
  1050. INTEGER :: K
  1051. DZEND=DZ(KM)
  1052. A(1) = 0.0
  1053. B(1) = CAP*DZ(1)/DELT &
  1054. +2.*AKS/(DZ(1)+DZ(2))
  1055. C(1) = -2.*AKS/(DZ(1)+DZ(2))
  1056. D(1) = CAP*DZ(1)/DELT*TSL(1) + G0
  1057. DO K=2,KM-1
  1058. A(K) = -2.*AKS/(DZ(K-1)+DZ(K))
  1059. B(K) = CAP*DZ(K)/DELT + 2.*AKS/(DZ(K-1)+DZ(K)) + 2.*AKS/(DZ(K)+DZ(K+1))
  1060. C(K) = -2.*AKS/(DZ(K)+DZ(K+1))
  1061. D(K) = CAP*DZ(K)/DELT*TSL(K)
  1062. END DO
  1063. IF(BOUND == 1) THEN ! Flux=0
  1064. A(KM) = -2.*AKS/(DZ(KM-1)+DZ(KM))
  1065. B(KM) = CAP*DZ(KM)/DELT + 2.*AKS/(DZ(KM-1)+DZ(KM))
  1066. C(KM) = 0.0
  1067. D(KM) = CAP*DZ(KM)/DELT*TSL(KM)
  1068. ELSE ! T=constant
  1069. A(KM) = -2.*AKS/(DZ(KM-1)+DZ(KM))
  1070. B(KM) = CAP*DZ(KM)/DELT + 2.*AKS/(DZ(KM-1)+DZ(KM)) + 2.*AKS/(DZ(KM)+DZEND)
  1071. C(KM) = 0.0
  1072. D(KM) = CAP*DZ(KM)/DELT*TSL(KM) + 2.*AKS*TSLEND/(DZ(KM)+DZEND)
  1073. END IF
  1074. P(1) = -C(1)/B(1)
  1075. Q(1) = D(1)/B(1)
  1076. DO K=2,KM
  1077. P(K) = -C(K)/(A(K)*P(K-1)+B(K))
  1078. Q(K) = (-A(K)*Q(K-1)+D(K))/(A(K)*P(K-1)+B(K))
  1079. END DO
  1080. X(KM) = Q(KM)
  1081. DO K=KM-1,1,-1
  1082. X(K) = P(K)*X(K+1)+Q(K)
  1083. END DO
  1084. DO K=1,KM
  1085. TSL(K) = X(K)
  1086. END DO
  1087. RETURN
  1088. END SUBROUTINE multi_layer
  1089. !==========

Large files files are truncated, but you can click here to view the full file