PageRenderTime 55ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/wrfv2_fire/phys/module_sf_ruclsm.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 6031 lines | 3585 code | 793 blank | 1653 comment | 96 complexity | 926e2faf7df8889ef7fefb2ef52fc9ed MD5 | raw file
Possible License(s): AGPL-1.0
  1. #define LSMRUC_DBG_LVL 3000
  2. !WRF:MODEL_LAYER:PHYSICS
  3. !
  4. MODULE module_sf_ruclsm
  5. USE module_model_constants
  6. USE module_wrf_error
  7. ! VEGETATION PARAMETERS
  8. INTEGER :: LUCATS , BARE, NATURAL
  9. integer, PARAMETER :: NLUS=50
  10. CHARACTER*8 LUTYPE
  11. INTEGER, DIMENSION(1:NLUS) :: IFORTBL
  12. real, dimension(1:NLUS) :: SNUPTBL, RSTBL, RGLTBL, HSTBL, LAITBL, &
  13. ALBTBL, Z0TBL, LEMITBL, PCTBL, SHDTBL, MAXALB
  14. REAL :: TOPT_DATA,CMCMAX_DATA,CFACTR_DATA,RSMAX_DATA
  15. ! SOIL PARAMETERS
  16. INTEGER :: SLCATS
  17. INTEGER, PARAMETER :: NSLTYPE=30
  18. CHARACTER*8 SLTYPE
  19. REAL, DIMENSION (1:NSLTYPE) :: BB,DRYSMC,HC, &
  20. MAXSMC, REFSMC,SATPSI,SATDK,SATDW, WLTSMC,QTZ
  21. ! LSM GENERAL PARAMETERS
  22. INTEGER :: SLPCATS
  23. INTEGER, PARAMETER :: NSLOPE=30
  24. REAL, DIMENSION (1:NSLOPE) :: SLOPE_DATA
  25. REAL :: SBETA_DATA,FXEXP_DATA,CSOIL_DATA,SALP_DATA,REFDK_DATA, &
  26. REFKDT_DATA,FRZK_DATA,ZBOT_DATA, SMLOW_DATA,SMHIGH_DATA, &
  27. CZIL_DATA
  28. CHARACTER*256 :: err_message
  29. CONTAINS
  30. !-----------------------------------------------------------------
  31. SUBROUTINE LSMRUC( &
  32. DT,KTAU,NSL,ZS, &
  33. RAINBL,SNOW,SNOWH,SNOWC,FRZFRAC,frpcpn, &
  34. Z3D,P8W,T3D,QV3D,QC3D,RHO3D, & !p8W in [PA]
  35. GLW,GSW,EMISS,CHKLOWQ, CHS, &
  36. FLQC,FLHC,MAVAIL,CANWAT,VEGFRA,ALB,ZNT, &
  37. Z0,SNOALB,ALBBCK,LAI, & !new
  38. mminlu, landusef, nlcat, mosaic_lu, &
  39. mosaic_soil, soilctop, nscat, & !new
  40. QSFC,QSG,QVG,QCG,DEW,SOILT1,TSNAV, &
  41. TBOT,IVGTYP,ISLTYP,XLAND, &
  42. ISWATER,ISICE,XICE,XICE_THRESHOLD, &
  43. CP,ROVCP,G0,LV,STBOLT, &
  44. SOILMOIS,SH2O,SMAVAIL,SMMAX, &
  45. TSO,SOILT,HFX,QFX,LH, &
  46. SFCRUNOFF,UDRUNOFF,SFCEXC, &
  47. SFCEVP,GRDFLX,ACSNOW,SNOM, &
  48. SMFR3D,KEEPFR3DFLAG, &
  49. myj, &
  50. ids,ide, jds,jde, kds,kde, &
  51. ims,ime, jms,jme, kms,kme, &
  52. its,ite, jts,jte, kts,kte )
  53. !-----------------------------------------------------------------
  54. IMPLICIT NONE
  55. !-----------------------------------------------------------------
  56. !
  57. ! The RUC LSM model is described in:
  58. ! Smirnova, T.G., J.M. Brown, and S.G. Benjamin, 1997:
  59. ! Performance of different soil model configurations in simulating
  60. ! ground surface temperature and surface fluxes.
  61. ! Mon. Wea. Rev. 125, 1870-1884.
  62. ! Smirnova, T.G., J.M. Brown, and D. Kim, 2000: Parameterization of
  63. ! cold-season processes in the MAPS land-surface scheme.
  64. ! J. Geophys. Res. 105, 4077-4086.
  65. !-----------------------------------------------------------------
  66. !-- DT time step (second)
  67. ! ktau - number of time step
  68. ! NSL - number of soil layers
  69. ! NZS - number of levels in soil
  70. ! ZS - depth of soil levels (m)
  71. !-- RAINBL - accumulated rain in [mm] between the PBL calls
  72. !-- RAINNCV one time step grid scale precipitation (mm/step)
  73. ! SNOW - snow water equivalent [mm]
  74. ! FRAZFRAC - fraction of frozen precipitation
  75. !-- SNOWC flag indicating snow coverage (1 for snow cover)
  76. !-- Z3D heights (m)
  77. !-- P8W 3D pressure (Pa)
  78. !-- T3D temperature (K)
  79. !-- QV3D 3D water vapor mixing ratio (Kg/Kg)
  80. ! QC3D - 3D cloud water mixing ratio (Kg/Kg)
  81. ! RHO3D - 3D air density (kg/m^3)
  82. !-- GLW downward long wave flux at ground surface (W/m^2)
  83. !-- GSW absorbed short wave flux at ground surface (W/m^2)
  84. !-- EMISS surface emissivity (between 0 and 1)
  85. ! FLQC - surface exchange coefficient for moisture (kg/m^2/s)
  86. ! FLHC - surface exchange coefficient for heat [W/m^2/s/degreeK]
  87. ! SFCEXC - surface exchange coefficient for heat [m/s]
  88. ! CANWAT - CANOPY MOISTURE CONTENT (mm)
  89. ! VEGFRA - vegetation fraction (between 0 and 1)
  90. ! ALB - surface albedo (between 0 and 1)
  91. ! SNOALB - maximum snow albedo (between 0 and 1)
  92. ! ALBBCK - snow-free albedo (between 0 and 1)
  93. ! ZNT - roughness length [m]
  94. !-- TBOT soil temperature at lower boundary (K)
  95. ! IVGTYP - USGS vegetation type (24 classes)
  96. ! ISLTYP - STASGO soil type (16 classes)
  97. !-- XLAND land mask (1 for land, 2 for water)
  98. !-- CP heat capacity at constant pressure for dry air (J/kg/K)
  99. !-- G0 acceleration due to gravity (m/s^2)
  100. !-- LV latent heat of melting (J/kg)
  101. !-- STBOLT Stefan-Boltzmann constant (W/m^2/K^4)
  102. ! SOILMOIS - soil moisture content (volumetric fraction)
  103. ! TSO - soil temp (K)
  104. !-- SOILT surface temperature (K)
  105. !-- HFX upward heat flux at the surface (W/m^2)
  106. !-- QFX upward moisture flux at the surface (kg/m^2/s)
  107. !-- LH upward latent heat flux (W/m^2)
  108. ! SFCRUNOFF - ground surface runoff [mm]
  109. ! UDRUNOFF - underground runoff [mm]
  110. ! SFCEVP - total evaporation in [kg/m^2]
  111. ! GRDFLX - soil heat flux (W/m^2: negative, if downward from surface)
  112. ! ACSNOW - accumulation of snow water [m]
  113. !-- CHKLOWQ - is either 0 or 1 (so far set equal to 1).
  114. !-- used only in MYJPBL.
  115. !-- tice - sea ice temperture (C)
  116. !-- rhosice - sea ice density (kg m^-3)
  117. !-- capice - sea ice volumetric heat capacity (J/m^3/K)
  118. !-- thdifice - sea ice thermal diffusivity (m^2/s)
  119. !--
  120. !-- ims start index for i in memory
  121. !-- ime end index for i in memory
  122. !-- jms start index for j in memory
  123. !-- jme end index for j in memory
  124. !-- kms start index for k in memory
  125. !-- kme end index for k in memory
  126. !-------------------------------------------------------------------------
  127. ! INTEGER, PARAMETER :: nzss=5
  128. ! INTEGER, PARAMETER :: nddzs=2*(nzss-2)
  129. INTEGER, PARAMETER :: nvegclas=24+3
  130. REAL, INTENT(IN ) :: DT
  131. LOGICAL, INTENT(IN ) :: myj,frpcpn
  132. INTEGER, INTENT(IN ) :: NLCAT, NSCAT, mosaic_lu, mosaic_soil
  133. INTEGER, INTENT(IN ) :: ktau, nsl, isice, iswater, &
  134. ims,ime, jms,jme, kms,kme, &
  135. ids,ide, jds,jde, kds,kde, &
  136. its,ite, jts,jte, kts,kte
  137. REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
  138. INTENT(IN ) :: QV3D, &
  139. QC3D, &
  140. p8w, &
  141. rho3D, &
  142. T3D, &
  143. z3D
  144. REAL, DIMENSION( ims:ime , jms:jme ), &
  145. INTENT(IN ) :: RAINBL, &
  146. GLW, &
  147. GSW, &
  148. FLHC, &
  149. FLQC, &
  150. CHS , &
  151. EMISS, &
  152. XICE, &
  153. XLAND, &
  154. ALBBCK, &
  155. VEGFRA, &
  156. TBOT
  157. REAL, DIMENSION( 1:nsl), INTENT(IN ) :: ZS
  158. REAL, DIMENSION( ims:ime , jms:jme ), &
  159. INTENT(INOUT) :: &
  160. SNOW, & !new
  161. SNOWH, &
  162. SNOWC, &
  163. CANWAT, & ! new
  164. SNOALB, &
  165. ALB, &
  166. LAI, &
  167. MAVAIL, &
  168. SFCEXC, &
  169. Z0 , &
  170. ZNT
  171. REAL, DIMENSION( ims:ime , jms:jme ), &
  172. INTENT(IN ) :: &
  173. FRZFRAC
  174. INTEGER, DIMENSION( ims:ime , jms:jme ), &
  175. INTENT(IN ) :: IVGTYP, &
  176. ISLTYP
  177. CHARACTER(LEN=*), INTENT(IN ) :: MMINLU
  178. REAL, DIMENSION( ims:ime , 1:nlcat, jms:jme ), INTENT(IN):: LANDUSEF
  179. REAL, DIMENSION( ims:ime , 1:nscat, jms:jme ), INTENT(IN):: SOILCTOP
  180. REAL, INTENT(IN ) :: CP,ROVCP,G0,LV,STBOLT,XICE_threshold
  181. REAL, DIMENSION( ims:ime , 1:nsl, jms:jme ) , &
  182. INTENT(INOUT) :: SOILMOIS,SH2O,TSO
  183. REAL, DIMENSION( ims:ime, jms:jme ) , &
  184. INTENT(INOUT) :: SOILT, &
  185. HFX, &
  186. QFX, &
  187. LH, &
  188. SFCEVP, &
  189. SFCRUNOFF, &
  190. UDRUNOFF, &
  191. GRDFLX, &
  192. ACSNOW, &
  193. SNOM, &
  194. QVG, &
  195. QCG, &
  196. DEW, &
  197. QSFC, &
  198. QSG, &
  199. CHKLOWQ, &
  200. SOILT1, &
  201. TSNAV
  202. REAL, DIMENSION( ims:ime, jms:jme ) , &
  203. INTENT(INOUT) :: SMAVAIL, &
  204. SMMAX
  205. REAL, DIMENSION( its:ite, jts:jte ) :: &
  206. PC, &
  207. RUNOFF1, &
  208. RUNOFF2, &
  209. EMISSL, &
  210. ZNTL, &
  211. LMAVAIL, &
  212. SMELT, &
  213. SNOH, &
  214. SNFLX, &
  215. EDIR, &
  216. EC, &
  217. ETT, &
  218. SUBLIM, &
  219. sflx, &
  220. EVAPL, &
  221. PRCPL, &
  222. SEAICE, &
  223. INFILTR
  224. !--- soil/snow properties
  225. REAL, DIMENSION( ims:ime, 1:nsl, jms:jme) &
  226. :: KEEPFR3DFLAG, &
  227. SMFR3D
  228. REAL &
  229. :: RHOCS, &
  230. RHOSN, &
  231. RHONEWSN, &
  232. BCLH, &
  233. DQM, &
  234. KSAT, &
  235. PSIS, &
  236. QMIN, &
  237. QWRTZ, &
  238. REF, &
  239. WILT, &
  240. CANWATR, &
  241. SNOWFRAC, &
  242. SNHEI, &
  243. SNWE
  244. REAL :: CN, &
  245. SAT,CW, &
  246. C1SN, &
  247. C2SN, &
  248. KQWRTZ, &
  249. KICE, &
  250. KWT
  251. REAL, DIMENSION(1:NSL) :: ZSMAIN, &
  252. ZSHALF, &
  253. DTDZS2
  254. REAL, DIMENSION(1:2*(nsl-2)) :: DTDZS
  255. REAL, DIMENSION(1:4001) :: TBQ
  256. REAL, DIMENSION( 1:nsl ) :: SOILM1D, &
  257. TSO1D, &
  258. SOILICE, &
  259. SOILIQW, &
  260. SMFRKEEP
  261. REAL, DIMENSION( 1:nsl ) :: KEEPFR
  262. REAL, DIMENSION( 1:nlcat ) :: lufrac
  263. REAL, DIMENSION( 1:nscat ) :: soilfrac
  264. REAL :: RSM, &
  265. SNWEPRINT, &
  266. SNHEIPRINT
  267. REAL :: PRCPMS, &
  268. NEWSNMS, &
  269. PATM, &
  270. PATMB, &
  271. TABS, &
  272. QVATM, &
  273. QCATM, &
  274. Q2SAT, &
  275. CONFLX, &
  276. RHO, &
  277. QKMS, &
  278. TKMS, &
  279. INFILTRP
  280. REAL :: cq,r61,r273,arp,brp,x,evs,eis
  281. REAL :: meltfactor
  282. INTEGER :: NROOT
  283. INTEGER :: ILAND,ISOIL,IFOREST
  284. INTEGER :: I,J,K,NZS,NZS1,NDDZS
  285. INTEGER :: k1,l,k2,kp,km
  286. CHARACTER (LEN=132) :: message
  287. !-----------------------------------------------------------------
  288. NZS=NSL
  289. NDDZS=2*(nzs-2)
  290. !---- table TBQ is for resolution of balance equation in VILKA
  291. CQ=173.15-.05
  292. R273=1./273.15
  293. R61=6.1153*0.62198
  294. ARP=77455.*41.9/461.525
  295. BRP=64.*41.9/461.525
  296. DO K=1,4001
  297. CQ=CQ+.05
  298. ! TBQ(K)=R61*EXP(ARP*(R273-1./CQ)-BRP*LOG(CQ*R273))
  299. EVS=EXP(17.67*(CQ-273.15)/(CQ-29.65))
  300. EIS=EXP(22.514-6.15E3/CQ)
  301. if(CQ.ge.273.15) then
  302. ! tbq is in mb
  303. tbq(k) = R61*evs
  304. else
  305. tbq(k) = R61*eis
  306. endif
  307. END DO
  308. !--- Initialize soil/vegetation parameters
  309. !--- This is temporary until SI is added to mass coordinate ---!!!!!
  310. #if ( NMM_CORE == 1 )
  311. if(ktau+1.eq.1) then
  312. #else
  313. if(ktau.eq.1) then
  314. #endif
  315. DO J=jts,jte
  316. DO i=its,ite
  317. do k=1,nsl
  318. ! smfr3d (i,k,j)=soilmois(i,k,j)/900.*1.e3
  319. ! sh2o (i,k,j)=soilmois(i,k,j)-smfr3d(i,k,j)/1.e3*900.
  320. keepfr3dflag(i,k,j)=0.
  321. enddo
  322. !--- initializing to zero snow fraction
  323. snowc(i,j) = min(1.,snowh(i,j)/0.05)
  324. !--- initializing inside snow temp if it is not defined
  325. IF((soilt1(i,j) .LT. 170.) .or. (soilt1(i,j) .GT.400.)) THEN
  326. IF(snowc(i,j).gt.0.1) THEN
  327. soilt1(i,j)=0.5*(soilt(i,j)+tso(i,1,j))
  328. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  329. WRITE ( message , FMT='(A,F8.3,2I6)' ) &
  330. 'Temperature inside snow is initialized in RUCLSM ', soilt1(i,j),i,j
  331. CALL wrf_debug ( 0 , message )
  332. ENDIF
  333. ELSE
  334. soilt1(i,j) = soilt(i,j)
  335. ENDIF
  336. ENDIF
  337. tsnav(i,j) =0.5*(soilt(i,j)+tso(i,1,j))-273.
  338. qcg (i,j) =0.
  339. patmb=P8w(i,kms,j)*1.e-2
  340. QSG (i,j) = QSN(SOILT(i,j),TBQ)/PATMB
  341. IF((qvg(i,j) .LE. 0.) .or. (qvg(i,j) .GT.0.1)) THEN
  342. qvg (i,j) = QSG(i,j)*mavail(i,j)
  343. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  344. WRITE ( message , FMT='(A,F8.3,2I6)' ) &
  345. 'QVG is initialized in RUCLSM ', qvg(i,j),mavail(i,j),qsg(i,j),i,j
  346. CALL wrf_debug ( 0 , message )
  347. ENDIF
  348. ENDIF
  349. ! qvg (i,j) =qv3d(i,1,j)
  350. ! qsfc(i,j) = qsg(i,j)/(1.+qsg(i,j))
  351. qsfc(i,j) = qvg(i,j)/(1.+qvg(i,j))
  352. SMELT(i,j) = 0.
  353. SNOM (i,j) = 0.
  354. SNFLX(i,j) = 0.
  355. DEW (i,j) = 0.
  356. PC (i,j) = 0.
  357. zntl (i,j) = 0.
  358. RUNOFF1(i,j) = 0.
  359. RUNOFF2(i,j) = 0.
  360. SFCRUNOFF(i,j) = 0.
  361. UDRUNOFF(i,j) = 0.
  362. emissl (i,j) = 0.
  363. ! Temporarily!!!
  364. canwat(i,j)=0.
  365. ! For RUC LSM CHKLOWQ needed for MYJPBL should
  366. ! 1 because is actual specific humidity at the surface, and
  367. ! not the saturation value
  368. chklowq(i,j) = 1.
  369. infiltr(i,j) = 0.
  370. snoh (i,j) = 0.
  371. edir (i,j) = 0.
  372. ec (i,j) = 0.
  373. ett (i,j) = 0.
  374. sublim(i,j) = 0.
  375. sflx (i,j) = 0.
  376. evapl (i,j) = 0.
  377. prcpl (i,j) = 0.
  378. ENDDO
  379. ENDDO
  380. do k=1,nsl
  381. soilice(k)=0.
  382. soiliqw(k)=0.
  383. enddo
  384. endif
  385. !-----------------------------------------------------------------
  386. PRCPMS = 0.
  387. DO J=jts,jte
  388. DO i=its,ite
  389. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  390. print *,' IN LSMRUC ','ims,ime,jms,jme,its,ite,jts,jte,nzs', &
  391. ims,ime,jms,jme,its,ite,jts,jte,nzs
  392. print *,' IVGTYP, ISLTYP ', ivgtyp(i,j),isltyp(i,j)
  393. print *,' MAVAIL ', mavail(i,j)
  394. print *,' SOILT,QVG,P8w',soilt(i,j),qvg(i,j),p8w(i,1,j)
  395. print *, 'LSMRUC, I,J,xland, QFX,HFX from SFCLAY',i,j,xland(i,j), &
  396. qfx(i,j),hfx(i,j)
  397. print *, ' GSW, GLW =',gsw(i,j),glw(i,j)
  398. print *, 'SOILT, TSO start of time step =',soilt(i,j),(tso(i,k,j),k=1,nsl)
  399. print *, 'SOILMOIS start of time step =',(soilmois(i,k,j),k=1,nsl)
  400. print *, 'SMFROZEN start of time step =',(smfr3d(i,k,j),k=1,nsl)
  401. print *, ' I,J=, after SFCLAY CHS,FLHC ',i,j,chs(i,j),flhc(i,j)
  402. print *, 'LSMRUC, IVGTYP,ISLTYP,ALB = ', ivgtyp(i,j),isltyp(i,j),alb(i,j),i,j
  403. print *, 'LSMRUC I,J,DT,RAINBL =',I,J,dt,RAINBL(i,j)
  404. print *, 'XLAND ---->, ivgtype,isoiltyp,i,j',xland(i,j),ivgtyp(i,j),isltyp(i,j),i,j
  405. ENDIF
  406. ILAND = IVGTYP(i,j)
  407. ISOIL = ISLTYP(I,J)
  408. TABS = T3D(i,kms,j)
  409. QVATM = QV3D(i,kms,j)
  410. QCATM = QC3D(i,kms,j)
  411. PATM = P8w(i,kms,j)*1.e-5
  412. !-- Z3D(1) is thickness between first full sigma level and the surface,
  413. !-- but first mass level is at the half of the first sigma level
  414. !-- (u and v are also at the half of first sigma level)
  415. CONFLX = Z3D(i,kms,j)*0.5
  416. RHO = RHO3D(I,kms,J)
  417. !--- 1*e-3 is to convert from mm/s to m/s
  418. IF(FRPCPN) THEN
  419. PRCPMS = (RAINBL(i,j)/DT*1.e-3)*(1-FRZFRAC(I,J))
  420. NEWSNMS = (RAINBL(i,j)/DT*1.e-3)*FRZFRAC(I,J)
  421. ELSE
  422. if (tabs.le.273.15) then
  423. PRCPMS = 0.
  424. NEWSNMS = RAINBL(i,j)/DT*1.e-3
  425. else
  426. PRCPMS = RAINBL(i,j)/DT*1.e-3
  427. NEWSNMS = 0.
  428. endif
  429. ENDIF
  430. ! if (myj) then
  431. QKMS=CHS(i,j)
  432. TKMS=CHS(i,j)
  433. ! else
  434. !--- convert exchange coeff QKMS to [m/s]
  435. ! QKMS=FLQC(I,J)/RHO/MAVAIL(I,J)
  436. ! TKMS=FLHC(I,J)/RHO/CP
  437. ! endif
  438. !--- convert incoming snow and canwat from mm to m
  439. SNWE=SNOW(I,J)*1.E-3
  440. SNHEI=SNOWH(I,J)
  441. CANWATR=CANWAT(I,J)*1.E-3
  442. SNOWFRAC=SNOWC(I,J)
  443. !-----
  444. zsmain(1)=0.
  445. zshalf(1)=0.
  446. do k=2,nzs
  447. zsmain(k)= zs(k)
  448. zshalf(k)=0.5*(zsmain(k-1) + zsmain(k))
  449. enddo
  450. do k=1,nlcat
  451. lufrac(k) = landusef(i,k,j)
  452. enddo
  453. do k=1,nscat
  454. soilfrac(k) = soilctop(i,k,j)
  455. enddo
  456. !------------------------------------------------------------
  457. !----- DDZS and DSDZ1 are for implicit solution of soil eqns.
  458. !-------------------------------------------------------------
  459. NZS1=NZS-1
  460. !-----
  461. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  462. print *,' DT,NZS1, ZSMAIN, ZSHALF --->', dt,nzs1,zsmain,zshalf
  463. ENDIF
  464. DO K=2,NZS1
  465. K1=2*K-3
  466. K2=K1+1
  467. X=DT/2./(ZSHALF(K+1)-ZSHALF(K))
  468. DTDZS(K1)=X/(ZSMAIN(K)-ZSMAIN(K-1))
  469. DTDZS2(K-1)=X
  470. DTDZS(K2)=X/(ZSMAIN(K+1)-ZSMAIN(K))
  471. END DO
  472. !27jul2011 - CN and SAT are defined in VEGPARM.TBL
  473. ! CN=0.5 ! exponent
  474. ! SAT=0.0004 ! canopy water saturated
  475. CW =4.183E6
  476. !--- Constants used in Johansen soil thermal
  477. !--- conductivity method
  478. KQWRTZ=7.7
  479. KICE=2.2
  480. KWT=0.57
  481. !***********************************************************************
  482. !--- Constants for snow density calculations C1SN and C2SN
  483. c1sn=0.026
  484. ! c1sn=0.01
  485. c2sn=21.
  486. !***********************************************************************
  487. NROOT= 4
  488. ! ! rooting depth
  489. RHONEWSN = 200.
  490. if(SNOW(i,j).gt.0. .and. SNOWH(i,j).gt.0.) then
  491. RHOSN = SNOW(i,j)/SNOWH(i,j)
  492. else
  493. RHOSN = 300.
  494. endif
  495. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  496. if(ktau.eq.1 .and.(i.eq.195.and.j.eq.254)) &
  497. print *,'before SOILVEGIN - z0,znt(195,254)',z0(i,j),znt(i,j)
  498. ENDIF
  499. !--- initializing soil and surface properties
  500. CALL SOILVEGIN ( mosaic_lu, mosaic_soil,soilfrac,nscat, &
  501. NLCAT,ILAND,ISOIL,iswater,MYJ,IFOREST,lufrac, &
  502. EMISSL(I,J),PC(I,J),ZNT(I,J),LAI(I,J), &
  503. QWRTZ,RHOCS,BCLH,DQM,KSAT,PSIS,QMIN,REF,WILT,i,j )
  504. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  505. if(ktau.eq.1 .and.(i.eq.195.and.j.eq.254)) &
  506. print *,'after SOILVEGIN - z0,znt(195,254)',z0(i,j),znt(i,j)
  507. if(ktau.eq.1 .and. (i.eq.195.and.j.eq.254)) then
  508. print *,'NLCAT,iland,lufrac,EMISSL(I,J),PC(I,J),ZNT(I,J),LAI(I,J)', &
  509. NLCAT,iland,lufrac,EMISSL(I,J),PC(I,J),ZNT(I,J),LAI(I,J),i,j
  510. print *,'NSCAT,soilfrac,QWRTZ,RHOCS,BCLH,DQM,KSAT,PSIS,QMIN,REF,WILT',&
  511. NSCAT,soilfrac,QWRTZ,RHOCS,BCLH,DQM,KSAT,PSIS,QMIN,REF,WILT,i,j
  512. endif
  513. ENDIF
  514. CN=CFACTR_DATA ! exponent
  515. SAT=max(1.e-4,CMCMAX_DATA * LAI(I,J) * 0.01*VEGFRA(I,J)) ! canopy water saturated
  516. !-- definition of number of soil levels in the rooting zone
  517. ! IF(iforest(ivgtyp(i,j)).ne.1) THEN
  518. IF(iforest.ne.1) THEN
  519. !---- all vegetation types except evergreen and mixed forests
  520. !18apr08 - define meltfactor for Egglston melting limit:
  521. ! for open areas factor is 2, and for forests - factor is 1.5
  522. ! This will make limit on snow melting smaller and let snow stay
  523. ! longer in the forests.
  524. meltfactor = 2.0
  525. do k=2,nzs
  526. if(zsmain(k).ge.0.4) then
  527. NROOT=K
  528. goto 111
  529. endif
  530. enddo
  531. ELSE
  532. !---- evergreen and mixed forests
  533. !18apr08 - define meltfactor
  534. ! meltfactor = 1.5
  535. ! 28 March 11 - Previously used value of metfactor= 1.5 needs to be further reduced
  536. ! to compensate for low snow albedos in the forested areas.
  537. ! Melting rate in forests will reduce.
  538. meltfactor = 0.85
  539. do k=2,nzs
  540. if(zsmain(k).ge.1.1) then
  541. NROOT=K
  542. goto 111
  543. endif
  544. enddo
  545. ENDIF
  546. 111 continue
  547. !-----
  548. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  549. print *,' ZNT, LAI, VEGFRA, SAT, EMIS, PC --->', &
  550. ZNT(I,J),LAI(I,J),VEGFRA(I,J),SAT,EMISSL(I,J),PC(I,J)
  551. print *,' ZS, ZSMAIN, ZSHALF, CONFLX, CN, SAT, --->', zs,zsmain,zshalf,conflx,cn,sat
  552. print *,'NROOT, meltfactor, iforest, ivgtyp, i,j ', nroot,meltfactor,iforest,ivgtyp(I,J),I,J
  553. ! print *,'NROOT, iforest, ivgtyp, i,j ', nroot,iforest(ivgtyp(i,j)),ivgtyp(I,J),I,J
  554. ENDIF
  555. !*** SET ZERO-VALUE FOR SOME OUTPUT DIAGNOSTIC ARRAYS
  556. IF((XLAND(I,J)-1.5).GE.0.)THEN
  557. !-- Water
  558. SMAVAIL(I,J)=1.0
  559. SMMAX(I,J)=1.0
  560. SNOW(I,J)=0.0
  561. SNOWH(I,J)=0.0
  562. SNOWC(I,J)=0.0
  563. LMAVAIL(I,J)=1.0
  564. ILAND=iswater
  565. ! ILAND=16
  566. ISOIL=14
  567. patmb=P8w(i,1,j)*1.e-2
  568. qvg (i,j) = QSN(SOILT(i,j),TBQ)/PATMB
  569. qsfc(i,j) = qvg(i,j)/(1.+qvg(i,j))
  570. CHKLOWQ(I,J)=1.
  571. Q2SAT=QSN(TABS,TBQ)/PATMB
  572. DO K=1,NZS
  573. SOILMOIS(I,K,J)=1.0
  574. SH2O (I,K,J)=1.0
  575. TSO(I,K,J)= SOILT(I,J)
  576. ENDDO
  577. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  578. PRINT*,' water point, I=',I, &
  579. 'J=',J, 'SOILT=', SOILT(i,j)
  580. ENDIF
  581. ELSE
  582. ! LAND POINT OR SEA ICE
  583. if(xice(i,j).ge.xice_threshold) then
  584. ! if(IVGTYP(i,j).eq.isice) then
  585. SEAICE(i,j)=1.
  586. else
  587. SEAICE(i,j)=0.
  588. endif
  589. IF(SEAICE(I,J).GT.0.5)THEN
  590. !-- Sea-ice case
  591. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  592. PRINT*,' sea-ice at water point, I=',I, &
  593. 'J=',J
  594. ENDIF
  595. ! ILAND = 24
  596. ILAND = isice
  597. ISOIL = 16
  598. ZNT(I,J) = 0.011
  599. snoalb(i,j) = 0.75
  600. dqm = 1.
  601. ref = 1.
  602. qmin = 0.
  603. wilt = 0.
  604. emissl(i,j) = 1.0
  605. DO K=1,NZS
  606. soilmois(i,k,j) = 1.
  607. smfr3d(i,k,j) = 1.
  608. sh2o(i,k,j) = 0.
  609. keepfr3dflag(i,k,j) = 0.
  610. ENDDO
  611. ENDIF
  612. ! Attention!!!! RUC LSM uses soil moisture content minus residual (minimum
  613. ! or dry soil moisture content for a given soil type) as a state variable.
  614. DO k=1,nzs
  615. ! soilm1d - soil moisture content minus residual [m**3/m**3]
  616. soilm1d (k) = min(max(0.,soilmois(i,k,j)-qmin),dqm)
  617. ! soilm1d (k) = min(max(0.,soilmois(i,k,j)),dqm)
  618. tso1d (k) = tso(i,k,j)
  619. soiliqw (k) = min(max(0.,sh2o(i,k,j)-qmin),soilm1d(k))
  620. ENDDO
  621. do k=1,nzs
  622. smfrkeep(k) = smfr3d(i,k,j)
  623. keepfr (k) = keepfr3dflag(i,k,j)
  624. enddo
  625. ! LMAVAIL(I,J)=max(0.00001,min(1.,soilmois(i,1,j)/(REF-QMIN)))
  626. ! LMAVAIL(I,J)=max(0.00001,min(1.,soilmois(i,1,j)/dqm))
  627. LMAVAIL(I,J)=max(0.00001,min(1.,soilm1d(1)/dqm))
  628. #if ( NMM_CORE == 1 )
  629. if(ktau+1.gt.1) then
  630. #else
  631. if(ktau.gt.1) then
  632. #endif
  633. ! extract dew from the cloud water at the surface
  634. QCG(I,J)=QCG(I,J)-DEW(I,J)
  635. endif
  636. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  637. print *,'LAND, i,j,tso1d,soilm1d,PATM,TABS,QVATM,QCATM,RHO', &
  638. i,j,tso1d,soilm1d,PATM,TABS,QVATM,QCATM,RHO
  639. print *,'CONFLX =',CONFLX
  640. print *,'SMFRKEEP,KEEPFR ',SMFRKEEP,KEEPFR
  641. ENDIF
  642. !-----------------------------------------------------------------
  643. CALL SFCTMP (dt,ktau,conflx,i,j, &
  644. !--- input variables
  645. nzs,nddzs,nroot,meltfactor, & !added meltfactor
  646. iland,isoil,xland(i,j),ivgtyp(i,j),PRCPMS, &
  647. NEWSNMS,SNWE,SNHEI,SNOWFRAC,RHOSN,RHONEWSN, &
  648. PATM,TABS,QVATM,QCATM,RHO, &
  649. GLW(I,J),GSW(I,J),EMISSL(I,J), &
  650. QKMS,TKMS,PC(I,J),LMAVAIL(I,J), &
  651. canwatr,vegfra(I,J),alb(I,J),znt(I,J), &
  652. snoalb(i,j),albbck(i,j), & !new
  653. myj,seaice(i,j),isice, &
  654. !--- soil fixed fields
  655. QWRTZ, &
  656. rhocs,dqm,qmin,ref, &
  657. wilt,psis,bclh,ksat, &
  658. sat,cn,zsmain,zshalf,DTDZS,DTDZS2,tbq, &
  659. !--- constants
  660. cp,rovcp,g0,lv,stbolt,cw,c1sn,c2sn, &
  661. KQWRTZ,KICE,KWT, &
  662. !--- output variables
  663. snweprint,snheiprint,rsm, &
  664. soilm1d,tso1d,smfrkeep,keepfr, &
  665. soilt(I,J),soilt1(i,j),tsnav(i,j),dew(I,J), &
  666. qvg(I,J),qsg(I,J),qcg(I,J),SMELT(I,J), &
  667. SNOH(I,J),SNFLX(I,J),SNOM(I,J),ACSNOW(I,J), &
  668. edir(I,J),ec(I,J),ett(I,J),qfx(I,J), &
  669. lh(I,J),hfx(I,J),sflx(I,J),sublim(I,J), &
  670. evapl(I,J),prcpl(I,J),runoff1(I,J), &
  671. runoff2(I,J),soilice,soiliqw,infiltrp)
  672. !-----------------------------------------------------------------
  673. !*** DIAGNOSTICS
  674. !--- available and maximum soil moisture content in the soil
  675. !--- domain
  676. smavail(i,j) = 0.
  677. smmax (i,j) = 0.
  678. do k=1,nzs-1
  679. smavail(i,j)=smavail(i,j)+(qmin+soilm1d(k))* &
  680. (zshalf(k+1)-zshalf(k))
  681. smmax (i,j) =smmax (i,j)+(qmin+dqm)* &
  682. (zshalf(k+1)-zshalf(k))
  683. enddo
  684. smavail(i,j)=smavail(i,j)+(qmin+soilm1d(nzs))* &
  685. (zsmain(nzs)-zshalf(nzs))
  686. smmax (i,j) =smmax (i,j)+(qmin+dqm)* &
  687. (zsmain(nzs)-zshalf(nzs))
  688. !--- Convert the water unit into mm
  689. SFCRUNOFF(I,J) = SFCRUNOFF(I,J)+RUNOFF1(I,J)*DT*1000.0
  690. UDRUNOFF (I,J) = UDRUNOFF(I,J)+RUNOFF2(I,J)*1000.0
  691. SMAVAIL (I,J) = SMAVAIL(I,J) * 1000.
  692. SMMAX (I,J) = SMMAX(I,J) * 1000.
  693. do k=1,nzs
  694. ! soilmois(i,k,j) = soilm1d(k)
  695. soilmois(i,k,j) = soilm1d(k) + qmin
  696. sh2o (i,k,j) = min(soiliqw(k) + qmin,soilmois(i,k,j))
  697. tso(i,k,j) = tso1d(k)
  698. enddo
  699. tso(i,nzs,j) = tbot(i,j)
  700. do k=1,nzs
  701. smfr3d(i,k,j) = smfrkeep(k)
  702. keepfr3dflag(i,k,j) = keepfr (k)
  703. enddo
  704. !tgs add together dew and cloud at the ground surface
  705. qcg(i,j)=qcg(i,j)+dew(i,j)
  706. Z0 (I,J) = ZNT (I,J)
  707. SFCEXC (I,J) = TKMS
  708. patmb=P8w(i,1,j)*1.e-2
  709. Q2SAT=QSN(TABS,TBQ)/PATMB
  710. QSFC(I,J) = QVG(I,J)/(1.+QVG(I,J))
  711. ! for MYJ surface and PBL scheme
  712. ! if (myj) then
  713. ! MYJSFC expects QSFC as actual specific humidity at the surface
  714. IF((QVATM.GE.Q2SAT*0.95).AND.QVATM.LT.qvg(I,J))THEN
  715. CHKLOWQ(I,J)=0.
  716. ELSE
  717. CHKLOWQ(I,J)=1.
  718. ENDIF
  719. ! else
  720. ! CHKLOWQ(I,J)=1.
  721. ! endif
  722. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  723. if(CHKLOWQ(I,J).eq.0.) then
  724. print *,'i,j,CHKLOWQ', &
  725. i,j,CHKLOWQ(I,J)
  726. endif
  727. ENDIF
  728. ! SNOW is in [mm], SNWE is in [m]; CANWAT is in mm, CANWATR is in m
  729. SNOW (i,j) = SNWE*1000.
  730. SNOWH (I,J) = SNHEI
  731. CANWAT (I,J) = CANWATR*1000.
  732. INFILTR(I,J) = INFILTRP
  733. MAVAIL (i,j) = LMAVAIL(I,J)
  734. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  735. print *,' LAND, I=,J=, QFX, HFX after SFCTMP', i,j,lh(i,j),hfx(i,j)
  736. ENDIF
  737. !!! QFX (I,J) = LH(I,J)/LV
  738. SFCEVP (I,J) = SFCEVP (I,J) + QFX (I,J) * DT
  739. GRDFLX (I,J) = -1. * sflx(I,J)
  740. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  741. print *,' QFX after change, LH ', i,j, QFX(i,j),LH(I,J)
  742. ENDIF
  743. !--- SNOWC snow cover flag
  744. if(snowfrac > 0. .and. xice(i,j).ge.xice_threshold ) then
  745. SNOWFRAC = SNOWFRAC*XICE(I,J)
  746. endif
  747. SNOWC(I,J)=SNOWFRAC
  748. !--- get 3d soil fields
  749. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  750. print *,'LAND, i,j,tso1d,soilm1d - end of time step', &
  751. i,j,tso1d,soilm1d
  752. ENDIF
  753. !--- end of a land or sea ice point
  754. ENDIF
  755. ENDDO
  756. ENDDO
  757. !-----------------------------------------------------------------
  758. END SUBROUTINE LSMRUC
  759. !-----------------------------------------------------------------
  760. SUBROUTINE SFCTMP (delt,ktau,conflx,i,j, &
  761. !--- input variables
  762. nzs,nddzs,nroot,meltfactor, &
  763. ILAND,ISOIL,XLAND,IVGTYP,PRCPMS, &
  764. NEWSNMS,SNWE,SNHEI,SNOWFRAC,RHOSN,RHONEWSN, &
  765. PATM,TABS,QVATM,QCATM,rho, &
  766. GLW,GSW,EMISS,QKMS,TKMS,PC, &
  767. MAVAIL,CST,VEGFRA,ALB,ZNT, &
  768. ALB_SNOW,ALB_SNOW_FREE, &
  769. MYJ,SEAICE,ISICE, &
  770. !--- soil fixed fields
  771. QWRTZ,rhocs,dqm,qmin,ref,wilt,psis,bclh,ksat, &
  772. sat,cn,zsmain,zshalf,DTDZS,DTDZS2,tbq, &
  773. !--- constants
  774. cp,rovcp,g0,lv,stbolt,cw,c1sn,c2sn, &
  775. KQWRTZ,KICE,KWT, &
  776. !--- output variables
  777. snweprint,snheiprint,rsm, &
  778. soilm1d,ts1d,smfrkeep,keepfr,soilt,soilt1, &
  779. tsnav,dew,qvg,qsg,qcg, &
  780. SMELT,SNOH,SNFLX,SNOM,ACSNOW, &
  781. edir1,ec1,ett1,eeta,qfx,hfx,s,sublim, &
  782. evapl,prcpl,runoff1,runoff2,soilice, &
  783. soiliqw,infiltr)
  784. !-----------------------------------------------------------------
  785. IMPLICIT NONE
  786. !-----------------------------------------------------------------
  787. !--- input variables
  788. INTEGER, INTENT(IN ) :: isice,i,j,nroot,ktau,nzs , &
  789. nddzs !nddzs=2*(nzs-2)
  790. REAL, INTENT(IN ) :: DELT,CONFLX,meltfactor
  791. REAL, INTENT(IN ) :: C1SN,C2SN
  792. LOGICAL, INTENT(IN ) :: myj
  793. !--- 3-D Atmospheric variables
  794. REAL , &
  795. INTENT(IN ) :: PATM, &
  796. TABS, &
  797. QVATM, &
  798. QCATM
  799. REAL , &
  800. INTENT(IN ) :: GLW, &
  801. GSW, &
  802. PC, &
  803. VEGFRA, &
  804. ALB_SNOW_FREE, &
  805. SEAICE, &
  806. XLAND, &
  807. RHO, &
  808. QKMS, &
  809. TKMS
  810. INTEGER, INTENT(IN ) :: IVGTYP
  811. !--- 2-D variables
  812. REAL , &
  813. INTENT(INOUT) :: EMISS, &
  814. MAVAIL, &
  815. SNOWFRAC, &
  816. ALB_SNOW, &
  817. ALB, &
  818. CST
  819. !--- soil properties
  820. REAL :: &
  821. RHOCS, &
  822. BCLH, &
  823. DQM, &
  824. KSAT, &
  825. PSIS, &
  826. QMIN, &
  827. QWRTZ, &
  828. REF, &
  829. SAT, &
  830. WILT
  831. REAL, INTENT(IN ) :: CN, &
  832. CW, &
  833. CP, &
  834. ROVCP, &
  835. G0, &
  836. LV, &
  837. STBOLT, &
  838. KQWRTZ, &
  839. KICE, &
  840. KWT
  841. REAL, DIMENSION(1:NZS), INTENT(IN) :: ZSMAIN, &
  842. ZSHALF, &
  843. DTDZS2
  844. REAL, DIMENSION(1:NDDZS), INTENT(IN) :: DTDZS
  845. REAL, DIMENSION(1:4001), INTENT(IN) :: TBQ
  846. !--- input/output variables
  847. !-------- 3-d soil moisture and temperature
  848. REAL, DIMENSION( 1:nzs ) , &
  849. INTENT(INOUT) :: TS1D, &
  850. SOILM1D, &
  851. SMFRKEEP
  852. REAL, DIMENSION( 1:nzs ) , &
  853. INTENT(INOUT) :: KEEPFR
  854. INTEGER, INTENT(INOUT) :: ILAND,ISOIL
  855. !-------- 2-d variables
  856. REAL , &
  857. INTENT(INOUT) :: DEW, &
  858. EDIR1, &
  859. EC1, &
  860. ETT1, &
  861. EETA, &
  862. EVAPL, &
  863. INFILTR, &
  864. RHOSN, &
  865. RHONEWSN, &
  866. SUBLIM, &
  867. PRCPL, &
  868. QVG, &
  869. QSG, &
  870. QCG, &
  871. QFX, &
  872. HFX, &
  873. S, &
  874. RUNOFF1, &
  875. RUNOFF2, &
  876. ACSNOW, &
  877. SNWE, &
  878. SNHEI, &
  879. SMELT, &
  880. SNOM, &
  881. SNOH, &
  882. SNFLX, &
  883. SOILT, &
  884. SOILT1, &
  885. TSNAV, &
  886. ZNT
  887. REAL, DIMENSION(1:NZS) :: &
  888. tice, &
  889. rhosice, &
  890. capice, &
  891. thdifice
  892. !-------- 1-d variables
  893. REAL, DIMENSION(1:NZS), INTENT(OUT) :: SOILICE, &
  894. SOILIQW
  895. REAL, INTENT(OUT) :: RSM, &
  896. SNWEPRINT, &
  897. SNHEIPRINT
  898. !--- Local variables
  899. INTEGER :: K,ILNB
  900. REAL :: BSN, XSN , &
  901. RAINF, SNTH, NEWSN, PRCPMS, NEWSNMS , &
  902. T3, UPFLUX, XINET
  903. REAL :: snhei_crit, keep_snow_albedo
  904. REAL :: RNET,GSWNEW,EMISSN,ZNTSN
  905. REAL :: VEGFRAC
  906. real :: cice, albice, albsn
  907. !-----------------------------------------------------------------
  908. integer, parameter :: ilsnow=99
  909. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  910. print *,' in SFCTMP',i,j,nzs,nddzs,nroot, &
  911. SNWE,RHOSN,SNOM,SMELT,TS1D
  912. ENDIF
  913. NEWSN=0.
  914. RAINF = 0.
  915. RSM=0.
  916. INFILTR=0.
  917. VEGFRAC=0.01*VEGFRA
  918. ! if(VEGFRAC.le.0.01) VEGFRAC=0.
  919. !---initialize local arrays for sea ice
  920. do k=1,nzs
  921. tice(k) = 0.
  922. rhosice(k) = 0.
  923. cice = 0.
  924. capice(k) = 0.
  925. thdifice(k) = 0.
  926. enddo
  927. GSWnew=GSW
  928. ALBice=ALB_SNOW_FREE
  929. !--- sea ice properties
  930. !--- N.N Zubov "Arctic Ice"
  931. !--- no salinity dependence because we consider the ice pack
  932. !--- to be old and to have low salinity (0.0002)
  933. if(SEAICE.ge.0.5) then
  934. do k=1,nzs
  935. tice(k) = ts1d(k) - 273.15
  936. rhosice(k) = 917.6/(1-0.000165*tice(k))
  937. cice = 2115.85 +7.7948*tice(k)
  938. capice(k) = cice*rhosice(k)
  939. thdifice(k) = 2.260872/capice(k)
  940. enddo
  941. !-- SEA ICE ALB dependence on ice temperature. When ice temperature is
  942. !-- below critical value of -10C - no change to albedo.
  943. !-- If temperature is higher that -10C then albedo is decreasing.
  944. !-- The minimum albedo at t=0C for ice is 0.1 less.
  945. GSWNEW=GSW/(1.-ALB)
  946. ALBice = MIN(ALB_SNOW_FREE,MAX(ALB_SNOW_FREE - 0.05, &
  947. ALB_SNOW_FREE - 0.1*(tice(1)+10.)/10. ))
  948. GSWNEW=GSW*(1.-ALBice)
  949. endif
  950. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  951. print *,'I,J,KTAU,QKMS,TKMS', i,j,ktau,qkms,tkms
  952. print *,'GSW,GSWnew,GLW,SOILT,EMISS,ALB,ALBice,SNWE',&
  953. GSW,GSWnew,GLW,SOILT,EMISS,ALB,ALBice,SNWE
  954. ENDIF
  955. SNHEI = SNWE * 1000. / RHOSN
  956. !--------------
  957. T3 = STBOLT*SOILT*SOILT*SOILT
  958. UPFLUX = T3 *SOILT
  959. XINET = EMISS*(GLW-UPFLUX)
  960. RNET = GSWnew + XINET
  961. !Calculate the amount (m) of fresh snow
  962. if(snhei.gt.0.0081*1.e3/rhosn) then
  963. !*** Correct snow density for current temperature (Koren et al. 1999)
  964. BSN=delt/3600.*c1sn*exp(0.08*tsnav-c2sn*rhosn*1.e-3)
  965. if(bsn*snwe*100..lt.1.e-4) goto 777
  966. XSN=rhosn*(exp(bsn*snwe*100.)-1.)/(bsn*snwe*100.)
  967. rhosn=MIN(MAX(100.,XSN),400.)
  968. ! rhosn=MIN(MAX(50.,XSN),400.)
  969. 777 continue
  970. ! else
  971. ! rhosn =200.
  972. ! rhonewsn =200.
  973. endif
  974. newsn=newsnms*delt
  975. !---- ACSNOW - accumulated snow water [kg m-2]
  976. acsnow=acsnow+newsn*1.e3
  977. IF(NEWSN.GT.0.) THEN
  978. ! IF(NEWSN.GE.1.E-8) THEN
  979. !*** Calculate fresh snow density (t > -15C, else MIN value)
  980. !*** Eq. 10 from Koren et al. (1999)
  981. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  982. print *, 'THERE IS NEW SNOW, newsn', newsn
  983. ENDIF
  984. if(tabs.lt.258.15) then
  985. ! rhonewsn=50.
  986. rhonewsn=100.
  987. else
  988. rhonewsn=1.e3*max((0.10+0.0017*(Tabs-273.15+15.)**1.5) &
  989. , 0.10)
  990. ! rhonewsn=1.e3*max((0.05+0.0017*(Tabs-273.15+15.)**1.5) &
  991. ! , 0.05)
  992. rhonewsn=MIN(rhonewsn,400.)
  993. ! rhonewsn=100.
  994. endif
  995. !*** Define average snow density of the snow pack considering
  996. !*** the amount of fresh snow (eq. 9 in Koren et al.(1999)
  997. !*** without snow melt )
  998. xsn=(rhosn*snwe+rhonewsn*newsn)/ &
  999. (snwe+newsn)
  1000. rhosn=MIN(MAX(100.,XSN),400.)
  1001. ! rhosn=MIN(MAX(50.,XSN),400.)
  1002. snwe=snwe+newsn
  1003. snhei=snwe*1.E3/rhosn
  1004. NEWSN=NEWSN*1.E3/rhonewsn
  1005. ENDIF
  1006. IF(PRCPMS.NE.0.) THEN
  1007. ! PRCPMS is liquid precipitation rate
  1008. ! RAINF is a flag used for calculation of rain water
  1009. ! heat content contribution into heat budget equation. Rain's temperature
  1010. ! is set equal to air temperature at the first atmospheric
  1011. ! level.
  1012. RAINF=1.
  1013. ENDIF
  1014. IF(SNHEI.GT.0.0) THEN
  1015. !--- Set of surface parameters should be changed to snow values for grid
  1016. !--- points where the snow cover exceeds snow threshold of 2 cm
  1017. ILAND=ISICE
  1018. SNHEI_CRIT=0.01601*1.e3/rhosn
  1019. ! SNOWFRAC=MIN(1.,SNHEI/SNHEI_CRIT)
  1020. SNOWFRAC=MIN(1.,SNHEI/(2.*SNHEI_CRIT))
  1021. !tgs - low limit on snow fraction
  1022. ! if(SNOWFRAC.lt.0.01) snowfrac=0.
  1023. !--- EMISS = 0.98 for snow
  1024. EMISS = EMISS*(1.-snowfrac)+0.98*snowfrac
  1025. !-- Set znt for snow from VEGPARM table (snow/ice landuse), except for
  1026. !-- land-use types with higher roughness (forests, urban).
  1027. IF(znt.lt.0.2 .and. snowfrac.gt.0.99) znt=z0tbl(iland)
  1028. KEEP_SNOW_ALBEDO = 0.
  1029. IF (NEWSN.GT.0.) KEEP_SNOW_ALBEDO = 1.
  1030. !--- GSW in-coming solar
  1031. GSWNEW=GSW/(1.-ALB)
  1032. IF(SEAICE .LT. 0.5) THEN
  1033. !----- SNOW on soil
  1034. !-- ALB dependence on snow depth
  1035. ALBsn = MAX(keep_snow_albedo*alb_snow, &
  1036. MIN((alb_snow_free + &
  1037. (alb_snow - alb_snow_free) * snowfrac), alb_snow))
  1038. !28mar11 if canopy is covered with snow to its capacity and snow depth is
  1039. ! higher than patchy snow treshold - then snow albedo is not less than 0.7
  1040. if(cst.ge.sat .and. snowfrac .eq.1.) albsn=max(alb_snow,0.7)
  1041. !-- ALB dependence on snow temperature. When snow temperature is
  1042. !-- below critical value of -10C - no change to albedo.
  1043. !-- If temperature is higher that -10C then albedo is decreasing.
  1044. !-- The minimum albedo at t=0C for snow on land is 15% less than
  1045. !-- albedo of temperatures below -10C.
  1046. if(albsn.lt.0.5) then
  1047. ALB=ALBsn
  1048. else
  1049. !-- change albedo when no fresh snow and snow albedo is higher than 0.5
  1050. ALB = MIN(ALBSN,MAX(ALBSN - 0.1*(soilt - 263.15)/ &
  1051. (273.15-263.15)*ALBSN, ALBSN - 0.05))
  1052. endif
  1053. ELSE
  1054. !----- SNOW on ice
  1055. ALBsn = MAX(keep_snow_albedo*alb_snow, &
  1056. MIN((albice + (alb_snow - albice) * snowfrac), alb_snow))
  1057. !-- ALB dependence on snow temperature. When snow temperature is
  1058. !-- below critical value of -10C - no change to albedo.
  1059. !-- If temperature is higher that -10C then albedo is decreasing.
  1060. if(albsn.lt.alb_snow .or. keep_snow_albedo .eq.1.)then
  1061. ALB=ALBsn
  1062. else
  1063. !-- change albedo when no fresh snow
  1064. ALB = MIN(ALBSN,MAX(ALBSN - 0.15*ALBSN*(soilt - 263.15)/ &
  1065. (273.15-263.15), ALBSN - 0.1))
  1066. endif
  1067. ENDIF
  1068. !--- recompute absorbed solar radiation and net radiation
  1069. !--- for new value of albedo
  1070. gswnew=gswnew*(1.-alb)
  1071. XINET = EMISS*(GLW-UPFLUX)
  1072. RNET = GSWnew + XINET
  1073. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  1074. print *,'I,J,GSW,GSWnew,GLW,UPFLUX,ALB',&
  1075. i,j,GSW,GSWnew,GLW,UPFLUX,ALB
  1076. ENDIF
  1077. if (SEAICE .LT. 0.5) then
  1078. ! LAND
  1079. CALL SNOWSOIL ( & !--- input variables
  1080. i,j,isoil,delt,ktau,conflx,nzs,nddzs,nroot, &
  1081. meltfactor,rhonewsn, & ! new
  1082. ILAND,PRCPMS,RAINF,NEWSN,snhei,SNWE,snowfrac, &
  1083. RHOSN,PATM,QVATM,QCATM, &
  1084. GLW,GSWnew,EMISS,RNET,IVGTYP, &
  1085. QKMS,TKMS,PC,CST, &
  1086. RHO,VEGFRAC,ALB,ZNT, &
  1087. MYJ, &
  1088. !--- soil fixed fields
  1089. QWRTZ,rhocs,dqm,qmin,ref,wilt,psis,bclh,ksat, &
  1090. sat,cn,zsmain,zshalf,DTDZS,DTDZS2,tbq, &
  1091. !--- constants
  1092. lv,CP,rovcp,G0,cw,stbolt,tabs, &
  1093. KQWRTZ,KICE,KWT, &
  1094. !--- output variables
  1095. ilnb,snweprint,snheiprint,rsm, &
  1096. soilm1d,ts1d,smfrkeep,keepfr, &
  1097. dew,soilt,soilt1,tsnav,qvg,qsg,qcg, &
  1098. SMELT,SNOH,SNFLX,SNOM,edir1,ec1,ett1,eeta, &
  1099. qfx,hfx,s,sublim,prcpl,runoff1,runoff2, &
  1100. mavail,soilice,soiliqw,infiltr )
  1101. else
  1102. ! SEA ICE
  1103. CALL SNOWSEAICE ( &
  1104. i,j,isoil,delt,ktau,conflx,nzs,nddzs, &
  1105. meltfactor,rhonewsn, & ! new
  1106. ILAND,PRCPMS,RAINF,NEWSN,snhei,SNWE,snowfrac, &
  1107. RHOSN,PATM,QVATM,QCATM, &
  1108. GLW,GSWnew,EMISS,RNET, &
  1109. QKMS,TKMS,RHO, &
  1110. !--- sea ice parameters
  1111. ALB,ZNT, &
  1112. tice,rhosice,capice,thdifice, &
  1113. zsmain,zshalf,DTDZS,DTDZS2,tbq, &
  1114. !--- constants
  1115. lv,CP,rovcp,cw,stbolt,tabs, &
  1116. !--- output variables
  1117. ilnb,snweprint,snheiprint,rsm,ts1d, &
  1118. dew,soilt,soilt1,tsnav,qvg,qsg,qcg, &
  1119. SMELT,SNOH,SNFLX,SNOM,eeta, &
  1120. qfx,hfx,s,sublim,prcpl &
  1121. )
  1122. edir1 = eeta
  1123. ec1 = 0.
  1124. ett1 = 0.
  1125. runoff1 = smelt
  1126. runoff2 = 0.
  1127. mavail = 1.
  1128. infiltr=0.
  1129. cst=0.
  1130. do k=1,nzs
  1131. soilm1d(k)=1.
  1132. soiliqw(k)=0.
  1133. soilice(k)=1.
  1134. smfrkeep(k)=1.
  1135. keepfr(k)=0.
  1136. enddo
  1137. endif
  1138. if(snhei.eq.0.) then
  1139. !--- all snow is melted
  1140. alb=alb_snow_free
  1141. iland=ivgtyp
  1142. endif
  1143. ELSE
  1144. !--- no snow
  1145. snheiprint=0.
  1146. snweprint=0.
  1147. if(SEAICE .LT. 0.5) then
  1148. ! LAND
  1149. CALL SOIL( &
  1150. !--- input variables
  1151. i,j,iland,isoil,delt,ktau,conflx,nzs,nddzs,nroot, &
  1152. PRCPMS,RAINF,PATM,QVATM,QCATM,GLW,GSWnew, &
  1153. EMISS,RNET,QKMS,TKMS,PC,cst,rho,vegfrac, &
  1154. !--- soil fixed fields
  1155. QWRTZ,rhocs,dqm,qmin,ref,wilt, &
  1156. psis,bclh,ksat,sat,cn, &
  1157. zsmain,zshalf,DTDZS,DTDZS2,tbq, &
  1158. !--- constants
  1159. lv,CP,rovcp,G0,cw,stbolt,tabs, &
  1160. KQWRTZ,KICE,KWT, &
  1161. !--- output variables
  1162. soilm1d,ts1d,smfrkeep,keepfr, &
  1163. dew,soilt,qvg,qsg,qcg,edir1,ec1, &
  1164. ett1,eeta,qfx,hfx,s,evapl,prcpl,runoff1, &
  1165. runoff2,mavail,soilice,soiliqw, &
  1166. infiltr)
  1167. else
  1168. ! SEA ICE
  1169. CALL SICE( &
  1170. !--- input variables
  1171. i,j,iland,isoil,delt,ktau,conflx,nzs,nddzs,nroot, &
  1172. PRCPMS,RAINF,PATM,QVATM,QCATM,GLW,GSWnew, &
  1173. EMISS,RNET,QKMS,TKMS,rho, &
  1174. !--- sea ice parameters
  1175. tice,rhosice,capice,thdifice, &
  1176. zsmain,zshalf,DTDZS,DTDZS2,tbq, &
  1177. !--- constants
  1178. lv,CP,rovcp,cw,stbolt,tabs, &
  1179. !--- output variables
  1180. ts1d,dew,soilt,qvg,qsg,qcg, &
  1181. eeta,qfx,hfx,s,evapl,prcpl &
  1182. )
  1183. edir1 = eeta
  1184. ec1 = 0.
  1185. ett1 = 0.
  1186. runoff1 = prcpms
  1187. runoff2 = 0.
  1188. mavail = 1.
  1189. infiltr=0.
  1190. cst=0.
  1191. do k=1,nzs
  1192. soilm1d(k)=1.
  1193. soiliqw(k)=0.
  1194. soilice(k)=1.
  1195. smfrkeep(k)=1.
  1196. keepfr(k)=0.
  1197. enddo
  1198. endif
  1199. ENDIF
  1200. ! ENDIF
  1201. !
  1202. ! RETURN
  1203. ! END
  1204. !---------------------------------------------------------------
  1205. END SUBROUTINE SFCTMP
  1206. !---------------------------------------------------------------
  1207. FUNCTION QSN(TN,T)
  1208. !****************************************************************
  1209. REAL, DIMENSION(1:4001), INTENT(IN ) :: T
  1210. REAL, INTENT(IN ) :: TN
  1211. REAL QSN, R,R1,R2
  1212. INTEGER I
  1213. R=(TN-173.15)/.05+1.
  1214. I=INT(R)
  1215. IF(I.GE.1) goto 10
  1216. I=1
  1217. R=1.
  1218. 10 IF(I.LE.4000) GOTO 20
  1219. I=4000
  1220. R=4001.
  1221. 20 R1=T(I)
  1222. R2=R-I
  1223. QSN=(T(I+1)-R1)*R2 + R1
  1224. ! print *,' in QSN, I,R,R1,R2,T(I+1),TN, QSN', I,R,r1,r2,t(i+1),tn,QSN
  1225. ! RETURN
  1226. ! END
  1227. !-----------------------------------------------------------------------
  1228. END FUNCTION QSN
  1229. !------------------------------------------------------------------------
  1230. SUBROUTINE SOIL ( &
  1231. !--- input variables
  1232. i,j,iland,isoil,delt,ktau,conflx,nzs,nddzs,nroot,&
  1233. PRCPMS,RAINF,PATM,QVATM,QCATM, &
  1234. GLW,GSW,EMISS,RNET, &
  1235. QKMS,TKMS,PC,cst,rho,vegfrac, &
  1236. !--- soil fixed fields
  1237. QWRTZ,rhocs,dqm,qmin,ref,wilt,psis,bclh,ksat, &
  1238. sat,cn,zsmain,zshalf,DTDZS,DTDZS2,tbq, &
  1239. !--- constants
  1240. xlv,CP,rovcp,G0_P,cw,stbolt,TABS, &
  1241. KQWRTZ,KICE,KWT, &
  1242. !--- output variables
  1243. soilmois,tso,smfrkeep,keepfr, &
  1244. dew,soilt,qvg,qsg,qcg, &
  1245. edir1,ec1,ett1,eeta,qfx,hfx,s,evapl, &
  1246. prcpl,runoff1,runoff2,mavail,soilice, &
  1247. soiliqw,infiltrp)
  1248. !*************************************************************
  1249. ! Energy and moisture budget for vegetated surfaces
  1250. ! without snow, heat diffusion and Richards eqns. in
  1251. ! soil
  1252. !
  1253. ! DELT - time step (s)
  1254. ! ktau - numver of time step
  1255. ! CONFLX - depth of constant flux layer (m)
  1256. ! J,I - the location of grid point
  1257. ! IME, JME, KME, NZS - dimensions of the domain
  1258. ! NROOT - number of levels within the root zone
  1259. ! PRCPMS - precipitation rate in m/s
  1260. ! PATM - pressure [bar]
  1261. ! QVATM,QCATM - cloud and water vapor mixing ratio (kg/kg)
  1262. ! at the first atm. level
  1263. ! GLW, GSW - incoming longwave and absorbed shortwave
  1264. ! radiation at the surface (W/m^2)
  1265. ! EMISS,RNET - emissivity of the ground surface (0-1) and net
  1266. ! radiation at the surface (W/m^2)
  1267. ! QKMS - exchange coefficient for water vapor in the
  1268. ! surface layer (m/s)
  1269. ! TKMS - exchange coefficient for heat in the surface
  1270. ! layer (m/s)
  1271. ! PC - plant coefficient (resistance) (0-1)
  1272. ! RHO - density of atmosphere near sueface (kg/m^3)
  1273. ! VEGFRAC - greeness fraction
  1274. ! RHOCS - volumetric heat capacity of dry soil
  1275. ! DQM, QMIN - porosity minus residual soil moisture QMIN (m^3/m^3)
  1276. ! REF, WILT - field capacity soil moisture and the
  1277. ! wilting point (m^3/m^3)
  1278. ! PSIS - matrix potential at saturation (m)
  1279. ! BCLH - exponent for Clapp-Hornberger parameterization
  1280. ! KSAT - saturated hydraulic conductivity (m/s)
  1281. ! SAT - maximum value of water intercepted by canopy (m)
  1282. ! CN - exponent for calculation of canopy water
  1283. ! ZSMAIN - main levels in soil (m)
  1284. ! ZSHALF - middle of the soil layers (m)
  1285. ! DTDZS,DTDZS2 - dt/(2.*dzshalf*dzmain) and dt/dzshalf in soil
  1286. ! TBQ - table to define saturated mixing ration
  1287. ! of water vapor for given temperature and pressure
  1288. ! SOILMOIS,TSO - soil moisture (m^3/m^3) and temperature (K)
  1289. ! DEW - dew in kg/m^2s
  1290. ! SOILT - skin temperature (K)
  1291. ! QSG,QVG,QCG - saturated mixing ratio, mixing ratio of
  1292. ! water vapor and cloud at the ground
  1293. ! surface, respectively (kg/kg)
  1294. ! EDIR1, EC1, ETT1, EETA - direct evaporation, evaporation of
  1295. ! canopy water, transpiration in kg m-2 s-1 and total
  1296. ! evaporation in m s-1.
  1297. ! QFX, HFX - latent and sensible heat fluxes (W/m^2)
  1298. ! S - soil heat flux in the top layer (W/m^2)
  1299. ! RUNOFF - surface runoff (m/s)
  1300. ! RUNOFF2 - underground runoff (m)
  1301. ! MAVAIL - moisture availability in the top soil layer (0-1)
  1302. ! INFILTRP - infiltration flux from the top of soil domain (m/s)
  1303. !
  1304. !*****************************************************************
  1305. IMPLICIT NONE
  1306. !-----------------------------------------------------------------
  1307. !--- input variables
  1308. INTEGER, INTENT(IN ) :: nroot,ktau,nzs , &
  1309. nddzs !nddzs=2*(nzs-2)
  1310. INTEGER, INTENT(IN ) :: i,j,iland,isoil
  1311. REAL, INTENT(IN ) :: DELT,CONFLX
  1312. !--- 3-D Atmospheric variables
  1313. REAL, &
  1314. INTENT(IN ) :: PATM, &
  1315. QVATM, &
  1316. QCATM
  1317. !--- 2-D variables
  1318. REAL, &
  1319. INTENT(IN ) :: GLW, &
  1320. GSW, &
  1321. EMISS, &
  1322. RHO, &
  1323. PC, &
  1324. VEGFRAC, &
  1325. QKMS, &
  1326. TKMS
  1327. !--- soil properties
  1328. REAL, &
  1329. INTENT(IN ) :: RHOCS, &
  1330. BCLH, &
  1331. DQM, &
  1332. KSAT, &
  1333. PSIS, &
  1334. QMIN, &
  1335. QWRTZ, &
  1336. REF, &
  1337. WILT
  1338. REAL, INTENT(IN ) :: CN, &
  1339. CW, &
  1340. KQWRTZ, &
  1341. KICE, &
  1342. KWT, &
  1343. XLV, &
  1344. g0_p
  1345. REAL, DIMENSION(1:NZS), INTENT(IN) :: ZSMAIN, &
  1346. ZSHALF, &
  1347. DTDZS2
  1348. REAL, DIMENSION(1:NDDZS), INTENT(IN) :: DTDZS
  1349. REAL, DIMENSION(1:4001), INTENT(IN) :: TBQ
  1350. !--- input/output variables
  1351. !-------- 3-d soil moisture and temperature
  1352. REAL, DIMENSION( 1:nzs ) , &
  1353. INTENT(INOUT) :: TSO, &
  1354. SOILMOIS, &
  1355. SMFRKEEP
  1356. REAL, DIMENSION( 1:nzs ) , &
  1357. INTENT(INOUT) :: KEEPFR
  1358. !-------- 2-d variables
  1359. REAL, &
  1360. INTENT(INOUT) :: DEW, &
  1361. CST, &
  1362. EDIR1, &
  1363. EC1, &
  1364. ETT1, &
  1365. EETA, &
  1366. EVAPL, &
  1367. PRCPL, &
  1368. MAVAIL, &
  1369. QVG, &
  1370. QSG, &
  1371. QCG, &
  1372. RNET, &
  1373. QFX, &
  1374. HFX, &
  1375. S, &
  1376. SAT, &
  1377. RUNOFF1, &
  1378. RUNOFF2, &
  1379. SOILT
  1380. !-------- 1-d variables
  1381. REAL, DIMENSION(1:NZS), INTENT(OUT) :: SOILICE, &
  1382. SOILIQW
  1383. !--- Local variables
  1384. REAL :: INFILTRP, transum , &
  1385. RAINF, PRCPMS , &
  1386. TABS, T3, UPFLUX, XINET
  1387. REAL :: CP,rovcp,G0,LV,STBOLT,xlmelt,dzstop , &
  1388. can,epot,fac,fltot,ft,fq,hft , &
  1389. q1,ras,rhoice,sph , &
  1390. trans,zn,ci,cvw,tln,tavln,pi , &
  1391. DD1,CMC2MS,DRYCAN,WETCAN , &
  1392. INFMAX,RIW
  1393. REAL, DIMENSION(1:NZS) :: transp,cap,diffu,hydro , &
  1394. thdif,tranf,tav,soilmoism , &
  1395. soilicem,soiliqwm,detal , &
  1396. fwsat,lwsat,told,smold
  1397. REAL :: drip
  1398. INTEGER :: nzs1,nzs2,k
  1399. !-----------------------------------------------------------------
  1400. !-- define constants
  1401. ! STBOLT=5.670151E-8
  1402. RHOICE=900.
  1403. CI=RHOICE*2100.
  1404. XLMELT=3.35E+5
  1405. cvw=cw
  1406. ! SAT=0.0004
  1407. prcpl=prcpms
  1408. !--- Initializing local arrays
  1409. DO K=1,NZS
  1410. TRANSP (K)=0.
  1411. soilmoism(k)=0.
  1412. soilice (k)=0.
  1413. soiliqw (k)=0.
  1414. soilicem (k)=0.
  1415. soiliqwm (k)=0.
  1416. lwsat (k)=0.
  1417. fwsat (k)=0.
  1418. tav (k)=0.
  1419. cap (k)=0.
  1420. thdif (k)=0.
  1421. diffu (k)=0.
  1422. hydro (k)=0.
  1423. tranf (k)=0.
  1424. detal (k)=0.
  1425. told (k)=0.
  1426. smold (k)=0.
  1427. ENDDO
  1428. NZS1=NZS-1
  1429. NZS2=NZS-2
  1430. dzstop=1./(zsmain(2)-zsmain(1))
  1431. RAS=RHO*1.E-3
  1432. RIW=rhoice*1.e-3
  1433. !--- Computation of volumetric content of ice in soil
  1434. DO K=1,NZS
  1435. !- main levels
  1436. tln=log(tso(k)/273.15)
  1437. if(tln.lt.0.) then
  1438. soiliqw(k)=(dqm+qmin)*(XLMELT* &
  1439. (tso(k)-273.15)/tso(k)/9.81/psis) &
  1440. **(-1./bclh)-qmin
  1441. soiliqw(k)=max(0.,soiliqw(k))
  1442. soiliqw(k)=min(soiliqw(k),soilmois(k))
  1443. soilice(k)=(soilmois(k)-soiliqw(k))/RIW
  1444. !---- melting and freezing is balanced, soil ice cannot increase
  1445. if(keepfr(k).eq.1.) then
  1446. soilice(k)=min(soilice(k),smfrkeep(k))
  1447. soiliqw(k)=max(0.,soilmois(k)-soilice(k)*riw)
  1448. endif
  1449. else
  1450. soilice(k)=0.
  1451. soiliqw(k)=soilmois(k)
  1452. endif
  1453. ENDDO
  1454. DO K=1,NZS1
  1455. !- middle of soil layers
  1456. tav(k)=0.5*(tso(k)+tso(k+1))
  1457. soilmoism(k)=0.5*(soilmois(k)+soilmois(k+1))
  1458. tavln=log(tav(k)/273.15)
  1459. if(tavln.lt.0.) then
  1460. soiliqwm(k)=(dqm+qmin)*(XLMELT* &
  1461. (tav(k)-273.15)/tav(k)/9.81/psis) &
  1462. **(-1./bclh)-qmin
  1463. fwsat(k)=dqm-soiliqwm(k)
  1464. lwsat(k)=soiliqwm(k)+qmin
  1465. soiliqwm(k)=max(0.,soiliqwm(k))
  1466. soiliqwm(k)=min(soiliqwm(k), soilmoism(k))
  1467. soilicem(k)=(soilmoism(k)-soiliqwm(k))/riw
  1468. !---- melting and freezing is balanced, soil ice cannot increase
  1469. if(keepfr(k).eq.1.) then
  1470. soilicem(k)=min(soilicem(k), &
  1471. 0.5*(smfrkeep(k)+smfrkeep(k+1)))
  1472. soiliqwm(k)=max(0.,soilmoism(k)-soilicem(k)*riw)
  1473. fwsat(k)=dqm-soiliqwm(k)
  1474. lwsat(k)=soiliqwm(k)+qmin
  1475. endif
  1476. else
  1477. soilicem(k)=0.
  1478. soiliqwm(k)=soilmoism(k)
  1479. lwsat(k)=dqm+qmin
  1480. fwsat(k)=0.
  1481. endif
  1482. ENDDO
  1483. do k=1,nzs
  1484. if(soilice(k).gt.0.) then
  1485. smfrkeep(k)=soilice(k)
  1486. else
  1487. smfrkeep(k)=soilmois(k)/riw
  1488. endif
  1489. enddo
  1490. !******************************************************************
  1491. ! SOILPROP computes thermal diffusivity, and diffusional and
  1492. ! hydraulic condeuctivities
  1493. !******************************************************************
  1494. CALL SOILPROP( &
  1495. !--- input variables
  1496. nzs,fwsat,lwsat,tav,keepfr, &
  1497. soilmois,soiliqw,soilice, &
  1498. soilmoism,soiliqwm,soilicem, &
  1499. !--- soil fixed fields
  1500. QWRTZ,rhocs,dqm,qmin,psis,bclh,ksat, &
  1501. !--- constants
  1502. riw,xlmelt,CP,G0_P,cvw,ci, &
  1503. kqwrtz,kice,kwt, &
  1504. !--- output variables
  1505. thdif,diffu,hydro,cap)
  1506. !********************************************************************
  1507. !--- CALCULATION OF CANOPY WATER (Smirnova et al., 1996, EQ.16) AND DEW
  1508. DRIP=0.
  1509. DD1=0.
  1510. FQ=QKMS
  1511. Q1=-QKMS*RAS*(QVATM - QSG)
  1512. DEW=0.
  1513. IF(QVATM.GE.QSG)THEN
  1514. DEW=FQ*(QVATM-QSG)
  1515. ENDIF
  1516. IF(DEW.NE.0.)THEN
  1517. DD1=CST+DELT*(PRCPMS +DEW*RAS)*vegfrac
  1518. ELSE
  1519. DD1=CST+ &
  1520. DELT*(PRCPMS+RAS*FQ*(QVATM-QSG) &
  1521. *(CST/SAT)**CN)*vegfrac
  1522. ENDIF
  1523. IF(DD1.LT.0.) DD1=0.
  1524. if(vegfrac.eq.0.)then
  1525. cst=0.
  1526. drip=0.
  1527. endif
  1528. IF (vegfrac.GT.0.) THEN
  1529. CST=DD1
  1530. IF(CST.GT.SAT) THEN
  1531. CST=SAT
  1532. DRIP=DD1-SAT
  1533. ENDIF
  1534. ENDIF
  1535. !--- WETCAN is the fraction of vegetated area covered by canopy
  1536. !--- water, and DRYCAN is the fraction of vegetated area where
  1537. !--- transpiration may take place.
  1538. WETCAN=(CST/SAT)**CN
  1539. DRYCAN=1.-WETCAN
  1540. !**************************************************************
  1541. ! TRANSF computes transpiration function
  1542. !**************************************************************
  1543. CALL TRANSF( &
  1544. !--- input variables
  1545. nzs,nroot,soiliqw,tabs, &
  1546. !--- soil fixed fields
  1547. dqm,qmin,ref,wilt,zshalf, &
  1548. !--- output variables
  1549. tranf,transum)
  1550. !--- Save soil temp and moisture from the beginning of time step
  1551. do k=1,nzs
  1552. told(k)=tso(k)
  1553. smold(k)=soilmois(k)
  1554. enddo
  1555. !**************************************************************
  1556. ! SOILTEMP soilves heat budget and diffusion eqn. in soil
  1557. !**************************************************************
  1558. CALL SOILTEMP( &
  1559. !--- input variables
  1560. i,j,iland,isoil, &
  1561. delt,ktau,conflx,nzs,nddzs,nroot, &
  1562. PRCPMS,RAINF, &
  1563. PATM,TABS,QVATM,QCATM,EMISS,RNET, &
  1564. QKMS,TKMS,PC,rho,vegfrac, &
  1565. thdif,cap,drycan,wetcan, &
  1566. transum,dew,mavail, &
  1567. !--- soil fixed fields
  1568. dqm,qmin,bclh,zsmain,zshalf,DTDZS,tbq, &
  1569. !--- constants
  1570. xlv,CP,G0_P,cvw,stbolt, &
  1571. !--- output variables
  1572. tso,soilt,qvg,qsg,qcg)
  1573. !************************************************************************
  1574. !--- CALCULATION OF DEW USING NEW VALUE OF QSG OR TRANSP IF NO DEW
  1575. ETT1=0.
  1576. DEW=0.
  1577. IF(QVATM.GE.QSG)THEN
  1578. DEW=QKMS*(QVATM-QSG)
  1579. DO K=1,NZS
  1580. TRANSP(K)=0.
  1581. ENDDO
  1582. ELSE
  1583. DO K=1,NROOT
  1584. TRANSP(K)=VEGFRAC*RAS*QKMS* &
  1585. (QVATM-QSG)* &
  1586. PC*TRANF(K)*DRYCAN/ZSHALF(NROOT+1)
  1587. IF(TRANSP(K).GT.0.) TRANSP(K)=0.
  1588. ETT1=ETT1-TRANSP(K)
  1589. ENDDO
  1590. DO k=nroot+1,nzs
  1591. transp(k)=0.
  1592. enddo
  1593. ENDIF
  1594. !-- Recalculating of volumetric content of frozen water in soil
  1595. DO K=1,NZS
  1596. !- main levels
  1597. tln=log(tso(k)/273.15)
  1598. if(tln.lt.0.) then
  1599. soiliqw(k)=(dqm+qmin)*(XLMELT* &
  1600. (tso(k)-273.15)/tso(k)/9.81/psis) &
  1601. **(-1./bclh)-qmin
  1602. soiliqw(k)=max(0.,soiliqw(k))
  1603. soiliqw(k)=min(soiliqw(k),soilmois(k))
  1604. soilice(k)=(soilmois(k)-soiliqw(k))/riw
  1605. !---- melting and freezing is balanced, soil ice cannot increase
  1606. if(keepfr(k).eq.1.) then
  1607. soilice(k)=min(soilice(k),smfrkeep(k))
  1608. soiliqw(k)=max(0.,soilmois(k)-soilice(k)*riw)
  1609. endif
  1610. else
  1611. soilice(k)=0.
  1612. soiliqw(k)=soilmois(k)
  1613. endif
  1614. ENDDO
  1615. !*************************************************************************
  1616. ! SOILMOIST solves moisture budget (Smirnova et al., 1996, EQ.22,28)
  1617. ! and Richards eqn.
  1618. !*************************************************************************
  1619. CALL SOILMOIST ( &
  1620. !-- input
  1621. delt,nzs,nddzs,DTDZS,DTDZS2,RIW, &
  1622. zsmain,zshalf,diffu,hydro, &
  1623. QSG,QVG,QCG,QCATM,QVATM,-PRCPMS, &
  1624. QKMS,TRANSP,DRIP,DEW,0.,SOILICE,VEGFRAC, &
  1625. ! QKMS,TRANSP,DRIP,DEW,0.,SOILICE,VEGFRAC, &
  1626. !-- soil properties
  1627. DQM,QMIN,REF,KSAT,RAS,INFMAX, &
  1628. !-- output
  1629. SOILMOIS,SOILIQW,MAVAIL,RUNOFF1, &
  1630. RUNOFF2,INFILTRP)
  1631. !--- KEEPFR is 1 when the temperature and moisture in soil
  1632. !--- are both increasing. In this case soil ice should not
  1633. !--- be increasing according to the freezing curve.
  1634. !--- Some part of ice is melted, but additional water is
  1635. !--- getting frozen. Thus, only structure of frozen soil is
  1636. !--- changed, and phase changes are not affecting the heat
  1637. !--- transfer. This situation may happen when it rains on the
  1638. !--- frozen soil.
  1639. do k=1,nzs
  1640. if (soilice(k).gt.0.) then
  1641. if(tso(k).gt.told(k).and.soilmois(k).gt.smold(k)) then
  1642. keepfr(k)=1.
  1643. else
  1644. keepfr(k)=0.
  1645. endif
  1646. endif
  1647. enddo
  1648. !--- THE DIAGNOSTICS OF SURFACE FLUXES
  1649. T3 = STBOLT*SOILT*SOILT*SOILT
  1650. UPFLUX = T3 *SOILT
  1651. XINET = EMISS*(GLW-UPFLUX)
  1652. RNET = GSW + XINET
  1653. HFT=-TKMS*CP*RHO*(TABS-SOILT) &
  1654. *(P1000mb*0.00001/Patm)**ROVCP
  1655. Q1=-QKMS*RAS*(QVATM - QSG)
  1656. IF (Q1.LE.0.) THEN
  1657. ! --- condensation
  1658. EC1=0.
  1659. EDIR1=0.
  1660. ETT1=0.
  1661. !-- moisture flux for coupling with PBL
  1662. EETA=-QKMS*RAS*(QVATM/(1.+QVATM) - QSG/(1.+QSG))*1.E3
  1663. QFX= XLV*EETA
  1664. !-- actual moisture flux from RUC LSM
  1665. EETA= RHO*DEW
  1666. ELSE
  1667. ! --- evaporation
  1668. EDIR1 =-(1.-vegfrac)*QKMS*RAS* &
  1669. (QVATM-QVG)
  1670. EC1 = Q1 * WETCAN
  1671. CMC2MS=CST/DELT
  1672. if(EC1.gt.CMC2MS) cst=0.
  1673. EC1=MIN(CMC2MS,EC1)*vegfrac
  1674. !-- moisture flux for coupling with PBL
  1675. EETA=-QKMS*RAS*(QVATM/(1.+QVATM) - QVG/(1.+QVG))*1.E3
  1676. ! to convert from kg m-2 s-1 to m s-1: 1/rho water=1.e-3************
  1677. QFX= XLV * EETA
  1678. !-- actual moisture flux from RUC LSM
  1679. EETA = (EDIR1 + EC1 + ETT1)*1.E3
  1680. ENDIF
  1681. EVAPL=EETA
  1682. S=THDIF(1)*CAP(1)*DZSTOP*(TSO(1)-TSO(2))
  1683. HFX=HFT
  1684. FLTOT=RNET-HFT-QFX-S
  1685. 222 CONTINUE
  1686. 1123 FORMAT(I5,8F12.3)
  1687. 1133 FORMAT(I7,8E12.4)
  1688. 123 format(i6,f6.2,7f8.1)
  1689. 122 FORMAT(1X,2I3,6F8.1,F8.3,F8.2)
  1690. ! RETURN
  1691. ! END
  1692. !-------------------------------------------------------------------
  1693. END SUBROUTINE SOIL
  1694. !-------------------------------------------------------------------
  1695. SUBROUTINE SICE ( &
  1696. !--- input variables
  1697. i,j,iland,isoil,delt,ktau,conflx,nzs,nddzs,nroot, &
  1698. PRCPMS,RAINF,PATM,QVATM,QCATM,GLW,GSW, &
  1699. EMISS,RNET,QKMS,TKMS,rho, &
  1700. !--- sea ice parameters
  1701. tice,rhosice,capice,thdifice, &
  1702. zsmain,zshalf,DTDZS,DTDZS2,tbq, &
  1703. !--- constants
  1704. xlv,CP,rovcp,cw,stbolt,tabs, &
  1705. !--- output variables
  1706. tso,dew,soilt,qvg,qsg,qcg, &
  1707. eeta,qfx,hfx,s,evapl,prcpl &
  1708. )
  1709. !*****************************************************************
  1710. ! Energy budget and heat diffusion eqns. for
  1711. ! sea ice
  1712. !*************************************************************
  1713. IMPLICIT NONE
  1714. !-----------------------------------------------------------------
  1715. !--- input variables
  1716. INTEGER, INTENT(IN ) :: nroot,ktau,nzs , &
  1717. nddzs !nddzs=2*(nzs-2)
  1718. INTEGER, INTENT(IN ) :: i,j,iland,isoil
  1719. REAL, INTENT(IN ) :: DELT,CONFLX
  1720. !--- 3-D Atmospheric variables
  1721. REAL, &
  1722. INTENT(IN ) :: PATM, &
  1723. QVATM, &
  1724. QCATM
  1725. !--- 2-D variables
  1726. REAL, &
  1727. INTENT(IN ) :: GLW, &
  1728. GSW, &
  1729. EMISS, &
  1730. RHO, &
  1731. QKMS, &
  1732. TKMS
  1733. !--- sea ice properties
  1734. REAL, DIMENSION(1:NZS) , &
  1735. INTENT(IN ) :: &
  1736. tice, &
  1737. rhosice, &
  1738. capice, &
  1739. thdifice
  1740. REAL, INTENT(IN ) :: &
  1741. CW, &
  1742. XLV
  1743. REAL, DIMENSION(1:NZS), INTENT(IN) :: ZSMAIN, &
  1744. ZSHALF, &
  1745. DTDZS2
  1746. REAL, DIMENSION(1:NDDZS), INTENT(IN) :: DTDZS
  1747. REAL, DIMENSION(1:4001), INTENT(IN) :: TBQ
  1748. !--- input/output variables
  1749. !----soil temperature
  1750. REAL, DIMENSION( 1:nzs ), INTENT(INOUT) :: TSO
  1751. !-------- 2-d variables
  1752. REAL, &
  1753. INTENT(INOUT) :: DEW, &
  1754. EETA, &
  1755. EVAPL, &
  1756. PRCPL, &
  1757. QVG, &
  1758. QSG, &
  1759. QCG, &
  1760. RNET, &
  1761. QFX, &
  1762. HFX, &
  1763. S, &
  1764. SOILT
  1765. !--- Local variables
  1766. REAL :: x,x1,x2,x4,tn,denom
  1767. REAL :: RAINF, PRCPMS , &
  1768. TABS, T3, UPFLUX, XINET
  1769. REAL :: CP,rovcp,G0,LV,STBOLT,xlmelt,dzstop , &
  1770. epot,fltot,ft,fq,hft,ras,cvw
  1771. REAL :: FKT,D1,D2,D9,D10,DID,R211,R21,R22,R6,R7,D11 , &
  1772. PI,H,FKQ,R210,AA,BB,PP,Q1,QS1,TS1,TQ2,TX2 , &
  1773. TDENOM
  1774. REAL :: AA1,RHCS
  1775. REAL, DIMENSION(1:NZS) :: cotso,rhtso
  1776. INTEGER :: nzs1,nzs2,k,k1,kn,kk
  1777. !-----------------------------------------------------------------
  1778. !-- define constants
  1779. ! STBOLT=5.670151E-8
  1780. XLMELT=3.35E+5
  1781. cvw=cw
  1782. prcpl=prcpms
  1783. NZS1=NZS-1
  1784. NZS2=NZS-2
  1785. dzstop=1./(zsmain(2)-zsmain(1))
  1786. RAS=RHO*1.E-3
  1787. do k=1,nzs
  1788. cotso(k)=0.
  1789. rhtso(k)=0.
  1790. enddo
  1791. cotso(1)=0.
  1792. rhtso(1)=TSO(NZS)
  1793. DO 33 K=1,NZS2
  1794. KN=NZS-K
  1795. K1=2*KN-3
  1796. X1=DTDZS(K1)*THDIFICE(KN-1)
  1797. X2=DTDZS(K1+1)*THDIFICE(KN)
  1798. FT=TSO(KN)+X1*(TSO(KN-1)-TSO(KN)) &
  1799. -X2*(TSO(KN)-TSO(KN+1))
  1800. DENOM=1.+X1+X2-X2*cotso(K)
  1801. cotso(K+1)=X1/DENOM
  1802. rhtso(K+1)=(FT+X2*rhtso(K))/DENOM
  1803. 33 CONTINUE
  1804. !************************************************************************
  1805. !--- THE HEAT BALANCE EQUATION (Smirnova et al., 1996, EQ. 21,26)
  1806. RHCS=CAPICE(1)
  1807. H=1.
  1808. FKT=TKMS
  1809. D1=cotso(NZS1)
  1810. D2=rhtso(NZS1)
  1811. TN=SOILT
  1812. D9=THDIFICE(1)*RHCS*dzstop
  1813. D10=TKMS*CP*RHO
  1814. R211=.5*CONFLX/DELT
  1815. R21=R211*CP*RHO
  1816. R22=.5/(THDIFICE(1)*DELT*dzstop**2)
  1817. R6=EMISS *STBOLT*.5*TN**4
  1818. R7=R6/TN
  1819. D11=RNET+R6
  1820. TDENOM=D9*(1.-D1+R22)+D10+R21+R7 &
  1821. +RAINF*CVW*PRCPMS
  1822. FKQ=QKMS*RHO
  1823. R210=R211*RHO
  1824. AA=XLS*(FKQ+R210)/TDENOM
  1825. BB=(D10*TABS+R21*TN+XLS*(QVATM*FKQ &
  1826. +R210*QVG)+D11+D9*(D2+R22*TN) &
  1827. +RAINF*CVW*PRCPMS*max(273.15,TABS) &
  1828. )/TDENOM
  1829. AA1=AA
  1830. PP=PATM*1.E3
  1831. AA1=AA1/PP
  1832. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  1833. PRINT *,' VILKA-SEAICE1'
  1834. print *,'D10,TABS,R21,TN,QVATM,FKQ', &
  1835. D10,TABS,R21,TN,QVATM,FKQ
  1836. print *,'RNET, EMISS, STBOLT, SOILT',RNET, EMISS, STBOLT, SOILT
  1837. print *,'R210,QVG,D11,D9,D2,R22,RAINF,CVW,PRCPMS,TDENOM', &
  1838. R210,QVG,D11,D9,D2,R22,RAINF,CVW,PRCPMS,TDENOM
  1839. print *,'tn,aa1,bb,pp,fkq,r210', &
  1840. tn,aa1,bb,pp,fkq,r210
  1841. ENDIF
  1842. CALL VILKA(TN,AA1,BB,PP,QS1,TS1,TBQ,KTAU,i,j,iland,isoil)
  1843. !--- it is saturation over sea ice
  1844. QVG=QS1
  1845. QSG=QS1
  1846. TSO(1)=min(271.4,TS1)
  1847. QCG=0.
  1848. !--- sea ice melting is not included in this simple approach
  1849. !--- SOILT - skin temperature
  1850. SOILT=TSO(1)
  1851. !---- Final solution for soil temperature - TSO
  1852. DO K=2,NZS
  1853. KK=NZS-K+1
  1854. TSO(K)=min(271.4,rhtso(KK)+cotso(KK)*TSO(K-1))
  1855. END DO
  1856. !--- CALCULATION OF DEW USING NEW VALUE OF QSG OR TRANSP IF NO DEW
  1857. DEW=0.
  1858. !--- THE DIAGNOSTICS OF SURFACE FLUXES
  1859. T3 = STBOLT*SOILT*SOILT*SOILT
  1860. UPFLUX = T3 *SOILT
  1861. XINET = EMISS*(GLW-UPFLUX)
  1862. RNET = GSW + XINET
  1863. HFT=-TKMS*CP*RHO*(TABS-SOILT) &
  1864. *(P1000mb*0.00001/Patm)**ROVCP
  1865. Q1=-QKMS*RAS*(QVATM - QSG)
  1866. IF (Q1.LE.0.) THEN
  1867. ! --- condensation
  1868. !-- moisture flux for coupling with PBL
  1869. EETA=-QKMS*RAS*(QVATM/(1.+QVATM) - QSG/(1.+QSG))*1.E3
  1870. QFX= XLS*EETA
  1871. !-- actual moisture flux from RUC LSM
  1872. DEW=QKMS*(QVATM-QSG)
  1873. EETA= RHO*DEW
  1874. ELSE
  1875. ! --- evaporation
  1876. !-- moisture flux for coupling with PBL
  1877. EETA=-QKMS*RAS*(QVATM/(1.+QVATM) - QVG/(1.+QVG))*1.E3
  1878. ! EETA=-QKMS*RAS*(QVATM/(1.+QVATM) - QSG/(1.+QSG))*1.E3
  1879. ! to convert from kg m-2 s-1 to m s-1: 1/rho water=1.e-3************
  1880. QFX= XLS * EETA
  1881. !-- actual moisture flux from RUC LSM
  1882. EETA = Q1*1.E3
  1883. ENDIF
  1884. EVAPL=EETA
  1885. S=THDIFICE(1)*CAPICE(1)*DZSTOP*(TSO(1)-TSO(2))
  1886. HFX=HFT
  1887. FLTOT=RNET-HFT-QFX-S
  1888. !-------------------------------------------------------------------
  1889. END SUBROUTINE SICE
  1890. !-------------------------------------------------------------------
  1891. SUBROUTINE SNOWSOIL ( &
  1892. !--- input variables
  1893. i,j,isoil,delt,ktau,conflx,nzs,nddzs,nroot, &
  1894. meltfactor,rhonewsn, & ! new
  1895. ILAND,PRCPMS,RAINF,NEWSNOW,snhei,SNWE,SNOWFRAC, &
  1896. RHOSN, &
  1897. PATM,QVATM,QCATM, &
  1898. GLW,GSW,EMISS,RNET,IVGTYP, &
  1899. QKMS,TKMS,PC,cst,rho,vegfrac,alb,znt, &
  1900. MYJ, &
  1901. !--- soil fixed fields
  1902. QWRTZ,rhocs,dqm,qmin,ref,wilt,psis,bclh,ksat, &
  1903. sat,cn,zsmain,zshalf,DTDZS,DTDZS2,tbq, &
  1904. !--- constants
  1905. xlv,CP,rovcp,G0_P,cw,stbolt,TABS, &
  1906. KQWRTZ,KICE,KWT, &
  1907. !--- output variables
  1908. ilnb,snweprint,snheiprint,rsm, &
  1909. soilmois,tso,smfrkeep,keepfr, &
  1910. dew,soilt,soilt1,tsnav, &
  1911. qvg,qsg,qcg,SMELT,SNOH,SNFLX,SNOM, &
  1912. edir1,ec1,ett1,eeta,qfx,hfx,s,sublim, &
  1913. prcpl,runoff1,runoff2,mavail,soilice, &
  1914. soiliqw,infiltrp )
  1915. !***************************************************************
  1916. ! Energy and moisture budget for snow, heat diffusion eqns.
  1917. ! in snow and soil, Richards eqn. for soil covered with snow
  1918. !
  1919. ! DELT - time step (s)
  1920. ! ktau - numver of time step
  1921. ! CONFLX - depth of constant flux layer (m)
  1922. ! J,I - the location of grid point
  1923. ! IME, JME, NZS - dimensions of the domain
  1924. ! NROOT - number of levels within the root zone
  1925. ! PRCPMS - precipitation rate in m/s
  1926. ! NEWSNOW - pcpn in soilid form (m)
  1927. ! SNHEI, SNWE - snow height and snow water equivalent (m)
  1928. ! RHOSN - snow density (kg/m-3)
  1929. ! PATM - pressure (bar)
  1930. ! QVATM,QCATM - cloud and water vapor mixing ratio
  1931. ! at the first atm. level (kg/kg)
  1932. ! GLW, GSW - incoming longwave and absorbed shortwave
  1933. ! radiation at the surface (W/m^2)
  1934. ! EMISS,RNET - emissivity (0-1) of the ground surface and net
  1935. ! radiation at the surface (W/m^2)
  1936. ! QKMS - exchange coefficient for water vapor in the
  1937. ! surface layer (m/s)
  1938. ! TKMS - exchange coefficient for heat in the surface
  1939. ! layer (m/s)
  1940. ! PC - plant coefficient (resistance) (0-1)
  1941. ! RHO - density of atmosphere near surface (kg/m^3)
  1942. ! VEGFRAC - greeness fraction (0-1)
  1943. ! RHOCS - volumetric heat capacity of dry soil (J/m^3/K)
  1944. ! DQM, QMIN - porosity minus residual soil moisture QMIN (m^3/m^3)
  1945. ! REF, WILT - field capacity soil moisture and the
  1946. ! wilting point (m^3/m^3)
  1947. ! PSIS - matrix potential at saturation (m)
  1948. ! BCLH - exponent for Clapp-Hornberger parameterization
  1949. ! KSAT - saturated hydraulic conductivity (m/s)
  1950. ! SAT - maximum value of water intercepted by canopy (m)
  1951. ! CN - exponent for calculation of canopy water
  1952. ! ZSMAIN - main levels in soil (m)
  1953. ! ZSHALF - middle of the soil layers (m)
  1954. ! DTDZS,DTDZS2 - dt/(2.*dzshalf*dzmain) and dt/dzshalf in soil
  1955. ! TBQ - table to define saturated mixing ration
  1956. ! of water vapor for given temperature and pressure
  1957. ! ilnb - number of layers in snow
  1958. ! rsm - liquid water inside snow pack (m)
  1959. ! SOILMOIS,TSO - soil moisture (m^3/m^3) and temperature (K)
  1960. ! DEW - dew in (kg/m^2 s)
  1961. ! SOILT - skin temperature (K)
  1962. ! SOILT1 - snow temperature at 7.5 cm depth (K)
  1963. ! TSNAV - average temperature of snow pack (C)
  1964. ! QSG,QVG,QCG - saturated mixing ratio, mixing ratio of
  1965. ! water vapor and cloud at the ground
  1966. ! surface, respectively (kg/kg)
  1967. ! EDIR1, EC1, ETT1, EETA - direct evaporation, evaporation of
  1968. ! canopy water, transpiration (kg m-2 s-1) and total
  1969. ! evaporation in (m s-1).
  1970. ! QFX, HFX - latent and sensible heat fluxes (W/m^2)
  1971. ! S - soil heat flux in the top layer (W/m^2)
  1972. ! SUBLIM - snow sublimation (kg/m^2/s)
  1973. ! RUNOFF1 - surface runoff (m/s)
  1974. ! RUNOFF2 - underground runoff (m)
  1975. ! MAVAIL - moisture availability in the top soil layer (0-1)
  1976. ! SOILICE - content of soil ice in soil layers (m^3/m^3)
  1977. ! SOILIQW - lliquid water in soil layers (m^3/m^3)
  1978. ! INFILTRP - infiltration flux from the top of soil domain (m/s)
  1979. ! XINET - net long-wave radiation (W/m^2)
  1980. !
  1981. !*******************************************************************
  1982. IMPLICIT NONE
  1983. !-------------------------------------------------------------------
  1984. !--- input variables
  1985. INTEGER, INTENT(IN ) :: nroot,ktau,nzs , &
  1986. nddzs !nddzs=2*(nzs-2)
  1987. INTEGER, INTENT(IN ) :: i,j,isoil
  1988. REAL, INTENT(IN ) :: DELT,CONFLX,PRCPMS , &
  1989. RAINF,NEWSNOW,RHONEWSN,meltfactor
  1990. LOGICAL, INTENT(IN ) :: myj
  1991. !--- 3-D Atmospheric variables
  1992. REAL, &
  1993. INTENT(IN ) :: PATM, &
  1994. QVATM, &
  1995. QCATM
  1996. !--- 2-D variables
  1997. REAL , &
  1998. INTENT(IN ) :: GLW, &
  1999. GSW, &
  2000. RHO, &
  2001. PC, &
  2002. VEGFRAC, &
  2003. QKMS, &
  2004. TKMS
  2005. INTEGER, INTENT(IN ) :: IVGTYP
  2006. !--- soil properties
  2007. REAL , &
  2008. INTENT(IN ) :: RHOCS, &
  2009. BCLH, &
  2010. DQM, &
  2011. KSAT, &
  2012. PSIS, &
  2013. QMIN, &
  2014. QWRTZ, &
  2015. REF, &
  2016. SAT, &
  2017. WILT
  2018. REAL, INTENT(IN ) :: CN, &
  2019. CW, &
  2020. XLV, &
  2021. G0_P, &
  2022. KQWRTZ, &
  2023. KICE, &
  2024. KWT
  2025. REAL, DIMENSION(1:NZS), INTENT(IN) :: ZSMAIN, &
  2026. ZSHALF, &
  2027. DTDZS2
  2028. REAL, DIMENSION(1:NDDZS), INTENT(IN) :: DTDZS
  2029. REAL, DIMENSION(1:4001), INTENT(IN) :: TBQ
  2030. !--- input/output variables
  2031. !-------- 3-d soil moisture and temperature
  2032. REAL, DIMENSION( 1:nzs ) , &
  2033. INTENT(INOUT) :: TSO, &
  2034. SOILMOIS, &
  2035. SMFRKEEP
  2036. REAL, DIMENSION( 1:nzs ) , &
  2037. INTENT(INOUT) :: KEEPFR
  2038. INTEGER, INTENT(INOUT) :: ILAND
  2039. !-------- 2-d variables
  2040. REAL , &
  2041. INTENT(INOUT) :: DEW, &
  2042. CST, &
  2043. EDIR1, &
  2044. EC1, &
  2045. ETT1, &
  2046. EETA, &
  2047. RHOSN, &
  2048. SUBLIM, &
  2049. PRCPL, &
  2050. ALB, &
  2051. EMISS, &
  2052. ZNT, &
  2053. MAVAIL, &
  2054. QVG, &
  2055. QSG, &
  2056. QCG, &
  2057. QFX, &
  2058. HFX, &
  2059. S, &
  2060. RUNOFF1, &
  2061. RUNOFF2, &
  2062. SNWE, &
  2063. SNHEI, &
  2064. SMELT, &
  2065. SNOM, &
  2066. SNOH, &
  2067. SNFLX, &
  2068. SOILT, &
  2069. SOILT1, &
  2070. SNOWFRAC, &
  2071. TSNAV
  2072. INTEGER, INTENT(INOUT) :: ILNB
  2073. !-------- 1-d variables
  2074. REAL, DIMENSION(1:NZS), INTENT(OUT) :: SOILICE, &
  2075. SOILIQW
  2076. REAL, INTENT(OUT) :: RSM, &
  2077. SNWEPRINT, &
  2078. SNHEIPRINT
  2079. !--- Local variables
  2080. INTEGER :: nzs1,nzs2,k
  2081. REAL :: INFILTRP, TRANSUM , &
  2082. SNTH, NEWSN , &
  2083. TABS, T3, UPFLUX, XINET , &
  2084. BETA, SNWEPR,EPDT,PP
  2085. REAL :: CP,rovcp,G0,LV,xlvm,STBOLT,xlmelt,dzstop , &
  2086. can,epot,fac,fltot,ft,fq,hft , &
  2087. q1,ras,rhoice,sph , &
  2088. trans,zn,ci,cvw,tln,tavln,pi , &
  2089. DD1,CMC2MS,DRYCAN,WETCAN , &
  2090. INFMAX,RIW,DELTSN,H,UMVEG
  2091. REAL, DIMENSION(1:NZS) :: transp,cap,diffu,hydro , &
  2092. thdif,tranf,tav,soilmoism , &
  2093. soilicem,soiliqwm,detal , &
  2094. fwsat,lwsat,told,smold
  2095. REAL :: drip
  2096. REAL :: RNET
  2097. !-----------------------------------------------------------------
  2098. cvw=cw
  2099. XLMELT=3.35E+5
  2100. !-- the next line calculates heat of sublimation of water vapor
  2101. XLVm=XLV+XLMELT
  2102. ! STBOLT=5.670151E-8
  2103. !--- SNOW flag -- 99
  2104. ILAND=99
  2105. !--- DELTSN - is the threshold for splitting the snow layer into 2 layers.
  2106. !--- With snow density 400 kg/m^3, this threshold is equal to 7.5 cm,
  2107. !--- equivalent to 0.03 m SNWE. For other snow densities the threshold is
  2108. !--- computed using SNWE=0.03 m and current snow density.
  2109. !--- SNTH - the threshold below which the snow layer is combined with
  2110. !--- the top soil layer. SNTH is computed using snwe=0.016 m, and
  2111. !--- equals 4 cm for snow density 400 kg/m^3.
  2112. DELTSN=0.0301*1.e3/rhosn
  2113. snth=0.01601*1.e3/rhosn
  2114. !tgs when the snow depth is marginlly higher than DELTSN,
  2115. ! reset DELTSN to half of snow depth.
  2116. IF(SNHEI.GE.DELTSN+SNTH) THEN
  2117. ! 2-layer model
  2118. if(snhei-deltsn-snth.lt.snth) deltsn=0.5*(snhei-snth)
  2119. ENDIF
  2120. RHOICE=900.
  2121. CI=RHOICE*2100.
  2122. RAS=RHO*1.E-3
  2123. RIW=rhoice*1.e-3
  2124. MAVAIL=1.
  2125. RSM=0.
  2126. DO K=1,NZS
  2127. TRANSP (K)=0.
  2128. soilmoism (k)=0.
  2129. soiliqwm (k)=0.
  2130. soilice (k)=0.
  2131. soilicem (k)=0.
  2132. lwsat (k)=0.
  2133. fwsat (k)=0.
  2134. tav (k)=0.
  2135. cap (k)=0.
  2136. diffu (k)=0.
  2137. hydro (k)=0.
  2138. thdif (k)=0.
  2139. tranf (k)=0.
  2140. detal (k)=0.
  2141. told (k)=0.
  2142. smold (k)=0.
  2143. ENDDO
  2144. snweprint=0.
  2145. snheiprint=0.
  2146. prcpl=prcpms
  2147. !*** DELTSN is the depth of the top layer of snow where
  2148. !*** there is a temperature gradient, the rest of the snow layer
  2149. !*** is considered to have constant temperature
  2150. NZS1=NZS-1
  2151. NZS2=NZS-2
  2152. DZSTOP=1./(zsmain(2)-zsmain(1))
  2153. !----- THE CALCULATION OF THERMAL DIFFUSIVITY, DIFFUSIONAL AND ---
  2154. !----- HYDRAULIC CONDUCTIVITY (SMIRNOVA ET AL. 1996, EQ.2,5,6) ---
  2155. !tgs - the following loop is added to define the amount of frozen
  2156. !tgs - water in soil if there is any
  2157. DO K=1,NZS
  2158. tln=log(tso(k)/273.15)
  2159. if(tln.lt.0.) then
  2160. soiliqw(k)=(dqm+qmin)*(XLMELT* &
  2161. (tso(k)-273.15)/tso(k)/9.81/psis) &
  2162. **(-1./bclh)-qmin
  2163. soiliqw(k)=max(0.,soiliqw(k))
  2164. soiliqw(k)=min(soiliqw(k),soilmois(k))
  2165. soilice(k)=(soilmois(k)-soiliqw(k))/riw
  2166. !---- melting and freezing is balanced, soil ice cannot increase
  2167. if(keepfr(k).eq.1.) then
  2168. soilice(k)=min(soilice(k),smfrkeep(k))
  2169. soiliqw(k)=max(0.,soilmois(k)-soilice(k)*rhoice*1.e-3)
  2170. endif
  2171. else
  2172. soilice(k)=0.
  2173. soiliqw(k)=soilmois(k)
  2174. endif
  2175. ENDDO
  2176. DO K=1,NZS1
  2177. tav(k)=0.5*(tso(k)+tso(k+1))
  2178. soilmoism(k)=0.5*(soilmois(k)+soilmois(k+1))
  2179. tavln=log(tav(k)/273.15)
  2180. if(tavln.lt.0.) then
  2181. soiliqwm(k)=(dqm+qmin)*(XLMELT* &
  2182. (tav(k)-273.15)/tav(k)/9.81/psis) &
  2183. **(-1./bclh)-qmin
  2184. fwsat(k)=dqm-soiliqwm(k)
  2185. lwsat(k)=soiliqwm(k)+qmin
  2186. soiliqwm(k)=max(0.,soiliqwm(k))
  2187. soiliqwm(k)=min(soiliqwm(k), soilmoism(k))
  2188. soilicem(k)=(soilmoism(k)-soiliqwm(k))/riw
  2189. !---- melting and freezing is balanced, soil ice cannot increase
  2190. if(keepfr(k).eq.1.) then
  2191. soilicem(k)=min(soilicem(k), &
  2192. 0.5*(smfrkeep(k)+smfrkeep(k+1)))
  2193. soiliqwm(k)=max(0.,soilmoism(k)-soilicem(k)*riw)
  2194. fwsat(k)=dqm-soiliqwm(k)
  2195. lwsat(k)=soiliqwm(k)+qmin
  2196. endif
  2197. else
  2198. soilicem(k)=0.
  2199. soiliqwm(k)=soilmoism(k)
  2200. lwsat(k)=dqm+qmin
  2201. fwsat(k)=0.
  2202. endif
  2203. ENDDO
  2204. do k=1,nzs
  2205. if(soilice(k).gt.0.) then
  2206. smfrkeep(k)=soilice(k)
  2207. else
  2208. smfrkeep(k)=soilmois(k)/riw
  2209. endif
  2210. enddo
  2211. !******************************************************************
  2212. ! SOILPROP computes thermal diffusivity, and diffusional and
  2213. ! hydraulic condeuctivities
  2214. !******************************************************************
  2215. CALL SOILPROP( &
  2216. !--- input variables
  2217. nzs,fwsat,lwsat,tav,keepfr, &
  2218. soilmois,soiliqw,soilice, &
  2219. soilmoism,soiliqwm,soilicem, &
  2220. !--- soil fixed fields
  2221. QWRTZ,rhocs,dqm,qmin,psis,bclh,ksat, &
  2222. !--- constants
  2223. riw,xlmelt,CP,G0_P,cvw,ci, &
  2224. kqwrtz,kice,kwt, &
  2225. !--- output variables
  2226. thdif,diffu,hydro,cap)
  2227. !********************************************************************
  2228. !--- CALCULATION OF CANOPY WATER (Smirnova et al., 1996, EQ.16) AND DEW
  2229. DRIP=0.
  2230. SMELT=0.
  2231. DD1=0.
  2232. H=1.
  2233. FQ=QKMS
  2234. !--- If vegfrac.ne.0. then part of falling snow can be
  2235. !--- intercepted by the canopy.
  2236. DEW=0.
  2237. UMVEG=1.-vegfrac
  2238. EPOT = -FQ*(QVATM-QSG)
  2239. IF(vegfrac.EQ.0.) then
  2240. cst=0.
  2241. drip=0.
  2242. ELSE
  2243. IF(EPOT.GE.0.) THEN
  2244. ! Evaporation
  2245. ! DD1=CST+(NEWSNOW*RHOSN*1.E-3 &
  2246. DD1=CST+(NEWSNOW*RHOnewSN*1.E-3 &
  2247. !-- this change will not let liquid waer be intercepted by the canopy....
  2248. -DELT*(RAS*EPOT &
  2249. ! -DELT*(-PRCPMS+RAS*EPOT &
  2250. *(CST/SAT)**CN)) *vegfrac
  2251. ELSE
  2252. ! Sublimation
  2253. DEW = - EPOT
  2254. ! DD1=CST+(NEWSNOW*RHOSN*1.E-3+delt*( &
  2255. DD1=CST+(NEWSNOW*RHOnewSN*1.E-3+delt*( &
  2256. ! DD1=CST+(NEWSNOW*RHOSN*1.E-3+delt*(PRCPMS &
  2257. +DEW*RAS)) *vegfrac
  2258. ENDIF
  2259. IF(DD1.LT.0.) DD1=0.
  2260. IF (vegfrac.GT.0.) THEN
  2261. CST=DD1
  2262. IF(CST.GT.SAT*vegfrac) THEN
  2263. CST=SAT*vegfrac
  2264. DRIP=DD1-SAT*vegfrac
  2265. ENDIF
  2266. ENDIF
  2267. !--- With vegetation part of NEWSNOW can be intercepted by canopy until
  2268. !--- the saturation is reached. After the canopy saturation is reached
  2269. !--- DRIP in the solid form will be added to SNOW cover.
  2270. SNWE=SNHEI*RHOSN*1.e-3-vegfrac*NEWSNOW*RHOnewSN*1.E-3 &
  2271. + DRIP
  2272. ENDIF
  2273. DRIP=0.
  2274. SNHEI=SNWE*1.e3/RHOSN
  2275. SNWEPR=SNWE
  2276. ! check if all snow can evaporate during DT
  2277. BETA=1.
  2278. EPDT = EPOT * RAS *DELT*UMVEG
  2279. IF(SNWEPR.LE.EPDT) THEN
  2280. BETA=SNWEPR/max(1.e-8,EPDT)
  2281. SNWE=0.
  2282. SNHEI=0.
  2283. ENDIF
  2284. WETCAN=(CST/SAT)**CN
  2285. DRYCAN=1.-WETCAN
  2286. !**************************************************************
  2287. ! TRANSF computes transpiration function
  2288. !**************************************************************
  2289. CALL TRANSF( &
  2290. !--- input variables
  2291. nzs,nroot,soiliqw,tabs, &
  2292. !--- soil fixed fields
  2293. dqm,qmin,ref,wilt,zshalf, &
  2294. !--- output variables
  2295. tranf,transum)
  2296. !--- Save soil temp and moisture from the beginning of time step
  2297. do k=1,nzs
  2298. told(k)=tso(k)
  2299. smold(k)=soilmois(k)
  2300. enddo
  2301. !**************************************************************
  2302. ! SNOWTEMP solves heat budget and diffusion eqn. in soil
  2303. !**************************************************************
  2304. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  2305. print *, 'TSO before calling SNOWTEMP: ', tso
  2306. ENDIF
  2307. CALL SNOWTEMP( &
  2308. !--- input variables
  2309. i,j,iland,isoil, &
  2310. delt,ktau,conflx,nzs,nddzs,nroot, &
  2311. snwe,snwepr,snhei,newsnow,snowfrac, &
  2312. beta,deltsn,snth,rhosn,rhonewsn,meltfactor, & ! add meltfactor
  2313. PRCPMS,RAINF, &
  2314. PATM,TABS,QVATM,QCATM, &
  2315. GLW,GSW,EMISS,RNET, &
  2316. QKMS,TKMS,PC,rho,vegfrac, &
  2317. thdif,cap,drycan,wetcan,cst, &
  2318. tranf,transum,dew,mavail, &
  2319. !--- soil fixed fields
  2320. dqm,qmin,psis,bclh, &
  2321. zsmain,zshalf,DTDZS,tbq, &
  2322. !--- constants
  2323. xlvm,CP,rovcp,G0_P,cvw,stbolt, &
  2324. !--- output variables
  2325. snweprint,snheiprint,rsm, &
  2326. tso,soilt,soilt1,tsnav,qvg,qsg,qcg, &
  2327. smelt,snoh,snflx,ilnb)
  2328. !************************************************************************
  2329. !--- RECALCULATION OF DEW USING NEW VALUE OF QSG OR TRANSP IF NO DEW
  2330. DEW=0.
  2331. ETT1=0.
  2332. PP=PATM*1.E3
  2333. QSG= QSN(SOILT,TBQ)/PP
  2334. EPOT = -FQ*(QVATM-QSG)
  2335. IF(EPOT.GE.0.) THEN
  2336. ! Evaporation
  2337. DO K=1,NROOT
  2338. TRANSP(K)=vegfrac*RAS*FQ*(QVATM-QSG) &
  2339. *PC*tranf(K)*DRYCAN/zshalf(NROOT+1)
  2340. IF(TRANSP(K).GT.0.) TRANSP(K)=0.
  2341. ETT1=ETT1-TRANSP(K)
  2342. ENDDO
  2343. DO k=nroot+1,nzs
  2344. transp(k)=0.
  2345. enddo
  2346. ELSE
  2347. ! Sublimation
  2348. DEW=-EPOT
  2349. DO K=1,NZS
  2350. TRANSP(K)=0.
  2351. ENDDO
  2352. ETT1=0.
  2353. ENDIF
  2354. !-- recalculating of frozen water in soil
  2355. DO K=1,NZS
  2356. tln=log(tso(k)/273.15)
  2357. if(tln.lt.0.) then
  2358. soiliqw(k)=(dqm+qmin)*(XLMELT* &
  2359. (tso(k)-273.15)/tso(k)/9.81/psis) &
  2360. **(-1./bclh)-qmin
  2361. soiliqw(k)=max(0.,soiliqw(k))
  2362. soiliqw(k)=min(soiliqw(k),soilmois(k))
  2363. soilice(k)=(soilmois(k)-soiliqw(k))/riw
  2364. !---- melting and freezing is balanced, soil ice cannot increase
  2365. if(keepfr(k).eq.1.) then
  2366. soilice(k)=min(soilice(k),smfrkeep(k))
  2367. soiliqw(k)=max(0.,soilmois(k)-soilice(k)*riw)
  2368. endif
  2369. else
  2370. soilice(k)=0.
  2371. soiliqw(k)=soilmois(k)
  2372. endif
  2373. ENDDO
  2374. !*************************************************************************
  2375. !--- TQCAN FOR SOLUTION OF MOISTURE BALANCE (Smirnova et al. 1996, EQ.22,28)
  2376. ! AND TSO,ETA PROFILES
  2377. !*************************************************************************
  2378. CALL SOILMOIST ( &
  2379. !-- input
  2380. delt,nzs,nddzs,DTDZS,DTDZS2,RIW, &
  2381. zsmain,zshalf,diffu,hydro, &
  2382. QSG,QVG,QCG,QCATM,QVATM,-PRCPMS, &
  2383. 0.,TRANSP,0., &
  2384. 0.,SMELT,soilice,vegfrac, &
  2385. !-- soil properties
  2386. DQM,QMIN,REF,KSAT,RAS,INFMAX, &
  2387. !-- output
  2388. SOILMOIS,SOILIQW,MAVAIL,RUNOFF1, &
  2389. RUNOFF2,infiltrp)
  2390. ! endif
  2391. !-- Restore land-use parameters if all snow is melted
  2392. IF(SNHEI.EQ.0.) then
  2393. tsnav=soilt-273.15
  2394. smelt=smelt+snwe/delt
  2395. rsm=0.
  2396. ! snwe=0.
  2397. ENDIF
  2398. ! 21apr2009
  2399. ! SNOM [mm] goes into the passed-in ACSNOM variable in the grid derived type
  2400. SNOM=SNOM+SMELT*DELT*1.e3
  2401. !--- KEEPFR is 1 when the temperature and moisture in soil
  2402. !--- are both increasing. In this case soil ice should not
  2403. !--- be increasing according to the freezing curve.
  2404. !--- Some part of ice is melted, but additional water is
  2405. !--- getting frozen. Thus, only structure of frozen soil is
  2406. !--- changed, and phase changes are not affecting the heat
  2407. !--- transfer. This situation may happen when it rains on the
  2408. !--- frozen soil.
  2409. do k=1,nzs
  2410. if (soilice(k).gt.0.) then
  2411. if(tso(k).gt.told(k).and.soilmois(k).gt.smold(k)) then
  2412. keepfr(k)=1.
  2413. else
  2414. keepfr(k)=0.
  2415. endif
  2416. endif
  2417. enddo
  2418. !--- THE DIAGNOSTICS OF SURFACE FLUXES
  2419. T3 = STBOLT*SOILT*SOILT*SOILT
  2420. UPFLUX = T3 *SOILT
  2421. XINET = EMISS*(GLW-UPFLUX)
  2422. RNET = GSW + XINET
  2423. HFT=-TKMS*CP*RHO*(TABS-SOILT) &
  2424. *(P1000mb*0.00001/Patm)**ROVCP
  2425. Q1 = - FQ*RAS* (QVATM - QSG)
  2426. IF (Q1.LT.0.) THEN
  2427. ! --- condensation
  2428. EDIR1=0.
  2429. EC1=0.
  2430. ETT1=0.
  2431. ! --- condensation
  2432. !-- moisture flux for coupling with PBL
  2433. EETA=-QKMS*RAS*(QVATM/(1.+QVATM) - QSG/(1.+QSG))*1.E3
  2434. QFX= XLVm*EETA
  2435. !-- actual moisture flux from RUC LSM
  2436. DEW=QKMS*(QVATM-QSG)
  2437. EETA= RHO*DEW
  2438. ELSE
  2439. ! --- evaporation
  2440. EDIR1 = Q1*UMVEG *BETA
  2441. EC1 = Q1 * WETCAN
  2442. CMC2MS=CST/DELT
  2443. if(EC1.gt.CMC2MS) cst=0.
  2444. EC1=MIN(CMC2MS,EC1)*vegfrac
  2445. !-- moisture flux for coupling with PBL
  2446. EETA=-QKMS*RAS*(QVATM/(1.+QVATM) - QVG/(1.+QVG))*1.E3
  2447. ! EETA=-QKMS*RAS*(QVATM/(1.+QVATM) - QSG/(1.+QSG))*1.E3
  2448. ! to convert from kg m-2 s-1 to m s-1: 1/rho water=1.e-3************
  2449. QFX= XLVm * EETA
  2450. !-- actual moisture flux from RUC LSM
  2451. EETA = (EDIR1 + EC1 + ETT1)*1.E3
  2452. ENDIF
  2453. s=THDIF(1)*CAP(1)*dzstop*(tso(1)-tso(2))
  2454. HFX=HFT
  2455. FLTOT=RNET-HFT-QFX-S
  2456. 222 CONTINUE
  2457. 1123 FORMAT(I5,8F12.3)
  2458. 1133 FORMAT(I7,8E12.4)
  2459. 123 format(i6,f6.2,7f8.1)
  2460. 122 FORMAT(1X,2I3,6F8.1,F8.3,F8.2)
  2461. ! RETURN
  2462. ! END
  2463. !-------------------------------------------------------------------
  2464. END SUBROUTINE SNOWSOIL
  2465. !-------------------------------------------------------------------
  2466. SUBROUTINE SNOWSEAICE( &
  2467. i,j,isoil,delt,ktau,conflx,nzs,nddzs, &
  2468. meltfactor,rhonewsn, & ! new
  2469. ILAND,PRCPMS,RAINF,NEWSNOW,snhei,SNWE,snowfrac, &
  2470. RHOSN,PATM,QVATM,QCATM, &
  2471. GLW,GSW,EMISS,RNET, &
  2472. QKMS,TKMS,RHO, &
  2473. !--- sea ice parameters
  2474. ALB,ZNT, &
  2475. tice,rhosice,capice,thdifice, &
  2476. zsmain,zshalf,DTDZS,DTDZS2,tbq, &
  2477. !--- constants
  2478. xlv,CP,rovcp,cw,stbolt,tabs, &
  2479. !--- output variables
  2480. ilnb,snweprint,snheiprint,rsm,tso, &
  2481. dew,soilt,soilt1,tsnav,qvg,qsg,qcg, &
  2482. SMELT,SNOH,SNFLX,SNOM,eeta, &
  2483. qfx,hfx,s,sublim,prcpl &
  2484. )
  2485. !***************************************************************
  2486. ! Solving energy budget for snow on sea ice and heat diffusion
  2487. ! eqns. in snow and sea ice
  2488. !***************************************************************
  2489. IMPLICIT NONE
  2490. !-------------------------------------------------------------------
  2491. !--- input variables
  2492. INTEGER, INTENT(IN ) :: ktau,nzs , &
  2493. nddzs !nddzs=2*(nzs-2)
  2494. INTEGER, INTENT(IN ) :: i,j,isoil
  2495. REAL, INTENT(IN ) :: DELT,CONFLX,PRCPMS , &
  2496. RAINF,NEWSNOW,RHONEWSN,meltfactor
  2497. real :: rhonewcsn
  2498. !--- 3-D Atmospheric variables
  2499. REAL, &
  2500. INTENT(IN ) :: PATM, &
  2501. QVATM, &
  2502. QCATM
  2503. !--- 2-D variables
  2504. REAL , &
  2505. INTENT(IN ) :: GLW, &
  2506. GSW, &
  2507. RHO, &
  2508. QKMS, &
  2509. TKMS
  2510. !--- sea ice properties
  2511. REAL, DIMENSION(1:NZS) , &
  2512. INTENT(IN ) :: &
  2513. tice, &
  2514. rhosice, &
  2515. capice, &
  2516. thdifice
  2517. REAL, INTENT(IN ) :: &
  2518. CW, &
  2519. XLV
  2520. REAL, DIMENSION(1:NZS), INTENT(IN) :: ZSMAIN, &
  2521. ZSHALF, &
  2522. DTDZS2
  2523. REAL, DIMENSION(1:NDDZS), INTENT(IN) :: DTDZS
  2524. REAL, DIMENSION(1:4001), INTENT(IN) :: TBQ
  2525. !--- input/output variables
  2526. !-------- 3-d soil moisture and temperature
  2527. REAL, DIMENSION( 1:nzs ) , &
  2528. INTENT(INOUT) :: TSO
  2529. INTEGER, INTENT(INOUT) :: ILAND
  2530. !-------- 2-d variables
  2531. REAL , &
  2532. INTENT(INOUT) :: DEW, &
  2533. EETA, &
  2534. RHOSN, &
  2535. SUBLIM, &
  2536. PRCPL, &
  2537. ALB, &
  2538. EMISS, &
  2539. ZNT, &
  2540. QVG, &
  2541. QSG, &
  2542. QCG, &
  2543. QFX, &
  2544. HFX, &
  2545. S, &
  2546. SNWE, &
  2547. SNHEI, &
  2548. SMELT, &
  2549. SNOM, &
  2550. SNOH, &
  2551. SNFLX, &
  2552. SOILT, &
  2553. SOILT1, &
  2554. SNOWFRAC, &
  2555. TSNAV
  2556. INTEGER, INTENT(INOUT) :: ILNB
  2557. REAL, INTENT(OUT) :: RSM, &
  2558. SNWEPRINT, &
  2559. SNHEIPRINT
  2560. !--- Local variables
  2561. INTEGER :: nzs1,nzs2,k,k1,kn,kk
  2562. REAL :: x,x1,x2,dzstop,ft,tn,denom
  2563. REAL :: SNTH, NEWSN , &
  2564. TABS, T3, UPFLUX, XINET , &
  2565. BETA, SNWEPR,EPDT,PP
  2566. REAL :: CP,rovcp,G0,LV,xlvm,STBOLT,xlmelt , &
  2567. epot,fltot,fq,hft,q1,ras,rhoice,ci,cvw , &
  2568. RIW,DELTSN,H
  2569. REAL :: rhocsn,thdifsn, &
  2570. xsn,ddzsn,x1sn,d1sn,d2sn,d9sn,r22sn
  2571. REAL :: cotsn,rhtsn,xsn1,ddzsn1,x1sn1,ftsnow,denomsn
  2572. REAL :: fso,fsn, &
  2573. FKT,D1,D2,D9,D10,DID,R211,R21,R22,R6,R7,D11, &
  2574. FKQ,R210,AA,BB,QS1,TS1,TQ2,TX2, &
  2575. TDENOM,AA1,RHCS,H1,TSOB, SNPRIM, &
  2576. SNODIF,SOH,TNOLD,QGOLD,SNOHGNEW
  2577. REAL, DIMENSION(1:NZS) :: cotso,rhtso
  2578. REAL :: RNET,rsmfrac,soiltfrac,hsn
  2579. integer :: nmelt
  2580. !-----------------------------------------------------------------
  2581. XLMELT=3.35E+5
  2582. !-- the next line calculates heat of sublimation of water vapor
  2583. XLVm=XLV+XLMELT
  2584. ! STBOLT=5.670151E-8
  2585. !--- SNOW flag -- 99
  2586. ILAND=99
  2587. !--- DELTSN - is the threshold for splitting the snow layer into 2 layers.
  2588. !--- With snow density 400 kg/m^3, this threshold is equal to 7.5 cm,
  2589. !--- equivalent to 0.03 m SNWE. For other snow densities the threshold is
  2590. !--- computed using SNWE=0.03 m and current snow density.
  2591. !--- SNTH - the threshold below which the snow layer is combined with
  2592. !--- the top sea ice layer. SNTH is computed using snwe=0.016 m, and
  2593. !--- equals 4 cm for snow density 400 kg/m^3.
  2594. DELTSN=0.0301*1.e3/rhosn
  2595. snth=0.01601*1.e3/rhosn
  2596. !tgs when the snow depth is marginlly higher than DELTSN,
  2597. ! reset DELTSN to half of snow depth.
  2598. IF(SNHEI.GE.DELTSN+SNTH) THEN
  2599. ! 2-layer model
  2600. if(snhei-deltsn-snth.lt.snth) deltsn=0.5*(snhei-snth)
  2601. ENDIF
  2602. RHOICE=900.
  2603. CI=RHOICE*2100.
  2604. RAS=RHO*1.E-3
  2605. RIW=rhoice*1.e-3
  2606. RSM=0.
  2607. XLMELT=3.35E+5
  2608. RHOCSN=2090.* RHOSN
  2609. !18apr08 - add rhonewcsn
  2610. RHOnewCSN=2090.* RHOnewSN
  2611. THDIFSN = 0.265/RHOCSN
  2612. RAS=RHO*1.E-3
  2613. SOILTFRAC=SOILT
  2614. SMELT=0.
  2615. SOH=0.
  2616. SNODIF=0.
  2617. SNOH=0.
  2618. SNOHGNEW=0.
  2619. RSM = 0.
  2620. RSMFRAC = 0.
  2621. fsn=1.
  2622. fso=0.
  2623. hsn=snhei
  2624. ! cvw=cw
  2625. NZS1=NZS-1
  2626. NZS2=NZS-2
  2627. QGOLD=QVG
  2628. TNOLD=SOILT
  2629. DZSTOP=1./(ZSMAIN(2)-ZSMAIN(1))
  2630. snweprint=0.
  2631. snheiprint=0.
  2632. prcpl=prcpms
  2633. !*** DELTSN is the depth of the top layer of snow where
  2634. !*** there is a temperature gradient, the rest of the snow layer
  2635. !*** is considered to have constant temperature
  2636. H=1.
  2637. SMELT=0.
  2638. FQ=QKMS
  2639. SNHEI=SNWE*1.e3/RHOSN
  2640. SNWEPR=SNWE
  2641. ! check if all snow can evaporate during DT
  2642. BETA=1.
  2643. EPOT = -FQ*(QVATM-QSG)
  2644. EPDT = EPOT * RAS *DELT
  2645. IF(SNWEPR.LE.EPDT) THEN
  2646. BETA=SNWEPR/max(1.e-8,EPDT)
  2647. SNWE=0.
  2648. SNHEI=0.
  2649. ENDIF
  2650. !******************************************************************************
  2651. ! COEFFICIENTS FOR THOMAS ALGORITHM FOR TSO
  2652. !******************************************************************************
  2653. cotso(1)=0.
  2654. rhtso(1)=TSO(NZS)
  2655. DO 33 K=1,NZS2
  2656. KN=NZS-K
  2657. K1=2*KN-3
  2658. X1=DTDZS(K1)*THDIFICE(KN-1)
  2659. X2=DTDZS(K1+1)*THDIFICE(KN)
  2660. FT=TSO(KN)+X1*(TSO(KN-1)-TSO(KN)) &
  2661. -X2*(TSO(KN)-TSO(KN+1))
  2662. DENOM=1.+X1+X2-X2*cotso(K)
  2663. cotso(K+1)=X1/DENOM
  2664. rhtso(K+1)=(FT+X2*rhtso(K))/DENOM
  2665. 33 CONTINUE
  2666. !--- THE NZS element in COTSO and RHTSO will be for snow
  2667. !--- There will be 2 layers in snow if it is deeper than DELTSN+SNTH
  2668. IF(SNHEI.GE.SNTH) then
  2669. if(snhei.le.DELTSN+SNTH) then
  2670. !-- 1-layer snow model
  2671. ilnb=1
  2672. snprim=snhei
  2673. soilt1=tso(1)
  2674. tsob=tso(1)
  2675. XSN = DELT/2./(zshalf(2)+0.5*SNPRIM)
  2676. DDZSN = XSN / SNPRIM
  2677. X1SN = DDZSN * thdifsn
  2678. X2 = DTDZS(1)*THDIFICE(1)
  2679. FT = TSO(1)+X1SN*(SOILT-TSO(1)) &
  2680. -X2*(TSO(1)-TSO(2))
  2681. DENOM = 1. + X1SN + X2 -X2*cotso(NZS1)
  2682. cotso(NZS)=X1SN/DENOM
  2683. rhtso(NZS)=(FT+X2*rhtso(NZS1))/DENOM
  2684. cotsn=cotso(NZS)
  2685. rhtsn=rhtso(NZS)
  2686. !*** Average temperature of snow pack (C)
  2687. tsnav=0.5*(soilt+tso(1)) &
  2688. -273.15
  2689. else
  2690. !-- 2 layers in snow, SOILT1 is temperasture at DELTSN depth
  2691. ilnb=2
  2692. snprim=deltsn
  2693. tsob=soilt1
  2694. XSN = DELT/2./(0.5*SNHEI)
  2695. XSN1= DELT/2./(zshalf(2)+0.5*(SNHEI-DELTSN))
  2696. DDZSN = XSN / DELTSN
  2697. DDZSN1 = XSN1 / (SNHEI-DELTSN)
  2698. X1SN = DDZSN * thdifsn
  2699. X1SN1 = DDZSN1 * thdifsn
  2700. X2 = DTDZS(1)*THDIFICE(1)
  2701. FT = TSO(1)+X1SN1*(SOILT1-TSO(1)) &
  2702. -X2*(TSO(1)-TSO(2))
  2703. DENOM = 1. + X1SN1 + X2 - X2*cotso(NZS1)
  2704. cotso(nzs)=x1sn1/denom
  2705. rhtso(nzs)=(ft+x2*rhtso(nzs1))/denom
  2706. ftsnow = soilt1+x1sn*(soilt-soilt1) &
  2707. -x1sn1*(soilt1-tso(1))
  2708. denomsn = 1. + X1SN + X1SN1 - X1SN1*cotso(NZS)
  2709. cotsn=x1sn/denomsn
  2710. rhtsn=(ftsnow+X1SN1*rhtso(NZS))/denomsn
  2711. !*** Average temperature of snow pack (C)
  2712. tsnav=0.5/snhei*((soilt+soilt1)*deltsn &
  2713. +(soilt1+tso(1))*(SNHEI-DELTSN)) &
  2714. -273.15
  2715. endif
  2716. ENDIF
  2717. IF(SNHEI.LT.SNTH.AND.SNHEI.GT.0.) then
  2718. !--- snow is too thin to be treated separately, therefore it
  2719. !--- is combined with the first sea ice layer.
  2720. fsn=SNHEI/(SNHEI+zsmain(2))
  2721. fso=1.-fsn
  2722. soilt1=tso(1)
  2723. tsob=tso(2)
  2724. snprim=SNHEI+zsmain(2)
  2725. XSN = DELT/2./((zshalf(3)-zsmain(2))+0.5*snprim)
  2726. DDZSN = XSN /snprim
  2727. X1SN = DDZSN * (fsn*thdifsn+fso*thdifice(1))
  2728. X2=DTDZS(2)*THDIFICE(2)
  2729. FT=TSO(2)+X1SN*(SOILT-TSO(2))- &
  2730. X2*(TSO(2)-TSO(3))
  2731. denom = 1. + x1sn + x2 - x2*cotso(nzs-2)
  2732. cotso(nzs1) = x1sn/denom
  2733. rhtso(nzs1)=(FT+X2*rhtso(NZS-2))/denom
  2734. tsnav=0.5*(soilt+tso(1)) &
  2735. -273.15
  2736. ENDIF
  2737. !************************************************************************
  2738. !--- THE HEAT BALANCE EQUATION
  2739. !18apr08 nmelt is the flag for melting, and SNOH is heat of snow phase changes
  2740. nmelt=0
  2741. SNOH=0.
  2742. EPOT=-QKMS*(QVATM-QSG)
  2743. RHCS=CAPICE(1)
  2744. H=1.
  2745. FKT=TKMS
  2746. D1=cotso(NZS1)
  2747. D2=rhtso(NZS1)
  2748. TN=SOILT
  2749. D9=THDIFICE(1)*RHCS*dzstop
  2750. D10=TKMS*CP*RHO
  2751. R211=.5*CONFLX/DELT
  2752. R21=R211*CP*RHO
  2753. R22=.5/(THDIFICE(1)*DELT*dzstop**2)
  2754. R6=EMISS *STBOLT*.5*TN**4
  2755. R7=R6/TN
  2756. D11=RNET+R6
  2757. IF(SNHEI.GE.SNTH) THEN
  2758. if(snhei.le.DELTSN+SNTH) then
  2759. !--- 1-layer snow
  2760. D1SN = cotso(NZS)
  2761. D2SN = rhtso(NZS)
  2762. else
  2763. !--- 2-layer snow
  2764. D1SN = cotsn
  2765. D2SN = rhtsn
  2766. endif
  2767. D9SN= THDIFSN*RHOCSN / SNPRIM
  2768. R22SN = SNPRIM*SNPRIM*0.5/(THDIFSN*DELT)
  2769. ENDIF
  2770. IF(SNHEI.LT.SNTH.AND.SNHEI.GT.0.) then
  2771. !--- thin snow is combined with sea ice
  2772. D1SN = D1
  2773. D2SN = D2
  2774. D9SN = (fsn*THDIFSN*RHOCSN+fso*THDIFICE(1)*RHCS)/ &
  2775. snprim
  2776. R22SN = snprim*snprim*0.5 &
  2777. /((fsn*THDIFSN+fso*THDIFICE(1))*delt)
  2778. ENDIF
  2779. IF(SNHEI.eq.0.)then
  2780. !--- all snow is sublimated
  2781. D9SN = D9
  2782. R22SN = R22
  2783. D1SN = D1
  2784. D2SN = D2
  2785. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  2786. print *,' SNHEI = 0, D9SN,R22SN,D1SN,D2SN: ',D9SN,R22SN,D1SN,D2SN
  2787. ENDIF
  2788. ENDIF
  2789. !---- TDENOM for snow
  2790. !18apr08 - the iteration start point
  2791. 212 continue
  2792. TDENOM = D9SN*(1.-D1SN +R22SN)+D10+R21+R7 &
  2793. +RAINF*CVW*PRCPMS &
  2794. +RHOnewCSN*NEWSNOW/DELT
  2795. FKQ=QKMS*RHO
  2796. R210=R211*RHO
  2797. AA=XLVM*(BETA*FKQ+R210)/TDENOM
  2798. BB=(D10*TABS+R21*TN+XLVM*(QVATM* &
  2799. (BETA*FKQ) &
  2800. +R210*QVG)+D11+D9SN*(D2SN+R22SN*TN) &
  2801. +RAINF*CVW*PRCPMS*max(273.15,TABS) &
  2802. + RHOnewCSN*NEWSNOW/DELT*min(273.15,TABS) &
  2803. !18apr08 - add heat of snow phase change
  2804. -SNOH &
  2805. )/TDENOM
  2806. AA1=AA
  2807. PP=PATM*1.E3
  2808. AA1=AA1/PP
  2809. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  2810. print *,'VILKA-SNOW on SEAICE'
  2811. print *,'tn,aa1,bb,pp,fkq,r210', &
  2812. tn,aa1,bb,pp,fkq,r210
  2813. ENDIF
  2814. CALL VILKA(TN,AA1,BB,PP,QS1,TS1,TBQ,KTAU,i,j,iland,isoil)
  2815. !--- it is saturation over snow
  2816. QVG=QS1
  2817. QSG=QS1
  2818. QCG=0.
  2819. !--- SOILT - skin temperature
  2820. SOILT=TS1
  2821. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  2822. print *,' AFTER VILKA-SNOW on SEAICE'
  2823. print *,' TS1,QS1: ', ts1,qs1
  2824. ENDIF
  2825. ! Solution for temperature at 7.5 cm depth and snow-seaice interface
  2826. IF(SNHEI.GE.SNTH) THEN
  2827. if(snhei.gt.DELTSN+SNTH) then
  2828. !-- 2-layer snow model
  2829. SOILT1=rhtsn+cotsn*SOILT
  2830. TSO(1)=min(271.4,(rhtso(NZS)+cotso(NZS)*SOILT1))
  2831. tsob=soilt1
  2832. else
  2833. !-- 1 layer in snow
  2834. TSO(1)=min(271.4,(rhtso(NZS)+cotso(NZS)*SOILT))
  2835. SOILT1=TSO(1)
  2836. tsob=tso(1)
  2837. endif
  2838. ELSE
  2839. TSO(1)=SOILT
  2840. SOILT1=SOILT
  2841. tsob=SOILT
  2842. ENDIF
  2843. !---- Final solution for TSO in sea ice
  2844. DO K=2,NZS
  2845. KK=NZS-K+1
  2846. TSO(K)=min(271.4,(rhtso(KK)+cotso(KK)*TSO(K-1)))
  2847. END DO
  2848. !--- For thin snow layer combined with the top sea ice layer
  2849. !--- TSO is computed by linear inmterpolation between SOILT
  2850. !--- and TSO(2)
  2851. if(nmelt.eq.1) go to 220
  2852. !--- IF SOILT > 273.15 F then melting of snow can happen
  2853. IF(SOILT.GT.273.15.AND.SNHEI.GT.0.) THEN
  2854. nmelt = 1
  2855. soiltfrac=snowfrac*273.15+(1.-snowfrac)*SOILT
  2856. QSG= QSN(soiltfrac,TBQ)/PP
  2857. QVG=QSG
  2858. T3 = STBOLT*SOILTfrac*SOILTfrac*SOILTfrac
  2859. UPFLUX = T3 * SOILTfrac
  2860. XINET = EMISS*(GLW-UPFLUX)
  2861. RNET = GSW + XINET
  2862. EPOT = -QKMS*(QVATM-QSG)
  2863. Q1=EPOT*RAS
  2864. IF (Q1.LE.0.) THEN
  2865. ! --- condensation
  2866. DEW=-EPOT
  2867. QFX= XLVM*RHO*DEW
  2868. EETA=QFX/XLVM
  2869. ELSE
  2870. ! --- evaporation
  2871. EETA = Q1 * BETA *1.E3
  2872. ! to convert from kg m-2 s-1 to m s-1: 1/rho water=1.e-3************
  2873. QFX= - XLVM * EETA
  2874. ENDIF
  2875. HFX=D10*(TABS-soiltfrac)
  2876. IF(SNHEI.GE.SNTH)then
  2877. SOH=thdifsn*RHOCSN*(soiltfrac-TSOB)/SNPRIM
  2878. SNFLX=SOH
  2879. ELSE
  2880. SOH=(fsn*thdifsn*rhocsn+fso*thdifice(1)*rhcs)* &
  2881. (soiltfrac-TSOB)/snprim
  2882. SNFLX=SOH
  2883. ENDIF
  2884. X= (R21+D9SN*R22SN)*(soiltfrac-TNOLD) + &
  2885. XLVM*R210*(QSG-QGOLD)
  2886. !-- SNOH is energy flux of snow phase change
  2887. SNOH=RNET+QFX +HFX &
  2888. +RHOnewCSN*NEWSNOW/DELT*(min(273.15,TABS)-TN) &
  2889. -SOH-X+RAINF*CVW*PRCPMS* &
  2890. (max(273.15,TABS)-TN)
  2891. SNOH=AMAX1(0.,SNOH)
  2892. !-- SMELT is speed of melting in M/S
  2893. SMELT= SNOH /XLMELT*1.E-3
  2894. SMELT=AMIN1(SMELT,SNWEPR/DELT-BETA*EPOT*RAS)
  2895. SMELT=AMAX1(0.,SMELT)
  2896. !18apr08 - Egglston limit
  2897. ! SMELT= amin1 (smelt, 5.6E-7*meltfactor*max(1.,(soilt-273.15)))
  2898. SMELT= amin1 (smelt, 5.6E-8*meltfactor*max(1.,(soilt-273.15)))
  2899. !*** From Koren et al. (1999) 13% of snow melt stays in the snow pack
  2900. !!! rsm=0.13*smelt*delt
  2901. if(snwepr.gt.0.) then
  2902. rsmfrac=min(0.18,(max(0.08,0.10/snwepr*0.13)))
  2903. ! else
  2904. ! rsmfrac=0.13
  2905. endif
  2906. rsm=rsmfrac*smelt*delt
  2907. !18apr08 rsm is part of melted water that stays in snow as liquid
  2908. SMELT=AMAX1(0.,SMELT-rsm/delt)
  2909. SNOHGNEW=SMELT*XLMELT*1.E3
  2910. SNODIF=AMAX1(0.,(SNOH-SNOHGNEW))
  2911. SNOH=SNOHGNEW
  2912. !18apr08 - if snow melt occurred then go into iteration for energy budget
  2913. ! solution
  2914. !-- correction of liquid equivalent of snow depth
  2915. !-- due to evaporation and snow melt
  2916. SNWE = AMAX1(0.,(SNWEPR- &
  2917. (SMELT+BETA*EPOT*RAS)*DELT &
  2918. ) )
  2919. !--- If all snow melts, then 13% of snow melt we kept in the
  2920. !--- snow pack should be added back to snow melt and infiltrate
  2921. !--- into soil.
  2922. if(snwe.le.rsm) then
  2923. smelt=smelt+rsm/delt
  2924. snwe=0.
  2925. rsm=0.
  2926. else
  2927. !*** Correct snow density on effect of snow melt, melted
  2928. !*** from the top of the snow. 13% of melted water
  2929. !*** remains in the pack and changes its density.
  2930. !*** Eq. 9 (with my correction) in Koren et al. (1999)
  2931. if(snwe.gt.0.) then
  2932. xsn=(rhosn*(snwe-rsm)+1.e3*rsm)/ &
  2933. snwe
  2934. rhosn=MIN(XSN,400.)
  2935. RHOCSN=2090.* RHOSN
  2936. thdifsn = 0.265/RHOCSN
  2937. endif
  2938. endif
  2939. !--- If there is no snow melting then just evaporation
  2940. !--- or condensation cxhanges SNWE
  2941. ELSE
  2942. EPOT=-QKMS*(QVATM-QSG)
  2943. SNWE = AMAX1(0.,(SNWEPR- &
  2944. BETA*EPOT*RAS*DELT))
  2945. ENDIF
  2946. !*** Correct snow density on effect of snow melt, melted
  2947. !*** from the top of the snow. 13% of melted water
  2948. !*** remains in the pack and changes its density.
  2949. !*** Eq. 9 (with my correction) in Koren et al. (1999)
  2950. SNHEI=SNWE *1.E3 / RHOSN
  2951. snweprint=snwe
  2952. ! &
  2953. !--- if VEGFRAC.ne.0. then some snow stays on the canopy
  2954. !--- and should be added to SNWE for water conservation
  2955. ! 4 Nov 07 +VEGFRAC*cst
  2956. snheiprint=snweprint*1.E3 / RHOSN
  2957. if(nmelt.eq.1) goto 212
  2958. 220 continue
  2959. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  2960. print *, 'snweprint : ',snweprint
  2961. print *, 'D9SN,SOILT,TSOB : ', D9SN,SOILT,TSOB
  2962. ENDIF
  2963. !--- Compute flux in the top snow layer
  2964. SNFLX=D9SN*(SOILT-TSOB)
  2965. IF(SNHEI.GT.0.) THEN
  2966. if(ilnb.gt.1) then
  2967. tsnav=0.5/snhei*((soilt+soilt1)*deltsn &
  2968. +(soilt1+tso(1))*(SNHEI-DELTSN)) &
  2969. -273.15
  2970. else
  2971. tsnav=0.5*(soilt+tso(1)) - 273.15
  2972. endif
  2973. ENDIF
  2974. !--- RECALCULATION OF DEW USING NEW VALUE OF QSG
  2975. DEW=0.
  2976. PP=PATM*1.E3
  2977. QSG= QSN(SOILT,TBQ)/PP
  2978. EPOT = -FQ*(QVATM-QSG)
  2979. IF(EPOT.LT.0.) THEN
  2980. ! Sublimation
  2981. DEW=-EPOT
  2982. ENDIF
  2983. !-- Restore sea-ice parameters if snow is less than threshold
  2984. IF(SNHEI.EQ.0.) then
  2985. tsnav=soilt-273.15
  2986. smelt=smelt+snwe/delt
  2987. rsm=0.
  2988. emiss=1.
  2989. znt=0.011
  2990. alb=0.55
  2991. ENDIF
  2992. SNOM=SNOM+SMELT*DELT*1.e3
  2993. !--- THE DIAGNOSTICS OF SURFACE FLUXES
  2994. T3 = STBOLT*SOILT*SOILT*SOILT
  2995. UPFLUX = T3 *SOILT
  2996. XINET = EMISS*(GLW-UPFLUX)
  2997. RNET = GSW + XINET
  2998. HFT=-TKMS*CP*RHO*(TABS-SOILT) &
  2999. *(P1000mb*0.00001/Patm)**ROVCP
  3000. Q1 = - FQ*RAS* (QVATM - QSG)
  3001. IF (Q1.LT.0.) THEN
  3002. ! --- condensation
  3003. !-- moisture flux for coupling with PBL
  3004. EETA=-QKMS*RAS*(QVATM/(1.+QVATM) - QSG/(1.+QSG))*1.E3
  3005. QFX= XLVm*EETA
  3006. !-- actual moisture flux from RUC LSM
  3007. DEW=QKMS*(QVATM-QSG)
  3008. EETA= RHO*DEW
  3009. sublim = EETA
  3010. ELSE
  3011. ! --- evaporation
  3012. !-- moisture flux for coupling with PBL
  3013. EETA=-QKMS*RAS*(QVATM/(1.+QVATM) - QVG/(1.+QVG))*1.E3
  3014. ! EETA=-QKMS*RAS*(QVATM/(1.+QVATM) - QSG/(1.+QSG))*1.E3
  3015. ! to convert from kg m-2 s-1 to m s-1: 1/rho water=1.e-3************
  3016. QFX= XLVm * EETA
  3017. !-- actual moisture flux from RUC LSM
  3018. EETA = Q1*1.E3
  3019. sublim = EETA
  3020. ENDIF
  3021. s=THDIFICE(1)*CAPICE(1)*dzstop*(tso(1)-tso(2))
  3022. ! s=D9SN*(SOILT-TSOB)
  3023. HFX=HFT
  3024. FLTOT=RNET-HFT-QFX-S
  3025. !------------------------------------------------------------------------
  3026. !------------------------------------------------------------------------
  3027. END SUBROUTINE SNOWSEAICE
  3028. !------------------------------------------------------------------------
  3029. SUBROUTINE SOILTEMP( &
  3030. !--- input variables
  3031. i,j,iland,isoil, &
  3032. delt,ktau,conflx,nzs,nddzs,nroot, &
  3033. PRCPMS,RAINF,PATM,TABS,QVATM,QCATM, &
  3034. EMISS,RNET, &
  3035. QKMS,TKMS,PC,RHO,VEGFRAC, &
  3036. THDIF,CAP,DRYCAN,WETCAN, &
  3037. TRANSUM,DEW,MAVAIL, &
  3038. !--- soil fixed fields
  3039. DQM,QMIN,BCLH, &
  3040. ZSMAIN,ZSHALF,DTDZS,TBQ, &
  3041. !--- constants
  3042. XLV,CP,G0_P,CVW,STBOLT, &
  3043. !--- output variables
  3044. TSO,SOILT,QVG,QSG,QCG)
  3045. !*************************************************************
  3046. ! Energy budget equation and heat diffusion eqn are
  3047. ! solved here and
  3048. !
  3049. ! DELT - time step (s)
  3050. ! ktau - numver of time step
  3051. ! CONFLX - depth of constant flux layer (m)
  3052. ! IME, JME, KME, NZS - dimensions of the domain
  3053. ! NROOT - number of levels within the root zone
  3054. ! PRCPMS - precipitation rate in m/s
  3055. ! COTSO, RHTSO - coefficients for implicit solution of
  3056. ! heat diffusion equation
  3057. ! THDIF - thermal diffusivity (m^2/s)
  3058. ! QSG,QVG,QCG - saturated mixing ratio, mixing ratio of
  3059. ! water vapor and cloud at the ground
  3060. ! surface, respectively (kg/kg)
  3061. ! PATM - pressure [bar]
  3062. ! QC3D,QV3D - cloud and water vapor mixing ratio
  3063. ! at the first atm. level (kg/kg)
  3064. ! EMISS,RNET - emissivity (0-1) of the ground surface and net
  3065. ! radiation at the surface (W/m^2)
  3066. ! QKMS - exchange coefficient for water vapor in the
  3067. ! surface layer (m/s)
  3068. ! TKMS - exchange coefficient for heat in the surface
  3069. ! layer (m/s)
  3070. ! PC - plant coefficient (resistance)
  3071. ! RHO - density of atmosphere near surface (kg/m^3)
  3072. ! VEGFRAC - greeness fraction (0-1)
  3073. ! CAP - volumetric heat capacity (J/m^3/K)
  3074. ! DRYCAN - dry fraction of vegetated area where
  3075. ! transpiration may take place (0-1)
  3076. ! WETCAN - fraction of vegetated area covered by canopy
  3077. ! water (0-1)
  3078. ! TRANSUM - transpiration function integrated over the
  3079. ! rooting zone (m)
  3080. ! DEW - dew in kg/m^2s
  3081. ! MAVAIL - fraction of maximum soil moisture in the top
  3082. ! layer (0-1)
  3083. ! ZSMAIN - main levels in soil (m)
  3084. ! ZSHALF - middle of the soil layers (m)
  3085. ! DTDZS - dt/(2.*dzshalf*dzmain)
  3086. ! TBQ - table to define saturated mixing ration
  3087. ! of water vapor for given temperature and pressure
  3088. ! TSO - soil temperature (K)
  3089. ! SOILT - skin temperature (K)
  3090. !
  3091. !****************************************************************
  3092. IMPLICIT NONE
  3093. !-----------------------------------------------------------------
  3094. !--- input variables
  3095. INTEGER, INTENT(IN ) :: nroot,ktau,nzs , &
  3096. nddzs !nddzs=2*(nzs-2)
  3097. INTEGER, INTENT(IN ) :: i,j,iland,isoil
  3098. REAL, INTENT(IN ) :: DELT,CONFLX,PRCPMS, RAINF
  3099. REAL, INTENT(INOUT) :: DRYCAN,WETCAN,TRANSUM
  3100. !--- 3-D Atmospheric variables
  3101. REAL, &
  3102. INTENT(IN ) :: PATM, &
  3103. QVATM, &
  3104. QCATM
  3105. !--- 2-D variables
  3106. REAL , &
  3107. INTENT(IN ) :: &
  3108. EMISS, &
  3109. RHO, &
  3110. RNET, &
  3111. PC, &
  3112. VEGFRAC, &
  3113. DEW, &
  3114. QKMS, &
  3115. TKMS
  3116. !--- soil properties
  3117. REAL , &
  3118. INTENT(IN ) :: &
  3119. BCLH, &
  3120. DQM, &
  3121. QMIN
  3122. REAL, INTENT(IN ) :: CP, &
  3123. CVW, &
  3124. XLV, &
  3125. STBOLT, &
  3126. TABS, &
  3127. G0_P
  3128. REAL, DIMENSION(1:NZS), INTENT(IN) :: ZSMAIN, &
  3129. ZSHALF, &
  3130. THDIF, &
  3131. CAP
  3132. REAL, DIMENSION(1:NDDZS), INTENT(IN) :: DTDZS
  3133. REAL, DIMENSION(1:4001), INTENT(IN) :: TBQ
  3134. !--- input/output variables
  3135. !-------- 3-d soil moisture and temperature
  3136. REAL, DIMENSION( 1:nzs ) , &
  3137. INTENT(INOUT) :: TSO
  3138. !-------- 2-d variables
  3139. REAL , &
  3140. INTENT(INOUT) :: &
  3141. MAVAIL, &
  3142. QVG, &
  3143. QSG, &
  3144. QCG, &
  3145. SOILT
  3146. !--- Local variables
  3147. REAL :: x,x1,x2,x4,dzstop,can,ft,sph , &
  3148. tn,trans,umveg,denom
  3149. REAL :: FKT,D1,D2,D9,D10,DID,R211,R21,R22,R6,R7,D11 , &
  3150. PI,H,FKQ,R210,AA,BB,PP,Q1,QS1,TS1,TQ2,TX2 , &
  3151. TDENOM
  3152. REAL :: C,CC,AA1,RHCS,H1
  3153. REAL, DIMENSION(1:NZS) :: cotso,rhtso
  3154. INTEGER :: nzs1,nzs2,k,k1,kn,kk
  3155. !-----------------------------------------------------------------
  3156. NZS1=NZS-1
  3157. NZS2=NZS-2
  3158. dzstop=1./(ZSMAIN(2)-ZSMAIN(1))
  3159. do k=1,nzs
  3160. cotso(k)=0.
  3161. rhtso(k)=0.
  3162. enddo
  3163. !******************************************************************************
  3164. ! COEFFICIENTS FOR THOMAS ALGORITHM FOR TSO
  3165. !******************************************************************************
  3166. ! did=2.*(ZSMAIN(nzs)-ZSHALF(nzs))
  3167. ! h1=DTDZS(8)*THDIF(nzs-1)*(ZSHALF(nzs)-ZSHALF(nzs-1))/did
  3168. ! cotso(1)=h1/(1.+h1)
  3169. ! rhtso(1)=(tso(nzs)+h1*(tso(nzs-1)-tso(nzs)))/
  3170. ! 1 (1.+h1)
  3171. cotso(1)=0.
  3172. rhtso(1)=TSO(NZS)
  3173. DO 33 K=1,NZS2
  3174. KN=NZS-K
  3175. K1=2*KN-3
  3176. X1=DTDZS(K1)*THDIF(KN-1)
  3177. X2=DTDZS(K1+1)*THDIF(KN)
  3178. FT=TSO(KN)+X1*(TSO(KN-1)-TSO(KN)) &
  3179. -X2*(TSO(KN)-TSO(KN+1))
  3180. DENOM=1.+X1+X2-X2*cotso(K)
  3181. cotso(K+1)=X1/DENOM
  3182. rhtso(K+1)=(FT+X2*rhtso(K))/DENOM
  3183. 33 CONTINUE
  3184. !************************************************************************
  3185. !--- THE HEAT BALANCE EQUATION (Smirnova et al., 1996, EQ. 21,26)
  3186. RHCS=CAP(1)
  3187. H=MAVAIL
  3188. IF(DEW.NE.0.)THEN
  3189. DRYCAN=0.
  3190. WETCAN=1.
  3191. ENDIf
  3192. TRANS=PC*TRANSUM*DRYCAN/ZSHALF(NROOT+1)
  3193. CAN=WETCAN+TRANS
  3194. UMVEG=1.-VEGFRAC
  3195. FKT=TKMS
  3196. D1=cotso(NZS1)
  3197. D2=rhtso(NZS1)
  3198. TN=SOILT
  3199. D9=THDIF(1)*RHCS*dzstop
  3200. D10=TKMS*CP*RHO
  3201. R211=.5*CONFLX/DELT
  3202. R21=R211*CP*RHO
  3203. R22=.5/(THDIF(1)*DELT*dzstop**2)
  3204. R6=EMISS *STBOLT*.5*TN**4
  3205. R7=R6/TN
  3206. D11=RNET+R6
  3207. TDENOM=D9*(1.-D1+R22)+D10+R21+R7 &
  3208. +RAINF*CVW*PRCPMS
  3209. FKQ=QKMS*RHO
  3210. R210=R211*RHO
  3211. C=VEGFRAC*FKQ*CAN
  3212. CC=C*XLV/TDENOM
  3213. AA=XLV*(FKQ*UMVEG+R210)/TDENOM
  3214. BB=(D10*TABS+R21*TN+XLV*(QVATM* &
  3215. (FKQ*UMVEG+C) &
  3216. +R210*QVG)+D11+D9*(D2+R22*TN) &
  3217. +RAINF*CVW*PRCPMS*max(273.15,TABS) &
  3218. )/TDENOM
  3219. AA1=AA+CC
  3220. PP=PATM*1.E3
  3221. AA1=AA1/PP
  3222. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  3223. PRINT *,' VILKA-1'
  3224. print *,'D10,TABS,R21,TN,QVATM,FKQ,UMVEG,VEGFRAC,CAN', &
  3225. D10,TABS,R21,TN,QVATM,FKQ,UMVEG,VEGFRAC,CAN
  3226. print *,'RNET, EMISS, STBOLT, SOILT',RNET, EMISS, STBOLT, SOILT
  3227. print *,'R210,QVG,D11,D9,D2,R22,RAINF,CVW,PRCPMS,TDENOM', &
  3228. R210,QVG,D11,D9,D2,R22,RAINF,CVW,PRCPMS,TDENOM
  3229. print *,'tn,aa1,bb,pp,umveg,fkq,r210,vegfrac', &
  3230. tn,aa1,bb,pp,umveg,fkq,r210,vegfrac
  3231. ENDIF
  3232. CALL VILKA(TN,AA1,BB,PP,QS1,TS1,TBQ,KTAU,i,j,iland,isoil)
  3233. TQ2=QVATM
  3234. TX2=TQ2*(1.-H)
  3235. Q1=TX2+H*QS1
  3236. IF(Q1.LT.QS1) GOTO 100
  3237. !--- if no saturation - goto 100
  3238. !--- if saturation - goto 90
  3239. 90 QVG=QS1
  3240. QSG=QS1
  3241. TSO(1)=TS1
  3242. QCG=max(0.,Q1-QS1)
  3243. GOTO 200
  3244. 100 BB=BB-AA*TX2
  3245. AA=(AA*H+CC)/PP
  3246. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  3247. PRINT *,' VILKA-2'
  3248. print *,'D10,TABS,R21,TN,QVATM,FKQ,UMVEG,VEGFRAC,CAN', &
  3249. D10,TABS,R21,TN,QVATM,FKQ,UMVEG,VEGFRAC,CAN
  3250. print *,'R210,QVG,D11,D9,D2,R22,RAINF,CVW,PRCPMS,TDENOM', &
  3251. R210,QVG,D11,D9,D2,R22,RAINF,CVW,PRCPMS,TDENOM
  3252. print *,'tn,aa1,bb,pp,umveg,fkq,r210,vegfrac', &
  3253. tn,aa1,bb,pp,umveg,fkq,r210,vegfrac
  3254. ENDIF
  3255. CALL VILKA(TN,AA,BB,PP,QS1,TS1,TBQ,KTAU,i,j,iland,isoil)
  3256. Q1=TX2+H*QS1
  3257. IF(Q1.GT.QS1) GOTO 90
  3258. QSG=QS1
  3259. QVG=Q1
  3260. TSO(1)=TS1
  3261. QCG=0.
  3262. 200 CONTINUE
  3263. !--- SOILT - skin temperature
  3264. SOILT=TS1
  3265. !---- Final solution for soil temperature - TSO
  3266. DO K=2,NZS
  3267. KK=NZS-K+1
  3268. TSO(K)=rhtso(KK)+cotso(KK)*TSO(K-1)
  3269. END DO
  3270. !--------------------------------------------------------------------
  3271. END SUBROUTINE SOILTEMP
  3272. !--------------------------------------------------------------------
  3273. SUBROUTINE SNOWTEMP( &
  3274. !--- input variables
  3275. i,j,iland,isoil, &
  3276. delt,ktau,conflx,nzs,nddzs,nroot, &
  3277. snwe,snwepr,snhei,newsnow,snowfrac, &
  3278. beta,deltsn,snth,rhosn,rhonewsn,meltfactor, & ! add meltfactor
  3279. PRCPMS,RAINF, &
  3280. PATM,TABS,QVATM,QCATM, &
  3281. GLW,GSW,EMISS,RNET, &
  3282. QKMS,TKMS,PC,RHO,VEGFRAC, &
  3283. THDIF,CAP,DRYCAN,WETCAN,CST, &
  3284. TRANF,TRANSUM,DEW,MAVAIL, &
  3285. !--- soil fixed fields
  3286. DQM,QMIN,PSIS,BCLH, &
  3287. ZSMAIN,ZSHALF,DTDZS,TBQ, &
  3288. !--- constants
  3289. XLVM,CP,rovcp,G0_P,CVW,STBOLT, &
  3290. !--- output variables
  3291. SNWEPRINT,SNHEIPRINT,RSM, &
  3292. TSO,SOILT,SOILT1,TSNAV,QVG,QSG,QCG, &
  3293. SMELT,SNOH,SNFLX,ILNB)
  3294. !********************************************************************
  3295. ! Energy budget equation and heat diffusion eqn are
  3296. ! solved here to obtain snow and soil temperatures
  3297. !
  3298. ! DELT - time step (s)
  3299. ! ktau - numver of time step
  3300. ! CONFLX - depth of constant flux layer (m)
  3301. ! IME, JME, KME, NZS - dimensions of the domain
  3302. ! NROOT - number of levels within the root zone
  3303. ! PRCPMS - precipitation rate in m/s
  3304. ! COTSO, RHTSO - coefficients for implicit solution of
  3305. ! heat diffusion equation
  3306. ! THDIF - thermal diffusivity (W/m/K)
  3307. ! QSG,QVG,QCG - saturated mixing ratio, mixing ratio of
  3308. ! water vapor and cloud at the ground
  3309. ! surface, respectively (kg/kg)
  3310. ! PATM - pressure [bar]
  3311. ! QCATM,QVATM - cloud and water vapor mixing ratio
  3312. ! at the first atm. level (kg/kg)
  3313. ! EMISS,RNET - emissivity (0-1) of the ground surface and net
  3314. ! radiation at the surface (W/m^2)
  3315. ! QKMS - exchange coefficient for water vapor in the
  3316. ! surface layer (m/s)
  3317. ! TKMS - exchange coefficient for heat in the surface
  3318. ! layer (m/s)
  3319. ! PC - plant coefficient (resistance)
  3320. ! RHO - density of atmosphere near surface (kg/m^3)
  3321. ! VEGFRAC - greeness fraction (0-1)
  3322. ! CAP - volumetric heat capacity (J/m^3/K)
  3323. ! DRYCAN - dry fraction of vegetated area where
  3324. ! transpiration may take place (0-1)
  3325. ! WETCAN - fraction of vegetated area covered by canopy
  3326. ! water (0-1)
  3327. ! TRANSUM - transpiration function integrated over the
  3328. ! rooting zone (m)
  3329. ! DEW - dew in kg/m^2/s
  3330. ! MAVAIL - fraction of maximum soil moisture in the top
  3331. ! layer (0-1)
  3332. ! ZSMAIN - main levels in soil (m)
  3333. ! ZSHALF - middle of the soil layers (m)
  3334. ! DTDZS - dt/(2.*dzshalf*dzmain)
  3335. ! TBQ - table to define saturated mixing ration
  3336. ! of water vapor for given temperature and pressure
  3337. ! TSO - soil temperature (K)
  3338. ! SOILT - skin temperature (K)
  3339. !
  3340. !*********************************************************************
  3341. IMPLICIT NONE
  3342. !---------------------------------------------------------------------
  3343. !--- input variables
  3344. INTEGER, INTENT(IN ) :: nroot,ktau,nzs , &
  3345. nddzs !nddzs=2*(nzs-2)
  3346. INTEGER, INTENT(IN ) :: i,j,iland,isoil
  3347. REAL, INTENT(IN ) :: DELT,CONFLX,PRCPMS , &
  3348. RAINF,NEWSNOW,DELTSN,SNTH , &
  3349. TABS,TRANSUM,SNWEPR , &
  3350. rhonewsn,meltfactor
  3351. real :: rhonewcsn
  3352. !--- 3-D Atmospheric variables
  3353. REAL, &
  3354. INTENT(IN ) :: PATM, &
  3355. QVATM, &
  3356. QCATM
  3357. !--- 2-D variables
  3358. REAL , &
  3359. INTENT(IN ) :: GLW, &
  3360. GSW, &
  3361. RHO, &
  3362. PC, &
  3363. VEGFRAC, &
  3364. QKMS, &
  3365. TKMS
  3366. !--- soil properties
  3367. REAL , &
  3368. INTENT(IN ) :: &
  3369. BCLH, &
  3370. DQM, &
  3371. PSIS, &
  3372. QMIN
  3373. REAL, INTENT(IN ) :: CP, &
  3374. ROVCP, &
  3375. CVW, &
  3376. STBOLT, &
  3377. XLVM, &
  3378. G0_P
  3379. REAL, DIMENSION(1:NZS), INTENT(IN) :: ZSMAIN, &
  3380. ZSHALF, &
  3381. THDIF, &
  3382. CAP, &
  3383. TRANF
  3384. REAL, DIMENSION(1:NDDZS), INTENT(IN) :: DTDZS
  3385. REAL, DIMENSION(1:4001), INTENT(IN) :: TBQ
  3386. !--- input/output variables
  3387. !-------- 3-d soil moisture and temperature
  3388. REAL, DIMENSION( 1:nzs ) , &
  3389. INTENT(INOUT) :: TSO
  3390. !-------- 2-d variables
  3391. REAL , &
  3392. INTENT(INOUT) :: DEW, &
  3393. CST, &
  3394. RHOSN, &
  3395. EMISS, &
  3396. MAVAIL, &
  3397. QVG, &
  3398. QSG, &
  3399. QCG, &
  3400. SNWE, &
  3401. SNHEI, &
  3402. SNOWFRAC, &
  3403. SMELT, &
  3404. SNOH, &
  3405. SNFLX, &
  3406. SOILT, &
  3407. SOILT1, &
  3408. TSNAV
  3409. REAL, INTENT(INOUT) :: DRYCAN, WETCAN
  3410. REAL, INTENT(OUT) :: RSM, &
  3411. SNWEPRINT, &
  3412. SNHEIPRINT
  3413. INTEGER, INTENT(OUT) :: ilnb
  3414. !--- Local variables
  3415. INTEGER :: nzs1,nzs2,k,k1,kn,kk
  3416. REAL :: x,x1,x2,x4,dzstop,can,ft,sph, &
  3417. tn,trans,umveg,denom
  3418. REAL :: cotsn,rhtsn,xsn1,ddzsn1,x1sn1,ftsnow,denomsn
  3419. REAL :: t3,upflux,xinet,ras, &
  3420. xlmelt,rhocsn,thdifsn, &
  3421. beta,epot,xsn,ddzsn,x1sn,d1sn,d2sn,d9sn,r22sn
  3422. REAL :: fso,fsn, &
  3423. FKT,D1,D2,D9,D10,DID,R211,R21,R22,R6,R7,D11, &
  3424. PI,H,FKQ,R210,AA,BB,PP,Q1,QS1,TS1,TQ2,TX2, &
  3425. TDENOM,C,CC,AA1,RHCS,H1, &
  3426. tsob, snprim, sh1, sh2, &
  3427. smeltg,snohg,snodif,soh, &
  3428. CMC2MS,TNOLD,QGOLD,SNOHGNEW
  3429. REAL, DIMENSION(1:NZS) :: transp,cotso,rhtso
  3430. REAL :: edir1, &
  3431. ec1, &
  3432. ett1, &
  3433. eeta, &
  3434. s, &
  3435. qfx, &
  3436. hfx
  3437. REAL :: RNET,rsmfrac,soiltfrac,hsn
  3438. integer :: nmelt
  3439. !-----------------------------------------------------------------
  3440. do k=1,nzs
  3441. transp (k)=0.
  3442. cotso (k)=0.
  3443. rhtso (k)=0.
  3444. enddo
  3445. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  3446. print *, 'SNOWTEMP: SNHEI,SNTH,SOILT1: ',SNHEI,SNTH,SOILT1,soilt
  3447. ENDIF
  3448. XLMELT=3.35E+5
  3449. RHOCSN=2090.* RHOSN
  3450. !18apr08 - add rhonewcsn
  3451. RHOnewCSN=2090.* RHOnewSN
  3452. THDIFSN = 0.265/RHOCSN
  3453. RAS=RHO*1.E-3
  3454. SOILTFRAC=SOILT
  3455. SMELT=0.
  3456. SOH=0.
  3457. SMELTG=0.
  3458. SNOHG=0.
  3459. SNODIF=0.
  3460. RSM = 0.
  3461. RSMFRAC = 0.
  3462. fsn=1.
  3463. fso=0.
  3464. hsn=snhei
  3465. NZS1=NZS-1
  3466. NZS2=NZS-2
  3467. QGOLD=QVG
  3468. TNOLD=SOILT
  3469. DZSTOP=1./(ZSMAIN(2)-ZSMAIN(1))
  3470. !******************************************************************************
  3471. ! COEFFICIENTS FOR THOMAS ALGORITHM FOR TSO
  3472. !******************************************************************************
  3473. ! did=2.*(ZSMAIN(nzs)-ZSHALF(nzs))
  3474. ! h1=DTDZS(8)*THDIF(nzs-1)*(ZSHALF(nzs)-ZSHALF(nzs-1))/did
  3475. ! cotso(1)=h1/(1.+h1)
  3476. ! rhtso(1)=(tso(nzs)+h1*(tso(nzs-1)-tso(nzs)))/
  3477. ! 1 (1.+h1)
  3478. cotso(1)=0.
  3479. rhtso(1)=TSO(NZS)
  3480. DO 33 K=1,NZS2
  3481. KN=NZS-K
  3482. K1=2*KN-3
  3483. X1=DTDZS(K1)*THDIF(KN-1)
  3484. X2=DTDZS(K1+1)*THDIF(KN)
  3485. FT=TSO(KN)+X1*(TSO(KN-1)-TSO(KN)) &
  3486. -X2*(TSO(KN)-TSO(KN+1))
  3487. DENOM=1.+X1+X2-X2*cotso(K)
  3488. cotso(K+1)=X1/DENOM
  3489. rhtso(K+1)=(FT+X2*rhtso(K))/DENOM
  3490. 33 CONTINUE
  3491. !--- THE NZS element in COTSO and RHTSO will be for snow
  3492. !--- There will be 2 layers in snow if it is deeper than DELTSN+SNTH
  3493. IF(SNHEI.GE.SNTH) then
  3494. if(snhei.le.DELTSN+SNTH) then
  3495. !-- 1-layer snow model
  3496. ilnb=1
  3497. snprim=snhei
  3498. tsob=tso(1)
  3499. soilt1=tso(1)
  3500. XSN = DELT/2./(zshalf(2)+0.5*SNPRIM)
  3501. DDZSN = XSN / SNPRIM
  3502. X1SN = DDZSN * thdifsn
  3503. X2 = DTDZS(1)*THDIF(1)
  3504. FT = TSO(1)+X1SN*(SOILT-TSO(1)) &
  3505. -X2*(TSO(1)-TSO(2))
  3506. DENOM = 1. + X1SN + X2 -X2*cotso(NZS1)
  3507. cotso(NZS)=X1SN/DENOM
  3508. rhtso(NZS)=(FT+X2*rhtso(NZS1))/DENOM
  3509. cotsn=cotso(NZS)
  3510. rhtsn=rhtso(NZS)
  3511. !*** Average temperature of snow pack (C)
  3512. tsnav=0.5*(soilt+tso(1)) &
  3513. -273.15
  3514. else
  3515. !-- 2 layers in snow, SOILT1 is temperasture at DELTSN depth
  3516. ilnb=2
  3517. snprim=deltsn
  3518. tsob=soilt1
  3519. XSN = DELT/2./(0.5*SNPRIM)
  3520. XSN1= DELT/2./(zshalf(2)+0.5*(SNHEI-DELTSN))
  3521. DDZSN = XSN / DELTSN
  3522. DDZSN1 = XSN1 / (SNHEI-DELTSN)
  3523. X1SN = DDZSN * thdifsn
  3524. X1SN1 = DDZSN1 * thdifsn
  3525. X2 = DTDZS(1)*THDIF(1)
  3526. FT = TSO(1)+X1SN1*(SOILT1-TSO(1)) &
  3527. -X2*(TSO(1)-TSO(2))
  3528. DENOM = 1. + X1SN1 + X2 - X2*cotso(NZS1)
  3529. cotso(nzs)=x1sn1/denom
  3530. rhtso(nzs)=(ft+x2*rhtso(nzs1))/denom
  3531. ftsnow = soilt1+x1sn*(soilt-soilt1) &
  3532. -x1sn1*(soilt1-tso(1))
  3533. denomsn = 1. + X1SN + X1SN1 - X1SN1*cotso(NZS)
  3534. cotsn=x1sn/denomsn
  3535. rhtsn=(ftsnow+X1SN1*rhtso(NZS))/denomsn
  3536. !*** Average temperature of snow pack (C)
  3537. tsnav=0.5/snhei*((soilt+soilt1)*deltsn &
  3538. +(soilt1+tso(1))*(SNHEI-DELTSN)) &
  3539. -273.15
  3540. endif
  3541. ENDIF
  3542. IF(SNHEI.LT.SNTH.AND.SNHEI.GT.0.) then
  3543. !--- snow is too thin to be treated separately, therefore it
  3544. !--- is combined with the first soil layer.
  3545. fsn=SNHEI/(SNHEI+zsmain(2))
  3546. fso=1.-fsn
  3547. soilt1=tso(1)
  3548. tsob=tso(2)
  3549. snprim=SNHEI+zsmain(2)
  3550. XSN = DELT/2./((zshalf(3)-zsmain(2))+0.5*snprim)
  3551. DDZSN = XSN /snprim
  3552. X1SN = DDZSN * (fsn*thdifsn+fso*thdif(1))
  3553. X2=DTDZS(2)*THDIF(2)
  3554. FT=TSO(2)+X1SN*(SOILT-TSO(2))- &
  3555. X2*(TSO(2)-TSO(3))
  3556. denom = 1. + x1sn + x2 - x2*cotso(nzs-2)
  3557. cotso(nzs1) = x1sn/denom
  3558. rhtso(nzs1)=(FT+X2*rhtso(NZS-2))/denom
  3559. tsnav=0.5*(soilt+tso(1)) &
  3560. -273.15
  3561. ENDIF
  3562. !************************************************************************
  3563. !--- THE HEAT BALANCE EQUATION (Smirnova et al. 1996, EQ. 21,26)
  3564. !18apr08 nmelt is the flag for melting, and SNOH is heat of snow phase changes
  3565. nmelt=0
  3566. SNOH=0.
  3567. ETT1=0.
  3568. EPOT=-QKMS*(QVATM-QSG)
  3569. RHCS=CAP(1)
  3570. H=MAVAIL
  3571. IF(DEW.NE.0.)THEN
  3572. DRYCAN=0.
  3573. WETCAN=1.
  3574. ENDIF
  3575. TRANS=PC*TRANSUM*DRYCAN/ZSHALF(NROOT+1)
  3576. CAN=WETCAN+TRANS
  3577. UMVEG=1.-VEGFRAC
  3578. FKT=TKMS
  3579. D1=cotso(NZS1)
  3580. D2=rhtso(NZS1)
  3581. TN=SOILT
  3582. D9=THDIF(1)*RHCS*dzstop
  3583. D10=TKMS*CP*RHO
  3584. R211=.5*CONFLX/DELT
  3585. R21=R211*CP*RHO
  3586. R22=.5/(THDIF(1)*DELT*dzstop**2)
  3587. R6=EMISS *STBOLT*.5*TN**4
  3588. R7=R6/TN
  3589. D11=RNET+R6
  3590. IF(SNHEI.GE.SNTH) THEN
  3591. if(snhei.le.DELTSN+SNTH) then
  3592. !--- 1-layer snow
  3593. D1SN = cotso(NZS)
  3594. D2SN = rhtso(NZS)
  3595. else
  3596. !--- 2-layer snow
  3597. D1SN = cotsn
  3598. D2SN = rhtsn
  3599. endif
  3600. D9SN= THDIFSN*RHOCSN / SNPRIM
  3601. R22SN = SNPRIM*SNPRIM*0.5/(THDIFSN*DELT)
  3602. ENDIF
  3603. IF(SNHEI.LT.SNTH.AND.SNHEI.GT.0.) then
  3604. !--- thin snow is combined with soil
  3605. D1SN = D1
  3606. D2SN = D2
  3607. D9SN = (fsn*THDIFSN*RHOCSN+fso*THDIF(1)*RHCS)/ &
  3608. snprim
  3609. R22SN = snprim*snprim*0.5 &
  3610. /((fsn*THDIFSN+fso*THDIF(1))*delt)
  3611. ENDIF
  3612. IF(SNHEI.eq.0.)then
  3613. !--- all snow is sublimated
  3614. D9SN = D9
  3615. R22SN = R22
  3616. D1SN = D1
  3617. D2SN = D2
  3618. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  3619. print *,' SNHEI = 0, D9SN,R22SN,D1SN,D2SN: ',D9SN,R22SN,D1SN,D2SN
  3620. ENDIF
  3621. ENDIF
  3622. !---- TDENOM for snow
  3623. !18apr08 - the iteration start point
  3624. 212 continue
  3625. TDENOM = D9SN*(1.-D1SN +R22SN)+D10+R21+R7 &
  3626. +RAINF*CVW*PRCPMS &
  3627. +RHOnewCSN*NEWSNOW/DELT
  3628. FKQ=QKMS*RHO
  3629. R210=R211*RHO
  3630. C=VEGFRAC*FKQ*CAN
  3631. CC=C*XLVM/TDENOM
  3632. AA=XLVM*(BETA*FKQ*UMVEG+R210)/TDENOM
  3633. BB=(D10*TABS+R21*TN+XLVM*(QVATM* &
  3634. (BETA*FKQ*UMVEG+C) &
  3635. +R210*QVG)+D11+D9SN*(D2SN+R22SN*TN) &
  3636. +RAINF*CVW*PRCPMS*max(273.15,TABS) &
  3637. + RHOnewCSN*NEWSNOW/DELT*min(273.15,TABS) &
  3638. !18apr08 - added heat of snow phase change computed in the first iteration
  3639. -SNOH &
  3640. )/TDENOM
  3641. AA1=AA+CC
  3642. PP=PATM*1.E3
  3643. AA1=AA1/PP
  3644. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  3645. print *,'VILKA-SNOW'
  3646. print *,'tn,aa1,bb,pp,umveg,fkq,r210,vegfrac', &
  3647. tn,aa1,bb,pp,umveg,fkq,r210,vegfrac
  3648. ENDIF
  3649. CALL VILKA(TN,AA1,BB,PP,QS1,TS1,TBQ,KTAU,i,j,iland,isoil)
  3650. !--- it is saturation over snow
  3651. QVG=QS1
  3652. QSG=QS1
  3653. QCG=0.
  3654. !--- SOILT - skin temperature
  3655. SOILT=TS1
  3656. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  3657. print *,' AFTER VILKA-SNOW'
  3658. print *,' TS1,QS1: ', ts1,qs1
  3659. ENDIF
  3660. ! Solution for temperature at 7.5 cm depth and snow-soil interface
  3661. IF(SNHEI.GE.SNTH) THEN
  3662. if(snhei.gt.DELTSN+SNTH) then
  3663. !-- 2-layer snow model
  3664. SOILT1=min(273.,rhtsn+cotsn*SOILT)
  3665. TSO(1)=rhtso(NZS)+cotso(NZS)*SOILT1
  3666. tsob=soilt1
  3667. else
  3668. !-- 1 layer in snow
  3669. TSO(1)=rhtso(NZS)+cotso(NZS)*SOILT
  3670. SOILT1=TSO(1)
  3671. tsob=tso(1)
  3672. endif
  3673. ELSE
  3674. TSO(1)=SOILT
  3675. SOILT1=SOILT
  3676. tsob=SOILT
  3677. ENDIF
  3678. !---- Final solution for TSO
  3679. DO K=2,NZS
  3680. KK=NZS-K+1
  3681. TSO(K)=rhtso(KK)+cotso(KK)*TSO(K-1)
  3682. END DO
  3683. !--- For thin snow layer combined with the top soil layer
  3684. !--- TSO is computed by linear inmterpolation between SOILT
  3685. !--- and TSO(2)
  3686. if(SNHEI.LT.SNTH.AND.SNHEI.GT.0.)then
  3687. tso(1)=tso(2)+(soilt-tso(2))*fso
  3688. SOILT1=TSO(1)
  3689. tsob=tso(2)
  3690. !!! tsob=tso(1)
  3691. endif
  3692. if(nmelt.eq.1) go to 220
  3693. !--- IF SOILT > 273.15 F then melting of snow can happen
  3694. IF(SOILT.GT.273.15.AND.SNHEI.GT.0.) THEN
  3695. nmelt = 1
  3696. soiltfrac=snowfrac*273.15+(1.-snowfrac)*SOILT
  3697. QSG= QSN(soiltfrac,TBQ)/PP
  3698. QVG=QSG
  3699. T3 = STBOLT*SOILTfrac*SOILTfrac*SOILTfrac
  3700. UPFLUX = T3 * SOILTfrac
  3701. XINET = EMISS*(GLW-UPFLUX)
  3702. RNET = GSW + XINET
  3703. EPOT = -QKMS*(QVATM-QSG)
  3704. Q1=EPOT*RAS
  3705. IF (Q1.LE.0.) THEN
  3706. ! --- condensation
  3707. DEW=-EPOT
  3708. DO K=1,NZS
  3709. TRANSP(K)=0.
  3710. ENDDO
  3711. QFX= XLVM*RHO*DEW
  3712. EETA=QFX/XLVM
  3713. ELSE
  3714. ! --- evaporation
  3715. DO K=1,NROOT
  3716. TRANSP(K)=-VEGFRAC*q1 &
  3717. *PC*TRANF(K)*DRYCAN/zshalf(NROOT+1)
  3718. IF(TRANSP(K).GT.0.) TRANSP(K)=0.
  3719. ETT1=ETT1-TRANSP(K)
  3720. ENDDO
  3721. DO k=nroot+1,nzs
  3722. transp(k)=0.
  3723. enddo
  3724. EDIR1 = Q1*UMVEG * BETA
  3725. EC1 = Q1 * WETCAN *VEGFRAC
  3726. CMC2MS=CST/DELT
  3727. EC1=MIN(CMC2MS,EC1)
  3728. EETA = (EDIR1 + EC1 + ETT1)*1.E3
  3729. ! to convert from kg m-2 s-1 to m s-1: 1/rho water=1.e-3************
  3730. QFX= - XLVM * EETA
  3731. ENDIF
  3732. HFX=D10*(TABS-soiltfrac)
  3733. IF(SNHEI.GE.SNTH)then
  3734. SOH=thdifsn*RHOCSN*(soiltfrac-TSOB)/SNPRIM
  3735. SNFLX=SOH
  3736. ELSE
  3737. SOH=(fsn*thdifsn*rhocsn+fso*thdif(1)*rhcs)* &
  3738. (soiltfrac-TSOB)/snprim
  3739. SNFLX=SOH
  3740. ENDIF
  3741. X= (R21+D9SN*R22SN)*(soiltfrac-TNOLD) + &
  3742. XLVM*R210*(QSG-QGOLD)
  3743. !-- SNOH is energy flux of snow phase change
  3744. SNOH=RNET+QFX +HFX &
  3745. +RHOnewCSN*NEWSNOW/DELT*(min(273.15,TABS)-TN) &
  3746. -SOH-X+RAINF*CVW*PRCPMS* &
  3747. (max(273.15,TABS)-TN)
  3748. SNOH=AMAX1(0.,SNOH)
  3749. !-- SMELT is speed of melting in M/S
  3750. SMELT= SNOH /XLMELT*1.E-3
  3751. ! SMELT=AMIN1(SMELT,SNWEPR/DELT-BETA*EPOT*RAS*UMVEG)
  3752. SMELT=AMIN1(SMELT,SNWEPR/DELT-BETA*EPOT*RAS)
  3753. SMELT=AMAX1(0.,SMELT)
  3754. !18apr08 - Egglston limit
  3755. ! SMELT= amin1 (smelt, 5.6E-7*meltfactor*max(1.,(soilt-273.15)))
  3756. SMELT= amin1 (smelt, 5.6E-8*meltfactor*max(1.,(soilt-273.15)))
  3757. !*** From Koren et al. (1999) 13% of snow melt stays in the snow pack
  3758. !!! rsm=0.13*smelt*delt
  3759. if(snwepr.gt.0.) then
  3760. rsmfrac=min(0.18,(max(0.08,0.10/snwepr*0.13)))
  3761. ! else
  3762. ! rsmfrac=0.13
  3763. endif
  3764. rsm=rsmfrac*smelt*delt
  3765. !18apr08 rsm is part of melted water that stays in snow as liquid
  3766. SMELT=AMAX1(0.,SMELT-rsm/delt)
  3767. SNOHGNEW=SMELT*XLMELT*1.E3
  3768. SNODIF=AMAX1(0.,(SNOH-SNOHGNEW))
  3769. SNOH=SNOHGNEW
  3770. !-- correction of liquid equivalent of snow depth
  3771. !-- due to evaporation and snow melt
  3772. SNWE = AMAX1(0.,(SNWEPR- &
  3773. (SMELT+BETA*EPOT*RAS)*DELT &
  3774. ! (SMELT+BETA*EPOT*RAS*UMVEG)*DELT &
  3775. ) )
  3776. if(snwe.le.rsm) then
  3777. smelt=smelt+rsm/delt
  3778. snwe=0.
  3779. rsm=0.
  3780. else
  3781. !*** Correct snow density on effect of snow melt, melted
  3782. !*** from the top of the snow. 13% of melted water
  3783. !*** remains in the pack and changes its density.
  3784. !*** Eq. 9 (with my correction) in Koren et al. (1999)
  3785. if(snwe.gt.0.) then
  3786. xsn=(rhosn*(snwe-rsm)+917.*rsm)/ &
  3787. snwe
  3788. rhosn=MIN(XSN,400.)
  3789. RHOCSN=2090.* RHOSN
  3790. thdifsn = 0.265/RHOCSN
  3791. endif
  3792. endif
  3793. !--- If there is no snow melting then just evaporation
  3794. !--- or condensation cxhanges SNWE
  3795. ELSE
  3796. EPOT=-QKMS*(QVATM-QSG)
  3797. SNWE = AMAX1(0.,(SNWEPR- &
  3798. BETA*EPOT*RAS*DELT))
  3799. ! BETA*EPOT*RAS*UMVEG*DELT))
  3800. ENDIF
  3801. !*** Correct snow density on effect of snow melt, melted
  3802. !*** from the top of the snow. 13% of melted water
  3803. !*** remains in the pack and changes its density.
  3804. !*** Eq. 9 (with my correction) in Koren et al. (1999)
  3805. SNHEI=SNWE *1.E3 / RHOSN
  3806. !18apr08 - if snow melt occurred then go into iteration for energy budget
  3807. ! solution
  3808. if(nmelt.eq.1) goto 212
  3809. 220 continue
  3810. !-- Snow melt from the top is done. But if ground surface temperature
  3811. !-- is above freezing snow can melt from the bottom. The following
  3812. !-- piece of code will check if bottom melting is possible.
  3813. IF(TSO(1).GT.273.15.AND.SNHEI.GT.0.) THEN
  3814. if (snhei.GE.deltsn+snth) then
  3815. hsn = snhei - deltsn
  3816. else
  3817. hsn = snhei
  3818. endif
  3819. soiltfrac=snowfrac*273.15+(1.-snowfrac)*TSO(1)
  3820. SNOHG=(TSO(1)-soiltfrac)*(RHCS*zshalf(2)+ &
  3821. RHOCSN*0.5*hsn) / DELT
  3822. SNOHG=AMAX1(0.,SNOHG)
  3823. SNODIF=0.
  3824. SMELTG=SNOHG/XLMELT*1.E-3
  3825. ! Egglston - empirical limit on snow melt from the bottom of snow pack
  3826. SMELTG=AMIN1(SMELTG, 5.8e-9)
  3827. if(SNWE-SMELTG*DELT.ge.rsm) then
  3828. SNWE = AMAX1(0.,SNWE-SMELTG*DELT)
  3829. else
  3830. smeltg=snwe/delt
  3831. snwe=0.
  3832. rsm=0.
  3833. hsn=0.
  3834. endif
  3835. SNOHGNEW=SMELTG*XLMELT*1.e3
  3836. SNODIF=AMAX1(0.,(SNOHG-SNOHGNEW))
  3837. TSO(1)=soiltfrac &
  3838. + SNODIF/(RHCS*zshalf(2)+ RHOCSN*0.5*hsn)* DELT
  3839. SMELT=SMELT+SMELTG
  3840. SNOH=SNOH+SNOHGNEW
  3841. ENDIF
  3842. SNHEI=SNWE *1.E3 / RHOSN
  3843. snweprint=snwe
  3844. ! &
  3845. !--- if VEGFRAC.ne.0. then some snow stays on the canopy
  3846. !--- and should be added to SNWE for water conservation
  3847. ! 4 Nov 07 +cst
  3848. snheiprint=snweprint*1.E3 / RHOSN
  3849. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  3850. print *, 'snweprint : ',snweprint
  3851. print *, 'D9SN,SOILT,TSOB : ', D9SN,SOILT,TSOB
  3852. ENDIF
  3853. !--- Compute flux in the top snow layer
  3854. SNFLX=D9SN*(SOILT-TSOB)
  3855. IF(SNHEI.GT.0.) THEN
  3856. if(ilnb.gt.1) then
  3857. tsnav=0.5/snhei*((soilt+soilt1)*deltsn &
  3858. +(soilt1+tso(1))*(SNHEI-DELTSN)) &
  3859. -273.15
  3860. else
  3861. tsnav=0.5*(soilt+tso(1)) - 273.15
  3862. endif
  3863. ENDIF
  3864. ! return
  3865. ! end
  3866. !------------------------------------------------------------------------
  3867. END SUBROUTINE SNOWTEMP
  3868. !------------------------------------------------------------------------
  3869. SUBROUTINE SOILMOIST ( &
  3870. !--input parameters
  3871. DELT,NZS,NDDZS,DTDZS,DTDZS2,RIW, &
  3872. ZSMAIN,ZSHALF,DIFFU,HYDRO, &
  3873. QSG,QVG,QCG,QCATM,QVATM,PRCP, &
  3874. QKMS,TRANSP,DRIP, &
  3875. DEW,SMELT,SOILICE,VEGFRAC, &
  3876. !--soil properties
  3877. DQM,QMIN,REF,KSAT,RAS,INFMAX, &
  3878. !--output
  3879. SOILMOIS,SOILIQW,MAVAIL,RUNOFF,RUNOFF2,INFILTRP)
  3880. !*************************************************************************
  3881. ! moisture balance equation and Richards eqn.
  3882. ! are solved here
  3883. !
  3884. ! DELT - time step (s)
  3885. ! IME,JME,NZS - dimensions of soil domain
  3886. ! ZSMAIN - main levels in soil (m)
  3887. ! ZSHALF - middle of the soil layers (m)
  3888. ! DTDZS - dt/(2.*dzshalf*dzmain)
  3889. ! DTDZS2 - dt/(2.*dzshalf)
  3890. ! DIFFU - diffusional conductivity (m^2/s)
  3891. ! HYDRO - hydraulic conductivity (m/s)
  3892. ! QSG,QVG,QCG - saturated mixing ratio, mixing ratio of
  3893. ! water vapor and cloud at the ground
  3894. ! surface, respectively (kg/kg)
  3895. ! QCATM,QVATM - cloud and water vapor mixing ratio
  3896. ! at the first atm. level (kg/kg)
  3897. ! PRCP - precipitation rate in m/s
  3898. ! QKMS - exchange coefficient for water vapor in the
  3899. ! surface layer (m/s)
  3900. ! TRANSP - transpiration from the soil layers (m/s)
  3901. ! DRIP - liquid water dripping from the canopy to soil (m)
  3902. ! DEW - dew in kg/m^2s
  3903. ! SMELT - melting rate in m/s
  3904. ! SOILICE - volumetric content of ice in soil (m^3/m^3)
  3905. ! SOILIQW - volumetric content of liquid water in soil (m^3/m^3)
  3906. ! VEGFRAC - greeness fraction (0-1)
  3907. ! RAS - ration of air density to soil density
  3908. ! INFMAX - maximum infiltration rate (kg/m^2/s)
  3909. !
  3910. ! SOILMOIS - volumetric soil moisture, 6 levels (m^3/m^3)
  3911. ! MAVAIL - fraction of maximum soil moisture in the top
  3912. ! layer (0-1)
  3913. ! RUNOFF - surface runoff (m/s)
  3914. ! RUNOFF2 - underground runoff (m)
  3915. ! INFILTRP - point infiltration flux into soil (m/s)
  3916. ! /(snow bottom runoff) (mm/s)
  3917. !
  3918. ! COSMC, RHSMC - coefficients for implicit solution of
  3919. ! Richards equation
  3920. !******************************************************************
  3921. IMPLICIT NONE
  3922. !------------------------------------------------------------------
  3923. !--- input variables
  3924. REAL, INTENT(IN ) :: DELT
  3925. INTEGER, INTENT(IN ) :: NZS,NDDZS
  3926. ! input variables
  3927. REAL, DIMENSION(1:NZS), INTENT(IN ) :: ZSMAIN, &
  3928. ZSHALF, &
  3929. DIFFU, &
  3930. HYDRO, &
  3931. TRANSP, &
  3932. SOILICE, &
  3933. DTDZS2
  3934. REAL, DIMENSION(1:NDDZS), INTENT(IN) :: DTDZS
  3935. REAL, INTENT(IN ) :: QSG,QVG,QCG,QCATM,QVATM , &
  3936. QKMS,VEGFRAC,DRIP,PRCP , &
  3937. DEW,SMELT , &
  3938. DQM,QMIN,REF,KSAT,RAS,RIW
  3939. ! output
  3940. REAL, DIMENSION( 1:nzs ) , &
  3941. INTENT(INOUT) :: SOILMOIS,SOILIQW
  3942. REAL, INTENT(INOUT) :: MAVAIL,RUNOFF,RUNOFF2,INFILTRP, &
  3943. INFMAX
  3944. ! local variables
  3945. REAL, DIMENSION( 1:nzs ) :: COSMC,RHSMC
  3946. REAL :: DZS,R1,R2,R3,R4,R5,R6,R7,R8,R9,R10
  3947. REAL :: REFKDT,REFDK,DELT1,F1MAX,F2MAX
  3948. REAL :: F1,F2,FD,KDT,VAL,DDT,PX,FK,FKMAX
  3949. REAL :: QQ,UMVEG,INFMAX1,TRANS
  3950. REAL :: TOTLIQ,FLX,FLXSAT,QTOT
  3951. REAL :: DID,X1,X2,X4,DENOM,Q2,Q4
  3952. REAL :: dice,fcr,acrt,frzx,sum,cvfrz
  3953. INTEGER :: NZS1,NZS2,K,KK,K1,KN,ialp1,jj,jk
  3954. !******************************************************************************
  3955. ! COEFFICIENTS FOR THOMAS ALGORITHM FOR SOILMOIS
  3956. !******************************************************************************
  3957. NZS1=NZS-1
  3958. NZS2=NZS-2
  3959. 118 format(6(10Pf23.19))
  3960. do k=1,nzs
  3961. cosmc(k)=0.
  3962. rhsmc(k)=0.
  3963. enddo
  3964. DID=(ZSMAIN(NZS)-ZSHALF(NZS))
  3965. X1=ZSMAIN(NZS)-ZSMAIN(NZS1)
  3966. !7may09 DID=(ZSMAIN(NZS)-ZSHALF(NZS))*2.
  3967. ! DENOM=DID/DELT+DIFFU(NZS1)/X1
  3968. ! COSMC(1)=DIFFU(NZS1)/X1/DENOM
  3969. ! RHSMC(1)=(SOILMOIS(NZS)*DID/DELT
  3970. ! 1 +TRANSP(NZS)-(HYDRO(NZS)*SOILMOIS(NZS)
  3971. ! 1 -HYDRO(NZS1)*SOILMOIS(NZS1))*DID
  3972. ! 1 /X1) /DENOM
  3973. DENOM=(1.+DIFFU(nzs1)/X1/DID*DELT+HYDRO(NZS)/(2.*DID)*DELT)
  3974. COSMC(1)=DELT*(DIFFU(nzs1)/DID/X1 &
  3975. +HYDRO(NZS1)/2./DID)/DENOM
  3976. RHSMC(1)=(SOILIQW(NZS)+TRANSP(NZS)*DELT/ &
  3977. DID)/DENOM
  3978. DO 330 K=1,NZS2
  3979. KN=NZS-K
  3980. K1=2*KN-3
  3981. X4=2.*DTDZS(K1)*DIFFU(KN-1)
  3982. X2=2.*DTDZS(K1+1)*DIFFU(KN)
  3983. Q4=X4+HYDRO(KN-1)*DTDZS2(KN-1)
  3984. Q2=X2-HYDRO(KN+1)*DTDZS2(KN-1)
  3985. DENOM=1.+X2+X4-Q2*COSMC(K)
  3986. COSMC(K+1)=Q4/DENOM
  3987. 330 RHSMC(K+1)=(SOILIQW(KN)+Q2*RHSMC(K) &
  3988. +TRANSP(KN) &
  3989. /(ZSHALF(KN+1)-ZSHALF(KN)) &
  3990. *DELT)/DENOM
  3991. ! --- MOISTURE BALANCE BEGINS HERE
  3992. TRANS=TRANSP(1)
  3993. UMVEG=1.-VEGFRAC
  3994. RUNOFF=0.
  3995. RUNOFF2=0.
  3996. DZS=ZSMAIN(2)
  3997. R1=COSMC(NZS1)
  3998. R2= RHSMC(NZS1)
  3999. R3=DIFFU(1)/DZS
  4000. R4=R3+HYDRO(1)*.5
  4001. R5=R3-HYDRO(2)*.5
  4002. R6=QKMS*RAS
  4003. !-- Total liquid water available on the top of soil domain
  4004. !-- Without snow - 3 sources of water: precipitation,
  4005. !-- water dripping from the canopy and dew
  4006. !-- With snow - only one source of water - snow melt
  4007. 191 format (f23.19)
  4008. TOTLIQ=UMVEG*PRCP-DRIP/DELT-UMVEG*DEW*RAS-SMELT
  4009. FLX=TOTLIQ
  4010. INFILTRP=TOTLIQ
  4011. ! ----------- FROZEN GROUND VERSION -------------------------
  4012. ! REFERENCE FROZEN GROUND PARAMETER, CVFRZ, IS A SHAPE PARAMETER OF
  4013. ! AREAL DISTRIBUTION FUNCTION OF SOIL ICE CONTENT WHICH EQUALS 1/CV.
  4014. ! CV IS A COEFFICIENT OF SPATIAL VARIATION OF SOIL ICE CONTENT.
  4015. ! BASED ON FIELD DATA CV DEPENDS ON AREAL MEAN OF FROZEN DEPTH, AND IT
  4016. ! CLOSE TO CONSTANT = 0.6 IF AREAL MEAN FROZEN DEPTH IS ABOVE 20 CM.
  4017. ! THAT IS WHY PARAMETER CVFRZ = 3 (INT{1/0.6*0.6})
  4018. !
  4019. ! Current logic doesn't allow CVFRZ be bigger than 3
  4020. CVFRZ = 3.
  4021. !-- SCHAAKE/KOREN EXPRESSION for calculation of max infiltration
  4022. REFKDT=3.
  4023. REFDK=3.4341E-6
  4024. DELT1=DELT/86400.
  4025. F1MAX=DQM*ZSHALF(2)
  4026. F2MAX=DQM*(ZSHALF(3)-ZSHALF(2))
  4027. F1=F1MAX*(1.-SOILMOIS(1)/DQM)
  4028. DICE=SOILICE(1)*ZSHALF(2)
  4029. FD=F1
  4030. do k=2,nzs1
  4031. DICE=DICE+(ZSHALF(k+1)-ZSHALF(k))*SOILICE(K)
  4032. FKMAX=DQM*(ZSHALF(k+1)-ZSHALF(k))
  4033. FK=FKMAX*(1.-SOILMOIS(k)/DQM)
  4034. FD=FD+FK
  4035. enddo
  4036. KDT=REFKDT*KSAT/REFDK
  4037. VAL=(1.-EXP(-KDT*DELT1))
  4038. DDT = FD*VAL
  4039. PX= - TOTLIQ * DELT
  4040. IF(PX.LT.0.0) PX = 0.0
  4041. INFMAX1 = (PX*(DDT/(PX+DDT)))/DELT
  4042. ! print *,'INFMAX1=,ksat',infmax1,ksat,f1,f2,kdt,val,ddt,px
  4043. ! ----------- FROZEN GROUND VERSION --------------------------
  4044. ! REDUCTION OF INFILTRATION BASED ON FROZEN GROUND PARAMETERS
  4045. !
  4046. ! ------------------------------------------------------------------
  4047. FRZX= 0.15*((dqm+qmin)/ref) * (0.412 / 0.468)
  4048. FCR = 1.
  4049. IF ( DICE .GT. 1.E-2) THEN
  4050. ACRT = CVFRZ * FRZX / DICE
  4051. SUM = 1.
  4052. IALP1 = CVFRZ - 1
  4053. DO JK = 1,IALP1
  4054. K = 1
  4055. DO JJ = JK+1, IALP1
  4056. K = K * JJ
  4057. END DO
  4058. SUM = SUM + (ACRT ** ( CVFRZ-JK)) / FLOAT (K)
  4059. END DO
  4060. FCR = 1. - EXP(-ACRT) * SUM
  4061. END IF
  4062. ! print *,'FCR--------',fcr
  4063. INFMAX1 = INFMAX1* FCR
  4064. ! -------------------------------------------------------------------
  4065. INFMAX = MAX(INFMAX1,HYDRO(1)*SOILIQW(1))
  4066. INFMAX = MIN(INFMAX, -TOTLIQ)
  4067. !----
  4068. IF (-TOTLIQ.GT.INFMAX)THEN
  4069. RUNOFF=-TOTLIQ-INFMAX
  4070. FLX=-INFMAX
  4071. ENDIF
  4072. ! INFILTRP is total infiltration flux in M/S
  4073. INFILTRP=FLX
  4074. ! Solution of moisture budget
  4075. R7=.5*DZS/DELT
  4076. R4=R4+R7
  4077. FLX=FLX-SOILIQW(1)*R7
  4078. R8=UMVEG*R6
  4079. QTOT=QVATM+QCATM
  4080. R9=TRANS
  4081. R10=QTOT-QSG
  4082. !-- evaporation regime
  4083. IF(R10.LE.0.) THEN
  4084. QQ=(R5*R2-FLX+R9)/(R4-R5*R1-R10*R8/(REF-QMIN))
  4085. FLXSAT=-DQM*(R4-R5*R1-R10*R8/(REF-QMIN)) &
  4086. +R5*R2+R9
  4087. ELSE
  4088. !-- dew formation regime
  4089. QQ=(R2*R5-FLX+R8*(QTOT-QCG-QVG)+R9)/(R4-R1*R5)
  4090. FLXSAT=-DQM*(R4-R1*R5)+R2*R5+R8*(QTOT-QVG-QCG)+R9
  4091. END IF
  4092. IF(QQ.LT.0.) THEN
  4093. SOILIQW (1)=1.e-8
  4094. SOILMOIS(1)=1.e-8+soilice(1)*riw
  4095. ELSE IF(QQ.GT.DQM) THEN
  4096. !-- saturation
  4097. SOILIQW (1)=DQM
  4098. SOILMOIS(1)=DQM
  4099. RUNOFF2=(FLXSAT-FLX)*DELT
  4100. RUNOFF=RUNOFF+(FLXSAT-FLX)
  4101. ELSE
  4102. SOILIQW (1)=min(dqm,max(1.e-8,QQ))
  4103. SOILMOIS(1)=max(1.e-8,QQ)+soilice(1)*riw
  4104. END IF
  4105. !--- FINAL SOLUTION FOR SOILMOIS
  4106. DO K=2,NZS
  4107. KK=NZS-K+1
  4108. QQ=COSMC(KK)*SOILIQW(K-1)+RHSMC(KK)
  4109. IF (QQ.LT.0.) THEN
  4110. SOILIQW(K) =1.e-8
  4111. SOILMOIS(K)=1.e-8 + soilice(k)*riw
  4112. ELSE IF(QQ.GT.DQM) THEN
  4113. !-- saturation
  4114. SOILIQW (K)=DQM
  4115. SOILMOIS(K)=DQM
  4116. IF(K.EQ.NZS)THEN
  4117. RUNOFF2=RUNOFF2+(QQ-DQM)*(ZSMAIN(K)-ZSHALF(K))
  4118. ELSE
  4119. RUNOFF2=RUNOFF2+(QQ-DQM)*(ZSHALF(K+1)-ZSHALF(K))
  4120. ENDIF
  4121. ELSE
  4122. SOILIQW (K)=min(dqm,max(1.e-8,QQ))
  4123. SOILMOIS(K)=max(1.e-8,QQ)+soilice(k)*riw
  4124. END IF
  4125. END DO
  4126. ! MAVAIL=min(1.,SOILMOIS(1)/(REF-QMIN))
  4127. MAVAIL=min(1.,SOILMOIS(1)/DQM)
  4128. if (MAVAIL.EQ.0.) MAVAIL=.00001
  4129. ! RETURN
  4130. ! END
  4131. !-------------------------------------------------------------------
  4132. END SUBROUTINE SOILMOIST
  4133. !-------------------------------------------------------------------
  4134. SUBROUTINE SOILPROP( &
  4135. !--- input variables
  4136. nzs,fwsat,lwsat,tav,keepfr, &
  4137. soilmois,soiliqw,soilice, &
  4138. soilmoism,soiliqwm,soilicem, &
  4139. !--- soil fixed fields
  4140. QWRTZ,rhocs,dqm,qmin,psis,bclh,ksat, &
  4141. !--- constants
  4142. riw,xlmelt,CP,G0_P,cvw,ci, &
  4143. kqwrtz,kice,kwt, &
  4144. !--- output variables
  4145. thdif,diffu,hydro,cap)
  4146. !******************************************************************
  4147. ! SOILPROP computes thermal diffusivity, and diffusional and
  4148. ! hydraulic condeuctivities
  4149. !******************************************************************
  4150. ! NX,NY,NZS - dimensions of soil domain
  4151. ! FWSAT, LWSAT - volumetric content of frozen and liquid water
  4152. ! for saturated condition at given temperatures (m^3/m^3)
  4153. ! TAV - temperature averaged for soil layers (K)
  4154. ! SOILMOIS - volumetric soil moisture at the main soil levels (m^3/m^3)
  4155. ! SOILMOISM - volumetric soil moisture averaged for layers (m^3/m^3)
  4156. ! SOILIQWM - volumetric liquid soil moisture averaged for layers (m^3/m^3)
  4157. ! SOILICEM - volumetric content of soil ice averaged for layers (m^3/m^3)
  4158. ! THDIF - thermal diffusivity for soil layers (W/m/K)
  4159. ! DIFFU - diffusional conductivity (m^2/s)
  4160. ! HYDRO - hydraulic conductivity (m/s)
  4161. ! CAP - volumetric heat capacity (J/m^3/K)
  4162. !
  4163. !******************************************************************
  4164. IMPLICIT NONE
  4165. !-----------------------------------------------------------------
  4166. !--- soil properties
  4167. INTEGER, INTENT(IN ) :: NZS
  4168. REAL , &
  4169. INTENT(IN ) :: RHOCS, &
  4170. BCLH, &
  4171. DQM, &
  4172. KSAT, &
  4173. PSIS, &
  4174. QWRTZ, &
  4175. QMIN
  4176. REAL, DIMENSION( 1:nzs ) , &
  4177. INTENT(IN ) :: SOILMOIS, &
  4178. keepfr
  4179. REAL, INTENT(IN ) :: CP, &
  4180. CVW, &
  4181. RIW, &
  4182. kqwrtz, &
  4183. kice, &
  4184. kwt, &
  4185. XLMELT, &
  4186. G0_P
  4187. !--- output variables
  4188. REAL, DIMENSION(1:NZS) , &
  4189. INTENT(INOUT) :: cap,diffu,hydro , &
  4190. thdif,tav , &
  4191. soilmoism , &
  4192. soiliqw,soilice , &
  4193. soilicem,soiliqwm , &
  4194. fwsat,lwsat
  4195. !--- local variables
  4196. REAL, DIMENSION(1:NZS) :: hk,detal,kasat,kjpl
  4197. REAL :: x,x1,x2,x4,ws,wd,fact,fach,facd,psif,ci
  4198. REAL :: tln,tavln,tn,pf,a,am,ame,h
  4199. INTEGER :: nzs1,k
  4200. !-- for Johansen thermal conductivity
  4201. REAL :: kzero,gamd,kdry,kas,x5,sr,ke
  4202. nzs1=nzs-1
  4203. !-- Constants for Johansen (1975) thermal conductivity
  4204. kzero =2. ! if qwrtz > 0.2
  4205. do k=1,nzs
  4206. detal (k)=0.
  4207. kasat (k)=0.
  4208. kjpl (k)=0.
  4209. hk (k)=0.
  4210. enddo
  4211. ws=dqm+qmin
  4212. x1=xlmelt/(g0_p*psis)
  4213. x2=x1/bclh*ws
  4214. x4=(bclh+1.)/bclh
  4215. !--- Next 3 lines are for Johansen thermal conduct.
  4216. gamd=(1.-ws)*2700.
  4217. kdry=(0.135*gamd+64.7)/(2700.-0.947*gamd)
  4218. kas=kqwrtz**qwrtz*kzero**(1.-qwrtz)
  4219. DO K=1,NZS1
  4220. tn=tav(k) - 273.15
  4221. wd=ws - riw*soilicem(k)
  4222. psif=psis*100.*(wd/(soiliqwm(k)+qmin))**bclh &
  4223. * (ws/wd)**3.
  4224. !--- PSIF should be in [CM] to compute PF
  4225. pf=log10(abs(psif))
  4226. fact=1.+riw*soilicem(k)
  4227. !--- HK is for McCumber thermal conductivity
  4228. IF(PF.LE.5.2) THEN
  4229. HK(K)=420.*EXP(-(PF+2.7))*fact
  4230. ELSE
  4231. HK(K)=.1744*fact
  4232. END IF
  4233. IF(soilicem(k).NE.0.AND.TN.LT.0.) then
  4234. !--- DETAL is taking care of energy spent on freezing or released from
  4235. ! melting of soil water
  4236. DETAL(K)=273.15*X2/(TAV(K)*TAV(K))* &
  4237. (TAV(K)/(X1*TN))**X4
  4238. if(keepfr(k).eq.1.) then
  4239. detal(k)=0.
  4240. endif
  4241. ENDIF
  4242. !--- Next 10 lines calculate Johansen thermal conductivity KJPL
  4243. kasat(k)=kas**(1.-ws)*kice**fwsat(k) &
  4244. *kwt**lwsat(k)
  4245. X5=(soilmoism(k)+qmin)/ws
  4246. if(soilicem(k).eq.0.) then
  4247. sr=max(0.101,x5)
  4248. ke=log10(sr)+1.
  4249. !--- next 2 lines - for coarse soils
  4250. ! sr=max(0.0501,x5)
  4251. ! ke=0.7*log10(sr)+1.
  4252. else
  4253. ke=x5
  4254. endif
  4255. kjpl(k)=ke*(kasat(k)-kdry)+kdry
  4256. !--- CAP -volumetric heat capacity
  4257. CAP(K)=(1.-WS)*RHOCS &
  4258. + (soiliqwm(K)+qmin)*CVW &
  4259. + soilicem(K)*CI &
  4260. + (dqm-soilmoism(k))*CP*1.2 &
  4261. - DETAL(K)*1.e3*xlmelt
  4262. a=RIW*soilicem(K)
  4263. if((ws-a).lt.0.12)then
  4264. diffu(K)=0.
  4265. else
  4266. H=max(0.,(soilmoism(K)-a)/(max(1.e-8,(dqm-a))))
  4267. facd=1.
  4268. if(a.ne.0.)facd=1.-a/max(1.e-8,soilmoism(K))
  4269. ame=max(1.e-8,dqm-riw*soilicem(K))
  4270. !--- DIFFU is diffusional conductivity of soil water
  4271. diffu(K)=-BCLH*KSAT*PSIS/ame* &
  4272. (dqm/ame)**3. &
  4273. *H**(BCLH+2.)*facd
  4274. endif
  4275. ! diffu(K)=-BCLH*KSAT*PSIS/dqm &
  4276. ! *H**(BCLH+2.)
  4277. !--- thdif - thermal diffusivity
  4278. ! thdif(K)=HK(K)/CAP(K)
  4279. !--- Use thermal conductivity from Johansen (1975)
  4280. thdif(K)=KJPL(K)/CAP(K)
  4281. END DO
  4282. DO K=1,NZS
  4283. if((ws-riw*soilice(k)).lt.0.12)then
  4284. hydro(k)=0.
  4285. else
  4286. fach=1.
  4287. if(soilice(k).ne.0.) &
  4288. fach=1.-riw*soilice(k)/max(1.e-8,soilmois(k))
  4289. am=max(1.e-8,dqm-riw*soilice(k))
  4290. !--- HYDRO is hydraulic conductivity of soil water
  4291. hydro(K)=KSAT/am* &
  4292. (soiliqw(K)/am) &
  4293. **(2.*BCLH+2.) &
  4294. * fach
  4295. endif
  4296. ENDDO
  4297. ! RETURN
  4298. ! END
  4299. !-----------------------------------------------------------------------
  4300. END SUBROUTINE SOILPROP
  4301. !-----------------------------------------------------------------------
  4302. SUBROUTINE TRANSF( &
  4303. !--- input variables
  4304. nzs,nroot,soiliqw,tabs, &
  4305. !--- soil fixed fields
  4306. dqm,qmin,ref,wilt,zshalf, &
  4307. !--- output variables
  4308. tranf,transum)
  4309. !-------------------------------------------------------------------
  4310. !--- TRANF(K) - THE TRANSPIRATION FUNCTION (Smirnova et al. 1996, EQ. 18,19)
  4311. !*******************************************************************
  4312. ! NX,NY,NZS - dimensions of soil domain
  4313. ! SOILIQW - volumetric liquid soil moisture at the main levels (m^3/m^3)
  4314. ! TRANF - the transpiration function at levels (m)
  4315. ! TRANSUM - transpiration function integrated over the rooting zone (m)
  4316. !
  4317. !*******************************************************************
  4318. IMPLICIT NONE
  4319. !-------------------------------------------------------------------
  4320. !--- input variables
  4321. INTEGER, INTENT(IN ) :: nroot,nzs
  4322. REAL , &
  4323. INTENT(IN ) :: TABS
  4324. !--- soil properties
  4325. REAL , &
  4326. INTENT(IN ) :: DQM, &
  4327. QMIN, &
  4328. REF, &
  4329. WILT
  4330. REAL, DIMENSION(1:NZS), INTENT(IN) :: soiliqw, &
  4331. ZSHALF
  4332. !-- output
  4333. REAL, DIMENSION(1:NZS), INTENT(OUT) :: TRANF
  4334. REAL, INTENT(OUT) :: TRANSUM
  4335. !-- local variables
  4336. REAL :: totliq, did
  4337. INTEGER :: k
  4338. !-- for non-linear root distribution
  4339. REAL :: gx,sm1,sm2,sm3,sm4,ap0,ap1,ap2,ap3,ap4
  4340. REAL :: FTEM
  4341. REAL, DIMENSION(1:NZS) :: PART
  4342. !--------------------------------------------------------------------
  4343. do k=1,nzs
  4344. part(k)=0.
  4345. enddo
  4346. transum=0.
  4347. totliq=soiliqw(1)+qmin
  4348. sm1=totliq
  4349. sm2=sm1*sm1
  4350. sm3=sm2*sm1
  4351. sm4=sm3*sm1
  4352. ap0=0.299
  4353. ap1=-8.152
  4354. ap2=61.653
  4355. ap3=-115.876
  4356. ap4=59.656
  4357. gx=ap0+ap1*sm1+ap2*sm2+ap3*sm3+ap4*sm4
  4358. if(totliq.ge.ref) gx=1.
  4359. if(totliq.le.0.) gx=0.
  4360. if(gx.gt.1.) gx=1.
  4361. if(gx.lt.0.) gx=0.
  4362. DID=zshalf(2)
  4363. part(1)=DID*gx
  4364. !--- air temperature function
  4365. ! Avissar (1985) and AX 7/95
  4366. IF (TABS .LE. 302.15) THEN
  4367. FTEM = 1.0 / (1.0 + EXP(-0.41 * (TABS - 282.05)))
  4368. ELSE
  4369. FTEM = 1.0 / (1.0 + EXP(0.5 * (TABS - 314.0)))
  4370. ENDIF
  4371. !---
  4372. IF(TOTLIQ.GT.REF) THEN
  4373. TRANF(1)=DID
  4374. ELSE IF(TOTLIQ.LE.WILT) THEN
  4375. TRANF(1)=0.
  4376. ELSE
  4377. TRANF(1)=(TOTLIQ-WILT)/(REF-WILT)*DID
  4378. ENDIF
  4379. !-- uncomment next line for non-linear root distribution
  4380. !cc TRANF(1)=part(1)
  4381. TRANF(1)=TRANF(1)*FTEM
  4382. DO K=2,NROOT
  4383. totliq=soiliqw(k)+qmin
  4384. sm1=totliq
  4385. sm2=sm1*sm1
  4386. sm3=sm2*sm1
  4387. sm4=sm3*sm1
  4388. gx=ap0+ap1*sm1+ap2*sm2+ap3*sm3+ap4*sm4
  4389. if(totliq.ge.ref) gx=1.
  4390. if(totliq.le.0.) gx=0.
  4391. if(gx.gt.1.) gx=1.
  4392. if(gx.lt.0.) gx=0.
  4393. DID=zshalf(K+1)-zshalf(K)
  4394. part(k)=did*gx
  4395. IF(totliq.GE.REF) THEN
  4396. TRANF(K)=DID
  4397. ELSE IF(totliq.LE.WILT) THEN
  4398. TRANF(K)=0.
  4399. ELSE
  4400. TRANF(K)=(totliq-WILT) &
  4401. /(REF-WILT)*DID
  4402. ENDIF
  4403. !-- uncomment next line for non-linear root distribution
  4404. !cc TRANF(k)=part(k)
  4405. TRANF(k)=TRANF(k)*FTEM
  4406. END DO
  4407. !-- TRANSUM - total for the rooting zone
  4408. transum=0.
  4409. DO K=1,NROOT
  4410. transum=transum+tranf(k)
  4411. END DO
  4412. ! RETURN
  4413. ! END
  4414. !-----------------------------------------------------------------
  4415. END SUBROUTINE TRANSF
  4416. !-----------------------------------------------------------------
  4417. SUBROUTINE VILKA(TN,D1,D2,PP,QS,TS,TT,NSTEP,ii,j,iland,isoil)
  4418. !--------------------------------------------------------------
  4419. !--- VILKA finds the solution of energy budget at the surface
  4420. !--- using table T,QS computed from Clausius-Klapeiron
  4421. !--------------------------------------------------------------
  4422. REAL, DIMENSION(1:4001), INTENT(IN ) :: TT
  4423. REAL, INTENT(IN ) :: TN,D1,D2,PP
  4424. INTEGER, INTENT(IN ) :: NSTEP,ii,j,iland,isoil
  4425. REAL, INTENT(OUT ) :: QS, TS
  4426. REAL :: F1,T1,T2,RN
  4427. INTEGER :: I,I1
  4428. I=(TN-1.7315E2)/.05+1
  4429. T1=173.1+FLOAT(I)*.05
  4430. F1=T1+D1*TT(I)-D2
  4431. I1=I-F1/(.05+D1*(TT(I+1)-TT(I)))
  4432. I=I1
  4433. IF(I.GT.4000.OR.I.LT.1) GOTO 1
  4434. 10 I1=I
  4435. T1=173.1+FLOAT(I)*.05
  4436. F1=T1+D1*TT(I)-D2
  4437. RN=F1/(.05+D1*(TT(I+1)-TT(I)))
  4438. I=I-INT(RN)
  4439. IF(I.GT.4000.OR.I.LT.1) GOTO 1
  4440. IF(I1.NE.I) GOTO 10
  4441. TS=T1-.05*RN
  4442. QS=(TT(I)+(TT(I)-TT(I+1))*RN)/PP
  4443. GOTO 20
  4444. 1 PRINT *,' AVOST IN VILKA '
  4445. ! WRITE(12,*)'AVOST',TN,D1,D2,PP,NSTEP
  4446. PRINT *,TN,D1,D2,PP,NSTEP,I,TT(i),ii,j,iland,isoil
  4447. CALL wrf_error_fatal (' AVOST IN VILKA ' )
  4448. 20 CONTINUE
  4449. ! RETURN
  4450. ! END
  4451. !-----------------------------------------------------------------------
  4452. END SUBROUTINE VILKA
  4453. !-----------------------------------------------------------------------
  4454. SUBROUTINE SOILVEGIN ( mosaic_lu,mosaic_soil,soilfrac,nscat, &
  4455. NLCAT,IVGTYP,ISLTYP,iswater,MYJ, &
  4456. IFOREST,lufrac,EMISS,PC,ZNT,LAI,QWRTZ, &
  4457. RHOCS,BCLH,DQM,KSAT,PSIS,QMIN,REF,WILT,I,J )
  4458. !************************************************************************
  4459. ! Set-up soil and vegetation Parameters in the case when
  4460. ! snow disappears during the forecast and snow parameters
  4461. ! shold be replaced by surface parameters according to
  4462. ! soil and vegetation types in this point.
  4463. !
  4464. ! Output:
  4465. !
  4466. !
  4467. ! Soil parameters:
  4468. ! DQM: MAX soil moisture content - MIN (m^3/m^3)
  4469. ! REF: Reference soil moisture (m^3/m^3)
  4470. ! WILT: Wilting PT soil moisture contents (m^3/m^3)
  4471. ! QMIN: Air dry soil moist content limits (m^3/m^3)
  4472. ! PSIS: SAT soil potential coefs. (m)
  4473. ! KSAT: SAT soil diffusivity/conductivity coefs. (m/s)
  4474. ! BCLH: Soil diffusivity/conductivity exponent.
  4475. !
  4476. ! ************************************************************************
  4477. IMPLICIT NONE
  4478. !---------------------------------------------------------------------------
  4479. integer, parameter :: nsoilclas=19
  4480. integer, parameter :: nvegclas=24+3
  4481. integer, parameter :: ilsnow=99
  4482. INTEGER, INTENT(IN ) :: nlcat, nscat, iswater, i, j
  4483. !--- soiltyp classification according to STATSGO(nclasses=16)
  4484. !
  4485. ! 1 SAND SAND
  4486. ! 2 LOAMY SAND LOAMY SAND
  4487. ! 3 SANDY LOAM SANDY LOAM
  4488. ! 4 SILT LOAM SILTY LOAM
  4489. ! 5 SILT SILTY LOAM
  4490. ! 6 LOAM LOAM
  4491. ! 7 SANDY CLAY LOAM SANDY CLAY LOAM
  4492. ! 8 SILTY CLAY LOAM SILTY CLAY LOAM
  4493. ! 9 CLAY LOAM CLAY LOAM
  4494. ! 10 SANDY CLAY SANDY CLAY
  4495. ! 11 SILTY CLAY SILTY CLAY
  4496. ! 12 CLAY LIGHT CLAY
  4497. ! 13 ORGANIC MATERIALS LOAM
  4498. ! 14 WATER
  4499. ! 15 BEDROCK
  4500. ! Bedrock is reclassified as class 14
  4501. ! 16 OTHER (land-ice)
  4502. ! 17 Playa
  4503. ! 18 Lava
  4504. ! 19 White Sand
  4505. !
  4506. !----------------------------------------------------------------------
  4507. REAL LQMA(nsoilclas),LRHC(nsoilclas), &
  4508. LPSI(nsoilclas),LQMI(nsoilclas), &
  4509. LBCL(nsoilclas),LKAS(nsoilclas), &
  4510. LWIL(nsoilclas),LREF(nsoilclas), &
  4511. DATQTZ(nsoilclas)
  4512. !-- LQMA Rawls et al.[1982]
  4513. ! DATA LQMA /0.417, 0.437, 0.453, 0.501, 0.486, 0.463, 0.398,
  4514. ! & 0.471, 0.464, 0.430, 0.479, 0.475, 0.439, 1.0, 0.20, 0.401/
  4515. !---
  4516. !-- Clapp, R. and G. Hornberger, 1978: Empirical equations for some soil
  4517. ! hydraulic properties, Water Resour. Res., 14, 601-604.
  4518. !-- Clapp et al. [1978]
  4519. DATA LQMA /0.395, 0.410, 0.435, 0.485, 0.485, 0.451, 0.420, &
  4520. 0.477, 0.476, 0.426, 0.492, 0.482, 0.451, 1.0, &
  4521. 0.20, 0.435, 0.468, 0.200, 0.339/
  4522. !-- LREF Rawls et al.[1982]
  4523. ! DATA LREF /0.091, 0.125, 0.207, 0.330, 0.360, 0.270, 0.255,
  4524. ! & 0.366, 0.318, 0.339, 0.387, 0.396, 0.329, 1.0, 0.108, 0.283/
  4525. !-- Clapp et al. [1978]
  4526. DATA LREF /0.174, 0.179, 0.249, 0.369, 0.369, 0.314, 0.299, &
  4527. 0.357, 0.391, 0.316, 0.409, 0.400, 0.314, 1., &
  4528. 0.1, 0.249, 0.454, 0.17, 0.236/
  4529. !-- LWIL Rawls et al.[1982]
  4530. ! DATA LWIL/0.033, 0.055, 0.095, 0.133, 0.133, 0.117, 0.148,
  4531. ! & 0.208, 0.197, 0.239, 0.250, 0.272, 0.066, 0.0, 0.006, 0.029/
  4532. !-- Clapp et al. [1978]
  4533. DATA LWIL/0.068, 0.075, 0.114, 0.179, 0.179, 0.155, 0.175, &
  4534. 0.218, 0.250, 0.219, 0.283, 0.286, 0.155, 0.0, &
  4535. 0.006, 0.114, 0.030, 0.006, 0.01/
  4536. ! DATA LQMI/0.010, 0.028, 0.047, 0.084, 0.084, 0.066, 0.067,
  4537. ! & 0.120, 0.103, 0.100, 0.126, 0.138, 0.066, 0.0, 0.006, 0.028/
  4538. !-- Carsel and Parrish [1988]
  4539. DATA LQMI/0.045, 0.057, 0.065, 0.067, 0.034, 0.078, 0.10, &
  4540. 0.089, 0.095, 0.10, 0.070, 0.068, 0.078, 0.0, &
  4541. 0.004, 0.065, 0.020, 0.004, 0.008/
  4542. !-- LPSI Cosby et al[1984]
  4543. ! DATA LPSI/0.060, 0.036, 0.141, 0.759, 0.759, 0.355, 0.135,
  4544. ! & 0.617, 0.263, 0.098, 0.324, 0.468, 0.355, 0.0, 0.069, 0.036/
  4545. ! & 0.617, 0.263, 0.098, 0.324, 0.468, 0.355, 0.0, 0.069, 0.036/
  4546. !-- Clapp et al. [1978]
  4547. DATA LPSI/0.121, 0.090, 0.218, 0.786, 0.786, 0.478, 0.299, &
  4548. 0.356, 0.630, 0.153, 0.490, 0.405, 0.478, 0.0, &
  4549. 0.121, 0.218, 0.468, 0.069, 0.069/
  4550. !-- LKAS Rawls et al.[1982]
  4551. ! DATA LKAS/5.83E-5, 1.70E-5, 7.19E-6, 1.89E-6, 1.89E-6,
  4552. ! & 3.67E-6, 1.19E-6, 4.17E-7, 6.39E-7, 3.33E-7, 2.50E-7,
  4553. ! & 1.67E-7, 3.38E-6, 0.0, 1.41E-4, 1.41E-5/
  4554. !-- Clapp et al. [1978]
  4555. DATA LKAS/1.76E-4, 1.56E-4, 3.47E-5, 7.20E-6, 7.20E-6, &
  4556. 6.95E-6, 6.30E-6, 1.70E-6, 2.45E-6, 2.17E-6, &
  4557. 1.03E-6, 1.28E-6, 6.95E-6, 0.0, 1.41E-4, &
  4558. 3.47E-5, 1.28E-6, 1.41E-4, 1.76E-4/
  4559. !-- LBCL Cosby et al [1984]
  4560. ! DATA LBCL/2.79, 4.26, 4.74, 5.33, 5.33, 5.25, 6.66,
  4561. ! & 8.72, 8.17, 10.73, 10.39, 11.55, 5.25, 0.0, 2.79, 4.26/
  4562. !-- Clapp et al. [1978]
  4563. DATA LBCL/4.05, 4.38, 4.90, 5.30, 5.30, 5.39, 7.12, &
  4564. 7.75, 8.52, 10.40, 10.40, 11.40, 5.39, 0.0, &
  4565. 4.05, 4.90, 11.55, 2.79, 2.79/
  4566. DATA LRHC /1.47,1.41,1.34,1.27,1.27,1.21,1.18,1.32,1.23, &
  4567. 1.18,1.15,1.09,1.21,4.18,2.03,2.10,1.09,2.03,1.47/
  4568. DATA DATQTZ/0.92,0.82,0.60,0.25,0.10,0.40,0.60,0.10,0.35, &
  4569. 0.52,0.10,0.25,0.00,0.,0.60,0.0,0.25,0.60,0.92/
  4570. !--------------------------------------------------------------------------
  4571. !
  4572. ! USGS Vegetation Types
  4573. !
  4574. ! 1: Urban and Built-Up Land
  4575. ! 2: Dryland Cropland and Pasture
  4576. ! 3: Irrigated Cropland and Pasture
  4577. ! 4: Mixed Dryland/Irrigated Cropland and Pasture
  4578. ! 5: Cropland/Grassland Mosaic
  4579. ! 6: Cropland/Woodland Mosaic
  4580. ! 7: Grassland
  4581. ! 8: Shrubland
  4582. ! 9: Mixed Shrubland/Grassland
  4583. ! 10: Savanna
  4584. ! 11: Deciduous Broadleaf Forest
  4585. ! 12: Deciduous Needleleaf Forest
  4586. ! 13: Evergreen Broadleaf Forest
  4587. ! 14: Evergreen Needleleaf Fores
  4588. ! 15: Mixed Forest
  4589. ! 16: Water Bodies
  4590. ! 17: Herbaceous Wetland
  4591. ! 18: Wooded Wetland
  4592. ! 19: Barren or Sparsely Vegetated
  4593. ! 20: Herbaceous Tundra
  4594. ! 21: Wooded Tundra
  4595. ! 22: Mixed Tundra
  4596. ! 23: Bare Ground Tundra
  4597. ! 24: Snow or Ice
  4598. !
  4599. ! 25: Playa
  4600. ! 26: Lava
  4601. ! 27: White Sand
  4602. !---- Below are the arrays for the vegetation parameters
  4603. REAL LALB(nvegclas),LMOI(nvegclas),LEMI(nvegclas), &
  4604. LROU(nvegclas),LTHI(nvegclas),LSIG(nvegclas), &
  4605. LPC(nvegclas)
  4606. !************************************************************************
  4607. !---- vegetation parameters
  4608. !
  4609. !-- USGS model
  4610. !
  4611. DATA LALB/.18,.17,.18,.18,.18,.16,.19,.22,.20,.20,.16,.14, &
  4612. .12,.12,.13,.08,.14,.14,.25,.15,.15,.15,.25,.55, &
  4613. .30,.16,.60 /
  4614. DATA LEMI/.88,4*.92,.93,.92,.88,.9,.92,.93,.94, &
  4615. .95,.95,.94,.98,.95,.95,.85,.92,.93,.92,.85,.95, &
  4616. .85,.85,.90 /
  4617. !-- Roughness length is changed for forests and some others
  4618. ! DATA LROU/.5,.06,.075,.065,.05,.2,.075,.1,.11,.15,.8,.85, &
  4619. ! 2.0,1.0,.563,.0001,.2,.4,.05,.1,.15,.1,.065,.05/
  4620. DATA LROU/.5,.06,.075,.065,.05,.2,.075,.1,.11,.15,.5,.5, &
  4621. .5,.5,.5,.0001,.2,.4,.05,.1,.15,.1,.065,.05, &
  4622. .01,.15,.01 /
  4623. DATA LMOI/.1,.3,.5,.25,.25,.35,.15,.1,.15,.15,.3,.3, &
  4624. .5,.3,.3,1.,.6,.35,.02,.5,.5,.5,.02,.95,.40,.50,.40/
  4625. !
  4626. !---- still needs to be corrected
  4627. !
  4628. ! DATA LPC/ 15*.8,0.,.8,.8,.5,.5,.5,.5,.5,.0/
  4629. DATA LPC /0.4,0.3,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,5*0.55,0.,0.55,0.55, &
  4630. 0.3,0.3,0.4,0.4,0.3,0.,.3,0.,0./
  4631. ! used in RUC DATA LPC /0.6,6*0.8,0.7,0.75,6*0.8,0.,0.8,0.8, &
  4632. ! 0.5,0.7,0.6,0.7,0.5,0./
  4633. !***************************************************************************
  4634. INTEGER :: &
  4635. IVGTYP, &
  4636. ISLTYP
  4637. INTEGER, INTENT(IN ) :: mosaic_lu, mosaic_soil
  4638. LOGICAL, INTENT(IN ) :: myj
  4639. REAL, DIMENSION( 1:NLCAT ), INTENT(IN):: LUFRAC
  4640. REAL, DIMENSION( 1:NSCAT ), INTENT(IN):: SOILFRAC
  4641. REAL , &
  4642. INTENT ( OUT) :: pc
  4643. REAL , &
  4644. INTENT (INOUT ) :: emiss, &
  4645. lai, &
  4646. znt
  4647. !--- soil properties
  4648. REAL , &
  4649. INTENT( OUT) :: RHOCS, &
  4650. BCLH, &
  4651. DQM, &
  4652. KSAT, &
  4653. PSIS, &
  4654. QMIN, &
  4655. QWRTZ, &
  4656. REF, &
  4657. WILT
  4658. INTEGER, INTENT ( OUT) :: iforest
  4659. ! INTEGER, DIMENSION( 1:(lucats) ) , &
  4660. ! INTENT ( OUT) :: iforest
  4661. ! INTEGER, DIMENSION( 1:50 ) :: if1
  4662. INTEGER :: kstart, kfin, lstart, lfin
  4663. INTEGER :: k
  4664. REAL :: area
  4665. !***********************************************************************
  4666. ! DATA ZS1/0.0,0.05,0.20,0.40,1.6,3.0/ ! o - levels in soil
  4667. ! DATA ZS2/0.0,0.025,0.125,0.30,1.,2.3/ ! x - levels in soil
  4668. ! DATA IF1/12*0,1,1,1,12*0/
  4669. ! do k=1,LUCATS
  4670. ! iforest(k)=if1(k)
  4671. ! enddo
  4672. iforest = IFORTBL(IVGTYP)
  4673. EMISS = 0.
  4674. ZNT = 0.
  4675. PC = 0.
  4676. LAI = 0.
  4677. AREA = 0.
  4678. !-- mosaic approach to landuse in the grid box
  4679. if(mosaic_lu == 1) then
  4680. do k = 1,nlcat
  4681. AREA = AREA + lufrac(k)
  4682. EMISS = EMISS+ LEMITBL(K)*lufrac(k)
  4683. ZNT = ZNT + Z0TBL(K)*lufrac(k)
  4684. LAI = LAI + LAITBL(K)*lufrac(k)
  4685. PC = PC + PCTBL(K)*lufrac(k)
  4686. enddo
  4687. if (area.gt.1.) area=1.
  4688. if (area <= 0.) then
  4689. print *,'Bad area of grid box', area
  4690. stop
  4691. endif
  4692. ! if(i.eq.222.and.j.eq.335) then
  4693. ! print *,'area=',area,i,j,ivgtyp,nlcat,(lufrac(k),k=1,nlcat),EMISS,ZNT,LAI,PC
  4694. ! endif
  4695. EMISS = EMISS/AREA
  4696. ZNT = ZNT/AREA
  4697. LAI = LAI/AREA
  4698. PC = PC /AREA
  4699. ! EMISS = LEMI(IVGTYP)
  4700. else
  4701. EMISS = LEMITBL(IVGTYP)
  4702. ZNT = Z0TBL(IVGTYP)
  4703. PC = PCTBL(IVGTYP)
  4704. LAI = LAITBL(IVGTYP)
  4705. endif
  4706. ! parameters from SOILPARM.TBL
  4707. RHOCS = 0.
  4708. BCLH = 0.
  4709. DQM = 0.
  4710. KSAT = 0.
  4711. PSIS = 0.
  4712. QMIN = 0.
  4713. REF = 0.
  4714. WILT = 0.
  4715. QWRTZ = 0.
  4716. AREA = 0.
  4717. ! mosaic approach
  4718. if(mosaic_soil == 1 ) then
  4719. do k = 1, nscat
  4720. if(k.ne.14) then
  4721. !exclude watrer points from this loop
  4722. AREA = AREA + soilfrac(k)
  4723. RHOCS = RHOCS + HC(k)*1.E6*soilfrac(k)
  4724. BCLH = BCLH + BB(K)*soilfrac(k)
  4725. DQM = DQM + (MAXSMC(K)- &
  4726. DRYSMC(K))*soilfrac(k)
  4727. KSAT = KSAT + SATDK(K)*soilfrac(k)
  4728. PSIS = PSIS - SATPSI(K)*soilfrac(k)
  4729. QMIN = QMIN + DRYSMC(K)*soilfrac(k)
  4730. REF = REF + REFSMC(K)*soilfrac(k)
  4731. WILT = WILT + WLTSMC(K)*soilfrac(k)
  4732. QWRTZ = QWRTZ + QTZ(K)*soilfrac(k)
  4733. endif
  4734. enddo
  4735. if (area.gt.1.) area=1.
  4736. if (area <= 0.) then
  4737. ! area = 0. for water points
  4738. ! print *,'Area of a grid box', area, 'iswater = ',iswater
  4739. RHOCS = HC(ISLTYP)*1.E6
  4740. BCLH = BB(ISLTYP)
  4741. DQM = MAXSMC(ISLTYP)- &
  4742. DRYSMC(ISLTYP)
  4743. KSAT = SATDK(ISLTYP)
  4744. PSIS = - SATPSI(ISLTYP)
  4745. QMIN = DRYSMC(ISLTYP)
  4746. REF = REFSMC(ISLTYP)
  4747. WILT = WLTSMC(ISLTYP)
  4748. QWRTZ = QTZ(ISLTYP)
  4749. else
  4750. RHOCS = RHOCS/AREA
  4751. BCLH = BCLH/AREA
  4752. DQM = DQM/AREA
  4753. KSAT = KSAT/AREA
  4754. PSIS = PSIS/AREA
  4755. QMIN = QMIN/AREA
  4756. REF = REF/AREA
  4757. WILT = WILT/AREA
  4758. QWRTZ = QWRTZ/AREA
  4759. endif
  4760. ! dominant category approach
  4761. else
  4762. RHOCS = HC(ISLTYP)*1.E6
  4763. BCLH = BB(ISLTYP)
  4764. DQM = MAXSMC(ISLTYP)- &
  4765. DRYSMC(ISLTYP)
  4766. KSAT = SATDK(ISLTYP)
  4767. PSIS = - SATPSI(ISLTYP)
  4768. QMIN = DRYSMC(ISLTYP)
  4769. REF = REFSMC(ISLTYP)
  4770. WILT = WLTSMC(ISLTYP)
  4771. QWRTZ = QTZ(ISLTYP)
  4772. endif
  4773. ! parameters from the look-up tables
  4774. ! BCLH = LBCL(ISLTYP)
  4775. ! DQM = LQMA(ISLTYP)- &
  4776. ! LQMI(ISLTYP)
  4777. ! KSAT = LKAS(ISLTYP)
  4778. ! PSIS = - LPSI(ISLTYP)
  4779. ! QMIN = LQMI(ISLTYP)
  4780. ! REF = LREF(ISLTYP)
  4781. ! WILT = LWIL(ISLTYP)
  4782. ! QWRTZ = DATQTZ(ISLTYP)
  4783. !--------------------------------------------------------------------------
  4784. END SUBROUTINE SOILVEGIN
  4785. !--------------------------------------------------------------------------
  4786. SUBROUTINE RUCLSMINIT( SH2O,SMFR3D,TSLB,SMOIS,ISLTYP,IVGTYP, &
  4787. mminlu, XICE,mavail,nzs, iswater, isice, &
  4788. znt, restart, allowed_to_read , &
  4789. ids,ide, jds,jde, kds,kde, &
  4790. ims,ime, jms,jme, kms,kme, &
  4791. its,ite, jts,jte, kts,kte )
  4792. #ifdef WRF_CHEM
  4793. USE module_data_gocart_dust
  4794. #endif
  4795. IMPLICIT NONE
  4796. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
  4797. ims,ime, jms,jme, kms,kme, &
  4798. its,ite, jts,jte, kts,kte, &
  4799. nzs, iswater, isice
  4800. CHARACTER(LEN=*), INTENT(IN ) :: MMINLU
  4801. REAL, DIMENSION( ims:ime, 1:nzs, jms:jme ) , &
  4802. INTENT(IN) :: TSLB, &
  4803. SMOIS
  4804. INTEGER, DIMENSION( ims:ime, jms:jme ) , &
  4805. INTENT(INOUT) :: ISLTYP,IVGTYP
  4806. REAL, DIMENSION( ims:ime, 1:nzs, jms:jme ) , &
  4807. INTENT(INOUT) :: SMFR3D, &
  4808. SH2O
  4809. REAL, DIMENSION( ims:ime, jms:jme ) , &
  4810. INTENT(INOUT) :: XICE,MAVAIL
  4811. REAL, DIMENSION( ims:ime, jms:jme ) , &
  4812. INTENT( OUT) :: znt
  4813. REAL, DIMENSION ( 1:nzs ) :: SOILIQW
  4814. LOGICAL , INTENT(IN) :: restart, allowed_to_read
  4815. !
  4816. INTEGER :: I,J,L,itf,jtf
  4817. REAL :: RIW,XLMELT,TLN,DQM,REF,PSIS,QMIN,BCLH
  4818. character*8 :: MMINLURUC, MMINSL
  4819. INTEGER :: errflag
  4820. ! itf=min0(ite,ide-1)
  4821. ! jtf=min0(jte,jde-1)
  4822. RIW=900.*1.e-3
  4823. XLMELT=3.35E+5
  4824. ! initialize three LSM related tables
  4825. IF ( allowed_to_read ) THEN
  4826. CALL wrf_message( 'INITIALIZE THREE LSM RELATED TABLES' )
  4827. if(mminlu == 'USGS') then
  4828. MMINLURUC='USGS-RUC'
  4829. elseif(mminlu == 'MODIS') then
  4830. MMINLURUC='MODI-RUC'
  4831. endif
  4832. MMINSL='STAS-RUC'
  4833. ! CALL RUCLSM_PARM_INIT
  4834. print *,'RUCLSMINIT uses ',mminluruc
  4835. call RUCLSM_SOILVEGPARM( MMINLURUC, MMINSL)
  4836. ENDIF
  4837. #ifdef WRF_CHEM
  4838. !
  4839. ! need this parameter for dust parameterization in wrf/chem
  4840. !
  4841. do I=1,NSLTYPE
  4842. porosity(i)=maxsmc(i)
  4843. drypoint(i)=drysmc(i)
  4844. enddo
  4845. #endif
  4846. IF(.not.restart)THEN
  4847. itf=min0(ite,ide-1)
  4848. jtf=min0(jte,jde-1)
  4849. errflag = 0
  4850. DO j = jts,jtf
  4851. DO i = its,itf
  4852. IF ( ISLTYP( i,j ) .LT. 1 ) THEN
  4853. errflag = 1
  4854. WRITE(err_message,*)"module_sf_ruclsm.F: lsminit: out of range ISLTYP ",i,j,ISLTYP( i,j )
  4855. CALL wrf_message(err_message)
  4856. ENDIF
  4857. ENDDO
  4858. ENDDO
  4859. IF ( errflag .EQ. 1 ) THEN
  4860. CALL wrf_error_fatal( "module_sf_ruclsm.F: lsminit: out of range value "// &
  4861. "of ISLTYP. Is this field in the input?" )
  4862. ENDIF
  4863. DO J=jts,jtf
  4864. DO I=its,itf
  4865. ZNT(I,J) = Z0TBL(IVGTYP(I,J))
  4866. ! CALL SOILIN ( ISLTYP(I,J), DQM, REF, PSIS, QMIN, BCLH )
  4867. !--- Computation of volumetric content of ice in soil
  4868. !--- and initialize MAVAIL
  4869. DQM = MAXSMC (ISLTYP(I,J)) - &
  4870. DRYSMC (ISLTYP(I,J))
  4871. REF = REFSMC (ISLTYP(I,J))
  4872. PSIS = - SATPSI (ISLTYP(I,J))
  4873. QMIN = DRYSMC (ISLTYP(I,J))
  4874. BCLH = BB (ISLTYP(I,J))
  4875. !!! IF (.not.restart) THEN
  4876. IF(xice(i,j).gt.0.) THEN
  4877. !-- for ice
  4878. DO L=1,NZS
  4879. smfr3d(i,l,j)=1.
  4880. sh2o(i,l,j)=0.
  4881. mavail(i,j) = 1.
  4882. ENDDO
  4883. ELSE
  4884. if(isltyp(i,j).ne.14 ) then
  4885. !-- land
  4886. mavail(i,j) = max(0.00001,min(1.,smois(i,1,j)/(dqm+qmin)))
  4887. ! mavail(i,j) = max(0.00001,min(1.,smois(i,1,j)/(ref-qmin)))
  4888. DO L=1,NZS
  4889. !-- for land points initialize soil ice
  4890. tln=log(TSLB(i,l,j)/273.15)
  4891. if(tln.lt.0.) then
  4892. soiliqw(l)=(dqm+qmin)*(XLMELT* &
  4893. (tslb(i,l,j)-273.15)/tslb(i,l,j)/9.81/psis) &
  4894. **(-1./bclh)
  4895. ! **(-1./bclh)-qmin
  4896. soiliqw(l)=max(0.,soiliqw(l))
  4897. soiliqw(l)=min(soiliqw(l),smois(i,l,j))
  4898. sh2o(i,l,j)=soiliqw(l)
  4899. smfr3d(i,l,j)=(smois(i,l,j)-soiliqw(l))/RIW
  4900. else
  4901. smfr3d(i,l,j)=0.
  4902. sh2o(i,l,j)=smois(i,l,j)
  4903. endif
  4904. ENDDO
  4905. else
  4906. !-- for water ISLTYP=14
  4907. DO L=1,NZS
  4908. smfr3d(i,l,j)=0.
  4909. sh2o(i,l,j)=1.
  4910. mavail(i,j) = 1.
  4911. ENDDO
  4912. endif
  4913. ENDIF
  4914. ENDDO
  4915. ENDDO
  4916. ENDIF
  4917. END SUBROUTINE ruclsminit
  4918. !
  4919. !-----------------------------------------------------------------
  4920. ! SUBROUTINE RUCLSM_PARM_INIT
  4921. !-----------------------------------------------------------------
  4922. ! character*9 :: MMINLU, MMINSL
  4923. ! MMINLU='MODIS-RUC'
  4924. ! MMINLU='USGS-RUC'
  4925. ! MMINSL='STAS-RUC'
  4926. ! call RUCLSM_SOILVEGPARM( MMINLU, MMINSL)
  4927. !-----------------------------------------------------------------
  4928. ! END SUBROUTINE RUCLSM_PARM_INIT
  4929. !-----------------------------------------------------------------
  4930. !-----------------------------------------------------------------
  4931. SUBROUTINE RUCLSM_SOILVEGPARM( MMINLURUC, MMINSL)
  4932. !-----------------------------------------------------------------
  4933. IMPLICIT NONE
  4934. integer :: LUMATCH, IINDEX, LC, NUM_SLOPE
  4935. integer :: ierr
  4936. INTEGER , PARAMETER :: OPEN_OK = 0
  4937. character*8 :: MMINLURUC, MMINSL
  4938. character*128 :: mess , message, vege_parm_string
  4939. logical, external :: wrf_dm_on_monitor
  4940. !-----SPECIFY VEGETATION RELATED CHARACTERISTICS :
  4941. ! ALBBCK: SFC albedo (in percentage)
  4942. ! Z0: Roughness length (m)
  4943. ! LEMI: Emissivity
  4944. ! PC: Plant coefficient for transpiration function
  4945. ! -- the rest of the parameters are read in but not used currently
  4946. ! SHDFAC: Green vegetation fraction (in percentage)
  4947. ! Note: The ALBEDO, Z0, and SHDFAC values read from the following table
  4948. ! ALBEDO, amd Z0 are specified in LAND-USE TABLE; and SHDFAC is
  4949. ! the monthly green vegetation data
  4950. ! CMXTBL: MAX CNPY Capacity (m)
  4951. ! RSMIN: Mimimum stomatal resistance (s m-1)
  4952. ! RSMAX: Max. stomatal resistance (s m-1)
  4953. ! RGL: Parameters used in radiation stress function
  4954. ! HS: Parameter used in vapor pressure deficit functio
  4955. ! TOPT: Optimum transpiration air temperature. (K)
  4956. ! CMCMAX: Maximum canopy water capacity
  4957. ! CFACTR: Parameter used in the canopy inteception calculati
  4958. ! SNUP: Threshold snow depth (in water equivalent m) that
  4959. ! implies 100% snow cover
  4960. ! LAI: Leaf area index (dimensionless)
  4961. ! MAXALB: Upper bound on maximum albedo over deep snow
  4962. !
  4963. !-----READ IN VEGETAION PROPERTIES FROM VEGPARM.TBL
  4964. !
  4965. IF ( wrf_dm_on_monitor() ) THEN
  4966. OPEN(19, FILE='VEGPARM.TBL',FORM='FORMATTED',STATUS='OLD',IOSTAT=ierr)
  4967. IF(ierr .NE. OPEN_OK ) THEN
  4968. WRITE(message,FMT='(A)') &
  4969. 'module_sf_ruclsm.F: soil_veg_gen_parm: failure opening VEGPARM.TBL'
  4970. CALL wrf_error_fatal ( message )
  4971. END IF
  4972. WRITE ( mess, * ) 'INPUT VEGPARM FOR ',MMINLURUC
  4973. CALL wrf_message( mess )
  4974. LUMATCH=0
  4975. 2000 FORMAT (A8)
  4976. READ (19,'(A)') vege_parm_string
  4977. outer : DO
  4978. READ (19,2000,END=2002)LUTYPE
  4979. READ (19,*)LUCATS,IINDEX
  4980. WRITE( mess , * ) 'VEGPARM FOR ',LUTYPE,' FOUND', LUCATS,' CATEGORIES'
  4981. CALL wrf_message( mess )
  4982. IF(LUTYPE.NE.MMINLURUC)THEN ! Skip over the undesired table
  4983. write ( mess , * ) 'Skipping ', LUTYPE, ' table'
  4984. CALL wrf_message( mess )
  4985. DO LC=1,LUCATS
  4986. READ (19,*)
  4987. ENDDO
  4988. inner : DO ! Find the next "Vegetation Parameters"
  4989. READ (19,'(A)',END=2002) vege_parm_string
  4990. IF (TRIM(vege_parm_string) .EQ. "Vegetation Parameters") THEN
  4991. EXIT inner
  4992. END IF
  4993. ENDDO inner
  4994. ELSE
  4995. LUMATCH=1
  4996. write ( mess , * ) 'Found ', LUTYPE, ' table'
  4997. CALL wrf_message( mess )
  4998. EXIT outer ! Found the table, read the data
  4999. END IF
  5000. ENDDO outer
  5001. IF (LUMATCH == 1) then
  5002. write ( mess , * ) 'Reading ',LUTYPE,' table'
  5003. CALL wrf_message( mess )
  5004. DO LC=1,LUCATS
  5005. READ (19,*)IINDEX,ALBTBL(LC),Z0TBL(LC),LEMITBL(LC),PCTBL(LC), &
  5006. SHDTBL(LC),IFORTBL(LC),RSTBL(LC),RGLTBL(LC), &
  5007. HSTBL(LC),SNUPTBL(LC),LAITBL(LC),MAXALB(LC)
  5008. ENDDO
  5009. !
  5010. READ (19,*)
  5011. READ (19,*)TOPT_DATA
  5012. READ (19,*)
  5013. READ (19,*)CMCMAX_DATA
  5014. READ (19,*)
  5015. READ (19,*)CFACTR_DATA
  5016. READ (19,*)
  5017. READ (19,*)RSMAX_DATA
  5018. READ (19,*)
  5019. READ (19,*)BARE
  5020. READ (19,*)
  5021. READ (19,*)NATURAL
  5022. ENDIF
  5023. 2002 CONTINUE
  5024. CLOSE (19)
  5025. !-----
  5026. IF ( wrf_at_debug_level(LSMRUC_DBG_LVL) ) THEN
  5027. print *,' LEMITBL, PCTBL, Z0TBL, LAITBL --->', LEMITBL, PCTBL, Z0TBL, LAITBL
  5028. ENDIF
  5029. IF (LUMATCH == 0) then
  5030. CALL wrf_error_fatal ("Land Use Dataset '"//MMINLURUC//"' not found in VEGPARM.TBL.")
  5031. ENDIF
  5032. END IF
  5033. CALL wrf_dm_bcast_string ( LUTYPE , 8 )
  5034. CALL wrf_dm_bcast_integer ( LUCATS , 1 )
  5035. CALL wrf_dm_bcast_integer ( IINDEX , 1 )
  5036. CALL wrf_dm_bcast_integer ( LUMATCH , 1 )
  5037. CALL wrf_dm_bcast_real ( ALBTBL , NLUS )
  5038. CALL wrf_dm_bcast_real ( Z0TBL , NLUS )
  5039. CALL wrf_dm_bcast_real ( LEMITBL , NLUS )
  5040. CALL wrf_dm_bcast_real ( PCTBL , NLUS )
  5041. CALL wrf_dm_bcast_real ( SHDTBL , NLUS )
  5042. CALL wrf_dm_bcast_real ( IFORTBL , NLUS )
  5043. CALL wrf_dm_bcast_real ( RSTBL , NLUS )
  5044. CALL wrf_dm_bcast_real ( RGLTBL , NLUS )
  5045. CALL wrf_dm_bcast_real ( HSTBL , NLUS )
  5046. CALL wrf_dm_bcast_real ( SNUPTBL , NLUS )
  5047. CALL wrf_dm_bcast_real ( LAITBL , NLUS )
  5048. CALL wrf_dm_bcast_real ( MAXALB , NLUS )
  5049. CALL wrf_dm_bcast_real ( TOPT_DATA , 1 )
  5050. CALL wrf_dm_bcast_real ( CMCMAX_DATA , 1 )
  5051. CALL wrf_dm_bcast_real ( CFACTR_DATA , 1 )
  5052. CALL wrf_dm_bcast_real ( RSMAX_DATA , 1 )
  5053. CALL wrf_dm_bcast_integer ( BARE , 1 )
  5054. !
  5055. !-----READ IN SOIL PROPERTIES FROM SOILPARM.TBL
  5056. !
  5057. IF ( wrf_dm_on_monitor() ) THEN
  5058. OPEN(19, FILE='SOILPARM.TBL',FORM='FORMATTED',STATUS='OLD',IOSTAT=ierr)
  5059. IF(ierr .NE. OPEN_OK ) THEN
  5060. WRITE(message,FMT='(A)') &
  5061. 'module_sf_ruclsm.F: soil_veg_gen_parm: failure opening SOILPARM.TBL'
  5062. CALL wrf_error_fatal ( message )
  5063. END IF
  5064. WRITE(mess,*) 'INPUT SOIL TEXTURE CLASSIFICATION = ',MMINSL
  5065. CALL wrf_message( mess )
  5066. LUMATCH=0
  5067. READ (19,*)
  5068. READ (19,2000,END=2003)SLTYPE
  5069. READ (19,*)SLCATS,IINDEX
  5070. IF(SLTYPE.NE.MMINSL)THEN
  5071. DO LC=1,SLCATS
  5072. READ (19,*) IINDEX,BB(LC),DRYSMC(LC),HC(LC),MAXSMC(LC),&
  5073. REFSMC(LC),SATPSI(LC),SATDK(LC), SATDW(LC), &
  5074. WLTSMC(LC), QTZ(LC)
  5075. ENDDO
  5076. ENDIF
  5077. READ (19,*)
  5078. READ (19,2000,END=2003)SLTYPE
  5079. READ (19,*)SLCATS,IINDEX
  5080. IF(SLTYPE.EQ.MMINSL)THEN
  5081. WRITE( mess , * ) 'SOIL TEXTURE CLASSIFICATION = ',SLTYPE,' FOUND', &
  5082. SLCATS,' CATEGORIES'
  5083. CALL wrf_message ( mess )
  5084. LUMATCH=1
  5085. ENDIF
  5086. IF(SLTYPE.EQ.MMINSL)THEN
  5087. DO LC=1,SLCATS
  5088. READ (19,*) IINDEX,BB(LC),DRYSMC(LC),HC(LC),MAXSMC(LC),&
  5089. REFSMC(LC),SATPSI(LC),SATDK(LC), SATDW(LC), &
  5090. WLTSMC(LC), QTZ(LC)
  5091. ENDDO
  5092. ENDIF
  5093. 2003 CONTINUE
  5094. CLOSE (19)
  5095. ENDIF
  5096. CALL wrf_dm_bcast_integer ( LUMATCH , 1 )
  5097. CALL wrf_dm_bcast_string ( SLTYPE , 8 )
  5098. CALL wrf_dm_bcast_string ( MMINSL , 8 ) ! since this is reset above, see oct2 ^
  5099. CALL wrf_dm_bcast_integer ( SLCATS , 1 )
  5100. CALL wrf_dm_bcast_integer ( IINDEX , 1 )
  5101. CALL wrf_dm_bcast_real ( BB , NSLTYPE )
  5102. CALL wrf_dm_bcast_real ( DRYSMC , NSLTYPE )
  5103. CALL wrf_dm_bcast_real ( HC , NSLTYPE )
  5104. CALL wrf_dm_bcast_real ( MAXSMC , NSLTYPE )
  5105. CALL wrf_dm_bcast_real ( REFSMC , NSLTYPE )
  5106. CALL wrf_dm_bcast_real ( SATPSI , NSLTYPE )
  5107. CALL wrf_dm_bcast_real ( SATDK , NSLTYPE )
  5108. CALL wrf_dm_bcast_real ( SATDW , NSLTYPE )
  5109. CALL wrf_dm_bcast_real ( WLTSMC , NSLTYPE )
  5110. CALL wrf_dm_bcast_real ( QTZ , NSLTYPE )
  5111. IF(LUMATCH.EQ.0)THEN
  5112. CALL wrf_message( 'SOIl TEXTURE IN INPUT FILE DOES NOT ' )
  5113. CALL wrf_message( 'MATCH SOILPARM TABLE' )
  5114. CALL wrf_error_fatal ( 'INCONSISTENT OR MISSING SOILPARM FILE' )
  5115. ENDIF
  5116. !
  5117. !-----READ IN GENERAL PARAMETERS FROM GENPARM.TBL
  5118. !
  5119. IF ( wrf_dm_on_monitor() ) THEN
  5120. OPEN(19, FILE='GENPARM.TBL',FORM='FORMATTED',STATUS='OLD',IOSTAT=ierr)
  5121. IF(ierr .NE. OPEN_OK ) THEN
  5122. WRITE(message,FMT='(A)') &
  5123. 'module_sf_ruclsm.F: soil_veg_gen_parm: failure opening GENPARM.TBL'
  5124. CALL wrf_error_fatal ( message )
  5125. END IF
  5126. READ (19,*)
  5127. READ (19,*)
  5128. READ (19,*) NUM_SLOPE
  5129. SLPCATS=NUM_SLOPE
  5130. DO LC=1,SLPCATS
  5131. READ (19,*)SLOPE_DATA(LC)
  5132. ENDDO
  5133. READ (19,*)
  5134. READ (19,*)SBETA_DATA
  5135. READ (19,*)
  5136. READ (19,*)FXEXP_DATA
  5137. READ (19,*)
  5138. READ (19,*)CSOIL_DATA
  5139. READ (19,*)
  5140. READ (19,*)SALP_DATA
  5141. READ (19,*)
  5142. READ (19,*)REFDK_DATA
  5143. READ (19,*)
  5144. READ (19,*)REFKDT_DATA
  5145. READ (19,*)
  5146. READ (19,*)FRZK_DATA
  5147. READ (19,*)
  5148. READ (19,*)ZBOT_DATA
  5149. READ (19,*)
  5150. READ (19,*)CZIL_DATA
  5151. READ (19,*)
  5152. READ (19,*)SMLOW_DATA
  5153. READ (19,*)
  5154. READ (19,*)SMHIGH_DATA
  5155. CLOSE (19)
  5156. ENDIF
  5157. CALL wrf_dm_bcast_integer ( NUM_SLOPE , 1 )
  5158. CALL wrf_dm_bcast_integer ( SLPCATS , 1 )
  5159. CALL wrf_dm_bcast_real ( SLOPE_DATA , NSLOPE )
  5160. CALL wrf_dm_bcast_real ( SBETA_DATA , 1 )
  5161. CALL wrf_dm_bcast_real ( FXEXP_DATA , 1 )
  5162. CALL wrf_dm_bcast_real ( CSOIL_DATA , 1 )
  5163. CALL wrf_dm_bcast_real ( SALP_DATA , 1 )
  5164. CALL wrf_dm_bcast_real ( REFDK_DATA , 1 )
  5165. CALL wrf_dm_bcast_real ( REFKDT_DATA , 1 )
  5166. CALL wrf_dm_bcast_real ( FRZK_DATA , 1 )
  5167. CALL wrf_dm_bcast_real ( ZBOT_DATA , 1 )
  5168. CALL wrf_dm_bcast_real ( CZIL_DATA , 1 )
  5169. CALL wrf_dm_bcast_real ( SMLOW_DATA , 1 )
  5170. CALL wrf_dm_bcast_real ( SMHIGH_DATA , 1 )
  5171. !-----------------------------------------------------------------
  5172. END SUBROUTINE RUCLSM_SOILVEGPARM
  5173. !-----------------------------------------------------------------
  5174. SUBROUTINE SOILIN (ISLTYP, DQM, REF, PSIS, QMIN, BCLH )
  5175. !--- soiltyp classification according to STATSGO(nclasses=16)
  5176. !
  5177. ! 1 SAND SAND
  5178. ! 2 LOAMY SAND LOAMY SAND
  5179. ! 3 SANDY LOAM SANDY LOAM
  5180. ! 4 SILT LOAM SILTY LOAM
  5181. ! 5 SILT SILTY LOAM
  5182. ! 6 LOAM LOAM
  5183. ! 7 SANDY CLAY LOAM SANDY CLAY LOAM
  5184. ! 8 SILTY CLAY LOAM SILTY CLAY LOAM
  5185. ! 9 CLAY LOAM CLAY LOAM
  5186. ! 10 SANDY CLAY SANDY CLAY
  5187. ! 11 SILTY CLAY SILTY CLAY
  5188. ! 12 CLAY LIGHT CLAY
  5189. ! 13 ORGANIC MATERIALS LOAM
  5190. ! 14 WATER
  5191. ! 15 BEDROCK
  5192. ! Bedrock is reclassified as class 14
  5193. ! 16 OTHER (land-ice)
  5194. ! extra classes from Fei Chen
  5195. ! 17 Playa
  5196. ! 18 Lava
  5197. ! 19 White Sand
  5198. !
  5199. !----------------------------------------------------------------------
  5200. integer, parameter :: nsoilclas=19
  5201. integer, intent ( in) :: isltyp
  5202. real, intent ( out) :: dqm,ref,qmin,psis
  5203. REAL LQMA(nsoilclas),LREF(nsoilclas),LBCL(nsoilclas), &
  5204. LPSI(nsoilclas),LQMI(nsoilclas)
  5205. !-- LQMA Rawls et al.[1982]
  5206. ! DATA LQMA /0.417, 0.437, 0.453, 0.501, 0.486, 0.463, 0.398,
  5207. ! & 0.471, 0.464, 0.430, 0.479, 0.475, 0.439, 1.0, 0.20, 0.401/
  5208. !---
  5209. !-- Clapp, R. and G. Hornberger, Empirical equations for some soil
  5210. ! hydraulic properties, Water Resour. Res., 14,601-604,1978.
  5211. !-- Clapp et al. [1978]
  5212. DATA LQMA /0.395, 0.410, 0.435, 0.485, 0.485, 0.451, 0.420, &
  5213. 0.477, 0.476, 0.426, 0.492, 0.482, 0.451, 1.0, &
  5214. 0.20, 0.435, 0.468, 0.200, 0.339/
  5215. !-- Clapp et al. [1978]
  5216. DATA LREF /0.174, 0.179, 0.249, 0.369, 0.369, 0.314, 0.299, &
  5217. 0.357, 0.391, 0.316, 0.409, 0.400, 0.314, 1., &
  5218. 0.1, 0.249, 0.454, 0.17, 0.236/
  5219. !-- Carsel and Parrish [1988]
  5220. DATA LQMI/0.045, 0.057, 0.065, 0.067, 0.034, 0.078, 0.10, &
  5221. 0.089, 0.095, 0.10, 0.070, 0.068, 0.078, 0.0, &
  5222. 0.004, 0.065, 0.020, 0.004, 0.008/
  5223. !-- Clapp et al. [1978]
  5224. DATA LPSI/0.121, 0.090, 0.218, 0.786, 0.786, 0.478, 0.299, &
  5225. 0.356, 0.630, 0.153, 0.490, 0.405, 0.478, 0.0, &
  5226. 0.121, 0.218, 0.468, 0.069, 0.069/
  5227. !-- Clapp et al. [1978]
  5228. DATA LBCL/4.05, 4.38, 4.90, 5.30, 5.30, 5.39, 7.12, &
  5229. 7.75, 8.52, 10.40, 10.40, 11.40, 5.39, 0.0, &
  5230. 4.05, 4.90, 11.55, 2.79, 2.79/
  5231. DQM = LQMA(ISLTYP)- &
  5232. LQMI(ISLTYP)
  5233. REF = LREF(ISLTYP)
  5234. PSIS = - LPSI(ISLTYP)
  5235. QMIN = LQMI(ISLTYP)
  5236. BCLH = LBCL(ISLTYP)
  5237. END SUBROUTINE SOILIN
  5238. END MODULE module_sf_ruclsm